Skip to content

V0.9.2 - #493

Merged
yaojin3616 merged 31 commits into
mainfrom
V0.9.2
Sep 22, 2026
Merged

V0.9.2#493
yaojin3616 merged 31 commits into
mainfrom
V0.9.2

Conversation

@Fairy-happy

Copy link
Copy Markdown
Collaborator

No description provided.

Fairy-happy and others added 30 commits September 17, 2026 19:48
* 修复上传与回答中的文档预览:走附件真实路径,失败则本机打开

官方已支持输入框拖文件、回形针和默认工作区,不再重复实现。预览统一通过 fileHostPath 打开右侧面板,插件关闭或渲染失败时回退系统应用。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(preview): match Windows attachment names without case and keep images if aliasing fails

Explorer treats names as case-insensitive, and a failed hard-link should not block opening the original image path.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: fairy <3054158379@qq.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: add shared OpenAI and ByteDance image generation plugin

* fix: align image settings and support Electron image writer

* fix: use Seedream single-image contract and retain provider diagnostics

* feat(image-generation): streamline calls and preview generated images

* fix(image-generation): use shared dropdown menus

* fix(image-generation): complete Seedream model presets

* fix(image): resolve Harness session IDs for conversation previews

* test(image): align migration with current session format

* test(image): scope credential mode assertion to POSIX

* fix(release): type rollout configuration tests

* docs: refresh main migration evidence

* fix(runtime): await failed Harness shutdown

* ci: retry Windows verification

* 加固生图插件:未配置时禁止引导调用,并隔离 sharp 启动风险

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(image-generation): fail closed on unread settings and buffer Host GET routes

Credential read failures must not look like an empty revision-0 store, and exact GET routes need a buffered body so Host preview and settings reach the plugin.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Jianghan <58623049+SuperstructureJH@users.noreply.github.com>
Co-authored-by: fairy <3054158379@qq.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(mobile): require a desktop PIN for internet pairing

Wi-Fi can connect on scan, but a public tunnel URL can leak, so the phone must enter a 6-digit password shown only on the computer.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mobile): 桌面 PIN 仅对本机 socket 可见

隧道入口也落在 127.0.0.1,只认转发地址会把 PIN 漏到公网;Windows 覆盖长效 PIN 前先删旧文件。

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mobile): dock the Pinggy expiry hint below the input

The overlay covered the composer. Keep the field in place when the hint is hidden.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore: add agents-standards-review.zh.md to .gitignore

* fix(mobile): center the Pinggy expiry hint

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(mobile): bind desktop PIN routes to a session cookie

Tunnel requests can share loopback sockets and spoof Host, so PIN
visibility now requires a one-time bootstrap token exchanged for an
HttpOnly desktop cookie. Same-IP cookie promotion is LAN-only.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: fairy <3054158379@qq.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
覆盖安装、强杀和首启未就绪会留下同版本 session marker,反复弹出故障报告;不再采集此类报告,已入队的也静默丢弃。

Co-authored-by: fairy <3054158379@qq.com>
Selection borders and focus outlines overflowed the grid. Keep the 2px border inside each cell, drop the default gray inset, and disable native image dragging so Electron does not pull a ghost thumbnail.

Co-authored-by: fairy <3054158379@qq.com>
* fix(ppt): keep template previews inside gallery cells

Selection borders and focus outlines overflowed the grid. Keep the 2px border inside each cell, drop the default gray inset, and disable native image dragging so Electron does not pull a ghost thumbnail.


* fix(ppt): validate literal newline escapes before export

Block leftover \n/\r in text and table cells so slides no longer show escape residue, while real YAML line breaks still export.


---------

Co-authored-by: fairy <3054158379@qq.com>
存储测试在异步 flush 后立刻删除目录,GitHub Windows runner 上文件句柄尚未释放会导致 rmdir 失败。对锁定错误做短重试,避免测试本身已通过却被清理拖垮。

Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(ppt): 在 V0.9.1 上加入个人模板上传与复用

