Commit Graph
6749 Commits
Author SHA1 Message Date
Chinesezjc 2edc6705b5 Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `python/sdk-runtime/package.json` and `pnpm-lock.yaml` keep both sides'
  additions (`@deepseek-ai/dsh-otel` beside the schedule packages).
- The generated graph pages are re-emitted from the merged sources.
2026-09-26 10:14:10 +08:00
Chinesezjc fd53e83125 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`; this branch keeps the
preset-level ownership beside it.

Resolutions:
- The Host rows keep master's `disabled: true`. The optional bundle switches
  `schedule` and `ui-schedule` on and no longer `time-context`: the clock row
  is preset-level, so flipping the Host row as well would mount the plugin in
  two scopes and write two readings per step.
- `standard`, `cordis`, and `ptc` declare `preset-time-context` and
  `tool-schedule`; `minimal` declares neither.
- `tool-schedule` injects `tools` and resolves `schedule` per scope through
  `ctx.inject`, so the row stays valid but produces no tools while the service
  is off, and produces them once the bundle mounts it.
- The assembled-Web Schedule spec keeps master's bundle overlay and restates
  the shipped `preset-standard` row instead of the deleted fixture, because a
  top-level patch cannot reach a plugin a preset declares.
- Documentation and Agent Notes describe both layers; the note master archived
  stays frozen with its manifest hashes.
2026-09-26 01:12:54 +08:00
07akioni 9d36f9c1fc refactor(telemetry): share reporting through a Cordis OTel service 2026-09-25 19:08:44 +08:00
07akioni 3dd52bfd9b fix(telemetry): own byte-bounded session request scheduling 2026-09-25 18:39:21 +08:00
07akioni 7b8c7dfff2 feat(telemetry): upload session log events through byte-bounded OTLP 2026-09-25 17:29:15 +08:00
Chinesezjc 5e9b942f8c Merge origin/master into feat/preset-scoped-schedule-tools
`#5175` disabled the three Host rows (`time-context`, `schedule`,
`ui-schedule`) as a temporary stopgap and refreshed the Web fixtures for that
composition. Those rows and fixtures stay as master has them; this branch
keeps its preset ownership of the reminder stack, which takes effect when the
stopgap is lifted.

Resolutions:
- `packages/bundle/web-app/cordis.patch.yml` keeps master's `disabled: true`
  on all three rows.
- The three presets declare the clock under `preset-time-context`: a row id
  belongs to exactly one plane, and the Host row retains `time-context`.
- `apps/web/tests/schedule-after.e2e.ts`, `apps/web/tests/fixtures/
  time-context-every-step.patch.yml`, `web-default-isolation.expected.e2e.ts`,
  and the `minimal-preset` session fixture keep master's stopgap-era state.
2026-09-24 21:09:32 +08:00
Chinesezjc 41c29fa832 feat(schedule): ship the Schedule switch as an optional bundle
The shipped Web composition carries `time-context`, `schedule`, and
`ui-schedule` disabled. This adds
`@deepseek-ai/dsh-experimental-schedule-bundle`, whose patch sets
`disabled: false` on those three rows and inserts none, and names it in
`OPTIONAL_BUNDLES` with a runtime dependency of `apps/cli`, so every
installation ships it switched off and the Web Plugins page offers it in
the Official group.

The two Web suites and the built-Web Schedule Remote scenario enable the
rows through that bundle instead of a scenario-local fixture.
2026-09-24 21:03:26 +08:00
Chinesezjc 656adfc986 feat(web): mount time-context from the presets that use it
`packages/bundle/web-app/cordis.patch.yml` inserted `time-context` as a Host
row, so every session in the shipped Web profile — `minimal` included —
received a per-step clock reading its composition never declared. The row
moves into the `standard`, `cordis`, and `ptc` presets; `minimal` mounts
neither the reading nor the reminder tools. The Schedule service row and the
`ui-schedule` client row stay Host-wide. 139a7eb379 carried the bundle,
preset, and runtime-closure half of this move; this commit carries the
fixtures, documentation, and Agent Notes that follow it.

