Commit Graph
26219 Commits
Author SHA1 Message Date
TurtleandYifffan eba9e768e6 fix(ui-goal): order goal actions edit, clear, pause and tighten icon gaps
Refs #8024

Co-authored-by: Yifffan <[email protected]>
2026-11-06 15:39:00 +08:00
Yichen Jiang 6a315e6aea Merge pull request #8008 from deepseek-harness/fix/forge-file-menu-and-comment-echo
fix(forge): center the selected file in the file menu and shorten comment quotes
2026-11-06 14:22:57 +08:00
_Kerman b1fa53b978 Merge pull request #8014 from deepseek-harness/luanlai/ptc-embedded-persistent
feat(ptc): 支持 embedded 模式启用 persistent PTC
2026-11-06 14:15:27 +08:00
Anlai Lu 41ef0fcaa9 refactor(ptc): 复用 embedded 载体的既有 process.js 启动 2026-11-06 13:51:24 +08:00
Turtle fef8334682 Merge pull request #7957 from deepseek-harness/docs/creator-plugin-detail
docs(skills): 补充单图插件详情的编写指引
2026-11-06 05:34:12 +00:00
Turtle ac006780c0 Merge pull request #7405 from deepseek-harness/fix/plugin-not-running-status
fix(plugins): mark selected bundles DSH skipped as not running
2026-11-06 13:29:58 +08:00
std4453 80e3e61577 Merge pull request #7713 from deepseek-harness/feat/window-level-attachment-paste
feat(web): route unfocused pastes to one composer
2026-11-06 13:27:04 +08:00
CreatixChu ad3ca91623 Merge pull request #6746 from deepseek-harness/feat/cua-shared-native-api
处理 Windows 实现过程中发现的 CUA 包接口变更
2026-11-06 13:14:30 +08:00
Jiawei Song 7f98d178d1 Merge pull request #7966 from deepseek-harness/refactor/tool-errors-foundation
feat(tools): structured error identity for registry-owned tool failures
2026-11-06 13:11:06 +08:00
Yichen Jiang 3c839748bd fix(forge): address review on file menu reveal and comment quote summaries
- Reveal the selected file again when files arrive or reorder around it,
  so a navigation that selects a file before the diff loads still scrolls
  the wide pane; a changed filter shows its results from the top.
- Compare quote summaries in draft change detection, so restoring a draft
  that only adds or changes a summary updates the snapshot and storage.
- Read the full path and range instead of the short label to assistive
  technology; the Web snapshot now records src/<file>.
- Type the stored summary schema against QuoteSummary, test the stored
  round trip, and document why revealRow does not use scrollIntoView.
2026-11-06 13:10:37 +08:00
Yudong Han 281b96264f Merge pull request #7999 from deepseek-harness/fix/desktop-office-skill-smoke
fix(desktop): 打包冒烟检查不再要求 Office 技能提供 path
2026-11-06 13:01:30 +08:00
Turtle 652dc65597 fix(plugins): report invalid listedByDefault as a metadata diagnostic
The launcher ignores dsh.bundle.listedByDefault, so a non-boolean value now
goes to meta.error instead of error. error again means the layer was skipped,
which the plugin page relies on to mark a selected bundle as not running.
Card head geometry moves to custom properties shared with the reason line.
2026-11-06 12:57:05 +08:00
Anlai Lu 4ac6a28e68 feat(ptc): 支持 embedded 模式启用 persistent PTC 2026-11-06 12:55:15 +08:00
Yichen Jiang 7a22c11866 test(web): expect the shortened review comment quotes in the composer
The forge-panel Web snapshot recorded the composer showing the whole
model-facing User Comment reference. The composer now shows the file name,
side and lines, and comment; review-message.expected.md, the text the model
receives, stays unchanged.
2026-11-06 12:53:01 +08:00
Turtle 7427ebe33d Merge pull request #8005 from deepseek-harness/turtle/locate-docs-environments
docs(skills): locate DSH resources by runtime environment
2026-11-06 12:33:00 +08:00
creatixchu 4995b0e87a Check activation results and narrow validated runner descriptors 2026-11-06 12:31:15 +08:00
creatixchu 92c73f12e4 Refresh CUA replay for activation and tree guidance 2026-11-06 12:29:59 +08:00
Yichen Jiang b81e8c823b fix(forge): center the selected file when the file menu opens
Scrolling by the least distance left a selected file below the fold
flush against the menu's bottom edge with none of its neighbors visible.
Mounting now centers a selected row that is out of view; later selection
steps in the wide pane still scroll by the least distance.
2026-11-06 12:26:41 +08:00
creatixchu 98698bf5f7 Check optional pipe ownership in runner launch tests 2026-11-06 12:17:24 +08:00
creatixchu 96a6b779fe Validate CUA response targets and stabilize platform permission loading 2026-11-06 12:15:41 +08:00
creatixchu f5c1a31125 Change Linux status flags only on child-owned pipes 2026-11-06 12:15:38 +08:00
creatixchu 16d87f95de Keep incomplete AX action metadata local to the observed element 2026-11-06 12:05:18 +08:00
sjw1231 3da5b3a749 test(web): expect ApprovalError on a rejected approval
A user-rejected approval now records ApprovalError with
APPROVAL_REJECTED on tool/result, so the Auto review e2e asserts that
identity instead of an absent error.

