Commit Graph
5560 Commits
Author SHA1 Message Date
Tianyi Cui 536c208a7f Merge remote-tracking branch 'origin/master' into worktree-hooks-f-bridges 2026-07-04 10:55:19 +08:00
Tianyi Cui ff21a788e3 Merge pull request #123 from deepseek-harness/worktree-hooks-e-protocol
feat(hooks): dsh-hook-protocol — shared CC/Codex hook wire-protocol core (hooks stack PR-E)
2026-07-04 10:54:57 +08:00
Tianyi Cui 74c34d63a3 Merge remote-tracking branch 'origin/master' into worktree-hooks-e-protocol 2026-07-04 10:54:41 +08:00
Tianyi Cui 2610fddfc7 Merge pull request #122 from deepseek-harness/worktree-hooks-d-subagent
feat(subagent): enrich lifecycle events — agentType + lastAssistantMessage (observe-only) (hooks stack PR-D)
2026-07-04 10:54:30 +08:00
Tianyi Cui f7412d7494 Merge remote-tracking branch 'origin/master' into worktree-hooks-d-subagent 2026-07-04 10:54:14 +08:00
Tianyi Cui 9cedc2d1c0 Merge pull request #121 from deepseek-harness/worktree-hooks-c-interception
feat(events): interception seams — typed-Decision surface for hooks (hooks stack PR-C)
2026-07-04 10:54:01 +08:00
Tianyi Cui 152a8322d0 Merge remote-tracking branch 'origin/master' into worktree-hooks-c-interception 2026-07-04 10:53:39 +08:00
Tianyi Cui a935de7380 Merge pull request #120 from deepseek-harness/worktree-hooks-b-bash-seam
feat(bash): stdin + extra env on the executor seam (trusted-plugin surface) (hooks stack PR-B)
2026-07-04 10:53:17 +08:00
Tianyi Cui e8d01f6800 Merge remote-tracking branch 'origin/master' into worktree-hooks-b-bash-seam 2026-07-04 10:52:31 +08:00
Tianyi Cui 34ae0f9df5 Merge pull request #118 from deepseek-harness/worktree-hooks-a-taxonomy
refactor(events): event-domain semantics + drop step-boundary mirror emits (hooks stack PR-A)
2026-07-04 10:52:11 +08:00
Tianyi Cui 7774d427de Merge remote-tracking branch 'origin/worktree-hooks-i-snapshots' into worktree-simplification-rfcs-0704
# Conflicts:
#	docs/rfc/README.md
2026-07-04 10:50:58 +08:00
Tianyi Cui cf550f3feb Merge PR #138 into simplification RFC sweep
# Conflicts:
#	docs/rfc/README.md
2026-07-04 10:49:33 +08:00
Tianyi Cui f04b25478e docs(rfc): align acceptance criterion with corrected runLoop scope; two more image doc sites
The core-spine RFC's acceptance criterion still asserted all three
surfaces 'appear only in this RFC', contradicting the corrected scope
(runLoop/Inbox stay as package-internal symbols; only the public
re-exports go). Also add the deepseek README image-skip row and the
compact-basic [image]-placeholder row to the image RFC's removal set.
2026-07-04 04:33:06 +08:00
Tianyi Cui 9389c5df19 docs(rfc): address Codex review findings on the RFC batch
Two overstated evidence claims, reworded to the precise fact:
- prune-dead-core-spine-surface: runLoop has no importer OUTSIDE the
  package (its own agent.ts drives the loop with it); the dead surface
  is the public re-export, not the function.
- generic-long-running-tool-runtime census: BashTask.done has no
  consumer through the public seam, but is production-load-bearing
  inside dsh-bash-local (disposal awaits it); only the public
  completion surface is single-consumer.

