Commit Graph
11761 Commits
Author SHA1 Message Date
Chinesezjc 8c7b02a51d test(web): refresh the workflow-run golden for the feedback buttons 2026-08-11 22:00:43 +08:00
Chinesezjc d8e766e56c Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui 2026-08-11 21:42:12 +08:00
Chinesezjc 5b900508f7 Merge remote-tracking branch 'origin/feat/web-message-feedback-ui' into feat/web-message-feedback-ui 2026-08-11 21:40:12 +08:00
Chinesezjc 0fdb1c944f Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui
Resolve additive conflicts in the api-remotes client assembly by keeping
both the message-feedback remote mount and master's forwarded-event
allowlist, and regenerate the module graph.
2026-08-11 21:37:55 +08:00
Chinesezjc 11b73126b4 ci: retrigger checks 2026-08-11 21:36:13 +08:00
Yichen Jiang 87c26ce78f Merge pull request #2275 from deepseek-harness/feat/wake-idle-owner-on-task-completion
feat(tasks): wake an idle owner when a background task completes
2026-08-11 21:29:55 +08:00
Tianyi Cui a767cd357f Merge pull request #2280 from deepseek-harness/worktree/naming-contract-proposal
docs: propose repository naming contract and rename ledger
2026-08-11 21:28:54 +08:00
Yichen Jiang 18c33b5fab Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 21:18:32 +08:00
Tianyi Cui b735af91fa Merge remote-tracking branch 'origin/master' into worktree/naming-contract-proposal 2026-08-11 21:16:36 +08:00
Wenlu Wang 73a59bf60f Merge pull request #2272 from deepseek-harness/codex/fix-packed-install-pwsh-path
test: fix packed install closure and macOS path comparisons
2026-08-11 21:13:13 +08:00
Wenlu Wang 5b5ea127dd Merge pull request #2236 from deepseek-harness/codex/deepseek-user-id-header
feat(llm): send DeepSeek user identity header
2026-08-11 21:12:33 +08:00
Tianyi Cui bf6800d972 Merge origin/master into naming contract proposal 2026-08-11 21:07:21 +08:00
Tianyi Cui 32454ba589 docs: address naming ledger review 2026-08-11 21:07:09 +08:00
Yichen Jiang c1f1a169df Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 21:03:33 +08:00
kingwl 18527071c4 docs: refresh module graph 2026-08-11 21:01:37 +08:00
kingwl 93b0451ed5 feat(llm): send DeepSeek user identity header 2026-08-11 21:01:36 +08:00
Tianyi Cui ac266ed2de Merge pull request #2109 from deepseek-harness/worktree/schedule-fixed-rate
feat(schedule): add bounded fixed-rate reminders
2026-08-11 20:53:47 +08:00
Yichen Jiang fa349202c7 test(tasks): fence the background integration test on an idle owner
The rewritten test tolerated the interleaving where a fast command
settles before the running turn's next pre-step claim. The notice is
then folded into a step whose scripted reply is final, the turn closes
with an empty next-step inbox, and the collection entries are never
reached — a real timeout, not a tolerated ordering.

The command now blocks on a sentinel the test creates only after the
agent has gone idle, so the wake is the only path that can deliver the
notice, and the test asserts exactly two turns.

Also apply the review's smaller points: key the wake budget by Agent
rather than object, register the budget-refill listener only under
wakeup delivery, pin the schema default and rejection like
reportDelivery does, record the retirement-window stranding as a Known
Limitation, and cross-link the partial supersession both ways.
2026-08-11 20:39:04 +08:00
Tianyi Cui 01033361c1 Merge branch 'worktree/schedule-explicit-at' into worktree/schedule-fixed-rate 2026-08-11 20:34:42 +08:00
Tianyi Cui 7583778fbd Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at
# Conflicts:
#	packages/client/runtime/README.i18n.yaml
#	packages/client/runtime/README.md
#	packages/client/runtime/README.zh.md
2026-08-11 20:34:34 +08:00
Tianyi Cui 9dc4af386d Merge branch 'master' into worktree/schedule-conversational-after 2026-08-11 20:31:49 +08:00
Yichen Jiang 75b26988dc fix(tasks): claim the teardown report before the producer cancel runs
A throwing producer cancel jumped to the force-fail branch before
`reported` was set, so `settle()` announced an unreported completion and
the default wakeup delivery started a model turn on an owner the host
was already destroying — the exact failure mode marking the record
reported exists to prevent.