The `minimal` session fixture is refreshed keylessly, the assembled-Web spec
builds its every-step overlay from the shipped preset because a preset plugin
cannot be addressed by id from a top-level patch, and the composition Agent
Note points at the new note that owns the preset-scoped reading.
2026-09-24 20:50:12 +08:00
Turtle f84891eaff Merge pull request #5150 from deepseek-harness/fix/auto-review-user-approval
fix(auto-review): ask the user after a denial and report reviewer failures
2026-09-24 20:48:39 +08:00
Yichen Jiang 24f28dfdb6 Merge pull request #5173 from deepseek-harness/worktree/model-selection-background-save
fix(session): save default model settings in the background
2026-09-24 20:31:25 +08:00
Chinesezjc b7a6568c29 chore(docs): regenerate the graphs and persistence catalog after the merge
`SubagentSessionError` shifts line numbers in the Schedule types these
generated pages cite; both generators re-emit them, and the
persistence-catalog pair is re-recorded.
2026-09-24 20:27:28 +08:00
Chinesezjc d02a959870 Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `snapshots/web/minimal-preset/tool-schemas.expected.json` keeps this
  branch's side: the four reminder tools are absent from a `minimal` session
  under the new composition, so master's description refresh of those entries
  does not apply.
- `packages/schedule/tool-schedule/src/index.ts` keeps this branch's plugin
  shape and ports master's trimmed tool descriptions (20bea14129) onto the
  moved definitions; `docs/tool-catalog.md` is regenerated from them.
- `docs/tool-catalog.zh.md` has its schema code block realigned with the
  regenerated English side, and the pairing record is re-recorded.
2026-09-24 20:20:33 +08:00
Xu Hanxiang 4ef97b92a9 Merge pull request #4827 from deepseek-harness/fix/truncate-without-splitting-surrogates
fix(tools): keep surrogate pairs intact when capping tool output
2026-09-24 20:16:49 +08:00
Turtle 32905d5ab5 Revert "feat: reconcile timed questions with legacy default" 2026-09-24 20:06:09 +08:00
mektpoy ea3667175d Merge remote-tracking branch 'origin/master' into fix/truncate-without-splitting-surrogates 2026-09-24 20:03:02 +08:00
Chinesezjc 96c421d985 fix(schedule): refuse reminders for sessions subagent routing owns
A preset mount reaches the preset's whole subtree, so a `standard`, `cordis`,
or `ptc` subagent now sees the reminder tools the removed
`ctx.agents.roots()` filter kept away from it. A task bound to such a Session
can never be delivered — `ctx.sessionController.resolveAgent` refuses it — so
`ScheduleService.create` and `ScheduleService.update` refuse it with
`subagent_session`, in the operation that creates the obligation rather than
in each consumer.

`list` and `delete` keep serving those Sessions so a task stored before the
rule stays removable, and the tool maps the new code into its error output.
The Agent Note, both package READMEs, and the generated catalogs record the
subtree exposure and the enforcement point.
2026-09-24 19:54:53 +08:00
turtle1999 0a134ef94e fix(auto-review): localize the approval prompt and sync docs with the ask fallback
The tools pipeline's ask decision now carries an optional displayReason
that ToolRuntime forwards to the approval service, so the Auto review
prompt is localized while the audited reason stays English.