Also fold the reviewer-located doc sites into the removal sets so the
implementing PRs need no re-discovery: the llm/pi-ai/compact-basic
README rows and the adding-an-llm-adapter cookbook line (prefill/image),
the content-block-vocabulary RFC's has-a-home consequence lines
(cache/prefill/image), the tools.md paste + type-equiv manifest row +
tools README row (callId), and the session-surface RFC's
full-rebuild-after-replacement sentence (invalidate).
2026-07-04 04:21:38 +08:00
Tianyi Cui 1546c6060a Merge branch 'worktree-hooks-h-retro' into worktree-hooks-i-snapshots 2026-07-04 03:31:31 +08:00
Tianyi Cui f63ca8f00f Merge branch 'worktree-hooks-g-stream-chunk' into worktree-hooks-h-retro 2026-07-04 03:26:19 +08:00
Tianyi Cui 81c27bed36 Merge branch 'worktree-hooks-f-bridges' into worktree-hooks-g-stream-chunk
# Conflicts:
#	docs/rfc/README.md
2026-07-04 03:21:00 +08:00
Tianyi Cui 38cd1a150c Merge branch 'worktree-hooks-e-protocol' into worktree-hooks-f-bridges
# Conflicts:
#	examples/acp-agent/cordis.snapshot.yml
#	examples/acp-agent/cordis.yml
2026-07-04 03:09:37 +08:00
Tianyi Cui 7d69d759f6 Merge branch 'worktree-hooks-d-subagent' into worktree-hooks-e-protocol
# Conflicts:
#	docs/module-graph.md
#	pnpm-lock.yaml
2026-07-04 03:01:22 +08:00
Tianyi Cui e13bbcb5d5 docs(rfc): propose nine simplification RFCs from a five-domain survey
Survey of master for surface area whose consumers are tests/docs only,
classified per candidate (production vs non-production corpus, rg + call-site
reads). New proposed/simplification RFCs:

- prune-producerless-vocabulary-variants: CacheHint/cache? fields,
  MessageSource 'agent', TurnTrigger 'continuation' (the TurnEndReasonMap
  omitted-until-emitted policy, applied)
- drop-inert-request-knobs: GenerateOptions.prefill (both adapters throw
  UNSUPPORTED), ToolSchema.strict (zero setters; beta-URL-only feature)
- drop-web-providers-change-event: the llm/adapter-change precedent replayed
- drop-image-content-block: no producer; every consumer silently drops it
- prune-write-only-fs-surface: fs-local STREAM_MIN_SIZE/streamMinSize,
  FsTarget.inputPath, FsEditOutcome.replacements/replaceAll,
  FileReadOutcome.limit/version
- prune-unimplemented-subagent-vocabulary: outputSchema/structured,
  toolFilter, sendMessage/resume (depthLimit stays)
- trim-acp-bridge-unreachable-surface: agentName/agentVersion knobs
  (resolves TODO(double-default)), toolKindFor name-sniffing
- prune-dead-core-spine-surface: SurfaceManager.invalidate(), runLoop/Inbox
  exports, ToolExecutionResult.callId
- share-app-bin-boot-glue: the twin coverage-exempt bin helpers

