Commit Graph
3128 Commits
Author SHA1 Message Date
Dudu-0223 71570d7bec fix: address codex review round 1
- Strict steer now rejects the two windows where an acknowledged
  message would be silently dropped: the closed-turn durability-flush
  window (status still running, loop strands drained steering) and a
  committed structured capture (terminal turn-stop discards late
  steering). Seam JSDoc, catalog doc, README, and the Agent Note
  bilingual pair state the tightened contract; new keyless tests pin
  both rejections.
- Continuable background delegation now fails loud when the advertised
  send_message tool is not registered, instead of starting a durable
  child the model cannot continue. The acp-agent example already loads
  the control tool; the tool-catalog boot recipe is unaffected because
  capability wording is harvested at mount.
2026-08-02 04:34:15 +08:00
Dudu-0223 99a778d63f feat(subagent): continuable background subagents
Implement the continuable background subagents RFC: a durable child
session with a series of Task-backed activations, each disposing its
run before the Task settles.

- dsh-subagent: rename SubagentRun.sendMessage to strict steer, drop
  run-level resume, add SubagentProvider.resume dispatch via
  SubagentService.resume, the continuation start field, and the
  versioned model-hidden subagent/descriptor session event.
- dsh-subagent-inprocess/-spawn/-fork: publish the control-allocated
  child id, append the descriptor inside the initial turn, implement
  cold resume from the child's own transcript under the live parent
  scope, and strict running-only steer.
- dsh-subagent-control (new): SubagentControlService owning stable
  child ids, descriptor snapshot/fold/authorization, Task-backed
  activation with settle-then-dispose ordering, the process-local
  active-run association, and steer-or-resume sendMessage routing.
- dsh-tool-subagent: background route branches on the provider's
  resume capability (continuable via the control service; one-shot
  task for ACP), returning both child and task ids.
- dsh-tool-subagent-control (new): the globally named send_message
  tool rendering steered/started routes.

Keyless coverage spans Task ownership and disposal ordering, running
delivery, cold follow-up, descriptor rejection and rollback, known-id
reconstruction, kill during lookup, admission races, and a new
subagent-continuable ACP snapshot scenario.
2026-08-02 04:34:15 +08:00
Dudu-0223 76ff841279 docs: keep continuable RFC self-contained 2026-08-02 04:34:15 +08:00
Dudu-0223 b5731dfdaf docs: propose continuable background subagents 2026-08-02 04:34:14 +08:00
Tianyi Cui 54ef823be7 fix(cli): keep session search tools opt-in on shipped surfaces
The shipped-roster change made @deepseek-ai/dsh-tool-session-query a
default row of the shared base.cordis.yml, so the TUI and Web surfaces
put the five session-search tools in front of the model. That
contradicts the recorded opt-in stance for the model-facing session
query consumer; the ACP example remains the mounted reference.

Remove the row from the shared base, the now-dangling disabled patch in
the opt-in core-web profile, and the workspace dependency. The
ctx.sessionQuery index stays: the TUI's /resume and the Web content
search consume it directly. Both shipped-composition tests now pin the
20-tool catalog.
2026-08-02 03:56:25 +08:00
Tianyi Cui 9a07380c23 adopt native GitHub stack workflow 2026-08-02 03:17:42 +08:00
Tianyi Cui 2448496803 feat: configure repository plugins from DSH home 2026-08-02 01:29:04 +08:00
Huanqi Cao 4c0b4c3558 Merge remote-tracking branch 'origin/feat/ripgrep-packaged-binary' into feat/pwsh-tool 2026-08-02 01:28:48 +08:00
Huanqi Cao 468cd27842 Merge remote-tracking branch 'origin/master' into feat/ripgrep-packaged-binary 2026-08-02 01:26:21 +08:00
Tianyi Cui 0664b25cd9 fix(review): validate skill roots at mount and isolate provider default roots
ds-review-bot round 1 on the repository-plugin runtime:
- a manifest-declared skill root absent or non-directory in the installed
  package now fails the plugin load (skill-local treats a missing root as
  legitimately empty, which silently mounted a skill-less plugin)
- includeDefaultRoots: false no longer inherits $DSH_BUNDLED_SKILL_DIR, so
  isolated repository providers see only their explicit roots
- prepared wrapper baseUrl schema requires the file: scheme, failing hostile
  URLs at the declared validation boundary