Refs #7869
2026-11-06 11:55:51 +08:00
Turtle 7908117a0c docs(skills): locate DSH resources by runtime environment 2026-11-06 11:48:11 +08:00
Yichen Jiang f8dd6787b3 Merge remote-tracking branch 'origin/master' into fix/forge-file-menu-and-comment-echo
# Conflicts:
#	packages/experimental/client-ui-forge/README.i18n.yaml
#	packages/experimental/client-ui-forge/README.md
#	packages/experimental/client-ui-forge/README.zh.md
2026-11-06 11:43:08 +08:00
Yichen Jiang 1192061461 fix(forge): show review comment quotes by file and comment in the composer
Add to input inserted the whole model-facing reference (header, source,
diff hunk) as the composer quote, which was unreadable. QuotePreview and the
composer's insertQuote now accept an optional QuoteSummary that replaces the
inline excerpt with a label and body and opens a title/detail/body popover;
drafts store it, and the sent message still carries the full text. The Forge
panel supplies the file name, side and lines, path, and comment.
2026-11-06 11:29:43 +08:00
Yichen Jiang f8215a4377 fix(forge): scroll the file menu to the selected file when it opens
The All files menu remounts its rows on every opening, so a selected file
below the first screen was out of view each time. The tree now scrolls only
its row container to show the selected row on mount and when the selection
changes.
2026-11-06 11:29:41 +08:00
Yichen Jiang 46f423f5a8 Merge pull request #7979 from deepseek-harness/turtle/add-gemini-protocol-5881f01a9a7f
feat(llm-pi-ai): support the Gemini protocol for custom model APIs
2026-11-06 11:17:52 +08:00
Yichen Jiang d0290409f9 Merge branch 'master' into turtle/add-gemini-protocol-5881f01a9a7f 2026-11-06 11:05:41 +08:00
Yichen Jiang 0eaa64d1a6 Merge pull request #7938 from deepseek-harness/worktree/forge-code-review-gaps-2d9d2e
feat(forge): open comments from a hover plus, restyle the checks mark, and lengthen worktree timeouts
2026-11-06 11:03:12 +08:00
Yichen Jiang b607b769e0 Merge remote-tracking branch 'origin/master' into worktree/forge-code-review-gaps-2d9d2e 2026-11-06 10:46:32 +08:00
yudshj 0f96381169 fix(desktop): 打包冒烟检查不再要求 Office 技能提供 path
Office 技能 provider 只提供 resourceBase,从不设置可选字段 path,因此 smoke-runtime.ts 的判定在所有平台上都必然失败。判定改为只检查行为结果:4 个 Office 技能都能列出,且正文非空。

判定抽成 assertOfficeSkillsLoadable,由新增单测和 office-resources.e2e.ts 共用。判定与真实 provider 不一致时,PR 阶段的 E2E 就会失败。