Teardown claims the report before calling the producer, because that
decision does not depend on whether the producer's cancel succeeds.

Also reject a `maxConsecutiveWakes` that cannot bound anything: the
field exists to cap a runaway chain, and `Infinity` removed the cap
while a fraction never named a turn.

Correct the module JSDoc and the background-task runtime note, both of
which still promised that notices never wake an idle agent.
2026-08-11 20:29:08 +08:00
Tianyi Cui 869b5c7bf2 docs: propose repository naming contract 2026-08-11 20:26:18 +08:00
Yichen Jiang 4675914d74 Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 20:20:01 +08:00
Yichen Jiang 8a29248425 Merge pull request #2268 from deepseek-harness/worktree/preset-authoring-self-validation
修正创造模式 preset 组装指导中的 4 处事实错误与失效的校验建议
2026-08-11 20:18:34 +08:00
Yichen Jiang 2d8856c14b Merge pull request #2197 from deepseek-harness/worktree/web-plugin-config
feat(web): configure host-plane plugins from the settings page
2026-08-11 20:18:03 +08:00
Tianyi Cui d991327507 Merge branch 'worktree/schedule-explicit-at' into worktree/schedule-fixed-rate 2026-08-11 20:07:51 +08:00
Tianyi Cui 3e131befb5 Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at 2026-08-11 20:06:58 +08:00
Yichen Jiang 3fb325cfec fix(preset): state the user preset root plainly, resolve the acting path
The previous pass over-corrected: presenting both roots as unknowable made the
guidance vaguer without making it truer. Every `dsh` launcher puts authored
presets under `$DSH_HOME/.agent-presets`, so the skill and persona state that
as the answer to "where do my presets live" and reserve the read-back for the
path an agent actually opens or edits, which `copy()` already reports.
2026-08-11 20:04:32 +08:00
Yichen Jiang f7efe2a3b3 Merge remote-tracking branch 'origin/master' into worktree/web-plugin-config 2026-08-11 20:03:23 +08:00
Tianyi Cui 466854a1d6 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 20:03:21 +08:00
Tianyi Cui ac9ba8ce28 Merge branch 'worktree/schedule-explicit-at' into worktree/schedule-fixed-rate 2026-08-11 20:00:32 +08:00
Yichen Jiang ac890a3e34 Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 19:58:06 +08:00
Tianyi Cui e4fdd4b1e9 Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at 2026-08-11 19:57:55 +08:00
Yichen Jiang 782d670f24 fix(preset): stop presenting the preset roots as constants
Neither root is a property of the preset layer. `Config.roots` defaults to `[]`;
the two the shipped agent sees are patched in by the dsh CLI, whose user root is
`dshHomePath('.agent-presets')` and whose system root ships beside the install.
`writableRoot()` then takes the first `user` root from whatever configuration
supplied it.

The skill and the persona stated `${DSH_HOME:-$HOME/.dsh}/.agent-presets/<id>/`
as where authored presets live, which is only the default install's answer, and
no call reports either root: `authorable` says whether a writable one exists,
and `list()` cannot reveal a user root that is still empty. Both now keep that
path as what to tell a user asking where to look, and direct every path an agent
acts on to `list()` or `resolve()` — which is also what `copy()` already relies
on, since it chooses the writable root itself and reports the file it created.
2026-08-11 19:56:45 +08:00
imccyu e690867a8a Merge pull request #2265 from deepseek-harness/worktree/multimodal-ui
feat(web): align attachment display with DeepSeek Chat via ui-attachment atoms
2026-08-11 19:55:56 +08:00
Tianyi Cui 5f64b6815c Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after
# Conflicts:
#	docs/event-producer-consumer.i18n.yaml
#	docs/event-producer-consumer.md
#	docs/event-producer-consumer.zh.md
2026-08-11 19:54:39 +08:00
Yichen Jiang fb6fb1fa12 Merge origin/master into worktree/web-plugin-config, adapting to ctx.remote.$on
#2201 landed three moves this branch sits on top of. `bindSettingsScope` became
`ctx.settingsScope.bind` on the Settings surface, so the section injects that
service and the Remote face instead of importing a free function; the
`SettingsScope` types moved into the runtime contract module, which is where
this branch's `base`, `user`, and `unset` now live; and the client
`credentials/changed` event became the forwarded owner event
`credentials/updated`, which the web-search card subscribes to through
`ctx.remote.$on`.