- preparedPath reuses format.ts's isOutside; SERVER_NAME_PATTERN is exported
  and pinned equal to dsh-mcp-client's, with the restatement justified (the
  prepare bin keeps a zod-only module graph); the unexplained `as never`
  cast now carries its schemastery rationale
- the import-free wrapper assertion also rejects dynamic import(
- the headless fixture wrapper is regenerated by the real prepareDshPlugin
  and a drift test pins fixture == generator output
- prepareDshPlugin JSDoc states the non-atomic publish repair contract
2026-08-02 01:25:02 +08:00
Tianyi Cui fa7051a9d1 feat: add static repository plugin format 2026-08-02 01:25:02 +08:00
Tianyi Cui fd4d369907 feat(cordis): add repository package cache 2026-08-02 01:25:02 +08:00
Tianyi Cui 0a297c39d3 fix(cordis): preserve concurrent loader composition 2026-08-02 01:25:01 +08:00
Tianyi Cui 560f3abd21 fix(vendor): link Cordis workspaces in built artifacts 2026-08-02 01:25:01 +08:00
Tianyi Cui 195f7fa9af fix(cordis): make config reload transactional 2026-08-02 01:25:01 +08:00
Huanqi Cao 601fb9d195 fix(fs-search): address the second-round #1119 review
- inline the collect() identity wrapper now that both streams use the
  seam's diagnostic-tail shape
- resolve the packaged rg path lazily at the first call (memoized):
  @vscode/ripgrep resolves its platform package at module evaluation, so a
  static import turned a missing/corrupt platform package into a Loader
  composition failure instead of the documented per-call SEARCH_FAILED
- classify synchronous spawn-creation throws (a NUL in argv, an abort
  racing the pre-check, a rejected resolution) into SEARCH_FAILED /
  SEARCH_ABORTED instead of leaking raw errors
- correct the stderrMaxBytes contract: the stderr excerpt is embedded in
  SEARCH_* error messages, not hidden from the model
- export virtualManifest and pin its three acceptance paths (prefix hit,
  pnpm-11 truncated-name content-scan fallback, both miss) with fixture
  unit tests

Tests: rg-path.spec.ts (resolution failure + memoized rejection),
tools.spec.ts spawn-creation classification, notices spec virtualManifest.
2026-08-02 01:11:08 +08:00
_Kerman 0efbb7d87a Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification
# Conflicts:
#	.agents/notes/implemented/feature/2026-07-22-docked-web-goal-bar.i18n.yaml
#	.agents/notes/implemented/feature/2026-07-22-docked-web-goal-bar.md
#	.agents/notes/implemented/feature/2026-07-22-docked-web-goal-bar.zh.md
#	docs/config-catalog.md
#	packages/client/ui-goal/README.i18n.yaml
#	packages/host/apiproxy/tests/api-proxy-fork.spec.ts
#	packages/ui/tui/README.i18n.yaml
2026-08-02 00:59:11 +08:00
Tianyi Cui 00f156fcde Merge remote-tracking branch 'origin/fix/web-agent-runtime-context' into worktree/pr830-retarget-review-20260801
# Conflicts:
#	apps/cli/src/web.ts
2026-08-02 00:56:14 +08:00
Tianyi Cui 6cd9fefe88 fix(cli): register web prompt context before boot 2026-08-02 00:49:58 +08:00
Huanqi Cao 5d884e2b22 Merge remote-tracking branch 'origin/feat/ripgrep-packaged-binary' into feat/pwsh-tool 2026-08-01 22:24:32 +08:00
Huanqi Cao 8f9804f9ab merge: refresh against the advancing master
Merges master (default-workspace-write-ui, installer-adopt-checkout,
remove-scoped-bash, goal-clear-single-flight, frontend-plugin-loader,
install-interface-choice, …).

Conflict resolutions:
- apps/cli/tests/shipped-composition.e2e.ts: keep the fixed glob/grep
  roster assertion; master's workspace-write composition now confines
  tool-bash, so the escalation pair is pinned present (my earlier
  absence pin is superseded) together with master's permission facts.
- even-out-shipped-tool-rosters note: both sides edited it; the merged
  text keeps both sets of changes and the pair is re-recorded.
2026-08-01 22:22:27 +08:00
Tianyi Cui 0758839b00 Merge fix/web-agent-runtime-context into fix/web-gui-feedback-loop 2026-08-01 22:15:36 +08:00
Tianyi Cui d74048345a Merge origin/master into fix/web-agent-runtime-context 2026-08-01 22:04:10 +08:00
Huanqi Cao 404200a6ad Merge remote-tracking branch 'origin/feat/ripgrep-packaged-binary' into feat/pwsh-tool 2026-08-01 22:00:47 +08:00
Huanqi Cao a9871d4af1 refactor(fs-search): apply #1119 review fixes to the packaged-rg spawn
- delete the singleQuote shell-quoting helper and its bash-spawning tests
  (no in-repo consumers; no shell layer exists anymore)
- drop spill from both collect streams: the tool never reads a raw spill
  path, and a lossy stdout read is a pure SEARCH_RAW_OUTPUT_OVERFLOW error
- prepend --no-config so a host RIPGREP_CONFIG_PATH cannot inject a --pre
  preprocessor into the unconfined spawn
- promote graceMs and stderrMaxBytes to validated Config fields (defaults
  SEARCH_GRACE_MS / SEARCH_STDERR_MAX_BYTES) instead of inheriting
  bash-local's config
- correct the grep tool's JSDoc seam reference (bash -> subprocess)
- drop the dead exit-127/command-not-found classification branch
2026-08-01 21:56:16 +08:00
ZiyaZhang 7aa9e51084 fix(cli): give shipped web search a 60s budget 2026-08-01 06:15:16 -07:00
Tianyi Cui 95e0dc0583 Merge remote-tracking branch 'origin/master' into worktree/default-workspace-write-ui-20260731 2026-08-01 19:55:15 +08:00
Tianyi Cui 8a36dd4280 Merge pull request #1091 from deepseek-harness/feature/installer-adopt-checkout
feat(install): adopt an existing checkout into the managed layout
2026-08-01 19:51:12 +08:00
Tianyi Cui 3b9afd2f29 Merge remote-tracking branch 'origin/master' into worktree/default-workspace-write-ui-20260731 2026-08-01 19:48:47 +08:00
Tianyi Cui b02b7b2e50 Merge remote-tracking branch 'origin/master' into feature/installer-adopt-checkout 2026-08-01 19:44:12 +08:00
Huanqi Cao 2726762e69 merge: refresh against the advancing master 2026-08-01 19:41:44 +08:00
Tianyi Cui 09b02ab18e Merge remote-tracking branch 'origin/master' into worktree/default-workspace-write-ui-20260731 2026-08-01 19:40:17 +08:00
Tianyi Cui d24879a413 Merge branch 'master' into codex/remove-scoped-bash 2026-08-01 19:38:11 +08:00
Tianyi Cui c2171ef1f4 Merge branch 'master' into codex/goal-clear-single-flight 2026-08-01 19:33:21 +08:00
Tianyi Cui d963a36792 Merge remote-tracking branch 'origin/master' into feature/installer-adopt-checkout 2026-08-01 19:31:44 +08:00
Huanqi Cao e8b7987e82 merge: sync the note-facts commit from the parent branch 2026-08-01 19:19:03 +08:00
Huanqi Cao 36700f6916 docs(note): record the notices-generator fixes behind the new dependency 2026-08-01 19:17:59 +08:00
Huanqi Cao 8c6179d69d feat(pwsh): add the pwsh-local executor and the pwsh tool
Windows-native execution foundation: PwshLocalExecutor implements the bash
executor seam over ctx.subprocess (pwsh -NoLogo -NoProfile -NonInteractive
-Command, one argv element, no quoting layer; resolvePwshPath probes
PowerShell 7 / PATH / Windows PowerShell 5.1 as a pure function), and
tool-pwsh is the minimal PowerShell-dialect model-facing tool over ctx.bash
(foreground only, managed DSH_* env, timeout/signal/exit markers, terminal
and generic presenters). Both packages carry full suites (real pwsh,
self-skipping without it) at per-file 100% coverage; vitest's Windows
exclusion narrows from packages/bash/* to the bash-requiring packages so the
pwsh suites run natively on Windows too. The CLI gains the workspace deps
and tsconfig projects without mounting either plugin; the Windows-default
roadmap is recorded as a proposed Agent Note.
2026-08-01 18:48:17 +08:00
Tianyi Cui d0a0bb92ca Merge remote-tracking branch 'origin/master' into worktree/default-workspace-write-ui-20260731
# Conflicts:
#	apps/cli/README.i18n.yaml
2026-08-01 18:06:19 +08:00
Huanqi Cao 18700f428d feat(fs-search): spawn the packaged ripgrep binary through the subprocess seam
glob/grep now run the @vscode/ripgrep binary via ctx.subprocess with a plain
argv vector: no system rg install, no shell layer, unconditional registration.
The load-time command -v rg probe and the bash-seam coupling are removed;
timeouts ride the cooperative exec.signal plus the seam's terminate
escalation. The fs-glob-sampling ACP snapshot executes the real packaged
binary against an mtime-pinned fixture. Adds the packaged-ripgrep-search
Agent Note, updates the roster-note facts and both shipped-composition e2es,
and regenerates the doc catalogs and third-party notices (surfacing
pre-existing manifest drift plus the new @vscode/ripgrep row; the notices
generator also learns pnpm 11's truncated virtual-store names).
2026-08-01 18:04:38 +08:00
Tianyi Cui d7289febdb Merge pull request #959 from deepseek-harness/fix/checkout-workdir-prompt
fix(prompt): distinguish checkout from workdir
2026-08-01 17:54:34 +08:00
Tianyi Cui d8980d0336 Merge pull request #1106 from deepseek-harness/feat/experimental-subcommand-gate
feat: rename experimental-meta/-upgrade to meta/upgrade behind an --experimental gate
2026-08-01 17:53:36 +08:00
imccyu 3dfbfb4e72 Merge branch 'master' into fix/web-fork-interrupted-seq 2026-08-01 02:19:51 +08:00
Turtle cb1a6c74dc Merge remote-tracking branch 'origin/master' into fix/checkout-workdir-prompt
# Conflicts:
#	packages/ui/app-boot/README.i18n.yaml
#	packages/ui/app-boot/README.md
#	packages/ui/app-boot/README.zh.md
2026-08-01 00:04:49 +08:00
Turtle 2f92cb7b3c Merge remote-tracking branch 'origin/master' into feature/installer-adopt-checkout
# Conflicts:
#	README.i18n.yaml
2026-07-31 23:52:11 +08:00
Turtle c435350561 docs(install): the path bug is symlinks, not /var
The comments and Agent Note blamed macOS resolving /var through
private/var. That is only how the mismatch surfaced in temp fixtures, since
mktemp hands back a /var path there.

The real condition is broader: Git always reports resolved paths, so
comparing one against an unresolved path disagrees whenever a symlink sits
anywhere above the checkout. A symlinked home directory alone triggers it —
reproduced with no /var involved — which is common wherever homes live
behind a symlink or on a network mount.

Naming the cause correctly keeps a reader from dismissing resolve_dir as
macOS-only defensiveness.
2026-07-31 23:47:58 +08:00
Turtle 6792a12d8c Merge remote-tracking branch 'origin/master' into perf/tui-resume-scan
# Conflicts:
#	packages/cordis/tool-cordis/src/api-catalog.ts
#	packages/ui/tui/README.i18n.yaml
#	packages/ui/tui/tests/tui.spec.ts
2026-07-31 23:42:54 +08:00
Turtle db432c1e74 fix(install): correct a false claim about shell assignment semantics
Review flagged the resolve_dir comment: it claimed `x=$(cmd) || fallback`
never fires "because the assignment succeeds even when the substitution
fails." That is wrong — command substitution propagates exit status and the
fallback does fire, confirmed in sh, bash, dash, and zsh.

Reproducing the original code shows the fallback also worked, so the second
"recurrence" the Agent Note described never existed. Both real defects were
the same one: comparing a resolved path against an unresolved one. The note
now says that instead of inventing a mechanism.

resolve_dir keeps its `|| printf` because it makes every caller a plain
assignment, so no site can compare against an empty path by forgetting its
own fallback — the reason is now stated accurately.

Also from review: REPO_COMMON is now resolved on both branches, matching
REPO_ROOT, and _repo_root notes why it is already physical without its own
resolve_dir call.
2026-07-31 23:40:40 +08:00
Turtle 2225ad435e test: cover experimental gate through the built bin; fix Agent Note facts 2026-07-31 23:37:53 +08:00
Turtle 20e51abd4e feat: rename experimental-meta/-upgrade to meta/upgrade behind --experimental gate 2026-07-31 23:37:53 +08:00