Also supplements three existing proposed RFCs with survey evidence: the bash
seam consumption census (generic-long-running-tool-runtime), three more
static inventories (discover-package-inventory), and the bridge's already-1:1
id usage (unify-agent-and-session-id).
2026-07-04 03:00:25 +08:00
Tianyi Cui 92be2724bd Merge branch 'worktree-hooks-c-interception' into worktree-hooks-d-subagent 2026-07-04 02:48:41 +08:00
Tianyi Cui 9033837081 Merge branch 'worktree-hooks-b-bash-seam' into worktree-hooks-c-interception
# Conflicts:
#	docs/architecture.md
#	docs/cordis-catalog/events-and-services.md
#	docs/core-data-structures/tools.md
#	packages/core/tools/README.md
#	packages/core/tools/src/index.ts
2026-07-04 02:44:26 +08:00
Tianyi Cui 955e8d2913 docs: propose simplification RFCs 2026-07-04 02:39:50 +08:00
Tianyi Cui 89f3c484c1 Merge branch 'worktree-hooks-a-taxonomy' into worktree-hooks-b-bash-seam
# Conflicts:
#	docs/rfc/README.md
2026-07-04 02:26:19 +08:00
Tianyi Cui c5ed5ff490 Merge remote-tracking branch 'origin/master' into worktree-hooks-a-taxonomy
# Conflicts:
#	docs/rfc/README.md
2026-07-04 02:15:52 +08:00
Tianyi Cui b735c766c6 Merge pull request #134 from deepseek-harness/codex/fs-directory-listing
feat(fs): add directory listing seam
2026-07-04 01:31:10 +08:00
Tianyi Cui ecd5ca6ce6 Merge branch 'master' into codex/fs-directory-listing 2026-07-04 01:27:42 +08:00
Tianyi Cui 43ab04d944 Merge pull request #137 from deepseek-harness/docs/update-readme-for-sdk
docs: refresh SDK README and demo naming
2026-07-04 01:27:02 +08:00
Tianyi Cui 571f5b383a Merge branch 'master' into docs/update-readme-for-sdk 2026-07-04 01:20:27 +08:00
Tianyi Cui db885271ed docs: polish Chinese README summary 2026-07-04 01:18:32 +08:00
Tianyi Cui 51640362b5 docs: rename coding demo to repl 2026-07-04 01:07:26 +08:00
Tianyi Cui 4cf2ade4ba docs: clarify top-level demos 2026-07-04 00:57:49 +08:00
Tianyi Cui ca91d7c2da scripts: ignore local artifacts in constraints 2026-07-04 00:57:35 +08:00
Tianyi Cui bf1966326e Merge remote-tracking branch 'origin/master' into codex/fs-directory-listing
# Conflicts:
#	docs/rfc/README.md
#	packages/fs/fs-local/src/index.ts
2026-07-04 00:56:17 +08:00
Tianyi Cui bae8bf4990 scripts: lint only package directories 2026-07-04 00:54:31 +08:00
Tianyi Cui 26f8d1b9b6 Merge pull request #136 from deepseek-harness/tool-presentation-submodule
refactor(tools): move render-intent vocabulary to presentation.ts
2026-07-04 00:52:34 +08:00
Tianyi Cui 39cdb3ea28 docs: add translation review guidance 2026-07-04 00:51:25 +08:00
Tianyi Cui ed022780a2 docs: rebrand README for DeepSeek Harness SDK
Replace outdated references to 'DeepSeek Code' with the correct
product name 'DeepSeek Harness SDK'. Update demo commands to
reflect the SDK nature (demo:agent, demo:acp) rather than the
old coding-agent product.
2026-07-04 00:42:59 +08:00
Tianyi Cui 74f61c89e3 test(hooks): snapshot the CC + Codex hook matrix end-to-end
Load both hook bridges in the ACP example (dsh-hooks-claude → ./hooks.json,
dsh-hooks-codex → ./codex-hooks.json) so the full-transcript snapshot tier can
exercise each dialect against the real app. An absent config file is a silent
no-op, so a scenario carries only the file it needs and the other bridge
vanishes — verified byte-identical against every pre-existing snapshot.

Add a scenario per hook point × its headline Decision outcome, both dialects:
UserPromptSubmit block (authored, keyless) + context-fold, PreToolUse deny/ask,
PostToolUse block/context, Stop force-continue. The mid-turn scenarios are
recorded against the real API with the hook active, so the model's reaction to
a denied/blocked/force-continued turn is part of the replayed transcript.

SessionStart and SubagentStart are deliberately excluded (detached best-effort
inject races the log position — a recorded golden fails 10/10 on its own
replay), as is SubagentStop (observe-only, zero transcript footprint — a golden
could never be proven to fail). Both stay on the bridges' unit coverage. See
docs/rfc/implemented/testing/2026-07-04-hook-snapshot-matrix.md.
2026-07-04 00:40:35 +08:00
Tianyi Cui fb78a844af docs(tools): fix cross-module JSDoc links and the catalog source list
Codex review of the vocabulary relocation found two doc-accuracy issues:

- presentation.ts's JSDoc used {@link ToolDefinition...}, which the
  TypeScript language service cannot resolve because presentation.ts
  deliberately does not import index.ts (that would create the cycle the
  split avoids). Demote those three to plain `ToolDefinition` code text;
  same-file and imported @links (TerminalResultView, ContentBlock) stay.
- docs/core-data-structures/tools.md's source header listed only index.ts
  and schema.ts; add presentation.ts, which now owns the presentation
  vocabulary the page documents.
2026-07-04 00:39:09 +08:00
Tianyi Cui 539051b2c9 refactor(tools): move render-intent vocabulary to presentation.ts
The tool render-intent vocabulary (ToolCallView/ToolResultView + members,
FileLocation, FileDiff, ToolCallKind) is the UI-facing surface of
dsh-tools; it lived inline in index.ts alongside the registry and
execution core. Move it to its own presentation.ts module so index.ts is
the registry + execute waterfall and the presentation vocabulary is a
separate, one-directional dependency.