Fixes #7998
2026-11-06 08:12:51 +08:00
Xu Hanxiang 3a9551d1ef Merge pull request #7899 from deepseek-harness/feat/liveshare-multi-session-share
feat(liveshare): add source Sessions to an existing share
2026-11-05 14:41:55 +00:00
sjw1231 ffde355ab7 refactor(jobs,terminal): import HarnessError from dsh-error
JobError and TerminalError only need the error base, so dsh-jobs and
dsh-terminal depend on dsh-error instead of the LLM runtime. The Python
SDK runtime closure includes the new package.

Refs #7869
2026-11-05 21:40:22 +08:00
sjw1231 71cb6c739a refactor(error): move HarnessError to the dependency-free dsh-error package
dsh-llm depends on dsh-attachment and dsh-typert-protocol, so classes in
those packages could not extend a base defined in dsh-llm without a
project-reference cycle. HarnessError now lives in @deepseek-ai/dsh-error,
which has no dependencies; dsh-llm declares it as a peer and re-exports
the same class, so existing imports and instanceof checks keep working.
The Agent Note records why the original leaf-package placement no longer
holds.

Refs #7869
2026-11-05 21:26:38 +08:00
TurtleandLegGasai d9768b2517 fix(ui-settings-models): require a key and the four Gemini reasoning levels
A Gemini API route cannot authenticate without a key, so the create card
and the editor require one. Its models offer only minimal, low, medium,
and high, each sent under its own name, with no Off.

Co-authored-by: LegGasai <[email protected]>
2026-11-05 21:05:37 +08:00
creatixchu 5d8dd640d4 Expose native provider configuration through the CUA config subpath 2026-11-05 20:41:06 +08:00
creatixchu 9f31a0b5a5 Merge master with the plugin entry export policy 2026-11-05 20:40:22 +08:00
imccyu 447afe1a9b Merge pull request #7982 from deepseek-harness/fix/gate-existing-entry-exports-baseline
fix(gates): record pre-existing plugin entry exports in the baseline
2026-11-05 20:36:29 +08:00
creatixchu f55fd0d873 Share native compiler cleanup and cover CI failure paths 2026-11-05 20:35:54 +08:00
mektpoy 037df04a47 fix(gates): record pre-existing plugin entry exports in the baseline 2026-11-05 20:24:34 +08:00
sjw1231 09604ac04d refactor(tools): tighten cancellation, approval, and job error contracts
Type the approval denial helper with a closed ApprovalErrorCode, state
that a cancellation is recognized by the signal reason or an Error named
AbortError, note that ApprovalError names a denial rather than a thrown
class, and separate JOB_CONTROLLER_UNAVAILABLE from a missing jobs
service. The jobs README describes JobError as the seam's export rather
than as current caller behavior, and the terminal test asserts one
concurrent send failure.

Refs #7869
2026-11-05 20:21:45 +08:00
sjw1231 ecae589b38 fix(repeat-tool-reminder): keep a downstream block's error info
The reminder rebuilt a downstream post-execute block from its feedback
and contexts, which would drop the block's new optional info. It now
spreads the downstream decision, so a blocked call keeps its structured
error identity when the reminder fires.

Refs #7869
2026-11-05 20:16:44 +08:00
sjw1231 3368b86e2c refactor(tools): keep approval and context codes off the plugin entry
The plugin entry may export only Loader fields and Service or Error
classes, so the ApprovalError and ToolContextUnavailableError code
constants move to an internal module; the recorded strings are
unchanged.

Refs #7869
2026-11-05 20:12:48 +08:00
TurtleandLegGasai c0af425cae test(web): expect the Gemini API protocol in Models settings goldens
Co-authored-by: LegGasai <[email protected]>
2026-11-05 20:10:05 +08:00
sjw1231 a964c739d2 Merge remote-tracking branch 'origin/master' into refactor/tool-errors-foundation 2026-11-05 20:00:51 +08:00
Yichen Jiang a21c2aae2f Merge remote-tracking branch 'origin/master' into worktree/forge-code-review-gaps-2d9d2e 2026-11-05 19:56:29 +08:00
TurtleandLegGasai d2c00f2554 feat(llm-pi-ai): support the Gemini protocol for custom model APIs
Add pi-ai's google-generative-ai protocol to hand-declared routes, read
Gemini's native model listing during discovery, and offer it as "Gemini
API" in the Custom model API form.