Adds the auto-review-approval Web snapshot for a user rejection after a
reviewer denial and for a reviewer failure, and updates the permission
preset pages, READMEs, Agent Notes, and child-agent JSDoc that still
described the shared never bundle.
2026-09-24 19:54:37 +08:00
Yichen Jiang 86331673d9 fix(session): save default model settings in the background 2026-09-24 19:48:49 +08:00
Magolorandimccyu bb19061473 feat(user-questions): support timed waits and late replies
Co-authored-by: imccyu <[email protected]>
2026-09-24 19:43:16 +08:00
Turtle c8631b2064 Merge pull request #5109 from deepseek-harness/refactor/trim-tool-constraint-descriptions
refactor(tools): trim constraint prose from tool descriptions
2026-09-24 19:34:54 +08:00
Yichen Jiang 193f9ce413 fix(llm): keep oversized request extensions from blocking model requests (#5168)
Optional request extension fields had no size bound. A very large field
could exceed the runtime's string limit while the request was serialized,
which failed every attempt, including retries.

- Bound the extension payload carried by one request (8 MiB by default,
  configurable) and send the remainder with later requests.
- If the combined request still cannot be serialized, send the base
  request without extension fields and log which fields were omitted.
- Add regression tests and update the related references and decision note.
2026-09-24 11:15:37 +00:00
Chinesezjc 62aa32c6fe fix(schedule): complete the runtime closure and regenerate the graphs
A preset now mounts `@deepseek-ai/dsh-tool-schedule`, so the executable
deploy manifest must supply it and every required workspace peer reachable
from it: the Python runtime manifest gains the tool package, the Schedule
service and the peers that service requires. The stale product/consumer and
module graphs are regenerated for the new package.
2026-09-24 18:52:12 +08:00
Chinesezjc 6c1a590a4c feat(schedule): contribute the reminder tools from a preset-scoped package
The Host plugin registered `schedule_create`, `schedule_list`,
`schedule_update`, and `schedule_delete` on every live root Agent, so a
`minimal` session received four reminder tools its preset never declared. The
tools move to the preset-scoped Consumer `@deepseek-ai/dsh-tool-schedule`,
which injects `tools` and `schedule` and registers them in the scope that
mounts it: `standard`, `cordis`, and `ptc` carry the row, `minimal` does not.
`@deepseek-ai/dsh-schedule` keeps the Host service, storage, delivery, and the
Automation surface.

The five `minimal` assertions in the Web preset suite and the `minimal-preset`
tool-schema snapshot return to the bash-only table, the tool catalog is
regenerated under the new owner, and the Agent Note that recorded the previous
composition points at the new one.
2026-09-24 18:39:00 +08:00
turtle1999 20b0730310 Merge remote-tracking branch 'origin/master' into fix/auto-review-user-approval 2026-09-24 18:19:32 +08:00
lsdsjyandlsdsjy 1103c1a7dd fix(web): 将开发者工具开关更名为代码工作工具 (#5149)
* fix(web): 将开发者工具开关更名为代码工作工具

* test(web): 补齐旧预设配置的定时任务工具断言

* docs(web): 同步代码工作工具开关名称

---------

Co-authored-by: lsdsjy <[email protected]>
2026-09-24 10:15:55 +00:00
Turtle 217fb65ac7 Merge pull request #5133 from deepseek-harness/turtle/time-context-ten-minutes
feat(time-context): default injections to ten-minute intervals
2026-09-24 18:01:18 +08:00
turtle1999 409fb145af fix(auto-review): ask the user after a denial and report reviewer failures
A reviewer denial now returns the tools pipeline's ask decision when the
Session's approval policy is ask, so the user can approve, reject, or
cancel the call. Selecting Auto writes the ask policy; a recorded Auto
selection still matches never, which delegated children pin, so their
denials stay final.

A reviewer failure now fails the call with its specific error instead of
presenting it as an Auto review denial.
2026-09-24 17:53:25 +08:00
turtle1999 341023a9e7 refactor(schedule): trim constraint prose from Schedule tool descriptions
Keep the timing rules that apply to every selector in the create
description once, move the cron day-field and fixed-rate alignment rules
onto their parameters, and drop parameter formats, result fields, and
Host compare-and-set details from the tool descriptions.
2026-09-24 17:52:58 +08:00
turtle1999 8f86c22a9a refactor(tools): apply send_message, job_kill, and read_image review wording
Drop the extension-less path hint from read_image and the
returns-before-stopped note from job_kill, and describe send_message
delivery without "resumes a turn". image-compaction lowers its context
window by the 30-token tool-schema estimate reduction.
2026-09-24 17:52:58 +08:00
turtle1999 ab2f5d3009 refactor(tools): drop system-prompt repeats of tool definitions
Tool guidance sections keep only what the tool definitions do not say.
Apply review: reword interrupt_agent and list_agents, carry "a rejected
escalation stays denied" in the rejection error, pin
sandboxPermissionsDescription, and fix stale README and Agent Note
statements. Record the tool-definition rules in agent-experience.

Compaction threshold snapshots shift their context windows by the
370-token system-prompt estimate reduction; escalation-rejected moves to
a v4 fixture for the new rejection text.
2026-09-24 17:52:58 +08:00
turtle1999 321a6fa740 refactor(tools): trim constraint prose from tool descriptions
Delete constraints the model learns from the call result, shorten
implementation detail, and move per-parameter rules into the owning
parameter descriptions. Bash, pwsh, and fs share one
sandbox_permissions description in dsh-sandbox.

The standard preset's first-turn prompt drops from 7985 to 6551 tokens.
Compaction threshold snapshots lower their context windows by the
1548-token tool-schema estimate reduction so each trigger keeps its
position; their fixtures move to v4 generations.
2026-09-24 17:52:58 +08:00
12c9dd599e feat(approval): localize approval explanations (#4793)
* feat(approval): localize prompts and allow consent for one turn

* test(approval): update cast baseline and Web PTC prompt pin

* fix(approval): cover PTC language and clarify turn consent

* fix(approval): group turn consent under allow menu

* fix(approval): keep turn consent in memory only

* test(snapshot): refresh owners for merged justification guidance

* fix(approval): drop duplicate allow-once from the allow menu

* refactor(approval): derive turn consent expiry from one check

Replace the turn approval bookkeeping (revocation state, incremental log
cursor, and turn-signal listeners) with one side-effect-free expiry check
over the log and lifetime flags. Events now only withdraw open
presentations early; the expiry check decides whether an answer or turn
consent still applies, including for Sessions without event publication.

* refactor(approval): drop one-turn consent and keep localization only

Remove the allowed-turn answer, the live turn-consent state, the allow
menu, and their tests, notes, and recorded Web scenario. The approval
service returns to the master request path; the request keeps the
localized displayReason for presentation, and the card resolves it in
the active UI language.

* test(snapshots): record the localized justification schema text in new scenarios

---------

Co-authored-by: Turtle <[email protected]>
Co-authored-by: Kaige-Gao <[email protected]>
2026-09-24 17:47:42 +08:00
lsdsjy c0f0bcf587 Merge pull request #5108 from deepseek-harness/feat/developer-mode-preset-selection
feat(web): 由开发者模式统一控制新任务模式选择
2026-09-24 17:24:51 +08:00
mektpoy 9c64dee509 Merge origin/master into fix/truncate-without-splitting-surrogates
Conflict resolution:
- docs/config-catalog and docs/module-graph: regenerate with the current
  generators, which write the bilingual pages together.
- The conflict came from master's new short-fingerprint pairing records: our
  branch still carried the previous full-hash records. Take master's record
  format, then re-record the output-retention README pair after regenerating
  its two sides.
2026-09-24 17:23:43 +08:00
Chinesezjc 4611e32e64 Merge pull request #5123 from deepseek-harness/feat/automation-phase1
feat(schedule): ship Schedule in the default Web composition
2026-09-24 17:10:53 +08:00
Dudu-0223 af371e21c0 revert(subagent): preserve list_agents tool descriptions 2026-09-24 16:32:57 +08:00
Dudu-0223 88500a0f3a fix(subagent): align catalog discovery docs and regression coverage 2026-09-24 16:30:58 +08:00
Chinesezjc e896737840 feat(schedule): ship Schedule in the default Web composition
The Web bundle now mounts `time-context` and `schedule` and leaves the
`ui-schedule` client row enabled, so the Automation tasks page, the Session
reminder catalog, and the `schedule_*` tools work without an overlay. Both
packages join the bundle's declared dependencies, and the example overlay is
deleted: re-inserting its rows would mount both Host plugins twice.

The fixed-rate floor drops from 300 to 60 seconds across the Host decoder,
the create and update validation, the model-visible tool schema, and the
client's per-unit floors.

Web recorded sessions and header sidecars are refreshed for the readings
`time-context` now appends; `normalizeWebSessionVolatiles` tokenizes their
sampled instant, browser zone, and elapsed duration so replay stays stable.
2026-09-24 16:11:52 +08:00
Dudu-0223 311cac1c17 docs: refresh subagent dependency graph 2026-09-24 15:54:47 +08:00
Dudu-0223 a4ddc28ed5 refactor(subagent): traverse descendant catalogs recursively 2026-09-24 15:49:55 +08:00
lsdsjy 53e000810d Merge origin/master into feat/developer-mode-preset-selection 2026-09-24 15:33:43 +08:00
imccyu 6000dcdda5 fix(web): reconcile visual consistency after master rebase 2026-09-24 14:58:55 +08:00
yixiangihsiang df2372fefe fix(web): preserve macOS overlay opacity and desktop launch settings 2026-09-24 14:58:55 +08:00
yixiangihsiang fdd14a0989 feat(web): unify UI materials and streamline file review 2026-09-24 14:58:54 +08:00
lsdsjy a44534e274 feat(web): 由开发者模式统一控制新任务模式选择 2026-09-24 14:29:18 +08:00
Kexin Liu 450f155955 Merge pull request #4826 from deepseek-harness/feat/unify-code-highlight-languages
统一并扩展代码高亮语言表(read 卡片与侧栏 Code 预览)
2026-09-24 12:10:50 +08:00
liukx0205 bf4d264368 Merge master into feat/unify-code-highlight-languages 2026-09-24 11:58:08 +08:00
2fd748edad feat(desktop): 按请求凭据区分欠费提示及充值入口 (#4858)
* feat(desktop): distinguish account quota alerts from API key notices

* docs: condense architecture introduction within existing budget

(cherry picked from commit 01aacaee4d48fd7f4d00acb5e23758084d3f224e)

* test(desktop): cover quota notice lifecycle and remove unknown casts

(cherry picked from commit 7fd09407c482d1f0e30f24ba0ebf23cd844ac9a1)

* chore(account-quota): align tests, catalogs, and bilingual pairs with the account plugin

* fix(ui-settings-account): pass the Platform retry label to the account top-up overlay

* fix(chat): preserve quota failures and global notices

* fix(account): keep active top-up pages across quota notices

* fix(account): share platform page ownership and release quota holds

* fix(account): defer notices behind the shared Platform page

The single native Platform view covers the document, so a quota failure that arrives while a Settings-opened page shows is deferred rather than retained: the newest failure still replaces an older notice and its Modal appears after the viewer returns if still current. Top up remains the retained case, releasing its hold and page request with the entry.

* test(account): align quota fixture with bonus actions

* fix(account): preserve quota notice and Platform return focus

* fix(account): preserve onboarding return reads and failed notices

* docs(account): clarify page opener return ownership

* test(account): drive bonus acknowledgement retry deterministically

---------

Co-authored-by: liyao <[email protected]>
Co-authored-by: lsdsjy <[email protected]>
2026-09-24 11:50:11 +08:00
lsdsjy dd0578fadd Merge origin/master into fix/platform-webview-persistence 2026-09-24 11:05:40 +08:00
_Kerman 26dcd5a247 Merge remote-tracking branch 'origin/master' into fix/language-neutral-default-workspace-naming
# Conflicts:
#	.agents/notes/implemented/feature/2026-09-20-default-workspace.i18n.yaml
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.md
#	docs/config-catalog.zh.md
#	docs/subsystems/workspace.i18n.yaml
#	packages/api/workspace-controller/README.i18n.yaml
#	packages/client/ui-workspace/README.i18n.yaml
#	packages/client/ui-workspace/tests/workspaces-service.client.spec.ts
#	packages/workspace/workspace/README.i18n.yaml
2026-09-24 10:30:24 +08:00