presentation.ts owns ONLY render-intent types and references none of the
execution types; index.ts imports the view types for ToolDefinition's
presentCall/presentResult signatures (clean acyclic index -> presentation).
The opaque `meta` presentation channel (ToolExecuteReturn, ToolResult,
ToolExecutionResult) is execution plumbing and stays in index.ts.

Public surface unchanged: index.ts re-exports the vocabulary, so consumers
(tool-fs/tool-bash/tool-web/tool-todo, the ACP bridge) keep importing from
@deepseek-ai/dsh-tools with zero churn. No producer/bridge/test edits; a
pure internal relocation with no observable-output change (snapshot goldens
untouched).
2026-07-04 00:20:06 +08:00
Tianyi Cui 4e70489c73 docs(AGENTS): collapse the section to its theme; drop the two Defensive-patterns additions
The bulleted lessons and the two Defensive-patterns traps did not earn their
place. Reduce the new section to its one load-bearing sentence — gates prove
lines ran, not semantics/doc-accuracy/that a test guards anything; layer
judgment on top and lean on an independent reviewer for what gates can't see —
and drop the spawn-narrowing and AgentLoop.create-meta bullets entirely.
2026-07-04 00:04:48 +08:00
Tianyi Cui 9e71c886e3 Merge pull request #133 from deepseek-harness/docs/i18n-translate-skill
docs: bilingual docs contract, translation skill, and pairing gate
2026-07-03 23:54:32 +08:00
Tianyi Cui 19db3aa28a Merge branch 'master' into docs/i18n-translate-skill 2026-07-03 23:50:53 +08:00
Tianyi Cui c699e948e6 docs(AGENTS): fix review findings — correct resume async, cut stack-locked lessons
Address ds-review-bot review on #131:

- Blocking: "Both are synchronous" was wrong for `resume`
  (`ctx.agents.resume`/`AgentLoop.resume` return `Promise<AgentHandle>` and
  await the persisted load). State the true split: `create` is synchronous,
  `resume` is async.
- De-anchor the section: drop the "#118–#129" opening and every hooks-stack
  reference (agent/stream-chunk, PR-G, #118, ENOSPC-from-worktrees) so the
  lessons stand alone for a reader who wasn't there, matching the generalized
  style of the "Orchestrating review feedback" section above it.
- Cut bullets that duplicated existing AGENTS.md content: the standalone
  "prove regression tests RED" bullet (already stated in the Orchestrating
  section and Defensive patterns) and the ENOSPC "environmental ≠ code" bullet
  (no repo-specific rule survives generalizing).
- Generalize the survivors to their transferable rule; trim the
  regenerate-artifact bullet to the one gate-backed example.
- Collapse the double blank line before ## Architecture.
2026-07-03 23:48:32 +08:00
Tianyi Cui 5702f6244c Merge pull request #135 from deepseek-harness/fs-acp-applied-hunk-diffs
feat(tool-fs): result-time applied-hunk diffs for write/edit
2026-07-03 23:19:37 +08:00
Tianyi Cui 497ea15bdf fix(acp): relativize the completed diff card title
The result-time diff card sent view.title raw, so a completed edit/write
of an absolute in-workspace path flipped the card header back from the
relativized `Edit src/b.ts` to the absolute path — the pending card
relativizes, the result did not, and tool_call_update.title replaces the
header. Apply displayTitle to the result diff arm using the diff path,
mirroring the call-side card. Regression test proven red on the unfixed
arm.

Also record the overwrite diff-basis pre-read as a bounded follow-up
(TODO(overwrite-diff-bound) + RFC non-goal): overwriting a large file
reads the whole prior text into memory for a UI-only diff.
2026-07-03 23:14:22 +08:00
Tianyi Cui 9c6e09c0d8 Merge remote-tracking branch 'origin/master' into fs-acp-applied-hunk-diffs 2026-07-03 22:57:09 +08:00
Tianyi Cui 97de62a0ab Merge pull request #132 from deepseek-harness/fs-acp-render-intent-union
refactor(tools): tagged render-intent union for tool-call presentation
2026-07-03 22:56:48 +08:00
Tianyi Cui 8ca82d03ab refactor(tool-web): port web tools to the render-intent union
master's web_search/web_fetch tools were authored against the old
ToolCallPresentation bag; the render-intent union replaces it with a
card-tagged discriminated union. Both are simple generic cards, so they
declare card:'generic' explicitly.
2026-07-03 22:52:18 +08:00