Refs #7978

Co-authored-by: LegGasai <[email protected]>
2026-11-05 19:41:07 +08:00
Ruilin Geng dd06371929 feat(gates): 禁止插件入口新增值导出 (#7860)
* feat(gates): reject value exports on function plugin entries

A function plugin entry may export only the Loader fields (name, inject,
Config, apply), types, and classes whose instances extend Cordis Service or
Error, as docs/defensive-patterns/package-surface.md requires. The new
verify-plugin-entry-exports gate reads every packages/*/*/src/index.ts that
exports a value apply through the Host and then the Client compiler face,
and rejects any other value export, including a default export beside
apply, values that arrive through export *, and exports that do not resolve.

Exports that predate the gate are listed per package in
scripts/plugin-entry-existing-exports.ts. A listed export passes; a line
fails when its package has no function plugin entry, its list is empty or
repeats a name, or it names an export the entry no longer reports.

* docs(gates): mark new existing-export lines as rule exceptions

A line added to scripts/plugin-entry-existing-exports.ts after the gate's
introduction is an exception under the plugin entry rule in
docs/defensive-patterns/package-surface.md, which requires the domain
owner's confirmation.

* fix(gates): report a default export beside apply even when it is a class

The class allowance also covered the default export, so a function plugin
entry that default-exported a class extending Cordis Service or Error beside
apply passed the gate. The Loader then loads that default export instead of
the module namespace, which is the mixed plugin form the rule forbids. A
default export beside apply is now reported whatever it holds.

* fix(gates): judge plugin entry exports by their run-time export paths

The gate read TypeScript's export table, which differs from what the entry
exports at run time in two forms. An `export type { x }` hid a value that
`export *` brings in under the same name, although the type-only export is
erased and the value stays. A name that a nested `export type *` reaches was
reported as a value, although nothing reaches the entry at run time.

The gate now walks the emitted export forms: type-only exports and declare
declarations emit nothing, a re-export emits only a run-time export of its
target, and `export *` brings in every run-time name of its target except
default and the names the module exports itself. An `export *` whose module
does not resolve is reported as `*`.

* feat(gates): check service plugin entries for value exports

The plugin entry rule in docs/defensive-patterns/package-surface.md covers
both entry forms: a function plugin exports the Loader fields, a service
plugin default-exports its plugin class, and beyond those a Host entry may
export only Service Definition classes and error types. The gate checked
only function plugins, so a value on a service plugin entry, which another
package imports past the Loader row just the same, went unreported, and an
entry could escape the gate by default-exporting a class.

An entry without apply whose default export is a class the Loader can
construct is now a service plugin. Its default class passes under any name,
as do types and classes extending Cordis Service or Error; name, inject,
Config, and every other value are reported. Libraries, a default export
that is not a class, and an abstract default class, which defines a
capability seam, stay unchecked. The corpus guard now requires both forms.

The existing-export list is regenerated to cover the service plugin
entries' current value exports.

* fix(gates): admit the plugin entry export list as a plugin record name

The plugin entry export list now records the session service entry's
existing value exports, appendPluginRecord among them. Like the published
dependency policy, the list names the function without calling it, so the
plugin record caller gate admits it.

* chore(gates): list the plugin entry exports that landed on master

Master gained value exports on the plugin-manager, llm, and subagent
service entries and renamed office-to-pdf to office-kit before the gate
lands. They predate the gate, so the existing-export list records them.
2026-11-05 11:11:05 +00:00
winewill 46bf9a9d44 Merge pull request #7887 from deepseek-harness/fix/windows-workspace-first-paint
Fix white flash on Windows dark workspace startup
2026-11-05 19:05:23 +08:00