100 Commits
Author SHA1 Message Date
ZiyaZhang 9ee5aef98c feat(web): unify onboarding dialogs 2026-08-13 01:19:52 -07:00
ZiyaZhang 238e900776 ci: retrigger after stale merge ref 2026-08-12 08:43:25 -07:00
ZiyaZhang d6fc55ad86 docs: refresh generated references 2026-08-12 08:39:09 -07:00
ZiyaZhang 1ca6f68b17 fix(web): guide clickable file references 2026-08-12 07:30:53 -07:00
ZiyaZhang bf9eb7b538 docs: repair merged translation records 2026-08-12 06:37:56 -07:00
ZiyaZhang be693f3bc7 test(plugin-inventory): avoid assuming loader sibling order 2026-08-12 04:23:03 -07:00
ZiyaZhang 5ed98d2da9 fix(docs): restore static gate consistency 2026-08-12 03:54:02 -07:00
ZiyaZhang de0d16d3d1 fix(web): complete plugin tab accessibility 2026-08-12 02:41:29 -07:00
ZiyaZhang 14e70b1bf4 test(web): cover plugin settings tab states 2026-08-12 02:18:11 -07:00
ZiyaZhang 4f5c730032 feat(web): combine plugin settings into tabs 2026-08-12 01:06:01 -07:00
ZiyaZhang 0fc77a7ba1 test(web): update onboarding settings snapshot 2026-08-11 23:13:28 -07:00
ZiyaZhang 46c0e3dba7 fix(ci): align plugin inventory with current contracts 2026-08-11 21:38:11 -07:00
ZiyaZhang eea356e785 Show module names for dynamic plugins 2026-08-11 21:10:14 -07:00
ZiyaZhang 2614a2df93 Refine plugin inventory card details 2026-08-11 21:10:14 -07:00
ZiyaZhang 4cf76f2362 Fix plugin status tag clipping 2026-08-11 21:10:14 -07:00
ZiyaZhang 6ed5df964e feat(web): add read-only Loader plugin inventory 2026-08-11 21:10:14 -07:00
ZiyaZhang d5820df03b fix(web): stabilize hero whale hover 2026-08-11 08:53:39 -07:00
ZiyaZhang 1d7ce83894 style(web): use black hero whale with hover motion 2026-08-11 07:41:51 -07:00
ZiyaZhang b1c1c93899 Merge remote-tracking branch 'upstream/master' into feat/produced-files-folder 2026-08-11 06:17:51 -07:00
ZiyaZhang 3545bbbaaf Merge remote-tracking branch 'upstream/master' into feat/produced-files-folder 2026-08-11 05:58:13 -07:00
ZiyaZhang 67a5b2ceca Merge upstream master into feat/produced-files-folder 2026-08-11 05:40:11 -07:00
ZiyaZhang 693a093dfe Merge upstream master into feat/produced-files-folder 2026-08-11 05:22:59 -07:00
ZiyaZhang a8092699b1 fix(ci): refresh pairing after master merge 2026-08-11 04:23:13 -07:00
ZiyaZhang ed4b27e1af Merge remote-tracking branch 'upstream/master' into feat/produced-files-folder
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-08-11 02:59:50 -07:00
ZiyaZhang dd65c9557d fix(ci): refresh merged module graph pairing 2026-08-11 02:42:06 -07:00
ZiyaZhang bb9d5db361 fix(ci): refresh merged doc pairings 2026-08-11 01:06:47 -07:00
ZiyaZhang e800493494 fix(ci): refresh module graph pairing 2026-08-10 23:04:05 -07:00
ZiyaZhang 682451d001 fix(ci): refresh merged doc pairings 2026-08-10 22:17:08 -07:00
ZiyaZhang d4492a2ecd docs: refresh produced-files pairing 2026-08-10 21:53:38 -07:00
ZiyaZhang fde546593f test(web): cover produced-folder single click 2026-08-10 21:53:38 -07:00
ZiyaZhang 4357be1565 test(web): cover produced-file lifecycle edges 2026-08-10 21:53:38 -07:00
ZiyaZhang ee1a88c9f1 feat(web): make produced-file overflow discoverable 2026-08-10 21:53:38 -07:00
ZiyaZhang c61be60737 fix(feedback): address backend review gaps 2026-08-10 21:40:03 -07:00
ZiyaZhang c3d0fe1bf9 fix(feedback): harden backend consistency 2026-08-10 21:40:03 -07:00
ZiyaZhang 3cffc77719 feat(feedback): add durable message feedback backend 2026-08-10 21:40:03 -07:00
ZiyaZhang 4ec9e310c3 Merge remote-tracking branch 'upstream/master' into fix/workspace-context-rendered-change-proof 2026-08-10 05:10:39 -07:00
ZiyaZhang bf39cef48f fix(ci): tolerate platform-specific coverage and curl retries 2026-08-10 04:52:07 -07:00
ZiyaZhang c969d69f10 Merge latest master into PR branch 2026-08-10 02:10:57 -07:00
ZiyaZhang c950366bd9 fix(ci): bound native ACL coverage gate 2026-08-10 02:09:14 -07:00
ZiyaZhang 191c7625a4 Merge master and repair CI for bounded diff basis 2026-08-10 01:18:38 -07:00
ZiyaZhang 83616a5299 Merge remote-tracking branch 'upstream/master' into fix/workspace-context-rendered-change-proof
# Conflicts:
#	.agents/notes/implemented/feature/2026-06-24-workspace-context.i18n.yaml
#	.agents/notes/implemented/feature/2026-06-24-workspace-context.md
#	.agents/notes/implemented/feature/2026-06-24-workspace-context.zh.md
#	packages/context/workspace-context/README.i18n.yaml
#	packages/context/workspace-context/src/files.ts
#	packages/context/workspace-context/src/render.ts
2026-08-10 00:49:16 -07:00
ZiyaZhang 4bfa127eb7 Merge remote-tracking branch 'origin/master' into fs-overwrite-diff-bound-v2 2026-08-09 00:34:29 -07:00
ZiyaZhang 6f54fd203d test(llm-replay): cover catalog capability parity
Also re-generates the config catalog after the docs-restructure merge.
2026-08-09 00:23:32 -07:00
ZiyaZhang 2346ddca96 Merge remote-tracking branch 'origin/fs-overwrite-diff-bound-v2' into fs-overwrite-diff-bound-v2 2026-08-08 13:59:32 -07:00
ZiyaZhang 1a6037c9fb Merge remote-tracking branch 'origin/master' into fs-overwrite-diff-bound-v2
# Conflicts:
#	docs/subsystems/lsp.i18n.yaml
#	packages/fs/fs-local/README.i18n.yaml
#	packages/fs/fs-local/README.md
#	packages/fs/fs-local/README.zh.md
#	packages/fs/fs-local/src/index.ts
2026-08-08 12:20:09 -07:00
ZiyaZhang 9a299f9827 fix(fs-local): degrade basis I/O failures to null
Descriptor-phase errnos in readTextForDiff fold to before: null so a file
deleted or made unreadable after the caller's preflight cannot fail the
committed write; cancellation and non-errno faults still propagate. Drops
the now-covered isFile v8 ignore, extends llm-replay with catalog
capability parity (defaultMaxTokens/reasoningEfforts), and records the
fs-write-overwrite-bounded keyless snapshot pinning the over-limit
whole-file fallback through the real acp-agent composition.
2026-08-08 11:49:42 -07:00
ZiyaZhang 3a05ddec79 docs: compile the self-contained Task Surface model sketches
The doc-typecheck opt-out ratio gate now fails at 74/146 after merging
master. The model and branded-ID blocks are self-contained, so check
them as ordinary ts fences (72/146 remain opted out); re-record the
pairing sidecar.
2026-08-08 05:28:14 -07:00
ZiyaZhang 4db962ecbb Merge remote-tracking branch 'origin/master' into feat/web-inline-file-mentions 2026-08-08 04:46:48 -07:00
ZiyaZhang 3f3c8e31e9 Merge remote-tracking branch 'upstream/master' into fs-overwrite-diff-bound-v2 2026-08-08 04:44:12 -07:00
ZiyaZhang d7705e2dcd test(fs-local): pin multibyte byte-length gating 2026-08-07 11:56:08 -07:00
ZiyaZhang 16c1eaf546 fix(fs-local): bound overwrite contextual diff bases
Rebuild of the fs-overwrite-diff-bound branch on current master. Adds the
diffBasisMaxBytes Config field (10 MiB default, capped by runtime
allocation/decode limits), gates both overwrite sides, and reads the prior
basis from the bounded opened descriptor in cancellation-aware chunks; any
post-stat size change returns a null basis. Also pins the one-extra-byte
growth probe with a regression and drops the now-covered v8 ignore.
2026-08-07 11:05:27 -07:00
ZiyaZhang 525651d883 Merge remote-tracking branch 'upstream/master' into feat/web-inline-file-mentions
# Conflicts:
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-primitives/README.i18n.yaml
2026-08-07 09:50:43 -07:00
ZiyaZhang 4c45355012 style(web): mention chips take the markdown anchor language
Link-blue at rest with hover underline, matching URL-promoted inline
code; an at-rest underline collides with monospace descenders inside
the code chip.
2026-08-07 05:06:21 -07:00
ZiyaZhang 7ef39dc4b0 refactor(deliverables): reuse the chain claim test for the mention vocabulary 2026-08-07 05:00:47 -07:00
ZiyaZhang fe505e1e91 feat(web): a prose mention of a produced file opens it
The chatFileMentions service (provided by ui-deliverables beside its
turn-tail entry, reached via ctx.get) resolves inline-code tokens in the
closing message against the turn's produced locations: exact path or
unique basename links, ambiguity and unknowns stay inert. MarkdownText
gains the optional fileMentions seam — settled renders only, never
inside anchors.
2026-08-07 03:02:10 -07:00
ZiyaZhang 7aedc02ae3 docs: regenerate module graph for ui-deliverables 2026-08-06 06:39:08 -07:00
ZiyaZhang 4767285694 Merge remote-tracking branch 'upstream/master' into feat/web-workspace-file-links
# Conflicts:
#	apps/cli/package.json
#	pnpm-lock.yaml
2026-08-06 06:24:53 -07:00
ZiyaZhang f00a44fd44 refactor(web): move the produced-files row into its own plugin package
ui-conversation now owns only the conversation.chat.turnTail hole; the row,
its derivation, and its copy live in @deepseek-ai/dsh-client-ui-deliverables,
composed in or out by one cordis.yml line.
2026-08-06 06:21:19 -07:00
ZiyaZhang 3742214226 Merge remote-tracking branch 'upstream/master' into feat/web-workspace-file-links
# Conflicts:
#	apps/web/tsconfig.json
#	packages/client/connection/README.i18n.yaml
#	packages/client/connection/README.zh.md
#	packages/client/ui-conversation/README.i18n.yaml
#	packages/client/ui-conversation/src/client/chat/AssistantMarkdown.tsx
#	packages/client/ui-conversation/src/client/chat/ChatView.tsx
#	packages/client/ui-conversation/src/client/chat/ToolRow.module.css
#	packages/client/ui-conversation/src/client/chat/chat-flow.ts
#	packages/client/ui-conversation/tests/chat-view.spec.tsx
#	packages/host/apiproxy/src/native-path-opener.ts
#	tsconfig.host.json
2026-08-06 04:44:13 -07:00
ZiyaZhang 87d0fc6fc4 cleanup: drop leftovers from the retired HTTP-serving revision 2026-08-06 04:31:34 -07:00
ZiyaZhang fe2703b641 fix(workspace-context): restore the no-unrepresented-commit gate after master merge
The master merge rewrote reconcileInstructionContext and dropped this
branch's gate: when no transition survives rendering (tiny budgets
produce notice-only text), emit nothing and commit nothing so the next
pass retries. Restore it, align the inbox one-byte test with that
contract (an unrepresentable change is held back, not committed at 1
byte), and move the nested-retry test's probe assertions to sync time
where reconciliation now runs. Also restore master's markdown spec
casts lost in an earlier merge.
2026-08-06 02:13:43 -07:00
ZiyaZhang a362b41dc9 Merge remote-tracking branch 'origin/master' into fix/workspace-context-rendered-change-proof
# Conflicts:
#	.agents/notes/implemented/feature/2026-06-24-workspace-context.i18n.yaml
#	packages/context/workspace-context/README.i18n.yaml
#	packages/context/workspace-context/tests/workspace-context.spec.ts
2026-08-06 02:06:16 -07:00
ZiyaZhang 7c1ae32e55 fix(web): address preview badge review 2026-08-05 23:26:39 -07:00
ZiyaZhang 652f3b61bf docs: tighten Task Surface lifecycle contract 2026-08-05 00:56:18 -07:00
ZiyaZhang 6cd0eea52d docs: propose Task Surface protocol 2026-08-05 00:27:49 -07:00
ZiyaZhang 047ea50987 feat(web): add preview badge to empty hero 2026-08-04 01:46:52 -07:00
ZiyaZhang 5884a44e6b docs(ui): clarify approval wait ownership 2026-08-03 02:43:27 -07:00
ZiyaZhang 59d923395a fix(web): document remote welcome constraints 2026-08-03 00:14:35 -07:00
ZiyaZhang e63df333a1 test(web): normalize abort snapshot date 2026-08-02 23:45:47 -07:00
ZiyaZhang 0a4ad25ce7 fix(web): expand aborted Bash rows 2026-08-02 23:06:00 -07:00
ZiyaZhang 57343cfeb8 fix(web): expose loopback policy safely 2026-08-02 13:30:53 -07:00
ZiyaZhang 7a71ab9a92 fix(web): share loopback hostname policy 2026-08-02 13:24:49 -07:00
ZiyaZhang 5ee544081a fix(web): unblock remote welcome onboarding 2026-08-02 12:56:31 -07:00
ZiyaZhang e72978ba98 fix(tool-goal): scope the wrap-up no-more-tools clause to the current run
The injected instruction persists as a durable user message, so an
unscoped 'Do not call any more tools.' stays in every later request's
history. Scope it: '...in this run; further work waits for the user's
next instruction.' A/B probes on deepseek-v4-pro show the scoped wording
is non-inferior in-turn (4/4 zero tool calls, closing quality unchanged)
and next-turn tool use is unaffected under both wordings; the scoped
form states the instruction's actual lifetime.
2026-08-02 07:29:18 -07:00
ZiyaZhang 820a5a97f1 review(tool-goal,llm-replay): address ds-review-bot round one
- fromRequest placeholder: the last two braces of a consecutive } run now
  terminate the placeholder, so patterns may end with a brace quantifier
  (bot warning; the truncated pattern could even silently mis-match since
  an unclosed { is literal in JS regexes)
- document that derived JSONL entries pass through the same resolution
- widen ToolRunContext/deferContext seam docs beyond composite-only usage
  (source JSDoc, README pair, core-data-structures type-equiv blocks)
- pin direct-human blocked as uninstructed, completing the
  goal-round/direct-human x complete/blocked test quadrant
2026-08-02 07:19:26 -07:00
ZiyaZhang 8f77ab467f test(web): harden live thinking tail observation 2026-08-02 06:12:13 -07:00
ZiyaZhang 666ef95f81 fix(tool-goal): let the model deliver a wrap-up message after a goal-round complete/blocked
A goal round reporting complete or blocked used to conclude the turn at
the tool result, so the model never spoke after the call and sessions
ended on a bare update_goal card. The terminal update now defers one
plugin-sourced <goal_complete>/<goal_blocked> instruction onto its
result asking for a grounded closing message without further tool
calls; the turn then ends through the ordinary no-tool-calls stop.
Direct-human mutations stay uninstructed. Wording chosen by A/B
sampling on deepseek-v4-pro; one extra request per goal lifecycle.

New keyless ACP snapshot goal-wrapup drives the shipped app through
create -> round one -> autonomous complete and pins the injection, the
same-turn closing message, and the completed turn end.
2026-08-02 05:58:45 -07:00
ZiyaZhang 04d43e3b19 feat(llm-replay): resolve {{fromRequest:...}} placeholders against the live request
A scripted sidecar cannot know values minted at run time, so terminal
goal updates (which must echo the random goal id) were previously
un-scriptable. Placeholders in scripted entries now resolve against the
request corpus at stream time: last match wins, capture group 1 or the
whole match substitutes, and unmatched/invalid/unterminated patterns
fail loud.
2026-08-02 05:58:31 -07:00
ZiyaZhang 975b57b54a feat(web): follow live reasoning tail while collapsed 2026-08-02 05:29:25 -07:00
ZiyaZhang 7aa9e51084 fix(cli): give shipped web search a 60s budget 2026-08-01 06:15:16 -07:00
ZiyaZhang 46681457c2 Merge remote-tracking branch 'upstream/master' into agent/fix-frontend-plugin-loader-dependency 2026-08-01 02:12:33 -07:00
ZiyaZhang 90c5635355 fix(cli): point missing frontend dist at full build 2026-08-01 02:12:22 -07:00
ZiyaZhang 8ce4f07f92 fix(web): defer math rendering while streaming 2026-08-01 00:58:50 -07:00
ZiyaZhang 1e334fa955 feat(web): render TeX math in Markdown 2026-08-01 00:05:23 -07:00
ZiyaZhang 5e68d812d1 fix(web): let context injection cards fit content 2026-07-31 05:20:54 -07:00
ZiyaZhang 215bf15f78 fix(web): surface terminal turn failures 2026-07-31 03:10:48 -07:00
ZiyaZhang 9aeae0e422 docs(mcp): correct crash recovery wording 2026-07-31 03:09:29 -07:00
ZiyaZhang dc7f3253f6 fix(examples): keep memory configs provider-owned 2026-07-31 02:34:52 -07:00
ZiyaZhang 07f51593a0 docs(examples): simplify memory onboarding 2026-07-31 02:28:09 -07:00
ZiyaZhang e2fb026dee docs(examples): clarify reference memory limits 2026-07-31 02:08:35 -07:00
ZiyaZhang 7e929d3d50 feat(examples): add generic memory MCP overlays 2026-07-31 02:00:14 -07:00
ZiyaZhang 82c1788c25 docs: re-record the README pair and translation snapshot after the master merge 2026-07-30 23:07:02 -07:00
ZiyaZhang 235390031a docs: refine internal testing notice 2026-07-30 22:39:08 -07:00
ZiyaZhang 01ccfc0ad3 fix(ci): align Knip config with CI 2026-07-30 20:58:28 -07:00
ZiyaZhang 45e5317ecd fix(ci): stabilize merged coverage gates 2026-07-30 20:52:35 -07:00
ZiyaZhang 9095d3874a test: file the committed-manifest case under the parser it exercises 2026-07-30 20:45:12 -07:00
ZiyaZhang 45627bd93b fix(ci): tolerate initializing Lefthook lock 2026-07-30 20:17:04 -07:00
ZiyaZhang f13cef0148 test: re-record the translation prompt snapshot for the development.md edit 2026-07-30 19:59:02 -07:00
ZiyaZhang 421594472a docs: evaluate SPDX conjunctions and read every Python manifest
Reject a copyleft conjunct in an expression like '(MIT OR Apache-2.0)
AND GPL-3.0-only', which a permissive-alternative search accepted.
Discover python/*/pyproject.toml by glob, accept single-quoted TOML
literals, and fail on a requirement whose name cannot be read. Say that
the development tier records who declares a package rather than what a
build bundles, since a runtime dependency can pull one in transitively,
and sync the contributor guide's pre-commit list.
2026-07-30 19:54:27 -07:00
ZiyaZhang 9f9d6fc0e2 docs: regenerate notices after merging master 2026-07-30 19:46:26 -07:00