基于最新 V0.9.1 重做个人模板能力,保留画廊预览与换行导出修复,并限制上传体积、按页返回审查预览。


* fix(ppt): accept OOXML that undeclares unused namespace prefixes

WPS and PowerPoint emit xmlns:foo="", which JSDOM's well-formed outerHTML rejects during personal-template conversion.

Co-authored-by: Cursor <cursoragent@cursor.com>

* feat(ppt): ship Green Pulse as a bundled editable image template

Give the catalog a reviewed 22-page PPTD project with hashed copy, image-slot contracts, and chart export fixes so image-assisted decks do not depend on personal uploads.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(ppt): load personal-template limits from the packed runtime in tests

Avoid Vite parsing the CLI bundle via a source import, which fails Windows CI with a SyntaxError before any test runs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* 修复 Windows CI 清理 startup-failure 临时目录时的 EBUSY 误报

Harness 子进程刚退出后立刻 rmdir,GitHub Windows runner 上句柄未释放会拖垮已通过的测试。对锁定错误做短重试。



---------

Co-authored-by: fairy <3054158379@qq.com>
#457)

* feat(enterprise): add BiSheng gateway login on 0.9.1 without sending tokens into Harness

Keep market 1.45.1, migration protocol 6, and safe-mode inspect-only; chat goes through a main-process SSE proxy.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): normalize CRLF before matching the desktop patch

Windows checkout turns the YAML into CRLF, so the inject assertion must not depend on LF-only line endings.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): wait for the model catalog after login in Windows CI

commitSession publishes connected before models sync, so assertions must wait for modelsAvailable. Also match the desktop patch without depending on LF-only regex groups.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): wait for per-model usage after login

modelsAvailable flips true before GET /usage finishes, so the PKCE test must wait for bisheng:42 used tokens.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): defer connected until per-model usage sync completes

Keep phase as refreshing after commitSession so settings keep polling until syncCatalog finishes usage, avoiding the empty first-load model usage state.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): publish models before usage and sync the chat adapter on settings reads

Existing sessions missed the enterprise catalog after login because revision waited on usage and the idle adapter poll was too slow.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(enterprise): follow the product locale for settings and known chat errors

The enterprise settings page ignored Settings -> General language changes, and desktop-owned chat failures stayed English. Register the settings copy with the locale service and localize known adapter fallbacks without rewriting platform messages.



---------

Co-authored-by: fairy <3054158379@qq.com>
Git 自动合并把生图与 log-bridge 依赖拼进同一 hunk,却仍写 +12,patch-package 在 Windows 上会直接解析失败。

Co-authored-by: Cursor <cursoragent@cursor.com>
session-controller 补丁按源文件三路合并后重新生成,dsh 依赖 hunk 按同时包含生图与企业插件修正行数。

Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(enterprise): show managed vision and compact model usage

* feat(settings): polish enterprise account UI and align section titles

Add a pill Learn about Enterprise control, refresh enterprise copy, and
match settings page titles to the plugins heading style.


* feat(enterprise): reframe intranet HTTP confirmation around a trusted source

Ask users to confirm the cleartext service URL comes from a trusted origin before login.


---------

Co-authored-by: Jianghan <58623049+SuperstructureJH@users.noreply.github.com>
Co-authored-by: fairy <3054158379@qq.com>
#492 干净重投登录版本字段、登录后唤回桌面和旧预览设置清理,并加固迁移失败路径,避免把 0.9.1 历史或 #484 已合内容带进 V0.9.2。

Co-authored-by: fairy <3054158379@qq.com>
The hardcoded white background hid the label after the host switched text color. Use theme tokens and tidy the settings client so the control follows light and dark modes.

Co-authored-by: Cursor <cursoragent@cursor.com>
The settings sidebar should read Enterprise, matching the shorter product name.

Co-authored-by: Cursor <cursoragent@cursor.com>
* feat(enterprise): add managed plugin market on V0.9.2

* fix(enterprise): enforce market runtime and lifecycle contracts

* test(enterprise): support signed test builds with desktop minimum 0.9.1
* feat(enterprise): simplify account and model settings layout

