Compare commits

...
Author SHA1 Message Date
Turtle 477b4f4205 Merge pull request #5180 from deepseek-harness/rel/dsh-0.1.7-rc.2
release(dsh): 0.1.7-rc.2
2026-09-24 21:39:59 +08:00
turtle1999 787b746b80 release(dsh): 0.1.7-rc.2 2026-09-24 21:24:26 +08:00
Turtle f9564a0d48 Merge pull request #5175 from deepseek-harness/turtle/disable-shipped-schedule
feat(web): disable shipped schedule and time context plugins
2026-09-24 20:55:39 +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
turtle1999 374b9cc1fb test(web): align shipped composition fixtures with disabled scheduling 2026-09-24 20:41:51 +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
turtle1999 cad6fef2fd feat(web): disable shipped schedule and time context plugins 2026-09-24 20:27:14 +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 c92c72eb46 Merge pull request #5165 from deepseek-harness/turtle/atomic-write-exited-lock-takeover
fix: take over a writer lock whose holder exited, and wait for its pnpm run
2026-09-24 20:11:31 +08:00
Yichen Jiang e786c3f74a test(web): await background model preference saves 2026-09-24 20:08:56 +08:00
Turtle 1afcc03ff9 Merge pull request #5174 from deepseek-harness/revert-4868-reconciled-pr4839-ux-evidence
Revert "feat: reconcile timed questions with legacy default"
2026-09-24 20:06:41 +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
Turtle 6e45fd5bea Merge pull request #4500 from deepseek-harness/fix/windows-directory-junction
fix(workspace-files): list directory links through their resolved target
2026-09-24 19:58:39 +08:00
imccyu a64eaf0b5e Merge pull request #4868 from deepseek-harness/reconciled-pr4839-ux-evidence
feat: reconcile timed questions with legacy default
2026-09-24 19:56:56 +08:00
Turtle 1bd3df926d fix(plugin-manager): wait for a pnpm run its exited operation left behind
Review found three ways the takeover could let two writers overlap.

- A claimant that read an exited PID could remove the lock of a new
  holder that reused that PID before the claim. The claimant now probes
  the PID again under the claim, after re-reading the record.
- The browser Worker's process shim reports its own PID as absent, so a
  second writer in the Worker took over the first one's live lock. A
  record naming the contender's own process is never taken over.
- Takeover proves only that the holder exited, while a pnpm run it
  started can still be writing the profile. Each profile operation now
  records its pnpm run in .plugin-manager/run.json and removes the record
  when the run ends; an operation that finds a record waits for the run
  within the existing tree bound and otherwise refuses, naming the
  process and the record, without running pnpm.

A failed removal of the exited holder's lock now waits instead of
failing the acquisition, the probe range is stated as int32, and the
tests inject exited PIDs instead of reusing real ones, which Windows
reissues at once.
2026-09-24 19:55:41 +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 a56d2bf2ff fix(user-questions): reset projection version and use brand utility
Co-authored-by: imccyu <[email protected]>
2026-09-24 19:43:16 +08:00
Magolorandimccyu 652bc9d396 fix(user-questions): align styles and cover wait cleanup
Co-authored-by: imccyu <[email protected]>
2026-09-24 19:43:16 +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
turtle1999 74f85e177e Merge remote-tracking branch 'origin/master' into fix/windows-directory-junction
# Conflicts:
#	.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.i18n.yaml
#	.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.md
#	.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.zh.md
#	packages/api/workspace-files/README.i18n.yaml
2026-09-24 19:41:46 +08:00
Turtle fb018e3e7a Merge pull request #5159 from deepseek-harness/fix/profile-bundle-skip-once
fix(boot): report skipped profile bundles once per start
2026-09-24 19:41:11 +08:00
imccyu b16b1eaea8 Merge pull request #5117 from deepseek-harness/ihsiang/shortcut-sidebar-polish
feat(web): refine shortcut editing and sidebar hints
2026-09-24 19:38:09 +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
Turtle 6d5b3e8c23 Merge pull request #5156 from deepseek-harness/turtle/model-select-pending-spinner
feat(ui-model-selection): show a spinner while a model selection is pending
2026-09-24 19:34:15 +08:00
Turtle 7bd17809e3 Merge pull request #5163 from deepseek-harness/turtle/fix-issue-3390-dfb901b523d2
feat(ui-tool): link the collapsed web fetch URL
2026-09-24 19:25:41 +08:00
Turtle 6dbf4ab6c9 docs(notes): name the kernel lock the Session lease already holds on Windows
The takeover note said no Windows binding exists for a kernel-released lock; the Session write lease already holds a named semaphore there through koffi.
2026-09-24 19:25:36 +08:00
Yudong Han 8e816b7ea4 Merge pull request #5167 from deepseek-harness/deps/libreoffice-kit-0.1.1
chore(deps): upgrade LibreOffice Kit to 0.1.1
2026-09-24 19:22:18 +08:00
turtle1999 0a6de62671 refactor(boot): derive skipped bundles only from Profile.skippedBundles
skippedProfileBundles recomputed the selected-minus-loaded bundle set from
the manifest, a second home for what loadProfileDirectory already records.
Runtime resolution and generateConfigSchema now read
profile.skippedBundles, so generateConfigSchema no longer reads the profile
manifest and drops its binName parameter.
2026-09-24 19:19:52 +08:00
Yichen Jiang a5309122f4 Merge pull request #5011 from deepseek-harness/worktree/voice-setup-navigation
feat(voice-input): guide unready microphones to plugin setup
2026-09-24 19:16:33 +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
turtle1999 d55f434cdf fix(ui-model-selection): own the pending selection in ModelDirectory
The seat kept the pending row in local state, so a stale settlement after
connection/reset could clear a newer selection's spinner, a remount lost
it, and /model popup selections never marked a row. ModelDirectory now
publishes the submitted selection as pending under its generation guard.
The trigger spins whenever a selection is pending, so leaving the row's
pane keeps the feedback visible.
2026-09-24 19:09:14 +08:00
Turtle 910711e6c1 fix(atomic-write): keep the PID-only lock record
The hostname guarded only writers on several hosts sharing one file,
which no supported deployment does, and macOS changes its hostname when
networks change, so locks from before the change could not be taken
over. The nonce closed a race that needs the PID space to wrap between
two reads. Keeping the `<pid>\n` record lets processes of both releases
interoperate.
2026-09-24 19:06:07 +08:00
turtle1999 473f381420 test(cli): export reportSkippedBundles from the desktop-host app-boot stub 2026-09-24 19:04:53 +08:00
Turtle b8e30bf599 fix(ui-tool): address review on web fetch summary link 2026-09-24 19:02:19 +08:00
yixiangihsiang f1b65c78f1 Merge latest origin/master and refresh translation pairing 2026-09-24 18:59:19 +08:00
yudshj 03bd8258c3 chore(deps): upgrade LibreOffice Kit to 0.1.1 2026-09-24 18:56:22 +08:00
Turtle 7e7ba139fd fix(atomic-write): take over a writer lock whose holder exited
A process that ends without running withFileLock's finally left
<file>.lock behind, and every later writer timed out until an operator
deleted it. `dsh plugin` interrupted with Ctrl-C, `dsh web` exiting
right after disposal while a cancelled install still restores files,
and any crash all left the profile package lock this way.

The lock now records its holder's PID, hostname, and a nonce. A
contender that finds a record from this host whose PID a signal probe
reports absent claims that record through a wx-created claim file,
re-reads the lock, removes it only while it still holds the record, and
retries at once. A PID-only record from an earlier release counts as
written on this host, so locks left before this change are taken over
too. Empty, incomplete, foreign-host, and live-holder records are still
waited for.
2026-09-24 18:46:42 +08:00
turtle1999 0a1d102ef0 Merge remote-tracking branch 'origin/master' into fix/profile-bundle-skip-once
# Conflicts:
#	packages/boot/app-boot/README.i18n.yaml
2026-09-24 18:44:35 +08:00
Turtle 61a0ed487e feat(ui-tool): link the collapsed web fetch URL
Closes #3390
2026-09-24 18:41:58 +08:00
yixiangihsiang 4d4bb4c907 fix(client): reveal new-session keys on hover and align settings radius 2026-09-24 18:40:55 +08:00
turtle1999 c8b10a16be fix(boot): report skipped profile bundles once per start
loadProfileDirectory printed each skipped bundle on every call, and startup,
runtime resolution, the config editor, the plugin manager, and HMR all load
the profile, so one incompatible bundle printed the same warning six times at
startup and again on each Web page load. Loading now returns the skips in
Profile.skippedBundles, and the CLI and Desktop launchers print them once per
start with reportSkippedBundles.
2026-09-24 18:32:48 +08:00
turtle1999 20b0730310 Merge remote-tracking branch 'origin/master' into fix/auto-review-user-approval 2026-09-24 18:19:32 +08:00
Chinesezjc 0ca5865a5c Merge pull request #5153 from deepseek-harness/fix/preset-legacy-tool-expectation
test: expect the Host Schedule tools in the legacy preset patch case
2026-09-24 18:19:09 +08:00
turtle1999 c87959bc44 feat(ui-model-selection): show a spinner while a model selection is pending
session.selectModel can take seconds while the Host persists the default
model. The composer seat disabled its rows with no other feedback; the
chosen row now spins in its check slot, and the trigger spins in place of
its chevron while the menu is closed.
2026-09-24 18:18:34 +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
mektpoy 223ad4c373 docs(output-retention): address review feedback on the surrogate cap
- State the contract precisely: the cut never introduces a lone high
  surrogate, and an unpaired surrogate the input already carries is not
  repaired.
- Document the new export in the package README: a character-budget preview
  section naming the persistent bash and pwsh shells and str_replace_editor,
  plus a Known Limitations bullet that no longer contradicts it.
- Drop the assertion restatement from the two shell test comments.
- Let the str-replace test helper reuse a root so the clipped context reads
  its file inside its own working directory.
2026-09-24 18:15:52 +08:00
Turtle 488409e306 Merge pull request #5141 from deepseek-harness/turtle/settings-subagent-label-ffe748ff3c38
fix(client): use 子智能体 on the Chinese Subagent settings page
2026-09-24 18:12:29 +08:00
Ziya 77f8d83363 Merge pull request #5143 from deepseek-harness/fix/schedule-record-prompt-clamp
fix(ui-schedule): clamp saved prompts in task run records to two lines
2026-09-24 03:07:56 -07:00
yixiangihsiang eccfda04d6 Merge origin/master into ihsiang/shortcut-sidebar-polish 2026-09-24 18:05:36 +08:00
Xu Hanxiang 8267edfa62 Merge pull request #5148 from deepseek-harness/fix/agent-preset-legacy-schedule-tools
test(cli): expect the shipped Schedule tools in the legacy preset
2026-09-24 18:03:17 +08: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
imccyu 13de94764b Merge pull request #4839 from deepseek-harness/timed-user-questions-two-settlements
feat: continue timed user questions as two settlements
2026-09-24 18:00:47 +08:00
Chinesezjc 1fa5ea3faa test: expect the Host Schedule tools in the legacy preset patch case
The shipped Web bundle gives every live root Agent the Host Schedule
tools, and every other scenario in this file that boots the shipped
base/web bundle with the minimal preset expects ['bash',
...SCHEDULE_TOOLS]. This case uses the same bootWeb composition and adds
only a settings patch, which does not change tool composition, so its
['bash'] expectation failed on every PR.
2026-09-24 18:00:23 +08:00
turtle1999 307a1920a5 test(cli): expect Schedule tools in the legacy-patch minimal preset
The minimal preset carries the Schedule tools since #5123; the
legacy-patch case added by #5108 still expected bash alone.
2026-09-24 17:58:58 +08:00
Ziya 90e8dfd17f Merge branch 'master' into fix/schedule-record-prompt-clamp 2026-09-24 02:58:29 -07:00
yixiangihsiang 08daf789d5 fix(client): keep new-session shortcuts visible and address review 2026-09-24 17:53:53 +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
Turtle 3c9c18c9fe fix(preset): route profile feature enabling through cordis-plugin-development (#5138)
Broaden the skill description to cover enabling a shipped plugin that a
bundle leaves disabled, add the workspace-bundle recipe for it, forbid
hand-editing profile files that install_bundle owns, and verify installs
through the install result and cordis_inspect_query instead of logs,
process lists, or paged list_plugins calls.
2026-09-24 17:51:15 +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
ZiyaZhang d8e3efa860 test(cli): expect Schedule tools in the legacy preset-patch session
#5108 added this case against a master where the shipped Web bundle had no
Schedule rows; #5123 then made Schedule part of the default Web composition.
Every other minimal-preset session in this file already expects bash plus
the four Schedule tools, so this one does too.
2026-09-24 02:47:26 -07:00
mektpoy a09402b41c test(cli): expect the shipped Schedule tools in the legacy preset
The shipped Web composition gained the four Host Schedule tools, and the
other four minimal-agent assertions in this file already expect them. The
legacy profile-patch scenario still expected bash alone, so master's E2E
lane failed on it. Align it with its siblings.
2026-09-24 17:46:21 +08:00
lsdsjy 62db4c88c9 Merge pull request #5127 from deepseek-harness/fix/account-model-settings
fix(web): 修复账号模型设置的 namespace 识别
2026-09-24 17:43:32 +08:00
Turtle 259534c2c7 docs: call the Chinese settings page 子智能体 in zh READMEs 2026-09-24 17:40:47 +08:00
ZiyaZhang 27a0a4606c Merge remote-tracking branch 'upstream/master' into fix/schedule-record-prompt-clamp
# Conflicts:
#	packages/client/ui-schedule/README.i18n.yaml
2026-09-24 02:31:11 -07:00
Turtle bfd7e859f5 docs(client): re-record ui-settings-subagent README pairing 2026-09-24 17:26:11 +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
turtle1999 e1f65ea640 fix(preset): route profile feature enabling through cordis-plugin-development
Broaden the skill description to cover enabling a shipped plugin that a
bundle leaves disabled, add the workspace-bundle recipe for it, forbid
hand-editing profile files that install_bundle owns, and verify installs
through the install result and cordis_inspect_query instead of logs,
process lists, or paged list_plugins calls.
2026-09-24 17:20:17 +08:00
imccyu fa6d9fd75b docs(user-questions): propose timed waits and late replies 2026-09-24 17:20:01 +08:00
Turtle cf8fe108d5 fix(client): call Subagent 子智能体 in the Chinese settings page 2026-09-24 17:18:42 +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
ZiyaZhang 955a706d33 fix(ui-schedule): clamp saved prompts in task run records to two lines
Each record rendered its whole saved prompt, so a long instruction on a
recurring task filled the records tab with the same text once per run.
A prompt longer than two lines now shows two lines and an Expand toggle;
the toggle appears only while the clamp hides text, and a collapsed prompt
re-measures when the panel width changes.

Also drop the stale comment about the removed message-id anchor.
2026-09-24 01:59:56 -07:00
lsdsjy d183c8a8c0 fix(web): 按账号 provider 识别模型编辑器 2026-09-24 16:57:08 +08:00
lsdsjy 5577becafe fix(web): clear staged preset when developer tools turn off 2026-09-24 16:49:42 +08:00
Chinesezjc f31e51124b test(cli): pin the shipped Schedule rows by name, not loader id 2026-09-24 16:49:34 +08:00
Kexin Liu 89756afa72 Merge pull request #4691 from deepseek-harness/fix/focus-ring-brand-primary
fix(client): unify blue focus rings and keep silent focus silent
2026-09-24 16:48:12 +08:00
Dudu-0223 974c149446 Merge pull request #5114 from deepseek-harness/refactor/catalog-descendant-listing
refactor(subagent): discover descendants through parent catalogs
2026-09-24 16:46:03 +08:00
Chinesezjc 015c187e67 test(cli): read the inspect answer through the spill policy
The shipped Web composition now puts four Schedule tools on every live root
Agent, which pushes a full-preset `cordis_inspect_query` answer past the
12,500-token inline budget, so the spill policy retains its head and tail with
a spill path instead of the complete JSON.
2026-09-24 16:41:20 +08:00
Turtleandturtle1999 950910bdf9 fix(ci): preserve Wine build metadata and isolate test fixtures (#5088)
* fix(ci): preserve Wine build metadata and isolate test fixtures

* test(web): reopen shortcut fixture sidebar with its binding

---------

Co-authored-by: turtle1999 <[email protected]>
2026-09-24 16:37:37 +08:00
lsdsjy 7b86b84c2f fix(web): 修复账号模型设置的 namespace 识别 2026-09-24 16:37:07 +08:00
Chinesezjc 5c768e3c8a fix(schedule): point shared session references at the selected generation
Refreshed owners publish a v4 generation, so every scenario that names
another owner's Session fixture must name that owner's highest generation.
The shipped Web composition also puts the Host Schedule tools on every live
root Agent, so the minimal-preset tool-table assertions include them.
2026-09-24 16:37:05 +08:00
Turtle a3480857dd feat(plugins): offer Auto review and keep Inspector explicitly installed (#4867)
* feat(experimental): ship every experimental capability as an optional bundle

dsh-base mounts the registration-only browser-use and computer-use
services; the Playwright MCP, Chrome DevTools MCP, native and MCP Cua
Driver providers, Auto review, and the Inspector become one-row bundles
listed in OPTIONAL_BUNDLES with an icon and locale display metadata.
verify-default-product-isolation requires both for every optional
bundle. Python PTC and Stagehand stay explicit compositions.

* feat(experimental): keep optional bundles inside the install closure

Drop the Playwright MCP, Chrome DevTools MCP, and native Cua Driver
bundles: each is a runtime dependency of every install and would add
about 85 MB of provider runtimes whether or not enabled. dsh-browser-use
leaves dsh-base with them. The three packages keep their locale display
metadata for component rows.

* feat(experimental): drop the Cua Driver MCP bundle and leave dsh-base untouched

* test(web): refresh Official-group goldens for the four optional bundles

* fix(plugins): use an uninstalled bundle as the install example and pin optional-bundle metadata

The install guide's example is now @deepseek-ai/dsh-subagent-codex,
a published bundle no shipped profile carries, since Auto review is an
installed optional bundle. The optional-bundle spec guards its corpus and
pins each bundle's title, description, and icon in both languages; the
Inspector's Loader test mounts its real bundle patch, its Client names
the reload a hot-enabled page needs, and its description states the
loopback DevTools endpoint's reach.

* test(web): refresh GitHub install recovery placeholder snapshot
2026-09-24 16:33:50 +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 fe6ce46248 docs(context): keep the group summary within its word budget 2026-09-24 16:28:51 +08:00
imccyu 3eadc9b56c Merge pull request #5107 from deepseek-harness/fix/desktop-local-markdown-images
fix(desktop): 修复本地 Markdown 图片预览
2026-09-24 16:27:11 +08:00
turtle1999 da05b8d9c5 test(web): reopen shortcut fixture sidebar with its binding 2026-09-24 16:27:07 +08:00
Dudu-0223 4e6a1c1073 fix(session-query): classify live projection failures as corrupt 2026-09-24 16:13:37 +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
mektpoy 8e42deafa1 fix(client): keep the sidebar toggle's focus ring unclipped
The sidebar toggle is flush with `.logoRow`, which clips its own overflow, so
the standard outward ring lost every pixel that left the row: the reviewer saw
the ring cut on the toggle in both the expanded header and the settled rail.

The 36px rail toggle is also 1px wider than its 35px row, so the control's own
right edge was clipped there. Draw this control's ring inside its own box and
stop clipping the row once the rail has settled; the ring keeps the standard
`--dsw-focus-ring-width` colour and width, and pointer modality still resolves
`--dsw-focus-ring-color` to transparent.

`focus-rings.e2e.ts` asserts the whole ring against every clipping ancestor in
both layouts, in both themes.
2026-09-24 16:02:45 +08:00
turtle1999 6720a1206f fix(ci): reconcile workspace fixture with current master 2026-09-24 16:02:31 +08:00
Ziya 60e69cb931 Merge pull request #5113 from deepseek-harness/fix/github-recovery-on-mirror
fix(plugin-manager): offer another way when a GitHub failure already asked the mirror
2026-09-24 01:01:22 -07:00
yixiangihsiang ed3dcf54c5 feat(web): refine shortcut editing and sidebar hints 2026-09-24 15:55:33 +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
ZiyaZhang d7db3a2f06 test(plugin-manager): name the on-mirror recovery case by what it asserts 2026-09-24 00:46:50 -07:00
liukx0205 9827bcfb37 Merge master into fix/focus-ring-brand-primary 2026-09-24 15:38:51 +08:00
lsdsjy 53e000810d Merge origin/master into feat/developer-mode-preset-selection 2026-09-24 15:33:43 +08:00
ZiyaZhang ef516f98cf fix(plugin-manager): offer another way when a GitHub failure already asked the mirror 2026-09-24 00:29:39 -07:00
imccyu 55fadaa601 Merge pull request #5030 from deepseek-harness/ihsiang/ui-visual-consistency
feat(web): 统一界面圆角与菜单材质,优化文件改动展示
2026-09-24 15:10:55 +08:00
imccyu d3314da7c2 test(web): expect unblurred desktop onboarding confirmations 2026-09-24 14:58:55 +08:00
imccyu 59d2e01575 revert(desktop): remove branch-local development launchers 2026-09-24 14:58:55 +08:00
imccyu 6000dcdda5 fix(web): reconcile visual consistency after master rebase 2026-09-24 14:58:55 +08:00
yixiangihsiang 63c7e370ce test(desktop): isolate packaging Git observations from concurrent fixtures 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 8b60939220 fix(desktop): confine launcher proxies to runtime preparation 2026-09-24 14:58:54 +08:00
yixiangihsiang fdd14a0989 feat(web): unify UI materials and streamline file review 2026-09-24 14:58:54 +08:00
lsdsjy 7e97c458ba Merge pull request #5106 from deepseek-harness/fix/account-balance-timeout
fix(account): extend balance request timeout to 30 seconds
2026-09-24 14:50:25 +08:00
mektpoy 74a0c834f9 Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary
Only the ui-theme README pairing record conflicted; re-recorded. The stylesheet
corpus spec passes over master's new client sheets, so no ring needed realigning.
2026-09-24 14:49:16 +08:00
mektpoy 006244a3ad refactor(client): unify the trajectory cell's selected ring on the brand blue
`.selected` still named `--dsw-alias-brand-primary-new-colorprimary-new-color`, the
corrupted token left by a botched rename; its dark value is `deepseek-450` while
every focus ring now uses `deepseek-400`. The selection ring reads the clean
brand-blue alias instead, so one blue covers selection and focus.
2026-09-24 14:47:50 +08:00
winewill 3511c45426 Merge pull request #5015 from deepseek-harness/feat/close-window-quit-behavior
feat(desktop): 关闭窗口隐藏到后台,退出前按任务状态确认
2026-09-24 14:45:04 +08:00
lsdsjy 4c4108ef1b test(web): 修复模式选择测试类型断言与分支覆盖 2026-09-24 14:42:13 +08:00
winewill fbb3fb770f fix(desktop): cancel pending quit decisions during installer exit 2026-09-24 14:36:02 +08:00
lsdsjy a44534e274 feat(web): 由开发者模式统一控制新任务模式选择 2026-09-24 14:29:18 +08:00
winewill 5637311d5a fix(desktop): confirm the first close with the shared shell dialog 2026-09-24 14:25:02 +08:00
winewill 20dae9b6fa test(desktop): align close behavior fixtures after master rebase 2026-09-24 14:24:39 +08:00
winewill eec2b5fa6e fix(desktop): enlarge whale artwork in Windows tray icon 2026-09-24 14:24:39 +08:00
winewill e6f135f15c fix(desktop): harden quit bypass and background-notice bookkeeping after review
- Only the definitive Windows session-end message bypasses the quit
  confirmation; the macOS power-off flag clears on the next focus or show
  because another application can cancel that shutdown.
- A bypassing quit disposes the pending confirmation so a late inspection
  result opens no box and an answered box cannot approve.
- Cancelling a quit that closing the welcome window started shows the
  welcome window again.
- The first-hide notice records its marker only after delivery and
  withdraws it on failure; the Windows quit dialog uses the multi-size ICO.
- windowShown settles when the awaited window is destroyed.
- Cross-link the partially superseded window-menus note; tidy docs.
2026-09-24 14:24:39 +08:00
winewill 4745934683 feat(desktop): hide the window on close and confirm interruptible quits
Closing the main window hides it on macOS and Windows; the page and the
Host keep running and the next show resumes the same document. Windows
gets a permanent tray icon (open / quit) and a one-time notification the
first time the window is hidden after installation.

Every ordinary quit entry asks the Host over a new quit-inspection IPC
request for active tasks (same rule as the update restart check) and
armed scheduled reminders (schedule family of workspace/session-activity
for loaded sessions). Nothing to interrupt quits silently; otherwise a
native message box explains what stops, with Quit as the default and
Cancel on Esc. Inspection failure or a missed two-second deadline counts
as running tasks. The installer restart, fatal recovery, the development
restart command, and OS session end skip the confirmation.

Also: defer the downloaded-update confirmation while the window is hidden,
render the tray ICO from the vector icon, and point the installer's
running-application message at the tray.

Closes #4013
2026-09-24 14:24:39 +08:00
lsdsjy c846fd48a3 fix(account): extend balance request timeout to 30 seconds 2026-09-24 14:11:23 +08:00
Kaige-Gao 7f0a53dfb3 fix(desktop): render local Markdown images
Resolve local image paths through the authenticated dsh-app file route and allow that route in rewritten Markdown images. Cover desktop rendering, previews, encoded filenames, and unsupported origins.

Fixes #5105.
2026-09-24 14:10:13 +08:00
Yudong Han 31da6718a9 Merge pull request #5091 from deepseek-harness/fix/document-preview-white-placeholder
fix(web): 统一文档加载提示、分页留白和主题背景
2026-09-24 14:07:10 +08:00
yudshj ed4445b028 fix(web): unify document loading and spaced theme-aware pages 2026-09-24 13:57:42 +08:00
Yichen Jiang 55b06e6f81 Merge pull request #5098 from deepseek-harness/worktree/model-api-key-autofill
fix(web): suppress saved-password autofill in API key inputs
2026-09-24 13:55:56 +08:00
Yichen Jiang 9a816ec171 Merge pull request #5065 from deepseek-harness/worktree/issue-5003-review-a73e0a
fix(app-boot): preserve routed resolution errors under async module hooks
2026-09-24 13:50:38 +08:00
Yichen Jiang 1197478415 Revert "fix(session): isolate source migration verifiers in processes"
This reverts commit f1cc349a4290fbf34e1f68e51ea787524e761d7c.
2026-09-24 13:46:52 +08:00
winewill 1bc594d701 Merge pull request #5076 from deepseek-harness/feat/windows-update-restart
fix(desktop): clarify Windows updates and raise the restarted window
2026-09-24 13:41:12 +08:00
Yichen Jiang fa04034a9c fix(session): isolate source migration verifiers in processes 2026-09-24 13:31:16 +08:00
Yichen Jiang 11c0511271 fix(web): align remaining API key inputs with autofill policy 2026-09-24 12:32:10 +08:00
Yichen Jiang 4cc76d04e9 fix(web): suppress saved-password autofill in API key inputs 2026-09-24 12:31:56 +08:00
liukx0205 4f1a1289f5 fix(client): use blue focus rings in light and dark themes 2026-09-24 12:24:47 +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 e71fa92030 Merge master into fix/focus-ring-brand-primary 2026-09-24 12:05:19 +08:00
liukx0205 bf4d264368 Merge master into feat/unify-code-highlight-languages 2026-09-24 11:58:08 +08:00
Yichen Jiang 9a9a331963 fix(voice-input): preserve draft focus during setup guidance 2026-09-24 11:55:27 +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
winewill 037bed1f41 fix(desktop): reject running app before installer extraction 2026-09-24 11:49:01 +08:00
Yichen Jiang 1648bb6587 Merge origin/master into worktree/voice-setup-navigation 2026-09-24 11:45:52 +08:00
lsdsjy 5be03410cd Merge pull request #4990 from deepseek-harness/fix/platform-webview-persistence
fix(desktop): persist account-scoped Platform page preferences
2026-09-24 11:21:21 +08:00
Yichen Jiang 730446172e test(voice-input): address setup guidance review feedback 2026-09-24 11:11:21 +08:00
lsdsjy dd0578fadd Merge origin/master into fix/platform-webview-persistence 2026-09-24 11:05:40 +08:00
Turtle 2099andTurtle 16af6fddc7 fix(plugins): name the default install source by the registry it names (#5084)
* fix(plugins): name the default install source by the registry it names

The add-plugin dialog showed "默认安装源" for pnpm's own registry, which
told the reader nothing about where the install would download from. Name
npm's own registry as the official npm registry, and any other registry
pnpm's own configuration names by that registry's name or host, so the
folded control reads by the registry the install actually asks.

* test(plugins): cover comparing an unparseable registry address

---------

Co-authored-by: Turtle <[email protected]>
2026-09-24 10:55:35 +08:00
07akioni 655534d009 Merge pull request #5046 from deepseek-harness/fix/language-neutral-default-workspace-naming
fix(workspace): keep the default Workspace path language-neutral
2026-09-24 10:41:07 +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
turtle1999 687aa02578 fix(ci): preserve Wine build metadata and isolate test fixtures 2026-09-24 02:32:24 +08:00
winewill a67119845d fix(desktop): align update fixtures and clear deferred startup focus 2026-09-24 01:18:52 +08:00
winewill a7e745de66 Merge master into feat/windows-update-restart 2026-09-24 01:11:36 +08:00
winewill 3bcf1bfc7c Merge pull request #4967 from deepseek-harness/fix/desktop-main-bundle-order
build(desktop): bundle the main process after the workspace tsdown pass
2026-09-24 00:44:55 +08:00
std4453 3055bad0d1 Merge pull request #5078 from deepseek-harness/fix/onboarding-recharge-artwork
feat(desktop): add onboarding with current artwork and work-detail defaults
2026-09-24 00:36:30 +08:00
Yifffan f032bd2d04 Merge pull request #5002 from deepseek-harness/session-archieve-refine
feat(client): explicit three-way archived filter with empty-state refinements
2026-09-24 00:18:51 +08:00
zhc 7cadefb991 fix(onboarding): use shared modal focus ownership 2026-09-23 23:58:21 +08:00
Yif 5688962ee9 test(ui-primitives): count the 94 merged public glyphs 2026-09-23 23:48:05 +08:00
Yif 6ddece2439 refactor(ui-workspace): share the viewing store with the row toast as a declared store
The archived filter reaches the row toast through the registration's declared
store instead of a registrant-owned view hook, per the cross-entry view-state
rule. The README names the toast action by its actual label, and the
unarchive e2e switches back to Hide archived so it again proves the restored
row is an ordinary row in the default view.
2026-09-23 23:48:04 +08:00
Yif d6e5dc7748 test(client): cover the unset archived filter and follow the three-way menu in web goldens 2026-09-23 23:48:00 +08:00
Yif aaf733c175 fix(client): let a snippetless search result use the full row for its workspace name 2026-09-23 23:48:00 +08:00
Yif 64352df324 style(client): tune empty-state tokens and glyph spacing 2026-09-23 23:47:59 +08:00
Yif e28434bbc8 chore(client): re-record slot catalog source lines after the slots import 2026-09-23 23:47:59 +08:00
Yif 2129486048 feat(client): give the session list an iconed empty state with an archived-only way back 2026-09-23 23:47:30 +08:00
Yif 62bd4363e6 feat(client): omit the toast filter action while archived rows are visible 2026-09-23 23:46:21 +08:00
Yif 9775a95315 feat(client): make archived filtering an explicit three-way menu choice
The view-options filter is now hide/all/only radio items, the
archived-only view drops Workspaces without an archived Session, and
tree children of a dropped Workspace nest under the nearest shown
ancestor (#4854).
2026-09-23 23:46:21 +08:00
Yif 82b8c476e6 feat(client): add archive-off glyph and reuse chat-lines for session references 2026-09-23 23:46:21 +08:00
zhc 0e18138427 test(web): start bonus notice scenario after onboarding 2026-09-23 23:44:51 +08:00
zhc 6233f998a2 merge: integrate current account bonus notices with onboarding 2026-09-23 23:43:53 +08:00
winewill 1e5af11d8c build(desktop): emit shortcuts protocol before the main bundle 2026-09-23 23:42:19 +08:00
winewill 917613c776 Merge master and preserve Desktop bundle validation 2026-09-23 23:40:02 +08:00
zhc e44a4d4dd3 test(desktop): separate fixture state from native window members 2026-09-23 23:35:58 +08:00
lsdsjy a523d8ec58 Merge pull request #5040 from deepseek-harness/feat/account-bonus-notices
feat(account): show bonus notices and send Platform client metadata
2026-09-23 23:35:54 +08:00
zhc ac586cefca test(desktop): type overlay visibility fixture explicitly 2026-09-23 23:35:13 +08:00
涂轶翔 f6a2c700af Merge pull request #4844 from deepseek-harness/feat/dynamic-tool-update-message
Support dynamic tool updates during active conversations
2026-09-23 23:35:08 +08:00
zhc 4fdcaf16b5 merge: integrate desktop shortcuts and refresh onboarding decisions 2026-09-23 23:34:17 +08:00
Chinesezjc 7a362b263b Merge pull request #4335 from deepseek-harness/feat/schedule-storage-phase1
feat(schedule): persist tasks and resume due sessions
2026-09-23 23:33:33 +08:00
lsdsjy 6171ed6f5d Merge origin/master into feat/account-bonus-notices 2026-09-23 23:25:21 +08:00
lsdsjy 3ff8fe093a fix(account): satisfy bonus notice style and coverage checks 2026-09-23 23:12:19 +08:00
流光 6638afae5e Merge pull request #4938 from deepseek-harness/feat/shortcuts-rework
feat(shortcuts): restore configurable shortcuts with regression fixes
2026-09-23 23:08:15 +08:00
zhc f55c8d5215 test(desktop): await the selected onboarding preference write 2026-09-23 22:57:42 +08:00
lsdsjy b9fb1cceea fix(web): synchronize read-only spreadsheet scroll state 2026-09-23 22:53:08 +08:00
zhc c4b13d154f merge: refresh master translation pairing format 2026-09-23 22:47:06 +08:00
Xinyu Yang bfb624cd3b Merge master translation record migration into feat/shortcuts-rework 2026-09-23 22:46:08 +08:00
mektpoy c3cd67a2e8 Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary
Only the bilingual pairing records conflicted. Master moved Agent Note records to
per-heading hashes, so this branch's note record was re-recorded in that format;
the ui-primitives and ui-theme README records were re-recorded unchanged. The
stylesheet corpus spec still passes over master's new client sheets, so no ring
needed realigning this time.
2026-09-23 22:43:43 +08:00
lsdsjy 99032c6b10 Merge origin/master into feat/account-bonus-notices 2026-09-23 22:42:37 +08:00
Tianyi Cui ba66011fdb test(sdk): use generated sample data for cache probes
The probe needs a value that cannot be inferred from the prompt, not protected information. Describing that generated UUID as a private secret made the API test depend on an unrelated disclosure decision. Use an explicitly synthetic sample label and a benign formatting update while preserving execution audits, first-continuation cache assertions, and disabled retries.
2026-09-23 22:40:40 +08:00
Tianyi Cui 5827477658 test(web): account for tool update process rows
Open the running Think disclosure explicitly when a process group also contains tool updates, and keep the fork process summary expandable in its ARIA expectation. Record the Goal request-series marker in a V4 fixture successor while preserving the historical V3 recording. Production behavior and the scroll assertions stay unchanged.
2026-09-23 22:40:40 +08:00
Tianyi Cui 611c2bc2e9 test(headless): refresh dynamic tool request expectations
Record explicit request-series starts and the tool additions admitted when resuming a seeded parent with no tool declarations. Keep tool names and the shifted source-event reference alongside that activation history. Refresh only the affected owner-local outputs to the current writer format; retain historical replay fixtures and the unchanged child expectation.
2026-09-23 22:40:40 +08:00
Tianyi Cui f6848ee921 fix(agent-loop): preserve prompt history during supported tool updates
Tool changes previously forced prompt consolidation even when the prepared
route could activate new tools through history. Rewriting the first system
message, or clearing an earlier appended prompt, reset the declaration
series and turned additions into immediate declarations.

Only routes without toolUpdate need that tool-triggered consolidation.
Capable routes append the full changed prompt and keep existing messages.
Explicit series starts, surface replacements, and unsupported prompt
routes still consolidate; retained-name definition changes still rebuild
tool declarations in Session.

Cover both update modes and reset paths, and pin the combined prompt/tool
transition through the shipped headless profile with shared schema goldens.
2026-09-23 22:40:40 +08:00
Tianyi Cui f765a21dc7 test(sdk): verify cache reuse across native tool additions
Run a real DeepSeek conversation through the built SDK profile and change the scoped tool registry through a model-invoked controller. Compare the first post-addition cache usage with the preceding request after unique user history has been cached; verify deferred declarations, chronological activation, and actual tool execution. Removal remains covered without requiring its cache prefix to survive. Disable test and provider retries so a warmed transition cannot hide a cache regression.
2026-09-23 22:40:39 +08:00
Tianyi Cui e221615112 test(sdk): cover native dynamic tool lifecycle 2026-09-23 22:40:39 +08:00
Yixiang Tu 43048098f6 test(llm): cover dynamic tool updates and clarify documented limits 2026-09-23 22:40:38 +08:00
Yixiang Tu 1b0c2e5760 fix(session): retain baseline-bound tool activations 2026-09-23 22:40:36 +08:00
Yixiang Tu 1321345c84 docs: keep architecture within its word budget 2026-09-23 22:40:36 +08:00
Yixiang Tu 8862ed8266 docs: mirror regenerated event table rows into the Chinese counterpart 2026-09-23 22:40:36 +08:00
Yixiang Tu 59318c1204 fix(llm): clarify tool update projection and preserve deferred activation 2026-09-23 22:40:19 +08:00
Xinyu Yang e8daeb4969 test(web): align window drag fixture with desktop shortcuts 2026-09-23 22:39:48 +08:00
Yixiang Tu 7e5f906945 feat(client): present compact developer tool update notices 2026-09-23 22:39:34 +08:00
Yixiang Tu bc8c0dbf40 feat(llm): emit dynamic tool updates and project them per route
Log tool changes as developer messages independently of model capability,
fold committed headers and updates into Session.toolHistory(), and let the
LLM runtime construct deferred and retained declarations for routes that
declare a toolUpdate mode. DeepSeek serializes updates as system-role
tool_addition/tool_removal blocks with defer_loading and the tool-changes
beta header. An unchanged restored tool continues the series and is
re-offered through its recorded blocks instead of rewriting declarations.

Replace the obsolete rejection tests with wire assertions and add coverage
for the session fold, loop emission, route projection, config validation,
and the beta header. Chat and Trajectory changes land separately.
2026-09-23 22:39:26 +08:00
mektpoy c3a8318377 test(web): type the ring sample as a colour triple 2026-09-23 22:38:29 +08:00
lsdsjy 651f419bf8 Merge remote-tracking branch 'origin/master' into fix/platform-webview-persistence 2026-09-23 22:37:17 +08:00
lsdsjy 1efb58f47e Merge origin/master into feat/account-bonus-notices 2026-09-23 22:33:20 +08:00
Turtle e7def469e1 feat(i18n): key translation pairing records by heading section (#5036)
* feat(i18n): key translation pairing records by heading section

Replace the whole-file blob hashes in *.i18n.yaml with one entry per
heading section that still holds language-specific content, keyed by the
English heading-slug path. Blocks identical across the pair (generated
table rows, code blocks, shared regions) stay out of the hash, so edits to
different sections and identical regenerations merge with Git's default
text merge, including on GitHub.

Remove the dsh-translation-pairing merge driver, its resolver command and
installer wiring; gen-translation-brief recovers last-confirmed text from
commit history. Migrate all active records, archive the superseded Agent
Note, and record the replayed conflict reduction in the new one.

* test(i18n): refresh translation prompt snapshot for the terminology note

* feat(i18n): exclude only code blocks and generated regions from pairing records

Replace byte-equality masking with an explicit rule: a record hash skips
fenced code blocks and BEGIN/END GENERATED regions, the two kinds of
content the pairing gate already requires to be identical on both sides.

Move generated data into regions written into both pages:
gen-config-catalog renders both languages and the record with per-package
regions labelled by code identifiers; gen-module-graph keeps its table in a
region; gen-doc-graphs splices the event matrix regions into the Chinese
page. Add a generic region splice beside the region grammar.
2026-09-23 22:32:06 +08:00
Xinyu Yang 64d401c820 fix(shortcuts): align package versions with release 2026-09-23 22:26:26 +08:00
zhc 7b4541e21c fix(desktop): use public work detail types and precise persistence checks 2026-09-23 22:26:19 +08:00
lsdsjy 311ab0524f Merge remote-tracking branch 'origin/master' into fix/platform-webview-persistence 2026-09-23 22:25:54 +08:00
zhc 82fe79a7b1 fix(desktop): integrate onboarding with current master 2026-09-23 22:24:21 +08:00
lsdsjy 235b13ab12 Merge origin/master into feat/account-bonus-notices 2026-09-23 22:23:57 +08:00
mektpoy 6921e37b99 chore(code-language): match the root release version
master released 0.1.7-rc.1 while the package added by this branch still declared 0.1.7-alpha.2, which failed Dependency layout (verify-npm-install-layout), Pack npm tarballs (release members must share one version) and node 24 / static (constraints) from one cause. Merge origin/master and bump the new package to the root version.
2026-09-23 22:23:51 +08:00
zhc ad86306feb fix(desktop): align onboarding with current work detail modes 2026-09-23 22:21:19 +08:00
zhc 372c311511 fix(desktop): refresh recharge onboarding artwork 2026-09-23 22:21:18 +08:00
07akioni 93b832f1b0 Merge pull request #4459 from deepseek-harness/feat/desktop-onboarding
feat(desktop): add device-local account onboarding
2026-09-23 22:21:18 +08:00
mektpoy 120612ddc8 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-23 22:17:39 +08:00
Xinyu Yang 851686d144 Merge latest origin/master into feat/shortcuts-rework 2026-09-23 22:12:48 +08:00
Xinyu Yang 4b03fefec1 Merge origin/master into feat/shortcuts-rework 2026-09-23 22:10:54 +08:00
07akioni d9ff18ec2a Merge pull request #4622 from deepseek-harness/feat/window-drag-coverage
refactor(client): 让每个 chrome 行自持窗口拖拽(单一声明 + 覆盖契约 + 统一重收集)
2026-09-23 22:08:13 +08:00
winewill 174d385bf5 Merge master into fix/desktop-main-bundle-order 2026-09-23 22:07:37 +08:00
lsdsjy 7d56ff04aa fix(account): address bonus notice review and balance labels 2026-09-23 22:06:29 +08:00
lsdsjy 50293e4dd4 Merge origin/master into feat/account-bonus-notices 2026-09-23 22:05:41 +08:00
lsdsjy bf5eb8a39a Merge pull request #4650 from deepseek-harness/feat/account-provider-signout
feat(account,models): separate account routing and confirm sign-out impact
2026-09-23 21:48:20 +08:00
lsdsjy 9a9948bc83 test(web): align unavailable model and cold session expectations 2026-09-23 21:33:16 +08:00
Xu Hanxiang f717f413da Merge pull request #4813 from deepseek-harness/fix/windows-file-open-and-preview
fix(web): 修复 Windows 文件预览、应用图标与默认打开操作
2026-09-23 21:29:24 +08:00
winewill d2a5490fa0 fix(desktop): clarify Windows updates and raise the restarted window 2026-09-23 21:25:54 +08:00
lsdsjy 71f0713b86 fix(llm): align provider packages with release version 2026-09-23 21:18:17 +08:00
lsdsjy b1cb0d6718 Merge remote-tracking branch 'origin/master' into feat/account-provider-signout 2026-09-23 21:17:27 +08:00
mektpoy 4a409edf8b fix(client): keep the plugin manager's whole top strip draggable
The page carried a 28px top inset above its head row, so the window's topmost 28px on that page belonged to no drag region — the frame's former band covered it, and the per-row mark did not. The inset moves into the head rows themselves (.pageHead and .detailTop), which now start at the window's top edge while the content keeps its position. The browser lane pins each row's top edge at zero and the negative control confirms both assertions fail on the pre-fix sheet.
2026-09-23 21:10:27 +08:00
liukx0205 caa4b8feca fix: highlight CSV without changing the default spreadsheet preview 2026-09-23 21:09:42 +08:00
lsdsjy eff44a957c test(headless): isolate API-key credential snapshots 2026-09-23 21:08:21 +08:00
Turtle 46a7f68b09 Merge pull request #5073 from deepseek-harness/rel/dsh-0.1.7-rc.1
release(dsh): 0.1.7-rc.1
2026-09-23 21:03:33 +08:00
lsdsjy 3cf49f26ab fix(account): cover live notices and satisfy CI checks 2026-09-23 20:53:30 +08:00
turtle1999 a60af51e80 release(dsh): 0.1.7-rc.1 2026-09-23 20:47:45 +08:00
lsdsjy 4e0283c89b Merge remote-tracking branch 'origin/master' into feat/account-provider-signout 2026-09-23 20:45:29 +08:00
Turtle 07ad70817f fix(plugins): deny incompatible bundles and clarify compatibility refusals (#5061)
* fix(plugins): deny incompatible bundles and clarify compatibility refusals

A bundle package is not a plugin row, so startup admission never read its
own DSH peers: a bundle installed outside DSH or before a DSH upgrade still
applied its patch layer. loadProfileDirectory now skips such a bundle like an
unreadable one unless the profile exempts that exact pair.

A post-install refusal in a profile without a lockfile reinstalls from the
restored manifest instead of failing a frozen install and leaving the
rejected packages in node_modules.

Compatibility warnings now name the `dsh plugin allow-version` command for
CLI-managed profiles, startup denials name the row id instead of a resolved
module URL, and the CLI no longer reports "pnpm failed" when pnpm never ran.

* feat(plugins): report incompatible versions as typed refusals

Compatibility checks now yield the refused packages as data instead of a
profile-specific sentence. runProfilePnpm returns them as
PackageResult.incompatible, and the plugin manager refuses with the
incompatible-version code carrying the same records. Each surface renders
them: the CLI prints the exact allow-version command for its profile, the
Web plugin manager words them through its locale dictionary, and app-boot
keeps one neutral English diagnostic for logs and startup stderr.

* fix(plugin-manager): drop the agent exemption hint from the incompatibility reason
2026-09-23 20:44:06 +08:00
_Kerman ce5ef7a17b fix(workspace): let confirming the seeded label pin a default title
Review caught two real gaps in the previous commit.

The rename dialog's no-op check compared the localized display title, so
on an automatically titled Workspace the seeded prefill equalled it and
Rename stayed disabled — the user had no direct way to pin the visible
name. The dialog now seeds the draft with the label on screen while the
stored title decides whether confirming saves, and the duplicate check
excludes the target by Workspace identity instead of by title, since the
seeded label equals the row's own displayed title.

The registry took the automatic title from the canonical path, so a
symlink at the first-use path titled the Workspace after its target and
the default lost its localized label. The title now comes from the
requested directory's final segment; the path stays canonical.

Also: drop a rotting file count and the stale localized-path wording from
the Agent Notes, record the two cwd-derived Session label fallbacks as
known consequences, trim the WorkspaceBrowser memo comment to the
non-obvious part, and remove the deleted request type from the
hand-maintained catalog LINK_MAP.
2026-09-23 20:32:57 +08:00
imccyu c76217a356 Merge pull request #5053 from deepseek-harness/feat/tool-preparing-progress
feat(chat): add work detail modes and file preparation progress
2026-09-23 20:28:16 +08:00
imccyu 490f569044 Merge pull request #5067 from deepseek-harness/revert-5062-ihsiang/chat-flow-visual-polish
Revert "fix(web): 恢复蓝色深度求索动画并优化过程折叠展示"
2026-09-23 20:22:22 +08:00
imccyu 7c8a44ac31 Revert "feat(web): restore the process-row polish on the grouped work details"
This reverts commit 036d53fb612c785a17d9e6068f58b155d87120c1.
2026-09-23 20:21:46 +08:00
ihsiang b09dd94827 feat(web): restore the process-row polish on the grouped work details
* feat(web): restore the process-row polish on the grouped work details

The sweep highlight, shared row colors, expanded-row spacing, and the
12–24px font-size range were developed against the pre-revert work-details
implementation. Re-apply them to the grouped implementation that replaced it.

- TextShimmer keeps its active-driven span and now paints a masked sweep
  overlay in the theme's `--dsw-alias-label-shimmer` color, so the base text
  inherits the caller's color and hover changes.
- DisclosureRow owns the row color: tertiary at rest, secondary on hover,
  with glyphs, titles, and summaries inheriting it; tool, skill, command,
  reasoning, and workflow rows drop their own hover darkening.
- ChatView spaces process rows 8px apart and keeps 16px beside Assistant
  responses; the grouped header sits 8px above its first member.
- The Settings font-size stepper accepts 12–24px, and the grouped header's
  leading box and glyph scale with the content font-size delta.

* fix(web): restore blue running status and refine process disclosures

* fix(web): finalize running snapshots and whale animation

* fix(web): preserve disclosure layout and repair CI fixtures
2026-09-23 20:10:50 +08:00
turtle1999 f64c57dbb2 fix(plugin-manager): drop the agent exemption hint from the incompatibility reason 2026-09-23 20:04:31 +08:00
lsdsjy 1098fa52ea fix(account): use configured Platform origin for account link 2026-09-23 20:00:34 +08:00
lsdsjy 9759ea2719 Merge origin/master into feat/account-provider-signout 2026-09-23 20:00:03 +08:00
mektpoy f35db51bee fix(native-command): transport the Windows adapter as a script file
Resolving packaged-app icons grew the embedded C# until the generated
-EncodedCommand line reached 32,883 characters for a 222-character path,
past the 32767-character CreateProcess limit, so association queries stopped
starting for long multibyte paths. Write the adapter to a private temporary
script and pass it with -File instead; the command line no longer grows with
the path. The temporary directory is removed once the call settles.

The icon fallback also reads the handler name the caller already fetched
instead of calling GetName again, and the README records that icon
visibility depends on resolving the Shell's indirect reference.
2026-09-23 19:58:58 +08:00
mektpoy 64795b4879 fix(ui-open-in-app): open the application the control names
With no OS-marked default the split button labelled the first registered
application and marked it "(default)" in the menu, but the primary action
still asked the OS to resolve the association again; on Windows that can
prompt or open a different application than the button promises. Send that
application's id explicitly and keep the association path for the case the
Host actually marked a default.

The snapshot scenario now clears the platform's own default marker and
re-enters the file, so the association is read again instead of reusing the
answer already held, and it asserts the launched target rather than only the
labels.
2026-09-23 19:58:53 +08:00
mektpoy 2a0531e9c3 fix(code-language): address review on the persisted hint and aliases
Review threads: shrink READ_LANG_BY_EXTENSION to the suffixes whose own name is the better label (tsx/jsx/tf/tfvars/gradle) since the other 41 values already equal the language short name; label .hcl as hcl and .tfvars as tfvars instead of tf; accept .groovy alongside .gradle with its own short name; document that LANG_ALIASES also carries the persisted short ids; route the three inline alias lookups through grammarForHint; state that a short name may equal the grammar id; fix the util README wording.

Tests: cover .groovy, the four self-naming suffixes, and every id each suffix reaches through the shipped surfaces (the hand-synced LAZY_ALIASES list could not catch an alias whose target is neither boot nor lazy).
2026-09-23 19:57:19 +08:00
turtle1999 51d70c5f5c feat(plugins): report incompatible versions as typed refusals
Compatibility checks now yield the refused packages as data instead of a
profile-specific sentence. runProfilePnpm returns them as
PackageResult.incompatible, and the plugin manager refuses with the
incompatible-version code carrying the same records. Each surface renders
them: the CLI prints the exact allow-version command for its profile, the
Web plugin manager words them through its locale dictionary, and app-boot
keeps one neutral English diagnostic for logs and startup stderr.
2026-09-23 19:51:29 +08:00
mektpoy c5c09c9afa Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-23 19:49:34 +08:00
imccyu 96a4607ba2 test(chat): refresh work detail snapshots and preparation progress 2026-09-23 19:48:45 +08:00
imccyu 6943f9fee6 fix(chat): satisfy hook documentation and lint contracts 2026-09-23 19:48:45 +08:00
imccyu 5a32aae571 docs(chat): align preparing hooks and work detail modes 2026-09-23 19:48:45 +08:00
imccyu 1b55f5bea3 fix(chat): retain preparing tools and ordering until step completion 2026-09-23 19:48:45 +08:00
imccyu 4987e90b32 fix: static 2026-09-23 19:48:45 +08:00
imccyu ac77cefba7 test(chat): cover work detail modes and preparation subscriptions 2026-09-23 19:48:45 +08:00
imccyu d6fb1351b3 fix(chat): refine verbose headers and file preparation rows 2026-09-23 19:48:45 +08:00
imccyu 015a9b202c feat(chat): add four work detail modes and legacy mappings 2026-09-23 19:48:45 +08:00
imccyu b660f72d4e feat(tool): show content preparation progress for file mutations 2026-09-23 19:48:45 +08:00
mektpoy 63797c0208 docs(client): retire the sidebar note's window-drag pulse claim
The retained-tab-layout note still stated that existing window-drag region pulses remain; this layer's pulse is gone and the shell watcher replaces it. Rewrite both sides and re-record the pair.
2026-09-23 19:48:22 +08:00
mektpoy 7dfad90748 fix(client): keep the drag watcher alive through a slide and stop a float being dragged
The recall watcher now tolerates a short quiet window so a report that arrives before a CSS transition moves anything cannot end the loop on its first unchanged sample, re-arms on a transition or animation that touches a marked row, and re-arms on a child list change in a container holding one. A dock picture withdraws its strip's drag claim while a pane floats, because a float sorted before that row would otherwise sit earlier in the document and lose its own subtraction. The settings panel closes when an onboarding step appears, since the step's overlay marks only #root inert. Prose and the two Agent Notes record the Windows narrowing of the Platform overlay return bar, the collection rule, and the rows' one home in the ui-theme manifest.
2026-09-23 19:45:14 +08:00
Yudong Han fb8bb16345 Merge pull request #5052 from deepseek-harness/fix/zoom-rerender
fix(preview): redraw PDF and Office pages after pinch zoom
2026-09-23 19:42:44 +08:00
Yichen Jiang 2152881fcf fix(app-boot): preserve routed resolution errors under async module hooks
Node's module-hooks thread serializes resolver errors and returns the stack
accessor as a read-only configurable data property. Rewriting the routed
importer then assigned error.stack, threw a TypeError, and replaced the
original ERR_PACKAGE_PATH_NOT_EXPORTED or ERR_MODULE_NOT_FOUND error, so
plugin metadata reported a failure instead of falling back to package fields.

The importer rewrite now redefines a rejected stack value in place and
rethrows the original error with its code.
2026-09-23 19:42:34 +08:00
mektpoy f1869391d1 Merge remote-tracking branch 'origin/master' into fix/truncate-without-splitting-surrogates 2026-09-23 19:37:43 +08:00
yudshj 312341970c Merge master into fix/zoom-rerender 2026-09-23 19:31:59 +08:00
mektpoy e39b0c307c fix(client): align the image lightbox and image button rings
Master's newest commits add `.close` in ImageLightbox and `.imageButton` in
MarkdownText, each declaring the brand token directly. Both now read
`--dsw-focus-ring-color` through `--dsw-focus-ring-width`, as the stylesheet
corpus spec requires of every client focus rule.
2026-09-23 19:31:07 +08:00
mektpoy fefead85e9 Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary 2026-09-23 19:29:43 +08:00
imccyu 9b510d89a5 Merge pull request #5029 from deepseek-harness/feat/chat-image-preview-4941
feat(chat): 图片链接悬停预览与内联图片放大
2026-09-23 19:27:02 +08:00
Yudong Han 896c81d796 Merge pull request #5047 from deepseek-harness/fix/excel-trackpad-dark-mode
fix(web): support free spreadsheet trackpad panning and readable controls
2026-09-23 19:26:26 +08:00
lsdsjy 57a98bff5f fix(account): use medium weight for bonus notice title 2026-09-23 19:17:00 +08:00
turtle1999 747c98b0db fix(plugins): deny incompatible bundles and clarify compatibility refusals
A bundle package is not a plugin row, so startup admission never read its
own DSH peers: a bundle installed outside DSH or before a DSH upgrade still
applied its patch layer. loadProfileDirectory now skips such a bundle like an
unreadable one unless the profile exempts that exact pair.

A post-install refusal in a profile without a lockfile reinstalls from the
restored manifest instead of failing a frozen install and leaving the
rejected packages in node_modules.

Compatibility warnings now name the `dsh plugin allow-version` command for
CLI-managed profiles, startup denials name the row id instead of a resolved
module URL, and the CLI no longer reports "pnpm failed" when pnpm never ran.
2026-09-23 19:14:19 +08:00
Turtle 5ea77078d6 feat(plugins): enforce DSH peer compatibility with exact exemptions (#4980) 2026-09-23 18:56:56 +08:00
turtle1999 2c67633990 feat(plugins): enforce DSH peer compatibility with exact exemptions 2026-09-23 18:46:08 +08:00
mektpoy 58c70c2cca test(web): key the no-default marker to the platform that owns it
The new no-default scenario cleared the macOS application catalog, which
does nothing on Linux: `gio mime` owns the OS default there, and the
Linux stub never wrote the launch log, so CI timed out waiting for the
application gesture. Clear the marker each platform actually reads, log
launches from both stubs, and compare the launched id against the
platform's own registration id.
2026-09-23 18:41:50 +08:00
mektpoy 4ba758f47f Merge origin/master into fix/truncate-without-splitting-surrogates
Conflict resolution:
- docs/config-catalog: regenerate the English page; the Chinese page follows the
  three shifted Config sources and the bilingual pair record is re-recorded.
- docs/module-graph: the generator rewrites all three artifacts together.
- packages/shell/tool-pwsh-persistent/src/index.ts: keep master's rewrite of the
  prompt handling and re-apply the surrogate cap and its import.
- The three package.json dependency entries follow master's workspace:* range
  convention, and the lockfile importer specifiers match them.
2026-09-23 18:28:28 +08:00
mektpoy 5b4be3cfe8 fix(client): align the icon button's ring with the shared ring colour
Master's newest agent-preset sheet carries both the new `.helpButton` and the
retained `.iconButton`, whose focus ring still declared the brand token
directly. The stylesheet corpus spec rejects that form, so it now reads
`--dsw-focus-ring-color` with the brand-token fallback.
2026-09-23 18:21:14 +08:00
mektpoy ef7f44662d Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary
ui-theme/README.md, README.zh.md and README.i18n.yaml conflicted again: master
extended the `design-platform.css` sentence with the `--dsw-alias-file-diff-*`
palette. Kept that sentence together with this branch's `focus.css` paragraphs
and the seven-sheet entry list, then re-recorded the pairing hashes.
2026-09-23 18:20:56 +08:00
mektpoy fd5c4043fa Merge remote-tracking branch 'origin/master' into feat/window-drag-coverage
# Conflicts:
#	packages/client/ui-settings-general/package.json
2026-09-23 18:14:37 +08:00
mektpoy 20315dd321 Merge remote-tracking branch 'origin/master' into fix/windows-file-open-and-preview 2026-09-23 18:13:37 +08:00
yudshj 19d6df2b2f fix(web): pan read-only spreadsheets on both trackpad axes 2026-09-23 18:13:19 +08:00
yudshj e0e8327992 fix(preview): redraw PDF pages after settled zoom 2026-09-23 18:12:21 +08:00
imccyu 7eb9629e0a Merge pull request #5041 from deepseek-harness/fix-gateway-mem
fix(gateway): bound stream cancellation retention
2026-09-23 18:10:58 +08:00
Turtle 4aa207c5fe feat(preset): add plugin practices reference to creator skill (#5025)
* feat(preset): add creator-mode plugin practices skill

Creator mode mounts packages/preset/agent-preset/skills. The new
cordis-plugin-practices skill states Harness-specific principles and
concrete rules for plugins that survive upgrades and avoid polling or
rescanning session logs: waterfall delegation, restrict/guard over
assemble, agent.ctx ownership, no new session event types from profile
plugins, session projections, and slot-based UI.

* refactor(preset): fold plugin practices into cordis-plugin-development

A separate skill competed with cordis-plugin-development for the same
trigger. The practices now live in references/practices.md, read from
procedure step 2 before choosing an extension point.

* feat(preset): require Harness components and tokens for plugin pages

A creator-built management page served as an iframe with its own
stylesheet could not match the Harness design. The practices reference
now requires slot-rendered React pages built from ui-primitives, theme
tokens from Theme inspection, and light/dark checks in the real slot.

* feat(preset): make host UI consistency a principle and a verification step

Adds principle 6: the rendering surface decides whether a plugin can
match the Harness UI, so it is chosen before any view. Step 4 of
cordis-plugin-development now verifies primitives, token-only styles,
and light/dark rendering beside a comparable host page.

* feat(preset): prefer theme tokens over pre-stable ui-primitives

ui-primitives is a pre-stable platform module; creator plugins are plain
JS without type checks, and a throwing component blanks the slot entry.
The practices reference now treats tokens as the default way to match
the host, limits primitives to behavior that is costly to reproduce, and
tells the agent how to detect a slot entry crash after an upgrade.

* feat(preset): forbid runtime imports of Harness Client packages in plugins

Creator plugins must assume ui-primitives and other Client packages break
without notice. The practices reference now has plugins copy markup, CSS,
and behavior from primitives, or inspect the rendered host control, and
keep --dsw-alias-* tokens as the only shared styling dependency.

* fix(preset): correct plugin practices against runtime behavior

- agent.ctx registrations need a plugin-owned disposer too; plugin
  unload does not remove them.
- Timers start work with followup(); inject() does not wake the agent.
- inject() logs agent/inbox/spliced at call time; agent/request cannot
  change messages.
- Guards are synchronous; awaited decisions return ask from
  tools/pre-execute.
- Chat node renderers are keyed by kind; slot inject reinstalls on
  declaration return.

skills.spec now keeps whole-file cordis-plugin-development references
below the pruner threshold as the read tool renders them.
2026-09-23 18:06:52 +08:00
mektpoy c5e0a407ca test(web): cover the file menu when no application is the OS default
The reported defect is the branch where the Shell lists associated
applications but marks none as the default: the split button promoted
"Show file location" to the primary action and hid the applications
behind the menu.

Record that state in the keyless document-preview scenario. The new
golden pins the primary action to the opening control, and the gesture
log asserts the main button opens the file while the menu's marked
default launches the first registered application.
2026-09-23 18:05:08 +08:00
mektpoy 9fd52295fc fix(client): finish the ring-colour sweep and name the tooltip/ring split
Two focus treatments still named a colour of their own: the TurnNavigator
mark's tick filled with `state-business-primary` under a comment that already
claimed the brand colour, and the plugin inventory search input drew its focus
border in `state-business-primary` while the shadow beside it read
`--dsw-focus-ring-color`. Both now read the same ring colour as the rest.

`Tooltip` states why it takes `pointerModality()`'s wide answer while focus
rings read the narrower `data-input-modality` attribute the module publishes.
2026-09-23 17:58:06 +08:00
mektpoy 27ba49aa13 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-23 17:57:38 +08:00
mektpoy 68e826a42f docs(client): record the window drag modules and the settings overlay placement
The ui-web source map gains the two window-drag modules and its boot row names the watcher install; ui-settings-general states that the settings panel portals beside #root. Both pairs are re-recorded. The ui-settings-general manifest keeps master's dependency order so only the two new dev entries appear in its diff.
2026-09-23 17:54:28 +08:00
yudshj e4234651ee fix(web): support spreadsheet tab gestures and readable name box 2026-09-23 17:52:13 +08:00
_Kerman ff1c7d415f fix(workspace): keep the default Workspace path language-neutral
The first-use directory name and its stored title came from the Client's
startup language, so one product decision carried two incompatible
requirements: a path addressed by shell commands, tool arguments, @path
references, and session logs, and a label a reader reads.

The controller now owns the fixed `default-workspace` directory name and
the registry titles the Workspace after that same segment, so
`workspace.initializeDefault` takes no request at all —
WorkspaceInitializeDefaultRequest and its name validation are gone, and
the registry resolver returns a path instead of a path and title. No
language reaches the Host.

Browser consumers label a Workspace through the new
`workspaceDisplayTitle`: a title still equal to the automatic one reads
as the localized default name from the `common` namespace, every other
title reads verbatim. The Workspace browser resolves it once at the store
read, so rows, hover card, search meta, and the rename and delete dialogs
inherit it; the hero picker and the Conversation chip resolve it too.
Confirming a rename stores the text on screen, which is what stops a row
following the language.
2026-09-23 17:46:32 +08:00
Xu Hanxiang c5dc0853d6 Merge pull request #4686 from deepseek-harness/fix/desktop-dev-runtime-target
fix(desktop): resolve the development runtime directory from the build target
2026-09-23 17:43:43 +08:00
lsdsjy 850d78b798 fix(account): refresh after top-up and accept exponent balances 2026-09-23 17:42:15 +08:00
lsdsjy 9987cae3ea fix(desktop): apply shared toast theme in welcome 2026-09-23 17:29:24 +08:00
lsdsjy e310916e59 refactor(llm): let providers resolve request authentication 2026-09-23 17:29:24 +08:00
lsdsjy 8f180cf45f fix(account): deliver credential expiry notices without replay 2026-09-23 17:26:01 +08:00
lsdsjy 8e5866e7b0 fix(models): retain API-key provider catalogs without credentials 2026-09-23 17:23:39 +08:00
Kaige-Gao bd2a49a2ca fix(chat): use elevated scrollbar colors for image previews 2026-09-23 17:22:55 +08:00
lsdsjy 5590fbee7c fix(account): update sign-in dialog copy 2026-09-23 17:22:45 +08:00
Xinyu Yang cec4e70f8d fix(settings): let modal restore preset guide focus 2026-09-23 17:21:45 +08:00
imccyu 45f5cd34b0 fix(gateway): pass explicit undefined in retention test 2026-09-23 17:20:38 +08:00
Xu Hanxiang 62aef4c583 Merge branch 'master' into fix/desktop-dev-runtime-target 2026-09-23 17:19:03 +08:00
lsdsjy 51be61db98 Merge origin/master into feat/account-bonus-notices 2026-09-23 17:15:22 +08:00
Kaige-Gao 4839239954 fix(chat): address image preview review and coverage gaps 2026-09-23 17:12:03 +08:00
Ziya e68fb0bc8d Merge pull request #5022 from deepseek-harness/fix/subagent-zh-terminology
fix(i18n): 将 UI「子代理」改为「子智能体」
2026-09-23 17:08:26 +08:00
imccyu 4cfd292a7b fix(gateway): bound stream cancellation retention 2026-09-23 17:07:09 +08:00
Xinyu Yang 1aebb43147 fix(web): wait for sidebar collapse in delivery test 2026-09-23 17:02:19 +08:00
ZiyaZhang dc0ae81905 Merge remote-tracking branch 'upstream/master' into fix/subagent-zh-terminology 2026-09-23 01:54:16 -07:00
Xinyu Yang afbd10991a chore: update temporary CI merge to latest master 2026-09-23 16:44:04 +08:00
mektpoy a8776afa87 Merge remote-tracking branch 'origin/master' into fix/desktop-dev-runtime-target 2026-09-23 16:43:00 +08:00
Xinyu Yang 31688747ad chore: temporarily merge master for CI validation 2026-09-23 16:41:44 +08:00
Yudong Han 219db5454a Merge pull request #5027 from deepseek-harness/fix/excel-preview-sheet-navigation
fix(web): separate spreadsheet tab navigation from zoom controls
2026-09-23 16:38:47 +08:00
ZiyaZhang 3675e91cf9 fix(i18n): update subagent labels added on master 2026-09-23 01:34:17 -07:00
Yudong Han 5e25475857 fix(office): use bundled LibreOffice Kit 0.1.0 CLI across deployments (#4902)
* chore(office): upgrade libreoffice kit to 0.0.1-2

* fix(office): guide bounded CLI rendering and preview reuse

* chore(office): consume published LibreOffice Kit 0.0.3

* test(office): mock the complete LibreOffice converter interface

* chore(office): upgrade LibreOffice Kit to 0.0.4

* fix(office): expose bundled LibreOffice Kit 0.1.0 CLI across deployments

* fix(office): inspect Excel visuals only for layout tasks

* fix(office): allow compatible LibreOffice Kit 0.1 updates

* fix(office): stop Excel QA on blank previews and run regressions in CI

* fix(office): end workbook visual QA after an empty preview
2026-09-23 08:32:15 +00:00
ZiyaZhang f4c6b012aa Merge remote-tracking branch 'upstream/master' into fix/subagent-zh-terminology 2026-09-23 01:32:15 -07:00
mektpoy fe4d18fda3 test(desktop): provide the required primary runtime directory in the welcome startup spec
`welcome-startup.spec.ts` imports the unpackaged main entry, which now
requires `DSH_DESKTOP_PRIMARY_RUNTIME_DIR`. Stub it beside the neighbouring
`DSH_DESKTOP_*` values so the suite reaches the welcome startup it covers.
2026-09-23 16:29:28 +08:00
Kaige-Gao 907a241b61 Merge remote-tracking branch 'origin/master' into feat/chat-image-preview-4941 2026-09-23 16:28:26 +08:00
imccyu e5e9b5b982 Merge pull request #4985 from deepseek-harness/feat/tool-call-preparing
feat(chat): show preparing tools during live generation
2026-09-23 16:24:46 +08:00
Kaige-Gao 7fe9c06fa6 feat(chat): preview image links on hover and expand inline images 2026-09-23 16:18:09 +08:00
yudshj c920174964 fix(web): separate spreadsheet tab navigation from zoom controls 2026-09-23 16:13:21 +08:00
imccyu 3776169373 test(client): align wait agent row title expectation 2026-09-23 16:11:44 +08:00
imccyu 19675fd061 fix(client): align subagent coordination and wait labels 2026-09-23 16:11:44 +08:00
imccyu 536764c8b4 test(web): align snapshots with write activity labels 2026-09-23 16:11:44 +08:00
imccyu b66b602c72 fix(chat): address preparing lifecycle review feedback 2026-09-23 16:11:44 +08:00
imccyu 913aa2289b fix(chat): unify tool lifecycle titles and activity labels 2026-09-23 16:11:44 +08:00
imccyu 701026b5bf test(chat): bind the preparation start spy 2026-09-23 16:11:44 +08:00
imccyu 5840898e07 perf(tool): retain unchanged subcall branches 2026-09-23 16:11:44 +08:00
imccyu b2817d77fb perf(chat): batch preparing tool updates 2026-09-23 16:11:44 +08:00
imccyu a60d4df027 test(desktop): await ASAR fixture output completion 2026-09-23 16:11:44 +08:00
imccyu 833835d95c test(chat): retire unknown casts from tool row fixtures 2026-09-23 16:11:44 +08:00
imccyu 74511b3dcb test(chat): cover live preparation and durable history replay 2026-09-23 16:11:43 +08:00
imccyu d3086e6571 feat(chat): present tools in preparing, start, and result stages 2026-09-23 16:11:43 +08:00
imccyu d550f1c4af feat(conversation): initialize contexts from transient start matches 2026-09-23 16:11:43 +08:00
Turtle ccaa0dc11c fix(plugin-manager): bound pnpm runs so a silent child cannot hold the profile lock (#4982)
* fix(plugin-manager): bound pnpm runs so a silent child cannot hold the profile lock

A pnpm child that prints its completion line and then never exits holds the
profile write lock until the host is restarted, so every other session and host
on that profile fails after its own lock timeout (issue #4981). execa resolves
its promise only once the piped stdio has ended, so a run now completes on the
process's own exit and drains the pipes under a bound instead of awaiting their
end.

A service run whose captured output stays silent for idleTimeoutMs is
terminated, reports timedOut alongside its exit status, and is not retried on
the next registry; a run with inherited descriptors captures nothing and is
left unbounded for its operator.

* test(plugin-manager): type the mocked child and await the drain descendants

The inherited-descriptor fixture no longer needs its legacy `as unknown` cast,
because the mocked child is typed for the fields the operations read; the
retired baseline entry is pruned (verify-no-unknown-casts).

The drain specs wait for the killed descendant to exit before removing its
directory: Windows refuses to delete a directory a live process still holds.

* test(plugin-manager): stop the drain descendant deterministically

The descendant that holds the pipes now ends on a stop file the teardown
writes, and on its own after a minute, so the fixture leaves no process behind
when a kill cannot be delivered. Windows stops it through taskkill, and the
spec waits for the exit before removing the directory it ran in.

* test(plugin-manager): run the drain descendant from its own script file

Windows cannot carry a nested `-e` script through another spawn argument: the
descendant failed to start there, so the fixture asserted on a process that was
already gone. The descendant now runs from a script file the fixture writes.

* test(plugin-manager): cover the bounded drain everywhere and stage the real descendant on POSIX

Windows does not stage a descendant that keeps the inherited pipes open past
the direct child's exit, so the real-process cases run on POSIX only. The
mocked child now models execa's own completion rule — its promise settles only
once both pipes end — which covers the bounded drain on every platform and
still fails without the raw-exit race.

* test(plugin-manager): cover the drain failure path without a child process

An output consumer failure that the bounded drain cuts short is staged with the
mocked child as well, so the per-file coverage gate also holds where the
real-process cases are skipped.

* fix(plugin-manager): terminate the whole tree of a stalled run

A lifecycle script is a child of pnpm, so signalling pnpm alone left an
approved postinstall writing into the profile after the operation reported a
timeout and released the lock. A stalled run now stops its process group (or
Windows process tree) and waits for it to disappear before the caller restores
the files. The cut tail's close is told apart from a reading failure by where it
happened, so a failure from before the cut still surfaces.

* docs(plugin-manager): regenerate the config catalog after the rebase

The English catalog gains `idleTimeoutMs` from the regenerator, and the Chinese
counterpart carries the same interface line so the pair stays consistent.

* fix(plugin-manager): terminate a run's tree through execa, keeping exit cleanup

Spawning a service run with `detached` made execa skip the handler that kills
the child when the manager exits, so a crashed manager left the pnpm tree
running in the profile. `killDescendants` spawns the run as its own process
group while keeping that cleanup, and it addresses the tree on every kill path,
including cancellation. The module now only decides the probe target and waits
for quiescence.
2026-09-23 16:11:30 +08:00
Jiawei Song 19844ea9ad Merge pull request #5001 from deepseek-harness/fix/diff-review-colors
fix(web): 优化文件 diff Review 的浅色和深色配色
2026-09-23 16:09:33 +08:00
ZiyaZhang a2278b460c fix(i18n): limit subagent terminology changes to requested UI copy 2026-09-23 01:09:27 -07:00
Xinyu Yang d0861be2cd fix(shortcuts): restore PRD reference order 2026-09-23 16:04:22 +08:00
mektpoy 80e4da0e3d fix(desktop): take the development project target as an explicit input
`prepareDevelopmentProject()` resolved the build target from the host
platform and architecture, so a Linux host threw `unsupported target
linux-x64` while writing the runtime descriptor. Pass the target in
instead: the launcher supplies the target it prepared, and isolated tests
supply a fixed supported target.

Extract `desktopTargetPlatform()` into desktop-build-paths.mjs so the
target-to-payload mapping has one home, and use it for the qualification
runner, which previously derived both its target directory and its
descriptor from the host architecture.

Correct the README limitation to name the module that now performs the
architecture check.
2026-09-23 16:03:17 +08:00
ZiyaZhang f132684c81 fix(i18n): scope subagent terminology to UI and refresh snapshots 2026-09-23 00:57:07 -07:00
lsdsjy e9a438d9e9 chore: merge master into account provider branch 2026-09-23 15:52:07 +08:00
Turtle 3d6d46b8a6 Merge pull request #4896 from deepseek-harness/fix/preset-ui-20260921
fix(ui-agent-preset): restore the read-only configuration viewer
2026-09-23 15:50:34 +08:00
Yudong Han dd004b4221 fix(web): simplify read-only spreadsheet preview controls (#5006)
* fix(web): simplify read-only spreadsheet preview controls

* fix(web): soften read-only spreadsheet freeze dividers

* fix(web): hide read-only spreadsheet freeze dividers

* fix(web): keep spreadsheet formula bar on one line
2026-09-23 07:46:13 +00:00
Xu Hanxiang 38596d5c70 Merge pull request #4876 from deepseek-harness/fix/windows-open-through-explorer
fix(native-command): open Windows paths through explorer.exe
2026-09-23 15:46:04 +08:00
mektpoy b1eebbd045 fix(lockfile): drop re-resolution churn from the merge-forwards
pnpm install --lockfile-only, run to align the new workspace edge's specifiers, also re-resolved unrelated entries: it pinned registry.npmjs.org tarball URLs on the two libreoffice-kit optional platform packages and downgraded glob 7.2.3 to 7.2.0. The tarball URLs fail verify-lockfile-policy against the mirror's published metadata.

Rebuild the file as the base lockfile plus only the three intended importer additions (the new package's block and its two consumers), so the resolution entries stay byte-identical to master.
2026-09-23 15:41:12 +08:00
mektpoy 8b75ec9903 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-23 15:39:36 +08:00
ZiyaZhang 8833ef9f63 Merge upstream/master into fix/subagent-zh-terminology 2026-09-23 00:38:59 -07:00
ZiyaZhang 995caa05ed fix(i18n): translate subagent as 子智能体 in Chinese UI 2026-09-23 00:33:41 -07:00
lsdsjy b8df537f07 fix(desktop): return to initial welcome page after sign-out 2026-09-23 15:28:12 +08:00
Yifffan 10292baeff Merge pull request #4818 from deepseek-harness/ui/agent-team-header-panel-refine
feat(web): refine the Team header panel interactions and adaptive header
2026-09-23 15:26:24 +08:00
Turtle bbeef5f250 Merge pull request #5020 from deepseek-harness/copy/plugin-experimental-labels
fix(web): label beta features as experimental
2026-09-23 15:24:43 +08:00
turtle1999 d52424042c Merge remote-tracking branch 'origin/master' into fix/preset-ui-20260921 2026-09-23 15:21:17 +08:00
Dudu-0223 2ea753960c fix(web): align Team card elevation and preset header expectations 2026-09-23 15:14:29 +08:00
Dudu-0223 2b44a4b657 fix(web): preserve Team hover pinning and responsive task expansion 2026-09-23 15:14:29 +08:00
Dudu-0223 4face54ea7 test(web): align adjacent navigation snapshots with header UI 2026-09-23 15:14:29 +08:00
Dudu-0223 0b62921f37 test(web): align Team panel snapshot with pinned projection UI 2026-09-23 15:14:29 +08:00
Yif 86e3e0e448 feat(web): refine the Team header panel interactions and adaptive header
The Team panel opens on hover with the subagent-catalog grace timings, pins
on click, polls the one-shot view RPC every 20s while open (replacing the
toolbar refresh/close controls), and eagerly loads on mount so the trigger
keeps a stable two-person icon. The lead card navigates from teammate
conversations, the current conversation carries a Current chat tag (selected
ring only among multiple members), task descriptions clamp to two lines
behind an expand toggle, an empty board shows a one-line description, and a
lone member narrows the panel to one column.

The header title row becomes an inline-size container: the preset label
hides first, then the Team trigger collapses to its icon and switches to
click-only opening. The subagent catalog moves to the front of the actions
band so lineage stays beside the title crumbs, and its pinned-menu behavior
matches the Team panel. Tooltip gains a gap prop for tight anchors.
2026-09-23 15:14:29 +08:00
Dudu-0223 61936aa113 Merge pull request #4810 from deepseek-harness/feat/agent-team-projection-panel
feat(agent-team): drive the Web Team panel from the agentTeam projection
2026-09-23 15:14:25 +08:00
Turtle 3b8be2928f Merge pull request #5017 from deepseek-harness/turtle/fix-tooltip-layering-e1cc527c20d0
fix(web): keep composer-stack tooltips above the input card
2026-09-23 15:14:07 +08:00
lsdsjy 150303ff22 fix(account): refine bonus notice lifecycle and diagnostics 2026-09-23 15:13:29 +08:00
ZiyaZhang 3c20f401d2 fix(web): label beta features as experimental 2026-09-23 00:07:13 -07:00
lsdsjy 9e19ca3e45 fix(account): limit automatic model selection to account login 2026-09-23 15:06:00 +08:00
turtle1999 a56e82e5dd fix(ui-agent-preset): share reader keyboard focus handling 2026-09-23 15:02:27 +08:00
Turtle a96d45af40 test(web): name the covering element in the tooltip hit test
Review follow-up on the tooltip layering fix. The helper probes
`bubble.contains(hit)` instead of identity, so a bubble that grows child
elements still passes, and each probe returns the hit element's tag and
class, so a regression reports what covered the bubble instead of a bare
`expected false to be true` — the pre-fix run now names `DIV.u82K-q_input`
for both probes.

The `portal` JSDoc says the ancestor stacking context confines the
bubble's z-index to that context rather than resolving it against
siblings.
2026-09-23 15:00:52 +08:00
Dudu-0223 63cc821e7e Merge master into feat/agent-team-projection-panel 2026-09-23 14:57:32 +08:00
Dudu-0223 df7fa8945c refactor(agent-team): narrow projection fields and task views 2026-09-23 14:54:21 +08:00
mektpoy ef0eaa3167 docs(code-language): restate the read-hint contract in the summary
The Summary narrated the change ("the suffixes the old read table recognized keep their historical value") rather than the contract, and at 109 words it exceeded the 100-word package Summary limit.

State the rule a reader at HEAD can act on: a suffix a recorded session already holds keeps its persisted value, every other suffix takes its language's short name. The dropped path-separator and leading-dot detail stays documented under Language selection. Both languages updated and the pairing record re-recorded.
2026-09-23 14:53:58 +08:00
mektpoy 192ab1155d fix(code-language): match the root release version
The package joined the workspace as version 0.1.6-alpha.2 while the root release moved on, which failed three CI jobs from one cause: constraints (version must match root), Dependency layout (verify-npm-install-layout finds no workspace version), and Pack npm tarballs (dsh release members must share one version).
2026-09-23 14:53:52 +08:00
mektpoy edd0a438bf docs(native-command): state that the Explorer handoff acknowledgement proves no open
The open paragraph accepted Explorer's exit code 1 as a delegated handoff but
did not repeat the reveal paragraph's warning that the acknowledgement proves no
application opened the file, which the Agent Note records for the Remote answer
`{ opened: true }`.
2026-09-23 14:49:30 +08:00
turtle1999 02383832df Merge remote-tracking branch 'origin/master' into fix/preset-ui-20260921 2026-09-23 14:45:13 +08:00
lsdsjy 40da69ff75 refactor(account): isolate provider authentication and preserve model selections 2026-09-23 14:43:47 +08:00
Turtle 5082e05f71 fix(web): keep composer-stack tooltips above the input card
The goal strip and the queue dock ride directly above the input card, and
both create a stacking context (`isolation: isolate`) so their frosted
panel stays behind their own content. A tooltip bubble left inside that
context resolves its z-index there, where the card — painted later in the
same context — wins: the goal strip's bubble showed a two-pixel sliver
and the queue dock's stayed entirely hidden.

Portal those dock tooltips to the body, where the bubble's z-index
resolves above the whole card. The ui-primitives `portal` contract now
names the capping stacking context beside clipped containers, because
neither container clips its bubble.

The queue-actions aria goldens lose the tooltip line: the captured center
column no longer contains the portaled bubble. The scenario still covers
it by role and adds a hit test at the bubble's center and bottom edge, as
does goal-bar.
2026-09-23 14:43:23 +08:00
sjw1231 c4955b1900 test(web): strengthen diff review color assertions 2026-09-23 14:42:08 +08:00
Ziya 354da32a38 Merge pull request #4979 from deepseek-harness/fix/github-install-connectivity
fix(plugin-manager): fail fast on stalled GitHub connections
2026-09-23 14:38:25 +08:00
Xinyu Yang f6006c5547 fix(shortcuts): finish modal toggles and automatic focus handling 2026-09-23 14:34:20 +08:00
Dudu-0223 f546068553 fix(agent-team): align package metadata with merged release 2026-09-23 14:27:58 +08:00
mektpoy 88b1ea3c0b docs: state the code-language comments as current contracts
The new JSDoc and test prose narrated the change instead of the shipped
behavior: "pre-unification", "the old read table", "used to persist ... it
now persists". A reader at HEAD cannot resolve those stages, and the
persisted-value rule they describe is a durability contract that stands on
its own.

Restate each as the present contract: a suffix whose value a recorded
session already holds keeps it byte-identical; every other suffix takes its
language's short name. Rename the test's transcribed expectation away from
the branch vantage and re-wrap the module comment the earlier edit left
over-long.
2026-09-23 14:23:07 +08:00
mektpoy 5774f385f4 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages
# Conflicts:
#	packages/client/ui-primitives/package.json
#	packages/fs/tool-fs/package.json
2026-09-23 14:19:53 +08:00
Dudu-0223 3bf6d738f1 fix(agent-team): keep late activation on normal reconnect path 2026-09-23 14:16:57 +08:00
Yichen Jiang 26b4980364 feat(voice-input): guide unready microphones to plugin setup 2026-09-23 14:15:26 +08:00
Yudong Han 5124a2a310 fix(web): show model IDs in monospace and names on hover (#5004)
* fix(web): show original model IDs on hover

* fix(web): display model IDs with names on hover
2026-09-23 06:10:30 +00:00
Dudu-0223 2aa3a469db fix(agent-team): consume shared projections without panel loads 2026-09-23 14:08:25 +08:00
winewill 0126d5be20 fix(desktop): load the flock entry lazily and build native/system on demand
`package-target.ts` imported `macos-notarization-proxy.ts`, whose top-level
import of `@deepseek-ai/node-addon-system/flock` resolves through the package
`exports` to the unbuilt `lib/flock.js` on a clean checkout. The step that
emits that file runs inside the same packaging script, so `check:package`,
`package:*`, and the `restore:mac-proxy` recovery command all failed with
`ERR_MODULE_NOT_FOUND` before reaching it; running `pnpm run typecheck` first
left the host addon binary missing instead, which failed at lock time.

The proxy lock now loads the entry at first use through `flock-entry.ts`. When
the import is unresolvable or the host platform package lacks a binary listed
in its `prebuilds.json`, the loader runs `pnpm run build:native-system` and
`pnpm --dir native/system run build:ts` before importing again; other errors
and build failures propagate, and a failed load is retried by the next call.
`check:package` no longer touches the entry at all.

Tests cover the loader steps and load the proxy module from a directory where
the addon package cannot be resolved. The Desktop README records the
behavior in both languages.

(cherry picked from commit 2d74cf50310d4efbbccbbe79a105fcc3a468b19d)
2026-09-23 14:03:10 +08:00
Dudu-0223 3f07e34b5e Merge remote-tracking branch 'origin/master' into codex/pr-4810-review-fixes
# Conflicts:
#	packages/experimental/agent-team/package.json
#	packages/experimental/client-ui-agent-team/package.json
#	pnpm-lock.yaml
2026-09-23 13:58:31 +08:00
ZiyaZhang d7b45fb415 Merge remote-tracking branch 'origin/master' into fix/github-install-connectivity 2026-09-22 22:18:07 -07:00
ZiyaZhang 75d74a055e fix(plugin-manager): preserve authentication fallback during GitHub checks 2026-09-22 22:15:09 -07:00
turtle1999 f68d4b5aba Merge remote-tracking branch 'origin/master' into fix/preset-ui-20260921
# Conflicts:
#	packages/preset/agent-preset-registry/package.json
2026-09-23 13:08:30 +08:00
Yichen Jiang 752953d2b6 Merge pull request #4966 from deepseek-harness/worktree/voice-model-download-mirrors
feat(voice-input): support automatic and manual model download sources
2026-09-23 13:01:51 +08:00
mektpoy 2b9923fede fix(native-command): escape both Explorer field separators and keep non-ASCII literal
On Windows 11 ARM64 build 26200 Explorer splits its own command line at
commas and equals signs and rejects percent-encoded non-ASCII in a file
URI, falling back to the Documents folder in both cases without reporting
it. `explorerTarget()` now escapes `=` next to `,` and decodes Node's
non-ASCII escapes back to the literal characters the shell resolves, so
the two rules stay in one place. The Agent Note and the target-encoding
table record the measured behavior.
2026-09-23 12:33:31 +08:00
winewill 4e41ccadcc build(desktop): check every import record and mirror the bundle step in the wine gate
The packaged-imports plugin moves from generateBundle to moduleParsed so
external dynamic import() and require() targets, which chunk metadata
omits, fail the bundle too. Each bundle now carries an import policy:
the main process allows Node builtins, sandboxed preloads only the
modules Electron's require polyfill resolves, and the failure names the
importing module and the allowed set. The wine Windows gate bundles
apps/desktop after the Host tsdown pass like build:lib:host, the
ts-build-config note lists that step, and the tsdown docs name the
workspace match exactly.

Fixes #4993
2026-09-23 12:03:48 +08:00
Ziya c3afd488aa Merge pull request #4962 from deepseek-harness/ux/plugin-install-20260922
feat(plugin-manager): offer mirror recovery for GitHub install failures
2026-09-23 12:03:47 +08:00
Yichen Jiang 3f0022a8fa Merge remote-tracking branch 'origin/master' into worktree/voice-model-download-mirrors 2026-09-23 12:03:11 +08:00
Turtle 040f47a822 Merge pull request #4987 from deepseek-harness/turtle/fix-title-overlap-b5d8f732773e
fix(ui-settings-account): clear the Windows caption for the Platform return bar
2026-09-23 12:02:28 +08:00
Ruilin Geng c68c6db9ca Merge pull request #4717 from deepseek-harness/fix/webkit-model-picker
fix(web): 修复 Safari 模型菜单鼠标选择失效
2026-09-23 11:59:53 +08:00
Yichen Jiang 0067efc8ae Merge pull request #4992 from deepseek-harness/worktree/pin-official-deepseek-first
fix(web): keep official DeepSeek first in model settings
2026-09-23 11:59:00 +08:00
Yichen Jiang d40dbef91b feat(voice-input): expose preparation download source selection 2026-09-23 11:58:54 +08:00
Yifffan 5bc57902d5 Merge pull request #4970 from deepseek-harness/docs/client-ui-ux-skill
docs(skills): add the dsh-client-ui-ux skill
2026-09-23 11:53:56 +08:00
lsdsjy fff88f7375 fix(desktop): harden Platform storage cleanup and identity publication 2026-09-23 11:30:37 +08:00
lsdsjy 2fc9262f3e chore: merge master into account provider branch 2026-09-23 11:19:22 +08:00
Yichen Jiang dc374b8879 fix(web): keep official DeepSeek first in model settings 2026-09-23 11:18:01 +08:00
lsdsjy c062c615dc feat(account): align signed-out sidebar menu with design 2026-09-23 11:13:27 +08:00
lsdsjy 4283f62d01 fix(desktop): leave sign-in activation to the completion page 2026-09-23 11:11:44 +08:00
lsdsjy 10b6ffec3f fix(desktop): use regular weight for welcome API key heading 2026-09-23 11:00:13 +08:00
lsdsjy be3ecb4977 fix(desktop): persist account-scoped Platform page preferences 2026-09-23 10:55:33 +08:00
Turtle 14a062acb7 docs(ui-settings-account): record the Platform view caption limitation
Review follow-up: the caption menu is inert while the Platform view is open,
which the previous geometry hid; state it under Known Limitations, and drop
the duplicated 40px figure the Desktop owns. The style spec's rule lookup
anchors on the rule boundary and asserts with toContain.
2026-09-23 10:47:17 +08:00
Turtle ceb997cdef fix(ui-settings-account): clear the Windows caption for the Platform return bar
The embedded Platform view renders its 48px return bar at the top of the
window. On Windows the Desktop-owned caption menu occupies that strip (fixed
at top 0, 40px high, z-index 1100), so the "Back to DeepSeek Harness" label
and the Application/Edit menu text were painted over each other.

Offset the overlay by --dsh-windows-titlebar-height where the Desktop preload
publishes its caption marker, the same clearance AppFrame and the sidebar
caption controls use. The return bar and the native view bounds, which come
from the viewport element's rectangle, both move below the strip.
2026-09-23 10:33:17 +08:00
gengruilin 60b5800816 Merge origin/master into fix/webkit-model-picker 2026-09-23 10:26:50 +08:00
ZiyaZhang 0edfe83573 fix(plugin-manager): bound GitHub connection checks before installation 2026-09-22 08:33:49 -07:00
imccyu 00102833df Merge pull request #4978 from deepseek-harness/worktree/release-dsh-0.1.7-alpha.2
release: [email protected]
2026-09-22 23:25:38 +08:00
imccyu 10ea83bcc3 release(dsh): 0.1.7-alpha.2 2026-09-22 23:12:55 +08:00
imccyu 178ee3a9eb Merge pull request #4975 from deepseek-harness/worktree/release-vendor-4.0.4
release(vendor): cordis 4.0.4, cosmokit 1.8.5, group 1.0.4, hmr 1.0.1…
2026-09-22 23:12:01 +08:00
ZiyaZhang 4bf9d2e0c0 Merge master into plugin installation recovery 2026-09-22 08:03:27 -07:00
imccyu d0dca04e22 release(vendor): cordis 4.0.4, cosmokit 1.8.5, group 1.0.4, hmr 1.0.19, include 1.0.9, loader 1.0.5, logger-console 1.0.4, schemastery 3.18.4, timer 1.1.6 2026-09-22 23:02:28 +08:00
imccyu 3950647caa Merge pull request #4954 from deepseek-harness/fix/dsh-exact-workspace-dependencies
build: 锁定 DSH 版本并将 vendor/native 依赖限制为补丁升级
2026-09-22 22:59:56 +08:00
imccyu 3889e97de0 Merge pull request #4947 from deepseek-harness/fix/chat-groups-followup
fix(chat): 稳定滚动控件与嵌套自动跟随
2026-09-22 22:59:36 +08:00
lsdsjy 081526aa3e feat(account): show bonus notices after visible display 2026-09-22 22:51:09 +08:00
imccyu 08c0e8e71b fix(chat): deduplicate admitted local steering 2026-09-22 22:47:12 +08:00
lsdsjy 3970cc974f feat(account): send client metadata with Platform requests 2026-09-22 22:42:11 +08:00
imccyu 43a8a22824 fix(chat): restore turn rail width threshold and clarify scroll gestures 2026-09-22 22:25:32 +08:00
lsdsjy 318c83fa84 chore: merge master and restore PR validation 2026-09-22 22:25:13 +08:00
Dudu-0223 9095678c8c fix(agent-team): address remaining projection review comments 2026-09-22 22:21:10 +08:00
Dudu-0223 9fcb76d9bc Merge remote-tracking branch 'origin/master' into codex/pr-4810-review-fixes 2026-09-22 22:17:37 +08:00
imccyu f6966f8fab test(client): align resize fixtures and restore branch coverage 2026-09-22 22:08:50 +08:00
imccyu fad9e27706 test(web): stabilize resize and scroll fixtures 2026-09-22 21:44:39 +08:00
imccyu 838eff14eb fix(chat): preserve reading intent around group scrolling 2026-09-22 21:44:00 +08:00
imccyu 4e6028a604 build: use tilde ranges for vendor and native workspaces 2026-09-22 21:14:06 +08:00
imccyu b9b5f7c58e fix: complete exact DSH ranges in application and runtime manifests 2026-09-22 21:12:57 +08:00
imccyu 7021420f29 fix: validate dependency ranges across every workspace 2026-09-22 21:12:57 +08:00
imccyu 37372101b5 build: pin internal DSH workspace dependencies 2026-09-22 21:12:56 +08:00
imccyu c92d5ebe18 perf(ui): fit tooltips from observed sizes 2026-09-22 21:07:56 +08:00
imccyu 820824edd7 fix(chat): stabilize input echo admission and ordering 2026-09-22 21:07:55 +08:00
imccyu 50ba2c8bb2 fix(session): align history pagination with turn boundaries 2026-09-22 21:07:55 +08:00
imccyu 2251b6189b fix(chat): preserve sticky headers with overflow clipping 2026-09-22 21:07:55 +08:00
imccyu 13dfae20c3 fix(chat): settle native scroll following before retargeting 2026-09-22 21:07:55 +08:00
imccyu fb02779a26 fix(chat): restore turn rail container queries 2026-09-22 21:07:55 +08:00
imccyu 1f029fc442 docs(chat): record scroll ownership and control geometry 2026-09-22 21:07:55 +08:00
imccyu 633cf7394e fix(chat): share independent scroll following with native group animation 2026-09-22 21:07:55 +08:00
imccyu 6b4055bf32 fix(chat): keep floating controls outside transcript clipping 2026-09-22 21:07:55 +08:00
Yif e8d5278c46 docs(skills): fix review findings in dsh-client-ui-ux and add scrollbar rule
Point selectable hover content at HoverCard (Tooltip has no interactive
prop), require a persistently mounted toast host, scope the font-weight
cap to new feature CSS, prefer theme typography tokens, link the styling
owners, date the design-reviewer roster, add the scrollbar containment
rule, and make the skill discoverable from packages/client/AGENTS.md.
2026-09-22 21:03:30 +08:00
Xinyu Yang 120cac4ea7 refactor(conversation): keep stop shortcut turn tracking internal 2026-09-22 21:02:32 +08:00
Xinyu Yang 6a82709a2b fix(shortcuts): preserve focus and tab layout, block overlay input 2026-09-22 21:02:32 +08:00
Xinyu Yang 91423ea1b4 revert: restore configurable Web and desktop shortcuts
Restore the feature removed by #4886 on current master. Preserve the current settings entry point, moving-menu behavior, and desktop update UI.
2026-09-22 21:02:32 +08:00
imccyu 3dcfbf2094 Merge pull request #4964 from deepseek-harness/fix-reconnect
fix(web): gate reconnects on application readiness
2026-09-22 21:00:21 +08:00
Yif 6a07033145 docs(skills): require designer review for new icons and user-perceivable UI changes 2026-09-22 20:39:38 +08:00
mektpoy b66e51e7ab fix(client): align master's new focus rings with the shared ring colour
Four focus rings added on master after this branch's base still declared their
own colour: PresetGuideDialog's panel, CodeCard's action (state-business-primary),
SegmentedControl's tab, and AccountSection's link button (button-primary-fill).
The stylesheet corpus spec now rejects each of them, so they read
`--dsw-focus-ring-color` with the brand-token fallback like every other ring.
CodeCard keeps its 1px dense width; the other three take
`--dsw-focus-ring-width`.
2026-09-22 20:37:46 +08:00
mektpoy fae37cd705 Merge remote-tracking branch 'origin/master' into fix/focus-ring-brand-primary
Conflicts and how they were resolved:

- ui-agent-preset/AgentPresetSection.module.css: master replaced the icon-only
  tooltip actions (`.iconButton`, `.iconDanger`, `.revealedPath`) with
  `.cardHelp` + `.helpButton`, which deleted the one declaration this branch
  edited. Took master's structure and re-applied the branch's change to the two
  `.cardMain:focus-visible` rings, which master kept unchanged.
- ui-theme/README.md and README.zh.md: master documented the separately exported
  `brand-font.css`; this branch documented `focus.css`. Kept both, with the
  dynamic entry's sheet list at seven sheets including `focus.css`.
  `README.i18n.yaml` re-recorded with `verify-translation-pairing --write`.
2026-09-22 20:37:05 +08:00
mektpoy 5925925d20 Merge remote-tracking branch 'origin/master' into fix/desktop-dev-runtime-target
# Conflicts:
#	apps/desktop/src/main.ts
2026-09-22 20:30:25 +08:00
mektpoy a6b909c767 docs(native-command): correct the non-interactive Explorer claim
The recorded exit code 0 after about 30 seconds was not reproduced: an SSH
session 0 on Windows 11 ARM64 build 26200 measured exit code 1 after about a
second with no association invoked, the same exit code a delegated open
returns. The README, both Agent Note languages, and the `explorerTarget` JSDoc
now record that measurement, and the `Invoke-Item` contrast keeps its
qualitative part without the timing.
2026-09-22 20:29:24 +08:00
mektpoy 2063f667ea Merge remote-tracking branch 'origin/master' into fix/windows-file-open-and-preview
# Conflicts:
#	packages/util/native-command/README.i18n.yaml
#	packages/util/native-command/README.md
#	packages/util/native-command/README.zh.md
2026-09-22 20:28:17 +08:00
mektpoy bca9cecc7d fix(client): keep pointer focus silent through descendant and editable rings
Pointer suppression previously cleared `outline-color` on the focused element
alone, so a ring painted by a descendant, a pseudo-element, or a `box-shadow`
stayed visible, and editable text controls lost the focus feedback they need on
click.

Ring colour now flows through `--dsw-focus-ring-color`, which component outlines
and focus-ring shadows read alongside the brand token. Every ring that inherits
the variable is suppressed together, and `body :focus-visible:not(:read-write)`
limits the suppression to rings while editable controls keep their own feedback.

Keyboard modality returns on Tab, Home, End, PageUp, or PageDown, and on focus
reaching a different control after a non-composing key. IME composition keys,
refocusing the same control, and window blur leave rings silent. The desktop
preload menubar suppresses its own ring inside its shadow root, where the
document-level attribute does not reach.
2026-09-22 20:28:10 +08:00
mektpoy b73031be9b test(native-command): pin the Explorer target for verbatim and device paths
A verbatim `\\?\` prefix and a `\\.\` device namespace take Node's UNC
resolution, and the comma encoding has to survive them. The drive-root case is
pinned separately because Node restores a trailing separator against the host's
`path.sep`, which differs on the Windows host this opener runs on.
2026-09-22 20:27:45 +08:00
mektpoy 3063767eef Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-22 20:27:08 +08:00
mektpoy 9cdfcd5f04 Merge remote-tracking branch 'origin/master' into feat/window-drag-coverage 2026-09-22 20:26:59 +08:00
sjw1231 fd784e4429 fix(web): refine file diff review colors 2026-09-22 20:23:45 +08:00
winewill 06717aebbb build(desktop): bundle the main process after the workspace tsdown pass
The root tsdown workspace pass builds every member concurrently, so the
Desktop main bundle could resolve its inlined workspace devDependencies
(dsh-home-paths, dsh-app-boot, dsh-deepseek-account) before their lib/
output existed. rolldown then kept them as external imports, which the
asar does not ship, and the packaged application failed at launch with
ERR_MODULE_NOT_FOUND on a clean checkout; stale lib/ output on long-lived
checkouts hid the defect.

apps/desktop leaves the root workspace list and build:lib:host bundles it
after the Host pass. Every Desktop bundle now runs a rolldown plugin that
fails the build when a chunk imports a bare specifier the packaged
application cannot resolve: electron and the manifest dependencies for
the main bundle, electron alone for sandboxed preloads.
2026-09-22 20:11:51 +08:00
gengruilin 969c3df8c1 Merge origin/master into fix/webkit-model-picker 2026-09-22 20:10:46 +08:00
Yichen Jiang 1498b01923 feat(voice-input): select responsive model download mirrors 2026-09-22 20:06:00 +08:00
mektpoy bf3de68213 Merge remote-tracking branch 'origin/master' into tmp4876 2026-09-22 20:04:19 +08:00
Yichen Jiang 37e4dc2dee Merge pull request #4961 from deepseek-harness/worktree/model-discovery-display-name
fix(web): show discovered model names in picker
2026-09-22 19:56:28 +08:00
imccyu a44ced5b96 fix(web): gate Remote WebSockets on application readiness 2026-09-22 19:54:21 +08:00
Yichen Jiang d4b109f439 Merge pull request #4907 from deepseek-harness/worktree/plugin-install-country-registry
feat(plugin-manager): select the first responsive public registry
2026-09-22 19:51:49 +08:00
Yichen Jiang bef0869d14 test(web): select discovered models by display name 2026-09-22 19:44:57 +08:00
lsdsjy 5a3c316401 fix(desktop): deliver welcome expiry notice once across windows 2026-09-22 19:21:12 +08:00
ZiyaZhang 82a7dd9c3f test(plugin-manager): strengthen GitHub recovery assertions 2026-09-22 04:04:33 -07:00
winewill 84394b818c Merge pull request #4919 from deepseek-harness/fix/fatal-diagnostics-and-crash-reports
fix: contain spill failures, recover failed client batches, and write Desktop crash reports
2026-09-22 19:01:39 +08:00
Yif 5b600047d2 docs(agents): add dsh-client-ui-ux skill for client UI/UX design and review
Collects the standing judgment rules for product-user-visible GUI work:
token and shared-treatment reuse, light/dark readability, font weight and
size scale, feedback-surface choice (toast vs in-place notice vs empty
state), loading treatments, overlay dismiss/fit/clip checks, macOS/Windows
window adaptation, and spacing review. dsh-code-review links it from its
sources of truth so UI PR reviews load it.
2026-09-22 18:52:15 +08:00
winewill ec852793b5 Merge remote-tracking branch 'origin/master' into fix/fatal-diagnostics-and-crash-reports 2026-09-22 18:51:57 +08:00
Yichen Jiang bdbf1fe339 Merge origin/master into registry response selection 2026-09-22 18:39:34 +08:00
Yichen Jiang 3c50bf6b6c feat(plugin-manager): choose the first responsive public registry 2026-09-22 18:38:43 +08:00
Ziya 20e7407ff1 Merge branch 'master' into ux/plugin-install-20260922 2026-09-22 18:36:24 +08:00
ZiyaZhang d6e5b7e41a feat(plugin-manager): offer mirror recovery for GitHub install failures 2026-09-22 03:24:45 -07:00
winewill c22b226b18 fix: address review threads on the fatal-diagnostics PR
- Agent Notes: cross-link the new decision with the native fatal recovery
  and fail-loud release notes both ways, rewrite the older note's
  console-retention and dialog-detail facts in place, and state the report's
  actual bounds.
- crash-report: cut the rendered error section at 256 KiB and prune only
  files matching the generated crash-<time>-<source>.log syntax.
- main: backendReady follows the backend state except during shutdown, so a
  failure while tearing down a ready backend still reads as running.
- subprocess-local: the temporary-file-cleaner hint is appended only for
  ENOENT; other codes rely on the appended error.
- client-modules: describeError is module-private; BootModuleRow.url's
  JSDoc names its fallback role.
2026-09-22 18:20:12 +08:00
winewill af28c551f3 Merge pull request #4913 from deepseek-harness/fix/windows-installer-extract-diagnostics
fix(desktop): report Windows extraction failures with 7-Zip evidence
2026-09-22 18:15:40 +08:00
Yichen Jiang b34b5d33a1 fix(web): show discovered model names in picker 2026-09-22 18:01:37 +08:00
winewill 603a8fc7d3 Merge remote-tracking branch 'origin/master' into fix/fatal-diagnostics-and-crash-reports 2026-09-22 17:58:58 +08:00
Turtle 505559b03b Merge pull request #4955 from deepseek-harness/turtle/settings-link-copy-064fa5feb8cd
fix(client): clarify chat link-opening settings copy
2026-09-22 17:42:50 +08:00
winewill 30a7f8f787 Merge branch 'master' into fix/windows-installer-extract-diagnostics 2026-09-22 17:37:28 +08:00
Dudu-0223 7c296b3f08 Merge pull request #4951 from deepseek-harness/fix/teammate-lead-guidance
fix(agent-team): explain teammate discovery and messaging
2026-09-22 17:36:31 +08:00
mektpoy fac0d8d877 docs(native-command): record the interactive-session requirement for Explorer opens 2026-09-22 17:35:54 +08:00
Turtle b2ec54159f docs(client): name the Sidebar Browser in the link-opening row prose
The ui-chat README described the visibility rule as "while the built-in browser
is available", a phrase that now reads like an option label. Both languages name
the Sidebar Browser, matching the sentence that follows.
2026-09-22 17:33:49 +08:00
Yichen Jiang 108f767a89 Merge pull request #4949 from deepseek-harness/worktree/fix-voice-language-settings
fix(voice-input): persist recognition language settings
2026-09-22 17:31:21 +08:00
winewill 7b2094d04d fix(desktop): keep the Host's original diagnostic in startup crash reports
A Host startup failure reached the crash report as a fresh Error built from
a message string three hops away from the original: the Host sent only
error.message over the fatal IPC event, DesktopHostProcess wrapped it in a
new Error, desktopErrorState flattened it to text, and main.ts wrapped that
text again. Stack, cause, code, and path were gone, and the Host's stderr
tail arriving with the later exit was blocked by the first-failure latch.

The Host now sends its complete inspected error alongside the message
(bounded to 64 KiB; carried over IPC rather than stderr because the two
race and the shell reports the first failure it sees). DesktopHostProcess
keeps it on DesktopHostFatalError.diagnostic, the backend error state
carries the original failure object, main.ts reports that object, and the
crash report prints the Host diagnostic verbatim in its own section.
2026-09-22 17:31:17 +08:00
mektpoy 03294cb653 test(native-command): pin every Explorer open target through one table 2026-09-22 17:31:12 +08:00
winewill d8924486ad fix(desktop): declare the cordis peer the packaged application needs
apps/desktop imports @deepseek-ai/dsh-api-gateway/stream-protocol, whose
import chain reaches @deepseek-ai/dsh-typert-protocol and then
@deepseek-ai/cordis. Both intermediate packages declare cordis as a
peerDependency and nothing satisfied it for the application closure, so
electron-builder omitted cordis from app.asar and the packaged main process
died before opening a window with ERR_MODULE_NOT_FOUND. A workspace checkout
resolves the peer through pnpm's own links, so development runs and the unit
lanes stayed green while every packaged build since efbc8e26b6 (2026-09-20)
failed to launch.

The lockfile additionally drops a stale duplicate [email protected] in favour of the
7.2.3 it already carries; any real pnpm install removes it.

Verified with a signed win-x64 installer built from this tree: app.asar now
ships cordis and @standard-schema/spec, and the installed application opens
its main window.
2026-09-22 17:21:06 +08:00
Dudu-0223 a79e3a2a5f fix(agent-team): explain teammate discovery and messaging 2026-09-22 17:18:08 +08:00
Turtle c81adc2569 Merge pull request #4948 from deepseek-harness/turtle/agent-experience-skill
docs(skills): add the agent-experience skill
2026-09-22 17:16:36 +08:00
Turtle a294fc55d0 Merge pull request #4930 from deepseek-harness/fix/641-unbounded-completion-wakes
fix(tool-jobs): wake an idle owner for every completion by default
2026-09-22 17:14:13 +08:00
Turtle aba3472b1d fix(client): clarify chat link-opening settings copy
The Settings → General row for Chat link destinations now reads
网页链接默认打开方式 with the description 对话中网页链接的打开位置 and the option
labels 应用内侧边栏 and 默认浏览器. English keeps the title "Open chat links in" and
now reads "Choose where to open web links", "In-App Sidebar", and "Default
Browser".

The `ui-chat.linkOpening` setting, its values, persistence, visibility rule, and
open behavior are unchanged. The row spec, the clickable-link gallery scenario,
and the two package READMEs name the new copy; the bilingual pairing records were
re-confirmed for the README pairs.
2026-09-22 17:12:43 +08:00
Dudu-0223 d257fa4af7 fix(agent-team): limit the reminder to the lead identity 2026-09-22 17:08:45 +08:00
imccyu b980fdf5df Merge pull request #4950 from deepseek-harness/worktree/release-dsh-0.1.5-rc.3-history-to-master
chore(release): record dsh 0.1.5-rc.3 history on master
2026-09-22 17:07:52 +08:00
ihsiang e420c44d60 Merge pull request #4857 from deepseek-harness/ihsiang/unify-code-block-ui
feat(web): 统一代码块样式与复制、换行控件
2026-09-22 17:06:07 +08:00
turtle1999 bada62b50b docs(skills): add the agent-experience skill
Carry the user-scoped agent-experience guidance into the repository unchanged so
project sessions discover it beside the other repository skills. The file,
including its frontmatter, is byte-identical to the personal copy.
2026-09-22 17:03:36 +08:00
Dudu-0223 6ec97fa124 fix(agent-team): tell teammates how to message the lead 2026-09-22 17:02:25 +08:00
lsdsjy f0f4bb73fc fix(desktop): keep welcome back action on one line 2026-09-22 16:58:55 +08:00
yixiangihsiang 9c6c407da2 Merge master into ihsiang/unify-code-block-ui 2026-09-22 16:57:18 +08:00
Yichen Jiang 7c84d9d790 fix(voice-input): persist recognition language settings 2026-09-22 16:55:33 +08:00
imccyu 3ae2f687f1 merge: record dsh 0.1.5-rc.3 history on master
Keep the master tree unchanged while recording the dsh-v0.1.5-rc.3 release ancestry.
2026-09-22 16:50:58 +08:00
Yudong Han d3c5f959aa Merge pull request #4921 from deepseek-harness/fix/4918-excel-preview-resize
fix(web): resize Excel previews with their pane
2026-09-22 16:46:26 +08:00
lsdsjy 26af73ff50 chore: merge master account theme updates 2026-09-22 16:34:42 +08:00
HYD@OVERTON 58651b8359 fix(web): resize Excel previews with their pane 2026-09-22 16:33:30 +08:00
turtle1999 2d653be7b0 fix(tool-jobs): address review on the unbounded wake default
Skip the per-owner wake ledger entirely when no cap is configured.
Rewrite the 2026-08-11 Agent Note in place for the opt-in cap and add
a note recording why the default was removed. Keep `subagent`
untranslated in Chinese prose and drop change narration from the test.

Refs #4944
2026-09-22 16:33:24 +08:00
yixiangihsiang 5929af046c Merge master into ihsiang/unify-code-block-ui 2026-09-22 16:32:42 +08:00
yixiangihsiang 780e07b8ed test(web): align built boot assertions with diff layout 2026-09-22 16:28:46 +08:00
lsdsjy 32ca127565 Merge pull request #4898 from deepseek-harness/fix/contact-form-url
fix(client): update Feedback form and omit account UID
2026-09-22 16:27:23 +08:00
turtle1999 536b444f36 Merge remote-tracking branch 'origin/master' into fix/641-unbounded-completion-wakes 2026-09-22 16:26:50 +08:00
Huanqi Cao f5d7de2a01 Merge pull request #4807 from deepseek-harness/fix/pwsh-prompt-readiness
fix(pty): keep the controlled prompt so persistent pwsh settles fast
2026-09-22 16:25:59 +08:00
lsdsjy 4777947b6c fix(client): keep account UID fields out of questionnaire URLs
The Contact us action already stopped prefilling the signed-in UID, but a
configured contact form URL could still carry its own prefill_uid or hide_uid.
contactUrl now drops both query parameters unconditionally, with regression
coverage that starts from a form URL containing them.

The contact URL test also pins the shipped default form path, and the injected
contactUs documentation and the AccountProfile summary no longer describe a
support UID that is no longer sent.
2026-09-22 16:16:34 +08:00
lsdsjy 930d187e04 Merge remote-tracking branch 'origin/master' into fix/contact-form-url
# Conflicts:
#	packages/client/ui-settings-account/README.i18n.yaml
#	packages/client/ui-settings-account/README.md
#	packages/client/ui-settings-account/README.zh.md
2026-09-22 16:13:19 +08:00
Dudu-0223 ee0048558d test(web): capture terminal recovery readiness with its snapshot 2026-09-22 16:13:15 +08:00
lsdsjy 3e4119ebdb fix(account): expire account credentials on inference HTTP 401 2026-09-22 16:12:01 +08:00
Yudong Han 34a0a8e81d fix(web): preserve Excel previews across OPC paths and XML encodings (#4872)
* fix(web): resolve XLSX part relationships and namespace aliases

* fix(web): keep Excel browser scenario in the host test program

* fix(excel): preserve XML encodings and relocated workbook parts

* fix(excel): exclude installed launchers from dependency patch

* fix(excel): restore Strict and case-equivalent workbook previews
2026-09-22 08:04:13 +00:00
Dudu-0223 700b636508 fix(agent-team): limit baseline loading fix to the panel 2026-09-22 16:00:57 +08:00
lsdsjy e76a5eba21 Merge pull request #4903 from deepseek-harness/fix/platform-login-theme
fix(desktop): match Platform login theme
2026-09-22 16:00:44 +08:00
lsdsjy 8e92f17e9c chore: merge master into account provider branch 2026-09-22 15:50:45 +08:00
lsdsjy 64154d2f68 test(models): declare available fixture models and update selection flows 2026-09-22 15:49:54 +08:00
lsdsjy 785a92ab03 fix(client): rename the contact menu entry to Feedback
The account menu entry that opens the questionnaire is now labeled Feedback in
English and 意见反馈 in Chinese. The menu action, contact form URL and its
configuration options keep their existing names.

Expected menu snapshots and the bilingual README record the new copy.
2026-09-22 15:49:30 +08:00
lsdsjy 3b6a5399e8 docs(desktop): clarify login theme ownership 2026-09-22 15:49:20 +08:00
yixiangihsiang fd8bed1ad0 Merge master into ihsiang/unify-code-block-ui 2026-09-22 15:45:41 +08:00
yixiangihsiang 62f816f3a5 feat(web): refine code card spacing and thinking blocks 2026-09-22 15:44:57 +08:00
lsdsjy 37d3a31e29 fix(account): sign out on rejected inference tokens 2026-09-22 15:44:26 +08:00
Dudu-0223 bfc772bb47 Merge remote-tracking branch 'origin/master' into codex/pr-4810-review-fixes 2026-09-22 15:40:58 +08:00
Dudu-0223 749f05e9fa fix(agent-team): refresh projections when opening the panel 2026-09-22 15:38:32 +08:00
Yichen Jiang ab7cdbee75 Merge remote-tracking branch 'origin/master' into worktree/plugin-install-country-registry 2026-09-22 15:38:14 +08:00
Huanqi Cao 41fd0baf91 Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-22 15:36:21 +08:00
lsdsjy f50059e425 fix(desktop): theme workspace sign-in links 2026-09-22 15:34:58 +08:00
Turtle 5ca6d34ac6 Merge pull request #4924 from deepseek-harness/turtle/fix-queued-edit-newline-54bfaf4e59d7
fix(web): keep line breaks when re-editing a queued message
2026-09-22 15:33:31 +08:00
Yichen Jiang 8cf07ea76c fix(plugin-manager): preserve remembered registries during initial lookup 2026-09-22 15:32:16 +08:00
turtle1999 b6775f6d4f fix(tool-jobs): wake an idle owner for every completion by default
`maxConsecutiveWakes` no longer defaults to 3. Unset, every background
job completion wakes its idle owner; the cap is opt-in.

With the default cap, a session chaining background commands and
one-shot subagents exhausted the budget after three wakes. The fourth
notice was injected into the next-step inbox without waking the owner,
the client showed nothing, and the session stalled until the user
typed something (dsh-external/issues#641).

Closes dsh-external/issues#641
2026-09-22 15:29:23 +08:00
lsdsjy 43f107d164 fix(account): expire grants rejected by Platform response code 2026-09-22 15:27:38 +08:00
lsdsjy 2c098434b9 Merge remote-tracking branch 'origin/master' into fix/platform-login-theme 2026-09-22 15:27:06 +08:00
lsdsjy 13fe312e15 test(desktop): fix login theme CI fixtures 2026-09-22 15:26:39 +08:00
lsdsjy bc8e8005fc docs: refresh module graph for account provider dependencies 2026-09-22 15:19:29 +08:00
lsdsjy 4dae756ced Merge remote-tracking branch 'origin/master' into feat/account-provider-signout 2026-09-22 15:13:22 +08:00
Turtle 753df93b85 test(web): pin the multiline queued edit in the browser lane
The recorded-session scenario edited with a single-line value, so the ARIA
golden could not catch a return to a newline-stripping editor. Edit with a
two-line value and assert the model-bound user message keeps the line break;
with the previous input element the scenario fails on that assertion. Also
refresh the stale input cast and pin that Shift+Enter is not consumed.
2026-09-22 15:12:35 +08:00
lsdsjy 06a3daef9f Merge remote-tracking branch 'origin/master' into feat/account-provider-signout 2026-09-22 15:08:47 +08:00
Yichen Jiang 8ae7631861 Merge pull request #4916 from deepseek-harness/worktree/settings-provider-docs
docs(settings): correct provider configuration paths and examples
2026-09-22 15:08:34 +08:00
lsdsjy 6ef32577a3 fix(account,models): reconcile provider lifecycle with master 2026-09-22 15:06:16 +08:00
lsdsjy b1c084e769 Merge pull request #4904 from deepseek-harness/fix/web-account-client-platform
fix(credentials): send web client platform header for account requests
2026-09-22 15:02:35 +08:00
Yichen Jiang 13d9606675 test(voice-input): synchronize idle cleanup failure observation 2026-09-22 14:59:47 +08:00
Turtle c74e36acfc fix(web): keep line breaks when re-editing a queued message
The inline queue editor was a single-line input, and HTML strips newlines
from such a value: opening and saving a multi-line queued message silently
collapsed it into one line before delivery. Edit in a textarea that grows
with its content, capped at six lines; Enter saves, Shift+Enter breaks the
line, and Escape still cancels.
2026-09-22 14:55:34 +08:00
Jiawei Song e950c8bea4 Merge pull request #4838 from deepseek-harness/fix/4823-message-overflow-review-menu
fix(web): 修复消息长文件名溢出和 Review 浮窗菜单错位
2026-09-22 14:47:21 +08:00
winewill a19a48edea Merge pull request #4837 from deepseek-harness/feat/desktop-update-ui-2
fix(desktop): polish the Windows update copy, app icon and About dialog
2026-09-22 14:42:44 +08:00
lsdsjy f21098e9d3 fix(account): expire rejected credentials and hide signed-out provider 2026-09-22 14:41:33 +08:00
winewill cafb9b93b4 fix: address adversarial review of the fatal-diagnostics branch
client-modules: a batch that already executed is never requested again,
even when its first importer was a row it did register — every executed
batch URL is remembered and a still-missing row goes straight to its
one-resource URL. The in-process module system test in test-support is
updated to the aggregated arrival message. describeError replaces three
inline non-Error ternaries and is covered.

subprocess-local: the spill path is published only after the exclusive
open succeeds, so a failed open (EEXIST on a planted entry included) can no
longer unlink a path this process did not create; a reporter that throws is
contained and written to stderr; logSpillFailure builds the owner reporter
for both the runtime and the SSH helper so the logging path is exercised
once instead of duplicated. Tests cover the runtime logger, the bare-caller
stderr default, EEXIST, and a throwing reporter.

desktop: a fatal failure during shutdown still writes its report; the
report phase follows the backend state so a failure during a restart is
'startup' again; writeReport is a required recovery operation and the
dialog tests await the write; the shell pid is labelled; the withheld
response-header list states why set-cookie is dropped.

app-boot, READMEs, Agent Note: "never resumes" is restated as control never
returning to the failed operation while the loop runs until release
settles; inspect output is bounded; incident inferences (who removed the
spill directory, which batch failure occurred) are written as inferences.
2026-09-22 14:41:10 +08:00
lsdsjy 5f1a524f61 docs(credentials): clarify private platform request headers 2026-09-22 14:39:19 +08:00
Dudu-0223 db4bfb4c96 docs(agent-team): refresh generated module dependencies 2026-09-22 14:37:05 +08:00
lsdsjy 6a133a02b8 Merge origin/master into fix/web-account-client-platform 2026-09-22 14:36:24 +08:00
Yichen Jiang 43bd7010d0 test(llm): isolate idle timeout from HTTP setup timing 2026-09-22 14:36:17 +08:00
mektpoy 1a21e958df Merge remote-tracking branch 'origin/master' into tmp4876 2026-09-22 14:34:28 +08:00
Dudu-0223 7befda1147 test(agent-team): release fixtures and respect snapshot types 2026-09-22 14:32:01 +08:00
winewill bed4a2b565 fix(desktop): address review of the extraction failure report
- Headline skips the archive path 7-Zip echoes before an open failure
  (also when the path contains spaces) and prefers the operation line.
- Raw process statuses such as 0xC0000005 are kept and printed in hex
  instead of being clamped to INT_MAX.
- The expanded panel excerpts the result and 7-Zip's own lines rather
  than the report header.
- The saved report keeps up to 16 MiB of output, records any cut, and
  trims a partial UTF-8 sequence before decoding.
- The details view no longer reads the UTF-8 log as ANSI; the test seam
  define and the zero-padded GetTime order are documented; the smoke
  asserts a year-first report name and normalizes -FrameLibrary.
- README names the real updater cache directory.
2026-09-22 14:30:56 +08:00
Huanqi Cao dbd34bcc0d Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-22 14:30:34 +08:00
Yichen Jiang c9591d9445 Merge remote-tracking branch 'origin/master' into worktree/plugin-install-country-registry 2026-09-22 14:29:40 +08:00
Yichen Jiang d459183f32 docs(settings): correct provider configuration paths and examples 2026-09-22 14:28:46 +08:00
Dudu-0223 b7d9c0f6a4 Merge remote-tracking branch 'origin/master' into feat/agent-team-projection-panel 2026-09-22 14:27:15 +08:00
Dudu-0223 843e1b97af fix(agent-team): scope projection reads and address review feedback 2026-09-22 14:27:00 +08:00
yixiangihsiang ce2ba9b216 Merge master into ihsiang/unify-code-block-ui 2026-09-22 14:23:25 +08:00
CreatixChu ee4458f6d0 Merge pull request #4802 from deepseek-harness/fix/4775-multimodal-tool-retention
fix: 按统一 token 预算保留工具结果中的图文内容
2026-09-22 14:22:45 +08:00
Yichen Jiang d407a6ce90 test(credentials): allow either concurrent account request order 2026-09-22 14:22:13 +08:00
mektpoy ab77b55663 Merge origin/master into feat/window-drag-coverage
master grew a fourth drag owner after this branch: the Platform overlay's return
bar (ui-settings-account) declared `app-region: drag` on its own header. The
branch absorbs it into the contract — the header marks itself `data-window-drag`,
its own app-region drag/no-drag rules are deleted, the ui-theme manifest pins the
row and its 48px height, and the Agent Note's row list names it — so the tree
declares the drag surface in exactly two places again (the shell's mark rule and
the Windows caption row).

Earlier resolutions from the first merge stand: the dockkit strip keeps its mark,
the sidebar-right pulse stays deleted, ui-settings-general keeps upstream's
dsh-settings and this branch's react-dom, and tsconfig.host.json takes upstream's
`files: []`.

Checks: build, build:web, typecheck, test:gui, the ui-theme/base-styles gates, the
window-drag-coverage lane, doc-sync and translation pairing.
2026-09-22 13:49:49 +08:00
winewill 4544874d62 Merge branch 'master' into fix/windows-installer-extract-diagnostics 2026-09-22 13:46:04 +08:00
mektpoy 67eb749ef7 Merge origin/master into feat/window-drag-coverage
Conflict resolutions:
- ui-dockkit TabPanel: keep upstream's reworked tab strip and re-add the row's
  `data-window-drag` mark on `css.tabStrip`.
- ui-sidebar-right SidebarRight.tsx/.module.css: keep upstream's retention
  rewrite and re-delete its hand-written one-frame app-region pulse; the shell's
  window-drag watcher owns recollection.
- ui-settings-general/package.json: keep upstream's `@deepseek-ai/dsh-settings`
  dev dependency and this branch's `react-dom`.
- tsconfig.host.json: take upstream's `files: []`; client sources belong to the
  client aggregate.
- pnpm-lock.yaml: master's lock plus only the react-dom importer entries.
2026-09-22 13:41:21 +08:00
imccyu a4c74a91e0 Merge pull request #4909 from deepseek-harness/worktree/release-dsh-0.1.5-rc.3
release: [email protected]
2026-09-22 13:26:23 +08:00
winewill 6530130ffa docs(agent-notes): record fatal diagnostics and crash report decisions 2026-09-22 13:25:38 +08:00
winewill e38cca76fd feat(desktop): write a crash report before the fatal recovery dialog
The fatal recovery dialog showed the last eight lines of the error and
promised that the full diagnostic was in the Electron console, which a
packaged installation never surfaces. Two field failures were diagnosed
from screenshots of those eight lines: a Host killed by an uncaught
exception whose path happened to be in the tail, and a renderer boot
failure whose real import error lived only in the renderer console.

Every reportFatal caller now names its source (host, web-boot, renderer,
main). Before the first dialog opens, the shell writes
crash-<time>-<source>.log under app.getPath('logs') with the source, the
startup or running phase, application and runtime versions, the complete
inspected error with its properties and cause chain, and the primary
window's recent error-level console output (a 64 KiB tail captured from
webContents 'console-message'). The dialog names the file on its own line,
independent of whether the error was shortened and in the listener-conflict
variant too; the wait is bounded to one second and a failed write shows the
dialog without a path. Startup keeps the ten newest reports. Buttons and
recovery actions are unchanged.
2026-09-22 13:22:27 +08:00
imccyu 8e7cca22ca release(dsh): 0.1.5-rc.3 2026-09-22 13:08:07 +08:00
imccyu 943af81a18 fix(release): pin vendor dependencies for dsh 0.1.5 2026-09-22 13:07:34 +08:00
winewill 5864a6f6f1 fix(desktop): drop connection-level headers and bundle cache headers when forwarding to the Host
forwardWebRequest relayed transfer-encoding, connection, keep-alive, and
the other hop-by-hop headers from the Host's response into the dsh-app://
response, describing a Node fetch connection that Chromium never saw. It
also relayed the Host's `cache-control: public, max-age=31536000,
immutable` on plugin bundles whose revision changes on every launch, so
each start wrote another unreusable copy into the renderer's disk cache.

The forwarder now strips the connection-level header set alongside the
encoding headers it already removed and marks /plugins/ responses
no-store. Whether either header contributed to the observed batch load
failure is unverified; both are corrections in their own right.
2026-09-22 13:03:13 +08:00
winewill afde35880f feat(client-modules): recover from a failed batch script and record import errors
One application batch is a single classic script that registers every
package in sequence, requested exactly once during boot. A transient
failure of that one <script> request failed every row in the batch and,
through arriveGraphRow's dependency wait, every row that injects or
requests them; the boot audit then listed each as "import failed (see
console for the import error)" with the real error only in the renderer
console.

Arrival now distinguishes the two failure kinds. A transport failure
(script error event, nothing executed) is retried once on the same URL and
the retry is shared by every row waiting on that batch. A script that
loaded without registering a row is never re-executed, because register()
rejects duplicates and a replay would stop at the first package the
original run did register. Either way each still-missing row then loads its
own one-resource combo URL, which the Host serves for every package. A batch
URL that failed is remembered so later rows skip straight to their
fallback; a one-resource URL is not, so it stays retryable on the next
import as before. Dependency failures are wrapped with the consumer and
dependency names so a cascade reads as a chain.

The module system records the last import() or prefetch() failure per
graph row at the outer operation, so factory execution errors are captured
as well as arrival errors, and clears it on success or invalidation.
assertEntriesActive takes the module system and reports that text per
fiberless entry.
2026-09-22 13:00:13 +08:00
Yichen Jiang 9f52c6401e docs(ip-geolocation): refresh the module dependency graph 2026-09-22 12:57:05 +08:00
Yichen Jiang 22be805026 fix(ip-geolocation): align the package with the current release 2026-09-22 12:50:28 +08:00
winewill 9f9a50e553 feat(app-boot): treat uncaught exceptions as fatal through installFailLoud
The Desktop Host and every other profile launcher installed a fail-loud
handler for unhandled rejections only. A synchronous throw from a stream
'data' listener fell through to Node's default uncaught-exception path: it
printed and exited without the surface's release hook, and the label and
format differed from every other fatal diagnostic.

installFailLoud now registers the same report for 'uncaughtException' with
the label `fatal uncaught exception`, shares the exit latch and release
timeout with rejections, and never resumes the process. The diagnostic is
util.inspect(err, { depth: 4 }) instead of err.stack so enumerable
properties (a node:fs error's code, syscall, and path) and the cause chain
reach stderr; the `fatal load failure` label for rejections is unchanged
because the Web profile expected-output e2e tests match it.
2026-09-22 12:46:37 +08:00
winewill cfa84ed4e3 fix(subprocess-local): contain spill file failures instead of killing the host
OutputCollector.spillAll ran openSync/writeSync inside the stream 'data'
listener with no containment. When the private per-process spill directory
had been removed by a temporary-file cleaner, the first overflowing chunk
threw ENOENT from Pipe.onStreamRead, became an uncaught exception in the
Desktop Host, and the Electron shell reported it as a fatal failure.

Spilling is best-effort by contract (spillPath is optional; a failed final
close already withholds it). Every filesystem failure while opening or
appending the spill file now discards the spill, reports once through the
owner's logger, and leaves in-memory collection untouched. Spill inputs move
into one SpillOptions object with the reporter, so tail-only collectors no
longer pass an empty directory; prepareManagedProcessBinding is the explicit
resolve step for the directory and reporter defaults, and the runtime and
SSH helper supply their plugin loggers.

Tests cover ENOENT on open (removed directory), ENOTDIR on open, and ENOSPC
on append after the file exists, asserting the tail stays byte-exact, the
spill file is withdrawn, and the reporter fires once.
2026-09-22 12:40:07 +08:00
winewill ab62f09c22 fix(desktop): report Windows extraction failures with 7-Zip evidence
The installer showed "Failed to decompress files" and discarded 7-Zip's
error output, so a failure such as security software quarantining an
extracted file could not be told apart from a full disk or a broken
download.

- InstallerExtract returns negated Win32 errors for launch failures so
  they no longer collide with 7-Zip exit codes; 7-Zip writes UTF-8 errors.
- window-frame.dll composes a report (result, archive, destination,
  Windows version, full 7-Zip output), saves it under the updater cache
  directory, and presents a task dialog with the first error line, a
  collapsible bounded excerpt, and a Copy error details button. Silent
  installs keep only the report; a missing task dialog falls back to a
  message box.
- Unsigned Windows builds name their installer *-unsigned.exe so a
  shared file cannot pass for a release artifact; version discovery
  still counts them.
- The directory smoke asserts the saved report on a broken archive and
  smoke-windows.ps1 accepts the prepared DLL.

Refs #4893
2026-09-22 12:38:05 +08:00
Yichen Jiang dccf989cd8 feat(plugin-manager): prefer the mainland mirror for CN network exits 2026-09-22 12:37:32 +08:00
creatixchu c5ca36387b Merge remote-tracking branch 'origin/master' into fix/4775-multimodal-tool-retention
# Conflicts:
#	packages/spill/spill-policy/package.json
2026-09-22 12:35:56 +08:00
mektpoy 95611fbc63 fix(native-command): encode the Explorer target so a comma stays in the path 2026-09-22 12:24:53 +08:00
mektpoy d6a693796d Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-22 12:21:30 +08:00
mektpoy 19b7de31a6 refactor(tool-fs): persist the read language hint as a short id 2026-09-22 12:21:19 +08:00
lsdsjy f5c96b6340 fix(credentials): identify web account requests with client platform header 2026-09-22 12:09:40 +08:00
creatixchu 670a903237 test: clarify parallel recovery fixture cleanup 2026-09-22 12:08:55 +08:00
creatixchu b74bef5d40 test: exercise image recovery and real PTC retention 2026-09-22 12:03:54 +08:00
lsdsjy 817623750a fix(desktop): match Platform login theme
Opened and copied authorization links carried no palette, so the Platform
login page rendered its own stored preference. Append the effective Desktop
palette as theme=light or theme=dark, resolving system through the theme
source the preload publishes.

The theme source now reaches nativeTheme on Windows as well: the preload
drops its macOS-only guard, since shouldUseDarkColors is read for every
platform, and gates the DOMContentLoaded listener with once.
2026-09-22 12:02:54 +08:00
Huanqi Cao 8aff71863b Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-22 11:52:42 +08:00
winewill 9d91bb01c9 fix(desktop): read the About copy from the live locale
master replaced the startup-bound messages constant with a locale that
follows the settings preference; the About dialog now reads the same
locale as the update prompts so the two never mix languages.
2026-09-22 11:48:33 +08:00
winewill 3305bb1938 Merge remote-tracking branch 'origin/master' into feat/desktop-update-ui-2 2026-09-22 11:44:41 +08:00
sjw1231 5ac920e50c chore: merge latest master into message and review fixes 2026-09-22 11:39:33 +08:00
lsdsjy adbb0e0dc4 fix(client): update the contact form URL and drop its account UID prefill
The Contact us entry now opens the current Feishu questionnaire, and the URL
no longer carries the signed-in account UID: contactUs stops reading the
account profile, contactUrl stops writing prefill_uid and hide_uid, and the
remaining build and browser context fields keep their existing behavior.

The url, package tests and the bilingual README and account-login note state
the same current facts.
2026-09-22 11:39:14 +08:00
ZiyaZhang 2426d398b5 fix(ui-agent-preset): restore the read-only configuration viewer
The declarative-preset refactor (#4569) removed the registry's read Remote
together with the YAML editor, and with it the 查看配置 card action that
opened a preset's composition read-only. #4850 brought the Creator entry
back and had to leave 查看配置 out because `agentPresets/read` was gone.

Give the registry a read-only `read` Remote that renders a declaration's
child plugin list from the in-memory definition in the Loader's own
entry-list dialect, so `!!js` conditions read as declared, and put the card
action back at the right end of each card footer: an icon that opens the
YAML in a read-only dialog titled after the preset. Nothing accepts YAML
back, and a broken preset stays readable because its diagnostic points into
that YAML.

Fixes #4895
2026-09-21 20:38:30 -07:00
creatixchu de45804084 test: refresh tool projection API snapshot 2026-09-22 11:32:07 +08:00
Huanqi Cao 091db6c8c3 Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.zh.md
2026-09-22 11:30:34 +08:00
creatixchu 94728ebd23 fix: repair multimodal retention CI resolution and coverage 2026-09-22 11:28:51 +08:00
creatixchu 06923b8868 Merge remote-tracking branch 'origin/master' into fix/4775-multimodal-tool-retention 2026-09-22 11:25:47 +08:00
creatixchu 6b227a81a7 docs: sync plugin inventory after master merge 2026-09-22 11:00:31 +08:00
creatixchu 4137d1d628 Merge remote-tracking branch 'origin/master' into fix/4775-multimodal-tool-retention
# Conflicts:
#	docs/config-catalog.i18n.yaml
#	docs/config-catalog.zh.md
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-09-22 10:52:21 +08:00
Dudu-0223 d08aac9db2 fix(agent-team): read current projections through standard hooks 2026-09-22 10:46:06 +08:00
Dudu-0223 5ca4fea9b5 Merge master into feat/agent-team-projection-panel 2026-09-22 10:45:10 +08:00
Huanqi Cao 44900be005 docs(native-command): name explorer.exe in the Windows open note
The Agent Note title said 'the shell's own application resolution', which names a layer instead of the command the opener runs.
2026-09-22 02:07:32 +08:00
Huanqi Cao 68e43b173e fix(native-command): open Windows paths through the shell's resolution
The settings sheet's Open configuration file action opened nothing on Windows when the user's default lived only in the Explorer per-user record (FileExts\\<ext>\\UserChoiceLatest), which Explorer honors and the association resolver inside the host process does not. Invoke-Item also exits 0 when it finds no application, so the Remote answered { opened: true } and the sheet rendered no error.

Windows opens now hand the path to explorer.exe as one argv element - the resolution a double-click performs - and revealNativePath shares that invocation rule. The shared helper accepts Explorer's delegate exit 1 for an open and a reveal alike; every other failure and every cancellation still rejects. The PowerShell command string and powershellLiteral are gone: the path crosses the process boundary as argv, with no escaping step.

Fixes #4428
2026-09-22 01:57:21 +08:00
yixiangihsiang f114233545 fix(web): cover code-card overflow and refresh browser expectations 2026-09-21 22:40:55 +08:00
yixiangihsiang 8d2cd0cf72 feat(web): unify code block styling and icon controls 2026-09-21 21:57:35 +08:00
mektpoy 6f056da42f chore(deps): keep only the lockfile delta the settings portal needs
The consolidated commit refreshed unrelated transitive resolutions while it
resolved the settings portal's new react-dom dependency. Restore those entries to
their previous versions and keep only the two importer entries the portal needs;
the lockfile already carries both snapshots.
2026-09-21 21:17:55 +08:00
mektpoy 613157c5db Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-21 20:42:39 +08:00
mektpoy ba88134117 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages 2026-09-21 20:37:43 +08:00
winewill 53abf11bdd fix(desktop): keep the Windows About dialog on the startup locale
Review pointed out that About read its copy from the renderer-reported
Windows language while the shared update dialog stamps its lang and
close label from the startup locale, so an in-app language switch mixed
languages inside one dialog. About now uses the same startup messages
as Check for Updates. The menu click also logs a dialog that fails to
open instead of leaving an unhandled rejection, and the return type no
longer hides the message-box result behind unknown.
2026-09-21 20:11:05 +08:00
Jiawei Song f384ee7418 Merge branch 'master' into fix/4823-message-overflow-review-menu 2026-09-21 19:48:47 +08:00
winewill 89251dde83 Merge remote-tracking branch 'origin/master' into feat/desktop-update-ui-2 2026-09-21 19:39:37 +08:00
sjw1231 7ebbd370cd test(web): preserve quoted file reference coverage 2026-09-21 19:34:51 +08:00
sjw1231 719cc56276 Merge branch 'master' into fix/4823-message-overflow-review-menu 2026-09-21 19:25:06 +08:00
mektpoy fe09f495a5 Merge remote-tracking branch 'origin/master' into feat/unify-code-highlight-languages
# Conflicts:
#	packages/client/ui-primitives/tsconfig.json
#	pnpm-lock.yaml
2026-09-21 19:19:36 +08:00
mektpoy b0ad792e6b fix(web): keep dedicated previews and the read-card lang domain
The shared code-language table must not claim a suffix a dedicated viewer
declares, and the Host read card must keep the `lang` values it already
persisted.

- Drop `csv` from the shared table: Code registers before Spreadsheet, so
  the earlier body would take `.csv` and the browser snapshot gate fails.
- Add `readLangHintForPath`, the read card's legacy projection over the
  shared table: the 43 pre-unification suffixes keep their old short ids
  byte for byte, new suffixes use the canonical id.
- Add an ownership regression test over the full preview registry that
  turns red when `csv` returns, plus byte-level and alias-normalized tests
  for the read projection.
2026-09-21 19:14:08 +08:00
winewill 894f25b91e fix(desktop): source the About product name from the locale
The client UI i18n gate rejects literal message text in main.ts; the
Windows About dialog now reads the product name from the dictionaries
like every other shell string.
2026-09-21 19:03:39 +08:00
mektpoy dc07e5a50d fix(tools): keep surrogate pairs intact when capping tool output
Three tools capped the preview text they return with String.prototype.slice
at a UTF-16 code-unit budget. A cut that lands inside a surrogate pair
leaves a lone high surrogate, which is not well-formed text: a strict JSON
reader rejects the durable Session log carrying it, and the preview shows a
broken glyph. A lone surrogate retained in history has already blocked every
later Messages request for one session.

Centralize the cap in output-retention as
truncateWithoutSplittingSurrogatePair, and use it from the persistent bash
and pwsh shells and the string-replace editor. The cut drops the unpaired
half instead of keeping it, so the retained text stays a prefix and is at
most one code unit shorter than before.

The new dependency edges and the shifted Config sources regenerate
docs/module-graph and docs/config-catalog, including the committed
translation pair.

Refs #4817
2026-09-21 18:51:19 +08:00
winewill bc4e8bafe6 Merge remote-tracking branch 'origin/master' into feat/desktop-update-ui 2026-09-21 17:58:40 +08:00
sjw1231 5aa21749b9 fix(web): wrap long file references and track floating menus
Fixes #4823
2026-09-21 17:48:27 +08:00
winewill c1edda8a37 fix(desktop): show the Windows About command in the update dialog
Electron's About role on Windows falls back to a bare system message
box, which looks nothing like the shell's dimmed update prompts. Design
asked for the version check to match Check for Updates, so the Windows
menu item now opens the shared update dialog with the application name,
localized version line and a single OK button; macOS keeps the native
panel. The About command follows the renderer's chosen language like
the rest of the Windows caption menu.
2026-09-21 17:46:26 +08:00
mektpoy 6945da14cb feat(web): unify the code-highlight language table and extend it
The document Code preview and the Host read card each owned an
extension-to-language table that had drifted: the preview table had 13
extensions the read card lacked, and the two returned different language
ids for the same suffix. Both now resolve through the new zero-dependency
@deepseek-ai/dsh-util-code-language, which also adds common Windows,
config, markup, and language extensions. Every added grammar stays in the
lazy set; the boot grammars are unchanged.

Fixes #4822
2026-09-21 17:42:11 +08:00
winewill 1566f3f5ad fix(desktop): round the Windows app icon corners further
The Windows badge used a 44px radius on its 1024px plate, which reads as
nearly square on the desktop next to other Windows 11 icons. Raise the
radius to 192px (3/16 of the plate, matching Tencent Meeting's corner)
and re-export the transparent 1024×1024 PNG from the SVG; the ICO for
the app, installer and uninstaller and the About panel image all derive
from that PNG.
2026-09-21 17:40:49 +08:00
winewill 481b6b57e5 fix(desktop): simplify the update-available restart notice
The manual check dialog explained that the release bundles its matching
dsh runtime before mentioning the restart. Users only need to know the
app restarts to finish updating; the bundling detail belongs in the
README, not the confirmation. Both locales carry the shorter sentence.
2026-09-21 17:39:50 +08:00
creatixchu 754733d5d1 test: update shell spill snapshot for the shared token budget 2026-09-21 17:34:29 +08:00
creatixchu f3c6d0c0df test: refresh multimodal tool catalog after master update 2026-09-21 17:28:00 +08:00
Huanqi Cao 68b44d78ba Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-21 17:21:55 +08:00
creatixchu 575dc9add0 Merge remote-tracking branch 'origin/master' into fix/4775-multimodal-tool-retention 2026-09-21 17:21:38 +08:00
creatixchu b0be6e79c2 fix: preserve failed PTC image result forwarding semantics 2026-09-21 17:17:03 +08:00
creatixchu 14c1fec958 test: record mixed-content retention through the headless profile 2026-09-21 17:11:56 +08:00
creatixchu 79468e26dd test: stabilize multimodal spill recovery locators 2026-09-21 17:08:01 +08:00
creatixchu 4694540e2a Merge remote-tracking branch 'origin/master' into fix/4775-multimodal-tool-retention
# Conflicts:
#	docs/module-graph.i18n.yaml
#	docs/module-graph.md
#	docs/module-graph.zh.md
2026-09-21 16:59:45 +08:00
creatixchu e52209da40 test: share multimodal snapshot composition 2026-09-21 16:57:59 +08:00
creatixchu 5c1d966c3f test: cover image recovery failures and snapshot registration 2026-09-21 16:55:13 +08:00
Huanqi Cao 74f4c438de test(pty): pin the pwsh fast path by settle reason
The composition suite's idleSilenceMs: 30000 was below the suite's own send
bound (dsh-terminal-bash timeoutMs: 300000), so the comment claiming silence
could settle nothing was wrong: a regressed send still settled as inferred_idle
after ~30 s and only the accumulated case timeout caught it.

The case now records every send's waitReason and requires at least six
stdin_read settlements with no inferred_idle. Reinstating the removed prompt
override fails it in 30 s with 'expected 0 to be greater than or equal to 6'
while the output assertions still pass. The silence tier returns to its product
default.

Also renames the two stale test titles ('private shell prompt', and the
cancellation phase that no longer covers an initialization send), pins the
stdin_read fallback's session retention, and records the interactive-child
consequence of that retention in the package README pair and the Agent Note.
2026-09-21 16:53:15 +08:00
Dudu-0223 552235aab6 docs: align the Chinese config catalog with the regenerated source line 2026-09-21 16:52:05 +08:00
creatixchu c4c18ef0d4 test: align retention checks and catalogs with token budgets 2026-09-21 16:50:35 +08:00
dsh-agent 2545414c02 test(preview): lock ini admission to the code renderer
The issue reported .ini files with no preview. On master the ini grammar is
already in CODE_HIGHLIGHT_EXTENSIONS, so the code renderer claims the
suffix and .ini previews. No production change is required; this test
records the admission behavior so a future allowlist change cannot silently
drop the reported suffix.
2026-09-21 16:46:45 +08:00
Dudu-0223 38dbb56237 test(agent-team): type Team panel fixtures without unknown casts and regenerate catalogs
The static CI gate rejected four new assertions to unknown in the
rewritten Team panel specs. Build the Session list, Session snapshot,
and injected-callback fixtures as typed values, prune the retired
baseline fingerprints, and regenerate the module graph, config, and
persistence catalogs for the removed Remote dependency edges and the
shifted source lines.
2026-09-21 16:45:40 +08:00
creatixchu ab102138c8 fix: retain ordered tool text and images within a token budget 2026-09-21 16:45:21 +08:00
dsh-agent 6fa5151d8a fix(ui-open-in-app): keep an application as the default file action
The Host's default marker is best effort: on Windows it comes from the
Shell's ASSOCSTR_EXECUTABLE/APPID answer, which does not always name an
enumerated handler. When no application carried that marker the split
button promoted 显示文件位置 to the primary action even though the menu
listed applications that can open the file.

Select the OS-marked default when present, otherwise the first registered
handler in Shell preference order, and mark it as the menu default.
Reveal is promoted only when no application is registered at all.
2026-09-21 16:39:38 +08:00
dsh-agent d685383ee6 fix(native-command): resolve packaged Windows app icons
Windows 11 ships some applications (Notepad, other Store apps) as MSIX
packages whose Shell handler reports an indirect icon reference such as
@{Microsoft.WindowsNotepad_...?ms-resource://.../NotepadAppList.png}
instead of a file path. SHDefExtractIcon cannot read that reference, so
the menu showed the generic fallback glyph.

Resolve an indirect reference with SHLoadIndirectString before extracting,
and fall back to the handler's executable when the resolved source still
yields no image.
2026-09-21 16:39:34 +08:00
Dudu-0223 1dc518f217 feat(agent-team): drive the Web Team panel from the agentTeam projection
The Team panel read a Remote snapshot on open and behind an explicit
refresh button, while the subagent catalog panel updates from Host
projection frames. The Team projection was Host-only and its `apply`
mutated state in place, so the projection registry could never publish
a client view for it.

Publish a durable-only `agentTeam` wire view: roster rows with their
durable phase, non-deleted task views through the same readiness,
owner-name, and write-overlap derivation the task board returns to
agents, and `failure` beside the last valid state when a persisted Team
record is rejected. `apply` now returns a new state per applied Team
event and replaces only the touched collection, so mailbox-only events
reuse the previous view reference and publish nothing.

The Web panel derives every row from the shared Session store: the Lead
from the current Session's subagent address, running/inactive from
Session status, and the model from the member Session's durable
`modelSelection` projection. Opening requests the Lead's projection
baseline when the store has none, a failed read shows a retry control,
and the refresh button and Remote mount are gone. The `agentTeams/view`
Remote method remains for callers that need live availability and the
configured model.

The Team panel web e2e now asserts that Host-side task creation and
claiming reach the open panel without any user action.
2026-09-21 16:37:10 +08:00
Huanqi Cao b900840784 Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-21 16:26:08 +08:00
Huanqi Cao 4f74f956ec Merge remote-tracking branch 'origin/master' into fix/pwsh-prompt-readiness
# Conflicts:
#	docs/config-catalog.i18n.yaml
2026-09-21 16:24:49 +08:00
creatixchu 4e47ba6c1d chore: start multimodal tool result retention work 2026-09-21 16:03:43 +08:00
Huanqi Cao 97545d9c8f fix(pty): keep the controlled prompt so persistent pwsh settles fast
tool-pwsh-persistent installs its own `prompt` function after spawn, so
terminal-bash prompt readiness never matched and every send degraded to the
silence tier (idleSilenceMs + handoffGraceMs) under production defaults. This
is the defect the persistent bash tool fixed for the bash stack.

The tool now initializes without a prompt send and detects the no-end-marker
fallback through the seam's stdin_read wait reason instead of matching its own
prompt text. The private prompt constant and its stripping are deleted, so
partial output can carry the backend's own trailing prompt.

Tool calls drop from 8493/3722/3832/3759 ms to 1340/255/251/241 ms (spawn and
initialization plus the first command, then three warm commands; Windows,
production defaults, real Loader composition). The loader composition suite
pushes idleSilenceMs beyond the send bound, so every case fails if prompt
readiness regresses.
2026-09-21 15:57:08 +08:00
lsdsjy 0d2fbaad67 fix(session-controller,ui-model-selection,ui-settings): handle catalog and account setup failures 2026-09-21 14:55:08 +08:00
lsdsjy 9cf12959f2 fix(ui-model-selection): retain effort and open unselected models directly 2026-09-21 14:54:51 +08:00
lsdsjy 7dc86578d8 fix(ui-settings-account,ui-model-selection): align with updated primitives and catalog checks 2026-09-21 14:54:51 +08:00
lsdsjy 325e28bfa0 fix(ui-model-selection,llm-deepseek): prioritize account models and simplify provider label 2026-09-21 14:54:51 +08:00
lsdsjy cc478ac70a feat(client,session-controller,llm): track available models and expose account settings 2026-09-21 14:54:51 +08:00
lsdsjy 17825ee8c0 feat(agent,llm-deepseek,ui-settings-account): separate account routing and confirm sign-out 2026-09-21 14:54:50 +08:00
winewill 4df3de2075 fix(desktop): sharpen installer brand art and progress-page scaling
Re-render the four installer brand banners from the vector sources:
the badge follows the Figma spec (three-stop gradients, layered drop
shadows) and the whale no longer inherits shape-rendering=crispEdges,
which disabled anti-aliasing and left jagged edges. The wordmark now
reaches its design color instead of a soft #353638.

Draw the progress-page brand with high-quality bicubic interpolation
and half-pixel offset so the always-2x bitmap stays crisp when scaled
down at 96 DPI.
2026-09-21 12:02:49 +08:00
mektpoy a2487e34b7 fix(desktop): lock the development runtime target and complete the resolution
- main-startup: assert primaryRuntime for the unpackaged Host and cover a
  missing DSH_DESKTOP_PRIMARY_RUNTIME_DIR as a fatal startup dialog with no
  Host started.
- test-workspace-updates: pass the prepared primary-runtime directory instead
  of an application/runtime path the runner never creates.
- development-project: derive the descriptor platform/arch from
  resolveDesktopBuildTarget so it matches the prepared payload.
- main: resolve the unpackaged primary runtime once at startup instead of
  inside the Host factory.
- dev: keep the environment override symmetric with its neighbours.
- README: document the variable as required for unpackaged launches and record
  the remaining win32-arm64 payload architecture limitation.
2026-09-21 11:53:32 +08:00
gengruilin cbd6562506 docs(web): clarify browser dependency installation 2026-09-20 23:45:19 +08:00
gengruilin b79b64f788 Merge origin/master into fix/webkit-model-picker 2026-09-20 23:42:15 +08:00
dcc c2be3d9a0b test(web): pin the desktop update chrome's shared palette
Numeric download progress renders without an ellipsis, and a failure keeps the update chip's palette instead of a separate error color. Pin the progress label and the shared badge background, and let the retry label carry the failure distinction.
2026-09-20 22:41:53 +08:00
dcc 5015426866 fix(ui): unify desktop update badge colors 2026-09-20 22:33:00 +08:00
dcc 422ded6f7a fix(ui): align desktop update tag styling 2026-09-20 22:33:00 +08:00
gengruilin 06ef26a80f fix(web): preserve focus when toggling the model picker 2026-09-20 20:56:34 +08:00
mektpoy 31a83ebc4b refactor(client): let chrome rows own the macOS window drag
The macOS window's draggable area was a hand-written band: a 52px strip, deepened
to 76px by a marker the Conversation header had to keep in step with its own
height. It drifted from the layout — blank runs inside a chrome row did not drag,
and a control a few pixels away dragged the window instead.

Chrome rows now mark their own element (`data-window-drag`) and the shell declares
the surface once (`html[data-platform='darwin'] [data-window-drag]`), so a row's own
box is its draggable geometry and no fixed band has to match any row's height. The
frame band, its 52/76 figures, the marker, and the per-sheet drag rules are gone;
interactive controls and overlays portal beside `#root` where one rule subtracts
them.

Recollection becomes one shell watcher (`window-drag/recall.ts`): Electron rebuilds
the window's drag rects only when a computed app-region value changes
(electron#32341), so the watcher measures every marked row each frame while the
surface moves, sets `data-window-drag-recall` for the frames whose geometry changed,
and clears it on the frame that finds the geometry settled. The right panel's
hand-written pulse is deleted with it.

Coverage is a contract with executable parts. `window-drag/regions.ts` publishes the
composition rule and the interactive selector that both the sheet and its spec
compare against; the ui-theme gate asserts the package tree declares drag in exactly
two places and pairs every row's mark with its sheet, selector, and authored height;
and the browser lane boots the shipped composition in Chromium with the darwin
marker to assert per-row geometry, a content body under a marked head row, a
covering overlay, and the watcher's pulse. The plugin manager's detail views mark
the head row they share rather than the pane they render in, so their text and form
labels stay content.

Both real machines agree: the macOS matrix ran on a real `hiddenInset` window with
HID-level pointer input and window-frame readback, and the Windows matrix on a
Windows 11 ARM64 VM — chrome rows drag, content and the covering overlay do not,
and the controls keep their clicks.

Refs #4619
2026-09-20 19:01:15 +08:00
mektpoy 65ba30ab4f refactor(client): name the standard focus-ring width
Every ring that used 2px now reads --dsw-focus-ring-width. The dense tables and
toolbars keep their 1px ring on purpose: at 2px they visibly outweigh the rows
they sit between, so the standard value and the dense exception stay distinct
rather than converging on a number nobody measured.
2026-09-20 18:47:45 +08:00
mektpoy 5a7b2e6f33 fix(client): ring the workspace header controls inside their clipping boxes
The action cluster animates its width with overflow hidden, and the search pill
clips to its rounded shape, so an outer ring on the add, search and clear
controls was cut to a sliver. This package declared no focus style at all — every
control fell back to the browser default inside those boxes.

Ring the three controls inside the element, the direction issue #4655 allows.
2026-09-20 18:44:58 +08:00
mektpoy ae59505baf Merge remote-tracking branch 'origin/master' into tmp4500-sync 2026-09-20 18:24:54 +08:00
gengruilin 6613660223 fix(web): keep model picker focus during mouse selection 2026-09-20 17:37:44 +08:00
mektpoy 9a74ba5d08 fix(client): give tooltips and focus rings the modality rule each needs
A tooltip asks what the last input was: after any key the user is working from
the keyboard, so a programmatic focus may raise a bubble. A focus ring asks
something narrower — Chromium reveals an already-focused control as soon as any
key arrives, including a modifier or Escape that never navigated anywhere, which
is the ring users report as unexplained.

Record both answers and publish the ring's narrower one, so tooltips keep their
existing behaviour and rings stay silent for a pointer's focus.
2026-09-20 17:26:14 +08:00
mektpoy db92970146 fix(client): keep focus rings inside the containers that clip them
The breadcrumb trail and the Miller column scroll, and the column's left edge
carries no padding, so an outer ring on their buttons was clipped to a sliver.
The TurnNavigator marker sits at the scroller's right edge, which clipped three
of its four sides. Ring those inside the element instead — the direction issue
#4655 allows — and change no layout value.
2026-09-20 17:08:43 +08:00
mektpoy 9e7350bb8c fix(client): keep a pointer's focus silent until focus navigation
Clicking a control leaves it focused with :focus-visible false, so nothing is
drawn. Chromium then reveals the ring the moment any key arrives — a modifier,
Escape, a typed character — which is the unexplained focus ring users report:
they never navigated there, yet a ring appears under the pointer's last target.

Record the input modality on the document element, publish the keyboard modality
only for focus navigation (Tab, arrow keys), and let the global focus sheet keep
a pointer's focus transparent. Tooltip's pointer modality moves into the same
module so tooltips and rings follow one rule.
2026-09-20 17:05:51 +08:00
mektpoy 40edba6a8d Merge remote-tracking branch 'origin/master' into fix/desktop-dev-runtime-target 2026-09-20 16:13:36 +08:00
mektpoy 08b310b5a8 fix(client): paint every keyboard focus ring with the brand colour
Focus rings named eight different colours across 54 client stylesheets, and a
control that declared no ring fell back to the browser default, whose colour
follows the operating-system accent — so the same build showed orange on one
machine and blue on another.

Every keyboard focus ring now uses --dsw-alias-brand-primary. A global ui-theme
focus.css sheet reaches the controls that declare no ring of their own, and 49
declarations name the same token. Only the colour changed: each declaration
keeps its width, style and offset.
2026-09-20 15:59:12 +08:00
mektpoy 6f1de05d54 Merge remote-tracking branch 'origin/master' into fix/windows-directory-junction 2026-09-20 15:51:00 +08:00
mektpoy 3515c48a37 fix(desktop): resolve the development runtime directory from the build target
The unpackaged shell derived the primary-runtime directory from process.arch, while preparePrimaryRuntime() resolves the target through resolveDesktopBuildTarget(), which fixes Windows to x64. On a Windows ARM64 host the shell looked under targets/win-arm64 while the payload was under targets/win-x64, and the missing office-skills/scripts/check_office.py became a fatal startup dialog.

The launcher now resolves that directory through the same resolver and passes it to the shell as DSH_DESKTOP_PRIMARY_RUNTIME_DIR.
2026-09-20 15:37:38 +08:00
mektpoy 656066e0a1 Merge remote-tracking branch 'origin/master' into fix/windows-directory-junction
# Conflicts:
#	packages/api/workspace-files/README.i18n.yaml
#	packages/api/workspace-files/README.md
#	packages/api/workspace-files/README.zh.md
2026-09-19 19:28:00 +08:00
mektpoy 931505a9cc fix(workspace-files): list directory links through their resolved target
Windows directory junctions are reparse points that lstat reports as symlinks, so list refused My Music, My Pictures and My Videos with workspace-file/not-directory while its own listing reported them as directories. list now follows a final link, requires the resolved target to be a directory inside the workspace root, and keeps read's no-follow gate.
2026-09-18 20:45:00 +08:00
4061 changed files with 170271 additions and 37423 deletions

No files matched your search

+45 -5
View File
@@ -1,6 +1,46 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/README.md
README.md: 6872de0a1390fa5a1707b9f464c9e0edeb2da4be
README.zh.md: ced81f77fa904ad0b5cb5219383ef651d87392b8
/agent-notes:
en: a10991a192c7b55d
zh: c2e5b938ece4f366
/agent-notes/layout-and-naming:
en: 6b38cb0eb38c2baf
zh: 535234fb23fc8921
/agent-notes/classification:
en: 055a5e49f9af3dc2
zh: 9f7c78409cccfded
/agent-notes/archiving-and-deletion:
en: 6c393c7058c787d7
zh: 70ce9ca3bd9c2133
/agent-notes/when-to-write-one:
en: 2beb1b94d8fb633c
zh: 889b5542bb771205
/agent-notes/the-file-format:
en: 601f85df49f80fc7
zh: acbd0955d6543b13
/agent-notes/the-file-format/the-header-block:
en: 16fdaab0c74a5bb5
zh: 2553f145a1eb878f
/agent-notes/the-file-format/the-body-skeleton:
en: 740b7e964b9aec37
zh: 8551ddef1ffa776a
/agent-notes/the-file-format/the-body-skeleton/proposed:
en: acc0c035c5ca6fd7
zh: 8a65816dfac9e580
/agent-notes/the-file-format/the-body-skeleton/implemented:
en: f3523d7e40cc4e2f
zh: 574fa8959f8829a1
/agent-notes/the-file-format/the-body-skeleton/rejected:
en: f0ff5d05191f2315
zh: 3f9df0dd01a5cbed
/agent-notes/the-file-format/alternatives-considered-mandatory:
en: fe1bf385aee54033
zh: 37cb4ea86ec6d99d
/agent-notes/the-file-format/moving-between-lifecycles:
en: d3f18ba194dfb677
zh: 3d202868deda2f31
/agent-notes/the-file-format/chinese-counterparts:
en: d72a33b7c63722b2
zh: f8320c91b1f77ae6
+6 -3
View File
@@ -754,12 +754,12 @@
"bug-fix/2026-09-09-content-sized-diagram-previews.i18n.yaml": "sha256:a4404fe8e35ca5b6371f9cdb58fea6724cf3e7737bb2db8a3a321d534454b17c",
"bug-fix/2026-09-09-content-sized-diagram-previews.md": "sha256:5239e98e5c057d6f7e10c3f10a0f67273778d99b0c4f10b31a1921c3c6474b80",
"bug-fix/2026-09-09-content-sized-diagram-previews.zh.md": "sha256:c1ee3790a9d5c3561e1d93d5e649afa904c7d19b9d77248c85ef16daccd953e2",
"bug-fix/2026-09-16-movable-mandatory-update-window.i18n.yaml": "sha256:e526ce14ae9557e24364e3686778b130090445ef2152d976b7cc93e76eac6401",
"bug-fix/2026-09-16-movable-mandatory-update-window.md": "sha256:67546cea0b3de2b3e32957a508dbde097d91dd919fe067c8dbecb2c65b50c366",
"bug-fix/2026-09-16-movable-mandatory-update-window.zh.md": "sha256:20a0aade6ee71c89e84d70e23c89bb51e8a38c674d103dd43022feabb8d27be3",
"bug-fix/2026-09-11-session-controller-fork-turn-cut.i18n.yaml": "sha256:4442529ced1c8e48d30f7b50c65ff03eb92dce9815beb438cedbf29f234bce47",
"bug-fix/2026-09-11-session-controller-fork-turn-cut.md": "sha256:a996f24a896c7fc5d81e015db3eae27d8a46c853287572e815623ce35eae1b12",
"bug-fix/2026-09-11-session-controller-fork-turn-cut.zh.md": "sha256:6486f0eacf5067ef9850dc32f1c27b2109a7d4e9e3c498366f5c38742bb53ac5",
"bug-fix/2026-09-16-movable-mandatory-update-window.i18n.yaml": "sha256:e526ce14ae9557e24364e3686778b130090445ef2152d976b7cc93e76eac6401",
"bug-fix/2026-09-16-movable-mandatory-update-window.md": "sha256:67546cea0b3de2b3e32957a508dbde097d91dd919fe067c8dbecb2c65b50c366",
"bug-fix/2026-09-16-movable-mandatory-update-window.zh.md": "sha256:20a0aade6ee71c89e84d70e23c89bb51e8a38c674d103dd43022feabb8d27be3",
"feature/2026-06-14-acp-agent-client-protocol.i18n.yaml": "sha256:006795baa43ae962a8d125cc0f1e9f134bc2ee9fb758b6e7669e3fa0126e1918",
"feature/2026-06-14-acp-agent-client-protocol.md": "sha256:6828c0af74bb3fb96206ca6b21c0e56a000b50e4744aad4bc2c05092f3a5a31b",
"feature/2026-06-14-acp-agent-client-protocol.zh.md": "sha256:ba104e841a1fb84edbd3b6c8119d50445b7785255a7a8d13bb9ac8a2cb4d2e69",
@@ -1561,6 +1561,9 @@
"process/2026-08-08-api-remotes-generated-contract-build.i18n.yaml": "sha256:da10469121712bd6ac4fb1f665ca8bd59597a94b56324d2fe4bdef5235498b6e",
"process/2026-08-08-api-remotes-generated-contract-build.md": "sha256:8c3d7712cce4913cd3c02d1ac2b87def3f7104a7503681afc3c755896ac45d1f",
"process/2026-08-08-api-remotes-generated-contract-build.zh.md": "sha256:e32e1f53c763e769d152c8c41cf8f8977210e82a0d3f7cc7f0421da7e589e9ad",
"process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml": "sha256:5398ef0c48258d3f3a9881e2b34fc4e2086a0b8084b8d7100798dbca6cc39887",
"process/2026-08-08-automatic-translation-pairing-merges.md": "sha256:fb1f3df3246151da920c14fdf195b0cb3bf595a2eed639c84baf70e3f56d36ce",
"process/2026-08-08-automatic-translation-pairing-merges.zh.md": "sha256:9ce7ff6f511ce973637f001b119ce323a5efe0be57cc11d12691aaa36199a8b8",
"process/2026-08-08-lightweight-routine-documentation-translation.i18n.yaml": "sha256:f3b44e6148941de9840ef54be60e60ed6ec32ee04b42a1a472e38838b6aa7b14",
"process/2026-08-08-lightweight-routine-documentation-translation.md": "sha256:264fe2ee2338053a11fe0f0d5ccf12772897fe9fd4f4a7e8a1d6ba226f853e14",
"process/2026-08-08-lightweight-routine-documentation-translation.zh.md": "sha256:3d309e2fc34a6a99bbce4891c32d681e0a23b233791b29a550884f3e753d593c",
@@ -0,0 +1,6 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.md
2026-08-08-automatic-translation-pairing-merges.md: ed693e376d056378b27a8995a6f26fefcdba34b2
2026-08-08-automatic-translation-pairing-merges.zh.md: 827475a92824c22ee6f4c558de81b645c3c2b8dc
@@ -1,6 +1,7 @@
# Agent Note: Automatically compose translation pairing records
Status: implemented
Archived: 2026-09-23
English | [中文](2026-08-08-automatic-translation-pairing-merges.zh.md)
@@ -1,6 +1,7 @@
# Agent Note: 自动组合翻译配对记录
Status: implemented
Archived: 2026-09-23
[English](2026-08-08-automatic-translation-pairing-merges.md) | 中文
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-11-content-block-vocabulary.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.md
2026-06-11-content-block-vocabulary.md: 917dd5225fdc4ab391e9e4629769abbb68095731
2026-06-11-content-block-vocabulary.zh.md: 9d228eb34dafbdebab44b45dc3b290c9327d3b2b
/agent-note-provider-neutral-content-block-vocabulary-owned-by-dsh-llm:
en: 64935f5c8e315004
zh: 6a9cbb4578eaa437
/agent-note-provider-neutral-content-block-vocabulary-owned-by-dsh-llm/problem:
en: 4e81df7bca1c1638
zh: f7483d180a613237
/agent-note-provider-neutral-content-block-vocabulary-owned-by-dsh-llm/decision:
en: 9526dfcf4da1d000
zh: ea2bf79a02b26b39
/agent-note-provider-neutral-content-block-vocabulary-owned-by-dsh-llm/alternatives-considered:
en: 1de2e19e711105e6
zh: a2cd5a64cc4e9e73
/agent-note-provider-neutral-content-block-vocabulary-owned-by-dsh-llm/consequences:
en: 999d10e69e447e44
zh: 38370da5b900ac30
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-11-dev-invariants-over-deep-readonly.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-11-dev-invariants-over-deep-readonly.md
2026-06-11-dev-invariants-over-deep-readonly.md: 0784960397f4d198e136e284ef9232b4ed3e2c2c
2026-06-11-dev-invariants-over-deep-readonly.zh.md: 7183813130560bf82426c8719570b668ba86b7e5
/agent-note-source-owned-session-immutability-and-dev-mode-invariants:
en: 052aa271e87074c0
zh: 3ccffc50fc1a28d4
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/problem:
en: 6ea85a4531d5e59f
zh: b4b568eb347f016a
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/decision:
en: 6e701ec64c3bbfae
zh: b8ed0f1cb7a0477a
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/decision/session-owns-immutable-history:
en: ff47e58c377a8dc0
zh: 5edbe4f3642a3fe6
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/decision/derived-requests-remain-detached:
en: 975df574ee6e6df8
zh: 96d765058482835a
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/decision/package-owned-invariant-companions-check-relationships:
en: a88e3a896eedca91
zh: 03e96c7870cba932
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/alternatives-considered:
en: 6119e2aff3b6be5a
zh: 76136ef5249c23eb
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/alternatives-considered/pervasive-deep-readonly-types:
en: ec54af2931616616
zh: 5fd9bc469a6fd3a5
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/alternatives-considered/development-only-freezing:
en: 85591197bb62eabf
zh: ba69b9ccf596a6d7
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/alternatives-considered/clone-only-when-deriving-messages:
en: a9848dec50664b92
zh: 7c558550b054627b
/agent-note-source-owned-session-immutability-and-dev-mode-invariants/consequences:
en: bcccf7d464a070db
zh: eccd442a21e2c99e
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-11-event-sourced-sessions.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.md
2026-06-11-event-sourced-sessions.md: b6d17d2db1d9b489f3d4224683b61e62be485014
2026-06-11-event-sourced-sessions.zh.md: 11e5740dc2636fc002ed7158167b1dfbb39a971d
/agent-note-event-sourced-sessions-with-derived-message-history:
en: da3abc821101e4b3
zh: c206fa4830920592
/agent-note-event-sourced-sessions-with-derived-message-history/problem:
en: 63b684d349a48a15
zh: 7603f64b445db129
/agent-note-event-sourced-sessions-with-derived-message-history/decision:
en: d60f161037a10269
zh: 799a15fae2534ec4
/agent-note-event-sourced-sessions-with-derived-message-history/alternatives-considered:
en: 73541e0833eb9559
zh: ddca382d54e498e5
/agent-note-event-sourced-sessions-with-derived-message-history/consequences:
en: d2ea77a5c8e30949
zh: 19dc61cb0d29315f
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-11-microkernel-event-taxonomy.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.md
2026-06-11-microkernel-event-taxonomy.md: 6cacbc30f29c863de0f8ddfa4df7251a64bc80ca
2026-06-11-microkernel-event-taxonomy.zh.md: 1c7919392b835c491b9dc606d46f638a708d2948
/agent-note-microkernel-extension-via-cordis-event-taxonomy-one-concrete-loop:
en: e5775d7ec6f1cdc3
zh: a364697f860a545a
/agent-note-microkernel-extension-via-cordis-event-taxonomy-one-concrete-loop/problem:
en: 3bc74749db819441
zh: 19b5497ed3a9378b
/agent-note-microkernel-extension-via-cordis-event-taxonomy-one-concrete-loop/decision:
en: 2153b0cb5773cb08
zh: 82d7ad1b250cd52d
/agent-note-microkernel-extension-via-cordis-event-taxonomy-one-concrete-loop/alternatives-considered:
en: e528c5a20e0c55a3
zh: 004d3bf06241cc26
/agent-note-microkernel-extension-via-cordis-event-taxonomy-one-concrete-loop/consequences:
en: 6acb80cdaa7c010f
zh: acca672d8094d985
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-13-capability-seams.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-13-capability-seams.md
2026-06-13-capability-seams.md: 798739b7ef203b10ea657f9e1c178ea7eab094ad
2026-06-13-capability-seams.zh.md: c8f568aa569fe74146f1e7fcc46e00774a39fb84
/agent-note-capability-seams-service-definition-service-provider-consumer-roles:
en: 4c1875882be571bb
zh: 90ef4d8b27587c6b
/agent-note-capability-seams-service-definition-service-provider-consumer-roles/problem:
en: 3215928333de66f7
zh: 2c72fcacccf25741
/agent-note-capability-seams-service-definition-service-provider-consumer-roles/decision:
en: 774c54c0d3d9acad
zh: 7dd4bfaf0ba2181b
/agent-note-capability-seams-service-definition-service-provider-consumer-roles/terminology-seam-names-the-trio-not-the-interface:
en: 8dca727800bea2f4
zh: 4c4e028520967ca0
/agent-note-capability-seams-service-definition-service-provider-consumer-roles/alternatives-considered:
en: cf6e4b1f188d9e4a
zh: bf2485a5f539746c
/agent-note-capability-seams-service-definition-service-provider-consumer-roles/consequences:
en: 941d8b343162edea
zh: 70904b0716de151d
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-13-twin-llm-adapters.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-13-twin-llm-adapters.md
2026-06-13-twin-llm-adapters.md: fe8b0b55e0e027e29eb0920e64a1760d0dc35aee
2026-06-13-twin-llm-adapters.zh.md: 4248b5afeb9f3fd4503914e53203c674e3a80dbf
/agent-note-two-llm-adapters-as-a-design-verification-twin:
en: dcb28a02ba26cb31
zh: 096d0ab60a3ad638
/agent-note-two-llm-adapters-as-a-design-verification-twin/problem:
en: feb8f5213be03a5c
zh: 5ca85048792db7d8
/agent-note-two-llm-adapters-as-a-design-verification-twin/decision:
en: 0dd6ebb29aebc164
zh: 20065ae72f4d131d
/agent-note-two-llm-adapters-as-a-design-verification-twin/alternatives-considered:
en: c523a9b402588189
zh: bced37eb1040360a
/agent-note-two-llm-adapters-as-a-design-verification-twin/consequences:
en: 71cc34560fc2e012
zh: 91ea73e3e009a9a5
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-14-session-persistence.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-14-session-persistence.md
2026-06-14-session-persistence.md: d79975e1fedb6efcd0e4ea83bc799bb158082e41
2026-06-14-session-persistence.zh.md: f70b8005a254cc6a9ea8ada31c32e5552ee0c8b2
/agent-note-session-persistence-as-an-abstract-service-over-the-existing-sessionevent:
en: d7cf18702f4ed830
zh: 7e0cc6db7c90a7bd
/agent-note-session-persistence-as-an-abstract-service-over-the-existing-sessionevent/problem:
en: fa1ffb258aee90f6
zh: c25cead52e72f97d
/agent-note-session-persistence-as-an-abstract-service-over-the-existing-sessionevent/decision:
en: a7076073971de601
zh: 5ea9a87705340d91
/agent-note-session-persistence-as-an-abstract-service-over-the-existing-sessionevent/alternatives-considered:
en: e5c9929ca92cc12e
zh: 3e0668f6a822577c
/agent-note-session-persistence-as-an-abstract-service-over-the-existing-sessionevent/consequences:
en: 4f00ed0b90442440
zh: 994a5b03c862178b
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-18-session-surface.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-18-session-surface.md
2026-06-18-session-surface.md: 26780d54a1ea12283900572c6fd0e8f740de5524
2026-06-18-session-surface.zh.md: 328a9ee9f1bed9c52996cfd307549a7745e16d4b
/agent-note-session-surface-an-ordered-projection-over-the-event-log:
en: 9ea7a8765e7f3259
zh: 17e0d51645f01edd
/agent-note-session-surface-an-ordered-projection-over-the-event-log/problem:
en: 4f7a9d20d71a6ab3
zh: 958abbdfefec4f21
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision:
en: a9944b568ec51fad
zh: 6717d30db31b81d7
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/top-level-surface-metadata-on-sessionevent:
en: 788fc16ecdedc252
zh: 14d05c2a1272de5d
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/surfaceop-two-operations:
en: ff075eec0881094a
zh: 1f7768f28b8996d5
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/surfacemanager-delta-based-not-full-rebuild:
en: 0b10fd9c5166d17b
zh: 02de01f70c03f70e
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/persistence:
en: 9bb1f81b86b24760
zh: fe4948645dd0c66d
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/crash-recovery:
en: ee71f9c0f12b6a0e
zh: 403b1723f808391d
/agent-note-session-surface-an-ordered-projection-over-the-event-log/decision/invariants:
en: 24b1342fb3b5be29
zh: a62692b0250c072a
/agent-note-session-surface-an-ordered-projection-over-the-event-log/alternatives-considered:
en: 193157129e65e487
zh: a0a73b8a9cbd78e6
/agent-note-session-surface-an-ordered-projection-over-the-event-log/consequences:
en: 801b67f8da564a22
zh: 3c0433ed07083050
@@ -1,6 +1,58 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-20-generic-long-running-tool-runtime.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.md
2026-06-20-generic-long-running-tool-runtime.md: 5960eb268656d7e316c763631451db1c6d1c6e49
2026-06-20-generic-long-running-tool-runtime.zh.md: ea63ae82962a735b3a96e1803708172a33f83e9d
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools:
en: 56e269b2a2839796
zh: 8fc971036985ac0d
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/problem:
en: 70e26df62568c337
zh: a9e6f5f8a5482d0a
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/decision:
en: 277869395ad6f792
zh: 93f13a97d52f10a5
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/runtime-contract:
en: eeb7ed8eec13668a
zh: 3f236f63c72fbba7
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/authorization-and-owner-lifecycle:
en: 3819a73ca70ecdfd
zh: c1a4f461a4e45978
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/service-api:
en: a1a884816aac3d7f
zh: b21129e5cd93b9a1
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/model-facing-control-api:
en: dd3f4d85d0ec136f
zh: ca4209cb856271dd
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/producer-opt-in:
en: a39343bf6f655051
zh: d9894d39e7f4d6e1
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/producer-integrations:
en: ae4a6d6e0d83d3bd
zh: 9072890ba9374426
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered:
en: 6119e2aff3b6be5a
zh: e01a6c669a9ec6aa
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/per-capability-control-tools:
en: 9781c302dc72fd8e
zh: a78e1dd8da4d8ca8
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/an-immediate-abstract-task-runtime-backend:
en: 404a5c7c45a71a55
zh: 213621e4a9618a9c
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/consumer-owned-authorization-or-cleanup-events:
en: d99de803718d9ca6
zh: e03a97314851ed0f
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/blocking-output-or-a-separate-wait-tool:
en: e3beca50b6a57ce0
zh: a77663b817d33247
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/runtime-owned-output-sinks:
en: 42eeeba9d84ae681
zh: 1d540f9740675bee
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/alternatives-considered/random-ids-promotion-or-lifecycle-session-events:
en: e706b1b57241d3d2
zh: 1779b7fa05f48283
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/testing:
en: e891db1723828da8
zh: 657a62ed595bd081
/agent-note-the-background-job-runtime-ctx-jobs-and-generic-task-control-tools/consequences:
en: b95ecd6052465ad3
zh: 1527c38d1b4631d6
@@ -1,6 +1,43 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-21-bounded-llm-request-recovery.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.md
2026-06-21-bounded-llm-request-recovery.md: b0a4ebb11b76c4c0068490c9924a88b80a8bc99f
2026-06-21-bounded-llm-request-recovery.zh.md: e8c25f9f6410dc12e34a0272e01e874431624c28
/agent-note-bounded-recovery-for-transient-llm-request-failures:
en: fb8e336ecd4bf571
zh: 23e40e4cb224163f
/agent-note-bounded-recovery-for-transient-llm-request-failures/problem:
en: 83a361538a092dae
zh: e8f33cb95d0d3e09
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision/preserve-failure-facts-without-embedding-policy:
en: 943322e6cdbfa440
zh: 82288531f6194ed2
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision/put-retry-policy-on-the-existing-failed-step-extension-point:
en: ed4d295378d94a26
zh: 1fee5ef4947bac8f
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision/make-one-layer-own-visible-attempts:
en: 57dbdd385f48bb3e
zh: 5e15463fae4be582
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision/bound-stalled-streams-where-they-can-be-stopped:
en: f7369086e87192b9
zh: e2839ed8cc5c23b8
/agent-note-bounded-recovery-for-transient-llm-request-failures/decision/keep-attempts-separate-in-the-existing-log:
en: 8f57db4bfd6e1c22
zh: 67ac62217bb68570
/agent-note-bounded-recovery-for-transient-llm-request-failures/out-of-scope:
en: 985720529b56cda2
zh: 8a649bfa9cd8d93f
/agent-note-bounded-recovery-for-transient-llm-request-failures/alternatives-considered:
en: a6d0306740d470ee
zh: 700bd4b0aa58f3e8
/agent-note-bounded-recovery-for-transient-llm-request-failures/verification:
en: db343f335a9d7cad
zh: 49b8300de55dcfeb
/agent-note-bounded-recovery-for-transient-llm-request-failures/consequences:
en: 08659e8606455ada
zh: 862080f8df5f28ec
/agent-note-bounded-recovery-for-transient-llm-request-failures/related:
en: e85a6ad7387c881b
zh: bb8fb4173ffe613d
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-21-mandatory-app-attribution-headers.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-21-mandatory-app-attribution-headers.md
2026-06-21-mandatory-app-attribution-headers.md: 9e0c029dc03c722512680a563c24e470128ee322
2026-06-21-mandatory-app-attribution-headers.zh.md: 1427daf8f6065ec2dee324075a8381a625d9e960
/agent-note-mandatory-user-agent-attribution-for-provider-requests:
en: 3f804e0236d13aba
zh: ef8b1b7b9c3d8376
/agent-note-mandatory-user-agent-attribution-for-provider-requests/problem:
en: f65797760084b93a
zh: d1fb36ef61a93003
/agent-note-mandatory-user-agent-attribution-for-provider-requests/investigation:
en: 5ea11f54f507ba64
zh: 22a83a0714a2fda3
/agent-note-mandatory-user-agent-attribution-for-provider-requests/decision:
en: b3e29e609e3f0966
zh: e3df0cb13df1cd5d
/agent-note-mandatory-user-agent-attribution-for-provider-requests/verification:
en: 567737dbccdb3a2a
zh: be92a5303247b889
/agent-note-mandatory-user-agent-attribution-for-provider-requests/alternatives-considered:
en: 016678c52ef64e51
zh: a113b57b9e9ddeb5
/agent-note-mandatory-user-agent-attribution-for-provider-requests/consequences:
en: a9010e68445a0008
zh: 1ec6104ab2865919
@@ -1,6 +1,76 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-24-web-capability-seam.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-24-web-capability-seam.md
2026-06-24-web-capability-seam.md: 8c6c088ea5d7345f9955892b2d6054cfae518bbd
2026-06-24-web-capability-seam.zh.md: 4921c4a4647d180dbb00e6493a19d38584f99bdc
/agent-note-web-capability-seam-stable-tools-over-multiple-providers:
en: ca120635fc40431c
zh: 6be7c5ae3c86cdcc
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/problem:
en: c8b932b02a4e1c80
zh: 96c466be1a521f3f
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/decision:
en: b57eb0f268033ff1
zh: 4143382a50181414
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/package-topology:
en: 5ea3ddfae82df181
zh: 2d05d95e51081696
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/ctx-web-contract:
en: b432f80a424c3e49
zh: faa26925fdd98387
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/provider-availability-and-selection:
en: dff78c46432311a1
zh: 58d5db4c3c85b886
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/search-request-and-result-schema:
en: ec3703b7e7c6b23d
zh: 325755e6e90092da
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/fetch-request-and-result-schema:
en: f734fdc57a6546c9
zh: 027c28cbc584a8c2
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/tool-consumer-behavior:
en: 62127883453dd79c
zh: 01503a8177a0ddab
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/errors:
en: 3440f2b34b93f4a1
zh: 57a8f784c7e26eff
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/testing:
en: 7f73699ac4459432
zh: c16be49ac50c34c8
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered:
en: 6119e2aff3b6be5a
zh: 76136ef5249c23eb
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/let-each-provider-register-its-own-model-facing-tool:
en: e0d84a9b1b9c2123
zh: 9e116a7b96751563
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/put-provider-dispatch-directly-in-dsh-tool-web:
en: dc01d014d03b49d2
zh: b956b02f41c62682
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/split-search-and-fetch-into-two-seams-dsh-search-dsh-fetch:
en: 3fb72ba3e554f20a
zh: aff5f0add5773388
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/choose-the-first-registered-provider:
en: 1800706ea0f6b90b
zh: ced985b7657e2d7f
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/treat-firecrawl-exa-tavily-parallel-extraction-as-fetch:
en: fc22e6a8bfaeaa20
zh: 64032ea6ab61b836
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/mirror-claude-code-s-url-prompt-webfetch-shape:
en: 56a080de39e96056
zh: ae4d070aa7657503
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/validate-dns-and-then-call-an-ordinary-fetch:
en: aa6c1e7e6374a875
zh: 045c8af6cd44c3e1
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/block-private-looking-hostname-strings-without-pinning-resolved-addresses:
en: 3d906f3056733479
zh: d652723eb5372007
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/alternatives-considered/require-per-call-approval-before-public-fetches:
en: f8d1fc8e9c9659cf
zh: da5792520e35cba0
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/consequences:
en: 12fd20ba54818215
zh: c1ca000b13666701
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/deferred-work:
en: 48b7b8e7310cd56b
zh: d406cd6a8a649e58
/agent-note-web-capability-seam-stable-tools-over-multiple-providers/open-questions:
en: 63848c6ef9a6ab44
zh: 041b340802091e60
@@ -1,6 +1,43 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-26-file-context-as-event-gate.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-26-file-context-as-event-gate.md
2026-06-26-file-context-as-event-gate.md: 2943f11190533f84f3aebea0a25a88372d1204f1
2026-06-26-file-context-as-event-gate.zh.md: 053f4269b13c8583def01c144badd17b10a5a41a
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface:
en: 950d6bb4d83b39d8
zh: b40458972583b12b
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/problem:
en: 765a679e88ecda60
zh: fccabc8ee516ea00
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/decision:
en: eb8355d4b7a6c66b
zh: 712c6f932f26a0d3
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/the-policy-is-enforced-by-provider-cas-not-by-dsh-fs-observation-policy-stat:
en: 2edc42b8210c995b
zh: 48f4354c9ec625ee
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/provider-contract-change-the-version-guard-is-optional:
en: a282600f92568e07
zh: 3e6b2bec22c170c6
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/event-vocabulary-owned-by-dsh-fs:
en: f57494c21daf90ea
zh: 1a1f8623dc0cbef3
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/tool-contract-dsh-tool-fs:
en: c7f4457a83739520
zh: f2d55d018c7dab4f
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/policy-plugin-contract-dsh-fs-observation-policy:
en: a239deb5dde631df
zh: 68cc6c954b247596
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/bare-provider-behavior-no-dsh-fs-observation-policy:
en: 5aed537454b78157
zh: 9e8e7108be6a9537
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/supersedes:
en: 5cc21706fd0f00ad
zh: 2b51da75a95f1777
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/verification:
en: 1e3de2836160b4c2
zh: a8af173d161f0949
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/alternatives-considered:
en: 768c09662714cf25
zh: cb641e8a77a2e32c
/agent-note-make-dsh-fs-observation-policy-an-event-gate-plugin-not-a-method-interface/consequences:
en: a1c00220fa5c6ce1
zh: 4691374274aa8df9
@@ -1,6 +1,16 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-06-30-event-domain-semantics.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.md
2026-06-30-event-domain-semantics.md: 7e0aee220a62777ebe1d8f6a5018aba0f5fa20ee
2026-06-30-event-domain-semantics.zh.md: 14568c7a4660c42cecc47f094373d299380fa563
/agent-note-event-domain-semantics-session-is-the-fact-log-agent-is-the-live-event-channel:
en: e7cdaa7a6029c259
zh: ed13f8158ee0eaeb
/agent-note-event-domain-semantics-session-is-the-fact-log-agent-is-the-live-event-channel/problem:
en: 1222c2b55882b1e5
zh: f81f481f5eb9a684
/agent-note-event-domain-semantics-session-is-the-fact-log-agent-is-the-live-event-channel/decision:
en: ccc0fed9b7388112
zh: 3cc527b11affd941
/agent-note-event-domain-semantics-session-is-the-fact-log-agent-is-the-live-event-channel/consequences:
en: e0c5aa60322e67a1
zh: 7495550f0c863eda
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-02-tool-render-intent-union.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-02-tool-render-intent-union.md
2026-07-02-tool-render-intent-union.md: 52626d3d9200146df95aee7836d37bbaf7e6a9ec
2026-07-02-tool-render-intent-union.zh.md: bc91b89c53c3c43b6c483dc0d4876a00f5a936b7
/agent-note-tagged-render-intent-union-for-tool-call-presentation:
en: 599dd6f91059580e
zh: b6a46767bb4198e6
/agent-note-tagged-render-intent-union-for-tool-call-presentation/problem:
en: 3a4b92dca651b979
zh: 6b10ce7ba3681180
/agent-note-tagged-render-intent-union-for-tool-call-presentation/decision:
en: aff6d789bde63f17
zh: 73782526b46a3ee5
/agent-note-tagged-render-intent-union-for-tool-call-presentation/decision/why-a-tagged-union-beats-the-field-bag:
en: ed7b15039050e65e
zh: a719562b5fcdbd4e
/agent-note-tagged-render-intent-union-for-tool-call-presentation/decision/producer-mapping:
en: c87f22a29caef002
zh: 7bfd28c1df80b8a1
/agent-note-tagged-render-intent-union-for-tool-call-presentation/decision/terminal-fallback-ownership:
en: 0bb2f60726afc4d9
zh: 60040141447b4a2e
/agent-note-tagged-render-intent-union-for-tool-call-presentation/decision/purity-preserved:
en: 1ba6a480967c524d
zh: 90535e843f346bcf
/agent-note-tagged-render-intent-union-for-tool-call-presentation/alternatives-considered:
en: 2cd4801f3162227b
zh: 76afaa23bc2b9eb0
/agent-note-tagged-render-intent-union-for-tool-call-presentation/consequences:
en: 81d8366d826285c2
zh: b437b862794c146e
/agent-note-tagged-render-intent-union-for-tool-call-presentation/non-goals:
en: e9d60967a9b3f9bd
zh: 6dfa9ac30d847879
/agent-note-tagged-render-intent-union-for-tool-call-presentation/related:
en: fe27f777b3728fa4
zh: 4b648dbf731ace00
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-05-prompt-variables-and-tool-guidance-ownership.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-05-prompt-variables-and-tool-guidance-ownership.md
2026-07-05-prompt-variables-and-tool-guidance-ownership.md: 8f5542cb09930e62fd1e26960166fbdd6d3f6745
2026-07-05-prompt-variables-and-tool-guidance-ownership.zh.md: 348ae36cf6549d412adab1d3cdb5cc03f0badd01
/agent-note-prompt-variables-and-tool-guidance-ownership:
en: 6f8b4a9d26ab3e50
zh: 9741e5718e647f0a
/agent-note-prompt-variables-and-tool-guidance-ownership/problem:
en: 8ccef8fbd9260dfe
zh: 106b2bafe969c676
/agent-note-prompt-variables-and-tool-guidance-ownership/decision:
en: c551d888282d9c73
zh: 889b5ca3cdf25aff
/agent-note-prompt-variables-and-tool-guidance-ownership/decision/assemble-context:
en: 46e67248692e333a
zh: 51c5f2c6152c94d7
/agent-note-prompt-variables-and-tool-guidance-ownership/decision/prompt-variables:
en: 04b623ed2879fdf1
zh: c111be62834fda93
/agent-note-prompt-variables-and-tool-guidance-ownership/decision/persona-as-the-order-0-section:
en: c2d32c0ac5d28759
zh: 59cd252ba6da6e59
/agent-note-prompt-variables-and-tool-guidance-ownership/decision/tool-guidance-ownership:
en: 308c0d2ef4e41f56
zh: d38f84a517da20df
/agent-note-prompt-variables-and-tool-guidance-ownership/decision/the-subagent-conversation-history-descriptor:
en: 1cb9644f22918749
zh: fb9fdee133159ab2
/agent-note-prompt-variables-and-tool-guidance-ownership/alternatives-considered:
en: 9a114359d2e8988b
zh: ce39453408b2af7f
/agent-note-prompt-variables-and-tool-guidance-ownership/out-of-scope:
en: bbfecc70d0b457fe
zh: 7f207a37a86484f4
/agent-note-prompt-variables-and-tool-guidance-ownership/shipped-invariants:
en: 31ba63101fca5790
zh: af4ceefab2033142
/agent-note-prompt-variables-and-tool-guidance-ownership/consequences:
en: 993f17bf35f6a2e0
zh: acb429176f0eebcc
@@ -1,6 +1,28 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-05-reconstructable-requests.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.md
2026-07-05-reconstructable-requests.md: f47d0938b91edf6c9b544223ac44925f02dd8c1f
2026-07-05-reconstructable-requests.zh.md: d2499a6264a3e6bebf31944d8eb056265e082c68
/agent-note-every-llm-request-is-reconstructable-from-the-session-log:
en: 115dd45f40b0d7d8
zh: 536b5a0399e7d06a
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/problem:
en: f8f31da854a5fe2e
zh: ef88856c2c7bdfb8
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/decision/the-principle:
en: 6da15cf986d59a91
zh: 40282908b54295f9
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/decision/the-mechanism:
en: 7d86e5058dbab2fb
zh: 9a97481325c8eded
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/decision/the-minicode-shape-adopted-with-the-event-log-as-the-source:
en: e5f2ffaa3d7de0cc
zh: 5ba6b36787a0e189
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/alternatives-considered:
en: 96f19ecf38fae991
zh: 9692252135ef3476
/agent-note-every-llm-request-is-reconstructable-from-the-session-log/consequences:
en: 0d2e97bc421e67cc
zh: 0a000a69b8cc4b4e
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-05-windows-jsonl-durable-publish.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-05-windows-jsonl-durable-publish.md
2026-07-05-windows-jsonl-durable-publish.md: 546cde6086f3c84e22b4d4de144a48bb3425cd4e
2026-07-05-windows-jsonl-durable-publish.zh.md: b99032e9d7e72e2028f39c5af91659278fd81343
/agent-note-windows-native-durable-jsonl-publication:
en: db7fe80708911f2f
zh: 42c6639defea2bde
/agent-note-windows-native-durable-jsonl-publication/problem:
en: dcc3c6238131d302
zh: 4d4e8513a4069af3
/agent-note-windows-native-durable-jsonl-publication/decision:
en: 385565b209f1e739
zh: 0eab0997c49a3c33
/agent-note-windows-native-durable-jsonl-publication/alternatives-considered:
en: 83d5bf5781f89e29
zh: 068835993789e09d
/agent-note-windows-native-durable-jsonl-publication/consequences:
en: 4be0ad03a334c257
zh: 95d473ed5b94e270
@@ -1,6 +1,28 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-06-timeout-deadline-library.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-06-timeout-deadline-library.md
2026-07-06-timeout-deadline-library.md: 6f726938731f18386105ff1180c79fef981c95bf
2026-07-06-timeout-deadline-library.zh.md: 48bd7b4b91efd0045c03e3e1e1e9e37656b4dcf6
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability:
en: 4a9921fef5e65cc8
zh: 672cd27d68310cb1
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/problem:
en: 110ff68b35bd43cb
zh: f1cea15fb29a9ae9
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/decision:
en: 18645d82d9e40107
zh: 73e510f1ed1106e6
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/decision/the-library-api:
en: c62681afef60a0db
zh: 69827b4b3165b3da
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/decision/the-division-of-labor:
en: 263c8e17bbc87ba0
zh: d75a74f47713e79f
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/decision/how-each-capability-consumes-it:
en: 333eab4967d753ec
zh: dd7537bb82cc717f
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/consequences:
en: 832f4dbd93a47f94
zh: 65ada43f9f23a39b
/agent-note-a-shared-timeout-deadline-primitive-with-hard-kill-left-to-each-capability/alternatives-considered:
en: 7b3445622becbd36
zh: bb358acf2ff28e26
@@ -1,6 +1,28 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-07-tool-call-timeout-policy.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.md
2026-07-07-tool-call-timeout-policy.md: 60d82c1d591f0a32350b1a21ed74e148c4c93576
2026-07-07-tool-call-timeout-policy.zh.md: 49ca7f397d15c1a351cba4837d4d531e54120ea6
/agent-note-tool-call-timeout-policy-as-a-plugin:
en: 46fa7d1eac4fe061
zh: 7a62f8f7b1c66722
/agent-note-tool-call-timeout-policy-as-a-plugin/problem:
en: b5fffa80b58fb184
zh: aadf28f95924b1ad
/agent-note-tool-call-timeout-policy-as-a-plugin/decision:
en: 04889f664ab7657d
zh: 2af5913f5e9c1927
/agent-note-tool-call-timeout-policy-as-a-plugin/decision/the-tools-execute-around-dispatch-extension-point:
en: 8c3b46fa8a48a863
zh: 662eb09bb7542be8
/agent-note-tool-call-timeout-policy-as-a-plugin/decision/the-timeout-policy-plugin:
en: 96f5932514a33e41
zh: 5951d9451ccef1bf
/agent-note-tool-call-timeout-policy-as-a-plugin/decision/existing-tool-adaptation:
en: 43add9b1f723ce89
zh: f3ee56f97faa2e60
/agent-note-tool-call-timeout-policy-as-a-plugin/alternatives-considered:
en: dc6da8743b4266fb
zh: 5c28667d952b230a
/agent-note-tool-call-timeout-policy-as-a-plugin/consequences:
en: f7429a5c1fe6b6a1
zh: 748401be79f89b05
@@ -1,6 +1,46 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-08-agent-scope-contexts.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-08-agent-scope-contexts.md
2026-07-08-agent-scope-contexts.md: 45e635b7bc3138d4e90a25a06ff23b3b57a9415e
2026-07-08-agent-scope-contexts.zh.md: aac860734e744843c3b9e7d55e5bc7a150763090
/agent-note-the-agent-is-a-registration-scope:
en: f767894b8308f1a0
zh: 4ff0aead6ee4e27b
/agent-note-the-agent-is-a-registration-scope/problem:
en: 87634b46a5642328
zh: 2adce8b041626437
/agent-note-the-agent-is-a-registration-scope/decision:
en: ac58e62f780b0879
zh: 6b077226de04a8fa
/agent-note-the-agent-is-a-registration-scope/decision/registration-origin-chooses-visibility-and-cleanup:
en: 1ec8e54543272e1b
zh: b5b1695a805574a2
/agent-note-the-agent-is-a-registration-scope/decision/the-operation-chooses-the-view:
en: 2e236d399efdc0b2
zh: 00a7ba20f90862c6
/agent-note-the-agent-is-a-registration-scope/decision/scoped-events-keep-routing-separate-from-event-data:
en: df5f5e4c1de44474
zh: d851c02959d02380
/agent-note-the-agent-is-a-registration-scope/decision/creation-publishes-last-and-disposal-revokes-last:
en: f46920b4945e0e6d
zh: 870a157205883144
/agent-note-the-agent-is-a-registration-scope/security-and-authority-are-non-goals:
en: 5ffc5a8f65ce7dfe
zh: 3362f236356a8033
/agent-note-the-agent-is-a-registration-scope/alternatives-considered:
en: bf43310538280f62
zh: e4940ff47c5d47b5
/agent-note-the-agent-is-a-registration-scope/alternatives-considered/pass-an-agent-option-to-every-registration:
en: 37e7487b1f1eb87a
zh: eeddbaf21eee7ebc
/agent-note-the-agent-is-a-registration-scope/alternatives-considered/filter-events-while-keeping-registries-global:
en: 7eb2628d51ea9ed0
zh: e58f05faf0e95712
/agent-note-the-agent-is-a-registration-scope/alternatives-considered/create-one-service-graph-per-agent:
en: 2fd1c41c3d1bc6ca
zh: cffad44a2c69330e
/agent-note-the-agent-is-a-registration-scope/alternatives-considered/inherit-parent-registration-scopes:
en: 01f989446aab1cf1
zh: 8f5c9018b7b84c94
/agent-note-the-agent-is-a-registration-scope/consequences:
en: 65c8f47d1607b276
zh: 950b86b4682f7a0e
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-08-tool-output-spill-files.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-08-tool-output-spill-files.md
2026-07-08-tool-output-spill-files.md: fa6697aad63c97b0ef580fe1ca46e50541e3d682
2026-07-08-tool-output-spill-files.zh.md: a995eafc7878b342a2164c5116da1f43ada791a5
/agent-note-tool-output-spill-policy:
en: 06b99197145a4080
zh: 698a61dcd2385985
/agent-note-tool-output-spill-policy/problem:
en: 858cbb874e213697
zh: 1693b618886ac42d
/agent-note-tool-output-spill-policy/decision:
en: 89536b0d2d7b4c92
zh: 341240f445885549
/agent-note-tool-output-spill-policy/decision/spill-seam:
en: 1e92bc9a0548def9
zh: c99cf6878981ba71
/agent-note-tool-output-spill-policy/decision/spill-policy:
en: 3c49c0246188c513
zh: 4b6749c30726903d
/agent-note-tool-output-spill-policy/showcase-web-fetch:
en: d5c334b50f458925
zh: 7631307b5d9fbc55
/agent-note-tool-output-spill-policy/relationship-to-retention-and-early-spill:
en: 7314ba8b0a03c0d9
zh: 8429f79ff3a7bd1f
/agent-note-tool-output-spill-policy/non-goals:
en: f82b5399ecddd8a1
zh: 9675b58631bb5c90
/agent-note-tool-output-spill-policy/deferred:
en: 094f8c71672ea726
zh: 252dbe825d6e34ca
/agent-note-tool-output-spill-policy/testing:
en: c98759345e1aebfa
zh: d1faeadb99bd748a
/agent-note-tool-output-spill-policy/consequences:
en: e023260e52a246d6
zh: 2e49237e564a83da
/agent-note-tool-output-spill-policy/alternatives-considered:
en: d53fb144141de557
zh: 1b851eb64c421803
@@ -66,36 +66,7 @@ interface SpillRef {
### Spill policy
`dsh-spill-policy` is a `tools/post-execute` result transformer with one configuration knob:
```ts ignore-check
interface Config {
/** Omitted means no automatic spill policy. Present means apply to oversized plain text tool results. */
maxInlineBytes?: number
}
```
When `maxInlineBytes` is omitted the plugin registers nothing (a true no-op). When set, it applies a default policy to final plain-text tool results:
1. Let the tool run normally, delegating via `next()` so a downstream listener settles the result first.
2. Flatten the accepted final `ContentBlock[]` only when it is entirely plain text; a result with any non-text block is left untouched.
3. If its UTF-8 byte size is at or below `maxInlineBytes`, leave it unchanged.
4. If it is larger, call `ctx.spillStore.saveText()` with the full final text.
5. Replace the model-facing result with a retained head/tail preview plus the spill reference.
The preview is an implementation default owned by the policy: a head/tail split of `maxInlineBytes` via the retention library's `TextRetainer`. Future config can expose preview sizing only after a second deployment needs it.
The replacement text is intentionally generic because the policy only knows the final formatted tool result, not the tool's internal resource:
```text
<retained preview>
(Omitted N bytes. Full formatted result stored at: /.../session-.../....txt. Use read with offset/limit, or grep this path to search within it.)
```
If `ctx.spillStore.saveText()` fails (permissions, ENOSPC, backend unavailable), or the call has no session owner, or no backend is loaded, the plugin logs the reason and returns the original result unchanged. Spill failure never turns a successful tool call into an `isError` result or hides the inline result.
The policy skips `read` to avoid a circular `read -> spill file -> read again` loop. Additional opt-out configuration is deferred until a real second tool needs it.
`dsh-spill-policy` retains ordered text/image ends under `maxInlineTokens` after post-execute policy accepts the result. `saveText()` stores the complete result with readable image paths; image bytes remain in attachment storage. The [multimodal retention decision](../../implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.md) owns image projection order, atomic image omission, and route pricing. An omitted budget installs no listeners, recovery failures keep the original result, and model-facing `read` results skip retention to avoid a read/spill loop.
## Showcase: web_fetch
@@ -129,7 +100,7 @@ With `dsh-spill-policy` configured, a large formatted fetch result is automatica
- id: spill-policy
name: '@deepseek-ai/dsh-spill-policy'
config:
maxInlineBytes: 50000
maxInlineTokens: 12500
```
This separation is important. `web-fetch-http` still owns resource caps (`maxResponseBytes`, `maxBodyChars`) to protect network, memory, and decoding work. `spill-policy` owns only the model-facing context cap after the result already exists. If the provider already returned `truncated: true`, the spill file contains the full formatted result the tool returned, not the full original webpage; the policy does not claim otherwise.
@@ -186,11 +157,11 @@ The local-backend value proposition depends on the existing `read`/`grep` tools
**Snapshot gap.** No ACP snapshot scenario covers the transcript-visible `web_fetch` spill notice yet. The ACP snapshot harness replays keyless and cannot hit the live web, and a `web_fetch` spill requires a real over-cap HTTP body; a deterministic scenario would need a seeded loopback fetch target the replay tree does not currently wire (the examples do not load `tool-web` at all). The behavior is covered instead by the `dsh-tool-web` integration test against a loopback server. Closing the gap is follow-up work: wire `tool-web` + a seeded fetch target into the ACP example, then record a `web-fetch-spill` scenario.
The policy can become too large if it starts owning tool-specific semantics. It stays narrow: plain-text final results only. Tool-owned early spill remains future work.
The policy can become too large if it starts owning tool-specific semantics. It handles accepted text/image sequences without interpreting tool-specific text. Tool-owned early spill remains future work.
## Alternatives considered
**Require each tool to opt in with a retention declaration.** Rejected: the goal is a default behavior similar to Claude Code's generic tool-result persistence. A single `maxInlineBytes` deployment knob is enough to prove the shape.
**Require each tool to opt in with a retention declaration.** Rejected: the goal is a default behavior similar to Claude Code's generic tool-result persistence. A single `maxInlineTokens` deployment knob is enough to prove the shape.
**Make `tool-results` a broad tool-result platform.** Rejected: a broad package name invites retention policy, result replacement, preview wording, search, and early spill into one seam. The shared storage part is smaller: save text and return a locator plus retrieval hint.
@@ -66,36 +66,7 @@ interface SpillRef {
### spill 策略
`dsh-spill-policy` 是一个 `tools/post-execute` 结果转换器,只提供一个配置项:
```ts ignore-check
interface Config {
/** Omitted means no automatic spill policy. Present means apply to oversized plain text tool results. */
maxInlineBytes?: number
}
```
省略 `maxInlineBytes` 时,插件不会注册任何内容,是真正的无操作。设置该值后,它会对最终的纯文本工具结果应用默认策略:
1. 让工具正常运行,通过 `next()` 委托,使下游监听器先结算结果。
2. 仅当已接受的最终 `ContentBlock[]` 全部是纯文本时,才将其展平;含任何非文本块的结果保持不变。
3. 如果 UTF-8 字节大小不超过 `maxInlineBytes`,保持不变。
4. 如果超出上限,使用完整的最终文本调用 `ctx.spillStore.saveText()`。
5. 把模型可见结果替换为保留的首尾预览和 spill 引用。
预览属于策略所有的实现默认值:以 `maxInlineBytes` 为上限,使用保留库的 `TextRetainer` 进行首尾分割。只有第二个部署证明有此需求后,未来配置才会公开预览大小。
替换文本刻意保持通用,因为策略只知道最终格式化的工具结果,不了解工具的内部资源:
```text
<retained preview>
(Omitted N bytes. Full formatted result stored at: /.../session-.../....txt. Use read with offset/limit, or grep this path to search within it.)
```
如果 `ctx.spillStore.saveText()` 失败(权限、ENOSPC、后端不可用),或调用没有会话所有者,或未加载后端,插件会记录原因并原样返回结果。spill 失败绝不会把成功的工具调用变为 `isError` 结果,也不会隐藏内联结果。
策略跳过 `read`,以避免形成 `read -> spill file -> read again` 循环。额外的选择退出配置要等确实出现第二个有此需求的工具后再引入。
`dsh-spill-policy` 在执行后策略接受结果之后,按 `maxInlineTokens` 对文字和图片共同计量并保留首尾。完整结果仍通过 `saveText()` 保存,图片本体留在附件存储,结果文件记录可读取路径。图片投影顺序、整图省略和模型计量由[图文结果保留决策](../../implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.zh.md)负责。省略配置时不安装监听器,存储失败时保留原结果;`read` 的模型可见结果跳过自动省略,避免重复读取产生循环。
## 示例:web_fetch
@@ -129,7 +100,7 @@ ctx.tools.register(defineTool({
- id: spill-policy
name: '@deepseek-ai/dsh-spill-policy'
config:
maxInlineBytes: 50000
maxInlineTokens: 12500
```
这项分离很重要。`web-fetch-http` 仍负责资源上限(`maxResponseBytes`、`maxBodyChars`),用来保护网络、内存和解码工作。`spill-policy` 只负责结果已经存在后针对模型上下文的上限。如果提供方已经返回 `truncated: true`,spill 文件包含的是工具返回的完整格式化结果,而不是原始网页全文;策略不会做出其他承诺。
@@ -186,11 +157,11 @@ ctx.tools.register(defineTool({
**快照缺口。** 目前没有 ACP 快照场景覆盖 transcript(文本记录)可见的 `web_fetch` spill 提示。ACP 快照 harness 在无密钥环境中回放,无法访问实时 web,而 `web_fetch` spill 需要一个真实的超上限 HTTP 正文;确定性场景需要一个预置的 loopback fetch 目标,但当前回放树尚未接线(示例根本没有加载 `tool-web`)。该行为改由 `dsh-tool-web` 针对 loopback server 的集成测试覆盖。弥补该缺口属于后续工作:把 `tool-web` 和预置 fetch 目标接入 ACP 示例,然后录制 `web-fetch-spill` 场景。
如果策略开始负责工具专用语义,就会膨胀得过大。它的范围保持狭窄:只处理纯文本最终结果。由工具负责的提前 spill 仍留作未来工作。
如果策略开始负责工具专用语义,就会膨胀得过大。它处理已接受的图文序列,不解释工具专用的文字语义。由工具负责的提前 spill 仍留作未来工作。
## 考虑过的替代方案
**要求每个工具通过保留声明选择加入。**不予采纳,因为目标是实现类似 Claude Code 通用工具结果持久化的默认行为。只需一个 `maxInlineBytes` 部署配置项即可验证该形态。
**要求每个工具通过保留声明选择加入。**不予采纳,因为目标是实现类似 Claude Code 通用工具结果持久化的默认行为。只需一个 `maxInlineTokens` 部署配置项即可验证该形态。
**把 `tool-results` 建成宽泛的工具结果平台。** 不予采纳:宽泛的包名会诱使系统把保留策略、结果替换、预览措辞、搜索和提前 spill 合并进一个 seam。可共享的存储部分更小:保存文本,并返回定位符与检索提示。
@@ -1,6 +1,31 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-10-after-call-compaction-pressure-and-overflow-recovery.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.md
2026-07-10-after-call-compaction-pressure-and-overflow-recovery.md: 89c8917484c11057ff2e6b55e2311e83f724f7ed
2026-07-10-after-call-compaction-pressure-and-overflow-recovery.zh.md: 48f954f2c4720894548ecab387965d3a3d1799b0
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery:
en: 8bfe0d8b79d9840f
zh: 6921dc88e5ef9c83
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/problem:
en: 036da3e545debe29
zh: 82e031a3120ca36c
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/decision/successful-pressure-runs-at-the-next-pre-step-boundary:
en: 5f5a656b38730ec6
zh: aece66b85cc610cf
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/decision/request-recovery-is-limited-to-the-final-model-boundary:
en: fb7da851bf6a020e
zh: b40dc932d6c3101c
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/decision/compactionengine-exposes-intent-not-token-accounting:
en: be9505b3d73c7f6b
zh: ed753f1afec2787a
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/testing:
en: b0e1704bd3724301
zh: 2279353ff615f183
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/alternatives-considered:
en: 3cb5363732ef5758
zh: 07746411cc80878f
/agent-note-after-call-compaction-pressure-and-context-overflow-recovery/consequences:
en: dfe515fb04127eb5
zh: 1924b2e1e9997910
@@ -1,6 +1,43 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-10-single-file-executable-sdk-runtime-distribution.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.md
2026-07-10-single-file-executable-sdk-runtime-distribution.md: 7260d11c84f8fb07cf6c4691357f92e0d00fd8f3
2026-07-10-single-file-executable-sdk-runtime-distribution.zh.md: 653fb3d9b782d9010f693e4af8ad94475abb9d94
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe:
en: 00b5d91d3e44a9f8
zh: eabd3c4b338249b3
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/problem:
en: 112178b76e5209f6
zh: 68726254ae530566
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/packaging-route-yao-pkg-pkg-s-sea-mode:
en: f1c2b60e9474111d
zh: 5de398b5e8554429
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/the-serving-interface-is-a-plugin-inside-the-dsh-application:
en: 5fdde26e9e8c6108
zh: 629559d733c1f0c5
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/plugin-resolution-the-vfs-holds-a-real-package-tree-the-closure-manifest-is-the-deploy-root:
en: c35ea4b858448b49
zh: 1f8ff0a9f82ca881
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/build-pipeline-and-artifacts:
en: 53ba44431d2ce411
zh: 4159475549273422
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/python-sdk-distribution-two-carriers-exe-for-production-node-for-development:
en: 9bd60549d4a52ec0
zh: e2343b7210212ee0
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/decision/naming-lineage:
en: 31a5aecb8bf828bb
zh: 2dffb6fd2e0f8194
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/packaged-workflow-and-code-execution:
en: 0426f598f3f44e64
zh: fc66728e17f3bcfb
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/testing:
en: b3c9820f4dc7c6c8
zh: 3b5768ef1770bfcb
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/alternatives-considered:
en: 50d965ca81a401ba
zh: 0c6296245b97b9ac
/agent-note-single-file-executable-sdk-runtime-distribution-single-exe/consequences:
en: 601a72b3a7a91fe4
zh: 5baaa866e789923e
@@ -1,6 +1,157 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-12-agent-scope-runtime-design.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.md
2026-07-12-agent-scope-runtime-design.md: b9b2c837f560c2b8b98da37e3656caf298b705e2
2026-07-12-agent-scope-runtime-design.zh.md: 4b94d1b8449bd619c47f6bee0712ec8ed0b39593
/agent-note-agent-scope-runtime-design-and-correctness:
en: b63ecbd21fc1f427
zh: 4990d96d76888802
/agent-note-agent-scope-runtime-design-and-correctness/problem:
en: ae7b688bd991a6df
zh: 73b6b28755852054
/agent-note-agent-scope-runtime-design-and-correctness/decision:
en: cfd6abca8404c7d4
zh: a9372aae85e49f55
/agent-note-agent-scope-runtime-design-and-correctness/cordis-model-context-fiber-effect-receiver-and-waterfall:
en: 4d4bdb629a57139d
zh: 7b4d21d9eb42d94b
/agent-note-agent-scope-runtime-design-and-correctness/cordis-model-context-fiber-effect-receiver-and-waterfall/a-context-is-an-ownership-path-through-one-service-graph:
en: 201a1882518455e2
zh: 830e25eab7ed37db
/agent-note-agent-scope-runtime-design-and-correctness/cordis-model-context-fiber-effect-receiver-and-waterfall/fibers-and-effects-make-cleanup-structural:
en: d0ef6e1b5d453350
zh: 4a774ac9daf20849
/agent-note-agent-scope-runtime-design-and-correctness/cordis-model-context-fiber-effect-receiver-and-waterfall/receivers-route-listeners-waterfalls-compose-decisions:
en: 594e198a8b566049
zh: 50378e7a2a533dff
/agent-note-agent-scope-runtime-design-and-correctness/scope-routing-one-opaque-key-selects-one-layer:
en: fa59d22549e9e44a
zh: 80904729042e87b3
/agent-note-agent-scope-runtime-design-and-correctness/scope-routing-one-opaque-key-selects-one-layer/scope-identity-uses-object-identity:
en: 3a05a7bfb2197f58
zh: fbb599031788b70b
/agent-note-agent-scope-runtime-design-and-correctness/scope-routing-one-opaque-key-selects-one-layer/registry-reads-overlay-one-exact-layer:
en: 28636ae6d55935d7
zh: 33a989f049de2f3e
/agent-note-agent-scope-runtime-design-and-correctness/scope-routing-one-opaque-key-selects-one-layer/fused-dispatch-helpers-prevent-subject-drift:
en: 638e3711206e3c41
zh: 61d370123d30c1ed
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation:
en: ef58215c8554180b
zh: 44571074148d2467
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation/registry-entries-are-the-only-live-identity-records:
en: 092b49671e83df98
zh: 330ea6e45c4deb99
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation/the-transaction-owns-preparation-before-awaiting-it:
en: 3940920908ec6066
zh: 888e36ca43611d30
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation/setup-is-trusted-composition-inside-a-private-world:
en: 40a73b8eede856ee
zh: 7dab8f2548cb92ea
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation/publication-has-one-ordered-commit-path:
en: 227eff7a5adacd0e
zh: b9ee423c2dd4212f
/agent-note-agent-scope-runtime-design-and-correctness/agent-creation-one-transaction-owns-the-complete-operation/teardown-preserves-work-before-revoking-registrations:
en: 1cbe77cff192815d
zh: 7f517936a8aa469e
/agent-note-agent-scope-runtime-design-and-correctness/session-append-materialize-validate-commit-notify:
en: cc37e93081fea4cb
zh: daf2234f84e4c9bf
/agent-note-agent-scope-runtime-design-and-correctness/session-append-materialize-validate-commit-notify/durable-data-is-materialized-once:
en: d0a57b0ac227d84c
zh: e9ae6ced0e65fe49
/agent-note-agent-scope-runtime-design-and-correctness/session-append-materialize-validate-commit-notify/pre-commit-listeners-can-veto-post-commit-observers-cannot:
en: 15255d3d0b62fac0
zh: c1995d5aa3c78f0a
/agent-note-agent-scope-runtime-design-and-correctness/trust-boundaries-copy-only-when-ownership-actually-changes:
en: 22b381902fe903f3
zh: 8a2efe9a8b458bba
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes:
en: 456ac0359d3c02f6
zh: 9099e15d22139751
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/one-resolver-defines-the-tool-view:
en: 120e1c79f0b99b1a
zh: 1c21a5b1d6b08235
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/tool-execution-owns-identity-and-boundary-materialization:
en: 41f1f2ad73d83d73
zh: e6bff63958ede05e
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/the-assembly-waterfall-owns-the-final-model-visible-composition:
en: 5c5880ccea139058
zh: 3e5b7d10cb4c6ff8
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/structured-output-commits-only-authoritative-outcomes:
en: a9a711cf31559765
zh: e9083b000fc89128
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/three-execution-boundaries-are-deliberately-one-way:
en: a109f3fadf338061
zh: 12eb46fe775fa46a
/agent-note-agent-scope-runtime-design-and-correctness/tools-and-prompts-one-view-authoritative-assembly-committed-outcomes/skill-and-approval-services-trust-typed-callers:
en: 9572833d47f779e6
zh: 7ff491d309060030
/agent-note-agent-scope-runtime-design-and-correctness/subagents-publication-is-the-start-promise:
en: b9216021f8f50bcc
zh: fda52f9434cc8191
/agent-note-agent-scope-runtime-design-and-correctness/subagents-publication-is-the-start-promise/the-service-contract-has-one-cancellation-channel:
en: 84a4be83b78c045b
zh: 043e14cf628413cd
/agent-note-agent-scope-runtime-design-and-correctness/subagents-publication-is-the-start-promise/in-process-providers-reuse-the-core-transaction:
en: b5e0b3dcf0dff750
zh: 63905010383781b9
/agent-note-agent-scope-runtime-design-and-correctness/subagents-publication-is-the-start-promise/acp-providers-own-the-process-until-readiness-or-cleanup:
en: aa0c00cee368c7e6
zh: 767539b0f4d56f55
/agent-note-agent-scope-runtime-design-and-correctness/workflows-and-acp-processes-retain-only-independent-async-facts:
en: effbb0acf7f66bed
zh: e0cc9ad6ac0777de
/agent-note-agent-scope-runtime-design-and-correctness/workflows-and-acp-processes-retain-only-independent-async-facts/workflow-children-are-pending-starts-or-published-records:
en: 9f05eed800f3413c
zh: 8230a28a0f94bffa
/agent-note-agent-scope-runtime-design-and-correctness/workflows-and-acp-processes-retain-only-independent-async-facts/terminal-result-and-physical-cleanup-remain-separate:
en: 5ad141c6df9f4fc3
zh: 63effa4f14f3c530
/agent-note-agent-scope-runtime-design-and-correctness/workflows-and-acp-processes-retain-only-independent-async-facts/acp-prompt-settlement-does-not-depend-on-update-delivery:
en: d39f73f50f0370bd
zh: 3889c1db46de560e
/agent-note-agent-scope-runtime-design-and-correctness/correctness-enforcement:
en: 840564e766d2f05c
zh: 059243afea7eb9c0
/agent-note-agent-scope-runtime-design-and-correctness/correctness-enforcement/types-make-the-ordinary-path-hard-to-misuse:
en: 9183eb29dddfd97f
zh: e6ce13295e6c3e65
/agent-note-agent-scope-runtime-design-and-correctness/correctness-enforcement/runtime-invariants-cover-cross-service-facts:
en: fabafbebc0ab4f95
zh: 06d94a98ed5aa40c
/agent-note-agent-scope-runtime-design-and-correctness/correctness-enforcement/generated-artifacts-keep-public-contracts-aligned:
en: d0ddc5f38289225d
zh: 781d910228d5e334
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered:
en: 5eef7873a795c8f0
zh: 3e8ba109a6e29ba5
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/use-a-transparent-proxy-as-the-scope-carrier:
en: 199c7345a237e7e9
zh: b262d5ad0c7cb562
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/reserve-agent-and-session-ids-before-setup:
en: 3a8cb6969139dd84
zh: 2913bb68433c9ec7
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/snapshot-every-typed-same-process-argument:
en: 3e1f19f909f8d138
zh: 0727777e34964afe
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/give-readiness-cancellation-and-disposal-separate-controllers:
en: f2c6ecbd139bbdb0
zh: 0ff5b1e192dcb376
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/keep-synchronous-subagent-start-plus-run-started:
en: 7f5669933cb35c9c
zh: c55e35d4c175af36
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/restore-selected-prompt-or-tool-contributions-after-assembly:
en: a2b2e48d9ccda310
zh: 3a4e925fde9d05b0
/agent-note-agent-scope-runtime-design-and-correctness/alternatives-considered/remove-worker-process-lifecycle-guards-with-same-process-hardening:
en: 662e0904d90a3a94
zh: 84c5e49f7cc59b32
/agent-note-agent-scope-runtime-design-and-correctness/consequences:
en: 0d781b2dc4c41ddb
zh: 844652a4aaac37aa
/agent-note-agent-scope-runtime-design-and-correctness/consequences/what-the-design-guarantees:
en: eb2001592d7bd7b1
zh: e534dbb6daa9af32
/agent-note-agent-scope-runtime-design-and-correctness/consequences/costs-and-limits:
en: e9383713d56b9e10
zh: d3ab00aea8ecf4e0
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-14-provider-routed-llm-adapters.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.md
2026-07-14-provider-routed-llm-adapters.md: 1001b10e18837399b41578658ffe62065e294ba8
2026-07-14-provider-routed-llm-adapters.zh.md: c5bff0ef407c8a2c22e8cad7e7d32c58c8b0e2da
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend:
en: e57698907c40f783
zh: 47004d8f68af1d7d
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/problem:
en: 2e51f5fa703b0677
zh: 385937219b88c447
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/decision/provider-is-the-adapter-registration-key:
en: 4921a060c657b790
zh: 2f9632469c6f0b60
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/decision/explicit-pi-ai-provider-profiles:
en: 5461685553dac663
zh: e5c7e0ad7ac84e29
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/decision/recorded-assistant-route-and-replay-state:
en: 8439e90c9f6d7642
zh: daeda3ce5146c9f5
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/decision/propagate-the-target-through-every-request-producer:
en: ba1908bc1517ed23
zh: 1c9353a422cf74e1
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/alternatives-considered:
en: ad0d610ea92aa9b8
zh: fe09d62762e73f01
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/consequences:
en: a0c98bced8a5e6fb
zh: 23caf082a08ba507
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/testing:
en: 5a36121f12701d08
zh: 90f0f8ed44f7234f
/agent-note-provider-routed-llm-adapters-and-a-generic-pi-ai-backend/risks:
en: 11db2a349f9f26c2
zh: 550d6017d8639854
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-15-agent-initiator-scope.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-15-agent-initiator-scope.md
2026-07-15-agent-initiator-scope.md: ab11da116a463cd706418e797eb58f1bc4ab9b1c
2026-07-15-agent-initiator-scope.zh.md: 343acba5f99379b6d2c3af41368e8fbe90b20611
/agent-note-initiating-agent-scope-over-asynclocalstorage:
en: b0a59e3a34c41826
zh: 7131428a14901d14
/agent-note-initiating-agent-scope-over-asynclocalstorage/problem:
en: a26991200892c735
zh: 04a7dfaca64e3f0c
/agent-note-initiating-agent-scope-over-asynclocalstorage/decision:
en: 43a4f0c503b30d95
zh: a6a780584f94ed73
/agent-note-initiating-agent-scope-over-asynclocalstorage/verification:
en: 312f5c4b843d515e
zh: a8993e3b84844fab
/agent-note-initiating-agent-scope-over-asynclocalstorage/alternatives-considered:
en: fd2ae1369fb3fbc6
zh: e2a3d7f9331fc8ac
/agent-note-initiating-agent-scope-over-asynclocalstorage/consequences:
en: 625c6afc49489e29
zh: ed7e5c5e56c781fb
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-16-explicit-turn-cancellation.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.md
2026-07-16-explicit-turn-cancellation.md: d59accf2dc3f894ffab226e5ddc9d2e746f4d93e
2026-07-16-explicit-turn-cancellation.zh.md: 8fb0728eb2bbe8fa01dbefebe7e02aa8c836617a
/agent-note-explicit-turn-cancellation-capability:
en: 729ed6291e9d4d2c
zh: 32ae526ef41199da
/agent-note-explicit-turn-cancellation-capability/problem:
en: 0a7826345be2a509
zh: 430fccb5c4d6a5e2
/agent-note-explicit-turn-cancellation-capability/decision:
en: 2c15edb35f38e7e5
zh: fa5145d26e3bff20
/agent-note-explicit-turn-cancellation-capability/verification:
en: a7ab1d06542be1c0
zh: 1687979b7f2460fa
/agent-note-explicit-turn-cancellation-capability/alternatives-considered:
en: bf69bbf7eb280306
zh: a434a0ecb5008b2b
/agent-note-explicit-turn-cancellation-capability/consequences:
en: 1066aff1aec4ed01
zh: 31d6a60496e2e730
@@ -1,6 +1,34 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-19-cooperative-tool-cancellation.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-cooperative-tool-cancellation.md
2026-07-19-cooperative-tool-cancellation.md: 5ca2b44b24a4af189df27c6f724021a7bf290e2b
2026-07-19-cooperative-tool-cancellation.zh.md: d6d49fb44c5d5629729a8b5b4bad07ea9b2f7ee9
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary:
en: 84c827aa3baa331a
zh: 10cad03e58b10e31
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/problem:
en: e386b22491b468c1
zh: 82015f5145b679cd
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/decision:
en: ca66d3b6af50be10
zh: f054b10d0c965e82
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/decision/mutability-follows-the-pipeline-stage:
en: 0e1399cad4151f87
zh: 960fa0ccbe0f8fea
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/decision/cancellation-codes-record-whether-dispatch-occurred:
en: c787fba8731ac147
zh: 21b5968ae6f8cd59
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/decision/pre-aborted-entry-short-circuits-after-materialization:
en: 53362db6a0c71698
zh: 311de45ca26d3fdc
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/decision/started-work-still-reaches-quiescence:
en: 26e4b71366bebd1b
zh: 10598e12b28c586e
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/verification:
en: fbd101d4576afa92
zh: 35f5d3c2f6cad6a8
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/alternatives-considered:
en: 1f205f1a78d4fd5b
zh: 6c17e35da2909302
/agent-note-cooperative-tool-cancellation-at-the-registry-boundary/consequences:
en: 24a9ad2c4c7c86b5
zh: debdd29d272e07ea
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-19-gui-web-client-architecture.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.md
2026-07-19-gui-web-client-architecture.md: 4d62d7ddbeddd2d5c02e42194b035ee08b5cf041
2026-07-19-gui-web-client-architecture.zh.md: aeb6c89e677d7b65daef03d5d31372f484ae3117
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer:
en: e940be9ef95509ff
zh: c06cea53bb49c718
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/problem:
en: c5a3dda6ccd57c9e
zh: 122307b113bb1c09
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/decision:
en: 29742775aee9fbc3
zh: 54a2df8816e2ea2e
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/the-client-cordis-tree-and-the-loading-chain:
en: 23b0b6c3f29e4f5e
zh: 53bf897b502c645b
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/the-slot-system-how-the-page-composes:
en: 1661f3dd74dc9df6
zh: 3152467c7dd8e6ef
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/services-and-scope-addressing:
en: 9da9311f677c5da6
zh: 9cb16a92cee87055
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/the-data-object-layer-packages-api-session-controller-src-client:
en: 909682e20c0d23a1
zh: ed1defbcf7745e8e
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/the-react-face-packages-client-ui-renderer:
en: 0971d6196b5358fd
zh: 26175d648feccfd9
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/directory-shape:
en: 74c45680c8aab51c
zh: fd431ae5d3656038
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/how-to-develop:
en: cbc6abcd9f291868
zh: 0078f15f2d08a02e
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/consequences:
en: 56a9086da5783306
zh: 8147576101d22aa0
/agent-note-web-client-architecture-the-client-cordis-plugin-tree-the-slot-system-and-the-react-free-object-layer/alternatives-considered:
en: 8bedf2e688b14322
zh: 7cda12f7474832ee
@@ -1,6 +1,28 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-19-package-invariant-runtime-contracts.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-package-invariant-runtime-contracts.md
2026-07-19-package-invariant-runtime-contracts.md: a1b635cc40844f1846c04e203dbb842d1c7328ed
2026-07-19-package-invariant-runtime-contracts.zh.md: d315c440f1c100911386f57d6f82d5f16be631ca
/agent-note-meaningful-package-invariant-contracts:
en: e5db3b3373f72761
zh: 312b83d320d9aaab
/agent-note-meaningful-package-invariant-contracts/problem:
en: 220a4ceb3cd9b9c9
zh: 9eac93e1762b2914
/agent-note-meaningful-package-invariant-contracts/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-meaningful-package-invariant-contracts/decision/published-assertions-must-be-meaningful:
en: 11a1c080592def10
zh: d1189de665f9e327
/agent-note-meaningful-package-invariant-contracts/decision/representative-implemented-checks:
en: 2f7ae4ed588d6de8
zh: ed7ea9ccc6c54e87
/agent-note-meaningful-package-invariant-contracts/decision/repository-gate-and-tests:
en: 37e646754f13dd65
zh: 355ebf3ce1403117
/agent-note-meaningful-package-invariant-contracts/alternatives-considered:
en: 74c6a5a0cfadbf88
zh: e41356bb1a8c1fdf
/agent-note-meaningful-package-invariant-contracts/consequences:
en: 1f8d53063fb5903e
zh: 5edd23739749b065
@@ -1,6 +1,31 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-19-zstandard-jsonl-session-logs.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-19-zstandard-jsonl-session-logs.md
2026-07-19-zstandard-jsonl-session-logs.md: 96b76febee1c8853f70d7e4897894ea26390f524
2026-07-19-zstandard-jsonl-session-logs.zh.md: 4cf184ce107b9de6dbbf3f0e571d4009d50ca636
/agent-note-zstandard-jsonl-session-logs:
en: b46a6b48493de93e
zh: 0e394abf1d11fd43
/agent-note-zstandard-jsonl-session-logs/problem:
en: da8b3d94d10b5bc4
zh: da9c6d98a300b7bb
/agent-note-zstandard-jsonl-session-logs/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-zstandard-jsonl-session-logs/decision/configuration-and-suffix-ownership:
en: 1f29970aecc71980
zh: 94414765645bace0
/agent-note-zstandard-jsonl-session-logs/decision/frame-and-write-path:
en: da213ed32dfa6000
zh: a0f3cd11684dbdc9
/agent-note-zstandard-jsonl-session-logs/decision/read-listing-and-crash-recovery:
en: 63d4fe7d9c2a0a8a
zh: 2c4ef3e6aad73195
/agent-note-zstandard-jsonl-session-logs/decision/consumers-and-verification:
en: 6d9d16d610b80e55
zh: efa083ffaa7301e0
/agent-note-zstandard-jsonl-session-logs/alternatives-considered:
en: c5f447029fb644f7
zh: 5b84162e87bc6c86
/agent-note-zstandard-jsonl-session-logs/consequences:
en: e721552f16340e4c
zh: d5be8c3ffd1c7cc2
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-20-canonical-tool-output-contract.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.md
2026-07-20-canonical-tool-output-contract.md: 4dbcac3da8381e69809b15a653cdb4987af4e0e7
2026-07-20-canonical-tool-output-contract.zh.md: c2f4ebdfc7266495570766c69b3aa264f91172cc
/agent-note-canonical-tool-output-contract:
en: 01677f7875da9579
zh: 41bae59177ba5125
/agent-note-canonical-tool-output-contract/problem:
en: d0bc9840998f0530
zh: 2601671ec694a78d
/agent-note-canonical-tool-output-contract/decision:
en: db088b8225a4bf3d
zh: bfb0caa015b2b7df
/agent-note-canonical-tool-output-contract/alternatives-considered:
en: d82a0ac0461ab120
zh: bedea17fb4fb4f51
/agent-note-canonical-tool-output-contract/consequences:
en: 32724ff8f6b3b03f
zh: bc7512ff05d00157
@@ -1,6 +1,34 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-20-routed-model-context-and-compaction-policy.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.md
2026-07-20-routed-model-context-and-compaction-policy.md: d276354cb21f45eaec1c4e3202c7be1770745efb
2026-07-20-routed-model-context-and-compaction-policy.zh.md: b6e2a0b914f78e19675d80b86d8d962e8ba8c80f
/agent-note-routed-model-context-and-compaction-policy:
en: eca190695d4857f5
zh: f9d6411b8a8612ae
/agent-note-routed-model-context-and-compaction-policy/problem:
en: f7d1f343e487d725
zh: c7f736180e44d586
/agent-note-routed-model-context-and-compaction-policy/decision:
en: a15c7c13f167e5ac
zh: 63bcc2ef60c2f344
/agent-note-routed-model-context-and-compaction-policy/decision/adapters-own-exact-route-capacity:
en: 7bcf0ae2c74a0eb7
zh: bc0e04a25492d5ba
/agent-note-routed-model-context-and-compaction-policy/decision/token-measurement-remains-model-agnostic:
en: 51d1b39d06407320
zh: 85c88f6b5d8508d6
/agent-note-routed-model-context-and-compaction-policy/decision/compact-basic-resolves-a-target-spec:
en: d8827f9fa70aa65f
zh: a9d29e05dcb0cfdb
/agent-note-routed-model-context-and-compaction-policy/decision/target-specific-pressure-failures-preserve-optional-composition:
en: 1bd81ae0a1409e24
zh: 635c2937d5a94df7
/agent-note-routed-model-context-and-compaction-policy/testing:
en: 1ac13596df50571f
zh: 8605a6f0de049dfc
/agent-note-routed-model-context-and-compaction-policy/alternatives-considered:
en: 0ca0a4b1318188ec
zh: de98cd4494a6c0d0
/agent-note-routed-model-context-and-compaction-policy/consequences:
en: d00f83e85ba5e431
zh: 32665480f0cdc4ea
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-20-unified-json-value-schema-dsl.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-20-unified-json-value-schema-dsl.md
2026-07-20-unified-json-value-schema-dsl.md: 5de3523eab15a91ea32dc09e2e239146fadea6f1
2026-07-20-unified-json-value-schema-dsl.zh.md: 0dc38dc289a32269c0f9e545ae53a8098ba02189
/agent-note-unified-json-value-schema-dsl:
en: 8ba380205c472f4e
zh: de92e20dc90e8037
/agent-note-unified-json-value-schema-dsl/problem:
en: 5c7e79e37c007896
zh: 759f5803141b0960
/agent-note-unified-json-value-schema-dsl/decision:
en: 8f08bbafc8939a46
zh: 2ed8255c1e2b812b
/agent-note-unified-json-value-schema-dsl/alternatives-considered:
en: 1d32d6195d6fca08
zh: ea3a30126dca95f7
/agent-note-unified-json-value-schema-dsl/consequences:
en: 14d0a6a337503e80
zh: c7ffec8760a710af
@@ -1,6 +1,46 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-22-slot-type-chain-implementation.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.md
2026-07-22-slot-type-chain-implementation.md: 98585a42f71844594da4ada19d7438a7d8321702
2026-07-22-slot-type-chain-implementation.zh.md: d1093537ccbc5ee5ff2dc18c234233ffca39879d
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat:
en: 43ed5b2dfd8043fc
zh: 04b6fdd0435a265a
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/problem:
en: 4f8d6891a8ba7061
zh: 5a619e562e00458d
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision:
en: a81cddbebc1a97a3
zh: aa57738c9f08c07e
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/root-is-the-only-a-priori-slot:
en: 43b856b4a8cf371f
zh: cde298ab8b8a3815
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/register-is-the-single-api-children-declaration-authorization-runtime-spec:
en: ce28268021a38b89
zh: 7802540e4ef04752
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/component-props-four-shares-each-from-its-own-source-of-truth:
en: f3fca569fa0c5168
zh: 647a82662f6a887d
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/the-chain-kind-entries-self-nominate-first-match-renders:
en: 56278be7f3688805
zh: 16602ffbf4baef85
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/the-store-seat-framework-engine-registrant-schema:
en: 2645acc9d29c20ec
zh: a8a2fd293ef5da04
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/inject-the-registrant-s-business-face-on-its-own-ctx:
en: 66b311fad441400a
zh: 34f031e7f04d29e6
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/data-boundary-discipline:
en: 07b919360c8f65be
zh: 4c8a9915a2ed20af
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/tree-context-and-the-renderer-contract:
en: d77ebd3f6b166194
zh: 57ba9fe864908d46
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/decision/type-chain-implementation-rulings:
en: 752bc30428dad374
zh: 3d729646468ecfde
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/consequences:
en: 07228332f3d3c227
zh: 32525e1972acf156
/agent-note-the-slot-system-standard-single-register-four-props-shares-and-the-framework-store-seat/alternatives-considered:
en: 2bd28715f741ac04
zh: 8d6a0cb78a006533
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-23-client-plugin-loading-model.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-23-client-plugin-loading-model.md
2026-07-23-client-plugin-loading-model.md: b8c23108a7a1cf3a04ded373d8705bae626c70c2
2026-07-23-client-plugin-loading-model.zh.md: efaea843120e5b023bbc8f59663ea47468944c71
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload:
en: 874618fd5ad1d06a
zh: a5e4bfad490fab34
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/problem:
en: 46c4b208707e024e
zh: b6f86a6374b251da
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision:
en: a15c7c13f167e5ac
zh: a15c7c13f167e5ac
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/package-membership-and-module-requests:
en: 6af228b03e5e533f
zh: 276a522af6be5d7a
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/one-module-system-one-plugin-governor:
en: 575aad62490f32e9
zh: a6c18eb63965fc1e
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/combo-external-script-arrival-and-source-maps:
en: 0a4240d88cca240a
zh: 8f5f1527caf571cd
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/the-loading-flow-end-to-end:
en: 7dac236d6add3c3c
zh: 2a43a923a0646bb0
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/live-graph-reconciliation:
en: 37e2fa1fe5cb2b95
zh: 80e513db87709cb4
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/decision/hot-reload-one-driver-plugin-self-watched-bundles:
en: f8b591d4c41ef492
zh: bc70f1cd540b7753
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/package-ownership:
en: 94ca0d09e6fd1e3a
zh: d5949a2bdec795ba
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/consequences:
en: 6a96d9ac06c222e5
zh: b2814ab58348e831
/agent-note-client-plugin-loading-lazy-factories-cordis-lifecycle-and-hot-reload/alternatives-considered:
en: b8f036f50cff7cd8
zh: 6d623c4a1f4314b1
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-24-project-session-directories.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-24-project-session-directories.md
2026-07-24-project-session-directories.md: 0074c8b31304e6a7d32199b7461575356e406448
2026-07-24-project-session-directories.zh.md: 3a1d348255588fd120221dc277a2841359c0a038
/agent-note-project-grouped-session-directories:
en: c8960daf61fa50fa
zh: d8c7c844180fcaae
/agent-note-project-grouped-session-directories/problem:
en: 7df6078347bd7176
zh: bb769760d7abc903
/agent-note-project-grouped-session-directories/decision:
en: cdefd1f4d9d0a55a
zh: 5916d456f3faab2b
/agent-note-project-grouped-session-directories/alternatives-considered:
en: ba4657ba95479806
zh: 5c53c5c964efa932
/agent-note-project-grouped-session-directories/consequences:
en: 228c46a599899be1
zh: 265a233cd41b5c05
@@ -1,6 +1,28 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-24-separate-context-injection-from-turn-execution.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.md
2026-07-24-separate-context-injection-from-turn-execution.md: d22d3966767ae9888f2140141b1c7743792184c0
2026-07-24-separate-context-injection-from-turn-execution.zh.md: 2c567511b21891ada3e0027f666d1163861fb090
/agent-note-separate-context-injection-from-turn-execution:
en: f0090d5d271cbd9d
zh: 7ff28e03f1273093
/agent-note-separate-context-injection-from-turn-execution/problem:
en: 2eefc25e17f62a90
zh: 81bc7ff2649b2704
/agent-note-separate-context-injection-from-turn-execution/decision:
en: 83dba9117127cbb4
zh: 2b6b428a1c97d3b1
/agent-note-separate-context-injection-from-turn-execution/injection-lifecycle:
en: 16005492be54cb4f
zh: db460e0ebf838d54
/agent-note-separate-context-injection-from-turn-execution/extension-and-caller-semantics:
en: e184d8cd9676e24f
zh: 22465b570ae35f59
/agent-note-separate-context-injection-from-turn-execution/alternatives-considered:
en: 0efad389c38dfe95
zh: 13dd73de20226540
/agent-note-separate-context-injection-from-turn-execution/verification:
en: 3f3db450a3fc5848
zh: b2027393d570339d
/agent-note-separate-context-injection-from-turn-execution/consequences:
en: 71079e4dede5e12f
zh: deb46b5a4f151678
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-24-single-harness-home-resolver.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-24-single-harness-home-resolver.md
2026-07-24-single-harness-home-resolver.md: 1191c52bfa222b807e9aa301b250d2efcc8b0953
2026-07-24-single-harness-home-resolver.zh.md: cefa124b7cb46bab92157af34576f59d3053da9f
/agent-note-one-harness-home-resolver:
en: 4177acbdd51411da
zh: 53f10d4c54b431b2
/agent-note-one-harness-home-resolver/problem:
en: fa4d3622fb18dd58
zh: 2b98640594c8344b
/agent-note-one-harness-home-resolver/decision:
en: bbab99c7a1aae2fc
zh: 87453b98ca265699
/agent-note-one-harness-home-resolver/alternatives-considered:
en: b1c9535540171d47
zh: 7df816d42945db94
/agent-note-one-harness-home-resolver/consequences:
en: 7d0f569b98feadf5
zh: 5c84624e7cc8d1d4
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-24-web-config-tree-boot-and-transport-layering.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.md
2026-07-24-web-config-tree-boot-and-transport-layering.md: c8a1db3cd7bd715d8912b22a0b41a9ef660c1316
2026-07-24-web-config-tree-boot-and-transport-layering.zh.md: 41fcf65b06829199c203faa806bd17a310b68bcf
/agent-note-dsh-web-config-tree-boot-and-the-web-transport-layering:
en: 2d06ffcaaeb373e7
zh: 01822cfd7339167f
/agent-note-dsh-web-config-tree-boot-and-the-web-transport-layering/problem:
en: e5d603f77bff9dd7
zh: c9e9a64f0a4db3c9
/agent-note-dsh-web-config-tree-boot-and-the-web-transport-layering/decision:
en: 866ebaaf4fe1e0d1
zh: 8075a708c9042941
/agent-note-dsh-web-config-tree-boot-and-the-web-transport-layering/consequences:
en: 47f8a6beba1f320b
zh: 5f444699dc52cabf
/agent-note-dsh-web-config-tree-boot-and-the-web-transport-layering/alternatives-considered:
en: bf6fbf972eab0700
zh: 0f3449e5e6ace7e2
@@ -1,6 +1,43 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-25-web-client-session-scope-and-provide-channel.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.md
2026-07-25-web-client-session-scope-and-provide-channel.md: 76561bc0e330b3e3a26607569ae327217d0a0b67
2026-07-25-web-client-session-scope-and-provide-channel.zh.md: d5d92b2ca53ba78929dd8591a6ded7028e4fed24
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide:
en: 64d8701a9f2574bd
zh: 938991d424943547
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/problem:
en: 1738c071cb9824bc
zh: 7af7770739d5430a
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision:
en: a397a3f2e0bd7c21
zh: a179a646c148ecc1
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/the-parity-model-client-and-host-share-one-root-state-axis:
en: e117f541a2f55c07
zh: c6a5cf9c9d6b7692
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/agent-scope-the-actx-is-the-sole-session-carrier-in-the-client-side-cordis-world:
en: 6e6488b3eab757c2
zh: 4ee3d1cc415234df
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/scope-lifecycle-anchored-to-explicit-references:
en: e2ed0052678a2b9b
zh: e0fe1b87dc3766af
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/the-blank-bit-the-empty-session-s-visible-projection-conversion-and-reuse:
en: ee88908c085b80c5
zh: 5ddb65bbac371f02
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/connectworkspace-the-sole-entry-point-of-new-session:
en: 833df42c5a87afbd
zh: 82d789a99fd2b968
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/per-session-provisioning-the-uisession-provide-standard-kit-channel:
en: 3c739c21ea490f09
zh: 5508153f313a86d9
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/input-delivery:
en: 2073e96f851d1e6e
zh: f0433bf5dfd0a23d
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/decision/host-wire-smalls:
en: 5d1339b5a243812a
zh: a4be4d3c30056f42
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/alternatives-considered:
en: 2a69d71f4bdf0f76
zh: dd768c273728d354
/agent-note-web-client-agent-scope-parity-model-and-the-provisioning-channel-agents-scope-blank-reuse-provide/consequences:
en: 6750378aca400a75
zh: 6eba20215ff255a1
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-27-compiler-independent-typert-model.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.md
2026-07-27-compiler-independent-typert-model.md: 5083c55176b2f4d342d14d0c1cf2a7f0c2c14b3c
2026-07-27-compiler-independent-typert-model.zh.md: 70d6954fae0fcb48e76137231168d5f2417668bf
/agent-note-compiler-independent-typert-type-model:
en: 6943b47c9de69922
zh: 2fb08c1de4e6ea63
/agent-note-compiler-independent-typert-type-model/problem:
en: 77713a6c0d15207e
zh: 2dc30d4c0182d8ba
/agent-note-compiler-independent-typert-type-model/decision:
en: 9ecb064f733f9f1b
zh: 471aee71053174cd
/agent-note-compiler-independent-typert-type-model/verification-contract:
en: c02d3f09e54f9a32
zh: c14c15ffb7316b07
/agent-note-compiler-independent-typert-type-model/alternatives-considered:
en: fa503dcfaa6f438f
zh: 26052212a124e133
/agent-note-compiler-independent-typert-type-model/consequences:
en: 4a472acf377f8361
zh: cb83602b123a4aae
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-28-api-browser-trust-boundary.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-28-api-browser-trust-boundary.md
2026-07-28-api-browser-trust-boundary.md: 397c93e084f84579ce3f90654f514428e696ffcd
2026-07-28-api-browser-trust-boundary.zh.md: 6d3896fd2c1fd6c607b9d92376eee76ab03df3c7
/agent-note-one-carrier-level-browser-trust-boundary-for-all-api-routes:
en: 491d0faf230d0278
zh: 40c8eef7719fe354
/agent-note-one-carrier-level-browser-trust-boundary-for-all-api-routes/problem:
en: c25db2ef111b2276
zh: 557891ca9e030ae5
/agent-note-one-carrier-level-browser-trust-boundary-for-all-api-routes/decision:
en: 1a1af1e8125ba4b0
zh: dd6c282651a06af5
/agent-note-one-carrier-level-browser-trust-boundary-for-all-api-routes/alternatives-considered:
en: 1a4b0ae8072e8e50
zh: d469553ad3b5d112
/agent-note-one-carrier-level-browser-trust-boundary-for-all-api-routes/consequences:
en: 8acf5e6f55a747c2
zh: bbd0b10927302965
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-28-identified-immutable-message-values.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.md
2026-07-28-identified-immutable-message-values.md: 73c9c14479117cf654d10b3da23d155cca77054d
2026-07-28-identified-immutable-message-values.zh.md: 7a5b9d6524beff01ac8a9e2020f75093271b7ab3
/agent-note-create-every-message-as-an-identified-immutable-value:
en: 0bb4f6acecd9b6f1
zh: 11e17fde272119f1
/agent-note-create-every-message-as-an-identified-immutable-value/problem:
en: 9334a7a325a88fda
zh: c21c8cee318c6a35
/agent-note-create-every-message-as-an-identified-immutable-value/decision:
en: a4434de753a41d41
zh: f16e5cd634245f0e
/agent-note-create-every-message-as-an-identified-immutable-value/alternatives-considered:
en: bf73901dd2b977ed
zh: 5ba5d4d05051b1da
/agent-note-create-every-message-as-an-identified-immutable-value/consequences:
en: 9f2c40ccfcf03ee1
zh: 0e8ba6c97f2e32af
/agent-note-create-every-message-as-an-identified-immutable-value/related:
en: 7c476f1a5195dff9
zh: c878154dbf766e82
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-28-portable-execution-world-consumers.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-28-portable-execution-world-consumers.md
2026-07-28-portable-execution-world-consumers.md: 5a687a552f322f3929b3f3937caf36c3373c05e7
2026-07-28-portable-execution-world-consumers.zh.md: 6bc0e20bd29d0b0a01068c004655cc90ac3b6699
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds:
en: 42609904ffe19d80
zh: fcacbf7912df216c
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/problem:
en: 959a378a04f28e89
zh: ff496169735b4d7b
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/decision:
en: 23eca65b89ae572a
zh: 630d844a7c6438df
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/remote-provider-ownership:
en: bde2e1fa8f3aeee0
zh: 42a13bb4cf540d6d
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/verification:
en: b34540c3548ea98f
zh: 79e53bda3981802c
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/alternatives-considered:
en: a5f455ad35d0615c
zh: df4f501a6d723838
/agent-note-portable-consumers-over-filesystem-and-subprocess-execution-worlds/consequences:
en: 3e8426e4a6788505
zh: 143b8c07d21d95d1
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-29-dsh-source-launch-tsx-esm.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.md
2026-07-29-dsh-source-launch-tsx-esm.md: 700577cb9b137d67f20baeb639f99f4c0877011d
2026-07-29-dsh-source-launch-tsx-esm.zh.md: 4d322d3dcf49442ee62f82203f17bd2ab16467fe
/agent-note-dsh-source-launch-through-the-tsx-esm-hook:
en: 55846ac57e07eeda
zh: 3de03730d4b28863
/agent-note-dsh-source-launch-through-the-tsx-esm-hook/problem:
en: 68385f7e47d3ac1f
zh: 285ca290832e2939
/agent-note-dsh-source-launch-through-the-tsx-esm-hook/decision:
en: 12adf8ed56b4d5c3
zh: fbbb9add935730c0
/agent-note-dsh-source-launch-through-the-tsx-esm-hook/alternatives-considered:
en: c6eec3d899a61df1
zh: 128edd753d49c0da
/agent-note-dsh-source-launch-through-the-tsx-esm-hook/consequences:
en: 7c8eb105520ccae3
zh: 9dc85ecda408de5a
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-29-projected-token-usage-and-request-context.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-29-projected-token-usage-and-request-context.md
2026-07-29-projected-token-usage-and-request-context.md: 10056ac8ef85562035d4fc4591e90aec603a7dd8
2026-07-29-projected-token-usage-and-request-context.zh.md: 0e4cd68791f0ee65dd700b64493be3c33b78a920
/agent-note-projected-token-usage-and-context-occupancy:
en: 293fcae41011ed29
zh: 9a018a07b6491173
/agent-note-projected-token-usage-and-context-occupancy/problem:
en: 081098cb08ca80aa
zh: f829b6630a68fc3c
/agent-note-projected-token-usage-and-context-occupancy/decision:
en: 231a6f4a4c00dca6
zh: e90c76e425826ca0
/agent-note-projected-token-usage-and-context-occupancy/context-occupancy-is-approximate-and-that-is-the-decision:
en: 9df83c0a48f462d2
zh: 94c2ad19af4b13fc
/agent-note-projected-token-usage-and-context-occupancy/alternatives-considered:
en: 50272313b4f061cc
zh: 1cfd7374e4bdfed9
/agent-note-projected-token-usage-and-context-occupancy/consequences:
en: c7a407dc3964fb9d
zh: b1ac7c53abb5cb09
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-29-terminal-llm-stream-failures.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-29-terminal-llm-stream-failures.md
2026-07-29-terminal-llm-stream-failures.md: c5d160c5dffe6171dd79714f2402f3bd6ca4d3fc
2026-07-29-terminal-llm-stream-failures.zh.md: 297898d8f94ae4f00ab1c5fef192ce633aee99cd
/agent-note-terminal-llm-stream-failures:
en: 6195cb1d9b4dd423
zh: 0c93d3a39e2bc1f4
/agent-note-terminal-llm-stream-failures/problem:
en: 41363fca57ae20e6
zh: 1d05eeeecaafa7f3
/agent-note-terminal-llm-stream-failures/decision:
en: c3bfde5f736f8b27
zh: f51ebb4089df6406
/agent-note-terminal-llm-stream-failures/alternatives-considered:
en: 46153a92b2135aae
zh: 0b8fdaf1f7edeb77
/agent-note-terminal-llm-stream-failures/consequences:
en: 9bf05473682c5cef
zh: b93f32470eb08cf4
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-30-credential-boundaries-and-atomic-registration.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.md
2026-07-30-credential-boundaries-and-atomic-registration.md: 0e65bb1093bb21c3a0dbee71b4e80ba4276b9d00
2026-07-30-credential-boundaries-and-atomic-registration.zh.md: cbc66efa26065beb54ee1deea0f69221ebd92337
/agent-note-credential-boundaries-whole-snapshot-requests-and-atomic-route-registration:
en: 0b33f9d64be7149a
zh: 365ea54cf9fd4924
/agent-note-credential-boundaries-whole-snapshot-requests-and-atomic-route-registration/problem:
en: 6228c81e4965b688
zh: 04b702be0cfbf195
/agent-note-credential-boundaries-whole-snapshot-requests-and-atomic-route-registration/decision:
en: d2aa88cf1e9ec97b
zh: da9422723fc9ac93
/agent-note-credential-boundaries-whole-snapshot-requests-and-atomic-route-registration/alternatives-considered:
en: 90c5883b247f7301
zh: 6d2a660d8653f805
/agent-note-credential-boundaries-whole-snapshot-requests-and-atomic-route-registration/consequences:
en: 99b678779110e0d1
zh: 5790590caab41e0c
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-30-followup-enqueue-and-owned-runs.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-30-followup-enqueue-and-owned-runs.md
2026-07-30-followup-enqueue-and-owned-runs.md: c9b3b992dffb39c94b476cd6541b8ec9e2256047
2026-07-30-followup-enqueue-and-owned-runs.zh.md: 7f272484cad4f9d0fd918e5c1b05fb8fcb0384c0
/agent-note-follow-up-enqueue-and-owned-run-boundaries:
en: 30b533c813f80a2c
zh: 5f56ae990ca597f2
/agent-note-follow-up-enqueue-and-owned-run-boundaries/problem:
en: 33387f4ed29e967b
zh: b61ab718327d4cc9
/agent-note-follow-up-enqueue-and-owned-run-boundaries/decision:
en: 9d68149d8090d355
zh: d3efa8ac850603bf
/agent-note-follow-up-enqueue-and-owned-run-boundaries/alternatives-considered:
en: 70a57101ffa08e81
zh: 36c3539ee9c759af
/agent-note-follow-up-enqueue-and-owned-run-boundaries/verification:
en: 4c65688fc0bc1f6c
zh: 04f1fd160e38a69d
/agent-note-follow-up-enqueue-and-owned-run-boundaries/consequences:
en: 7de608183c0bd34d
zh: 598eeb85cfd2993b
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-30-session-end-seed-log-boundary.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.md
2026-07-30-session-end-seed-log-boundary.md: 9cf7c7f20701688208e8b1c343904f2a9f2cab9e
2026-07-30-session-end-seed-log-boundary.zh.md: fdf4ec9de610f17e792de98334dd5d37f5e4c355
/agent-note-the-end-seed-log-boundary:
en: 0f53ca9c0166d7ad
zh: e16b2376c2afb1bc
/agent-note-the-end-seed-log-boundary/problem:
en: e7192f854b24129c
zh: 74a38ee95988e338
/agent-note-the-end-seed-log-boundary/decision:
en: 519aa4faadd01960
zh: 1430cc9bd81e7df9
/agent-note-the-end-seed-log-boundary/persistence-needs-no-changes:
en: 5df69ed0156e50c8
zh: 9ad6caad6d33b183
/agent-note-the-end-seed-log-boundary/scope-of-the-guarantee:
en: 31c23e4e25640fb1
zh: d207c2a8aa7d936c
/agent-note-the-end-seed-log-boundary/alternatives-considered:
en: cd1ed7dfa77722ae
zh: 4ad834f3cf3b5443
/agent-note-the-end-seed-log-boundary/consequences:
en: 69eb86480b191135
zh: 51ef88fb78701b1f
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-31-claimed-pre-step-inbox-lifecycle.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.md
2026-07-31-claimed-pre-step-inbox-lifecycle.md: 3ebb73279e49c2aaffa05bea647fa3f93ba6a36f
2026-07-31-claimed-pre-step-inbox-lifecycle.zh.md: 809470e5b52b29cdcbe7b4d81bb584b476f5cfce
/agent-note-claim-inbox-input-before-one-pre-step-decision:
en: 4ee4c56f27c9bf27
zh: 72321b4c735e106f
/agent-note-claim-inbox-input-before-one-pre-step-decision/problem:
en: f2a920b8770c2f99
zh: 1c111f175131714e
/agent-note-claim-inbox-input-before-one-pre-step-decision/decision:
en: 2e58afbd8ffbce60
zh: 40e0c0e3d24fc7ad
/agent-note-claim-inbox-input-before-one-pre-step-decision/alternatives-considered:
en: 03496db1c0547f71
zh: c0932cfcb5d5d93b
/agent-note-claim-inbox-input-before-one-pre-step-decision/verification:
en: 007a79d6db18cbab
zh: 611306fcb5edfda0
/agent-note-claim-inbox-input-before-one-pre-step-decision/consequences:
en: ba68c3ce7ed64bcc
zh: 8fe29186526b258a
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-31-goal-owned-durable-events.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-31-goal-owned-durable-events.md
2026-07-31-goal-owned-durable-events.md: 0d3e632ba275f38e48fdf1f9ee6747f4bc460aab
2026-07-31-goal-owned-durable-events.zh.md: fd29a6f36eed42f5ba26a46a32acb165d1e42873
/agent-note-goal-owned-durable-events:
en: a8fca44de335547c
zh: e0cc7072f2247a19
/agent-note-goal-owned-durable-events/problem:
en: 882023626c792880
zh: 1966501718e96f92
/agent-note-goal-owned-durable-events/decision:
en: cc99d9ce1f6ebb9a
zh: 34e519f16d8d5e3e
/agent-note-goal-owned-durable-events/alternatives-considered:
en: 7d79dfa834d9168f
zh: 0b3e82a7d0ef71b9
/agent-note-goal-owned-durable-events/consequences:
en: 0e4513ea5e3e1e2e
zh: 69d81ba52ee2f4b6
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-07-31-ptc-runtime-python-fd3-protocol.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-07-31-ptc-runtime-python-fd3-protocol.md
2026-07-31-ptc-runtime-python-fd3-protocol.md: 097bcfd55f333a0973084f378a6c97cb630a4bec
2026-07-31-ptc-runtime-python-fd3-protocol.zh.md: ac656e421bd822994c50c33d0dfaf65ae46aa817
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol:
en: fc43bcfc72cc4476
zh: c81279cb0da1481c
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/problem:
en: 2c36946bbff637b7
zh: f290de0866ba7caa
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/decision:
en: 1f93159850fc7f48
zh: dcc2a4788e3254f7
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/wire-contract:
en: 913f9465320dc191
zh: f8e0338645d6c204
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/mirror-alignment:
en: 26128b65f2763920
zh: df24359faebcbfed
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/alternatives-considered:
en: cc42636bd7793305
zh: e196f980daec3037
/agent-note-the-ptc-runtime-python-fd-3-frame-protocol/consequences:
en: 16df6efd46d71e85
zh: 4062475bec04ab5f
@@ -1,6 +1,76 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-02-typert-remote-method-calls.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-02-typert-remote-method-calls.md
2026-08-02-typert-remote-method-calls.md: 2a12aaf78f638d8af786d2ca817a3fee07a2c614
2026-08-02-typert-remote-method-calls.zh.md: bf4a7b0179b4dc878a0a53c7076c02e6f1bf0273
/agent-note-typert-gateway-targeted-method-calls:
en: 4d77bacdc36f246b
zh: b884bf274df490af
/agent-note-typert-gateway-targeted-method-calls/problem:
en: 14a83a0440499136
zh: 15587f8e821c5a17
/agent-note-typert-gateway-targeted-method-calls/decision:
en: 44d946b53496974c
zh: 403447c25a5b2d7c
/agent-note-typert-gateway-targeted-method-calls/components-and-cordis-services:
en: aa7f509189ade32e
zh: ef2841bc793f31b2
/agent-note-typert-gateway-targeted-method-calls/business-declarations:
en: c6b70d442b137d2e
zh: 6d0dbefe89937ef1
/agent-note-typert-gateway-targeted-method-calls/decorators-and-the-explicit-gateway-facet:
en: 155afbe4b8af600b
zh: 14705698a9cdbd84
/agent-note-typert-gateway-targeted-method-calls/lookup-and-remote-scope-registration:
en: 9f7448898cf5cadc
zh: 419573c589ed6f7d
/agent-note-typert-gateway-targeted-method-calls/invocationdescriptor:
en: aad682229b400d49
zh: 60c2857fca1f4b2b
/agent-note-typert-gateway-targeted-method-calls/typert-runtime-registry:
en: 14ad652e20e699ca
zh: 9272bc04a35e3c6a
/agent-note-typert-gateway-targeted-method-calls/canonical-types-symbols-and-zod:
en: a244f6a88fdabf3d
zh: e4feedb7297f4865
/agent-note-typert-gateway-targeted-method-calls/three-artifact-kinds-and-two-typescript-programs:
en: 6ea4bddcf35a834d
zh: 4af474c6818b1cf0
/agent-note-typert-gateway-targeted-method-calls/the-remote-package-entry:
en: 75e977fe0fb71d59
zh: 00760c79da173cb7
/agent-note-typert-gateway-targeted-method-calls/strict-consumer-api-types:
en: 983f55c0ed4a8edc
zh: 5a736e00e4b57e6a
/agent-note-typert-gateway-targeted-method-calls/client-typert-and-the-api-gateway-client-face:
en: 9dc732c13ffaee63
zh: 4977aaef0856956d
/agent-note-typert-gateway-targeted-method-calls/cross-environment-isomorphism-constraints:
en: 5d14e1b7afc53efb
zh: e2f4b5814083738f
/agent-note-typert-gateway-targeted-method-calls/src-and-lib-operating-modes:
en: 1e366dcfab74831b
zh: 14199f25f20a9352
/agent-note-typert-gateway-targeted-method-calls/host-gateway-resolution:
en: 88a95d7ab4621caf
zh: 89b63fb6440fca79
/agent-note-typert-gateway-targeted-method-calls/the-shared-api-call-chain:
en: 391a59d0ba24cb34
zh: b7294d6bb5f9d297
/agent-note-typert-gateway-targeted-method-calls/connection-and-protocol-boundaries:
en: e8f9d48c42e27fb6
zh: 445bc192d67c71f1
/agent-note-typert-gateway-targeted-method-calls/package-boundaries:
en: df2c448d3a0680eb
zh: 47327d4d26ec5887
/agent-note-typert-gateway-targeted-method-calls/shipped-scope-and-deferred-work:
en: b1c0c3dd77c56ce8
zh: 769ffd4aeefd949c
/agent-note-typert-gateway-targeted-method-calls/alternatives-considered:
en: 0d68c499b7780f4f
zh: bdd1e57232b996e2
/agent-note-typert-gateway-targeted-method-calls/verification:
en: 7433bdb522bb2083
zh: 545c17613b636f00
/agent-note-typert-gateway-targeted-method-calls/consequences:
en: c3459afdb606cfbe
zh: ec69f2bb39170a7c
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-04-configuration-source-ownership.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-04-configuration-source-ownership.md
2026-08-04-configuration-source-ownership.md: b8c146ed76e500fcde3affd92bc5188b83083223
2026-08-04-configuration-source-ownership.zh.md: 22afc15aec97a40829655fcb8179ad90a369bf0c
/agent-note-one-ordering-for-configuration-sources-and-what-a-discovered-file-may-not-decide:
en: 1f6ee603f36c2e09
zh: e08197958663219c
/agent-note-one-ordering-for-configuration-sources-and-what-a-discovered-file-may-not-decide/problem:
en: d94bb81479bfa4a1
zh: af44ceaecf84ee51
/agent-note-one-ordering-for-configuration-sources-and-what-a-discovered-file-may-not-decide/decision:
en: aea80ece13f2905b
zh: a880bc1a7839cf12
/agent-note-one-ordering-for-configuration-sources-and-what-a-discovered-file-may-not-decide/consequences:
en: 640b7ee4e8c57ed0
zh: 1c17b3fba16861a8
/agent-note-one-ordering-for-configuration-sources-and-what-a-discovered-file-may-not-decide/alternatives-considered:
en: ac43499cfe7b8495
zh: e5ab599e7d3ed753
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-04-draft-provider-endpoint-interrogation.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-04-draft-provider-endpoint-interrogation.md
2026-08-04-draft-provider-endpoint-interrogation.md: 469ab38b0f5609808a9df03237d4d21c0080d843
2026-08-04-draft-provider-endpoint-interrogation.zh.md: 74c6bc7ed73572d5e99ea973c9ea94d22319cbdf
/agent-note-interrogating-a-draft-provider-endpoint:
en: a465a218bbc2f74e
zh: 60d1eae3c79337a0
/agent-note-interrogating-a-draft-provider-endpoint/problem:
en: c50e44492b4b30a2
zh: 74a17b3d3ec6cf0d
/agent-note-interrogating-a-draft-provider-endpoint/decision:
en: dc323940d59008f4
zh: fc94284fcda71542
/agent-note-interrogating-a-draft-provider-endpoint/decision/why-not-pi-ai-s-own-refresh-machinery:
en: a9654499e32c91b3
zh: cfb5a76500b6fe1a
/agent-note-interrogating-a-draft-provider-endpoint/alternatives-considered:
en: 3b4b4c33401d862a
zh: bb79062a431576f1
/agent-note-interrogating-a-draft-provider-endpoint/consequences:
en: a4911a205e713f60
zh: 04adc6be1f4f34c7
/agent-note-interrogating-a-draft-provider-endpoint/testing:
en: 40cf0cf6141eba6e
zh: 54a6097cf125b846
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-05-profile-plugin-bundles.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.md
2026-08-05-profile-plugin-bundles.md: 0607f1c9a2414cc16515967b4520da8a325853fd
2026-08-05-profile-plugin-bundles.zh.md: 9d25d3bea6337c472d161c721e44a66dca8470c9
/agent-note-profile-plugin-bundles-replace-the-fixed-surface-overlays:
en: 178252acff6e206f
zh: 2e5785ca3485f1e7
/agent-note-profile-plugin-bundles-replace-the-fixed-surface-overlays/problem:
en: 504dd5f06475d707
zh: 6557fd5649f48944
/agent-note-profile-plugin-bundles-replace-the-fixed-surface-overlays/decision:
en: 4c58d379cd59d879
zh: a6b6322fe82d7b6a
/agent-note-profile-plugin-bundles-replace-the-fixed-surface-overlays/alternatives-considered:
en: d906d7a421c6b5c0
zh: b230cd58c1b7ac79
/agent-note-profile-plugin-bundles-replace-the-fixed-surface-overlays/consequences:
en: 1aef147a0f31dfaf
zh: f0a8c6cbb9f0506b
@@ -1,6 +1,94 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-09-client-conversation-node-assembly.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.md
2026-08-09-client-conversation-node-assembly.md: bb1d68cc045710d46a44ffb295c2307628338521
2026-08-09-client-conversation-node-assembly.zh.md: 6291211d589b3389e7dc9a42d15fe6ac0d9e7ab9
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots:
en: 32abbd757c29e1ee
zh: ea0b9de97fd04196
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/problem:
en: ebdd3ce57ca5b24d
zh: 1aa034b4c3ed515f
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision:
en: af502b4eb9c09d33
zh: a20cd538e66d3a4b
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/responsibility-layers:
en: 36b54ef989c331af
zh: 58cad4e07a800ba9
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract:
en: 74f17ca7ae05af83
zh: 591fbc6c98f90262
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/kind-business-id-and-context-key:
en: 3081736d55350c67
zh: bfa89f127c16c59f
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/match-event:
en: 5c97a2a4e91325a7
zh: d29e52647b699810
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/conversationmatch:
en: 616c50e24ab990d1
zh: 2c4a6d129f491046
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/conversationnodecontext:
en: 7d1ce8db92084e90
zh: 7b7e6bf3840f6986
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/start-context-match-reader:
en: 1167bbc860581e33
zh: 549896c06507ce57
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/reader-previous-kind:
en: 48e127652f2dab8d
zh: 35f48d4cefc8ce52
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/update-context-match:
en: 66bd752825ad2c41
zh: 1cec352eb3d7ab28
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/publication-match:
en: 43be4c019d79e37a
zh: 54978ef8317e777b
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/buildlocationdata-context-scope:
en: 8c2b8eab071f5f7b
zh: d3207b1fcfff0a4b
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/buildviewnode-context-target:
en: c8091375cf986eaa
zh: 0c3226e3f42e51e4
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/overall-conversationnodedefinition-contract/no-generic-end:
en: d5a57346207b0da3
zh: cb4a4f22ce237c34
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/decision/location-is-a-first-class-engine-fact:
en: c66d870529588ea6
zh: c9af12feb1e3fae2
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/three-input-window-paths:
en: cc8d60a4ceba6f41
zh: 552220db9f839429
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/three-input-window-paths/initial-history-tail-and-logical-backward-scanning:
en: a777deacfd73ed3f
zh: 2a9c75dd0aeedcd5
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/three-input-window-paths/prepending-a-newly-loaded-older-page:
en: 3aa4c0a9006b35e8
zh: 9627f4aaa18c8066
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/three-input-window-paths/forward-live-append:
en: 484172cce965aad7
zh: 15fffdd32c66cc95
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/three-input-window-paths/consistency-across-replace-prepend-and-append:
en: a9cf356610f46a53
zh: abc1149bf06b230e
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/how-built-in-businesses-use-definitions:
en: 2a7cae3607dcbc1a
zh: 86f6d8eb7871e253
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/how-built-in-businesses-use-definitions/matching-id-and-state:
en: 130f5db917574545
zh: 9bf13c96abdc3a4e
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/how-built-in-businesses-use-definitions/chat-node-and-history-live-behavior:
en: 0c52c9ae98f84a86
zh: d1c7587ad427d8fc
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/view-builder-and-react-identity:
en: ced7ab385e5a81a8
zh: 5c319ed7ca40e5b8
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/runtime-and-render-path:
en: 114ca8db361d22e5
zh: 37b6d474e855c187
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/verification:
en: cf36507c86d1139c
zh: 1fcdd4e2c2cc106b
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/alternatives-considered:
en: e150870d4e2525ed
zh: 34eafb435036af9a
/agent-note-client-conversation-business-node-assembly-and-keyed-chat-snapshots/consequences:
en: 0da343d3b6b29da3
zh: d7b3774a23be7311
@@ -14,6 +14,8 @@ Business events also use different correlation models. Tool has call IDs, Assist
## Decision
The [three-stage Tool lifecycle](2026-09-22-tool-call-three-phases.md) owns transient initialization, repeated start matches for one ID, and tool preparation; this record's other node-assembly responsibilities remain applicable.
Client Runtime provides a target-neutral Conversation Node assembly engine. Business plugins register Event Definitions, and view plugins register per-Session View Builders. `ui-conversation` registers the first built-in Definitions and the `chat` builder; Session only submits the current contiguous `SessionEventLikeEntry` window to the engine and publishes its snapshot instead of interpreting individual conversation businesses. The entry's outer discriminator distinguishes standard and packed records, while both carry an aligned inner `SessionEventLike` for Definition dispatch.
This Note retains the derivation, business-by-business validation, responsibilities, algorithms, and trade-offs that remain relevant after implementation.
@@ -14,6 +14,8 @@ Client Session 既维护传输窗口、连接状态和待处理交互,也在
## 决策
start 的瞬态创建入口、同 ID 多次 start 及工具准备阶段以[工具调用三阶段](2026-09-22-tool-call-three-phases.zh.md)为准;本记录的其他节点组装职责继续适用。
Client Runtime 提供 target-neutral 的 Conversation Node 组装引擎,业务插件注册 Event Definition,视图插件注册 per-Session View Builder。`ui-conversation` 注册第一批内建 Definition 和 `chat` builder;Session 只负责把当前连续 `SessionEventLikeEntry` window 送入引擎并发布它的 snapshot,且不解释具体 conversation 业务。entry 的外层 discriminator 区分标准与 packed record,两者都携带字段对齐的内部 `SessionEventLike`,供 Definition dispatch。
本 Note 保留实现后仍有价值的方案推导、逐业务适配、职责、算法和取舍。
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-10-cancelled-stream-prefix-finalize.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-10-cancelled-stream-prefix-finalize.md
2026-08-10-cancelled-stream-prefix-finalize.md: 1e6fe59bcc1b323941b69d0e9232f0bcf9e56f53
2026-08-10-cancelled-stream-prefix-finalize.zh.md: 7aa81f179b80925ef47a8820f8a80c1ef37ec5ea
/agent-note-cancelled-streams-finalize-their-delivered-prefix:
en: d727a01958e5724c
zh: b2d11741f70caf24
/agent-note-cancelled-streams-finalize-their-delivered-prefix/problem:
en: 142c716d174403a5
zh: bbb906ca25d7c9f4
/agent-note-cancelled-streams-finalize-their-delivered-prefix/decision:
en: 28e166977c0dffde
zh: d7c6b175984627fc
/agent-note-cancelled-streams-finalize-their-delivered-prefix/alternatives-considered:
en: ca4363e11e8eff48
zh: 834152cbe57e1f3e
/agent-note-cancelled-streams-finalize-their-delivered-prefix/consequences:
en: 2d58504acfc4fffe
zh: a6a7ca872c003099
/agent-note-cancelled-streams-finalize-their-delivered-prefix/testing:
en: 241507aff996c16a
zh: 599eed3162f3ba8d
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-10-fork-children-stay-one-shot.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.md
2026-08-10-fork-children-stay-one-shot.md: 0edf6ca9347dcf57313365e570daed22589f69fd
2026-08-10-fork-children-stay-one-shot.zh.md: c2e3504bd21ec6dd6b3feba4ed8abdaec3ee45a4
/agent-note-forked-children-preserve-the-parent-request-prefix:
en: 5254ea4573dedd96
zh: ba4ab4517dad0d9f
/agent-note-forked-children-preserve-the-parent-request-prefix/problem:
en: 1fe344c95a0de36d
zh: 656c3e0f1117f64e
/agent-note-forked-children-preserve-the-parent-request-prefix/decision:
en: 7461852090348b34
zh: ad6c9e0ce65a3e85
/agent-note-forked-children-preserve-the-parent-request-prefix/alternatives-considered:
en: 80504ffd8331e6c5
zh: 193261bdde24b4bb
/agent-note-forked-children-preserve-the-parent-request-prefix/consequences:
en: 54c4ce3ee0fee4d2
zh: 8a63fb3486c76551
/agent-note-forked-children-preserve-the-parent-request-prefix/consequences/accepted-risks:
en: f634caa9973eaedb
zh: 820291096c8e7352
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-10-host-plane-ownership-after-presets.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.md
2026-08-10-host-plane-ownership-after-presets.md: daf48f27c2228b71319d6f5410e6cabe3bc02b39
2026-08-10-host-plane-ownership-after-presets.zh.md: 56babf5e715584b4ee061a334158d46e59b0d350
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane:
en: 4b22d7def09af6eb
zh: 89b43fb2761cb17b
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane/problem:
en: 5a5d4de7d40ed86b
zh: abfae08f9c291c54
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane/decision:
en: 60be2f515ff5f46d
zh: ee8514deadb08260
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane/testing:
en: a7b7ca354607dd21
zh: f88356bfc7dc770e
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane/alternatives-considered:
en: eac46307265e647d
zh: acfad02f8ca1dc3f
/agent-note-what-stays-host-plane-once-presets-own-the-agent-plane/consequences:
en: d8576d7db9dea547
zh: 428bb5a7e609d170
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-10-remote-event-delivery.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-10-remote-event-delivery.md
2026-08-10-remote-event-delivery.md: 3eaa26fb92c40b3a20cab11d4522bcf68b8a207f
2026-08-10-remote-event-delivery.zh.md: d41589f1b800da98342210d2e429a2b67b6c61f2
/agent-note-remote-event-delivery-ctx-remote-on:
en: 4b64b9fab76b5185
zh: 57a11b8a480a49dd
/agent-note-remote-event-delivery-ctx-remote-on/problem:
en: d3016e40cefe047f
zh: 83e83c25a13383e5
/agent-note-remote-event-delivery-ctx-remote-on/decision:
en: 83f6f48ce1fc517b
zh: abcfcd1c0eb777ea
/agent-note-remote-event-delivery-ctx-remote-on/decision/consumer-contract-dsh-typert-protocol:
en: 8f30b121dd59a3a3
zh: 92a5e0e63936c393
/agent-note-remote-event-delivery-ctx-remote-on/decision/the-allowlist-one-declaration-read-by-both-faces:
en: ce8c2e030baf7049
zh: bb6beb40228e40ae
/agent-note-remote-event-delivery-ctx-remote-on/decision/wire-protocol-api-gateway-remote-mux:
en: 5c89d238a469e79f
zh: d0cf485f0d245e7d
/agent-note-remote-event-delivery-ctx-remote-on/decision/the-apps-web-browser-e2e-belongs-to-the-host-face:
en: a29e07b8013f7f9f
zh: 4f066efa96f2d22f
/agent-note-remote-event-delivery-ctx-remote-on/decision/change-inventory:
en: 49fc44d242a87b69
zh: 42c4c36296849a88
/agent-note-remote-event-delivery-ctx-remote-on/alternatives-considered:
en: b75743ab277c1557
zh: e8e05f41ce1bc2f3
/agent-note-remote-event-delivery-ctx-remote-on/verification:
en: 4ec0e1c76da8d3b6
zh: 23de66f8fc659c15
/agent-note-remote-event-delivery-ctx-remote-on/consequences:
en: c50a0968e3f65df7
zh: 786f33cf1e95dae4
/agent-note-remote-event-delivery-ctx-remote-on/related:
en: b64e771dafa6c05b
zh: 4c2f47884f5a2d19
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-10-session-log-version-mechanism.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.md
2026-08-10-session-log-version-mechanism.md: 9cb0940f767aa27d5a5106fb78b528c1e3e2695b
2026-08-10-session-log-version-mechanism.zh.md: e1424f24e5dd74b243fe1f0aebceb5d420b9b8c3
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker:
en: a3c7418dfaa328a8
zh: e702faa662f821ae
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker/problem:
en: c11f54e24be6cc3b
zh: c1c274fbb161a57b
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker/decision:
en: 084bcb4de484ef32
zh: 1edf1445913ac7b1
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker/decision/writer-and-publication-authority:
en: 461eaa03c6a4f441
zh: 7e5b131326dc702c
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker/consequences:
en: 8ce6dcec183fab88
zh: a43e9315ad147b15
/agent-note-session-log-versioning-one-integer-an-upgrade-chain-and-a-per-event-ignorable-marker/alternatives-considered:
en: 2a1580516406ae53
zh: 7a650804eb520be0
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-13-credential-records-and-authorization-flows.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-13-credential-records-and-authorization-flows.md
2026-08-13-credential-records-and-authorization-flows.md: 6bf65761c98689d62935d6e36a040e05c38aa653
2026-08-13-credential-records-and-authorization-flows.zh.md: 72ec310c2ff0141f83096c805d5ccd60fe5cd57e
/agent-note-credential-records-and-authorization-flows:
en: f624412adde88819
zh: ac1adbc505394ca2
/agent-note-credential-records-and-authorization-flows/problem:
en: 7be98011b76b2376
zh: e01cd9f1039c7875
/agent-note-credential-records-and-authorization-flows/decision:
en: 57e30c6b56664fee
zh: ab1c7354b47f503e
/agent-note-credential-records-and-authorization-flows/decision/two-mechanisms-the-seams-needed-underneath:
en: e4d5663533e566a2
zh: 212a1722b78ee727
/agent-note-credential-records-and-authorization-flows/alternatives-considered:
en: bb484a8d612a43cd
zh: 2a85ba010ed083e1
/agent-note-credential-records-and-authorization-flows/consequences:
en: ef7c5f6fa346c1d8
zh: 439b0d8394015f1e
/agent-note-credential-records-and-authorization-flows/testing:
en: 6c8c01f75e6f916b
zh: 7c5c7491f64f2936
@@ -1,6 +1,31 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-15-client-shells-and-dynamic-packages.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.md
2026-08-15-client-shells-and-dynamic-packages.md: ad2bb26b84253e859e567775eec3b06d73b0003b
2026-08-15-client-shells-and-dynamic-packages.zh.md: 70563962b3c613caa611c61a0c690d2e0e777def
/agent-note-client-shell-layering-and-dynamic-package-boundaries:
en: c8976de4e5547fdd
zh: 3d1bcb3273993af4
/agent-note-client-shell-layering-and-dynamic-package-boundaries/problem:
en: bd5f38c7aba648dc
zh: 3c28670556b3b34d
/agent-note-client-shell-layering-and-dynamic-package-boundaries/decision:
en: a15c7c13f167e5ac
zh: a15c7c13f167e5ac
/agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/layers-and-build-forms:
en: a1750de2d48551af
zh: ffea0b75c292f186
/agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/shared-module-requests:
en: cedddcca8a7bae6d
zh: a568a1130229f48c
/agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/parser-preloading-and-react-handoff:
en: 4b503618b271fc28
zh: e2148f44efa769d2
/agent-note-client-shell-layering-and-dynamic-package-boundaries/decision/dependency-declarations:
en: 47c332b836c2933b
zh: ed190dbb14b98911
/agent-note-client-shell-layering-and-dynamic-package-boundaries/alternatives-considered:
en: 2257178f8f474757
zh: 7da85b5899b91520
/agent-note-client-shell-layering-and-dynamic-package-boundaries/consequences:
en: c7653b12059aebd7
zh: a79b63f28d18f8c4
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-18-experimental-agent-teams-packages.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-18-experimental-agent-teams-packages.md
2026-08-18-experimental-agent-teams-packages.md: 92eba148b328135301b196c9a17e49ee23ddb3f6
2026-08-18-experimental-agent-teams-packages.zh.md: 6f4d004a78e32e2c27ad65648c446b3cd54c07ad
/agent-note-publish-agent-teams-under-experimental-package-names:
en: 4c772309d60d4ccc
zh: 91bf0acc208e5167
/agent-note-publish-agent-teams-under-experimental-package-names/problem:
en: e45938d278a6c12d
zh: 93c790d466f7bd12
/agent-note-publish-agent-teams-under-experimental-package-names/decision:
en: a2555b0c5a6f6f53
zh: f7082ceb8542b0fb
/agent-note-publish-agent-teams-under-experimental-package-names/alternatives-considered:
en: 869decdfbc7b3466
zh: b51f5ab731d1a84a
/agent-note-publish-agent-teams-under-experimental-package-names/consequences:
en: f827547f976bf92b
zh: d94e17b8fa2e8304
@@ -1,6 +1,58 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-18-session-history-and-event-transport.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-18-session-history-and-event-transport.md
2026-08-18-session-history-and-event-transport.md: db5c403562101bca76c0d39a037a199b2ca164f3
2026-08-18-session-history-and-event-transport.zh.md: 41ff3ea2dd538edb457e0db3108a900bab220e47
/agent-note-session-history-control-state-and-remote-event-transport:
en: 79e15a9da0b4053b
zh: fb9719cd520abf7b
/agent-note-session-history-control-state-and-remote-event-transport/problem:
en: b40a730a4cd03535
zh: 10d5a61824b53443
/agent-note-session-history-control-state-and-remote-event-transport/decision:
en: bbe86a1833ab5547
zh: 987a2ade8b4cb909
/agent-note-session-history-control-state-and-remote-event-transport/decision/connection-generation-and-physical-connections:
en: c4342f89bf96a63b
zh: f8749f02bcfccc4e
/agent-note-session-history-control-state-and-remote-event-transport/decision/general-remote-stream-model:
en: fb2c7bcde3b1672a
zh: a05bd30be07e5413
/agent-note-session-history-control-state-and-remote-event-transport/decision/general-remote-stream-model/remotestream:
en: d55c2ce88400e448
zh: 344d510ab946bb9f
/agent-note-session-history-control-state-and-remote-event-transport/decision/general-remote-stream-model/remotesnapshotstream:
en: f2c1d2b00d9554fd
zh: c3e85cf344f7ef24
/agent-note-session-history-control-state-and-remote-event-transport/decision/general-remote-stream-model/remotejournalstream:
en: d5d0d6a57a4fa581
zh: 265973b157f957d9
/agent-note-session-history-control-state-and-remote-event-transport/decision/session-controller:
en: e338ac27490a380f
zh: 12600011ec742e5b
/agent-note-session-history-control-state-and-remote-event-transport/decision/session-controller/activation-policy:
en: 534dcc62a26d305e
zh: 03d64abc0a46bbec
/agent-note-session-history-control-state-and-remote-event-transport/decision/session-controller/session-journal:
en: bb710f8cf35f2028
zh: aae2cfb8cd848069
/agent-note-session-history-control-state-and-remote-event-transport/decision/session-controller/session-live-control:
en: a11d627cd68650c3
zh: 9aff565b9f712853
/agent-note-session-history-control-state-and-remote-event-transport/decision/workspace-controller:
en: ce0c3fcff169412d
zh: 7076182817358dff
/agent-note-session-history-control-state-and-remote-event-transport/decision/remote-event:
en: c76291bf39999882
zh: 76f032664fb91ead
/agent-note-session-history-control-state-and-remote-event-transport/decision/api-proxy-s-remaining-boundary:
en: 457408013eb78636
zh: 126e9d263225d7c4
/agent-note-session-history-control-state-and-remote-event-transport/alternatives-considered:
en: 22a77c3afd4df0d6
zh: 661cf8d02d741f1d
/agent-note-session-history-control-state-and-remote-event-transport/verification:
en: 7328f28ba3e32f4c
zh: 2150f20437a473af
/agent-note-session-history-control-state-and-remote-event-transport/consequences:
en: 808ce6d1310876a2
zh: d9e8fe2aa5cda617
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-19-session-projection-mandatory-seam.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-19-session-projection-mandatory-seam.md
2026-08-19-session-projection-mandatory-seam.md: e1c6835311228fcaf7a22140f1db8da748603186
2026-08-19-session-projection-mandatory-seam.zh.md: 5d6a5169a556febae3f5c960b2d519c324d99863
/agent-note-session-projections-as-a-required-reader-seam:
en: 41f30d473ff53ce2
zh: 6851c4414f5331c1
/agent-note-session-projections-as-a-required-reader-seam/problem:
en: c0c779c717cad546
zh: 5d2916ac86bf5d84
/agent-note-session-projections-as-a-required-reader-seam/decision:
en: a1c50d2f43334a88
zh: d7736994733454b4
/agent-note-session-projections-as-a-required-reader-seam/alternatives-considered:
en: aea3da939c90d240
zh: 21e91c481cdd23b7
/agent-note-session-projections-as-a-required-reader-seam/consequences:
en: 73325513ec70fbb2
zh: 610bf34b9f9db420
@@ -1,6 +1,151 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-20-client-session-conversation-ownership.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.md
2026-08-20-client-session-conversation-ownership.md: 0d2f19cff1d4625d678a25c87bcc55fc3f2bfad4
2026-08-20-client-session-conversation-ownership.zh.md: fdb2420efff88e0a5a33dba79bebf0d072280453
/agent-note-client-session-conversation-and-ui-ownership-layers:
en: 24e6b5894fbcdc97
zh: 1fe37f9234be5ff4
/agent-note-client-session-conversation-and-ui-ownership-layers/problem:
en: 87d3188b6f534c2a
zh: e805eb702d3f0f7f
/agent-note-client-session-conversation-and-ui-ownership-layers/decision:
en: 0db1b673e3486661
zh: ce9fdf739a211943
/agent-note-client-session-conversation-and-ui-ownership-layers/layering-principles:
en: 8fa111a6c0477c2c
zh: 89bfc65c4986c521
/agent-note-client-session-conversation-and-ui-ownership-layers/layering-principles/controllers-are-react-free-logic-owners:
en: 821989170ad76994
zh: 0ed142bea166fc3a
/agent-note-client-session-conversation-and-ui-ownership-layers/layering-principles/ui-adapters-own-react-integration:
en: 4d032e048364fb97
zh: 82a435531efdaa78
/agent-note-client-session-conversation-and-ui-ownership-layers/layering-principles/slot-scopes-and-standard-props-are-separate:
en: b6f585ca87e1fc6f
zh: 53fd58c3e93cf17c
/agent-note-client-session-conversation-and-ui-ownership-layers/package-ownership:
en: 2fc4b50a651b1847
zh: 7dceeecb9c58e838
/agent-note-client-session-conversation-and-ui-ownership-layers/overall-data-flow:
en: e7c11e82db080dd4
zh: 5a8a501a128366d6
/agent-note-client-session-conversation-and-ui-ownership-layers/session-controller-client:
en: b88f651b1bfb8b5e
zh: b88f651b1bfb8b5e
/agent-note-client-session-conversation-and-ui-ownership-layers/session-controller-client/scope-of-sessionsnapshot:
en: 0abb8da3074137f6
zh: 92a0074930bb63b6
/agent-note-client-session-conversation-and-ui-ownership-layers/session-controller-client/three-read-faces:
en: 87f83e04ee6bfe38
zh: 9bf3548897e80e45
/agent-note-client-session-conversation-and-ui-ownership-layers/session-controller-client/sessioneventsource:
en: 377ec73183b2e461
zh: 6f24c1f723d20938
/agent-note-client-session-conversation-and-ui-ownership-layers/session-controller-client/session-binding-lifecycle:
en: d03dd92afa683183
zh: b9b7ae5d845bf472
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session:
en: 860315b96703371d
zh: 860315b96703371d
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session/service-responsibilities:
en: d075ba28fd37bff2
zh: e2d430d1f3e89b15
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session/standard-source-registration:
en: e4be6d4b1d79b342
zh: 7cb0e8c0f6358b50
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session/scope-binding:
en: 84c20cce96035340
zh: d1cc2a2e5f86f86b
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session/sessionprovider:
en: 5d9bdb1f784f97f2
zh: a4b3de7a21b84fce
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-session/pending-interactions:
en: 85e358a03ffac4ba
zh: 54b1d5ed6197f2c2
/agent-note-client-session-conversation-and-ui-ownership-layers/workspace-controller-and-ui-workspace:
en: 45e5f41550e62a3d
zh: d4e6d8f5b397bb51
/agent-note-client-session-conversation-and-ui-ownership-layers/workspace-controller-and-ui-workspace/scope-of-workspacesnapshot:
en: db0bb2a43bbdbbcc
zh: a064d7ffc42bb4a1
/agent-note-client-session-conversation-and-ui-ownership-layers/workspace-controller-and-ui-workspace/ui-workspace-composition-responsibilities:
en: cb73b43d8b485bd0
zh: 134538a67bf6da0d
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-conversation:
en: b23aedfa06639f39
zh: b23aedfa06639f39
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-conversation/assembly-core:
en: c004ba2b21b22344
zh: ae66652c239ec213
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-conversation/definition-and-view-registries:
en: d35b868d88cff47d
zh: 0e718ca3efdbf224
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-conversation/conversation-react-adapter:
en: 913a8f9b4f481bff
zh: ca18aa731f15250f
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-conversation/input-and-composer:
en: 0a38e5b9f71f06f9
zh: 40077352131fae48
/agent-note-client-session-conversation-and-ui-ownership-layers/chat-and-trajectory-targets:
en: 8ad17fee25bef35f
zh: b5e3d07111cdde7a
/agent-note-client-session-conversation-and-ui-ownership-layers/chat-and-trajectory-targets/chat-owner:
en: 43a4a38d9500ebd4
zh: 2df24d5530ab11a7
/agent-note-client-session-conversation-and-ui-ownership-layers/chat-and-trajectory-targets/trajectory-owner:
en: c8d48f4e7ac3a6f2
zh: a65f680c30f6123c
/agent-note-client-session-conversation-and-ui-ownership-layers/approval-and-question:
en: 45e1a7d1a4f8b73a
zh: 712e01e736199846
/agent-note-client-session-conversation-and-ui-ownership-layers/approval-and-question/stable-registration:
en: 877881c5ae993245
zh: 6098103c5414c6e9
/agent-note-client-session-conversation-and-ui-ownership-layers/approval-and-question/one-waterfall-request:
en: b1ff0285ab378448
zh: 9acc318381df9cce
/agent-note-client-session-conversation-and-ui-ownership-layers/approval-and-question/one-pending-projection:
en: 4cbfb31b44db8d6e
zh: 110e5067c82bbce3
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-renderer-and-store:
en: d8de1632a217da9f
zh: 32e68fc042041f42
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-renderer-and-store/ui-renderer:
en: 928e5816ad6430ea
zh: b3e658f276d4e572
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-renderer-and-store/store:
en: bf24926000a4fc38
zh: 702ecdb4aab9dc12
/agent-note-client-session-conversation-and-ui-ownership-layers/ui-renderer-and-store/registration-and-release-order:
en: 7f9a4b5da9c857a4
zh: 6e5d5c870fcea214
/agent-note-client-session-conversation-and-ui-ownership-layers/composition-and-dependency-direction:
en: 6ec1176913cdabab
zh: b0a0c8f443e51d33
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance:
en: 53c7e08a0e422d7e
zh: 57a1417c0a4d5dd5
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance/choose-the-data-owner-first:
en: e16f4903a20d477c
zh: bfe217c7d93314ed
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance/add-session-scoped-data:
en: e5e6831f726d1e68
zh: 1a12311f64b7da5c
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance/add-a-conversation-target:
en: a5ecfa4225fa559b
zh: e1da4db4f80e246b
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance/add-a-pending-interaction-domain:
en: 19985324015f1b4a
zh: 3055d88e1173a2db
/agent-note-client-session-conversation-and-ui-ownership-layers/developer-guidance/review-checks:
en: 2800c6393a75210d
zh: 7bdf8911d3f0bb22
/agent-note-client-session-conversation-and-ui-ownership-layers/verification:
en: 04c54874beafe7ff
zh: e13dffa5d952069a
/agent-note-client-session-conversation-and-ui-ownership-layers/alternatives-considered:
en: 83dce7fe89397a9f
zh: 8076ebb1d61ba6bf
/agent-note-client-session-conversation-and-ui-ownership-layers/consequences:
en: 307497e3f0eb2158
zh: c7189a9811edb4a2
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-21-deepseek-llm-api-request-extensions.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.md
2026-08-21-deepseek-llm-api-request-extensions.md: 7a3609a3f7d8b2aa6edb634643ef234b7e3e8c07
2026-08-21-deepseek-llm-api-request-extensions.zh.md: 69426df3cc85851e448b98dc51af79555b8cbafc
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages:
en: bbb93b705960a21b
zh: 0fc6fc150215f08f
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/problem:
en: 4945ce54f66df55c
zh: 9fbd833c1d8122a7
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/decision:
en: 2388519a1afaac92
zh: 6bf758f0560e29a5
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/incremental-session-log-field:
en: 4e3138fbdd94259b
zh: 8fda801522045b88
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/plugin-package-field:
en: 0e51b8d8a1bd60fc
zh: dd18fd176c3f101f
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/deferred-inventory-caching:
en: eb69576e756f4aa1
zh: 5c1923159da3f7a2
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/verification:
en: 0bda0074b5e11b44
zh: 4989c1bb840c78ce
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/alternatives-considered:
en: 5faf7699272f99b4
zh: 7a402e24c80131cf
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/alternatives-considered/why-not-request-relative-message-references:
en: 3f03c2028adf5814
zh: c50f7f7b0af04655
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/alternatives-considered/why-not-omit-assistant-chunks-or-overlapping-event-data:
en: b6eff63f49220dcc
zh: 8e4a6c785ed2256a
/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/consequences:
en: 144fc01ad3b2b9bd
zh: 0acff935bd7835de
@@ -14,13 +14,13 @@ Both values belong only on the official DeepSeek adapter path. Adding them to `G
## Decision
`@deepseek-ai/dsh-deepseek-llm-api-extensions` registers `ctx.deepseekLlmApiExtensions`, an additive registry of top-level fields for `deepseek-official` request bodies. A contributor claims one declaration-merged field with `register()`. The adapter invokes `prepare()` after serializing the exact wire messages, passes the request cancellation signal, rejects preparation or base-field collision before HTTP, merges the detached fields, and calls the captured `accept()` transaction after HTTP 2xx. The registry stops awaiting preparation after cancellation even if a contributor ignores the signal. Acceptance failures remain request failures under `REQUEST_EXTENSION`; transport and non-2xx failures never accept a contribution. A composition without the registry retains the reusable base adapter. Shipped compositions mount the registry and both contributors: both package metadata and Session-log upload are enabled by default; `session-log-deepseek.enabled: false` disables log upload under the [default-upload decision](2026-09-14-session-log-upload-default.md). Keyless `deepseek-official` replay invokes preparation with a synthetic empty base body and the same acceptance transaction before its first recorded chunk, preserving post-2xx extension side effects rather than field bytes.
`@deepseek-ai/dsh-deepseek-llm-api-extensions` registers `ctx.deepseekLlmApiExtensions`, an additive registry of top-level fields for `deepseek-official` request bodies. A contributor claims one declaration-merged field with `register()`. The adapter invokes `prepare()` after serializing the exact wire messages, passes the request cancellation signal, rejects preparation or base-field collision before HTTP, merges the detached fields, and calls the captured `accept()` transaction after HTTP 2xx. A merged body that fails to serialize is sent without extension fields or acceptance under the [bounded-upload decision](2026-09-24-bounded-session-log-upload.md). The registry stops awaiting preparation after cancellation even if a contributor ignores the signal. Acceptance failures remain request failures under `REQUEST_EXTENSION`; transport and non-2xx failures never accept a contribution. A composition without the registry retains the reusable base adapter. Shipped compositions mount the registry and both contributors: both package metadata and Session-log upload are enabled by default; `session-log-deepseek.enabled: false` disables log upload under the [default-upload decision](2026-09-14-session-log-upload-default.md). Keyless `deepseek-official` replay invokes preparation with a synthetic empty base body and the same acceptance transaction before its first recorded chunk, preserving post-2xx extension side effects rather than field bytes.
The provider-neutral `llm` package and `llm-pi-ai` contain no extension type, service lookup, field merge, or acceptance call.
## Incremental session-log field
`@deepseek-ai/dsh-session-log-deepseek` owns the default-on `dsh_session_log` field. When enabled, each request carrying a live Session id sends the contiguous canonical event suffix after the greatest durable `session-log-deepseek/delivery-accepted` watermark for that same Session identity. The field includes the immutable Session header and complete event envelopes. A 2xx appends a new watermark for the transmitted `throughSeq`; that event enters the following request's suffix. Forked logs retain parent watermark ids, so a child starts from sequence zero under its own identity. Concurrent acceptances may arrive out of order, and the maximum watermark remains authoritative. A process-local fold scans each Session event once and incrementally consumes later appends; a new Session object or HMR generation rebuilds the fold from durable history.
`@deepseek-ai/dsh-session-log-deepseek` owns the default-on `dsh_session_log` field. When enabled, each request carrying a live Session id sends the longest contiguous canonical event run after the greatest durable `session-log-deepseek/delivery-accepted` watermark for that same Session identity that fits the `maxBytes` limit of the [bounded-upload decision](2026-09-24-bounded-session-log-upload.md). The field includes the immutable Session header and complete event envelopes. A 2xx appends a new watermark for the transmitted `throughSeq`; that event enters the following request's suffix. Forked logs retain parent watermark ids, so a child starts from sequence zero under its own identity. Concurrent acceptances may arrive out of order, and the maximum watermark remains authoritative. A process-local fold scans each Session event once and incrementally consumes later appends; a new Session object or HMR generation rebuilds the fold from durable history.
The failure direction is at least once. A transport or provider rejection records no watermark. A crash after remote acceptance but before the watermark persists causes replay after resume, never a skipped sequence. Existing session checkpoints persist the event; the upload plugin owns no second store.
@@ -85,7 +85,7 @@ About 98% of the measured v1 real-session events were `assistant/chunk`. Omittin
## Consequences
Official DeepSeek requests carry active package versions to their resolved `baseURL`, including configured gateways. Unless Session-log upload is disabled, each eligible request also carries the complete newly unaccepted Session suffix. The fields are model-hidden and add no prompt tokens or KV-cache changes, but can substantially increase HTTP body size. Manifest resolution, field collision, acceptance logging, or provider schema rejection fails the model request rather than silently dropping metadata.
Official DeepSeek requests carry active package versions to their resolved `baseURL`, including configured gateways. Unless Session-log upload is disabled, each eligible request also carries newly unaccepted Session events, up to `maxBytes` per request. The fields are model-hidden and add no prompt tokens or KV-cache changes, but can substantially increase HTTP body size. Manifest resolution, field collision, acceptance logging, or provider schema rejection fails the model request rather than silently dropping metadata. A merged body that fails to serialize is the exception: the request proceeds without extension fields and logs a warning.
The `delivery-accepted` event becomes part of the canonical log and is itself delivered on a later request. Crash recovery can duplicate a suffix but does not infer acceptance from assistant output or create a second local cursor store. Direct calls without a live Session omit the session field; host package inventory remains available.
@@ -14,13 +14,13 @@ Status: implemented
## 决策
`@deepseek-ai/dsh-deepseek-llm-api-extensions` 注册 `ctx.deepseekLlmApiExtensions`,即 `deepseek-official` 请求正文顶层字段的增量注册表。贡献方通过 `register()` 认领一个经声明合并的字段。适配器在序列化确切协议消息后调用 `prepare()`、传入请求取消信号,在 HTTP 前拒绝准备失败或基础字段冲突,合并分离字段,并在 HTTP 2xx 后调用捕获的 `accept()` 事务。即使贡献方忽略信号,注册表也会在取消后停止等待准备。接受失败仍以 `REQUEST_EXTENSION` 使请求失败;传输失败与非 2xx 失败绝不会接受贡献。未挂载注册表的组合会保留可复用基础适配器。随附组合会挂载注册表与两个贡献方:插件包元数据和会话日志上传均默认开启;按[默认上传决策](2026-09-14-session-log-upload-default.zh.md),设置 `session-log-deepseek.enabled: false` 可关闭日志上传。无密钥 `deepseek-official` 回放会使用合成的空基础正文执行准备,并在第一个已记录分片前调用同一接受事务;它保持的是 2xx 后扩展副作用,而非字段字节。
`@deepseek-ai/dsh-deepseek-llm-api-extensions` 注册 `ctx.deepseekLlmApiExtensions`,即 `deepseek-official` 请求正文顶层字段的增量注册表。贡献方通过 `register()` 认领一个经声明合并的字段。适配器在序列化确切协议消息后调用 `prepare()`、传入请求取消信号,在 HTTP 前拒绝准备失败或基础字段冲突,合并分离字段,并在 HTTP 2xx 后调用捕获的 `accept()` 事务。合并后的正文无法序列化时,按[有上限上传决策](2026-09-24-bounded-session-log-upload.zh.md)不带扩展字段发送,也不执行接受。即使贡献方忽略信号,注册表也会在取消后停止等待准备。接受失败仍以 `REQUEST_EXTENSION` 使请求失败;传输失败与非 2xx 失败绝不会接受贡献。未挂载注册表的组合会保留可复用基础适配器。随附组合会挂载注册表与两个贡献方:插件包元数据和会话日志上传均默认开启;按[默认上传决策](2026-09-14-session-log-upload-default.zh.md),设置 `session-log-deepseek.enabled: false` 可关闭日志上传。无密钥 `deepseek-official` 回放会使用合成的空基础正文执行准备,并在第一个已记录分片前调用同一接受事务;它保持的是 2xx 后扩展副作用,而非字段字节。
提供方无关的 `llm` 包与 `llm-pi-ai` 不包含任何扩展类型、服务查找、字段合并或接受调用。
## 增量会话日志字段
`@deepseek-ai/dsh-session-log-deepseek` 拥有默认开启的 `dsh_session_log` 字段。启用后,每个携带存活会话 id 的请求都会发送该确切会话身份最大持久 `session-log-deepseek/delivery-accepted` 水位之后的连续权威事件后缀。该字段包含不可变会话 header 与完整事件信封。2xx 会为已发送的 `throughSeq` 追加新水位;该事件会进入下一次请求的后缀。Fork 日志会保留父级水位 id,因此子会话会在自己的身份下从序列零开始。并发接受可能乱序到达,最大水位仍保持权威。进程内 fold 会让每条会话事件只被扫描一次,并增量消费后续追加;新的会话对象或 HMR generation 会从持久历史重建该 fold。
`@deepseek-ai/dsh-session-log-deepseek` 拥有默认开启的 `dsh_session_log` 字段。启用后,每个携带存活会话 id 的请求都会发送该确切会话身份最大持久 `session-log-deepseek/delivery-accepted` 水位之后、能放进[有上限上传决策](2026-09-24-bounded-session-log-upload.zh.md)中 `maxBytes` 上限的最长连续权威事件段。该字段包含不可变会话 header 与完整事件信封。2xx 会为已发送的 `throughSeq` 追加新水位;该事件会进入下一次请求的后缀。Fork 日志会保留父级水位 id,因此子会话会在自己的身份下从序列零开始。并发接受可能乱序到达,最大水位仍保持权威。进程内 fold 会让每条会话事件只被扫描一次,并增量消费后续追加;新的会话对象或 HMR generation 会从持久历史重建该 fold。
失败方向为至少一次。传输失败或提供方拒绝不会记录水位。远端接受后、水位持久化前发生崩溃,会在恢复后触发重放,绝不会跳过序列。现有会话检查点会持久化该事件;上传插件不拥有第二份存储。
@@ -85,7 +85,7 @@ Status: implemented
## 后果
DeepSeek 官方请求会把存活包版本发送到解析后的 `baseURL`,包括已配置 gateway。除非关闭会话日志上传,否则符合条件的请求还会携带完整的未接受会话新后缀。这些字段对模型不可见,不增加提示词 token,也不改变 KV Cache,但可能显著增大 HTTP 正文。Manifest 解析、字段冲突、接受记录或提供方 schema 拒绝会使模型请求失败,而不会静默丢弃元数据。
DeepSeek 官方请求会把存活包版本发送到解析后的 `baseURL`,包括已配置 gateway。除非关闭会话日志上传,否则符合条件的请求还会携带新的未接受会话事件,每次最多 `maxBytes`。这些字段对模型不可见,不增加提示词 token,也不改变 KV Cache,但可能显著增大 HTTP 正文。Manifest 解析、字段冲突、接受记录或提供方 schema 拒绝会使模型请求失败,而不会静默丢弃元数据。合并后的正文无法序列化是例外:请求不带扩展字段继续发送,并记录一条告警。
`delivery-accepted` 事件会成为权威日志的一部分,并在后续请求中自行交付。崩溃恢复可能重复后缀,但不会根据 assistant 输出推断接受,也不会创建第二份本地游标存储。缺少存活会话的直接调用会省略会话字段;宿主包清单仍然可用。
@@ -1,6 +1,40 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-22-single-dsh-application-launcher.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-22-single-dsh-application-launcher.md
2026-08-22-single-dsh-application-launcher.md: 46a627eed652a0a0edaf7b900510b5d369efcdf0
2026-08-22-single-dsh-application-launcher.zh.md: b7fa0f2b35c2fbf6c3a28f463b73170c84547a40
/agent-note-one-dsh-launcher-for-application-profiles:
en: c0b608af89f3a9b4
zh: 2995eef6243889d5
/agent-note-one-dsh-launcher-for-application-profiles/problem:
en: 34b82725480cf15b
zh: 83cff42d5a38e64f
/agent-note-one-dsh-launcher-for-application-profiles/decision:
en: a15c7c13f167e5ac
zh: a15c7c13f167e5ac
/agent-note-one-dsh-launcher-for-application-profiles/decision/launch-scope:
en: 9cea027468d5d37c
zh: 359c6cb7842b8b7f
/agent-note-one-dsh-launcher-for-application-profiles/decision/profile-applications:
en: 44028538e06420d3
zh: 71cf992b7847d822
/agent-note-one-dsh-launcher-for-application-profiles/decision/typescript-sdk-customization:
en: 8ee88035cf64eeb3
zh: 6184e50fc4d47348
/agent-note-one-dsh-launcher-for-application-profiles/decision/python-runtime:
en: e154533170f1cdb6
zh: 20f8f0d5e111f447
/agent-note-one-dsh-launcher-for-application-profiles/decision/enforcement:
en: 9ce8d86b65064f38
zh: 27b8ad426cb319a2
/agent-note-one-dsh-launcher-for-application-profiles/existing-decisions-and-supersession:
en: 71599a4df773fe78
zh: d12ae1625d11cc9c
/agent-note-one-dsh-launcher-for-application-profiles/alternatives-considered:
en: 763d9f86e10af3db
zh: e87b35f1f7425da7
/agent-note-one-dsh-launcher-for-application-profiles/verification:
en: 0b883651974d3ac3
zh: 8ed0bb3ee97a25f8
/agent-note-one-dsh-launcher-for-application-profiles/consequences:
en: 8453d34835bf6ada
zh: 86308a497c969b81
@@ -1,6 +1,229 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-23-client-derived-tool-presentation.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-23-client-derived-tool-presentation.md
2026-08-23-client-derived-tool-presentation.md: 931276fa6d4c0590746b6c59eeae9f998f05629c
2026-08-23-client-derived-tool-presentation.zh.md: b930f98da17a1cb6ecbf605e3a9f37255ba75fc9
/agent-note-client-derived-presentation-from-raw-session-tool-events:
en: de8d02e979715600
zh: 1db4d0364c30a7e3
/agent-note-client-derived-presentation-from-raw-session-tool-events/problem:
en: 9f34c53e647c69ca
zh: 551776c7cc9618b5
/agent-note-client-derived-presentation-from-raw-session-tool-events/decision:
en: 5c8de416b8fa0fb1
zh: 1662926ba8e17405
/agent-note-client-derived-presentation-from-raw-session-tool-events/decision/goals-and-non-goals:
en: 4ff7b07cb79bc9de
zh: a74ec6e7ebbede0a
/agent-note-client-derived-presentation-from-raw-session-tool-events/terminology:
en: 021106dd41176715
zh: 131caff7bd37251b
/agent-note-client-derived-presentation-from-raw-session-tool-events/architecture-and-ownership:
en: 5cc496057205b298
zh: 160158394dfa2df3
/agent-note-client-derived-presentation-from-raw-session-tool-events/architecture-and-ownership/tool-execution-and-persistence:
en: 675a1da36b918a3b
zh: 88b8d338e9cfcd79
/agent-note-client-derived-presentation-from-raw-session-tool-events/architecture-and-ownership/host-journal-reads:
en: 36345a3eb5801cdf
zh: 498fd14beaaadd9c
/agent-note-client-derived-presentation-from-raw-session-tool-events/architecture-and-ownership/client-data-and-presentation:
en: 72e14ba086d89e90
zh: a451a63c3ab9e5d8
/agent-note-client-derived-presentation-from-raw-session-tool-events/architecture-and-ownership/production-consumer-audit:
en: 5351e75c1e417359
zh: b14b28c44f723de5
/agent-note-client-derived-presentation-from-raw-session-tool-events/data-flow:
en: 357a34a2f7796545
zh: 671b1ef7b2c64cec
/agent-note-client-derived-presentation-from-raw-session-tool-events/data-flow/layer-responsibilities:
en: f6c95424849ed9c8
zh: 0c7ef9254d9f20c0
/agent-note-client-derived-presentation-from-raw-session-tool-events/remote-and-durable-data-contracts:
en: 6d865d0eb0c5e003
zh: 1eb0fb7acfb30975
/agent-note-client-derived-presentation-from-raw-session-tool-events/remote-and-durable-data-contracts/sessionevententry:
en: 178513914d9c931c
zh: 23b39e82c90a247e
/agent-note-client-derived-presentation-from-raw-session-tool-events/remote-and-durable-data-contracts/durable-log:
en: 6a0aa4dac1cf48d7
zh: 23753410e5056612
/agent-note-client-derived-presentation-from-raw-session-tool-events/remote-and-durable-data-contracts/presentationmeta:
en: 51f99cfca9c4c808
zh: ce95bab241d306f7
/agent-note-client-derived-presentation-from-raw-session-tool-events/host-design:
en: 16fd2b3e545ede21
zh: 4d28f52132495441
/agent-note-client-derived-presentation-from-raw-session-tool-events/host-design/performance-constraints:
en: 102b14e3eb9367ff
zh: d391099dbc41db24
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-session-and-conversation:
en: 46a772ac51da43a2
zh: 8709a7e3e6a872f1
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-session-and-conversation/root-and-ptc-dispatch-subcalls:
en: 2c8ff511a5527a72
zh: 3eeddc9686ff1709
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-session-and-conversation/missing-call-head:
en: b9efc339173e546e
zh: c7639861b3b96e83
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-session-and-conversation/argument-and-metadata-narrowing:
en: 1ec566ca574374c7
zh: 4bab6b7050a57afa
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design:
en: f40f0a8ee8c055c0
zh: 6957b7372956113c
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/generic-tool-row:
en: 20ff82b092325c5c
zh: 1afd5441a9816117
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/terminal-card:
en: eab7f366df331b6e
zh: d82499e2a982206f
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/diff-card:
en: ea384415c94f82da
zh: 5f146c6cb534e1db
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/read-card:
en: 0fd9413ae837a36d
zh: 0e421eb162021983
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/search-card:
en: 5a655646431ad75b
zh: 67cafcbead983495
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/web-card:
en: bc6415353d231ae0
zh: a4614630b60d1dc1
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-card-model-design/renderers-already-using-raw-blocks:
en: b8fc7a1a4dbdd45e
zh: ea97490599b29481
/agent-note-client-derived-presentation-from-raw-session-tool-events/deliverables:
en: f1769a479af834d4
zh: 083397eeed5263b8
/agent-note-client-derived-presentation-from-raw-session-tool-events/fixtures-and-test-data:
en: e5b42aa311079bd7
zh: ec4cf97037ece7e0
/agent-note-client-derived-presentation-from-raw-session-tool-events/presentation-equivalence-matrix:
en: 30915c26728eeafe
zh: eea04dea7b4604a5
/agent-note-client-derived-presentation-from-raw-session-tool-events/client-extension-contract:
en: 96619dfd5ef299cf
zh: 253df98eb42ad75e
/agent-note-client-derived-presentation-from-raw-session-tool-events/failures-and-fallback:
en: 4cca3e16a9f2d13b
zh: 6952abf98801837d
/agent-note-client-derived-presentation-from-raw-session-tool-events/same-named-host-providers:
en: 12b3304157f058ad
zh: 497fa0defe1bd2cd
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope:
en: 25ddd2f604230fd0
zh: 7f3b1b5863252635
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope/session-controller:
en: 23ff740eb2e5245f
zh: 72c9907849e56656
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope/session-controller-client:
en: 57d3babfb1ce3429
zh: 80284ebf7ad31446
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope/ui-conversation-chat-and-trajectory:
en: dafc7a3c08c1823a
zh: 426ef3358597c64a
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope/ui-tool-and-deliverables:
en: 9e090419d542afe8
zh: 8e1b743d750bd402
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-scope/fixtures-documentation-and-generated-artifacts:
en: 99f628433b484f98
zh: 65536e9b4c3dacc4
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix:
en: 5fae53c1eaed3f11
zh: bbce23df01398151
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/host:
en: 0150b57068fef08a
zh: 5fe2e638b0fd1aa8
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/client-conversation:
en: b04bf4f1c89917b5
zh: 8757c90691c48712
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/client-card-model:
en: 7d57f2e54d287fce
zh: 6b96d4fa8e4a6b0f
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/deliverables:
en: 434f4f269d9b0858
zh: 3eeb8ac42364fb25
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/assembly-and-browser:
en: 5c43e9a729a57a4f
zh: aef26f6ef83f1fe1
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-matrix/static-and-documentation:
en: d25ffb1f8f60e04c
zh: 3a105c9669a9b978
/agent-note-client-derived-presentation-from-raw-session-tool-events/verification-commands:
en: f562776ceda2ac53
zh: 24c833727dc5c260
/agent-note-client-derived-presentation-from-raw-session-tool-events/shipped-invariants:
en: 3377510eb7639807
zh: 1d7cdf2a67cf9bde
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered:
en: 6119e2aff3b6be5a
zh: 6119e2aff3b6be5a
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/optimize-only-backscanargs-and-retain-views:
en: a478eeddf0f47cf7
zh: e9943194d90cf793
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/add-a-presenter-registry-to-the-client:
en: 96a616a8296de2ad
zh: 988b7f46698aed1c
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/have-the-conversation-tool-definition-produce-one-unified-view:
en: 088a7896e8967523
zh: da6f8ddaaf2923a7
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/delete-presentationmeta:
en: 41c11f4e2c14917f
zh: f06d53dbd7170557
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/persist-canonical-tool-results:
en: a6b1064482cb48c5
zh: 3fe58419d0aec36d
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/delete-host-presenter-apis:
en: 6bfc4306addf18d4
zh: f03c6460d4207e83
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/import-host-tool-implementations-into-the-client:
en: d709f38059905c10
zh: f216be6b8cb18938
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/query-presentation-from-the-host-per-result:
en: bc8905288acaa820
zh: ff551936bd5ea93f
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/allow-presentation-enhancements:
en: fc270977e320fd0a
zh: bb77a11ec6973d03
/agent-note-client-derived-presentation-from-raw-session-tool-events/alternatives-considered/accept-temporary-generic-degradation:
en: 1a8fd108d32bd199
zh: 5cd1c7adf3fe824d
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences:
en: fc74ce3d77d3f6f1
zh: 5bf52b18d86ea925
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/client-and-host-logic-drift:
en: 9314413ed5b41d10
zh: 0cca0d80eb421b9c
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/same-named-providers-lack-stable-identity:
en: 81e3e790bb32e2b2
zh: 2b0f0194ee22e414
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/metadata-is-unknown-json:
en: 631d7726c1bfb908
zh: 52e58e2e0aae1610
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/preset-owned-projection-availability:
en: c12c5a464eefe88a
zh: d184c0cefbbabfee
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/two-targets-must-stay-synchronized:
en: 9ee330e015d9b569
zh: 11d50bce62b91298
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/deliverables-has-a-hidden-dependency:
en: c9f4fc5ce7c0e6cc
zh: bb1b73b7313112e2
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/fixtures-can-create-false-confidence:
en: 5f21119c0a360eaa
zh: f656f35d802ec74a
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/incorrectly-refreshing-snapshots:
en: aeab59c94afe3c5f
zh: 77378f5aa76e9056
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/documentation-drift:
en: 4c724d879b27bd5d
zh: 63b58c6ab26d7934
/agent-note-client-derived-presentation-from-raw-session-tool-events/consequences/remote-protocol-narrowing:
en: d7e581086940fafa
zh: d452320fee6ef875
/agent-note-client-derived-presentation-from-raw-session-tool-events/relationship-to-existing-decisions:
en: f7501cfad1c94062
zh: 2574582ee86c3c4a
/agent-note-client-derived-presentation-from-raw-session-tool-events/deferred:
en: dcd92bc33fbb1885
zh: 3d1ea8a6b3f3f3a7
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-23-locale-owned-client-ui-copy.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.md
2026-08-23-locale-owned-client-ui-copy.md: bc4d8efbce1f246f712e3afe6af40d1518e8cb17
2026-08-23-locale-owned-client-ui-copy.zh.md: ce996a4aafc392e739bec2eccd8714cfeff7d8e9
/agent-note-locale-owned-client-ui-copy:
en: 048ebc19d489b40d
zh: 681d1c4167f0101f
/agent-note-locale-owned-client-ui-copy/problem:
en: b007d31d9998b878
zh: 857921e0d57288f9
/agent-note-locale-owned-client-ui-copy/decision:
en: 8a5e0abec93fcb91
zh: bf9fe95e48fc7eb6
/agent-note-locale-owned-client-ui-copy/verification:
en: bc9daa07456e8496
zh: 9edeae0d970cc6b2
/agent-note-locale-owned-client-ui-copy/alternatives-considered:
en: b04fd6aaa9b4fff5
zh: 7551d86cad9a862a
/agent-note-locale-owned-client-ui-copy/consequences:
en: fd435e249b7409e1
zh: e0b147cfcb565516
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-24-browser-token-authentication.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-24-browser-token-authentication.md
2026-08-24-browser-token-authentication.md: 47d6afe1bf4cd8169eb4e8ec92a30bf0fee32c8a
2026-08-24-browser-token-authentication.zh.md: 13ecf55e41c7bb1455177bdd6a87a3a83d94ca6f
/agent-note-browser-launch-token-authentication:
en: 7ab4daa548c2b5a7
zh: 33a76129efc2079a
/agent-note-browser-launch-token-authentication/problem:
en: 01293500639c9d79
zh: 6d19e4843955c811
/agent-note-browser-launch-token-authentication/decision:
en: 063f9698b8a94287
zh: 848b2c1134b7a100
/agent-note-browser-launch-token-authentication/verification:
en: 189b36d0fc5f3a17
zh: 08993cb585204fc0
/agent-note-browser-launch-token-authentication/alternatives-considered:
en: 5275c87f19fe6eee
zh: ccb922367c4bb3e2
/agent-note-browser-launch-token-authentication/consequences:
en: 0714a8a7cc74918a
zh: 0f3878b09463ab2e
@@ -1,6 +1,46 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-25-electron-desktop-packaging-and-updates.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.md
2026-08-25-electron-desktop-packaging-and-updates.md: a985e1c91a1ccdb9c4aab0bc519974f9b6fafd4a
2026-08-25-electron-desktop-packaging-and-updates.zh.md: 17ace865477d4fae3650b56d6725be07c7bd0e0f
/agent-note-package-and-update-the-electron-desktop-application:
en: eb6e843bc5a11195
zh: b245e9a3615e01f0
/agent-note-package-and-update-the-electron-desktop-application/problem:
en: 5a39322836f06cd9
zh: 7a7ab48fe38a5788
/agent-note-package-and-update-the-electron-desktop-application/decision:
en: bd6d1e19da0d5a87
zh: f194ae90331a27ea
/agent-note-package-and-update-the-electron-desktop-application/ownership:
en: 50e16f318c5d0e1a
zh: 84b2ba8f1a6932b0
/agent-note-package-and-update-the-electron-desktop-application/filesystem-layout:
en: 4990a8ba137e28f0
zh: b12f68d30a5d18fa
/agent-note-package-and-update-the-electron-desktop-application/installation-and-resolution:
en: 29def175ab33b7d6
zh: 87e55ec28c20c7c1
/agent-note-package-and-update-the-electron-desktop-application/updates-and-recovery:
en: 9c9e8a54a11bec8b
zh: 305cf1f6ed374d0b
/agent-note-package-and-update-the-electron-desktop-application/security-and-release-policy:
en: 4fb110927a3ed7a9
zh: 5a263577f097490a
/agent-note-package-and-update-the-electron-desktop-application/implementation:
en: 041a6d35ed61b149
zh: 617c6b90a6f4fa4d
/agent-note-package-and-update-the-electron-desktop-application/alternatives-considered:
en: 10b1b0a8afe38def
zh: 0a4df988f72b8d11
/agent-note-package-and-update-the-electron-desktop-application/consequences:
en: 44dc044cfcd6ec17
zh: 5e978dec54783b4e
/agent-note-package-and-update-the-electron-desktop-application/review-decisions:
en: 54c4c2a4bcdfa834
zh: c280351bb3bf085f
/agent-note-package-and-update-the-electron-desktop-application/risks:
en: af59c819ae700ee1
zh: 6c0b4b80690fc6a2
/agent-note-package-and-update-the-electron-desktop-application/related-proposals:
en: b6c0cbd39966f1ec
zh: 5c7a919abec643ba
@@ -1,6 +1,58 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-25-session-observations-and-projection-owned-client-state.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-25-session-observations-and-projection-owned-client-state.md
2026-08-25-session-observations-and-projection-owned-client-state.md: 8573ea89fae6f52a9d28cc75261aea529df4f075
2026-08-25-session-observations-and-projection-owned-client-state.zh.md: 55c477e994df72ef8f6b6e4bb97b8b35e5783c9b
/agent-note-session-observations-and-projection-owned-client-state:
en: 00b84161c373744e
zh: 7243e7f32ae1fa3f
/agent-note-session-observations-and-projection-owned-client-state/problem:
en: af1f72affe6ae77e
zh: 3d76b6310bc572b1
/agent-note-session-observations-and-projection-owned-client-state/decision:
en: 00e13f9c63b7820a
zh: b043556c3b8d9f50
/agent-note-session-observations-and-projection-owned-client-state/decision/data-flow:
en: 480284ae1a6ce210
zh: d42c72ada9f019f8
/agent-note-session-observations-and-projection-owned-client-state/decision/observation-is-the-point-read-unit:
en: fac92f8547482a49
zh: 60240c47fbe4611f
/agent-note-session-observations-and-projection-owned-client-state/decision/source-resolution-and-lifetime:
en: e550ae9892474276
zh: fb6a2d9e91ebd4d9
/agent-note-session-observations-and-projection-owned-client-state/decision/projection-execution-boundary:
en: 148de86941b90f41
zh: c065a8e96e28b9d7
/agent-note-session-observations-and-projection-owned-client-state/decision/read-audiences:
en: 888f62659f4d868d
zh: e74491e8c85046ee
/agent-note-session-observations-and-projection-owned-client-state/decision/replayable-client-facts-are-projection-owned:
en: efded09f0cd30a8e
zh: 5e16580a39ff3359
/agent-note-session-observations-and-projection-owned-client-state/decision/client-merge-rules:
en: fb8740be674e4708
zh: 7dc0c89558f51792
/agent-note-session-observations-and-projection-owned-client-state/decision/domain-applications:
en: 4dcae9e00148b11e
zh: acfd1b6831cf50fe
/agent-note-session-observations-and-projection-owned-client-state/decision/failure-and-readiness-boundaries:
en: 0f90a8bccedf9e71
zh: 8452dfdf0af00fb3
/agent-note-session-observations-and-projection-owned-client-state/decision/ownership-matrix:
en: 4f25ea5ac5b18fb3
zh: 30af4b15936fc455
/agent-note-session-observations-and-projection-owned-client-state/decision/extension-rules:
en: 110ca8005f618ad1
zh: 8f3e83d59334b278
/agent-note-session-observations-and-projection-owned-client-state/decision/relationship-to-existing-decisions:
en: 8d699dfc22ab5c5f
zh: 8dcd9fc6bd1594db
/agent-note-session-observations-and-projection-owned-client-state/verification:
en: df17217023668428
zh: 88f7da4deffc6bf9
/agent-note-session-observations-and-projection-owned-client-state/alternatives-considered:
en: a25138b4298cda16
zh: 92799a9bd8867d47
/agent-note-session-observations-and-projection-owned-client-state/consequences:
en: e1f8bd8fa68de603
zh: 5afcd06f2611bc1e
@@ -25,8 +25,7 @@ flowchart LR
List["list / search"] --> Corpus["SessionQuery corpus"]
Follow["follow"] --> Observe["observeSession"]
Page["page / attachment / fork"] --> Observe
Subagent["subagent list / continuation"] --> Corpus
Subagent --> Observe
Subagent["subagent list / continuation"] --> Observe
Corpus --> Cache["projection cache hints"]
Cache --> ClientList["Client Session list"]
Cache -->|"small miss"| Observe
@@ -71,7 +70,7 @@ The registry owns fold state; each domain owns its `init`, `apply`, `view`, sche
`view` remains an uncached synchronous conversion over folded state. Its cost is bounded by the registered projection units and is paid at snapshot publication; introducing a second cache would add invalidation states without reducing event replay.
Corpus listing remains a separate lightweight operation. `listSessions()` returns live-preferred headers without materializing every log. Session list and subagent list first use live projection state or durable projection-cache rows. Session list may take one complete observation for an individually stored artifact within its configured small-log limit when cached metadata cannot establish whether it is blank; a large or unreadable cache miss remains visible with unknown hints.
Corpus listing remains a separate lightweight operation. `listSessions()` returns live-preferred headers without materializing every log. Session list first uses live projection state or durable projection-cache rows. Subagent discovery reads parent-catalog projections through exact observations. Session list may take one complete observation for an individually stored artifact within its configured small-log limit when cached metadata cannot establish whether it is blank; a large or unreadable cache miss remains visible with unknown hints.
`session.follow` publishes a required opening snapshot containing header, cursor, the initial event window, and a complete projection baseline. Reconnect replaces the previous generation from another complete snapshot. `session.page` is reserved for older-history reads and gap repair. Observation-only reads never activate an Agent; only an ordinary follow may retain its prepared observation and request promotion after the opening snapshot has been delivered.
@@ -86,7 +85,7 @@ Each public operation chooses one query and projection policy. The choice is par
| `session.follow` | One exact observation | All, carried in the opening snapshot | Ordinary cold Session only, after snapshot delivery |
| `session.page` | One exact observation | None, except projection-backed subagent authorization | Never |
| Attachment and fork source | One exact observation | None unless authorization requires it | Never for the source |
| Subagent list and continuation | Corpus plus live/cache/observation resolution | All on a cold fallback; audience consumes identity or inherited values | Never for listing; continuation follows its explicit command semantics |
| Subagent list and continuation | Parent-catalog observations for listing; target observations for continuation | All; listing consumes catalog values, continuation consumes identity and inherited values | Never for listing; continuation follows its explicit command semantics |
### Replayable Client facts are projection-owned
@@ -123,7 +122,7 @@ Client-local interaction state also remains local: loading and error status, an
- **Title and list metadata.** Cached projection hints may render an existing title and determine blankness or recency. Missing hints leave those facts unknown; only the bounded small-log policy may resolve them during listing. The Client reconciles list rows with the current metadata projection: nonblank evidence excludes a Session from blank reuse, and the later prompt timestamp supplies recency. Projection stores outlive lazy Client Session instances, so instantiation reads retained metadata even before a list row is available. A stale list response cannot override a newer history or control projection.
- **Model selection.** `model/selection` records a complete provider, model, and optional reasoning effort. `modelSelection` distinguishes the last request's route from a later selection pending consumption by a request header.
- **Agent preset.** The projection initializes from immutable Session metadata and advances on preset-selection events. A missing or `null` value is not replaced with the deployment default for an existing Session.
- **Subagent identity.** The `subagent` unit remains the sole descriptor interpreter. Listing obtains candidates from the shared corpus and resolves values through live state, projection cache, or an observation rather than scanning events itself.
- **Subagent identity.** The `subagent` unit remains the sole descriptor interpreter for continuation and history authorization. Listing derives membership, mode, and label from the `subagentCatalog` projection through parent observations; descendant discovery recursively reads reachable catalogs ([parent-catalog decision](2026-09-01-parent-owned-subagent-catalog.md)).
- **Subagent presentation.** Opening projection values establish timing and identity before the Client declares the child interactive or offline, so transport loading does not masquerade as a durable state.
These migrations remove special-case Client state without making projection own provider catalogs or interaction mechanics. A domain still owns mutations and commands; projection owns only their replayable Session result.
@@ -167,14 +166,14 @@ These rules apply to new Session-derived Client state even when a direct event s
- [Reusable Session preparation](../../archived/architecture/2026-08-05-session-preparation.md) owns cold materialization, repair, reservation, and publication. Observation adds a shared read lease over that prepared object; it does not move preparation into SessionQuery.
- [Session history and Remote event transport](2026-08-18-session-history-and-event-transport.md) owns stream generations and replacement semantics. This decision supplies the exact snapshot that opens each journal generation.
- [Projection state and Client views](../../archived/architecture/2026-08-19-session-projection-state-and-client-views.md) owns the distinction between Host fold state and Client values. This decision governs where those values are consumed and how partial list hints differ from a complete baseline.
- [Subagent identity projection](../../archived/architecture/2026-08-06-subagent-list-identity-projection.md) continues to own descriptor folding, the serializable `null` sentinel, and the own-suffix sequence check. This decision supersedes only its independent corpus merge and direct cold-inspection path: listing now uses SessionQuery's corpus and observation.
- [The parent-catalog decision](2026-09-01-parent-owned-subagent-catalog.md) owns subagent discovery. Descriptor folding, the serializable `null` sentinel, and the own-suffix sequence check remain relevant to continuation and history authorization, not catalog identity.
- The broader [session projection and command-log proposal](../../proposed/architecture/2026-07-27-session-projection-and-command-log.md) remains proposed for the portions not represented by shipped code. This decision records the shipped observation and Client-ownership subset.
## Verification
Persistence and SessionQuery tests pin shared cold loading, cancellation, live-source races, retained observations, disposal, and all-or-none projection calculation. Session Controller and Gateway tests pin snapshot-first opening, replacement reconnect, older-page reads, gap repair, list-cache hints, bounded small-log fallback, and promotion after snapshot delivery.
Client tests pin higher-sequence-wins projection storage, title updates, model catalog and selection readiness, preset roster refresh and Session-specific selection, and subagent loading without transient offline presentation. Subagent tests pin corpus enumeration, cache and observation fallback, lifecycle witnesses, bounded cold reads, and no Agent activation during listing.
Client tests pin higher-sequence-wins projection storage, title updates, model catalog and selection readiness, preset roster refresh and Session-specific selection, and subagent loading without transient offline presentation. Subagent tests pin parent-catalog order, recursive traversal, branch diagnostics, cancellation, fork isolation, and no Agent activation during listing.
## Alternatives considered
@@ -25,8 +25,7 @@ flowchart LR
List["list / search"] --> Corpus["SessionQuery corpus"]
Follow["follow"] --> Observe["observeSession"]
Page["page / attachment / fork"] --> Observe
Subagent["subagent list / continuation"] --> Corpus
Subagent --> Observe
Subagent["subagent list / continuation"] --> Observe
Corpus --> Cache["projection cache hints"]
Cache --> ClientList["Client Session list"]
Cache -->|"small miss"| Observe
@@ -71,7 +70,7 @@ Registry 拥有 fold state;各领域拥有自己的 `init`、`apply`、`view`
`view` 保持为 folded state 上无 cache 的同步转换。其成本由已注册 projection unit 数量界定,并在 snapshot 发布时支付;引入第二层 cache 只会增加 invalidation 状态,无法减少 event replay。
语料库 list 仍是独立的轻量操作。`listSessions()` 返回 live-preferred header,而不物化每份日志。Session list 与 subagent list 先读取 live projection 状态或持久 projection-cache row。当 cache 无法判断 Session 是否为空,且该 Session 拥有的独立产物未超过配置的小日志限制时,Session list 可以执行一次完整 observation;大型或不可读的 cache miss 仍以 hints 未知但 row 可见的方式返回。
语料库 list 仍是独立的轻量操作。`listSessions()` 返回 live-preferred header,而不物化每份日志。Session list 先读取 live projection 状态或持久 projection-cache row。Subagent 发现通过精确 observation 读取父目录 projection。当 cache 无法判断 Session 是否为空,且该 Session 拥有的独立产物未超过配置的小日志限制时,Session list 可以执行一次完整 observation;大型或不可读的 cache miss 仍以 hints 未知但 row 可见的方式返回。
`session.follow` 发布必需的 opening snapshot,其中包含 header、cursor、首个事件窗口和完整 projection baseline。重连使用另一份完整 snapshot 替换上一 generation。`session.page` 仅用于旧历史读取与 gap repair。只读 observation 不激活 Agent;只有普通 follow 可以保留 prepared observation,并在 opening snapshot 已交付后请求 promotion。
@@ -86,7 +85,7 @@ Registry 拥有 fold state;各领域拥有自己的 `init`、`apply`、`view`
| `session.follow` | 一份精确 observation | 全算,并由 opening snapshot 携带 | 仅普通 cold Session,且在 snapshot 交付后 |
| `session.page` | 一份精确 observation | 不计算,但 projection-backed subagent 鉴权除外 | 从不 |
| Attachment 与 fork source | 一份精确 observation | 鉴权不要求时不计算 | source 从不激活 |
| Subagent list 与 continuation | Corpus 加 live/cache/observation 解析 | cold fallback 全算;audience 只消费 identity 或继承值 | Listing 从不;continuation 遵循显式命令语义 |
| Subagent list 与 continuation | Listing 观察父目录;continuation 观察目标 | 全算;listing 消费目录值,continuation 消费身份与继承值 | Listing 从不;continuation 遵循显式命令语义 |
### 可回放的 Client 事实归 projection 所有
@@ -123,7 +122,7 @@ Client 本地交互状态也继续留在本地:loading 和 error 状态、打
- **Title 与 list metadata。** Cached projection hints 可以渲染已有 title,并判断 blankness 或 recency。Hints 缺失时这些事实保持未知;listing 期间只有有界小日志策略可以解析它们。Client 使用当前 metadata projection 对账列表行:非空白事实会将 Session 排除在空白复用之外,较晚的 prompt 时间用于最近活动排序。Projection store 的生命周期长于惰性创建的 Client Session 实例,因此实例化时即使尚无列表行,也会读取已保留的元数据。过期列表响应不能覆盖较新的 history 或 control projection。
- **Model selection。** `model/selection` 记录完整 provider、model 和可选 reasoning effort。`modelSelection` 区分上一请求使用的 route,以及等待 request header 消费的较晚 selection。
- **Agent preset。** Projection 从不可变 Session metadata 初始化,并随 preset-selection event 推进。对于现有 Session,缺失或 `null` 值不会替换成部署默认值。
- **Subagent identity。** `subagent` unit 仍是唯一 descriptor interpreter。Listing 从共享 corpus 获得 candidate,并通过 live state、projection cache 或 observation 解析值,不自行扫描 event。
- **Subagent identity。** `subagent` unit 仍是继续执行与历史授权的唯一 descriptor interpreter。Listing 通过父级 observation 从 `subagentCatalog` projection 派生成员关系、模式与标签;后代发现递归读取可达目录([父目录决策](2026-09-01-parent-owned-subagent-catalog.zh.md))。
- **Subagent presentation。** Opening projection value 在 Client 宣布 child 可交互或离线前建立 timing 与 identity,因此 transport loading 不会伪装成 durable state。
这些迁移删除特殊 Client state,但不会让 projection 接管 provider catalog 或交互机制。领域仍拥有 mutation 和 command;projection 只拥有其可回放 Session 结果。
@@ -167,14 +166,14 @@ Client 本地交互状态也继续留在本地:loading 和 error 状态、打
- [可复用 Session preparation](../../archived/architecture/2026-08-05-session-preparation.md)拥有冷物化、修复、reservation 和发布。Observation 在该 prepared object 之上增加共享读取 lease,并未把 preparation 移入 SessionQuery。
- [Session 历史与 Remote event transport](2026-08-18-session-history-and-event-transport.zh.md)拥有 stream generation 与 replacement 语义。本决策提供每个日志 generation 的精确 opening snapshot。
- [Projection state 与 Client view](../../archived/architecture/2026-08-19-session-projection-state-and-client-views.md)拥有 Host fold state 和 Client value 的区分。本决策规定这些值在哪里消费,以及部分 list hints 与完整 baseline 的差别。
- [Subagent identity projection](../../archived/architecture/2026-08-06-subagent-list-identity-projection.md)继续拥有 descriptor folding、可序列化 `null` sentinel 和 own-suffix sequence 检查。本决策只取代其中独立 corpus merge 和直接 cold inspection 路径:listing 改为使用 SessionQuery corpus 和 observation。
- [父目录决策](2026-09-01-parent-owned-subagent-catalog.zh.md)拥有 subagent 发现机制。Descriptor folding、可序列化 `null` sentinel 和 own-suffix sequence 检查仍用于继续执行与历史授权,不用于目录身份。
- 更广泛的 [session projection 与 command-log 提案](../../proposed/architecture/2026-07-27-session-projection-and-command-log.zh.md)仍为 proposed,其中尚未由已交付代码体现的部分不受影响。本决策记录已经交付的 observation 与 Client ownership 子集。
## 验证
Persistence 与 SessionQuery 测试固定共享冷加载、取消、live-source race、retained observation、dispose 和 all-or-none projection 计算。Session Controller 与 Gateway 测试固定 snapshot-first opening、replacement reconnect、旧分页读取、gap repair、list-cache hints、小日志有界 fallback,以及 snapshot 交付后的 promotion。
Client 测试固定 higher-sequence-wins projection store、title 更新、model catalog 与 selection readiness、preset roster refresh 与 Session 专属选择,以及不会短暂展示离线状态的 subagent loading。Subagent 测试固定 corpus 枚举、cache 与 observation fallback、lifecycle witness、有界冷读,以及 listing 期间不激活 Agent。
Client 测试固定 higher-sequence-wins projection store、title 更新、model catalog 与 selection readiness、preset roster refresh 与 Session 专属选择,以及不会短暂展示离线状态的 subagent loading。Subagent 测试固定父目录顺序、递归遍历、分支诊断、取消、fork 隔离,以及 listing 期间不激活 Agent。
## 考虑过的替代方案
@@ -1,6 +1,25 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-27-adjacent-agent-steer-messaging.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.md
2026-08-27-adjacent-agent-steer-messaging.md: 47d9bd05c24871a14f78ebfa0afb8c13a6c2754d
2026-08-27-adjacent-agent-steer-messaging.zh.md: 1fd0fc39b937287ac34a2862c7cb9cde90256c09
/agent-note-adjacent-agents-share-one-steer-send-message-operation:
en: 758d31ae04ce0d4f
zh: 112475efbd52b9f6
/agent-note-adjacent-agents-share-one-steer-send-message-operation/problem:
en: c988b8a3be4e6f19
zh: b58011fd8d2e878e
/agent-note-adjacent-agents-share-one-steer-send-message-operation/decision:
en: 1188c699ce6e6ca2
zh: 4d5b974cd1216f06
/agent-note-adjacent-agents-share-one-steer-send-message-operation/decision/one-model-tool-and-one-return-instruction:
en: 8a4be155a4984ca8
zh: 00c2a61da2443530
/agent-note-adjacent-agents-share-one-steer-send-message-operation/decision/complete-removal-and-reintroduction-condition:
en: 5a9ec6478cf7430c
zh: f4c2f067cc72040e
/agent-note-adjacent-agents-share-one-steer-send-message-operation/alternatives-considered:
en: 1f62d5d938144666
zh: dec0f30228c5b7a7
/agent-note-adjacent-agents-share-one-steer-send-message-operation/consequences:
en: 6a01449bef67c9ab
zh: 9ed7184a4d48038c
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-27-handle-based-session-persistence.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.md
2026-08-27-handle-based-session-persistence.md: e2f07856b7ef8ffd8180ed7ff515210c95dde29b
2026-08-27-handle-based-session-persistence.zh.md: 472a1024887ecca67245de27f52c68ec0b34caa1
/agent-note-handle-based-session-persistence:
en: ca49a1cfae00a590
zh: f1fe21b5dbaf0d68
/agent-note-handle-based-session-persistence/problem:
en: e4a62db37d44cc11
zh: 860058651d2817de
/agent-note-handle-based-session-persistence/decision:
en: 52184217a0939497
zh: 404783efc001e6cc
/agent-note-handle-based-session-persistence/alternatives-considered:
en: f3f7a3abe905c97d
zh: 28018bc45290a455
/agent-note-handle-based-session-persistence/consequences:
en: 5917a573cbdc5fa4
zh: 3c3769070539a0a9
/agent-note-handle-based-session-persistence/related:
en: 07a1b7d5a0f9b0f7
zh: 9bfa134b62ff3df7
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-27-outbound-proxy-policy.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-27-outbound-proxy-policy.md
2026-08-27-outbound-proxy-policy.md: e588ff751fd18762fbe5e24aa17f9bbbc4ff8deb
2026-08-27-outbound-proxy-policy.zh.md: 57faea256120f5f76ecc4dab1bd8709003672fd0
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request:
en: b19652a0e1cc1826
zh: 4d3511e4f0db5b9d
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request/problem:
en: 70e5f3ed33010c98
zh: 5437d943953f5a40
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request/decision:
en: efe23161a54f70c5
zh: e24ee097918b2724
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request/alternatives-considered:
en: df44eb15557b95fe
zh: b757e53da4c0a99f
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request/consequences:
en: 6a4acbab915f1bd1
zh: 2c8ffd62ba74ff96
/agent-note-one-outbound-proxy-policy-installed-before-anything-can-request/testing:
en: 0d7eaa666c94a5cd
zh: 210fa098f154d137
@@ -1,6 +1,31 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-28-ctx-remote-failure-vocabulary.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-28-ctx-remote-failure-vocabulary.md
2026-08-28-ctx-remote-failure-vocabulary.md: 7238ae23b4581ab645b2bc9a780b77dc4a59d574
2026-08-28-ctx-remote-failure-vocabulary.zh.md: db0b2969bc94c3d9c848b187a0521ce5ec387492
/agent-note-one-remote-failure-vocabulary-for-ctx-remote:
en: 3aca057ba2c3ae29
zh: 3d54024d40265a2a
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/problem:
en: 990d46f713fb6303
zh: 592cd6128a9640b1
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/decision:
en: 120e2fb97ac765d8
zh: 5d5f110db4a9b717
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/code-ownership:
en: cc1d8b88f7349b77
zh: 70f010e3310e2667
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/discrimination-by-code:
en: 8ca8ea2f3236569f
zh: ffca80a5157af245
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/fixed-host-facts:
en: 0dfb0ca5cf67b296
zh: baaa890425996fb3
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/what-the-wire-carries:
en: 346e655fe98b95bd
zh: 24185f170ef97811
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/alternatives-considered:
en: d92f46d0827ad0d1
zh: 640f223d3a27559b
/agent-note-one-remote-failure-vocabulary-for-ctx-remote/consequences:
en: 20d2d65d555ef680
zh: f8a3de3ce72058c7
@@ -1,6 +1,37 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-28-subprocess-native-containment.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-28-subprocess-native-containment.md
2026-08-28-subprocess-native-containment.md: 88acee2d41fab878a0e50380cbb87eaece8e7296
2026-08-28-subprocess-native-containment.zh.md: 53406f99531953a0330abf08be150da845f37aab
/agent-note-native-owners-contain-escaped-subprocess-descendants:
en: 161c05f390ea3f51
zh: 1c1c83ad4f9780dd
/agent-note-native-owners-contain-escaped-subprocess-descendants/problem:
en: a88b160c6c1f57e5
zh: 0b1a7cb68e9aaabd
/agent-note-native-owners-contain-escaped-subprocess-descendants/decision:
en: 0469a956a95bccdf
zh: 2c5ea38a2841e1ae
/agent-note-native-owners-contain-escaped-subprocess-descendants/decision/linux-scope-and-one-shot-bootstrap:
en: 582e6f5f5f7cc940
zh: b47cee599d22aaa2
/agent-note-native-owners-contain-escaped-subprocess-descendants/decision/windows-runner-and-job:
en: a6401ee73bb173b7
zh: 45b9cc7fea6f7921
/agent-note-native-owners-contain-escaped-subprocess-descendants/decision/private-dispatch-and-protocol:
en: bf25e4b385bf9299
zh: 6ed1062fbe49f3cf
/agent-note-native-owners-contain-escaped-subprocess-descendants/decision/fallback-and-cleanup:
en: 19da14bf2234744f
zh: 8f723b1c9c8a3a58
/agent-note-native-owners-contain-escaped-subprocess-descendants/existing-decisions-and-supersession:
en: 8f24a2276aff4bd2
zh: a3a36dd28f3ab0e0
/agent-note-native-owners-contain-escaped-subprocess-descendants/verification:
en: 900e10a3f9cd3b67
zh: efc5d9f09a0e8e5a
/agent-note-native-owners-contain-escaped-subprocess-descendants/alternatives-considered:
en: 12bbc028fbb14667
zh: 9fea4359308337bd
/agent-note-native-owners-contain-escaped-subprocess-descendants/consequences:
en: 0151145ee6281267
zh: 5bd2e53ad58107e9
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-30-retain-ignorable-external-session-events.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.md
2026-08-30-retain-ignorable-external-session-events.md: e085e429a6ad49cf742694cec7dda05770a5b8a1
2026-08-30-retain-ignorable-external-session-events.zh.md: 1fe4f81441503287961b993eae444fa4385f4803
/agent-note-retain-ignorable-session-events-for-external-plugins:
en: 09f4f7ee764601c3
zh: af6ead8e96015e51
/agent-note-retain-ignorable-session-events-for-external-plugins/problem:
en: d2df1eb3602af45d
zh: fd162b1c214f1494
/agent-note-retain-ignorable-session-events-for-external-plugins/decision:
en: a4162e65cf6768f3
zh: bb700d9630642e7e
/agent-note-retain-ignorable-session-events-for-external-plugins/alternatives-considered:
en: 30ec097e3ba4e951
zh: 3e90fc035d04b09b
/agent-note-retain-ignorable-session-events-for-external-plugins/consequences:
en: 5f65bfb81f172d49
zh: 069d41d6bda9f8af
@@ -1,6 +1,19 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-31-alpha-historical-unknown-event-refusal.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.md
2026-08-31-alpha-historical-unknown-event-refusal.md: c63b36f63206e0992416239483d908b0645a98c2
2026-08-31-alpha-historical-unknown-event-refusal.zh.md: 231c46c11486b05a69a200b857a0ea6df35b6e79
/agent-note-alpha-session-migration-refuses-every-unknown-historical-event:
en: 4c7472b402f5dd38
zh: 1d7aa8233d13a083
/agent-note-alpha-session-migration-refuses-every-unknown-historical-event/problem:
en: 8864f28d0139c490
zh: 2aa7b6eceb5510c0
/agent-note-alpha-session-migration-refuses-every-unknown-historical-event/decision:
en: 62afb095b98209a6
zh: 55b3eae2a6f64989
/agent-note-alpha-session-migration-refuses-every-unknown-historical-event/consequences:
en: 8416322aefd92a3d
zh: 6e06f732ae2f48fc
/agent-note-alpha-session-migration-refuses-every-unknown-historical-event/alternatives-considered:
en: 3adeafa6fb02ab56
zh: daf6c67c43804da7
@@ -1,6 +1,22 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-31-explicit-agent-runtime-identity.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-31-explicit-agent-runtime-identity.md
2026-08-31-explicit-agent-runtime-identity.md: f52b8ec116c312a27306fe73dc0bd5b99fcd9039
2026-08-31-explicit-agent-runtime-identity.zh.md: 6b6fd2f2ea1f1645069264f09fd53c3f71e1d02f
/agent-note-explicit-agent-identity-at-runtime-boundaries:
en: f5e76516df025fc5
zh: 462fe05b46e6c1ea
/agent-note-explicit-agent-identity-at-runtime-boundaries/problem:
en: 0b737a098e4e19ce
zh: 97b4254c4533114f
/agent-note-explicit-agent-identity-at-runtime-boundaries/decision:
en: dfee8c7c574e0001
zh: 3894ffa7beba4348
/agent-note-explicit-agent-identity-at-runtime-boundaries/verification:
en: 85130faaa171036b
zh: 06e5e9fab32dbfb4
/agent-note-explicit-agent-identity-at-runtime-boundaries/alternatives-considered:
en: 2c41456509d54d21
zh: 5704ee9a2274e300
/agent-note-explicit-agent-identity-at-runtime-boundaries/consequences:
en: 08ab86b89fc3ec6f
zh: 3866e6557858543a
@@ -1,6 +1,67 @@
# Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
# side as of the last confirmed-consistent state. Both languages carry equal authority;
# after editing either side, bring the other along and re-record with:
# Bilingual-pair consistency record for 2026-08-31-released-session-format-migrations.md (docs/i18n/README.md): per heading
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
# After editing either side, bring the other along and re-record with:
# pnpm run verify-translation-pairing --write .agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.md
2026-08-31-released-session-format-migrations.md: 00672af920cf8369022b4274c1c50552f5407a7e
2026-08-31-released-session-format-migrations.zh.md: 9404d8f454b7c17be69ae064c405c4dcc0794f88
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages:
en: 1a1d3bd9c2311ed6
zh: 366eded1272efd63
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem:
en: a1f71d6123b80d10
zh: 8e05da34ba92686a
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem/whole-artifact-performance-failure:
en: 85ba92c98dd97591
zh: c464cdd860add9c7
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem/the-interfaces-prevented-local-fixes-from-composing:
en: e582758acd683242
zh: c5a5a27af1f33af7
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision:
en: 8756dc3c6235ba0b
zh: 8089fde062466c5c
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision/stage-and-context-protocol:
en: ed34c76e1a2c0a42
zh: 0efe92c6c9ea314e
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision/adjacent-version-ownership:
en: 31e5b2e26604110e
zh: 18d27da9b4661702
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision/physical-codecs-and-packed-runs:
en: 42e8d5405375cba7
zh: efd201181e47d579
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision/jsonl-integration:
en: 662859038e888672
zh: a1646f3ff5710e8d
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/decision/durable-format-and-publication-rules:
en: 6e2a76ae14612199
zh: 3c90fd32d292f9d0
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem-to-solution-mapping:
en: 65968c18c3d1b7e9
zh: 2e43d7ce1391d554
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem-to-solution-mapping/parent-catalog-prerequisites:
en: 81b40660b49dbfb0
zh: 67cfa3f43b6eb53e
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/problem-to-solution-mapping/catalog-scan-measurements:
en: 6b7a79fb81e58bac
zh: 51fc00eaf3a0c3dc
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification:
en: 061a112f789c9966
zh: e78b0b1a83837eae
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification/benchmark-input-and-meanings:
en: 3cbcde15a46b4136
zh: fe899549758f8ee3
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification/physical-decode:
en: 1c79e71ee17a156f
zh: 7563d24c9f2befe8
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification/historical-file-cold-open:
en: 09fe5e0aa4f57c6e
zh: a103dc631d1b0b79
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification/current-format-cold-open:
en: 60f7de284f6ded10
zh: 877b300503a4615d
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/verification/streaming-serial-migration-breakdown:
en: b9183e6c34a960dd
zh: d64ffecb289e7b74
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/consequences:
en: fa005a93cc0b0906
zh: 248a08f307d4c1b7
/agent-note-released-session-formats-migrate-through-stateful-streaming-stages/alternatives-considered:
en: b70193af15b1a2ea
zh: d8a23e47e6b9cf88
Loaded 100 of 4061 files, more files were not shown because too many files have changed in this diff. Show more