The generated module graph crossed mermaid's 1000-edge render guard with this
branch's 14 new edges. The guard doubles again, exactly as it did at 500 — the
graph counts real package edges, and trimming them to fit a renderer default
would make the document lie about the dependency set.
2026-08-11 19:52:34 +08:00
Yichen Jiang 63b564bb4b fix(preset): cover both root-realm rejections and narrow the packaging claim
Review found two errors in the first pass.

The skill quoted `service "<name>" has been registered at <Owner>` as the
rejection for a service published into the root realm. That message only
appears when the loose name collides with one the host already supplies. A
preset publishing its OWN new service name reaches the root realm successfully
and is rejected by the mount audit instead, with `row(s) published
process-global service(s) [...]` — which is the shape a forgotten realm
actually takes. Both messages are now listed, verified by mounting one preset
of each kind.

The Agent Note claimed every harness package publishes exactly three file
patterns. 139 do; 28 also publish `lib/client.js`, 22 publish
`lib/types/**/*.js`, and `dsh-message-feedback` publishes `src`. The note now
states only the fact it needs: no package's `files` includes its README.

Also from review: the copy step no longer repeats the display name it already
set, the id rule spells out `[a-z0-9][a-z0-9-]*`, and the sandbox step says
reads need no escalation.
2026-08-11 19:49:47 +08:00
creatixchu b9e6113af0 Merge remote-tracking branch 'origin/master' into worktree/multimodal-ui
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-08-11 19:44:01 +08:00
Tianyi Cui bfef1648aa Merge branch 'worktree/schedule-explicit-at' into worktree/schedule-fixed-rate 2026-08-11 19:43:34 +08:00
Yichen Jiang 786e884b1f Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 19:42:30 +08:00
Yichen Jiang eb360dbf71 Merge remote-tracking branch 'origin/master' into feat/wake-idle-owner-on-task-completion 2026-08-11 19:38:49 +08:00
imccyu f123fb280f Merge pull request #2201 from deepseek-harness/worktree-remoteevent
feat(remote): deliver allowlisted Host events through ctx.remote.$on
2026-08-11 19:38:40 +08:00
Yichen Jiang d78b796a51 feat(tasks): wake an idle owner when a background task completes
Completion notices went through agent.inject(), which never reserves a
driver, so a task settling after its turn closed left the notice parked
until unrelated input woke the agent — while the same prompt told the
model not to poll for it.

An unreported completion now picks its lane from the owner's state: a
busy owner is injected as before, an idle owner is woken with
followup(). This adopts the delivery rule the subagent continuation
manager already ships. maxConsecutiveWakes bounds the self-exciting
chain and is reset by user-authored input; completionDelivery: quiet
restores the old lane for deterministic transcripts.

Teardown cancellation now claims the terminal report the way kill()
already does, so an owner being destroyed is never woken, and settle()
announces completion last so a reporter that opens a turn synchronously
sees a committed record.
2026-08-11 19:36:49 +08:00
Tianyi Cui 97fe09e2c2 Merge branch 'worktree/schedule-conversational-after' into worktree/schedule-explicit-at 2026-08-11 19:34:38 +08:00
Tianyi Cui 4e74c2e056 Merge remote-tracking branch 'origin/master' into worktree/schedule-conversational-after 2026-08-11 19:33:25 +08:00
creatixchu 6a95fdc424 Merge remote-tracking branch 'origin/master' into worktree/multimodal-ui 2026-08-11 19:29:53 +08:00
imccyu 23c35108d6 fix(test): inject locale settings dependencies 2026-08-11 19:25:43 +08:00
imccyu 3727e242cd fix(ci): satisfy lint contracts-ready lane 2026-08-11 19:25:43 +08:00