* fix(enterprise): label displayed identity as current account
Co-authored-by: Cursor <cursoragent@cursor.com>
Vite's SSR transform only strips LF hashbangs. A CRLF checkout leaves #! in the module and fails enterprise-market tests with a syntax error.

Co-authored-by: Cursor <cursoragent@cursor.com>
* fix(ppt): avoid duplicate profile and desktop composition

* fix(startup): establish market baseline and isolate recovery boot

* fix(recovery): resolve agent presets from host installation

* fix(startup): resolve linked plugin host peers
…ilure

Field crash reports show the host peer fallback missing its main case: a
plugin resolving an older copy of a @deepseek-ai package from the shared
Profile tree fails with ERR_PACKAGE_PATH_NOT_EXPORTED, not not-found. The
retry is safe because it only succeeds when the installation really exports
that subpath. Reports also lose `code` to the loader's wrapper, so the first
failure's "imported from <plugin>" is all that still names the faulty plugin;
the host retry now augments that error instead of replacing it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two startup faults sent users to Safe Mode with no way out of it.

A bundle declared in the manifest but no longer installed fails the boot
preflight, and Safe Mode cannot clear it: disabling a plugin writes a patch
row, while the fault lives in dsh.profile.bundles. Startup now drops those
third-party declarations once and re-checks before giving up, and carries the
failing package name through so Safe Mode lists it. Core bundles, host
packages, package files, user patch rows and plugin data are never touched;
pnpm-lock.yaml is dropped so the next install re-resolves. This is a narrow,
declaration-only exception to "startup leaves destructive repair to recovery",
recorded in the module docstring and the architecture notes.

A market baseline that cannot be installed no longer blocks the boot on its
own. pnpm fetch failures, 404s and EPERM are ordinary on restricted networks
and account for roughly 130 field reports; startup only enters Safe Mode when
the market already in the profile is absent, unreadable or still owned by a
generation. The pending marker keeps the repair queued for the next launch,
and an unreadable marker no longer throws the boot away either.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The client-modules patch dereferenced ctx.loader without the optional chain
its paired agent-presets patch uses. host-module-fallback.mjs is a top-level
import of the Harness entry, so leaving it out of extraResources would stop
the entry loading rather than degrade the fallback; assert it is packaged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Returning from the browser reopened the confirmation under an already connected account.

Co-authored-by: Cursor <cursoragent@cursor.com>
V0.9.1 曾在 main 和 V0.9.2 上各自独立合并过一次,git 因此把同一批内容
看成两次引入,冲突集中在两条线分别演进的 patch 文件上。在发布线上解掉,
让 V0.9.2 到 main 的 PR 无冲突、解法可被 review。

冲突处理:

- src/main/index.ts:两侧改的是相邻行且互不排斥,同时保留 V0.9.2 的
  repairable 安全模式日志和 main 的 migratePersonaPrefixesBeforeStart。
- patches/@deepseek-ai+dsh、+dsh-api-session-controller、+dsh-client-ui-chat:
  剥掉被重新编号的 hunk 头后比对,V0.9.2 版本是 main 版本的严格超集
  (零行 main 独有内容),保留 V0.9.2 版本,未丢失 main 侧任何改动。
- test/patch-hunk-counts.test.ts:两边各自新建;保留 V0.9.2 版本,与合并后
  dsh 补丁的 hunk 计数和企业依赖断言一致。

验证:npm ci 后 30 个补丁全部干净应用,且企业依赖与 model-switch 两侧的
改动都确认落到了 node_modules;typecheck、build 通过;152 个测试文件
1304 项全部通过。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@yaojin3616
yaojin3616 merged commit 726a51c into main Sep 22, 2026
7 checks passed
@yaojin3616
yaojin3616 deleted the V0.9.2 branch September 22, 2026 13:45
@yaojin3616
yaojin3616 restored the V0.9.2 branch September 22, 2026 13:49
@yaojin3616 yaojin3616 mentioned this pull request Sep 22, 2026
yaojin3616 added a commit that referenced this pull request Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants