From 31a83ebc4bb97217126430000d2ce8dd947d56f4 Mon Sep 17 00:00:00 2001 From: mektpoy Date: Sun, 20 Sep 2026 19:01:15 +0800 Subject: [PATCH 01/60] refactor(client): let chrome rows own the macOS window drag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- ...19-window-drag-coverage-contract.i18n.yaml | 6 + ...026-09-19-window-drag-coverage-contract.md | 63 +++ ...-09-19-window-drag-coverage-contract.zh.md | 63 +++ ...3-macos-hidden-titlebar-vibrancy.i18n.yaml | 4 +- ...26-09-13-macos-hidden-titlebar-vibrancy.md | 8 +- ...09-13-macos-hidden-titlebar-vibrancy.zh.md | 8 +- apps/web/tests/window-drag-coverage.e2e.ts | 492 ++++++++++++++++++ apps/web/tsconfig.json | 1 + .../client/ui-conversation/README.i18n.yaml | 4 +- packages/client/ui-conversation/README.md | 2 +- packages/client/ui-conversation/README.zh.md | 2 +- .../client/skeleton/ConversationHeader.tsx | 2 +- .../skeleton/ConversationRoot.module.css | 14 +- .../client/skeleton/ConversationSession.tsx | 6 +- .../tests/skeleton.client.spec.tsx | 2 +- .../ui-dockkit/src/components/TabPanel.tsx | 2 +- .../src/components/dockkit.module.css | 21 +- .../tests/app-region-styles.client.spec.ts | 50 +- packages/client/ui-layout/README.i18n.yaml | 4 +- packages/client/ui-layout/README.md | 2 +- packages/client/ui-layout/README.zh.md | 2 +- .../ui-layout/src/client/AppFrame.module.css | 40 +- .../client/ui-layout/src/client/AppFrame.tsx | 23 - .../ui-layout/tests/app-frame.client.spec.tsx | 8 +- .../src/client/PluginManagerPage.module.css | 19 +- .../src/client/PluginManagerPage.tsx | 6 +- .../client/ui-settings-general/package.json | 4 +- .../src/client/SettingsRoot.module.css | 9 +- .../src/client/SettingsRoot.tsx | 9 +- .../src/client/shell/SidebarRight.module.css | 28 +- .../src/client/shell/SidebarRight.tsx | 33 +- .../tests/region-nudge-styles.client.spec.ts | 46 -- .../tests/seat.client.spec.tsx | 41 -- packages/client/ui-sidebar/README.i18n.yaml | 4 +- packages/client/ui-sidebar/README.md | 2 +- packages/client/ui-sidebar/README.zh.md | 2 +- .../src/client/SidebarRoot.module.css | 25 +- .../ui-sidebar/src/client/SidebarRoot.tsx | 4 +- .../sidebar-snapshot.client.spec.tsx.snap | 5 + .../tests/app-region-styles.client.spec.ts | 272 ++++++++-- .../client/ui-theme/tests/stylesheet-scan.ts | 21 +- packages/client/web/src/base.css | 44 +- packages/client/web/src/boot.ts | 9 + packages/client/web/src/window-drag/recall.ts | 171 ++++++ .../client/web/src/window-drag/regions.ts | 106 ++++ .../web/tests/base-styles.client.spec.ts | 36 +- .../tests/window-drag-recall.client.spec.ts | 375 +++++++++++++ .../tests/window-drag-regions.client.spec.ts | 69 +++ pnpm-lock.yaml | 170 +++--- tsconfig.host.json | 4 +- 50 files changed, 1931 insertions(+), 412 deletions(-) create mode 100644 .agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml create mode 100644 .agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.md create mode 100644 .agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.zh.md create mode 100644 apps/web/tests/window-drag-coverage.e2e.ts delete mode 100644 packages/client/ui-sidebar-right/tests/region-nudge-styles.client.spec.ts create mode 100644 packages/client/web/src/window-drag/recall.ts create mode 100644 packages/client/web/src/window-drag/regions.ts create mode 100644 packages/client/web/tests/window-drag-recall.client.spec.ts create mode 100644 packages/client/web/tests/window-drag-regions.client.spec.ts diff --git a/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml new file mode 100644 index 0000000000..1138c29772 --- /dev/null +++ b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml @@ -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/implemented/architecture/2026-09-19-window-drag-coverage-contract.md +2026-09-19-window-drag-coverage-contract.md: 71d9b192de7b10e10462c3f9360b1e2f56644b77 +2026-09-19-window-drag-coverage-contract.zh.md: edbcc010e69e1b6b9f7e02761efaa8798d338801 diff --git a/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.md b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.md new file mode 100644 index 0000000000..71d9b192de --- /dev/null +++ b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.md @@ -0,0 +1,63 @@ +# Agent Note: Window drag coverage as a contract + +Status: implemented + +English | [中文](2026-09-19-window-drag-coverage-contract.zh.md) + +## Problem + +The macOS desktop window's draggable area is authored twice. The layout decides where chrome rows are — their heights and what they contain — while hand-written app-region declarations decide what drags: one row declaration per chrome row (the sidebar's top strip and logo row, ui-dockkit's strip row, the Conversation header, the plugin manager's page heads) plus per-box subtractions spread across ui-web, ui-settings-general and ui-sidebar-right. The two descriptions are kept in step by hand, so they drift: a row whose box does not match the band leaves chrome outside the drag surface (the reported "the header drags, but some blank runs and controls do not") or puts content inside it (a press that misses a control by a few pixels drags the window, and a double click there runs the system's title-bar action). + +## Decision + +Coverage becomes a contract with four executed parts: + +1. ui-web's `window-drag/regions.ts` publishes the composition rule as an executable model — a point is draggable when the last collected app-region box containing it declares `drag`, the geometry-in-DOM-order composition the native window applies — together with `INTERACTIVE_SELECTOR`, the single source for the interactive subtraction ui-web base.css declares. The base-styles spec asserts the sheet declares exactly that list, so the two cannot drift. +2. The shell declares the darwin drag surface exactly once: `html[data-platform='darwin'] [data-window-drag]` in ui-web base.css. Every chrome row marks its own element in markup, so the row's box is the window's draggable geometry and no fixed band has to match any row's height. The ui-theme app-region gate holds a manifest that pairs each row's markup mark with its sheet, its class selector and its authored height, and refuses a mark on any element the manifest does not name — so a row that stops marking itself, an unmarked row added to the composition, and a mark on a content container all fail the same gate. +3. The browser lane gains `window-drag-coverage`, which boots the shipped composition in Chromium with `data-platform='darwin'` and asserts, through the model, that no interactive box lies inside the drag surface, plus per-row probes for the chrome rows and a page whose head row marks itself while its scrollable body stays content. +4. The shell owns the one recollection watcher — ui-web's `window-drag/recall.ts`, installed by the boot kernel. It measures every marked row once per frame while the surface can be moving, sets `data-window-drag-recall` on the body for each frame whose geometry changed, and clears it on the frame that finds the geometry settled. No chrome row carries a pulse of its own. + +The native half — whether a press really drags or reaches the page — stays a checklist, because no keyless CI lane reaches the window server: the state matrix below is run for any change to this layer. + +## Alternatives considered + +**Publishing measured rectangles from JavaScript as synthetic drag boxes.** Geometry would have to be re-derived at pointer cadence, and one stale frame is exactly the swallow class this work removes; CSS-derived regions cannot be stale by construction. + +**A global background drag (the `movableByWindowBackground` reading).** Dragging anywhere that is not a control would break text selection and blank-area clicks. + +**One drag declaration per row in each row's own sheet.** That was this work's first shape, with a manifest pinning each row's height and the band over it. Every sheet then restates the window's geometry, and a row whose box moves in layout alone still has to be re-declared in CSS; one shell rule over a markup mark keeps the declaration count at one, and the manifest pairs the marks with the geometry that the gate can still check. + +**Pinning current coverage as one golden snapshot.** That would freeze the two failure classes next to the correct behaviour; the manifest separates the invariant (no swallowed control) from the gaps (a budget that only shrinks). + +## Consequences + +- A new control needs no drag declaration: the interactive selector subtracts it. A new chrome row marks its element `data-window-drag` and adds a manifest entry pinning its height, so no band arithmetic and no other sheet changes. +- A row's own box is the whole draggable geometry, and a content container is never one. The plugin manager's detail views mark the head row they share, not the detail container they are rendered in: marking the container would drag the window over its text and form labels, and the lane samples the body below that head to keep it so. +- No coverage gap remains: every chrome row owns its run, and the gate asserts the whole package tree declares the drag surface in exactly two places — the shell's mark rule and the Windows caption row. The plugin manager's page head and its detail views' shared head row include the 48px clearance inside the row, so the entry-page gap closed with them. +- The settings overlay portals beside `#root` (like the Modal primitive) and dropped its per-sheet `no-drag` rule: a covering surface inside the root precedes the columns' chrome, so a drag row declared later would override its subtraction, and ui-web base.css's `body > :not(#root)` rule subtracts a portalled one wherever it overlaps a drag row. The browser lane asserts that placement with the overlay open. +- A row that slides across a hidden/visible edge cannot rely on the layout change alone: Electron recollects the window's drag rects only when a computed app-region value changes (electron#32341), and Blink skips hidden boxes when it collects them. The watcher closes that gap for every row at once — it re-arms on a DOM change that touches a marked row or on a marked row's box resizing, then pulses each frame in which a box moved — so the right panel carries no pulse of its own. + +## Testing + +- `packages/client/web/tests/window-drag-regions.client.spec.ts` — the composition rule, including order sensitivity and box edges. +- `packages/client/web/tests/base-styles.client.spec.ts` — base.css declares the model's interactive selector, the one darwin drag rule, and the recall mark's subtraction. +- `packages/client/ui-theme/tests/app-region-styles.client.spec.ts` — drag ownership, the row manifest, and each row's mark; a mark outside the manifest or a changed row height fails. +- `packages/client/ui-dockkit/tests/app-region-styles.client.spec.ts` — the strip row's own subtraction; its drag is the markup mark's, so the sheet declares none. +- `packages/client/web/tests/window-drag-recall.client.spec.ts` — the watcher through its two seams: what re-arms it, what it ignores, the settle loop, the shell defaults, and disposal. +- `apps/web/tests/window-drag-coverage.e2e.ts` — real Chromium: no swallowed control, per-row probes, a detail page whose head row drags while its body does not, and the recall pulse the shell fires while the right panel slides. +- Real-machine verification (2026-09-20, both platforms, HID-level pointer input plus window-frame readback): the macOS matrix above ran on a real `hiddenInset` window and the Windows cells ran on a Windows 11 ARM64 VM — chrome rows drag, content and the covering overlay do not, controls keep their clicks, and the right panel's strip row drags after its slide. + +## Manual state matrix + +Run on the packaged macOS app for any change to this layer. Each cell means both halves: drag the row's blank run (the window must move) and click the row's controls (they must act rather than drag). + +| State | Rows to walk | +| --- | --- | +| Sidebar expanded, Conversation selected, view tabs shown | sidebar top strip, sidebar logo row, conversation title row, conversation tab-strip row, every control in those rows | +| Sidebar expanded, Conversation selected, single view (no tabs) | same rows, plus the transcript's first rows below the header | +| Sidebar collapsed | Conversation header over the centre, `shell.leading` seat controls, reopen and New session | +| Right sidebar pushed | panel strip row and its controls, the pane body run below the strip, the pane divider's top run | +| Right sidebar fullscreen | panel strip row at the traffic lights, first pane's strip inset, its controls | +| Entry page (guide, plugin manager, settings) | page head with its 48px clearance, its first control row, and a detail page's head row over its body | +| Window fullscreen on/off | every row above with the traffic lights hidden, in both sidebar states | +| Double click in a chrome row's blank run | on Windows the caption row takes the system title-bar action (maximize/restore); on macOS the darwin rows are app-region areas rather than a title bar, so no system action is expected there — only the controls keep their own double click | diff --git a/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.zh.md b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.zh.md new file mode 100644 index 0000000000..edbcc010e6 --- /dev/null +++ b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.zh.md @@ -0,0 +1,63 @@ +# Agent Note: 把窗口拖拽覆盖变成契约 + +Status: implemented + +[English](2026-09-19-window-drag-coverage-contract.md) | 中文 + +## Problem + +macOS 桌面窗口的可拖区域被写了两遍。布局决定 chrome 行在哪——它们多高、装了什么;手写的 app-region 声明决定什么能拖:每个 chrome 行一条行声明(侧栏顶条与 logo 行、ui-dockkit 的 strip 行、会话 header、插件管理的页头),加上散落在 ui-web、ui-settings-general、ui-sidebar-right 的逐盒减除。两份描述靠人肉保持一致,于是会漂:盒子与 band 不匹配的行,要么有 chrome 落在拖拽面之外(就是反馈里的"header 能拖,但有些空白与控制不能"),要么有内容落进拖拽面(点偏几个像素就变成拖窗口,双击那里还会触发系统标题栏行为)。 + +## Decision + +覆盖变成由四部分组成的、可执行的契约: + +1. ui-web 的 `window-drag/regions.ts` 把合成规则发布成可执行模型——当包含某点的最后一个 app-region 盒声明 `drag` 时该点可拖,这正是原生窗口施加的"按 DOM 顺序的几何合成"——并发布 `INTERACTIVE_SELECTOR`,作为 ui-web base.css 交互减除的唯一来源。base-styles spec 断言样式表声明的正是该列表,两者无法漂移。 +2. 外壳只声明一次 darwin 拖拽面:ui-web base.css 里的 `html[data-platform='darwin'] [data-window-drag]`。每个 chrome 行在 markup 里给自己的元素打标,于是该行自己的盒子就是窗口的可拖几何,不需要任何固定 band 去匹配行高。ui-theme 的 app-region 门禁持有一份清单,把每行的 markup 标记与其样式表、类选择器和写死的高度配成一条,并拒绝清单未点名的元素上的标记——行不再打标、新增未打标的行、把标记打在内容容器上,都会在同一条门禁上失败。 +3. 浏览器车道增加 `window-drag-coverage`:以 `data-platform='darwin'` 在 Chromium 里启动真实组合,用模型断言没有任何交互盒落在拖拽面内,并对各 chrome 行逐一探测,另加一个"页头行打标、其可滚动正文保持内容"的页面。 +4. 外壳持有唯一那个重收集 watcher——ui-web 的 `window-drag/recall.ts`,由引导内核安装。在表面可能移动期间,它每帧测量每个被打标的行,凡该帧几何发生变化就在 body 上打 `data-window-drag-recall`,并在第一次发现几何稳定的那一帧清掉它。任何 chrome 行都不再自带脉冲。 + +原生那一半——一次按下到底是拖窗口还是到达页面——仍是清单,因为没有无密钥 CI 车道能到达窗口服务器:对本层的任何改动都要走下面的状态矩阵。 + +## Alternatives considered + +**用 JavaScript 测量矩形并发布合成 drag 盒。** 几何得按指针节拍重新推导,而一帧陈旧正是这项工作要消除的吞点击类别;CSS 推导的区域在构造上不可能陈旧。 + +**全局背景拖拽(`movableByWindowBackground` 的读法)。** 只要不是控件就能拖,会破坏文本选择与空白处点击。 + +**每个行在自己的样式表里各声明一条 drag。** 这是本项工作最初的样子,并配一份清单钉住每行高度与覆盖它的 band。那样每个样式表都要复述窗口几何,而且只在布局里移动的盒子仍得在 CSS 里重新声明;改成"markup 打标 + 外壳一条规则"后声明只有一处,清单则继续把标记与门禁能查的几何配起来。 + +**把当前覆盖钉成一张金标准快照。** 那会把两类故障和正确行为一起冻住;清单把不变量(不得吞掉控件)与缺口(只许缩小的预算)分开。 + +## Consequences + +- 新控件不需要任何 drag 声明:交互选择器会减除它。新 chrome 行只需给元素打上 `data-window-drag` 并在清单里加一条钉住高度,无需 band 算术,也不牵动其它样式表。 +- 行自己的盒子就是完整的可拖几何,内容容器永远不是。插件管理的详情视图给它们共用的页头行打标,而不是给它所在的详情容器打标:标记容器会让窗口在它的正文与表单 label 上拖动;车道会采样该页头下方的正文来守住这一点。 +- 不再有任何缺口:每个 chrome 行自持其拖拽段,门禁断言整个包树只在两处声明拖拽面——外壳的标记规则与 Windows 标题栏行。插件管理页头与其详情视图共用的页头行都把 48px 避让量包含在行内,入口页那条缺口也随之关闭。 +- settings 浮层现在与 Modal primitive 一样 portal 到 `#root` 之外,并删掉了它自己那条 no-drag:挂在 root 内的覆盖层先于各列 chrome,后声明的 drag 行会盖掉它的减除;portal 之后由 ui-web base.css 的 `body > :not(#root)` 规则在它与 drag 行重叠处减除。车道在浮层打开时会断言这个归属。 +- 跨越隐藏/显示边界滑动的行不能只靠布局变化:只有当计算出的 app-region 值变化时,Electron 才会重新收集窗口的拖拽矩形(electron#32341),而 Blink 收集时会跳过隐藏的盒子。watcher 一次性把这个缺口对所有行补上——它在"触及被打标行的 DOM 变化"或"被打标行的盒子尺寸变化"时重新启动,随后在盒子仍在移动的每一帧发脉冲——因此右栏不再自带任何脉冲。 + +## Testing + +- `packages/client/web/tests/window-drag-regions.client.spec.ts` —— 合成规则,含顺序敏感与盒子边界。 +- `packages/client/web/tests/base-styles.client.spec.ts` —— base.css 声明的正是模型的交互选择器、唯一那条 darwin drag 规则,以及 recall 标记的减除。 +- `packages/client/ui-theme/tests/app-region-styles.client.spec.ts` —— 拖拽所有权、行清单与每行的标记;清单之外的标记或行高变化即失败。 +- `packages/client/ui-dockkit/tests/app-region-styles.client.spec.ts` —— strip 行自己的减除;它的 drag 属于 markup 标记,因此样式表一条都不声明。 +- `packages/client/web/tests/window-drag-recall.client.spec.ts` —— 通过两个 seam 驱动 watcher:什么会重新启动它、什么被它忽略、收敛循环、外壳默认值,以及销毁。 +- `apps/web/tests/window-drag-coverage.e2e.ts` —— 真 Chromium:无控件被吞、逐行探测、一个页头行可拖而正文不可拖的详情页,以及右栏滑动期间外壳发出的 recall 脉冲。 +- 真机验收(2026-09-20,双平台,HID 级指针输入 + 窗口矩形读数):上面的 macOS 矩阵在真实 `hiddenInset` 窗口上跑过,Windows 各格在 Windows 11 ARM64 虚拟机上跑过——chrome 行可拖、正文与覆盖浮层不可拖、控件保留点击、右栏 strip 行在滑入后可拖。 + +## Manual state matrix + +对本层的任何改动都要在打包 macOS 应用上跑。每个格子包含两半:拖该行的空白段(窗口必须移动),点该行的控件(必须生效而不是拖动)。 + +| 状态 | 要走的行 | +| --- | --- | +| 侧栏展开、选中会话、显示视图 tab | 侧栏顶条、侧栏 logo 行、会话标题行、会话 tab 条行,以及这些行里的每个控件 | +| 侧栏展开、选中会话、单视图(无 tab) | 同上,外加 header 之下的转录区首行 | +| 侧栏收起 | 覆盖中列的 会话 header、`shell.leading` 座的控件、重新打开与新会话 | +| 右栏 push | 面板 strip 行及其控件、strip 下方的 pane body 段、分栏分隔条的顶部一段 | +| 右栏 fullscreen | 红绿灯处的面板 strip 行、首格 strip 内边距、其控件 | +| 入口页(开始页、插件管理、设置) | 含 48px 避让量的页头、它的首个控件行,以及详情页页头行与其正文 | +| 窗口全屏开关 | 以上各行在红绿灯隐藏时、两种侧栏状态各一遍 | +| 在 chrome 行空白段双击 | Windows 上 caption 行走系统标题栏行为(最大化/还原);macOS 上 darwin 行只是 app-region 区域而非标题栏,因此那里没有系统动作——只有控件保留自己的双击 | diff --git a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml index d15870537e..99ecd869cb 100644 --- a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml @@ -2,5 +2,5 @@ # 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/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md -2026-09-13-macos-hidden-titlebar-vibrancy.md: 807c79d06c468e01b8b9df3f18a32e5fbaba1e90 -2026-09-13-macos-hidden-titlebar-vibrancy.zh.md: a521aff7624b1f9dbab18e7d0f02f61af0bdc24a +2026-09-13-macos-hidden-titlebar-vibrancy.md: 005bf783bf7396446313b598b25255bff3a8ad7a +2026-09-13-macos-hidden-titlebar-vibrancy.zh.md: 17b746962d5ffd02f23769f17c7b71170cb9689e diff --git a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md index 807c79d06c..005bf783bf 100644 --- a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md +++ b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md @@ -18,11 +18,11 @@ Every macOS web-side adjustment keys off `html[data-platform='darwin']`, which o **Native theme sync.** The vibrancy material follows `nativeTheme.themeSource`, which otherwise tracks the OS appearance and diverges from the app's own theme preference. The ui-theme boot script and ui-layout `ThemePresenter` publish `html[data-ds-theme-source]` (`light`, `dark`, or `system`; a fixed preference, including registered theme ids, publishes its resolved scheme). The app preload observes the attribute and forwards it over `dsh-desktop:native-theme-set`; main validates the value and the sender (the main window's WebContents, including its local static Web document) and assigns `nativeTheme.themeSource`. Publishing the preference rather than the resolved scheme preserves OS-follow while the preference is `system`. -**Sidebar top strip and full hide.** On darwin the sidebar opens with a 52px top strip that clears the traffic lights and carries the collapse toggle; the frame's `.leadingBand` drag band covers the same 52px geometry, so the strip declares no app-region of its own and the toggle subtracts itself through the base.css interactive rule. Collapsing the sidebar hides the column entirely — `computeColumns` takes an explicit `collapsedWidth` and the AppFrame passes 0 on darwin desktop — instead of the 56px rail the other platforms keep. The reopen affordances live in the frame's root-scoped `shell.leading` window-chrome seat, which the AppFrame mounts only while the column is fully hidden; ui-sidebar registers `HeaderLeadingControls` (open sidebar + New Session, reusing the shell's inject face and locale) into it. The seat placement, the `--dsh-frame-leading-clearance` variable panels pad by, and the removal of the earlier conversation-header seat are owned by the [shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.md). +**Sidebar top strip and full hide.** On darwin the sidebar opens with a 52px top strip that clears the traffic lights and carries the collapse toggle; the strip marks itself `data-window-drag`, so its own 52px box is the window's drag region (ui-web base.css declares the one darwin drag rule) and the toggle subtracts itself through the base.css interactive rule. Collapsing the sidebar hides the column entirely — `computeColumns` takes an explicit `collapsedWidth` and the AppFrame passes 0 on darwin desktop — instead of the 56px rail the other platforms keep. The reopen affordances live in the frame's root-scoped `shell.leading` window-chrome seat, which the AppFrame mounts only while the column is fully hidden; ui-sidebar registers `HeaderLeadingControls` (open sidebar + New Session, reusing the shell's inject face and locale) into it. The seat placement, the `--dsh-frame-leading-clearance` variable panels pad by, and the removal of the earlier conversation-header seat are owned by the [shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.md). **Window fullscreen marker.** macOS fullscreen hides the traffic lights, so layouts built around them must relax. The main process relays `isFullScreen()` over `dsh-desktop:window-fullscreen` on `enter-full-screen`, `leave-full-screen`, and each `did-finish-load`; the app preload's `syncWindowFullscreen()` mirrors it onto `html[data-fullscreen]`. Consumers: the AppFrame drops `--dsh-frame-leading-clearance` to 84px and moves the seat to `left: 12px`, the sidebar's `.topStrip` moves the toggle to the strip's left edge, and the right sidebar's fullscreen panel resets its first pane's dockkit strip inset to the ordinary 10px. -**Drag regions.** Electron computes drag regions from window geometry in DOM order, not stacking, so `-webkit-app-region: drag` is declared only inside the two allowlisted stylesheets: ui-layout `AppFrame.module.css` (the darwin `.leadingBand`, a 52px full-width `pointer-events: none` strip rendered as the frame's first child, and the Windows caption `.frame::before`) and ui-sidebar `SidebarRoot.module.css` (`.logoRow`, which extends the band below 52px). Everything interactive subtracts itself through two global ui-web base.css rules: one `:is(...)` selector opting out every interactive element (buttons, links, inputs, roles, `[tabindex]`), and one `body > :not(#root)` rule covering every overlay portaled beside `#root`. Because the drag bands mount before all content, any later no-drag box wins; content containers never declare drag, which would override earlier-mounted overlays. +**Drag regions.** Electron computes drag regions from window geometry in DOM order, not stacking, so the shell declares `-webkit-app-region: drag` once, over the mark a chrome row puts on its own box, each row's box being its draggable geometry: the sidebar's top strip and logo row (ui-sidebar), the right sidebar's dockkit strip (ui-dockkit), the Conversation header (ui-conversation), and the plugin manager's page head and shared detail head (ui-plugin-manager). The frame declares none — the Windows caption row is that platform's own chrome — so no fixed band has to match any row's height. Everything interactive subtracts itself through two global ui-web base.css rules: one `:is(...)` selector opting out every interactive element (buttons, links, inputs, roles, `[tabindex]`), and one `body > :not(#root)` rule covering every overlay portaled beside `#root`. The ordering rule those two rest on: a surface that covers the window and must stay clickable portals beside `#root` (the settings overlay does), which puts it after every drag row in document order; content containers never declare drag, which would override earlier-mounted overlays. The [coverage contract note](../architecture/2026-09-19-window-drag-coverage-contract.md) owns the manifest, the browser lane, and the manual state matrix. **Fullscreen traffic-light clearance.** ui-dockkit publishes the tab strip's start inset as `--dsh-dockkit-strip-inline-start` (fallback the design's own 10px). The right sidebar's fullscreen presentation on darwin sets 88px on the panel body and resets 10px for every non-first split cell's subtree, so exactly the pane touching the window's top-left corner clears the lights at any split depth. @@ -43,9 +43,9 @@ Every macOS web-side adjustment keys off `html[data-platform='darwin']`, which o - The macOS window gains a translucent sidebar and hidden titlebar at zero cost to other platforms: every rule is scoped to `[data-platform='darwin']`, which only the Electron preload sets. - The vibrancy material follows the app theme, including third-party registered themes (their resolved scheme). Screenshots and screen recordings differ from the flat web rendering. - The reopen controls occupy the frame's `shell.leading` seat, a public slot in the client catalog; the earlier `conversation.session.header.leading` seat is removed ([shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.md)). -- Drag-region ownership is a window-global invariant: `-webkit-app-region: drag` appears only inside the two allowlisted stylesheets (ui-layout `AppFrame.module.css`: darwin `.leadingBand` and Windows caption `.frame::before`; ui-sidebar `SidebarRoot.module.css`: `.logoRow`); other packages rely on the base.css opt-outs or add a scoped `no-drag`, never a new drag surface. The ui-theme app-region stylesheet gate enforces the allowlist over every package stylesheet. +- Drag-region ownership is a window-global invariant: `-webkit-app-region: drag` appears only in ui-web `base.css` (the one darwin rule over `data-window-drag`) and in ui-layout `AppFrame.module.css` (the Windows caption `.frame::before`); other packages rely on the base.css opt-outs or add a scoped `no-drag`, never a new drag surface. The ui-theme app-region gate pairs each chrome row's markup mark with its sheet, selector, and authored height, and refuses a mark anywhere else. - The transparent window plus vibrancy is accepted to look different in screen sharing and may flash on startup; the transparent `backgroundColor` mitigates the flash. ## Testing -ui-theme boot and ui-layout presenter specs pin the `data-ds-theme-source` publication and disposal. The ui-sidebar apply spec pins the `shell.leading` registration (component, locale, shared inject face) and its removal on teardown; the ui-layout app-frame spec pins the seat's darwin mount. The desktop main-startup spec pins the fullscreen relay (transitions, reloads, destroyed-window guard, darwin-only registration) and the preload-platform spec pins the `html[data-fullscreen]` mirror. The ui-theme corner-shape and full-round style gates cover the new stylesheet, and its app-region style gate pins drag-region ownership to the two allowlisted stylesheets across every package stylesheet. +ui-theme boot and ui-layout presenter specs pin the `data-ds-theme-source` publication and disposal. The ui-sidebar apply spec pins the `shell.leading` registration (component, locale, shared inject face) and its removal on teardown; the ui-layout app-frame spec pins the seat's darwin mount. The desktop main-startup spec pins the fullscreen relay (transitions, reloads, destroyed-window guard, darwin-only registration) and the preload-platform spec pins the `html[data-fullscreen]` mirror. The ui-theme corner-shape and full-round style gates cover the new stylesheet, and its app-region gate pins the one darwin drag rule and every chrome row's markup mark. diff --git a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md index a521aff762..17b746962d 100644 --- a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md +++ b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md @@ -18,11 +18,11 @@ Electron 主进程在 darwin 上以 `titleBarStyle: 'hiddenInset'`、`trafficLig **原生主题同步。** 毛玻璃材质跟随 `nativeTheme.themeSource`,后者默认跟踪系统外观,会与应用自身的主题偏好背离。ui-theme 引导脚本与 ui-layout 的 `ThemePresenter` 发布 `html[data-ds-theme-source]`(`light`、`dark` 或 `system`;固定偏好——包括注册主题 id——发布其解析后的配色)。应用 preload 观察该属性并经 `dsh-desktop:native-theme-set` 转发;主进程校验取值与发送者(主窗口的 WebContents,包括其本地静态 Web 文档)后赋给 `nativeTheme.themeSource`。发布偏好而非解析值,可在偏好为 `system` 时保留跟随系统。 -**侧边栏顶部条与完全隐藏。** darwin 上侧边栏展开时有一条 52px 的顶部条,避开红绿灯并承载收起按钮;框架的 `.leadingBand` 拖拽带覆盖同一 52px 几何,顶部条自身不声明 app-region,按钮经 base.css 交互规则自行减除。收起侧边栏时整列隐藏——`computeColumns` 接受显式 `collapsedWidth`,AppFrame 在 darwin 桌面传 0——而非其他平台保留的 56px rail。重新打开的入口位于框架 root 作用域的 `shell.leading` 窗口 chrome 座,由 AppFrame 仅在整列隐藏时挂载;ui-sidebar 向其注册 `HeaderLeadingControls`(打开侧边栏 + 新会话,复用 shell 的 inject face 与 locale)。座的位置、面板用于避让的 `--dsh-frame-leading-clearance` 变量,以及早先会话头部座的移除,归 [shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.zh.md) 所有。 +**侧边栏顶部条与完全隐藏。** darwin 上侧边栏展开时有一条 52px 的顶部条,避开红绿灯并承载收起按钮;顶部条自己打上 `data-window-drag`,于是它自身那 52px 盒子就是窗口的拖拽区(唯一的 darwin drag 规则由 ui-web base.css 声明),按钮经 base.css 交互规则自行减除。收起侧边栏时整列隐藏——`computeColumns` 接受显式 `collapsedWidth`,AppFrame 在 darwin 桌面传 0——而非其他平台保留的 56px rail。重新打开的入口位于框架 root 作用域的 `shell.leading` 窗口 chrome 座,由 AppFrame 仅在整列隐藏时挂载;ui-sidebar 向其注册 `HeaderLeadingControls`(打开侧边栏 + 新会话,复用 shell 的 inject face 与 locale)。座的位置、面板用于避让的 `--dsh-frame-leading-clearance` 变量,以及早先会话头部座的移除,归 [shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.zh.md) 所有。 **窗口全屏标记。** macOS 全屏隐藏红绿灯,围绕它们构建的布局必须放松。主进程在 `enter-full-screen`、`leave-full-screen` 与每次 `did-finish-load` 时经 `dsh-desktop:window-fullscreen` 转发 `isFullScreen()`;应用 preload 的 `syncWindowFullscreen()` 把它镜像到 `html[data-fullscreen]`。消费者:AppFrame 把 `--dsh-frame-leading-clearance` 降到 84px 并把座移到 `left: 12px`,侧边栏 `.topStrip` 把收起按钮移到条带左端,右侧边栏全屏面板把首格 pane 的 dockkit strip 内边距重置回常规 10px。 -**拖拽区。** Electron 按 DOM 顺序以窗口几何计算拖拽区,不看层叠,因此 `-webkit-app-region: drag` 只在两个允许清单样式表内声明:ui-layout `AppFrame.module.css`(darwin 的 `.leadingBand`——52px 全宽、`pointer-events: none`、作为框架第一个子元素渲染的条带——与 Windows 顶栏 `.frame::before`)和 ui-sidebar `SidebarRoot.module.css`(`.logoRow`,把拖拽带向 52px 以下延伸)。所有可交互内容通过 ui-web base.css 的两条全局规则自行减除:一条 `:is(...)` 选择器让每个交互元素(按钮、链接、输入框、role、`[tabindex]`)退出拖拽,一条 `body > :not(#root)` 规则覆盖所有 portal 到 `#root` 之外的浮层。拖拽带先于全部内容挂载,任何靠后的 no-drag 盒子必然生效;内容容器永不声明 drag——那会覆盖更早挂载的浮层。 +**拖拽区。** Electron 按 DOM 顺序以窗口几何计算拖拽区,不看层叠,因此外壳只声明一次 `-webkit-app-region: drag`,作用于 chrome 行打在自身盒子上的标记,行自身的盒子就是它的可拖几何:侧栏顶条与 logo 行(ui-sidebar)、右侧边栏的 dockkit strip(ui-dockkit)、会话 header(ui-conversation)、插件管理的页头与共用的详情页头(ui-plugin-manager)。框架不再声明任何 drag——Windows 标题栏行是那个平台自己的 chrome——因此没有一条固定带子需要匹配某一行的高度。所有可交互内容通过 ui-web base.css 的两条全局规则自行减除:一条 `:is(...)` 选择器让每个交互元素(按钮、链接、输入框、role、`[tabindex]`)退出拖拽,一条 `body > :not(#root)` 规则覆盖所有 portal 到 `#root` 之外的浮层。这两条规则依赖的顺序约定:覆盖窗口且必须可点的表面 portal 到 `#root` 之外(settings 浮层即如此),从而在文档顺序上晚于所有 drag 行;内容容器永不声明 drag——那会覆盖更早挂载的浮层。清单、浏览器车道与人工状态矩阵归 [覆盖契约 note](../architecture/2026-09-19-window-drag-coverage-contract.zh.md)。 **全屏避开红绿灯。** ui-dockkit 把 tab 条起始内边距发布为 `--dsh-dockkit-strip-inline-start`(回退为设计自身的 10px)。右侧边栏全屏形态在 darwin 上对面板主体设 88px,并对每个非首格 split 单元的子树重置为 10px,使得任意分屏深度下恰好只有触及窗口左上角的 pane 避开红绿灯。 @@ -43,9 +43,9 @@ Electron 主进程在 darwin 上以 `titleBarStyle: 'hiddenInset'`、`trafficLig - macOS 窗口获得半透明侧边栏与隐藏标题栏,对其他平台零成本:所有规则限定在 `[data-platform='darwin']` 下,该属性仅由 Electron preload 设置。 - 毛玻璃材质跟随应用主题,含第三方注册主题(取其解析配色)。截图与录屏与纯 Web 的平面渲染不同。 - 重新打开控件占据框架的 `shell.leading` 座,是客户端 catalog 中的公开 slot;早先的 `conversation.session.header.leading` 座已移除([shell.leading Agent Note](../architecture/2026-09-17-frame-shell-leading-window-chrome-seat.zh.md))。 -- 拖拽区归属是窗口级全局不变量:`-webkit-app-region: drag` 只出现在两个允许清单样式表内(ui-layout `AppFrame.module.css`:darwin `.leadingBand` 与 Windows 顶栏 `.frame::before`;ui-sidebar `SidebarRoot.module.css`:`.logoRow`);其他包依赖 base.css 的退出规则或添加限定范围的 `no-drag`,永不新增拖拽面。ui-theme 的 app-region 样式门禁对全部包内样式表强制该允许清单。 +- 拖拽区归属是窗口级全局不变量:`-webkit-app-region: drag` 只出现在 ui-web `base.css`(作用于 `data-window-drag` 的唯一 darwin 规则)与 ui-layout `AppFrame.module.css`(Windows 顶栏 `.frame::before`)内;其他包依赖 base.css 的退出规则或添加限定范围的 `no-drag`,永不新增拖拽面。ui-theme 的 app-region 门禁把每个 chrome 行的 markup 标记与它的样式表、选择器和写死高度配成一条,并拒绝别处的标记。 - 接受透明窗口 + 毛玻璃在屏幕共享中呈现不同、启动可能闪烁;透明 `backgroundColor` 缓解闪烁。 ## Testing -ui-theme 引导与 ui-layout presenter 测试钉住 `data-ds-theme-source` 的发布与清除。ui-sidebar apply 测试钉住 `shell.leading` 注册(组件、locale、共享 inject face)及 teardown 移除;ui-layout 的 app-frame 测试钉住 darwin 下座的挂载。desktop main-startup 测试钉住全屏转发(状态切换、重载、已销毁窗口守卫、仅 darwin 注册),preload-platform 测试钉住 `html[data-fullscreen]` 镜像。ui-theme 的 corner-shape 与 full-round 样式门覆盖新样式表,其 app-region 样式门在全部包内样式表上把拖拽区归属钉在两个允许清单样式表内。 +ui-theme 引导与 ui-layout presenter 测试钉住 `data-ds-theme-source` 的发布与清除。ui-sidebar apply 测试钉住 `shell.leading` 注册(组件、locale、共享 inject face)及 teardown 移除;ui-layout 的 app-frame 测试钉住 darwin 下座的挂载。desktop main-startup 测试钉住全屏转发(状态切换、重载、已销毁窗口守卫、仅 darwin 注册),preload-platform 测试钉住 `html[data-fullscreen]` 镜像。ui-theme 的 corner-shape 与 full-round 样式门覆盖新样式表,其 app-region 门禁钉住唯一那条 darwin drag 规则与每个 chrome 行的 markup 标记。 diff --git a/apps/web/tests/window-drag-coverage.e2e.ts b/apps/web/tests/window-drag-coverage.e2e.ts new file mode 100644 index 0000000000..80df040862 --- /dev/null +++ b/apps/web/tests/window-drag-coverage.e2e.ts @@ -0,0 +1,492 @@ +// Browser coverage for the macOS window drag surface: which chrome rows drag, +// which pixels stay content, and that no control is swallowed by the band. +// +// The lane boots the real composition in Chromium and marks the document root +// darwin — the one platform where these rules exist (ui-web base.css and +// ui-layout AppFrame scope every app-region rule to it). CDP-injected clicks +// cannot decide this class: the swallow happens in Electron's native window, so +// the claims here are geometry claims decided by the shared composition model +// (ui-web window-drag/regions.ts). +// +// Probes are anchored to stable data hooks and derived from live rects, so a +// layout change moves them rather than invalidating them. The ui-theme app-region +// gate holds the other half of the claim: it pins each row's mark, its sheet, and +// its authored height, and refuses a `data-window-drag` mark anywhere else. A +// probe whose expectation is not yet met carries `gap` and fails loudly, so a +// recorded gap shrinks here first and the manifest follows. +import { join } from 'node:path' +import { fileURLToPath } from 'node:url' +import type { Browser, Page } from 'playwright' +import { chromium } from 'playwright' +import { afterAll, beforeAll, describe, expect, it } from 'vitest' +import { + INTERACTIVE_SELECTOR, RECALL_MARK, isDraggableAt, type RegionRect, +} from '@deepseek-ai/dsh-client-web/src/window-drag/regions.ts' +import { launchWebScaffold, watchConsole, type WebScaffold } from './scaffold.ts' +import { connectFreshWorkspace, newEnglishPage, saveFailureShot } from './support.ts' + +/** One collected box: its app-region value, whether it is interactive, and where it is. */ +interface CollectedRegion extends RegionRect { + /** Whether the element itself matches the interactive selector. */ + readonly interactive: boolean + /** Sample points at which the browser's hit test reaches this element or its content. */ + readonly hits: readonly (readonly [number, number])[] +} + +/** A point the coverage table claims something about. */ +interface CoverageProbe { + /** Row the probe speaks for, for the failure message. */ + readonly row: string + /** What the point is, for the failure message. */ + readonly what: string + /** Resolves the point from the live rects captured for the state under test. */ + readonly at: () => readonly [number, number] + /** Whether the window would drag there. */ + readonly drag: boolean + /** Set when the expectation is a recorded gap the refactor must close. */ + readonly gap?: string +} + +/** A viewport rect. */ +interface Rect { + readonly x: number + readonly y: number + readonly width: number + readonly height: number +} + +const EMPTY: Rect = { x: 0, y: 0, width: 0, height: 0 } + +/** A browser-half bundle whose row registers configuration into the plugin page. */ +const FIXTURE_PLUGINS = fileURLToPath(new URL('./fixtures/plugins', import.meta.url)) + +/** Read one hook's viewport rect, or a zero rect while it is not rendered. */ +async function rectOf(page: Page, selector: string): Promise { + const locator = page.locator(selector).first() + if (await locator.count() === 0) return EMPTY + return locator.evaluate((element) => { + const rect = element.getBoundingClientRect() + return { x: rect.x, y: rect.y, width: rect.width, height: rect.height } + }) +} + +/** + * Collect every visible app-region box in DOM order. + * @param page - the page under test. + * @returns the boxes, in document order, with the interactive flag of each element. + */ +async function collectedRegions(page: Page, selector: string): Promise { + return page.evaluate((interactiveSelector) => { + const collected: { + x: number + y: number + width: number + height: number + draggable: boolean + interactive: boolean + hits: [number, number][] + }[] = [] + for (const element of Array.from(document.querySelectorAll('*'))) { + const style = getComputedStyle(element) + const region = style.getPropertyValue('-webkit-app-region') + if (region !== 'drag' && region !== 'no-drag') continue + if (style.visibility === 'hidden' || style.display === 'none') continue + const rect = element.getBoundingClientRect() + if (rect.width === 0 || rect.height === 0) continue + const interactive = element.matches(interactiveSelector) + const insetX = Math.min(2, rect.width / 4) + const insetY = Math.min(2, rect.height / 4) + const samples: [number, number][] = [ + [rect.x + rect.width / 2, rect.y + rect.height / 2], + [rect.x + insetX, rect.y + insetY], + [rect.x + rect.width - insetX, rect.y + insetY], + [rect.x + insetX, rect.y + rect.height - insetY], + [rect.x + rect.width - insetX, rect.y + rect.height - insetY], + ] + const hits = interactive + ? samples.filter(([x, y]) => { + const top = document.elementFromPoint(x, y) + return top !== null && (top === element || element.contains(top)) + }) + : [] + collected.push({ + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + draggable: region === 'drag', + interactive, + hits, + }) + } + return collected + }, selector) +} + +/** + * Interactive boxes whose press cannot reach the page, as printable descriptions. + * A sample counts only where the browser's own hit test reaches the control: a + * box clipped away by its column (the collapsed sidebar's hidden controls sit at + * negative x) is not hittable anywhere it overlaps a drag row, and a press there + * belongs to whatever is painted. + * @param regions - collected boxes in DOM order. + * @returns one description per interactive box with a hittable sample inside the drag surface. + */ +function swallowedBoxes(regions: readonly CollectedRegion[]): string[] { + return regions + .filter(region => region.interactive) + .filter(region => region.hits.some(([x, y]) => isDraggableAt(regions, x, y))) + .map(region => `${Math.round(region.x)},${Math.round(region.y)} ${Math.round(region.width)}x${Math.round(region.height)}`) +} + +/** + * Settle when the shell first pulses the drag recall mark, or false when 15s pass + * without one. Start it before the gesture under test and await it after. + * @param page - the page under test. + * @returns the pending observation of the first pulse. + */ +function firstRecallPulse(page: Page): Promise { + return page.evaluate((mark: string) => new Promise((resolve) => { + const observer = new MutationObserver((records) => { + const pulsed = records.some(record => record.attributeName === mark + && (record.target as Element).hasAttribute(mark)) + if (!pulsed) return + observer.disconnect() + resolve(true) + }) + observer.observe(document.body, { attributes: true, attributeFilter: [mark] }) + setTimeout(() => { + observer.disconnect() + resolve(false) + }, 15_000) + }), RECALL_MARK) +} + +/** + * Wait until nothing under the page is animating, so a probe measures the settled + * layout instead of a frame of a column slide. + * @param page - the page under test. + */ +async function settled(page: Page): Promise { + await expect.poll(() => page.evaluate(() => document.getAnimations() + .every(animation => animation.playState === 'finished' || animation.playState === 'idle')), + { timeout: 20_000 }).toBe(true) +} + +describe('web e2e: macOS window drag coverage', () => { + let scaffold: WebScaffold + let browser: Browser + + beforeAll(async () => { + // A manageable profile: the plugin page draws its card list — and so its + // detail views — only when the deployment runs a profile it can manage. + scaffold = await launchWebScaffold({ + profile: { packages: [{ dir: join(FIXTURE_PLUGINS, 'fixture-live-client') }] }, + }) + browser = await chromium.launch() + }, 180_000) + + afterAll(async () => { + try { await browser?.close() } + finally { await scaffold?.close() } + }) + + /** + * Open a darwin-marked page in the shipped composition. + * @returns the page and its console tripwire. + */ + async function darwinPage(): Promise<{ page: Page; tripwire: ReturnType }> { + const page = await newEnglishPage(browser) + await page.addInitScript((value: string) => { + const mark = (): void => { document.documentElement.setAttribute('data-platform', value) } + if (document.documentElement === null) document.addEventListener('DOMContentLoaded', mark, { once: true }) + else mark() + }, 'darwin') + const tripwire = watchConsole(page) + await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) + await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) + return { page, tripwire } + } + + it('leaves no interactive box inside the drag surface, and keeps the panel strip row draggable', async () => { + const { page, tripwire } = await darwinPage() + try { + await connectFreshWorkspace(page, scaffold.workspaceCwd) + const agent = scaffold.ctx.agents.list()[0] + if (agent === undefined) throw new Error('connected workspace did not create an Agent') + agent.session.append('turn/start', { turn: 1 }) + const pulsing = firstRecallPulse(page) + await page.locator('[data-sidebar-right-expand]').click() + await page.locator('[data-sidebar-right-panel][data-sidebar-right-open]').waitFor({ timeout: 15_000 }) + // The panel slides in from the frame's right edge; probing before the slide + // settles measures the hidden position, where the band does not reach. + await expect.poll(async () => page.locator('[data-sidebar-right-panel]').evaluate((element) => { + const rect = element.getBoundingClientRect() + return Math.round(innerWidth - rect.right) === 0 + && element.getAnimations({ subtree: true }) + .every(animation => animation.playState === 'finished' || animation.playState === 'idle') + }), { timeout: 15_000 }).toBe(true) + + // The shell's watcher, not the panel, is what keeps the native drag rects in + // step with the slide: it must have pulsed while the panel moved and must be + // settled now — a mark left set would subtract the whole surface. + expect(await pulsing, 'the shell pulses the drag recall mark while the panel slides').toBe(true) + // The watcher clears the mark on the frame after the geometry settles. + await expect.poll( + () => page.evaluate((mark: string) => document.body.hasAttribute(mark), RECALL_MARK), + { timeout: 5_000 }, + ).toBe(false) + + const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + const strip = await rectOf(page, '[data-dockkit-strip]') + const panel = await rectOf(page, '[data-sidebar-right-panel]') + const tabs = await rectOf(page, '[data-conversation-tabs]') + const header = await rectOf(page, '[data-slot="conversation.header"] > header') + const seat = await rectOf(page, '[data-shell-leading]') + // The sidebar column drags through its own rows (ui-sidebar), so its + // coverage is the rows' geometry rather than a frame band's height. + const toggle = await rectOf(page, 'button[aria-label="Collapse sidebar"]') + + const probes: CoverageProbe[] = [ + { + row: 'right sidebar panel strip', + what: 'the strip row top inset, above the controls', + at: () => [strip.x + strip.width / 2, strip.y + 4], + drag: true, + }, + { + row: 'right sidebar panel strip', + what: 'the run below the strip row, over the pane body', + at: () => [panel.x + panel.width / 2, strip.y + strip.height + 4], + drag: false, + }, + { + row: 'conversation header', + what: 'the blank run right of the view tabs, on the tab strip row', + at: () => [tabs.x + tabs.width + 8, tabs.y + tabs.height / 2], + drag: true, + }, + { + row: 'conversation header', + what: 'the title row blank run', + at: () => [header.x + header.width / 2, header.y + 4], + drag: true, + }, + { + row: 'conversation header', + what: 'the transcript run below the header block', + at: () => [header.x + header.width / 2, header.y + header.height + 4], + drag: false, + }, + ] + if (toggle.width > 0) { + probes.push( + { + row: 'sidebar top strip', + what: 'the blank run left of the collapse toggle', + at: () => [toggle.x - 40, toggle.y + toggle.height / 2], + drag: true, + }, + { + row: 'sidebar column', + what: 'the content run below the chrome rows', + at: () => [toggle.x - 40, toggle.y + toggle.height + 70], + drag: false, + }, + ) + } + if (seat.width > 0) { + probes.push({ + row: 'shell.leading seat', + what: 'the row of window-chrome controls', + at: () => [seat.x + 4, seat.y + seat.height / 2], + drag: false, + }) + } + + for (const probe of probes) { + const [x, y] = probe.at() + const expected = `${probe.row}: ${probe.what} at ${Math.round(x)},${Math.round(y)}` + + (probe.gap === undefined ? '' : ` (recorded gap — ${probe.gap})`) + expect(isDraggableAt(regions, x, y), expected).toBe(probe.drag) + } + + // The invariant that has no gap budget: a press inside any control box must + // reach the page instead of dragging the window. + expect(swallowedBoxes(regions), 'interactive boxes inside the drag surface').toEqual([]) + + expect(tripwire.pageErrors).toEqual([]) + } catch (error) { + await saveFailureShot(page, 'window-drag-coverage') + throw error + } finally { + await page.close() + } + }, 180_000) + + it('keeps the Conversation header draggable over the collapsed column, and the seat out of it', async () => { + const { page, tripwire } = await darwinPage() + try { + await page.getByRole('button', { name: 'Collapse sidebar', exact: true }).click() + await page.locator('[data-shell-leading]').waitFor({ state: 'visible', timeout: 15_000 }) + await settled(page) + const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + const header = await rectOf(page, '[data-slot="conversation.header"] > header') + const seat = await rectOf(page, '[data-shell-leading]') + + // With the column hidden the centre starts at the frame's left edge, where + // the Conversation header owns the run. + expect( + isDraggableAt(regions, header.x + 40, header.y + 4), + 'the Conversation header over the frame’s left edge', + ).toBe(true) + expect( + isDraggableAt(regions, seat.x + seat.width / 2, seat.y + seat.height / 2), + 'the seat holding the reopen controls', + ).toBe(false) + + expect(swallowedBoxes(regions), 'interactive boxes inside the drag surface').toEqual([]) + expect(tripwire.pageErrors).toEqual([]) + } catch (error) { + await saveFailureShot(page, 'window-drag-coverage-collapsed') + throw error + } finally { + await page.close() + } + }, 120_000) + + it('keeps an entry page’s chrome row draggable', async () => { + const { page, tripwire } = await darwinPage() + try { + await page.getByRole('button', { name: 'Plugins', exact: true }).click() + const head = page.locator('[class*="pageHead"]').first() + await head.waitFor({ timeout: 15_000 }) + await settled(page) + const rect = await head.evaluate((element) => { + const box = element.getBoundingClientRect() + return { x: box.x, y: box.y, width: box.width, height: box.height } + }) + + const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + // The page head owns its run, clearance included: that is the entry page's + // window strip, with no frame band behind it. + expect( + isDraggableAt(regions, rect.x + 40, rect.y + 8), + 'the plugin manager page head', + ).toBe(true) + expect( + isDraggableAt(regions, rect.x + 40, rect.y + rect.height + 40), + 'the page body below the head', + ).toBe(false) + + expect(swallowedBoxes(regions), 'interactive boxes inside the drag surface').toEqual([]) + expect(tripwire.pageErrors).toEqual([]) + } catch (error) { + await saveFailureShot(page, 'window-drag-coverage-entry-page') + throw error + } finally { + await page.close() + } + }, 120_000) + + it('keeps a detail page’s head row draggable and its body out of the drag surface', async () => { + const { page, tripwire } = await darwinPage() + try { + await page.getByRole('button', { name: 'Plugins', exact: true }).click() + const cards = page.locator('[data-plugin-package], [data-plugin-item]') + await cards.first().waitFor({ timeout: 30_000 }) + await settled(page) + // The card's head carries the one control that opens its page. + await cards.first().locator('button').first().click() + // The mark sits on the head row the detail views share, not on the detail + // container: marking the container would drag the window over its text and + // form labels wherever no control covers them. + const detail = page.locator('[data-plugin-item-detail], [data-plugin-detail], [data-plugin-row-detail]').first() + await detail.waitFor({ timeout: 15_000 }) + const geometry = await detail.evaluate((element) => { + const detailBox = element.getBoundingClientRect() + const headBox = element.firstElementChild?.getBoundingClientRect() + return { + detail: { x: detailBox.x, y: detailBox.y, width: detailBox.width, height: detailBox.height }, + head: headBox === undefined + ? null + : { x: headBox.x, y: headBox.y, width: headBox.width, height: headBox.height }, + viewport: { width: innerWidth, height: innerHeight }, + } + }) + if (geometry.head === null) throw new Error('the detail view rendered no head row') + const { detail: detailRect, head: headRect, viewport } = geometry + const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + + // The head's top inset is the window clearance above the crumb: blank, so + // it drags like the entry page's head. + expect( + isDraggableAt(regions, headRect.x + headRect.width / 2, headRect.y + 4), + 'the detail head row’s top inset', + ).toBe(true) + + // Below the head, a point that no control covers is content: pressing the + // description, a label, or a gap in the form must reach the page. + const interactive = regions.filter(region => region.interactive) + const bodyTop = headRect.y + headRect.height + const bodyBottom = Math.min(detailRect.y + detailRect.height, viewport.height - 4) + const dragging: string[] = [] + for (let row = 0; row < 8; row += 1) { + for (let column = 0; column < 5; column += 1) { + const x = detailRect.x + (detailRect.width * (column + 0.5)) / 5 + const y = bodyTop + ((bodyBottom - bodyTop) * (row + 0.5)) / 8 + if (y <= bodyTop || y > viewport.height - 4 || x > viewport.width - 4) continue + if (interactive.some(region => x >= region.x && x < region.x + region.width + && y >= region.y && y < region.y + region.height)) continue + if (isDraggableAt(regions, x, y)) dragging.push(`${Math.round(x)},${Math.round(y)}`) + } + } + expect(dragging, 'content points inside the detail body that drag the window').toEqual([]) + + expect(swallowedBoxes(regions), 'interactive boxes inside the drag surface').toEqual([]) + expect(tripwire.pageErrors).toEqual([]) + } catch (error) { + await saveFailureShot(page, 'window-drag-coverage-detail-page') + throw error + } finally { + await page.close() + } + }, 120_000) + + it('keeps a covering overlay out of the drag surface', async () => { + const { page, tripwire } = await darwinPage() + try { + await page.locator('button[aria-haspopup="dialog"]').first().click() + const dialog = page.locator('[role="dialog"]').first() + await dialog.waitFor({ timeout: 15_000 }) + await settled(page) + const layer = await dialog.evaluate((element) => { + const overlay = element.parentElement + const rect = overlay?.getBoundingClientRect() + return { + parentIsBody: overlay?.parentElement === document.body, + coversWindow: rect !== undefined && rect.top <= 0 && rect.bottom >= innerHeight, + } + }) + // A covering surface inside #root precedes the columns' chrome, so a drag + // row declared later would override its subtraction; beside the root, + // ui-web base.css's body rule subtracts it instead. + expect(layer.parentIsBody, 'the covering overlay portals beside #root').toBe(true) + expect(layer.coversWindow).toBe(true) + + const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + const header = await rectOf(page, '[data-slot="conversation.header"] > header') + expect( + isDraggableAt(regions, header.x + header.width / 2, 8), + 'the window top behind an open covering overlay', + ).toBe(false) + expect(swallowedBoxes(regions), 'interactive boxes inside the drag surface').toEqual([]) + expect(tripwire.pageErrors).toEqual([]) + } catch (error) { + await saveFailureShot(page, 'window-drag-coverage-overlay') + throw error + } finally { + await page.close() + } + }, 120_000) +}) diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 4508e03def..67463cc363 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -143,6 +143,7 @@ "tests/chat-long-interactions.e2e.ts", "tests/chat-continuous-conversation.e2e.ts", "tests/composer-tab-geometry.e2e.ts", + "tests/window-drag-coverage.e2e.ts", "tests/complex-history.perf.ts", "tests/pwsh-terminal.e2e.ts", "tests/workflow-run.e2e.ts" diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index b871029e8d..55087f1601 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-conversation/README.md -README.md: 16e821ed4caabae491d552a823bd69a2e976e2bd -README.zh.md: 7316b00c69ca74284b81678082d93e870dee6bbe +README.md: 2ab123cc67854bbac9631f74517633dcb625384d +README.zh.md: c852cdbad545aee75497bde79a3a6f50c4fc168e diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 16e821ed4c..2ab123cc67 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -52,7 +52,7 @@ Workspace selection uses `uiWorkspace.openWorkspace` to prepare the target and c The package occupies the root-scoped `main` key `conversation`. Its `main.conversation` shell keeps the resident `conversation.header` outside the optional-Session `conversation.content` Component Factory. The header hosts root-scoped navigation without a selected Session; titles, actions, and View tabs remain in its strict Session child. The Factory owns the shared body and Composer, reads the current Session through its standard Hook, and exposes strict-Session `views` plus root-scoped `widthControls` local positions. Its default adapter renders the existing `conversation.session` entry, while the main occurrence selects the width handles; an embedded occurrence can replace `views` and omit those handles without rendering the main Header. The shared body and Composer register the queue and Todo docks. The Todo dock uses the shared panel elevation above the composer; its rows use the shared idle, ongoing, and done markers for pending, in-progress, and completed items. `ctx.uiSession.provide()` materializes the Conversation and input sources from the same Session binding and supplies `inputActions` as a stable standard prop. -A blank Session retains the header's leading and corner controls, including the right-sidebar opener, while hiding its title, actions, utilities, and View tabs. Selecting a Workspace creates the Session needed by these controls; the first message is not required. Without a selected Session, the strict header is absent; the resident container reserves a 40px drag band on macOS desktop and no empty vertical space on Web, Windows, or Linux. Sidebar entries retain their own data and execution prerequisites. A started Session header uses one row when fewer than two Views are available; the tab row reserves space only while rendered. +A blank Session retains the header's leading and corner controls, including the right-sidebar opener, while hiding its title, actions, utilities, and View tabs. Selecting a Workspace creates the Session needed by these controls; the first message is not required. Without a selected Session, the strict header is absent; the resident header keeps a 40px window strip on macOS desktop that it owns as its drag row, and no empty vertical space on Web, Windows, or Linux. Sidebar entries retain their own data and execution prerequisites. A started Session header uses one row when fewer than two Views are available; the tab row reserves space only while rendered. View selection is deterministic: a registered persisted selection wins, otherwise registered `chat` wins, otherwise no View renders. It never chooses the first registered View. Shell phase combines Session lifecycle with the active-target set; no target-specific snapshot is read by the shell. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index 7316b00c69..c852cdbad5 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -52,7 +52,7 @@ target package 通过 declaration merge 扩展 snapshot 与 Location data map, 本包占据 root 作用域 `main` 中的 `conversation` key。其 `main.conversation` 外壳将常驻的 `conversation.header` 放在可选 Session 的 `conversation.content` Component Factory 外。未选中 Session 时,头部仍承载根作用域导航;标题、操作和 View 标签保留在严格 Session 子组件中。Factory 拥有共享正文与 Composer,通过其标准 Hook 读取当前 Session,并公开 strict-Session `views` 与 root-scoped `widthControls` 两个局部位置。默认 adapter 渲染现有 `conversation.session` entry,主 occurrence 选择宽度拖拽条;嵌入式 occurrence 可以替换 `views`、省略拖拽条,且不渲染主 Header。共享正文与 Composer 注册 queue dock 和 Todo dock。Todo dock 在 composer 上方使用共享面板 elevation;其中的行分别以共享 idle、ongoing 与 done 标记表示待处理、进行中与已完成。`ctx.uiSession.provide()` 从同一个 Session binding 物化 Conversation 与 input source,并将 `inputActions` 作为稳定标准 prop 提供。 -blank Session 保留 header 的 leading 与 corner 控件,包括右侧栏展开入口,同时隐藏标题、actions、utilities 和 View tabs。选择 Workspace 会创建这些控件所需的 Session,无需先发送消息。没有选中 Session 时,strict header 不挂载;常驻容器在 macOS 桌面保留 40px 拖拽区域,在 Web、Windows 或 Linux 上不预留空白高度。侧栏各入口仍遵循自身的数据与执行环境要求。 已开始的 Session 在可用 View 少于两个时使用单行标题栏,仅在渲染标签行时保留其高度。 +blank Session 保留 header 的 leading 与 corner 控件,包括右侧栏展开入口,同时隐藏标题、actions、utilities 和 View tabs。选择 Workspace 会创建这些控件所需的 Session,无需先发送消息。没有选中 Session 时,strict header 不挂载;常驻 header 在 macOS 桌面保留 40px 的窗口顶条,由它自己作为拖拽行持有,在 Web、Windows 或 Linux 上不预留空白高度。侧栏各入口仍遵循自身的数据与执行环境要求。 已开始的 Session 在可用 View 少于两个时使用单行标题栏,仅在渲染标签行时保留其高度。 View 选择规则固定:有效且已注册的持久化选择优先,其次是已注册的 `chat`,否则不渲染 View;绝不选择第一个已注册 View。Shell phase 只组合 Session lifecycle 与 active-target set,不读取任何 target-specific 快照。 diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationHeader.tsx b/packages/client/ui-conversation/src/client/skeleton/ConversationHeader.tsx index a8f2e6b122..b3b07c2b6b 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationHeader.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationHeader.tsx @@ -15,7 +15,7 @@ export function ConversationHeader({ sessionId, useSession, useConversation, ren const blank = session === undefined || conversation === undefined || (session.blank && conversationPhase(session, conversation) === 'blank') return ( -
+
{renderSlot('conversation.header.leading', {})}
diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css b/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css index 25530eef99..ed85896510 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationRoot.module.css @@ -47,13 +47,13 @@ min-height: 0; } -/* macOS hiddenInset titlebar: window dragging comes from ui-layout's - .leadingBand (the frame's first child), never from this header. Electron - composes app-regions in document order ignoring stacking, so a drag rule - here would keep eating clicks through overlays mounted earlier in the DOM - (the settings modal lives in the sidebar column). The title-row clusters - overlap the band and subtract their whole boxes; individual controls are - covered by the base.css interactive-element rule. */ +/* macOS hiddenInset titlebar: the header block owns the window drag over its + own box — title row plus the view tab strip, so the draggable geometry is the + header's geometry and no frame band has to match its height. The header marks + itself `data-window-drag` (ConversationHeader); below it the title-row clusters + subtract their whole boxes, and individual controls are covered by the base.css + interactive-element rule. A covering overlay lives beside #root + (ui-settings-general), which puts it after this row in document order. */ :global([data-platform='darwin']) .headerLeading, :global([data-platform='darwin']) .headerActions, :global([data-platform='darwin']) .headerUtilities, diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx b/packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx index d17f52e3f8..f1179cf32b 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationSession.tsx @@ -75,7 +75,7 @@ export function ConversationSessionHeader({ const last = index === ancestry.length - 1 // The current crumb has no navigation, so it is plain text // rather than a disabled button: on darwin desktop a button - // would subtract itself from the window drag band (ui-web + // would subtract itself from the header's drag row (ui-web // base.css) and leave the title inert for dragging too. const title = last ? ( @@ -138,8 +138,8 @@ export function ConversationSessionHeader({ {showTabs && ( - // data-conversation-tabs: ui-layout's window drag band matches this - // marker (:has) to deepen only while the tab strip adds header height. + // data-conversation-tabs: marks the tab strip, which the window-chrome + // geometry and the browser coverage lane anchor on.
{tabs.map(viewTab => (
- + ) } @@ -1140,7 +1140,7 @@ export function PluginManagerPage(props: PluginManagerPageProps): ReactNode {
{showsCards ? ( -
+

{t('title')}

{t('intro')}

diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index b0d0e950b6..b5eaf35c06 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -64,8 +64,10 @@ "@deepseek-ai/dsh-remote-mock": "workspace:^", "@deepseek-ai/dsh-settings": "workspace:^", "@types/react": "~18.3.1", + "@types/react-dom": "~18.3.0", "clsx": "^2.0.0", - "react": "^18.2.0" + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-settings-general/src/client/SettingsRoot.module.css b/packages/client/ui-settings-general/src/client/SettingsRoot.module.css index 8e7569b3ca..333f5fdafe 100644 --- a/packages/client/ui-settings-general/src/client/SettingsRoot.module.css +++ b/packages/client/ui-settings-general/src/client/SettingsRoot.module.css @@ -239,8 +239,7 @@ white-space: nowrap; } -/* macOS: overlays covering the window drag bands must subtract themselves - (Electron app-regions are geometry, not stacking). */ -:global([data-platform='darwin']) .overlay { - -webkit-app-region: no-drag; -} +/* No app-region rule here: the overlay portals beside #root (SettingsRoot), so + ui-web base.css's `body > :not(#root)` subtraction covers it wherever it + overlaps a chrome row's drag — including above every column, which an in-root + overlay could not promise once a chrome row declares drag itself. */ diff --git a/packages/client/ui-settings-general/src/client/SettingsRoot.tsx b/packages/client/ui-settings-general/src/client/SettingsRoot.tsx index 6e82913513..90a1eceb66 100644 --- a/packages/client/ui-settings-general/src/client/SettingsRoot.tsx +++ b/packages/client/ui-settings-general/src/client/SettingsRoot.tsx @@ -11,6 +11,7 @@ * to the step, so a mounted-but-deciding step paints nothing here. */ import { useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from 'react' +import { createPortal } from 'react-dom' import clsx from 'clsx' import { ConnectionIndicator, @@ -67,7 +68,11 @@ function SettingsPanel({ rows, renderSlot, activeId, onSelect, onClose }: PanelP const closeButton = useRef(null) useEffect(() => { closeButton.current?.focus() }, []) - return ( + // Portalled beside #root like the Modal primitive: a covering surface mounted + // inside the root would precede the columns' chrome in document order, so a + // chrome row that declares window drag after it would override its subtraction. + // Beside the root, base.css's `body > :not(#root)` rule subtracts it instead. + return createPortal((
- ) + ), document.body) } /** diff --git a/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.module.css b/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.module.css index 890b897cc8..eaee49200a 100644 --- a/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.module.css +++ b/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.module.css @@ -46,19 +46,6 @@ transition: transform var(--ds-transition-duration-slow) var(--ds-ease-in-out); } -/* One-frame app-region pulse at each open/close edge (RightbarSeat): changing - this computed value is what makes Electron recollect the window's drag - rects, which the slide's transform/visibility flips alone never dirty - (electron#32341). The panel's steady state sets no app-region in either - presentation, so this write is a real change at both edges — including a - hidden panel opening straight into fullscreen (a narrow window's first - open), whose rects were skipped while hidden. While set, the whole panel is - out of the drag band for that frame; the removal frame recollects the - steady-state geometry below. */ -:global(html[data-platform='darwin']) .panel[data-sidebar-right-region-nudge] { - -webkit-app-region: no-drag; -} - .panel[data-sidebar-right-panel='fullscreen'] { position: fixed; inset: 0; @@ -66,16 +53,11 @@ border: none; } -/* No whole-box subtraction here: Electron drag regions are window geometry, - not stacking, so the frame's leading band does keep acting through this - fixed overlay — but the kit already subtracts every box that must stay - usable (tabs, strip-end chrome, pane bodies, dividers; ui-dockkit), and - ui-web base.css subtracts interactive elements and portalled overlays. - What remains of the band under the strips' blank runs is the window drag - affordance, the same native-tab-bar reading as the push presentation. A - panel-wide no-drag would trade it away and, worse, make no-drag the - steady state, turning the open/close pulse above into a computed-value - no-op exactly when a hidden panel opens straight into fullscreen. */ +/* No whole-box subtraction here: the strip rows inside mark themselves + `data-window-drag`, and ui-web base.css subtracts interactive elements and + portalled overlays, so a strip's blank runs stay draggable through this + fixed overlay while its tabs and strip-end chrome keep their clicks. A + panel-wide no-drag would trade that drag affordance away. */ /* Windows keeps caption controls above fullscreen file and terminal panels. */ :global([data-windows-titlebar]) .panel[data-sidebar-right-panel='fullscreen'] { diff --git a/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.tsx b/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.tsx index 6b388b219f..b4853ca237 100644 --- a/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.tsx +++ b/packages/client/ui-sidebar-right/src/client/shell/SidebarRight.tsx @@ -375,36 +375,9 @@ export function RightbarSeat({ if (shown && !fullscreen && !canShow) actions.setExpanded(sessionId, false) }, [actions, sessionId, shown, fullscreen, canShow]) - // Electron rebuilds the window's -webkit-app-region rects only when a style - // or layout pass dirties an app-region value (electron#32341), and Blink - // skips hidden boxes when it collects them. The open/close slide flips only - // transform and visibility — neither dirties the rects — so the strip's - // no-drag boxes (ui-dockkit) are missing right after the first open, leaving - // the tabs under the window drag band (ui-layout .leadingBand) swallowed by - // it, and they would linger after a close. Pulsing an app-region rule - // (SidebarRight.module.css) on the panel forces a recollection at both edges - // of the gesture: once at the flip, once after the slide settles and the - // stylesheet's delayed visibility flip (0.3s) has landed. - useEffect(() => { - if (document.documentElement.dataset.platform !== 'darwin') return - const panel = panelRef.current - if (panel === null) return - let raf: number | null = null - const nudge = (): void => { - panel.setAttribute('data-sidebar-right-region-nudge', '') - raf = requestAnimationFrame(() => { - raf = null - panel.removeAttribute('data-sidebar-right-region-nudge') - }) - } - nudge() - const settle = setTimeout(nudge, 400) - return () => { - clearTimeout(settle) - if (raf !== null) cancelAnimationFrame(raf) - panel.removeAttribute('data-sidebar-right-region-nudge') - } - }, [shown]) + // The open/close slide needs no pulse of its own: the shell's window drag + // watcher (ui-web) measures the marked rows every frame the surface moves and + // sets the recall mark itself (electron#32341). // Fullscreen leaves the previous column report in force until its own slide // completes. Normal presentation and zero-duration transitions report before paint. diff --git a/packages/client/ui-sidebar-right/tests/region-nudge-styles.client.spec.ts b/packages/client/ui-sidebar-right/tests/region-nudge-styles.client.spec.ts deleted file mode 100644 index e095849e1d..0000000000 --- a/packages/client/ui-sidebar-right/tests/region-nudge-styles.client.spec.ts +++ /dev/null @@ -1,46 +0,0 @@ -/** - * App-region nudge pulse, asserted against SidebarRight.module.css on disk: - * Electron recollects the window's drag rects only when a style pass changes - * a computed app-region value (electron#32341), so the panel's steady state - * must declare NO app-region in either presentation — the open/close no-drag - * pulse is then a real computed-value change at both edges, including a - * hidden panel opening straight into fullscreen (a narrow window's first - * open, whose rects were skipped while hidden). A steady-state value on the - * panel (the old fullscreen whole-box no-drag) makes the pulse a silent - * no-op and leaves the frame's drag band swallowing the strip's top-right - * controls; fine-grained subtraction belongs to ui-dockkit (tabs, strip-end - * chrome, pane bodies, dividers), leaving the strips' blank runs draggable. - */ -import { readFileSync } from 'node:fs' -import { describe, expect, it } from 'vitest' - -const css = readFileSync(new URL('../src/client/shell/SidebarRight.module.css', import.meta.url), 'utf8') - -/** - * Every ` -> value` pair of rules declaring `-webkit-app-region`. - * @returns one entry per declaring rule, in source order. - */ -function appRegionRules(): [selector: string, value: string][] { - const rules: [string, string][] = [] - for (const match of css.matchAll(/(?[^{}]+)\{(?[^{}]*)\}/g)) { - const value = /-webkit-app-region:\s*([^;]+);/.exec(match.groups!['body']!)?.[1] - if (value !== undefined) rules.push([match.groups!['sel']!.trim(), value.trim()]) - } - return rules -} - -describe('app-region nudge pulse styles', () => { - it('pulses the panel to no-drag', () => { - const pulses = appRegionRules() - .filter(([selector]) => selector.includes('[data-sidebar-right-region-nudge]')) - expect(pulses).toHaveLength(1) - expect(pulses[0]![0]).toMatch(/\.panel\[data-sidebar-right-region-nudge\]\s*$/) - expect(pulses[0]![1]).toBe('no-drag') - }) - - it('declares no steady-state app-region, so the pulse is a real change', () => { - const steady = appRegionRules() - .filter(([selector]) => !selector.includes('[data-sidebar-right-region-nudge]')) - expect(steady).toEqual([]) - }) -}) diff --git a/packages/client/ui-sidebar-right/tests/seat.client.spec.tsx b/packages/client/ui-sidebar-right/tests/seat.client.spec.tsx index 417e3742ca..b1b8866bf9 100644 --- a/packages/client/ui-sidebar-right/tests/seat.client.spec.tsx +++ b/packages/client/ui-sidebar-right/tests/seat.client.spec.tsx @@ -268,47 +268,6 @@ describe('RightbarSeat presentation', () => { expect(h.frame.closeRightbar).toHaveBeenCalled() }) - it('skips the nudge while the darwin seat has no surface to render', async () => { - // The seat's first render returns null (the open effect has not created - // the surface yet), so the nudge effect fires with an unattached panel ref. - document.documentElement.dataset.platform = 'darwin' - try { - const h = await mountSeat() - const panel = element(h.view.container, '[data-sidebar-right-panel]') - expect(panel.hasAttribute('data-sidebar-right-region-nudge')).toBe(false) - } finally { - delete document.documentElement.dataset.platform - } - }) - - it('pulses the app-region nudge at each open and close edge on macOS only', async () => { - const h = await mountSeat() - const panel = element(h.view.container, '[data-sidebar-right-panel]') - const marks = vi.spyOn(panel, 'setAttribute') - const nudges = () => marks.mock.calls.filter(([name]) => name === 'data-sidebar-right-region-nudge').length - // Web and Windows compose no app-regions: the slide needs no nudge. - act(() => { h.controller.toggleExpanded() }) - act(() => { h.controller.toggleExpanded() }) - expect(nudges()).toBe(0) - document.documentElement.dataset.platform = 'darwin' - try { - act(() => { h.controller.toggleExpanded() }) - expect(nudges()).toBe(1) - expect(panel.hasAttribute('data-sidebar-right-region-nudge')).toBe(true) - // A frame later the mark lifts (the pulse itself is the recollection - // trigger), and the settle pulse re-marks after the 0.3s slide. - await act(async () => { await new Promise(resolve => setTimeout(resolve, 450)) }) - expect(nudges()).toBe(2) - expect(panel.hasAttribute('data-sidebar-right-region-nudge')).toBe(false) - // The close edge pulses again so the hidden panel's stale rects drop. - act(() => { h.controller.toggleExpanded() }) - expect(nudges()).toBe(3) - expect(panel.hasAttribute('data-sidebar-right-region-nudge')).toBe(true) - } finally { - delete document.documentElement.dataset.platform - } - }) - it('fills the viewport without replacing the content tree or releasing the wide track', async () => { const h = await mountSeat() const tab = h.open() diff --git a/packages/client/ui-sidebar/README.i18n.yaml b/packages/client/ui-sidebar/README.i18n.yaml index 72b5b20666..7d64e76cb3 100644 --- a/packages/client/ui-sidebar/README.i18n.yaml +++ b/packages/client/ui-sidebar/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-sidebar/README.md -README.md: 94bb3a70ca8c06b5838f41436bb0f2ba2751501e -README.zh.md: 86f54882ba1c96b9b50898993931757f7afef4e5 +README.md: 9ee8d9eb95d0991f1cdfcee3b5beee4d249d3f50 +README.zh.md: c858362b4b8a8c5e41b337253454d41001f926fa diff --git a/packages/client/ui-sidebar/README.md b/packages/client/ui-sidebar/README.md index 94bb3a70ca..9ee8d9eb95 100644 --- a/packages/client/ui-sidebar/README.md +++ b/packages/client/ui-sidebar/README.md @@ -45,7 +45,7 @@ On Windows Electron, `html[data-windows-titlebar]` fixes the sidebar toggle in t ### macOS desktop -Under `html[data-platform='darwin']` (set only by the desktop preload) the expanded column opens with a 52px top strip that clears the hiddenInset traffic lights and carries the collapse toggle; the frame's own drag band (ui-layout `.leadingBand`) covers that strip, and the logo row below extends the drag surface, so the brand wordmark is not a New Session shortcut there — the dedicated New Session button keeps the action — and collapsing hides the column entirely instead of leaving the rail. The package registers `HeaderLeadingControls` into the frame's `shell.leading` window-chrome seat (ui-layout), which mounts it — the open-sidebar and New Session controls beside the traffic lights — only while the column is hidden, over every main panel. Rationale and the window-integration contract: the [macOS hidden-titlebar Agent Note](../../../.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md). +Under `html[data-platform='darwin']` (set only by the desktop preload) the expanded column opens with a 52px top strip that clears the hiddenInset traffic lights and carries the collapse toggle; the strip and the logo row below each mark themselves `data-window-drag`, so each row's own box is the window's drag region (ui-web base.css declares the one darwin drag rule), and the brand wordmark is not a New Session shortcut there — the dedicated New Session button keeps the action — and collapsing hides the column entirely instead of leaving the rail. The package registers `HeaderLeadingControls` into the frame's `shell.leading` window-chrome seat (ui-layout), which mounts it — the open-sidebar and New Session controls beside the traffic lights — only while the column is hidden, over every main panel. Rationale and the window-integration contract: the [macOS hidden-titlebar Agent Note](../../../.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md). ### Scrollbars diff --git a/packages/client/ui-sidebar/README.zh.md b/packages/client/ui-sidebar/README.zh.md index 86f54882ba..c858362b4b 100644 --- a/packages/client/ui-sidebar/README.zh.md +++ b/packages/client/ui-sidebar/README.zh.md @@ -45,7 +45,7 @@ dsh Web 客户端的侧边栏让用户识别当前构建、启动新会话、将 ### macOS 桌面 -在 `html[data-platform='darwin']`(仅由桌面 preload 设置)下,展开的侧边栏列顶部有一条 52px 的顶部条:避开 hiddenInset 红绿灯并承载收起按钮;框架自身的拖拽带(ui-layout `.leadingBand`)覆盖这条顶部条,其下的 logo 行延伸这块拖拽面,因此品牌 wordmark 在 macOS 上不再是 New Session 快捷入口——专用的 New Session 按钮保留该操作;收起时整列隐藏而非保留轨道。本包向框架的 `shell.leading` 窗口 chrome 座(ui-layout)注册 `HeaderLeadingControls`——打开侧边栏与 New Session 两个控件,由框架仅在列隐藏时挂载于红绿灯旁,覆盖所有主面板。设计依据与窗口集成约定见 [macOS 隐藏标题栏 Agent Note](../../../.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md)。 +在 `html[data-platform='darwin']`(仅由桌面 preload 设置)下,展开的侧边栏列顶部有一条 52px 的顶部条:避开 hiddenInset 红绿灯并承载收起按钮;顶部条与其下的 logo 行各自打上 `data-window-drag`,于是每行自己的盒子就是窗口的拖拽区(唯一的 darwin drag 规则由 ui-web base.css 声明),因此品牌 wordmark 在 macOS 上不再是 New Session 快捷入口——专用的 New Session 按钮保留该操作;收起时整列隐藏而非保留轨道。本包向框架的 `shell.leading` 窗口 chrome 座(ui-layout)注册 `HeaderLeadingControls`——打开侧边栏与 New Session 两个控件,由框架仅在列隐藏时挂载于红绿灯旁,覆盖所有主面板。设计依据与窗口集成约定见 [macOS 隐藏标题栏 Agent Note](../../../.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.zh.md)。 ### 滚动条 diff --git a/packages/client/ui-sidebar/src/client/SidebarRoot.module.css b/packages/client/ui-sidebar/src/client/SidebarRoot.module.css index 144070ba3f..972be46d74 100644 --- a/packages/client/ui-sidebar/src/client/SidebarRoot.module.css +++ b/packages/client/ui-sidebar/src/client/SidebarRoot.module.css @@ -176,8 +176,9 @@ /* macOS hiddenInset titlebar: the strip spans the column's top edge (negative margins cancel the root padding) so it clears the traffic lights at - (16, 18). Window dragging over this run comes from ui-layout's .leadingBand - (same 52px geometry); the toggle subtracts via the base.css rule. */ + (16, 18). The strip marks itself `data-window-drag` in markup (SidebarRoot), so + its own run is the column's draggable geometry and no frame band has to match + the strip's height; the toggle inside subtracts via the base.css rule. */ .topStrip { flex: none; display: flex; @@ -207,7 +208,15 @@ /* Logo row (figma pad (4,8,4,8)): expanded keeps the panel toggle at the right edge; the rail gives every control the same base left anchor before - the shared entry translation is applied. */ + the shared entry translation is applied. macOS hiddenInset titlebar: the row + is marked `data-window-drag` in markup (SidebarRoot), so ui-web base.css's + single darwin rule carries the drag over its own box — below the top strip + (40–100px: the strip's 52px foot with the row's -12px tuck). The brand rides + that box (SidebarRoot renders the wordmark as a plain span there, so the + global interactive no-drag rule never subtracts it); the dedicated New + Session button below keeps the pointer and keyboard paths. Safe as a drag + source: it precedes the sidebar's overlay slots in document order, so their + no-drag still wins. */ .logoRow { flex: none; display: flex; @@ -228,16 +237,6 @@ justify-content: flex-start; } -/* macOS hiddenInset titlebar: the logo row extends the frame band's drag - below 52px, and the brand rides it — SidebarRoot renders the wordmark as a - plain span there, so the global interactive no-drag rule never subtracts - it; the dedicated New Session button below keeps the pointer and keyboard - paths. Safe as a drag source: it precedes the sidebar's overlay slots in - document order, so their no-drag still wins. */ -:global([data-platform='darwin']) .logoRow { - -webkit-app-region: drag; -} - /* Brand group (figma I133:7632): the full wordmark rides the text ink (figma flows: the main-screen instance is black; blue is brand emphasis only). A button only in behavior (New Session shortcut): the diff --git a/packages/client/ui-sidebar/src/client/SidebarRoot.tsx b/packages/client/ui-sidebar/src/client/SidebarRoot.tsx index 12bcbe8ca8..90a978f03b 100644 --- a/packages/client/ui-sidebar/src/client/SidebarRoot.tsx +++ b/packages/client/ui-sidebar/src/client/SidebarRoot.tsx @@ -208,8 +208,8 @@ export function SidebarRoot({ > {/* macOS hiddenInset titlebar: the strip shares the row with the traffic lights and keeps the toggle at the sidebar's top-right. */} - {darwinDesktop &&
{toggle}
} -
+ {darwinDesktop &&
{toggle}
} +
{/* Expanded, the brand doubles as a New Session shortcut — except on macOS, where it stays part of the logo row's window-drag surface (a button would subtract itself through the global no-drag rule); diff --git a/packages/client/ui-sidebar/tests/__snapshots__/sidebar-snapshot.client.spec.tsx.snap b/packages/client/ui-sidebar/tests/__snapshots__/sidebar-snapshot.client.spec.tsx.snap index d3f6bbfc56..a467c3dbba 100644 --- a/packages/client/ui-sidebar/tests/__snapshots__/sidebar-snapshot.client.spec.tsx.snap +++ b/packages/client/ui-sidebar/tests/__snapshots__/sidebar-snapshot.client.spec.tsx.snap @@ -11,6 +11,7 @@ exports[`sidebar shell snapshots > renders Windows caption controls in expanded >
+
+

{t(running ? 'signOutRunningDescription' : 'signOutDescription')}

+ {failed &&

{t('failed')}

} +
+
+ + +
+ +} diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index a6a8b79272..a5b1c715ab 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -120,6 +120,11 @@ export function apply(ctx: Context): void { } }, async cancel(id) { const result = await ctx.remote.account.cancelSignIn(id); if (!result.ok) throw new Error('account cancel failed') }, + async hasRunningAccountTasks() { + const result = await ctx.remote.account.hasRunningAccountTasks() + if (!result.ok) throw new Error('account task query failed') + return result.value + }, async signOut() { const result = await ctx.remote.account.signOut(); if (!result.ok) throw new Error('account sign-out failed') }, } ctx.slots.inject('settings.models.sign-in', () => ctx.slots.register({ diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index e332296af7..b93c8e61c0 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -9,7 +9,9 @@ export const en = { loading: 'Loading…', backToHarness: 'Back to DeepSeek Harness', settings: 'Settings', contactUs: 'Contact us', menu: 'Account menu', nav: 'Account', signedIn: 'Signed in to DeepSeek', signedOut: 'Not signed in', - signIn: 'Sign in', signOut: 'Sign out', cancel: 'Cancel', open: 'Open browser', + signIn: 'Sign in', signOut: 'Sign out', + signOutDescription: 'Signing out will not delete any data. You can sign in to this account again.', + signOutRunningDescription: 'Tasks are currently running. Signing out will interrupt them. Sign out now?', cancel: 'Cancel', open: 'Open browser', initializing: 'Starting sign in…', waiting: 'Continue in your browser', completing: 'Completing sign in…', expired: 'Sign in expired. Try again.', failed: 'Could not complete the operation. Try again.', @@ -33,7 +35,9 @@ export const zh: Record = { loading: '加载中…', backToHarness: '返回 DeepSeek Harness', settings: '设置', contactUs: '联系我们', menu: '账号菜单', nav: '账号与余额', signedIn: '已登录 DeepSeek', signedOut: '尚未登录', - signIn: '登录', signOut: '退出登录', cancel: '取消', open: '打开浏览器', + signIn: '登录', signOut: '退出登录', + signOutDescription: '退出登录不会丢失任何数据,你仍可以登录此账号。', + signOutRunningDescription: '当前有进程正在执行中,点击“退出登录”,将会打断进程,是否即刻退出登录?', cancel: '取消', open: '打开浏览器', initializing: '正在发起登录…', waiting: '请在浏览器中继续', completing: '正在完成登录…', expired: '登录已过期,请重试。', failed: '操作未完成,请重试。', diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index 9dfa3dd269..3757579a79 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -17,6 +17,7 @@ function mount(state: Omit, copy: typeof en | typeof zh = getSnapshot: () => ({ view: { ...state, links: { usageUrl: 'http://localhost:8081/usage', topUpUrl: 'http://localhost:8081/top_up' } }, details, failed: false }), subscribe: () => () => {}, } }, + hasRunningAccountTasks: vi.fn(async () => false), contactUs: vi.fn(), showLogin: vi.fn(), setOnboarding: vi.fn(), refresh: vi.fn(() => Promise.resolve()), start: vi.fn(() => Promise.resolve()), cancel: vi.fn(() => Promise.resolve()), signOut: vi.fn(() => Promise.resolve()), @@ -50,13 +51,14 @@ it('starts sign-in and disables cancellation during persistence', async () => { expect(screen.queryByRole('button', { name: en.signIn })).toBeNull() }) -it.each([en, zh])('opens settings and signs out from the sidebar account menu', async (copy) => { +it.each([en, zh].flatMap(copy => [false, true].map(running => ({ copy, running }))))('confirms sidebar sign-out with task impact $running', async ({ copy, running }) => { const signOut = vi.fn(() => Promise.resolve()) const openSettings = vi.fn() const operations = mount({ status: 'credential-stored', attempt: null }, copy) cleanup() const { AccountMenu } = await import('../src/client/AccountMenu.tsx') render( running} useAccount={selector => selector(operations.hooks.account.getSnapshot())} wide openOnboarding={() => {}} openSettings={openSettings} t={key => key in copy ? copy[key as AccountKey] : key} />) fireEvent.click(screen.getByRole('button', { name: copy.menu })) @@ -70,6 +72,9 @@ it.each([en, zh])('opens settings and signs out from the sidebar account menu', expect(screen.queryByRole('menu')).toBeNull() fireEvent.click(screen.getByRole('button', { name: copy.menu })) await act(async () => { fireEvent.click(screen.getByRole('menuitem', { name: copy.signOut })) }) + expect(signOut).not.toHaveBeenCalled() + expect(screen.getByText(running ? copy.signOutRunningDescription : copy.signOutDescription)).toBeTruthy() + await act(async () => { fireEvent.click(screen.getByRole('button', { name: copy.signOut })) }) expect(signOut).toHaveBeenCalledOnce() expect(screen.queryByRole('menu')).toBeNull() }) diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-idle-en.txt b/packages/client/ui-settings-account/tests/expected/sign-out-idle-en.txt new file mode 100644 index 0000000000..9e7ca254e0 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-idle-en.txt @@ -0,0 +1 @@ +Sign outSigning out will not delete any data. You can sign in to this account again.CancelSign out diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-idle-zh.txt b/packages/client/ui-settings-account/tests/expected/sign-out-idle-zh.txt new file mode 100644 index 0000000000..9ad80dfc63 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-idle-zh.txt @@ -0,0 +1 @@ +退出登录退出登录不会丢失任何数据,你仍可以登录此账号。取消退出登录 diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-running-en.txt b/packages/client/ui-settings-account/tests/expected/sign-out-running-en.txt new file mode 100644 index 0000000000..005841b323 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-running-en.txt @@ -0,0 +1 @@ +Sign outTasks are currently running. Signing out will interrupt them. Sign out now?CancelSign out diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-running-zh.txt b/packages/client/ui-settings-account/tests/expected/sign-out-running-zh.txt new file mode 100644 index 0000000000..b3effa3b49 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-running-zh.txt @@ -0,0 +1 @@ +退出登录当前有进程正在执行中,点击“退出登录”,将会打断进程,是否即刻退出登录?取消退出登录 diff --git a/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx b/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx new file mode 100644 index 0000000000..9ee95e897f --- /dev/null +++ b/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx @@ -0,0 +1,45 @@ +// @vitest-environment jsdom +/** Sign-out impact copy and explicit confirmation. */ +import { cleanup, fireEvent, render, screen, act } from '@testing-library/react' +import { afterEach, expect, it, vi } from 'vitest' +import { SignOutDialog } from '../src/client/SignOutDialog.tsx' +import { en, zh } from '../src/client/locales.ts' + +afterEach(cleanup) +function mount(running: boolean, copy: typeof en | typeof zh = en, signOut = vi.fn(async () => {})) { + const close = vi.fn() + render( copy[key]} />) + return { signOut, close } +} +it.each([en, zh].flatMap(copy => [false, true].map(running => ({ copy, running }))))( + 'confirms sign-out with localized task impact: $running', async ({ copy, running }) => { + const props = mount(running, copy) + await expect(`${screen.getByRole('dialog').textContent}\n`) + .toMatchFileSnapshot(`./expected/sign-out-${running ? 'running' : 'idle'}-${copy === en ? 'en' : 'zh'}.txt`) + expect(props.signOut).not.toHaveBeenCalled() + await act(async () => { fireEvent.click(screen.getByRole('button', { name: copy.signOut })) }) + expect(props.signOut).toHaveBeenCalledOnce() + expect(props.close).toHaveBeenCalledOnce() + }, +) +it.each(['cancel', 'close', 'escape'] as const)('dismisses with %s without signing out', (action) => { + const props = mount(true) + if (action === 'escape') fireEvent.keyDown(document, { key: 'Escape' }) + else fireEvent.click(screen.getByRole('button', { name: en[action] })) + expect(props.close).toHaveBeenCalledOnce() + expect(props.signOut).not.toHaveBeenCalled() +}) +it('keeps failures open for retry and blocks dismissal during sign-out', async () => { + const pending = Promise.withResolvers() + const signOut = vi.fn(() => pending.promise).mockRejectedValueOnce(new Error('offline')) + const props = mount(true, en, signOut) + await act(async () => { fireEvent.click(screen.getByRole('button', { name: en.signOut })) }) + expect(screen.getByRole('alert').textContent).toBe(en.failed) + expect(props.close).not.toHaveBeenCalled() + await act(async () => { fireEvent.click(screen.getByRole('button', { name: en.signOut })) }) + fireEvent.keyDown(document, { key: 'Escape' }) + expect(props.close).not.toHaveBeenCalled() + expect(screen.getByRole('button', { name: en.signOut }).hasAttribute('disabled')).toBe(true) + await act(async () => { pending.resolve(undefined) }) + expect(props.close).toHaveBeenCalledOnce() +}) diff --git a/packages/context/time-context/tests/time-context.spec.ts b/packages/context/time-context/tests/time-context.spec.ts index 454baf309b..5d0264c3ce 100644 --- a/packages/context/time-context/tests/time-context.spec.ts +++ b/packages/context/time-context/tests/time-context.spec.ts @@ -51,6 +51,7 @@ function sessionAgent(session: Session, id = 'agent'): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/context/tmux-context/tests/tmux-context.spec.ts b/packages/context/tmux-context/tests/tmux-context.spec.ts index 28d7b1027d..09a7b5bbcc 100644 --- a/packages/context/tmux-context/tests/tmux-context.spec.ts +++ b/packages/context/tmux-context/tests/tmux-context.spec.ts @@ -100,6 +100,7 @@ function sessionAgent(session: Session, id = 'agent'): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/core/agent-loop/README.i18n.yaml b/packages/core/agent-loop/README.i18n.yaml index 8a503e803f..25942ade6f 100644 --- a/packages/core/agent-loop/README.i18n.yaml +++ b/packages/core/agent-loop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-loop/README.md -README.md: 7c3073aefb90fa2ec74d521d6c9d97aff5f74ace -README.zh.md: 44621a0b02eadfc574f6f6b924f64cfeb4141cd3 +README.md: e58f05e619fc5a39d26edd71ed92c79fe04dcc81 +README.zh.md: 490a4a1849daee182357f6eaadc44a5339b060ca diff --git a/packages/core/agent-loop/README.md b/packages/core/agent-loop/README.md index 7c3073aefb..e58f05e619 100644 --- a/packages/core/agent-loop/README.md +++ b/packages/core/agent-loop/README.md @@ -25,6 +25,8 @@ English | [中文](README.zh.md) ## Use this package +The running phase retains the final prepared provider through tool execution and retry preparation, resets it before publishing `turn/end`, and exposes it through `Agent.activeProvider`. Plugins can cancel matching live agents without consulting mutable settings or historical request headers. + Mount `dsh-agent-loop` in any composition that should run agents. It supplies the driver behind `ctx.agents` and starts any agents you declare in its config; both [`dsh-base`](../../bundle/base/README.md) and [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.md) mount it as an explicit row. ### Configure declarative agents diff --git a/packages/core/agent-loop/README.zh.md b/packages/core/agent-loop/README.zh.md index 44621a0b02..490a4a1849 100644 --- a/packages/core/agent-loop/README.zh.md +++ b/packages/core/agent-loop/README.zh.md @@ -25,6 +25,8 @@ kind: "package-reference" ## 使用本包 +运行阶段在工具执行及重试准备期间保留最终准备完成的提供方,在发布 `turn/end` 前重置,并通过 `Agent.activeProvider` 暴露。插件可以取消匹配的运行中代理,无须读取可变设置或历史请求头。 + 在任何应运行 agent 的组合中挂载 `dsh-agent-loop`。它提供 `ctx.agents` 背后的驱动器,并启动你在配置中声明的 agent;[`dsh-base`](../../bundle/base/README.zh.md) 与 [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.zh.md) 都将它作为显式配置行挂载。 ### 配置声明式 agent diff --git a/packages/core/agent-loop/src/agent.ts b/packages/core/agent-loop/src/agent.ts index 4ea7593551..f44e1aa024 100644 --- a/packages/core/agent-loop/src/agent.ts +++ b/packages/core/agent-loop/src/agent.ts @@ -46,7 +46,7 @@ type Phase = lastTurn: number wakeRequested: boolean } - | { kind: 'running'; abort: AbortController; turn: number; step: number; wakeRequested: boolean } + | { kind: 'running'; abort: AbortController; turn: number; step: number; wakeRequested: boolean; activeProvider?: string } type StepEndReason = Extract @@ -115,6 +115,10 @@ export class ReactLoopAgent implements Agent { return this.phase.kind === 'idle' || this.phase.kind === 'maintenance' ? 'idle' : 'running' } + get activeProvider(): string | undefined { + return this.phase.kind === 'running' ? this.phase.activeProvider : undefined + } + /** Commit a phase and publish its externally visible status transition. */ private setPhase(next: Phase): void { const previousStatus = this.status @@ -336,6 +340,7 @@ export class ReactLoopAgent implements Agent { this.throwError(error) } finally { try { + delete phase.activeProvider // oxlint-disable-next-line typescript/no-non-null-assertion -- every exit assigns a turn ending this.session.append('turn/end', { turn, reason: turnEnds! }) } catch (error: unknown) { @@ -547,6 +552,7 @@ export class ReactLoopAgent implements Agent { config = proposedConfig } signal.throwIfAborted() + if (this.phase.kind === 'running') this.phase.activeProvider = config.provider return { config, ...preparedCall === undefined ? {} : { preparedCall } } } diff --git a/packages/core/agent-loop/tests/inbox.spec.ts b/packages/core/agent-loop/tests/inbox.spec.ts index 739d18b990..f4a9eeb387 100644 --- a/packages/core/agent-loop/tests/inbox.spec.ts +++ b/packages/core/agent-loop/tests/inbox.spec.ts @@ -26,6 +26,7 @@ function stubAgent(rawId: string, overrides: Partial = {}): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx, send: () => {}, diff --git a/packages/core/agent/README.i18n.yaml b/packages/core/agent/README.i18n.yaml index 59f4628536..26ee824e52 100644 --- a/packages/core/agent/README.i18n.yaml +++ b/packages/core/agent/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent/README.md -README.md: 8ba3dc730790acb0f792173e9ee01d2dc954957e -README.zh.md: 0718ae5f3f73b1fd0bb5b600de3a08c50e67421e +README.md: a07145131186fddb30de62536f3001a36b32dc04 +README.zh.md: d21c010e418c997807b3eec36a585a8b84bea31d diff --git a/packages/core/agent/README.md b/packages/core/agent/README.md index 8ba3dc7307..a071451311 100644 --- a/packages/core/agent/README.md +++ b/packages/core/agent/README.md @@ -25,6 +25,8 @@ Use `dsh-agent` to create or resume live agents, send follow-up or steering inpu ## Use this package +The read-only `Agent.activeProvider` identifies the current turn’s latest prepared request. It is absent before the first request is prepared and between turns; tools and retries retain the last provider until another request finishes preparation. Configuration changes alone do not reclassify in-flight work. + Mount `dsh-agent` wherever live agents exist: it provides `ctx.agents` and the `Agent` handle that plugins, UI, hooks, and orchestrators work against. The service is inert until a driver registers a factory — the shipped driver is `dsh-agent-loop`, so the smallest useful composition loads both. ### Create or resume an agent diff --git a/packages/core/agent/README.zh.md b/packages/core/agent/README.zh.md index 0718ae5f3f..d21c010e41 100644 --- a/packages/core/agent/README.zh.md +++ b/packages/core/agent/README.zh.md @@ -25,6 +25,8 @@ kind: "package-reference" ## 使用本包 +只读 `Agent.activeProvider` 标识当前轮次最近一次完成准备的请求提供方。首请求准备完成前及轮次之间没有该值;工具执行和重试期间保留上一提供方,直到另一请求完成准备。仅改变配置不会改变在途任务的归属。 + 在存在实时 agent 的任何地方挂载 `dsh-agent`:它提供 `ctx.agents` 以及插件、UI、钩子和编排器所面向编程的 `Agent` 句柄。在没有驱动器注册工厂之前,该服务保持惰性——随附驱动器是 `dsh-agent-loop`,因此最小的可用组合需要同时加载两者。 ### 创建或恢复 agent diff --git a/packages/core/agent/src/runtime-types.ts b/packages/core/agent/src/runtime-types.ts index 2118507b8c..bb87e7986e 100644 --- a/packages/core/agent/src/runtime-types.ts +++ b/packages/core/agent/src/runtime-types.ts @@ -170,6 +170,8 @@ declare module './types.ts' { readonly inbox: Inbox /** The current lifecycle state, mirrored on every `agent/status` transition. */ readonly status: AgentStatus + /** Latest prepared provider in this turn; retained through tools and retries, absent before preparation and between turns. */ + readonly activeProvider: string | undefined /** Agent-scoped context; its contributions are agent-local, unwind on disposal, and reject registration afterward. */ readonly ctx: Context diff --git a/packages/core/agent/tests/agent.spec.ts b/packages/core/agent/tests/agent.spec.ts index c31acf5c66..99f20f2419 100644 --- a/packages/core/agent/tests/agent.spec.ts +++ b/packages/core/agent/tests/agent.spec.ts @@ -24,6 +24,7 @@ function stubAgent(rawId: string, overrides: Partial = {}): Agent { inbox: { nextTurn: [], nextStep: [], } as never, + activeProvider: undefined, status: 'idle', ctx, send: () => {}, diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index 7315a4b6c1..b896927357 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account-platform/README.md -README.md: 248f679dd7b27af35eafa59579df7538db213b23 -README.zh.md: 36c3f861d60f2c02cca76feabed85862630ead98 +README.md: 31172b1749428decebed41fac99e3fc34a70cf6d +README.zh.md: bdff2428021b7452865cb10d6774fff618c3b111 diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md index 248f679dd7..31172b1749 100644 --- a/packages/credentials/deepseek-account-platform/README.md +++ b/packages/credentials/deepseek-account-platform/README.md @@ -28,6 +28,8 @@ Sign in through the system browser and keep the account credential in the existi The profile projection maps `id_profile.picture` to `avatarUrl`, using null when no picture is configured. +Token resolution refuses requests while local sign-out is in progress. Successful local removal publishes `deepseek-account/signed-out` before returning the signed-out snapshot; remote revocation remains independent. + getProfile / getBalance sends the stored grant in the x-dsh-auth-token header to GET /auth-api/v0/users/current and GET /api/v0/users/get_user_summary on platformOrigin. The grant issuer must match that origin. Host projects only the account UID, profile name, avatar URL, phone or email exactly as masked by Platform, and normal_wallets / bonus_wallets currency/balance strings; response tokens and other fields are discarded. Bonus wallets remain separate from recharge balances. Credential changes and disposal invalidate in-flight queries. Configure platformOrigin, allowLoopbackHttp, requestTimeoutMs, and attemptTimeoutMs in the plugin row. HTTP is accepted only for explicitly enabled loopback development. The provider registers /oauth/callback on the existing Host webServer before auth_init, validates state, exchanges an S256 PKCE code once, and commits a grant before redirecting to auth_exchange.biz_data.authorized_url. Browser destinations default to the configured platform origin and always require the fixed /dsh/authorize or /dsh/authorized path. The completion URL sets `login_source` to the initiating client (`web` or `desktop`) and preserves other Platform-supplied query parameters. Device identity is a separate random UUID record shared by processes using the same credential store; device_model reports OS and architecture. diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md index 36c3f861d6..bdff242802 100644 --- a/packages/credentials/deepseek-account-platform/README.zh.md +++ b/packages/credentials/deepseek-account-platform/README.zh.md @@ -26,6 +26,8 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导 ## 使用此包 +本地退出登录期间拒绝解析 token。本地授权成功删除后,先发布 `deepseek-account/signed-out`,再返回已退出的状态快照;远程撤销独立执行。 + 账号资料投影将 `id_profile.picture` 映射为 `avatarUrl`,没有配置头像时返回 null。 getProfile / getBalance 将保存的授权 token 通过 x-dsh-auth-token 请求头,向 platformOrigin 上的 GET /auth-api/v0/users/current 和 GET /api/v0/users/get_user_summary 发起请求。授权签发来源必须与该来源一致。Host 只投影账号 UID、资料名称、头像 URL、由 Platform 脱敏的手机号或邮箱(原样保留),以及 normal_wallets / bonus_wallets 的币种和余额字符串,丢弃响应 token 与其他字段。赠送钱包不计入充值余额。凭证变化和销毁会使进行中的查询失效。 diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index bea62a3558..835b79d7da 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -222,6 +222,7 @@ export class PlatformAccount extends DeepSeekAccount { } override async resolveToken(url: string): Promise { + if (this.closed || this.removing !== undefined) return undefined const destination = new URL(url) if (destination.origin !== this.inferenceOrigin || destination.username || destination.password) return undefined const record = await this.ctx.credentials.readRecord(KEY) @@ -311,6 +312,7 @@ export class PlatformAccount extends DeepSeekAccount { this.revoke(parsed.data.token) } this.attempt = undefined + this.ctx.emit('deepseek-account/signed-out') this.changed() return this.getState() })().finally(() => { this.removing = undefined }) diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index 407a56f89b..d04dc498ce 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -329,6 +329,18 @@ it('retains profile data when balance fails instead of reporting a zero balance' expect(await readDetails(f.account)).toMatchObject({ profile: { status: 'ready' }, balance: { status: 'failed' } }) }) +it('publishes sign-out only after local grant removal and refuses token resolution while removing', async () => { + const f = await fixture() + await storeAccount(f) + const observed: string[] = [] + f.ctx.on('deepseek-account/signed-out', () => { observed.push('signed-out') }) + const pending = f.account.signOut() + expect(await f.account.resolveToken('https://api.deepseek.com')).toBeUndefined() + await pending + expect(observed).toEqual(['signed-out']) + expect((await f.account.getState()).status).toBe('signed-out') +}) + it('discards account details when sign-out races the Platform response', async () => { const f = await fixture() await storeAccount(f) diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index 7d8ddfe1f3..4841809a90 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account/README.md -README.md: 72b42ee996b809992e48ea4c124f0793d756526a -README.zh.md: b30813e24adc2afc9e8245b839432dd195093c63 +README.md: 52bc8e15ee72282b79c0b8823b56476650cdf728 +README.zh.md: 427b4a22aaf1ed503d41e90d0db600d220ef931e diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md index 72b42ee996..52bc8e15ee 100644 --- a/packages/credentials/deepseek-account/README.md +++ b/packages/credentials/deepseek-account/README.md @@ -26,6 +26,8 @@ Account consumers read stored login state, start or cancel a browser login, and `AccountProfile.avatarUrl` is an optional profile image URL; null or absence means no avatar. +Successful local sign-out emits `deepseek-account/signed-out`. Consumers own any cancellation policy; the account service does not track agents or model providers. + The service defines account operations and reconnectable state snapshots. The platform provider owns the protocol and stored grant. Credentials are Host-only; the API controller exports state and commands without resolveToken. diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md index b30813e24a..427b4a22aa 100644 --- a/packages/credentials/deepseek-account/README.zh.md +++ b/packages/credentials/deepseek-account/README.zh.md @@ -24,6 +24,8 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token ## 使用此包 +本地成功退出登录后发出 `deepseek-account/signed-out`。消费方负责取消策略;账号服务不跟踪 agent 或模型提供方。 + `AccountProfile.avatarUrl` 是可选的账号头像 URL;为空或缺失时表示没有头像。 该服务定义账号操作和可重连的状态快照。平台提供者负责协议和授权记录。凭证仅限 Host;API 控制器只导出状态与操作,不导出 resolveToken。 diff --git a/packages/credentials/deepseek-account/src/index.ts b/packages/credentials/deepseek-account/src/index.ts index 465bbedf03..804dc512f6 100644 --- a/packages/credentials/deepseek-account/src/index.ts +++ b/packages/credentials/deepseek-account/src/index.ts @@ -4,6 +4,12 @@ import type { AccountDetails, AccountView, SignInAttemptId } from './types.ts' export type { AccountDetails, AccountProfile, AccountWallet, AccountLinks, AccountView, SignInAttemptId, SignInAttemptView, SignInErrorCode } from './types.ts' declare module '@deepseek-ai/cordis' { + interface Events { + /** Local grant removal has completed. + * @mode emit + */ + 'deepseek-account/signed-out'(): void + } interface Context { deepseekAccount: DeepSeekAccount } @@ -53,7 +59,7 @@ export abstract class DeepSeekAccount extends Service { */ abstract cancelSignIn(id: SignInAttemptId): Promise /** - * Remove the local grant while retaining API keys and tasks; the provider revokes it in the background. + * Remove the local grant while retaining API keys; the provider revokes it in the background. * @returns the signed-out state after local removal; remote failures never restore the grant. */ abstract signOut(): Promise diff --git a/packages/deliverables/tool-present/tests/present.spec.ts b/packages/deliverables/tool-present/tests/present.spec.ts index 6a603163bd..947d5acedc 100644 --- a/packages/deliverables/tool-present/tests/present.spec.ts +++ b/packages/deliverables/tool-present/tests/present.spec.ts @@ -35,6 +35,7 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', get ctx() { return scope.ctx }, send: () => {}, diff --git a/packages/experimental/browser-use-runtime/tests/resources.spec.ts b/packages/experimental/browser-use-runtime/tests/resources.spec.ts index f838191d44..104489f420 100644 --- a/packages/experimental/browser-use-runtime/tests/resources.spec.ts +++ b/packages/experimental/browser-use-runtime/tests/resources.spec.ts @@ -16,7 +16,7 @@ async function fixture() { const fiber = ctx.plugin(() => {}) const session = Session.create(SessionId(id)) const agent: Agent = { - id: session.id, session, ctx: fiber.ctx, options: {}, status: 'idle', + id: session.id, session, ctx: fiber.ctx, options: {}, activeProvider: undefined, status: 'idle', inbox: unsupportedInbox(), send() {}, followup() {}, inject() {}, cancel() {}, steer: () => ({ outcome: Promise.resolve({ status: 'rejected' as const }) }), runMaintenance: task => task(new AbortController().signal), diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index a56e94240d..9e8c680d18 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -895,7 +895,7 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ }, { signature: 'abstract signOut(): Promise', - description: 'Remove the local grant while retaining API keys and tasks; the provider revokes it in the background.', + description: 'Remove the local grant while retaining API keys; the provider revokes it in the background.', parameters: [], returns: 'the signed-out state after local removal; remote failures never restore the grant.', }, @@ -3744,6 +3744,14 @@ export const EVENT_API: readonly EventApiEntry[] = [ description: 'Committed change to a provider-managed credential source: a `set`, an `unset`, or an external edit observed in storage. Ambient process-environment changes are not observable and never emit. Listener failures are contained and logged — a sync throw and an async rejection alike — without changing the committed operation\'s outcome, except `INVARIANT`-coded failures, which rethrow after every listener ran; that rethrow reaches the emitter only from synchronous listeners, so invariant checks on this event must not be async functions.', parameters: [{ name: 'ref', description: 'the reference whose stored value changed.' }], }, + { + name: 'deepseek-account/signed-out', + mode: 'emit', + signature: '\'deepseek-account/signed-out\'(): void', + summary: 'Local grant removal has completed.', + description: 'Local grant removal has completed.', + parameters: [], + }, { name: 'domain/changed', mode: 'emit', diff --git a/packages/feedback/command-feedback/tests/command-feedback.spec.ts b/packages/feedback/command-feedback/tests/command-feedback.spec.ts index 4e5401c09e..7db9617a08 100644 --- a/packages/feedback/command-feedback/tests/command-feedback.spec.ts +++ b/packages/feedback/command-feedback/tests/command-feedback.spec.ts @@ -38,6 +38,7 @@ function stubAgent(ctx: Context, id: string): { agent: Agent; session: Session } session, inbox: unsupportedInbox(), ctx: new Context(), + activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/feedback/command-feedback/tests/loader-composition.spec.ts b/packages/feedback/command-feedback/tests/loader-composition.spec.ts index 273657e579..ee442e64f0 100644 --- a/packages/feedback/command-feedback/tests/loader-composition.spec.ts +++ b/packages/feedback/command-feedback/tests/loader-composition.spec.ts @@ -37,6 +37,7 @@ async function agent(ctx: Context): Promise { session, inbox: unsupportedInbox(), ctx: scope.ctx, + activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/fs/tool-str-replace-editor/tests/tools.spec.ts b/packages/fs/tool-str-replace-editor/tests/tools.spec.ts index 1f893f37fe..6abb17030f 100644 --- a/packages/fs/tool-str-replace-editor/tests/tools.spec.ts +++ b/packages/fs/tool-str-replace-editor/tests/tools.spec.ts @@ -38,6 +38,7 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/goal/command-goal/tests/command-goal.spec.ts b/packages/goal/command-goal/tests/command-goal.spec.ts index 1e4e65c7a1..3ad29e5b3b 100644 --- a/packages/goal/command-goal/tests/command-goal.spec.ts +++ b/packages/goal/command-goal/tests/command-goal.spec.ts @@ -30,6 +30,7 @@ function stubAgent(ctx: Context, id: string): { agent: Agent; session: Session } session, inbox, ctx: new Context(), + activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/goal/goal/tests/goal.spec.ts b/packages/goal/goal/tests/goal.spec.ts index 06e31d7196..68f71918ab 100644 --- a/packages/goal/goal/tests/goal.spec.ts +++ b/packages/goal/goal/tests/goal.spec.ts @@ -59,6 +59,7 @@ function stubAgentForSession(session: Session, suppliedCtx?: Context): StubAgent session, inbox, ctx: agentCtx, + activeProvider: undefined, status: 'idle', send: () => {}, followup: () => {}, diff --git a/packages/goal/goal/tests/projection.spec.ts b/packages/goal/goal/tests/projection.spec.ts index 227da38ad8..9bc7ae6693 100644 --- a/packages/goal/goal/tests/projection.spec.ts +++ b/packages/goal/goal/tests/projection.spec.ts @@ -44,6 +44,7 @@ async function liveAgent(ctx: Context, session: Session): Promise { session, inbox: unsupportedInbox(), ctx, + activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/goal/tool-goal/tests/tool-goal.spec.ts b/packages/goal/tool-goal/tests/tool-goal.spec.ts index ecc7822bce..9e606e4bb1 100644 --- a/packages/goal/tool-goal/tests/tool-goal.spec.ts +++ b/packages/goal/tool-goal/tests/tool-goal.spec.ts @@ -58,6 +58,7 @@ function stubAgent(rawId: string, supplied?: Session, suppliedCtx?: Context): St options: {}, session, inbox, + activeProvider: undefined, get status() { return status }, ctx: agentCtx, send: () => {}, diff --git a/packages/jobs/jobs-local/tests/jobs.spec.ts b/packages/jobs/jobs-local/tests/jobs.spec.ts index dafd91844f..1e0c300f8f 100644 --- a/packages/jobs/jobs-local/tests/jobs.spec.ts +++ b/packages/jobs/jobs-local/tests/jobs.spec.ts @@ -36,6 +36,7 @@ function stubAgent(ctx: Context, rawId: string, presetScope?: ScopeKey): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle' as const, ctx: agentCtx, send: () => {}, diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 9445acaf60..11c68612d8 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 5a3a3a4ff1cf3c30e8c44f079dc90069654efeac -README.zh.md: d58364c0ac21bd67d21761fc732bf9d34dfac802 +README.md: abd29fbdc49a100fa3e5a92ad4db05fc487ef456 +README.zh.md: d955dc40190a2b00d9034859c99c004ba06a4fa3 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 5a3a3a4ff1..abd29fbdc4 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -234,6 +234,6 @@ This Dev Note is non-authoritative working context: undecided directions and not **Runtime invariant:** No companion is published. This package exposes no independent event sequence or mutable data relation beyond contracts enforced at its owning seam. -When the account provider is mounted, its stored token takes priority only for https://api.deepseek.com. Other origins and signed-out accounts retain the configured API-key reference. Chat and Files requests reject redirects. Signing out removes only the account grant and preserves API keys. +`deepseek-official` uses only its configured API-key reference; `deepseek-account` uses only the stored DSH grant for the account provider’s allowed inference origin. Both routes share protocol, model, and file settings. Missing or ineligible account credentials reject the request with a sign-in prompt; neither route falls back to the other. Chat and Files requests reject redirects. Successful sign-out cancels live agents whose current prepared provider is `deepseek-account`, including tool execution, while preserving pending inbox messages and independent API-key tasks. DSH account tokens use x-dsh-auth-token without a Bearer prefix for both inference protocols and all Files operations. API keys retain each protocol’s existing authentication header. diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index d58364c0ac..d955dc4019 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -234,6 +234,6 @@ loop 保留的响应块会追加到下一个请求,并保留其更早的可复 **运行时不变式:** 不发布伴生入口。本包没有独立事件序列或可变数据关系,相关约定在所属 seam 强制执行。 -挂载账号提供者时,其已保存 token 仅对 https://api.deepseek.com 优先生效。其他来源和已退出的账号继续使用配置的 API Key 引用。聊天和文件请求拒绝重定向。退出登录只删除账号授权记录,保留 API Key。 +`deepseek-official` 仅使用配置的 API Key 引用;`deepseek-account` 仅在账号提供方允许的推理来源使用已保存的 DSH 授权。两条路由共享协议、模型和文件设置。账号凭证缺失或不适用于目标时拒绝请求并提示登录;两条路由均不回退到另一凭证。Chat 和 Files 请求拒绝重定向。退登成功会取消当前已准备提供方为 `deepseek-account` 的运行代理,包括工具执行阶段,同时保留待处理消息和独立的 API Key 任务。 DSH 账号 token 在两种推理协议和所有 Files 操作中使用 x-dsh-auth-token,不加 Bearer 前缀。API Key 保持各协议现有的认证请求头。 diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index 9f9d194442..5b031e3e5d 100644 --- a/packages/llm/llm-deepseek/package.json +++ b/packages/llm/llm-deepseek/package.json @@ -39,7 +39,8 @@ "@deepseek-ai/dsh-llm": "workspace:^", "@deepseek-ai/dsh-settings": "workspace:^", "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^" + "@deepseek-ai/dsh-deepseek-account": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:^" }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:^", @@ -79,6 +80,9 @@ "peerDependenciesMeta": { "@deepseek-ai/dsh-deepseek-account": { "optional": true + }, + "@deepseek-ai/dsh-agent": { + "optional": true } } } diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 722f69bc3f..c25125987e 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -23,7 +23,7 @@ export class DeepSeekAdapter extends LlmAdapter { return new DeepSeekMessagesAdapter({ connection: () => connection, apiKey: this.dependencies.resolveApiKey, - ...this.dependencies.resolveAccountToken === undefined ? {} : { accountToken: this.dependencies.resolveAccountToken }, + accountCredential: this.dependencies.accountCredential === true, userId: this.dependencies.resolveUserId, attachments: () => this.dependencies.resolveAttachments?.(), imageAccess: (ref) => { @@ -41,7 +41,7 @@ export class DeepSeekAdapter extends LlmAdapter { } } - override providerInfo(provider: string) { return this.implementation().providerInfo(provider) } + override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek (Account)' : 'DeepSeek (API Key)' } } override providerRetryPolicy(provider: string) { return this.implementation().providerRetryPolicy(provider) } override listModels(provider: string) { return this.implementation().listModels(provider) } override resolveModel(provider: string, model: string, signal?: AbortSignal) { diff --git a/packages/llm/llm-deepseek/src/common/types.ts b/packages/llm/llm-deepseek/src/common/types.ts index 21fe8f37a7..07072e92e7 100644 --- a/packages/llm/llm-deepseek/src/common/types.ts +++ b/packages/llm/llm-deepseek/src/common/types.ts @@ -94,14 +94,14 @@ export interface DeepSeekAdapterOptions { /** Current validated connection facts; called once per operation. */ options: () => DeepSeekConnectionOptions /** - * Resolve the bearer token for the connection facts of one request. The + * Resolve this adapter’s credential for the connection facts of one request. The * snapshot is passed in — never re-read — so the key can only ever come * from the same resolution as the endpoint it is sent to. Throws `LlmError` - * `MISSING_CREDENTIAL` when no key is available anywhere. + * `MISSING_CREDENTIAL` for a missing API key; account routes reject unavailable grants. */ resolveApiKey: (connection: DeepSeekConnectionOptions) => Promise - /** Resolve a DSH account token only for an eligible official endpoint. */ - resolveAccountToken?: (connection: DeepSeekConnectionOptions) => Promise + /** Send the resolved credential as a bare DSH account token; never fall back to an API key. */ + accountCredential?: boolean /** Resolve the harness-home anonymous id shared with telemetry and feedback. */ resolveUserId: () => AnonymousUserId /** Resolve the current durable attachment service; absence rejects image input. */ diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index 6cf7922f6c..c740a9e449 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -1,5 +1,6 @@ /** Register DeepSeek with protocol selection and request-local settings and credentials. */ import type {} from '@deepseek-ai/dsh-deepseek-account' +import type {} from '@deepseek-ai/dsh-agent' import type { Context } from '@deepseek-ai/cordis' import { assertUsableApiKey, LlmError, resolveImageAttachmentAccess } from '@deepseek-ai/dsh-llm' import type {} from '@deepseek-ai/dsh-fs' @@ -107,13 +108,17 @@ export function apply(ctx: Context, config: Config): void { let userId: AnonymousUserId | undefined const resolveUserId = (): AnonymousUserId => userId ??= getOrCreateAnonymousUserId() - const adapter = new DeepSeekAdapter({ + const adapter = (accountCredential: boolean): DeepSeekAdapter => new DeepSeekAdapter({ + accountCredential, options, onReplayDegrade: ({ provider, model, reason }) => { ctx.logger.warn(`llm-deepseek: unusable Messages replay state on assistant history for route "${provider}/${model}"; sending provider-neutral content (${reason})`) }, - resolveApiKey, - resolveAccountToken: connection => ctx.get('deepseekAccount')?.resolveToken(connection.baseURL) ?? Promise.resolve(undefined), + resolveApiKey: accountCredential ? async (connection) => { + const token = await ctx.get('deepseekAccount')?.resolveToken(connection.baseURL) + if (token === undefined) throw new LlmError('Sign in to DeepSeek to use the account provider. The request destination must allow account authentication.', 'ACCOUNT_SIGN_IN_REQUIRED') + return token + } : resolveApiKey, resolveUserId, resolveAttachments: () => ctx.get('attachments'), resolveImageAccess: (attachments, ref) => resolveImageAttachmentAccess( @@ -128,11 +133,21 @@ export function apply(ctx: Context, config: Config): void { }, }) ctx.llm.registerConfigurableProviders([ - { provider: PROVIDER, displayName: 'DeepSeek', settingsNs: NS, settingsPath: [] }, + { provider: PROVIDER, displayName: 'DeepSeek (API Key)', settingsNs: NS, settingsPath: [] }, ]) // Route effects bind to this apply fiber via the stable `ctx` reference, // even when a swap runs inside the scoped settings callback below. - const registration = ctx.llm.registerAdapter([PROVIDER], adapter) + const registration = ctx.llm.registerAdapter([PROVIDER], adapter(false)) + const accountRegistration = ctx.llm.registerAdapter(['deepseek-account'], adapter(true)) + ctx.inject(['agents'], (agentCtx) => { + agentCtx.on('deepseek-account/signed-out', () => { + for (const agent of agentCtx.agents.list()) { + if (agent.activeProvider === 'deepseek-account') { + agent.cancel({ kind: 'hook', reason: 'deepseek-account/signed-out' }, { keepInbox: true }) + } + } + }) + }) let registeredPolicy = options().retryPolicy const ensureRegistrationFacts = (): void => { const policy = options().retryPolicy @@ -143,6 +158,7 @@ export function apply(ctx: Context, config: Config): void { // publish an empty route set between the two, and an observer that reacted // to it would see this provider disappear and come back. registration.replace([PROVIDER]) + accountRegistration.replace(['deepseek-account']) registeredPolicy = policy } diff --git a/packages/llm/llm-deepseek/src/protocols/chat-completions/adapter.ts b/packages/llm/llm-deepseek/src/protocols/chat-completions/adapter.ts index 6e32d4d703..78b7810dca 100644 --- a/packages/llm/llm-deepseek/src/protocols/chat-completions/adapter.ts +++ b/packages/llm/llm-deepseek/src/protocols/chat-completions/adapter.ts @@ -193,8 +193,7 @@ export class ChatCompletionsAdapter extends LlmAdapter { ) } } - const accountToken = await this.config.resolveAccountToken?.(connection) - const apiKey = accountToken ?? await this.config.resolveApiKey(connection) + const apiKey = await this.config.resolveApiKey(connection) const userId = this.config.resolveUserId() const consumer = new AbortController() const upstream = options.signal === undefined @@ -206,7 +205,7 @@ export class ChatCompletionsAdapter extends LlmAdapter { watchdog.signal, connection, apiKey, - accountToken !== undefined, + this.config.accountCredential === true, userId, attachments, () => { watchdog.pulse() }, diff --git a/packages/llm/llm-deepseek/src/protocols/messages/adapter.ts b/packages/llm/llm-deepseek/src/protocols/messages/adapter.ts index f669be7ed3..ade2e75d2f 100644 --- a/packages/llm/llm-deepseek/src/protocols/messages/adapter.ts +++ b/packages/llm/llm-deepseek/src/protocols/messages/adapter.ts @@ -24,7 +24,7 @@ export interface AdapterDependencies { /** Resolve the key named by that same generation. */ apiKey(connection: Connection): Promise /** DSH account token for an eligible official endpoint. */ - accountToken?(connection: Connection): Promise + accountCredential?: boolean /** Stable anonymous Harness identity. */ userId(): string /** Current attachment service; absence is valid for text requests. */ @@ -94,10 +94,9 @@ export class DeepSeekMessagesAdapter extends LlmAdapter { const { messages, versions } = await prepareImages( options.messages, connection, options.model, this.dependencies.attachments(), this.dependencies.imageAccess, signal, ) - const accountToken = await this.dependencies.accountToken?.(connection) - const key = accountToken ?? await this.dependencies.apiKey(connection) + const key = await this.dependencies.apiKey(connection) const files = new RequestFiles(this.dependencies.files(), { - baseURL: connection.baseURL, apiKey: key, accountCredential: accountToken !== undefined, protocol: 'messages', + baseURL: connection.baseURL, apiKey: key, accountCredential: this.dependencies.accountCredential === true, protocol: 'messages', }, connection.filePolicy, connection.filesApiTimeoutMs, signal, activity) let inline = false @@ -129,7 +128,7 @@ export class DeepSeekMessagesAdapter extends LlmAdapter { headers: { ...attributionHeaders(), 'content-type': 'application/json', 'accept': 'text/event-stream', - ...accountToken === undefined ? { 'x-api-key': key } : { 'x-dsh-auth-token': accountToken }, + ...this.dependencies.accountCredential === true ? { 'x-dsh-auth-token': key } : { 'x-api-key': key }, 'anthropic-version': '2023-06-01', ...fileIds === undefined || fileIds.size === 0 ? {} : { 'anthropic-beta': MESSAGES_FILES_BETA }, 'x-deepseek-harness-user-id': this.dependencies.userId(), diff --git a/packages/llm/llm-deepseek/tests/account-routing.spec.ts b/packages/llm/llm-deepseek/tests/account-routing.spec.ts new file mode 100644 index 0000000000..64b050fd02 --- /dev/null +++ b/packages/llm/llm-deepseek/tests/account-routing.spec.ts @@ -0,0 +1,216 @@ +/** Account route cancellation uses the real loop, registry, and tool lifecycle. */ +import { afterEach, expect, it, vi } from 'vitest' +import type { DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' +import { Context } from '@deepseek-ai/cordis' +import LlmRuntime, { createUserMessage, LlmAdapter, type GenerateOptions, type StreamChunk, ToolCallId } from '@deepseek-ai/dsh-llm' +import AgentRegistry, { type Agent } from '@deepseek-ai/dsh-agent' +import AgentLoop from '@deepseek-ai/dsh-agent-loop' +import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' +import SessionProjectionRegistry from '@deepseek-ai/dsh-session-projection' +import SystemPrompt from '@deepseek-ai/dsh-system-prompt' +import ToolRuntime, { defineContentToolFixture } from '@deepseek-ai/dsh-tools' +import * as DeepSeek from '../src/index.ts' +import { assemble } from './assemble.ts' + +const contexts: Context[] = [] +afterEach(async () => { + vi.restoreAllMocks() + vi.unstubAllEnvs() + for (const ctx of contexts.splice(0)) await ctx.fiber.dispose() +}) + +async function harness() { + const ctx = new Context() + contexts.push(ctx) + for (const plugin of [LlmRuntime, SessionStore, SessionProjectionRegistry, SystemPrompt, ToolRuntime, AgentRegistry]) { + await ctx.plugin(plugin) + } + await ctx.plugin(AgentLoop, { agents: [] }) + await ctx.plugin(DeepSeek, { protocol: 'chat-completions' }) + return ctx +} + +function send(agent: Agent) { + agent.followup(createUserMessage({ content: [{ type: 'text', text: 'go' }], source: { kind: 'user' } })) +} + +class ScriptedAdapter extends LlmAdapter { + constructor(private run: (request: GenerateOptions) => AsyncIterable) { super() } + override stream(request: GenerateOptions) { return this.run(request) } +} + +it.each(['chat-completions', 'messages'] as const)('never falls back to an API key while signed out: %s', async (protocol) => { + vi.stubEnv('DEEPSEEK_API_KEY', 'fixture-api-key') + const ctx = new Context() + contexts.push(ctx) + await ctx.plugin(LlmRuntime) + await ctx.plugin(DeepSeek, { protocol }) + const fetch = vi.spyOn(globalThis, 'fetch') + const result = await assemble(ctx, { provider: 'deepseek-account', model: 'deepseek-v4-flash', messages: [] }) + expect(result.finish).toMatchObject({ kind: 'error', failure: { code: 'ACCOUNT_SIGN_IN_REQUIRED' } }) + expect(fetch).not.toHaveBeenCalled() +}) + +it.each(['deepseek-account', 'deepseek-official'])('cancels only the active account route during tools: %s', async (provider) => { + const ctx = await harness() + const toolEntered = Promise.withResolvers() + const release = Promise.withResolvers() + const adapter = new ScriptedAdapter(async function* () { + yield { type: 'block-start', index: 0, blockType: 'tool-call' } + yield { type: 'block-end', index: 0, block: { type: 'tool-call', id: ToolCallId('fixture-call'), name: 'wait', arguments: '{}' } } + yield { type: 'finish', reason: { kind: 'tool-calls' } } + }) + ctx.on('llm/stream', request => adapter.stream(request)) + const agent = await ctx.agentLoop.create(SessionId(`tools-${provider}`), { provider, model: 'deepseek-v4-flash' }) + ctx.tools.register(defineContentToolFixture({ name: 'wait', description: '', parameters: {}, async execute() { + toolEntered.resolve(undefined) + await release.promise + return [{ type: 'text', text: 'done' }] + } })) + send(agent) + await toolEntered.promise + expect(agent.activeProvider).toBe(provider) + agent.inbox.splice('next-turn', Infinity, 0, [createUserMessage({ content: [{ type: 'text', text: 'queued' }], source: { kind: 'user' } })]) + ctx.emit('deepseek-account/signed-out') + // Changing settings cannot reclassify the already running tool call. + expect(agent.activeProvider).toBe(provider) + expect(agent.inbox.nextTurn).toHaveLength(1) + if (provider === 'deepseek-official') agent.cancel({ kind: 'user' }, { keepInbox: true }) + release.resolve(undefined) + await agent.whenIdle() + expect(agent.activeProvider).toBeUndefined() + expect(agent.inbox.nextTurn).toHaveLength(1) + expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ reason: { kind: 'aborted', reason: provider === 'deepseek-account' + ? { kind: 'hook', reason: 'deepseek-account/signed-out' } : { kind: 'user' } } }) +}) + +it.each(['tool', 'retry'])('replaces the active provider only after the next request binds: %s', async (transition) => { + const ctx = await harness() + const preparing = Promise.withResolvers() + const proceed = Promise.withResolvers() + const streaming = Promise.withResolvers() + let requests = 0 + ctx.on('agent/request', async (_event, next) => { + const config = await next() + if (++requests === 1) return config + preparing.resolve(undefined) + await proceed.promise + return { ...config, provider: 'deepseek-official' } + }) + ctx.on('agent/request-error', async (_event, next) => { await next(); return { kind: 'retry' } }) + ctx.on('llm/stream', async function* (request) { + if (request.provider === 'deepseek-account') { + if (transition === 'retry') { + yield { type: 'finish', reason: { kind: 'error', failure: { code: 'TRANSPORT', message: 'retry fixture' } } } + return + } + yield { type: 'block-start', index: 0, blockType: 'tool-call' } + yield { type: 'block-end', index: 0, block: { type: 'tool-call', id: ToolCallId('switch-call'), name: 'continue', arguments: '{}' } } + yield { type: 'finish', reason: { kind: 'tool-calls' } } + return + } + const signal = request.signal! + streaming.resolve(signal) + await new Promise((resolve) => { signal.addEventListener('abort', () => { resolve() }, { once: true }) }) + signal.throwIfAborted() + }) + ctx.tools.register(defineContentToolFixture({ name: 'continue', description: '', parameters: {}, execute: async () => [{ type: 'text', text: 'done' }] })) + const agent = await ctx.agentLoop.create(SessionId('switch-provider'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + expect(agent.activeProvider).toBeUndefined() + send(agent) + await preparing.promise + expect(agent.activeProvider).toBe('deepseek-account') + proceed.resolve(undefined) + const signal = await streaming.promise + expect(agent.activeProvider).toBe('deepseek-official') + ctx.emit('deepseek-account/signed-out') + expect(signal.aborted).toBe(false) + agent.cancel({ kind: 'user' }) + await agent.whenIdle() + expect(agent.activeProvider).toBeUndefined() +}) + +it('does not infer a provider while the first request is still being prepared', async () => { + const ctx = await harness() + const preparing = Promise.withResolvers() + const proceed = Promise.withResolvers() + ctx.on('agent/request', async ({ signal }, next) => { + preparing.resolve(undefined) + await proceed.promise + expect(signal.aborted).toBe(false) + return next() + }) + const agent = await ctx.agentLoop.create(SessionId('first-preparation'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + send(agent) + await preparing.promise + expect(agent.activeProvider).toBeUndefined() + ctx.emit('deepseek-account/signed-out') + proceed.resolve(undefined) + await agent.whenIdle() + expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ reason: { kind: 'error', error: { code: 'ACCOUNT_SIGN_IN_REQUIRED' } } }) +}) + + +it.each(['chat-completions', 'messages'] as const)('never borrows an account token for a missing API key: %s', async (protocol) => { + vi.stubEnv('DEEPSEEK_API_KEY', '') + const ctx = new Context() + contexts.push(ctx) + const resolveToken = vi.fn(async () => 'fixture-account-token') + ctx.provide('deepseekAccount', { resolveToken } as unknown as DeepSeekAccount) + await ctx.plugin(LlmRuntime) + await ctx.plugin(DeepSeek, { protocol }) + const fetch = vi.spyOn(globalThis, 'fetch') + const result = await assemble(ctx, { provider: 'deepseek-official', model: 'deepseek-v4-flash', messages: [] }) + expect(result.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) + expect(resolveToken).not.toHaveBeenCalled() + expect(fetch).not.toHaveBeenCalled() +}) + + +it('propagates account sign-out to the HTTP request signal', async () => { + const ctx = await harness() + ctx.provide('deepseekAccount', { resolveToken: async () => 'fixture-account-token' } as unknown as DeepSeekAccount) + const started = Promise.withResolvers() + vi.spyOn(globalThis, 'fetch').mockImplementation(async (_url, init) => { + const signal = init!.signal! + expect(new Headers(init!.headers).get('x-dsh-auth-token')).toBe('fixture-account-token') + started.resolve(signal) + return new Promise((_resolve, reject) => { + signal.addEventListener('abort', () => { reject(new Error('request aborted', { cause: signal.reason })) }, { once: true }) + }) + }) + const agent = await ctx.agentLoop.create(SessionId('http-abort'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + send(agent) + const signal = await started.promise + ctx.emit('deepseek-account/signed-out') + await agent.whenIdle() + expect(signal.aborted).toBe(true) + expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ reason: { kind: 'aborted', reason: { kind: 'hook', reason: 'deepseek-account/signed-out' } } }) +}) + + +it('cancels an account child without stopping its API-key parent', async () => { + const ctx = await harness() + const parentStarted = Promise.withResolvers() + const childStarted = Promise.withResolvers() + ctx.on('llm/stream', async function* (request) { + const signal = request.signal! + if (request.provider === 'deepseek-account') childStarted.resolve(signal) + else parentStarted.resolve(signal) + yield { type: 'block-start', index: 0, blockType: 'text' } + await new Promise((resolve) => { signal.addEventListener('abort', () => { resolve() }, { once: true }) }) + signal.throwIfAborted() + }) + const parent = await ctx.agentLoop.create(SessionId('parent'), { provider: 'deepseek-official', model: 'deepseek-v4-flash' }) + const childHandle = await ctx.agents.create({ sessionId: SessionId('child'), parentAgent: parent, + agentOptions: { provider: 'deepseek-account', model: 'deepseek-v4-flash' } }) + send(parent) + send(childHandle.agent) + const [parentSignal, childSignal] = await Promise.all([parentStarted.promise, childStarted.promise]) + ctx.emit('deepseek-account/signed-out') + await childHandle.agent.whenIdle() + expect(childSignal.aborted).toBe(true) + expect(parentSignal.aborted).toBe(false) + parent.cancel({ kind: 'user' }) + await parent.whenIdle() +}) diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 77b0beb741..2c95e5db00 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -1697,10 +1697,10 @@ describe('plugin registration and config', () => { protocol: 'chat-completions', baseURL: server.url, }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) expect(ctx.llm.listConfigurableProviders()).toEqual([{ provider: 'deepseek-official', - displayName: 'DeepSeek', + displayName: 'DeepSeek (API Key)', settingsNs: 'llm-deepseek', settingsPath: [], }]) @@ -1733,7 +1733,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([ { provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] }, { @@ -2186,7 +2186,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) }) it('loads keyless, keeps the catalog browsable, and fails the request actionably', async () => { @@ -2196,7 +2196,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) // First-boot onboarding: the route registers so models stay discoverable; // only the request itself needs a key. - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(2) const first = await assemble(ctx, { model: 'deepseek-flash', messages: [] }) expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) @@ -2277,7 +2277,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) // Registration succeeds; no call is made (would hit api.deepseek.com). await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) }) it('adapter is constructible directly for embedding over the shared resolver', async () => { @@ -2360,11 +2360,11 @@ describe('plugin registration and config', () => { it.each([ - ['chat-completions', 'https://api.deepseek.com', 'account-token'], - ['messages', 'https://api.deepseek.com', 'account-token'], - ['chat-completions', 'https://custom.example.test', 'ambient-key'], - ['messages', 'https://custom.example.test', 'ambient-key'], -] as const)('selects account or API-key credentials from the actual endpoint %s', async (protocol, baseURL, expected) => { + ['chat-completions', 'deepseek-account', 'account-token'], + ['messages', 'deepseek-account', 'account-token'], + ['chat-completions', 'deepseek-official', 'ambient-key'], + ['messages', 'deepseek-official', 'ambient-key'], +] as const)('keeps provider credentials independent for %s %s', async (protocol, provider, expected) => { vi.stubEnv('DEEPSEEK_API_KEY', 'ambient-key') const ctx = new Context() // This consumer uses only resolveToken; the real provider owns origin validation in its own suite. @@ -2372,7 +2372,7 @@ it.each([ resolveToken: (url: string) => Promise.resolve(url === 'https://api.deepseek.com' ? 'account-token' : undefined), } as DeepSeekAccount) await ctx.plugin(LlmRuntime) - await ctx.plugin(LlmDeepSeek, { baseURL, protocol }) + await ctx.plugin(LlmDeepSeek, { baseURL: 'https://api.deepseek.com', protocol }) const request = vi.spyOn(globalThis, 'fetch').mockImplementation((_input, init) => { const headers = new Headers(init?.headers) expect(headers.get('authorization')).toBe(expected === 'account-token' || protocol === 'messages' ? null : `Bearer ${expected}`) @@ -2382,7 +2382,7 @@ it.each([ return Promise.resolve(new Response('fixture rejection', { status: 400 })) }) try { - await assemble(ctx, { model: 'deepseek-v4-flash', messages: [] }) + await assemble(ctx, { provider, model: 'deepseek-v4-flash', messages: [] }) expect(request).toHaveBeenCalledOnce() - } finally { request.mockRestore() } + } finally { request.mockRestore(); await ctx.fiber.dispose() } }) diff --git a/packages/llm/llm-deepseek/tsconfig.json b/packages/llm/llm-deepseek/tsconfig.json index b1bae1c4bc..e366466ab9 100644 --- a/packages/llm/llm-deepseek/tsconfig.json +++ b/packages/llm/llm-deepseek/tsconfig.json @@ -58,6 +58,9 @@ }, { "path": "../../credentials/deepseek-account" + }, + { + "path": "../../core/agent" } ] } diff --git a/packages/schedule/schedule/tests/runtime.spec.ts b/packages/schedule/schedule/tests/runtime.spec.ts index d86859ac50..22eba5d3be 100644 --- a/packages/schedule/schedule/tests/runtime.spec.ts +++ b/packages/schedule/schedule/tests/runtime.spec.ts @@ -63,6 +63,7 @@ async function harness(): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: new Context(), send(_message: UserMessage, _target: InboxTarget, _wakeup: boolean) {}, diff --git a/packages/schedule/schedule/tests/tools.spec.ts b/packages/schedule/schedule/tests/tools.spec.ts index a34281c1b5..c7775725ba 100644 --- a/packages/schedule/schedule/tests/tools.spec.ts +++ b/packages/schedule/schedule/tests/tools.spec.ts @@ -30,6 +30,7 @@ function stubAgent(ctx: Context, id: string): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: new Context(), send(_message: UserMessage, _target: InboxTarget, _wakeup: boolean) {}, diff --git a/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts b/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts index ea3688fefb..a520878b48 100644 --- a/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts +++ b/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts @@ -49,6 +49,7 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-bash-persistent/tests/tools.spec.ts b/packages/shell/tool-bash-persistent/tests/tools.spec.ts index a79d116556..5c114c1c81 100644 --- a/packages/shell/tool-bash-persistent/tests/tools.spec.ts +++ b/packages/shell/tool-bash-persistent/tests/tools.spec.ts @@ -43,6 +43,7 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts b/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts index eacd51d586..22f9951599 100644 --- a/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts +++ b/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts @@ -56,6 +56,7 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts b/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts index c260f818eb..b7cb58ccac 100644 --- a/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts +++ b/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts @@ -43,6 +43,7 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/skill/tool-skill/tests/tool-skill.spec.ts b/packages/skill/tool-skill/tests/tool-skill.spec.ts index 7d9fb0d2f0..15528c1074 100644 --- a/packages/skill/tool-skill/tests/tool-skill.spec.ts +++ b/packages/skill/tool-skill/tests/tool-skill.spec.ts @@ -73,6 +73,7 @@ function agentForCwd(cwd: string): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', send: () => {}, followup: () => {}, @@ -90,6 +91,7 @@ function sessionAgent(session: Session, id = 'tool-skill-agent'): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/terminal/terminal-bash/tests/index.spec.ts b/packages/terminal/terminal-bash/tests/index.spec.ts index 16b7f9ffce..9904d11c8e 100644 --- a/packages/terminal/terminal-bash/tests/index.spec.ts +++ b/packages/terminal/terminal-bash/tests/index.spec.ts @@ -56,6 +56,7 @@ function agent(ctx: Context, cwd?: string): Agent { }) return { id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx, send: () => {}, @@ -658,6 +659,7 @@ describe('terminal-bash plugin shape', () => { const ownerFiber = await ctx.plugin(() => {}) const owner: Agent = { id: session.id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: ownerFiber.ctx, send: () => {}, @@ -708,6 +710,7 @@ describe('terminal-bash plugin shape', () => { const ownerFiber = await ctx.plugin(() => {}) const owner: Agent = { id: session.id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: ownerFiber.ctx, send: () => {}, diff --git a/packages/terminal/terminal-bash/tests/local.spec.ts b/packages/terminal/terminal-bash/tests/local.spec.ts index 7ef28c6929..31a870becd 100644 --- a/packages/terminal/terminal-bash/tests/local.spec.ts +++ b/packages/terminal/terminal-bash/tests/local.spec.ts @@ -41,6 +41,7 @@ function stubAgent(ctx: Context, rawId: string): Agent { const session = Session.create(id) const agent: Agent = { id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/terminal/terminal/tests/service.spec.ts b/packages/terminal/terminal/tests/service.spec.ts index 11da341945..d43654b997 100644 --- a/packages/terminal/terminal/tests/service.spec.ts +++ b/packages/terminal/terminal/tests/service.spec.ts @@ -28,6 +28,7 @@ function stubAgent(ctx: Context, rawId: string): Agent { options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scopeFiber.ctx, send: () => {}, diff --git a/packages/terminal/tool-terminal/tests/loader-composition.spec.ts b/packages/terminal/tool-terminal/tests/loader-composition.spec.ts index b983872934..8279699981 100644 --- a/packages/terminal/tool-terminal/tests/loader-composition.spec.ts +++ b/packages/terminal/tool-terminal/tests/loader-composition.spec.ts @@ -44,6 +44,7 @@ async function agent(ctx: Context): Promise { const session = Session.create(id) const value: Agent = { id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/terminal/tool-terminal/tests/tools.spec.ts b/packages/terminal/tool-terminal/tests/tools.spec.ts index 934b4c6d60..e106a8c50a 100644 --- a/packages/terminal/tool-terminal/tests/tools.spec.ts +++ b/packages/terminal/tool-terminal/tests/tools.spec.ts @@ -20,6 +20,7 @@ async function fakeAgent(ctx: Context, rawId: string): Promise { const session = Session.create(id) const agent: Agent = { id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/todo/tool-todo/tests/loader-composition.spec.ts b/packages/todo/tool-todo/tests/loader-composition.spec.ts index a1e76b01b3..5ec74013fe 100644 --- a/packages/todo/tool-todo/tests/loader-composition.spec.ts +++ b/packages/todo/tool-todo/tests/loader-composition.spec.ts @@ -35,6 +35,7 @@ async function agent(ctx: Context): Promise { const session = Session.create(id) const value: Agent = { id, options: {}, session, inbox: unsupportedInbox(), + activeProvider: undefined, status: 'idle', ctx: scope.ctx, followup: () => {}, steer: () => {}, inject: () => {}, send: () => {}, cancel() {}, runMaintenance: task => task(new AbortController().signal), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81dfd23e8a..7778620938 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -948,6 +948,9 @@ importers: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis + '@deepseek-ai/dsh-agent': + specifier: workspace:^ + version: link:../../core/agent '@deepseek-ai/dsh-deepseek-account': specifier: workspace:^ version: link:../../credentials/deepseek-account diff --git a/python/sdk/tests/expected/account-provider-signout.json b/python/sdk/tests/expected/account-provider-signout.json new file mode 100644 index 0000000000..64969395aa --- /dev/null +++ b/python/sdk/tests/expected/account-provider-signout.json @@ -0,0 +1,11 @@ +{ + "final_response": "Before sign-out", + "finish_reason": "aborted", + "reason": { + "kind": "aborted", + "reason": { + "kind": "hook", + "reason": "deepseek-account/signed-out" + } + } +} diff --git a/python/sdk/tests/test_account_provider_snapshot.py b/python/sdk/tests/test_account_provider_snapshot.py new file mode 100644 index 0000000000..5d27eb5522 --- /dev/null +++ b/python/sdk/tests/test_account_provider_snapshot.py @@ -0,0 +1,35 @@ +"""Project the recorded account cancellation through the real Python SDK.""" +from __future__ import annotations + +import json +from pathlib import Path + +import pytest + +from deepseek_harness import DeepSeekHarness + +ROOT = Path(__file__).resolve().parents[3] +CLI = ROOT / 'apps' / 'cli' / 'lib' / 'bin.js' + + +@pytest.mark.skipif(not CLI.exists(), reason='requires the built dsh profile runtime') +def test_account_provider_signout_snapshot(tmp_path: Path) -> None: + with DeepSeekHarness( + dsh_bin=str(CLI), + dsh_home=str(tmp_path / 'home'), + cwd=str(tmp_path), + profile='sdk', + patches=(str(ROOT / 'snapshots' / 'sdk' / 'account-provider-signout' / 'cordis.yml'),), + provider='deepseek-account', + model='deepseek-v4-flash', + env={'DSH_TELEMETRY_DISABLED': '1', 'DSH_SNAPSHOT': 'replay'}, + ) as harness: + result = harness.run('Reply with exactly: SDK snapshot') + ending = next(event for event in reversed(result.events) if event['type'] == 'turn/end') + actual = { + 'final_response': result.final_response, + 'finish_reason': result.finish_reason, + 'reason': ending['data']['reason'], + } + expected = Path(__file__).with_name('expected') / 'account-provider-signout.json' + assert actual == json.loads(expected.read_text()) diff --git a/scripts/gen-cordis-catalog.ts b/scripts/gen-cordis-catalog.ts index e2adb7f7e0..838cf6d998 100644 --- a/scripts/gen-cordis-catalog.ts +++ b/scripts/gen-cordis-catalog.ts @@ -216,6 +216,7 @@ export const EVENT_SCOPE_PAGE: Record = { 'cordis': 'extensions.md', 'authorization': 'credentials.md', 'credentials': 'credentials.md', + 'deepseek-account': 'credentials.md', 'domain': 'storage.md', 'fs': 'filesystem.md', 'goal': 'goal.md', diff --git a/snapshots/sdk/account-provider-signout/account-signout.mjs b/snapshots/sdk/account-provider-signout/account-signout.mjs new file mode 100644 index 0000000000..c468f6022b --- /dev/null +++ b/snapshots/sdk/account-provider-signout/account-signout.mjs @@ -0,0 +1,11 @@ +/** Deterministic transport boundary; cancellation belongs to the shipped DeepSeek plugin. */ +export const inject = ['llm', 'agents'] +export function apply(ctx) { + ctx.on('llm/stream', async function* (request, next) { + if (request.provider !== 'deepseek-account') { yield* next(); return } + yield { type: 'block-start', index: 0, blockType: 'text' } + yield { type: 'text-delta', index: 0, text: 'Before sign-out' } + ctx.emit('deepseek-account/signed-out') + request.signal.throwIfAborted() + }) +} diff --git a/snapshots/sdk/account-provider-signout/cordis.snapshot.yml b/snapshots/sdk/account-provider-signout/cordis.snapshot.yml new file mode 100644 index 0000000000..fe51488c70 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/cordis.snapshot.yml @@ -0,0 +1 @@ +[] diff --git a/snapshots/sdk/account-provider-signout/cordis.yml b/snapshots/sdk/account-provider-signout/cordis.yml new file mode 100644 index 0000000000..dc92a814c0 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/cordis.yml @@ -0,0 +1,33 @@ +# TypeScript SDK snapshot-record patch over `dsh --profile sdk`. + +# The fixture corpus must not depend on the developer's personal skill roots. +# Ordinary product launches retain the sdk profile's default skill discovery. +- id: skill-filesystem + name: '@deepseek-ai/dsh-skill-filesystem' + config: + includeDefaultRoots: false + +- id: llm-deepseek + name: '@deepseek-ai/dsh-llm-deepseek' + config: + thinking: enabled + reasoningEffort: max + +- id: session-persistence-jsonl + name: '@deepseek-ai/dsh-session-persistence-jsonl' + config: + root: !!js dshHomePath('sessions') + compression: !!js "process.env.DSH_SNAPSHOT === undefined ? 'zstd' : 'none'" + +- id: tool-subagent + name: '@deepseek-ai/dsh-tool-subagent' + config: + provider: spawn + toolName: subagent + backgroundMode: one-shot + enableRunInBackground: false + maxDepth: 1 + +- insert: + - id: account-signout-fixture + name: './account-signout.mjs' diff --git a/snapshots/sdk/account-provider-signout/notifications.expected.jsonl b/snapshots/sdk/account-provider-signout/notifications.expected.jsonl new file mode 100644 index 0000000000..58848035b2 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/notifications.expected.jsonl @@ -0,0 +1,15 @@ +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":3,"time":0,"data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Reply with exactly: SDK snapshot OK"}],"source":{"kind":"user"},"role":"user","id":"{{sessionId}}"}]}}}} +{"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"running"}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/start","seq":4,"time":0,"data":{"turn":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"agent/inbox/spliced","seq":5,"time":0,"data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/start","seq":6,"time":0,"data":{"turn":1,"step":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"system/message","seq":7,"time":0,"data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt"},"id":"{{sessionId}}"}},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":8,"time":0,"data":{"content":[{"type":"text","text":"Reply with exactly: SDK snapshot OK"}],"source":{"kind":"user"},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"user/message","seq":9,"time":0,"data":{"content":[{"type":"text","text":"Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: \"{{cwd}}\". Some platform temporary areas may also be writable.\n\nApproval policy: ask. Operations that require approval may ask through the configured answerers; without an available answerer, the request fails closed."}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt","form":"snapshot","sections":[{"name":"sandbox:policy","text":"Current DSH file policy: workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: \"{{cwd}}\". Some platform temporary areas may also be writable."},{"name":"approval:policy","text":"Approval policy: ask. Operations that require approval may ask through the configured answerers; without an available answerer, the request fails closed."}]},"role":"user","id":"{{sessionId}}"},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"request/header","seq":10,"time":0,"data":{"header":{"config":{"provider":"deepseek-account","model":"deepseek-v4-flash","maxTokens":256000,"reasoningEffort":"max"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"tools":"{{tools}}"},"reason":"initial"}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"request/context","seq":11,"time":0,"data":{"provider":"deepseek-account","model":"deepseek-v4-flash","contextWindow":1000000}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"session/title","seq":12,"time":0,"data":{"title":"Reply with exactly: SDK snapshot","messageSeqs":[8],"source":{"kind":"fallback"}}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"assistant/message","seq":13,"time":0,"data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"Before sign-out"}],"source":{"kind":"model","provider":"deepseek-account","model":"deepseek-v4-flash"},"id":"{{sessionId}}"},"interrupted":true,"stream":[{"type":"chunk","time":0,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":0,"index":0,"dt":[],"texts":["Before sign-out"]}]},"surfaceOp":"append"}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"step/end","seq":14,"time":0,"data":{"turn":1,"step":1}}}} +{"method":"session.event","params":{"sessionId":"{{sessionId}}","event":{"type":"turn/end","seq":15,"time":0,"data":{"turn":1,"reason":{"kind":"aborted","reason":{"kind":"hook","reason":"deepseek-account/signed-out"}}}}}} +{"method":"session.status","params":{"sessionId":"{{sessionId}}","status":"idle"}} diff --git a/snapshots/sdk/account-provider-signout/result.expected.json b/snapshots/sdk/account-provider-signout/result.expected.json new file mode 100644 index 0000000000..126859b4d3 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/result.expected.json @@ -0,0 +1 @@ +{"sessionId":"{{sessionId}}","finalResponse":"Before sign-out"} diff --git a/snapshots/sdk/account-provider-signout/session.v3.jsonl b/snapshots/sdk/account-provider-signout/session.v3.jsonl new file mode 100644 index 0000000000..c4914849ec --- /dev/null +++ b/snapshots/sdk/account-provider-signout/session.v3.jsonl @@ -0,0 +1,17 @@ +{"type":"session","version":3,"id":"{{session:1}}","createdAt":1785097381464,"cwd":"{{cwd}}","isSeeded":false,"delegationDepth":0} +{"type":"permission/preset","data":{"preset":"workspace-write"}} +{"type":"sandbox/mode","data":{"mode":"workspace-write"}} +{"type":"approval/policy","data":{"policy":"ask"}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"inserted":[{"content":[{"type":"text","text":"Reply with exactly: SDK snapshot OK"}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"}]}} +{"type":"turn/start","data":{"turn":1}} +{"type":"agent/inbox/spliced","data":{"target":"next-turn","start":0,"removedCount":1,"inserted":[]}} +{"type":"step/start","data":{"turn":1,"step":1}} +{"type":"system/message","data":{"turn":1,"step":1,"message":{"role":"system","content":[{"type":"text","text":"{{system}}"}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt"},"id":"{{message:2}}"}},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Reply with exactly: SDK snapshot OK"}],"source":{"kind":"user"},"role":"user","id":"{{message:1}}"},"surfaceOp":"append"} +{"type":"user/message","data":{"content":[{"type":"text","text":"Current runtime context. This snapshot supersedes earlier runtime-context snapshots.\n\nCurrent DSH file policy: workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: \"{{cwd}}\". Some platform temporary areas may also be writable.\n\nApproval policy: ask. Operations that require approval may ask through the configured answerers; without an available answerer, the request fails closed."}],"source":{"kind":"plugin","plugin":"@deepseek-ai/dsh-system-prompt","form":"snapshot","sections":[{"name":"sandbox:policy","text":"Current DSH file policy: workspace-write. Any available operation enforced by the DSH file sandbox may modify files under the session workspace: \"{{cwd}}\". Some platform temporary areas may also be writable."},{"name":"approval:policy","text":"Approval policy: ask. Operations that require approval may ask through the configured answerers; without an available answerer, the request fails closed."}]},"role":"user","id":"{{message:3}}"},"surfaceOp":"append"} +{"type":"request/header","data":{"header":{"config":{"provider":"deepseek-account","model":"deepseek-v4-flash","maxTokens":256000,"reasoningEffort":"max"},"adapterDefaults":{"reasoningEffort":true,"maxTokens":true},"tools":"{{tools}}"},"reason":"initial"}} +{"type":"request/context","data":{"provider":"deepseek-account","model":"deepseek-v4-flash","contextWindow":1000000}} +{"type":"session/title","data":{"title":"Reply with exactly: SDK snapshot","messageSeqs":[8],"source":{"kind":"fallback"}}} +{"type":"assistant/message","data":{"turn":1,"step":1,"message":{"role":"assistant","content":[{"type":"text","text":"Before sign-out"}],"source":{"kind":"model","provider":"deepseek-account","model":"deepseek-v4-flash"},"id":"{{message:4}}"},"interrupted":true,"stream":[{"type":"chunk","time":1789643933994,"chunk":{"type":"block-start","index":0,"blockType":"text"}},{"type":"text-chunks","time0":1789643933994,"index":0,"dt":[],"texts":["Before sign-out"]}]},"surfaceOp":"append"} +{"type":"step/end","data":{"turn":1,"step":1}} +{"type":"turn/end","data":{"turn":1,"reason":{"kind":"aborted","reason":{"kind":"hook","reason":"deepseek-account/signed-out"}}}} diff --git a/snapshots/sdk/account-provider-signout/snapshot.yml b/snapshots/sdk/account-provider-signout/snapshot.yml new file mode 100644 index 0000000000..b5300fde63 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/snapshot.yml @@ -0,0 +1,10 @@ +version: 1 +scenario: account-provider-signout +profile: sdk +composition: sdk-account-provider-signout +recording: authored +header: + class: sdk-account-provider-signout + pin: true + systemPromptSource: text-turn + toolSchemasSource: text-turn diff --git a/snapshots/sdk/account-provider-signout/system-prompt.expected.md b/snapshots/sdk/account-provider-signout/system-prompt.expected.md new file mode 120000 index 0000000000..4ca0dd39b2 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/system-prompt.expected.md @@ -0,0 +1 @@ +../text-turn/system-prompt.expected.md \ No newline at end of file diff --git a/snapshots/sdk/account-provider-signout/tool-schemas.expected.json b/snapshots/sdk/account-provider-signout/tool-schemas.expected.json new file mode 120000 index 0000000000..11d7ccbf24 --- /dev/null +++ b/snapshots/sdk/account-provider-signout/tool-schemas.expected.json @@ -0,0 +1 @@ +../text-turn/tool-schemas.expected.json \ No newline at end of file From cc478ac70a93806d28251b9450b234b79bd56bf0 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Fri, 18 Sep 2026 11:59:31 +0800 Subject: [PATCH 03/60] feat(client,session-controller,llm): track available models and expose account settings --- apps/web/tests/default-model.e2e.ts | 15 +++- .../default-model/unselected.expected.md | 8 ++ docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 2 +- docs/event-producer-consumer.zh.md | 2 +- docs/subsystems/core.i18n.yaml | 4 +- docs/subsystems/core.md | 9 ++- docs/subsystems/core.zh.md | 9 ++- docs/subsystems/session.i18n.yaml | 4 +- docs/subsystems/session.md | 7 ++ docs/subsystems/session.zh.md | 7 ++ packages/api/remotes/src/remote-events.ts | 1 + .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 2 + packages/api/session-controller/README.zh.md | 2 + .../api/session-controller/src/catalog.ts | 14 +++- .../api/session-controller/src/commands.ts | 22 ++--- packages/api/session-controller/src/index.ts | 17 +++- packages/api/session-controller/src/types.ts | 2 +- .../tests/commands-upload-file.host.spec.ts | 1 + .../tests/session-cold.host.spec.ts | 1 + .../tests/session-models.host.spec.ts | 81 ++++++++++++------- .../session-controller/tests/test-remote.ts | 4 + .../client/ui-conversation/README.i18n.yaml | 4 +- packages/client/ui-conversation/README.md | 2 +- packages/client/ui-conversation/README.zh.md | 2 +- .../client/skeleton/ConversationContent.tsx | 4 +- .../ui-model-selection/README.i18n.yaml | 4 +- packages/client/ui-model-selection/README.md | 8 +- .../client/ui-model-selection/README.zh.md | 8 +- .../src/client/directory.ts | 29 ++----- .../ui-model-selection/src/client/locales.ts | 4 +- .../ui-model-selection/src/client/service.ts | 8 +- .../tests/browser-plugin.client.spec.ts | 40 ++++----- .../tests/expected/unselected-model.txt | 1 + .../tests/model-select.client.spec.tsx | 9 +++ .../ui-settings-account/README.i18n.yaml | 4 +- packages/client/ui-settings-account/README.md | 3 + .../client/ui-settings-account/README.zh.md | 3 + .../ui-settings-account/src/client/index.ts | 14 +++- .../tests/apply.client.spec.ts | 55 +++++++++++++ .../ui-settings-models/README.i18n.yaml | 4 +- packages/client/ui-settings-models/README.md | 2 + .../client/ui-settings-models/README.zh.md | 2 + .../src/client/CustomProviderCard.tsx | 2 +- .../src/client/ModelsSection.tsx | 6 +- .../src/client/ProviderEditor.tsx | 9 ++- .../ui-settings-models/src/client/index.ts | 3 +- .../ui-settings-models/src/client/locales.ts | 2 + .../src/client/operations.ts | 6 ++ .../ui-settings-models/src/client/store.ts | 15 +++- .../tests/apply.client.spec.ts | 3 +- .../tests/components.client.spec.tsx | 23 +++++- .../tests/expected/deepseek-account-en.txt | 1 + .../tests/expected/deepseek-account-zh.txt | 1 + .../tests/model-list-catalog.client.spec.tsx | 1 + .../tests/onboarding-dialog.client.spec.tsx | 2 +- .../tests/provider-form.client.spec.tsx | 4 +- .../tests/store.client.spec.ts | 18 ++++- .../core/agent-default-model/README.i18n.yaml | 4 +- packages/core/agent-default-model/README.md | 6 +- .../core/agent-default-model/README.zh.md | 6 +- .../core/agent-default-model/src/index.ts | 39 +++++++-- .../tests/agent-default-model.spec.ts | 23 ++++-- .../extensions/tool-cordis/src/api-catalog.ts | 14 +++- packages/llm/llm-deepseek/README.i18n.yaml | 4 +- packages/llm/llm-deepseek/README.md | 2 + packages/llm/llm-deepseek/README.zh.md | 2 + packages/llm/llm-deepseek/src/adapter.ts | 13 ++- packages/llm/llm-deepseek/src/index.ts | 1 + .../tests/account-routing.spec.ts | 17 ++++ .../llm/llm-deepseek/tests/adapter.spec.ts | 22 ++--- packages/llm/llm-pi-ai/README.i18n.yaml | 4 +- packages/llm/llm-pi-ai/README.md | 2 + packages/llm/llm-pi-ai/README.zh.md | 2 + packages/llm/llm-pi-ai/src/adapter.ts | 9 ++- packages/llm/llm-pi-ai/tests/catalog.spec.ts | 2 +- 77 files changed, 511 insertions(+), 189 deletions(-) create mode 100644 apps/web/tests/expected/default-model/unselected.expected.md create mode 100644 packages/client/ui-model-selection/tests/expected/unselected-model.txt create mode 100644 packages/client/ui-settings-account/tests/apply.client.spec.ts create mode 100644 packages/client/ui-settings-models/tests/expected/deepseek-account-en.txt create mode 100644 packages/client/ui-settings-models/tests/expected/deepseek-account-zh.txt diff --git a/apps/web/tests/default-model.e2e.ts b/apps/web/tests/default-model.e2e.ts index 304bdb97f6..f9fd8da7ea 100644 --- a/apps/web/tests/default-model.e2e.ts +++ b/apps/web/tests/default-model.e2e.ts @@ -17,7 +17,7 @@ import type { Browser, Page } from 'playwright' import { chromium } from 'playwright' import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest' import { SessionId } from '@deepseek-ai/dsh-session' -import { launchWebScaffold, watchConsole, type WebScaffold } from './scaffold.ts' +import { launchWebScaffold, watchConsole, captureStableAria, compareOrRefreshGolden, webSnapshotMode, type WebScaffold } from './scaffold.ts' import { ZH_BROWSER_LOCALE, connectFreshWorkspaceZh, saveFailureShot } from './support.ts' /** Points the shipped shared Agent default at this scenario's own route. */ @@ -135,10 +135,17 @@ describe('web e2e: the composer model switch is the default for later sessions', // default still names the route, and nothing serves it any more. // `replace`, not `update`: a merge patch of `{providers: {}}` leaves every // stored profile in place. - await scaffold.ctx.settings.replace('llm-pi-ai', { providers: {} }) + await scaffold.ctx.settings.replace('llm-pi-ai', { providers: { + [START_ROUTE]: { displayName: 'Origin Gateway', api: 'openai-completions', + baseURL: 'https://gateway.origin.example/v1', models: [{ id: START_MODEL, name: 'Origin Large' }] }, + } }) await expect.poll(async () => box.isEnabled(), { timeout: 15_000 }).toBe(false) - expect(await box.getAttribute('data-placeholder')).toBe('当前模型不可用,请先选择模型') + const unset = page.getByRole('button', { name: '请选择模型', exact: true }) + await unset.waitFor() + expect(await page.getByRole('button', { name: '发送消息', exact: true }).isEnabled()).toBe(false) + const aria = await captureStableAria(page, '[data-composer-card]', scaffold.workspaceCwd) + await compareOrRefreshGolden(fileURLToPath(new URL('./expected/default-model/unselected.expected.md', import.meta.url)), aria, webSnapshotMode()) // The block is an affordance; the refusal is the Host's. A client that // never disabled anything still cannot start a turn on a dead route. @@ -151,7 +158,7 @@ describe('web e2e: the composer model switch is the default for later sessions', // The way out stays open. Locking the model seat with everything else // would leave the composer asking for the one thing it prevents. - const seat = page.getByRole('button', { name: /^选择模型/ }) + const seat = page.getByRole('button', { name: '请选择模型', exact: true }) expect(await seat.isEnabled()).toBe(true) await seat.click() await page.getByRole('menuitem', { name: /模型/ }).click() diff --git a/apps/web/tests/expected/default-model/unselected.expected.md b/apps/web/tests/expected/default-model/unselected.expected.md new file mode 100644 index 0000000000..c4fb007e9c --- /dev/null +++ b/apps/web/tests/expected/default-model/unselected.expected.md @@ -0,0 +1,8 @@ +- textbox "描述你想要构建的内容, / 调用指令, @ 文件或对话" [disabled] +- button "添加文件或调用指令" [disabled]: + - img +- button "访问模式,当前:工作区内修改" [disabled]: 工作区内修改 +- button "请选择模型": + - text: 请选择模型 + - img +- button "发送消息" [disabled] diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index 72ffc23a6d..e174fcd03e 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/event-producer-consumer.md -event-producer-consumer.md: 3d5ad12ef85b6b3c4fedde87cea8963f4a20d93b -event-producer-consumer.zh.md: c212611c25f60283f91ef58530121d84092be936 +event-producer-consumer.md: c5535c610ed88f265efe5065e2ff3374030192d4 +event-producer-consumer.zh.md: b2e558f5e711a3cf3628f1b9da802c1d69693090 diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 3d5ad12ef8..c5535c610e 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -37,7 +37,7 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `cordis/inspect-query-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:398`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `cordis/request-run` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:368`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | -| `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | +| `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | | `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:11`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`llm-deepseek`](../packages/llm/llm-deepseek) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index c212611c25..b2e558f5e7 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -39,7 +39,7 @@ | `cordis/inspect-query-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:398`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `cordis/request-run` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:368`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | -| `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | +| `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | | `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:11`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`llm-deepseek`](../packages/llm/llm-deepseek) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | diff --git a/docs/subsystems/core.i18n.yaml b/docs/subsystems/core.i18n.yaml index 23bd8abfb0..d7679f8cfd 100644 --- a/docs/subsystems/core.i18n.yaml +++ b/docs/subsystems/core.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/core.md -core.md: ad5bb66073bc7c3381739935eff593d49343b851 -core.zh.md: d0ec1aed5f3d504e4cd5e781c3a6927f311cbc7b +core.md: 5b51a81ff910072e67ffb796cbc9276a00827dcc +core.zh.md: 8c2fd014203500990b29ea374c45fad2f4ef2b42 diff --git a/docs/subsystems/core.md b/docs/subsystems/core.md index ad5bb66073..5b51a81ff9 100644 --- a/docs/subsystems/core.md +++ b/docs/subsystems/core.md @@ -434,11 +434,18 @@ currentSelection(): ModelSelection /** * Save the complete default model selection. A deployment without a settings - * provider keeps its composition entry. + * provider retains the selection for this process. * @param next - resolved selection accepted by an entry point. * @returns fulfillment after the optional settings write settles. */ async saveSelection(next: ModelSelection): Promise + +/** + * Store the initial credential setup choice only before a user selection exists. + * @param next - available model belonging to the provider the user initialized. + * @returns after the initial selection is saved, or immediately if already selected. + */ +async initializeSelection(next: ModelSelection): Promise ``` Source: [`packages/core/agent-default-model/src/index.ts`](../../packages/core/agent-default-model/src/index.ts) diff --git a/docs/subsystems/core.zh.md b/docs/subsystems/core.zh.md index d0ec1aed5f..8c2fd01420 100644 --- a/docs/subsystems/core.zh.md +++ b/docs/subsystems/core.zh.md @@ -444,11 +444,18 @@ currentSelection(): ModelSelection /** * Save the complete default model selection. A deployment without a settings - * provider keeps its composition entry. + * provider retains the selection for this process. * @param next - resolved selection accepted by an entry point. * @returns fulfillment after the optional settings write settles. */ async saveSelection(next: ModelSelection): Promise + +/** + * Store the initial credential setup choice only before a user selection exists. + * @param next - available model belonging to the provider the user initialized. + * @returns after the initial selection is saved, or immediately if already selected. + */ +async initializeSelection(next: ModelSelection): Promise ``` Source: [`packages/core/agent-default-model/src/index.ts`](../../packages/core/agent-default-model/src/index.ts) diff --git a/docs/subsystems/session.i18n.yaml b/docs/subsystems/session.i18n.yaml index 83eecfd1c7..84327833d3 100644 --- a/docs/subsystems/session.i18n.yaml +++ b/docs/subsystems/session.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/session.md -session.md: 62f7785d4d1db9c30706a8b967e6f4073b810149 -session.zh.md: 7cd3c38162df209d245d3f1085ab1edce002531a +session.md: 202f6adf6e89e1293feb5181c1397b4725720ced +session.zh.md: feb2cc0845b426bad0046d0a8a7a4737b210a8f4 diff --git a/docs/subsystems/session.md b/docs/subsystems/session.md index 62f7785d4d..202f6adf6e 100644 --- a/docs/subsystems/session.md +++ b/docs/subsystems/session.md @@ -818,6 +818,13 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise +/** + * Initialize the default after the user first configures a provider credential. + * @param provider - the provider whose credential was configured. + * @returns after saving the initial available model; existing user choices are retained. + */ +@Remote async initializeDefaultModel(provider: string): Promise + /** * Describe every currently routable model for Host-generation selectors. * @returns provider-grouped models, the deployment default, and isolated provider failures. diff --git a/docs/subsystems/session.zh.md b/docs/subsystems/session.zh.md index 7cd3c38162..feb2cc0845 100644 --- a/docs/subsystems/session.zh.md +++ b/docs/subsystems/session.zh.md @@ -822,6 +822,13 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise +/** + * Initialize the default after the user first configures a provider credential. + * @param provider - the provider whose credential was configured. + * @returns after saving the initial available model; existing user choices are retained. + */ +@Remote async initializeDefaultModel(provider: string): Promise + /** * Describe every currently routable model for Host-generation selectors. * @returns provider-grouped models, the deployment default, and isolated provider failures. diff --git a/packages/api/remotes/src/remote-events.ts b/packages/api/remotes/src/remote-events.ts index 115cbff692..b9cecc5b13 100644 --- a/packages/api/remotes/src/remote-events.ts +++ b/packages/api/remotes/src/remote-events.ts @@ -24,6 +24,7 @@ export const API_REMOTE_FORWARDED_EVENTS = [ { event: 'api-session/removed', mode: 'emit' }, { event: 'api-session/status', mode: 'emit' }, { event: 'commands/change', mode: 'emit' }, + { event: 'credentials/record-updated', mode: 'emit' }, { event: 'credentials/reference-updated', mode: 'emit' }, { event: 'goal/activation-changed', mode: 'emit' }, { event: 'cordis/request-run', mode: 'emit' }, diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index d04576c269..b178f956cf 100644 --- a/packages/api/session-controller/README.i18n.yaml +++ b/packages/api/session-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/session-controller/README.md -README.md: a0e18910d14f879171a1415476a7e05a0d261a8a -README.zh.md: 58466e387fd604137a2358e8b9a7de3320691034 +README.md: 5f09de61395c3d729144203b77eeb299c217128e +README.zh.md: dfb5b97b5804b4512d17eab47866ee079fbc047d diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index a0e18910d1..5f09de6139 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -68,6 +68,8 @@ References keep local Session data, scoped Contexts, and history streams alive, `SessionMediaReferences` mounts `GET|HEAD /api/file?path=` on the authenticated `connection.fetch` channel when `connection`, `fs`, and `attachments` are composed. It reads ordinary files through `ctx.fs`, including temporary paths outside registered workspaces and files in remote providers. Neither directory containment nor MIME categories restrict access; `mime-types` supplies the response type, with `application/octet-stream` for unknown extensions. GET reuses `readBytes` for preflight and ongoing byte limits; HEAD reads metadata only. All files use `ctx.attachments.imageLimits.maxImageBytes` (normally 20 MiB); exceeding this limit returns 413. Responses contain the complete file, ignore Range, and carry `private, no-store`, `nosniff`, and a sandbox CSP so directly opened HTML/SVG cannot execute with the API origin. The Client rewrite lives in `ui-chat` (`AssistantMarkdown`); audio/video responses are available, while Markdown audio/video player nodes remain separate work. +GUI model selection and prompt admission require the exact provider/model pair in the current available catalog. An unavailable selection rejects with `session/model-unavailable` before delivery; admission checks again after attachment preparation. `initializeDefaultModel(provider)` saves the first available model of the explicitly configured provider only before any user choice exists. Availability never substitutes another model or rewrites a Session selection. + ----- diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index 58466e387f..dfb5b97b58 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -68,6 +68,8 @@ Fork 复制 `atSeq` 所选的精确事件前缀,包含切点事件,允许在 当 `connection`、`fs` 与 `attachments` 均被组合时,`SessionMediaReferences` 在鉴权 `connection.fetch` 通道上挂载 `GET|HEAD /api/file?path=<绝对路径>`。它通过 `ctx.fs` 读取普通文件,包括已注册工作区之外的临时路径与远程提供方中的文件。目录包含关系与 MIME 类别均不限制访问;`mime-types` 提供响应类型,未知扩展名使用 `application/octet-stream`。GET 复用 `readBytes` 执行读取前及读取中的字节限制;HEAD 只读取元数据。所有文件均使用 `ctx.attachments.imageLimits.maxImageBytes`(通常为 20 MiB);超过此上限返回 413。响应包含完整文件,忽略 Range,并携带 `private, no-store`、`nosniff` 与沙箱 CSP,使直接打开的 HTML/SVG 无法以 API 源身份执行脚本。客户端重写位于 `ui-chat`(`AssistantMarkdown`);音视频文件响应已可用,Markdown 音视频播放器节点仍是独立工作。 +GUI 模型选择与提示词准入要求确切提供方/模型对出现在当前可用目录中。不可用的选择在投递前以 `session/model-unavailable` 拒绝;附件准备完成后再次检查。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存其显式配置的提供方的第一个可用模型。可用性变化不会替换模型或改写会话选择。 + ----- diff --git a/packages/api/session-controller/src/catalog.ts b/packages/api/session-controller/src/catalog.ts index 0c97107f03..df751d86ba 100644 --- a/packages/api/session-controller/src/catalog.ts +++ b/packages/api/session-controller/src/catalog.ts @@ -59,9 +59,21 @@ export async function buildModelCatalog( })) return { default: { ...defaultSelection }, - routableProviders: providers.map(provider => provider.id), + routableProviders: catalog.flatMap(item => item.kind === 'group' && item.group.models.length > 0 ? [item.group.id] : []), groups: catalog.flatMap(item => item.kind === 'group' ? [item.group] : []) .filter(group => group.models.length > 0), failures: catalog.flatMap(item => item.kind === 'failure' ? [item.failure] : []), } } + +/** + * Check a GUI selection against the current available provider catalog. + * @param ctx - Host LLM registry. + * @param selection - stored or explicitly requested selection. + * @returns whether the exact model is currently advertised as available. + */ +export async function modelAvailable(ctx: Context, selection: ModelSelection): Promise { + if (!ctx.llm.listProviders().some(provider => provider.id === selection.provider)) return false + const models = await ctx.llm.listModels(selection.provider) + return models.some(model => model.id === selection.model) +} diff --git a/packages/api/session-controller/src/commands.ts b/packages/api/session-controller/src/commands.ts index 03c697734b..e73659d4cb 100644 --- a/packages/api/session-controller/src/commands.ts +++ b/packages/api/session-controller/src/commands.ts @@ -1,5 +1,6 @@ /** Session commands whose activation policy is explicit at each Remote method. */ +import { modelAvailable } from './catalog.ts' import { randomUUID } from 'node:crypto' import type { Context } from '@deepseek-ai/cordis' import { brandString } from '@deepseek-ai/dsh-brand' @@ -151,6 +152,7 @@ export class SessionCommandController { const agent = await this.resolveAgent(request.sessionId) return this.agents.serializeImageAdmission(agent, async () => { try { + await this.requireModel(request) const resolved = await this.ctx.llm.resolveCallConfig({ provider: request.provider, model: request.model, @@ -329,13 +331,7 @@ export class SessionCommandController { const agent = await this.resolveAgent(request.sessionId) if (hasPromptRequest(agent, request.requestId)) return { accepted: true } const selection = this.agents.selectionFor(agent).current - if (!routeServed(this.ctx, selection.provider)) { - throw new RemoteError( - 'session/model-unavailable', - `no adapter serves provider "${selection.provider}"; select a model for this session`, - { provider: selection.provider, model: selection.model }, - ) - } + await this.requireModel(selection) const source: MessageSource = { kind: 'user', rpcId: request.requestId, @@ -361,6 +357,7 @@ export class SessionCommandController { ) const content = await this.ctx.attachments.admitPromptContent(admission.content) const message: UserMessage = createUserMessage({ content, source }) + await this.requireModel(this.agents.selectionFor(agent).current) if (this.ctx.agents.get(agent.id) !== agent) { throw new RemoteError( 'session/not-found', @@ -384,6 +381,13 @@ export class SessionCommandController { return hasImage ? this.agents.serializeImageAdmission(agent, admit) : admit() } + private async requireModel(selection: Pick): Promise { + if (!await modelAvailable(this.ctx, selection)) { + throw new RemoteError('session/model-unavailable', 'Select an available model before sending a message.', + { provider: selection.provider, model: selection.model }) + } + } + /** * Read one durable image after proving the Session log references it. * @param request - Session and attachment identities used for authorization. @@ -690,7 +694,3 @@ function referencedImage( } return undefined } - -function routeServed(ctx: Context, provider: string): boolean { - return ctx.llm.listProviders().some(entry => entry.id === provider) -} diff --git a/packages/api/session-controller/src/index.ts b/packages/api/session-controller/src/index.ts index b6f5f0dfa0..6f51c15da4 100644 --- a/packages/api/session-controller/src/index.ts +++ b/packages/api/session-controller/src/index.ts @@ -6,7 +6,7 @@ import type { Agent } from '@deepseek-ai/dsh-agent' import type {} from '@deepseek-ai/dsh-fs' import { Context } from '@deepseek-ai/cordis' import z from '@deepseek-ai/schemastery' -import { errorChain } from '@deepseek-ai/dsh-llm' +import { errorChain, ReasoningEffortId } from '@deepseek-ai/dsh-llm' import type {} from '@deepseek-ai/dsh-client-file-upload' import { canOpenNativePath, nativeFileManager, openNativeAssociatedPath, revealNativePath } from '@deepseek-ai/dsh-native-command' import type { SessionId } from '@deepseek-ai/dsh-session' @@ -270,6 +270,21 @@ export class SessionController extends TypertRemoteService { return this.commands.selectModel(request) } + /** + * Initialize the default after the user first configures a provider credential. + * @param provider - the provider whose credential was configured. + * @returns after saving the initial available model; existing user choices are retained. + */ + @Remote + async initializeDefaultModel(provider: string): Promise { + const catalog = await buildModelCatalog(this.ctx) + const model = catalog.groups.find(group => group.id === provider)?.models[0] + if (model === undefined) throw new Error(`provider "${provider}" has no available models`) + await this.ctx.agentDefaultModel.initializeSelection({ provider, model: model.id, + ...model.reasoning?.defaultEffort === undefined ? {} : { reasoningEffort: ReasoningEffortId(model.reasoning.defaultEffort) }, + }) + } + /** * Describe every currently routable model for Host-generation selectors. * @returns provider-grouped models, the deployment default, and isolated provider failures. diff --git a/packages/api/session-controller/src/types.ts b/packages/api/session-controller/src/types.ts index a925e9da83..c5b92ec0cc 100644 --- a/packages/api/session-controller/src/types.ts +++ b/packages/api/session-controller/src/types.ts @@ -143,7 +143,7 @@ export interface ModelCatalogFailure { /** Host-generation model catalog and the default used by unconfigured Sessions. */ export interface ModelCatalog { readonly default: ModelSelection - /** Provider routes currently able to serve a request, including empty catalogs. */ + /** Provider routes with at least one currently available catalog model. */ readonly routableProviders: readonly string[] readonly groups: readonly ModelProviderGroup[] readonly failures: readonly ModelCatalogFailure[] diff --git a/packages/api/session-controller/tests/commands-upload-file.host.spec.ts b/packages/api/session-controller/tests/commands-upload-file.host.spec.ts index 4ff61a9b9a..14527cccec 100644 --- a/packages/api/session-controller/tests/commands-upload-file.host.spec.ts +++ b/packages/api/session-controller/tests/commands-upload-file.host.spec.ts @@ -83,6 +83,7 @@ async function uploadHarness(origin?: 'subagent'): Promise<{ }, } as never) ctx.provide('llm', { + listModels: async () => [{ id: 'fixture-model', name: 'Model' }], listProviders: () => [{ id: 'fixture', name: 'Fixture' }], resolveModelInfo: () => Promise.resolve({ provider: 'fixture', id: 'fixture-model', name: 'Fixture' }), } as never) diff --git a/packages/api/session-controller/tests/session-cold.host.spec.ts b/packages/api/session-controller/tests/session-cold.host.spec.ts index c8be6f2252..8995fa87a1 100644 --- a/packages/api/session-controller/tests/session-cold.host.spec.ts +++ b/packages/api/session-controller/tests/session-cold.host.spec.ts @@ -816,6 +816,7 @@ describe('sessions.prompt synchronous rejection', () => { AttachmentStore.prototype, ) as never) ctx.provide('llm', { + listModels: async () => [{ id: 'm', name: 'Model' }], listProviders: () => [{ id: 'p', name: 'Provider' }], resolveModelInfo: () => Promise.resolve({ provider: 'p', id: 'm', name: 'Model', inputModalities: ['text', 'image'], diff --git a/packages/api/session-controller/tests/session-models.host.spec.ts b/packages/api/session-controller/tests/session-models.host.spec.ts index 51133aafde..26d71d839e 100644 --- a/packages/api/session-controller/tests/session-models.host.spec.ts +++ b/packages/api/session-controller/tests/session-models.host.spec.ts @@ -1,7 +1,7 @@ /** * Session Controller model-directory and selection behavior: dynamic provider grouping, * provider-local catalog failures, logged-selection restoration without stale - * catalog injection, advisory pass-through models, and the prompt-assembly + * catalog injection, unavailable-model refusals, and the prompt-assembly * boundary for a running selection change. */ @@ -23,7 +23,8 @@ import { ApiSessionAgentController } from '../src/agent.ts' import { buildModelCatalog } from '../src/catalog.ts' import SystemPrompt from '@deepseek-ai/dsh-system-prompt' import { RemoteError } from '@deepseek-ai/dsh-typert-protocol' -import { createSessionTestRemote } from './test-remote.ts' +import AgentDefaultModel from '@deepseek-ai/dsh-agent-default-model' +import { createSessionTestController, createSessionTestRemote } from './test-remote.ts' function request

(payload: P): P { return payload @@ -146,7 +147,7 @@ function registerTextOnly(ctx: Context): void { override resolveModel(provider: string, model: string): Promise { return Promise.resolve({ provider, id: model, name: model, inputModalities: ['text'] }) } - }('Text Only', [])) + }('Text Only', [{ provider: 'text-only', id: 'plain', name: 'Plain' }])) } /** Resolve the Client-visible next selection from durable state and the Host default. */ @@ -266,7 +267,6 @@ describe('Web session model selection', () => { ], })) expect(result.ok).toBe(true) - expect(followup).not.toHaveBeenCalled() expect((steer.mock.calls[0]?.[0] as UserMessage).content).toEqual([ { type: 'text', text: 'look at this' }, { @@ -347,6 +347,23 @@ describe('Web session model selection', () => { expect(readImage).toHaveBeenCalledOnce() await ctx.fiber.dispose() }) + it('initializes only the first explicitly configured provider and retains later user choices', async () => { + const { ctx } = await harness() + await ctx.plugin(AgentDefaultModel, { provider: 'missing', model: 'missing' }) + const controller = createSessionTestController(ctx, { + defaultModelSelection: () => ctx.agentDefaultModel.currentSelection(), cwd: '/tmp', + }) + await controller.initializeDefaultModel('deepseek-official') + expect(ctx.agentDefaultModel.currentSelection()).toEqual({ + provider: 'deepseek-official', model: 'deepseek-chat', reasoningEffort: 'high', + }) + await ctx.agentDefaultModel.saveSelection({ provider: 'removed', model: 'removed' }) + await controller.initializeDefaultModel('deepseek-official') + expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'removed', model: 'removed' }) + await expect(controller.initializeDefaultModel('empty')).rejects.toThrow('no available models') + await ctx.fiber.dispose() + }) + it('groups successful providers and leaves an unlisted current selection out of the catalog', async () => { const { ctx, sessionId } = await harness({ provider: 'deepseek-official', @@ -428,7 +445,7 @@ describe('Web session model selection', () => { await ctx.fiber.dispose() }) - it('accepts an advisory-unlisted model, rejects an unavailable provider, and switches only after the next assembly', async () => { + it('rejects unlisted models and switches available models only after the next assembly', async () => { const { ctx, agent, sessionId } = await harness() const remote = createSessionTestRemote(ctx, { defaultModelSelection: () => ({ provider: 'deepseek-official', model: 'deepseek-chat' }), cwd: '/tmp' }) const seed: LlmCallConfig = { provider: 'seed', model: 'seed', temperature: 0.2 } @@ -440,12 +457,12 @@ describe('Web session model selection', () => { const selected = expectValue(await remote.selectModel(request({ sessionId, provider: 'deepseek-official', - model: 'private-preview', + model: 'deepseek-reasoner', reasoningEffort: 'max', }))) expect(selected.selected).toEqual({ provider: 'deepseek-official', - model: 'private-preview', + model: 'deepseek-reasoner', reasoningEffort: 'max', }) await expect(agentEvents(ctx, agent).waterfall( @@ -453,26 +470,26 @@ describe('Web session model selection', () => { )).resolves.toEqual(seed) expect((await ctx.systemPrompt.assemble()).variables) - .toMatchObject({ provider: 'deepseek-official', model: 'private-preview' }) + .toMatchObject({ provider: 'deepseek-official', model: 'deepseek-reasoner' }) await expect(agentEvents(ctx, agent).waterfall( 'agent/request', { turn: 1, step: 1, signal }, () => Promise.resolve(seed), )).resolves.toMatchObject({ provider: 'deepseek-official', - model: 'private-preview', + model: 'deepseek-reasoner', reasoningEffort: 'max', }) const unsupported = await remote.selectModel(request({ sessionId, provider: 'deepseek-official', - model: 'private-preview', + model: 'deepseek-reasoner', reasoningEffort: 'medium', })) expect(unsupported).toMatchObject({ ok: false, error: { code: 'session/model-unavailable', - message: 'provider "deepseek-official" model "private-preview" does not support reasoning effort "medium"', + message: 'provider "deepseek-official" model "deepseek-reasoner" does not support reasoning effort "medium"', }, }) @@ -485,7 +502,7 @@ describe('Web session model selection', () => { ok: false, error: { code: 'session/model-unavailable', - message: 'no adapter registered for provider "missing"', + message: 'Select an available model before sending a message.', details: { provider: 'missing', model: 'model' }, }, }) @@ -496,13 +513,13 @@ describe('Web session model selection', () => { }))).toMatchObject({ ok: false, error: { - code: 'gateway/internal', - message: 'fixture rejected the selection', - details: {}, + code: 'session/model-unavailable', + message: 'Select an available model before sending a message.', + details: { provider: 'remote-rejected', model: 'model' }, }, }) expect(currentSelection(ctx, sessionId)) - .toEqual({ provider: 'deepseek-official', model: 'private-preview', reasoningEffort: 'max' }) + .toEqual({ provider: 'deepseek-official', model: 'deepseek-reasoner', reasoningEffort: 'max' }) await ctx.fiber.dispose() }) @@ -614,15 +631,23 @@ describe('Web session model selection', () => { const unavailableCatalog = await buildModelCatalog(ctx) expect(unavailableCatalog.routableProviders.includes(currentSelection(ctx, sessionId).provider)).toBe(false) - // An advisory-unlisted model on a live route is NOT this: the route - // serves it, so the prompt goes through and nothing blocks. - expectValue(await remote.selectModel(request({ + expect(await remote.selectModel(request({ sessionId, provider: 'deepseek-official', model: 'unlisted-but-served', - }))) - const catalog = await buildModelCatalog(ctx) - expect(catalog.routableProviders.includes(currentSelection(ctx, sessionId).provider)).toBe(true) - expect(catalog.groups.flatMap(group => group.models.map(model => model.id))) - .not.toContain('unlisted-but-served') + }))).toMatchObject({ ok: false, error: { code: 'session/model-unavailable' } }) + expect(currentSelection(ctx, sessionId)).toEqual({ provider: 'deleted-gateway', model: 'deleted-model' }) + await ctx.fiber.dispose() + }) + + it('refuses a removed model while its provider still serves other models without changing the log', async () => { + const { ctx, sessionId, agent } = await harness({ provider: 'deepseek-official', model: 'removed-model' }) + const remote = createSessionTestRemote(ctx, { + defaultModelSelection: () => ({ provider: 'deepseek-official', model: 'deepseek-chat' }), cwd: '/tmp', + }) + const events = [...agent.session.snapshotEvents()] + expect(await remote.prompt(promptRequest({ sessionId, mode: 'queue', content: [{ type: 'text', text: 'hi' }] }))) + .toMatchObject({ ok: false, error: { code: 'session/model-unavailable' } }) + expect(agent.session.snapshotEvents()).toEqual(events) + expect(currentSelection(ctx, sessionId)).toMatchObject({ provider: 'deepseek-official', model: 'removed-model' }) await ctx.fiber.dispose() }) @@ -654,13 +679,13 @@ describe('Web session model selection', () => { provider, id: model, name: model, inputModalities: ['text', 'image'], }) } - }('Image Capable', [])) + }('Image Capable', [{ provider: 'image-capable', id: 'vision', name: 'Vision' }])) ctx.llm.registerAdapter(['string-error'], new class extends CatalogAdapter { override resolveModel(): Promise { // oxlint-disable-next-line typescript/prefer-promise-reject-errors -- non-Error provider normalization is the scenario. return Promise.reject('string selection failure') } - }('String Error', [])) + }('String Error', [{ provider: 'string-error', id: 'plain', name: 'Plain' }])) let saveMode: 'success' | 'error' | 'remote' = 'success' const savedRef = { attachmentId: 'saved-image', mediaType: 'image/png' as const, bytes: 1, width: 1, height: 1, @@ -725,12 +750,12 @@ describe('Web session model selection', () => { sessionId, provider: 'image-capable', model: 'vision', }))) expect(await remote.selectModel(request({ - sessionId, provider: 'metadata-broken', model: 'broken', + sessionId, provider: 'metadata-broken', model: 'listed', }))).toMatchObject({ ok: false, error: { code: 'session/model-unavailable', message: 'reasoning metadata offline' }, }) expect(await remote.selectModel(request({ - sessionId, provider: 'string-error', model: 'broken', + sessionId, provider: 'string-error', model: 'plain', }))).toMatchObject({ ok: false, error: { code: 'session/model-unavailable', message: 'string selection failure' }, diff --git a/packages/api/session-controller/tests/test-remote.ts b/packages/api/session-controller/tests/test-remote.ts index b4d3db8198..68e5f9f779 100644 --- a/packages/api/session-controller/tests/test-remote.ts +++ b/packages/api/session-controller/tests/test-remote.ts @@ -248,6 +248,10 @@ function installControllers( } if (ctx.get('llm') === undefined) { ctx.provide('llm', { + listModels: async () => { + const selection = defaults.defaultModelSelection() + return [{ id: selection.model, name: selection.model }] + }, listProviders: () => { const selection = defaults.defaultModelSelection() return [{ id: selection.provider, name: selection.provider }] diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 74cd3168df..f6eaa6d8b4 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-conversation/README.md -README.md: fef3a6551b517af2ac636687883864525aac70ee -README.zh.md: e9ab08c686420c38c11ca2bede2fd00099a247a5 +README.md: 7be555c8866a7d69631888be5f6383f8ec0a772a +README.zh.md: 74a4d083af5f2bb0ca8ea9a12cd3679c4860aaf1 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index fef3a6551b..7be555c886 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -60,7 +60,7 @@ The shell reads the persisted View preference before rendering when a Session fi Active transcripts in the main occurrence expose content-width drag handles in their uncovered side gutters; embedded occurrences omit them. A View that paints into a gutter raises only its concrete painted element above the handle; transparent full-width wrappers stay below so they do not claim empty gutter. This requires the path between that element and the Conversation body to remain outside an intermediate stacking context; the shipped Chromium behavior is pinned by the browser scenario. Chat applies the rule to table elements, while its column-bounded tool cards need no raise. Wheel motion over a handle still scrolls the transcript, while Ctrl+wheel remains a browser zoom gesture. The sticky composer intentionally owns its full footer band, which is not a resize target; an already-captured drag lifts its indicator until release ([handle styles](src/client/skeleton/ConversationRoot.module.css)). -The resident composer survives no-Session and Session transitions. Whitespace hides its placeholder; a whitespace-only draft without attachments cannot be sent. The no-Session state keeps the same composer surface mounted but inert while the Workspace picker connects a blank Session. The surface is a shell-owned Lexical editor: reference chips are atomic decorator nodes carrying the owner's serialization identity (submission expands them through the owner codec), claimed slash commands stay styled leading text, folder text references carry the folder glyph as an icon prefix, and the draft's clipboard projection is mirrored into the per-Session Conversation store. QueueDock reads `next-turn` directly from the Session `inbox` projection, including cold recovered messages. Queue operations address exact queue occurrences through the scoped `ctx.conversation` service; queue previews render sent text through the shared inline reference projection from `ui-primitives` (wire session forms fold to their label) and show local or durable images and files in original attachment order. Images use thumbnails; files use compact name-and-size cards. An edit exposes the literal sent text, and durable thumbnails resolve through the session image URL cache. Busy Enter behavior is stored in the Host-backed `ui-conversation` settings namespace. The composer keymap arbitrates the trigger menu's keys through the slash pipeline — Tab settles the highlighted completion (or drills a drillable one), Escape and Shift+Tab leave the menu without settling — and leaves every other key to the editor. An overlay that takes the keyboard hands it back through `SessionInput.focus()`, which rides Lexical's own focus so the caret returns where the draft left it rather than at the start. +The resident composer survives no-Session and Session transitions. Whitespace hides its placeholder; a whitespace-only draft without attachments cannot be sent. The no-Session state keeps the same composer surface mounted but inert while the Workspace picker connects a blank Session. The surface is a shell-owned Lexical editor: reference chips are atomic decorator nodes carrying the owner's serialization identity (submission expands them through the owner codec), claimed slash commands stay styled leading text, folder text references carry the folder glyph as an icon prefix, and the draft's clipboard projection is mirrored into the per-Session Conversation store. QueueDock reads `next-turn` directly from the Session `inbox` projection, including cold recovered messages. Queue operations address exact queue occurrences through the scoped `ctx.conversation` service; queue previews render sent text through the shared inline reference projection from `ui-primitives` (wire session forms fold to their label) and show local or durable images and files in original attachment order. Images use thumbnails; files use compact name-and-size cards. An edit exposes the literal sent text, and durable thumbnails resolve through the session image URL cache. Busy Enter behavior is stored in the Host-backed `ui-conversation` settings namespace. The composer keymap arbitrates the trigger menu's keys through the slash pipeline — Tab settles the highlighted completion (or drills a drillable one), Escape and Shift+Tab leave the menu without settling — and leaves every other key to the editor. An overlay that takes the keyboard hands it back through `SessionInput.focus()`, which rides Lexical's own focus so the caret returns where the draft left it rather than at the start. Model availability blocks retain the normal input placeholder while leaving the model picker enabled. Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; queue and history observation by that `rpcId` retires the echo once. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Continuable subagents disable attachment intake and skip local echoes because their transport does not preserve the browser request id. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index e9ab08c686..74a4d083af 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -60,7 +60,7 @@ Session 首次绑定或缓存的 Session 成为 current 时,shell 会在渲染 主 occurrence 的活跃 transcript 只在未被内容覆盖的两侧沟槽中提供正文宽度拖拽条;嵌入式 occurrence 省略这些拖拽条。View 如果绘制进沟槽,只将具体的可见元素提到拖拽条上方;透明的全宽包装层保持在下方,不会占用空白沟槽。该规则要求此元素与 Conversation body 之间不能引入中间堆叠上下文;浏览器场景固定了交付 Chromium 的行为。Chat 将该规则用于表格元素,其限定在阅读列内的工具卡片无需提高层级。指针位于拖拽条上时,滚轮仍会滚动 transcript,Ctrl+滚轮则保留为浏览器缩放手势。粘滞 composer 刻意拥有完整的底部区带,该区域不是宽度调整目标;已捕获的拖拽会将指示线提高到松开为止([拖动手柄样式](src/client/skeleton/ConversationRoot.module.css))。 -常驻 composer 在无 Session 与有 Session 之间保持挂载。输入空白字符会隐藏占位提示;没有附件的纯空白草稿无法发送。无 Session 时,同一个编辑器表面保持 inert,Workspace picker 连接 blank Session。该表面是 shell 所有的 Lexical 编辑器:引用 chip 是携带 owner 序列化身份的原子 decorator 节点(提交时经 owner codec 展开),已认领的 slash command 保持为带样式的行首文本,文件夹文本引用以图标前缀携带文件夹图形,草稿的剪贴板投影镜像到逐 Session Conversation store。QueueDock 直接从 Session 的 `inbox` 投影读取 `next-turn`,包含从冷状态恢复的消息。Queue 操作通过 scoped `ctx.conversation` service 寻址准确的 queue occurrence;queue 预览经 `ui-primitives` 的共享行内引用投影渲染已发送文本(wire 会话形式折叠为其标签),并按原始附件顺序展示本地或持久化的图片和文件。图片使用缩略图,文件使用紧凑的名称与大小卡片。编辑态展示字面发送文本,持久化缩略图通过会话图片 URL 缓存解析。繁忙时 Enter 行为保存在 Host-backed `ui-conversation` settings namespace。 composer 键盘映射经斜杠流水线裁决触发菜单的按键——Tab 确认高亮补全项(可下钻项则下钻),Escape 与 Shift+Tab 离开菜单且不选定——其余按键交给编辑器自身。 接管键盘的浮层通过 `SessionInput.focus()` 把键盘还回来,该路径走 Lexical 自己的 focus,因此光标回到草稿原来的位置而不是开头。 +常驻 composer 在无 Session 与有 Session 之间保持挂载。输入空白字符会隐藏占位提示;没有附件的纯空白草稿无法发送。无 Session 时,同一个编辑器表面保持 inert,Workspace picker 连接 blank Session。该表面是 shell 所有的 Lexical 编辑器:引用 chip 是携带 owner 序列化身份的原子 decorator 节点(提交时经 owner codec 展开),已认领的 slash command 保持为带样式的行首文本,文件夹文本引用以图标前缀携带文件夹图形,草稿的剪贴板投影镜像到逐 Session Conversation store。QueueDock 直接从 Session 的 `inbox` 投影读取 `next-turn`,包含从冷状态恢复的消息。Queue 操作通过 scoped `ctx.conversation` service 寻址准确的 queue occurrence;queue 预览经 `ui-primitives` 的共享行内引用投影渲染已发送文本(wire 会话形式折叠为其标签),并按原始附件顺序展示本地或持久化的图片和文件。图片使用缩略图,文件使用紧凑的名称与大小卡片。编辑态展示字面发送文本,持久化缩略图通过会话图片 URL 缓存解析。繁忙时 Enter 行为保存在 Host-backed `ui-conversation` settings namespace。 composer 键盘映射经斜杠流水线裁决触发菜单的按键——Tab 确认高亮补全项(可下钻项则下钻),Escape 与 Shift+Tab 离开菜单且不选定——其余按键交给编辑器自身。 接管键盘的浮层通过 `SessionInput.focus()` 把键盘还回来,该路径走 Lexical 自己的 focus,因此光标回到草稿原来的位置而不是开头。 模型不可用导致的阻塞保留常规输入占位文案,模型选择器仍可操作。 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;queue 或历史以同一 `rpcId` 被观察后,回显只退休一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。continuable 子代理禁用附件入口,也不创建本地回显,因为其 transport 不保留浏览器 request id。 diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx index adace1c113..42bc9724df 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx @@ -133,7 +133,7 @@ export function ConversationContent(props: ConversationContentProps) { // bar is ONE session-maybe slot rendered unconditionally — inert is a prop, // not a different tree, so the textarea DOM survives the transition. const inert = sessionId === undefined || (hero && chipTitle === undefined) - // A raised block is the same inert posture with the blocker's own reason: + // A raised block keeps the same textarea mounted: // one disabled textarea, never a second tree. The no-workspace state wins // when both hold — picking a workspace is the earlier prerequisite. const blocked = !inert && composerBlock !== undefined @@ -150,7 +150,7 @@ export function ConversationContent(props: ConversationContentProps) { // `blocked`, not `disabled`: the bar refuses input either way, but a // block keeps the model seat live because choosing a model is how the // user clears it. - ? { blocked: composerBlock, placeholder: composerBlock.reason } + ? { blocked: composerBlock, ...(hero ? { placeholder: t('placeholder.hero') } : {}) } : hero ? { placeholder: t('placeholder.hero') } : {}), }) diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 4ca0dee8fc..9ba09cab47 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-model-selection/README.md -README.md: 96bf249b8976ad56b5abb70975635fa452c700f8 -README.zh.md: 71eb0de85bd87e5b2b92bf33d19f925e649f92a7 +README.md: 7afc8f158509e18e90236d6302ab51125fa7a891 +README.zh.md: c14ad7ab05af24c35727d42e6d843cbdaf20f332 diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index 96bf249b89..7afc8f1585 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -9,7 +9,7 @@ English | [中文](README.zh.md) ## Summary -The Web GUI lets users switch the model and reasoning effort for an existing session through either the `/model` popup or the composer's model control. Both surfaces present the same provider-grouped choices, and the selected model determines the available effort names and default. A complete selection applies to the next request; a running step keeps the model and effort it started with. If no adapter can serve the session's route, the composer remains disabled until routing becomes available. +The Web GUI lets users switch the model and reasoning effort for an existing session through either the `/model` popup or the composer's model control. Both surfaces present the same provider-grouped choices, and the selected model determines the available effort names and default. A complete selection applies to the next request; a running step keeps the model and effort it started with. If the selected model is unavailable, the composer stays disabled until the user selects an available model or that exact model becomes available again. ## Table of Contents @@ -27,7 +27,7 @@ The Web GUI lets users switch the model and reasoning effort for an existing ses DeepSeek account and API-key routes appear as separate provider groups, each exposing the same configured model catalog. -Mount this plugin alongside `ui-conversation` and the commands package; the composer then shows the model seat next to the pending indicator, and `/model` opens the same directory as a popup. While the seat's menu is open, `↑`/`↓` move focus across the rows of the shown pane, Tab settles the focused row, and Escape and `Shift+Tab` leave a drilled pane first and otherwise close back to the trigger. Drilling lands on the row of the value in use, and going back lands on the cell that opened the pane left. Both surfaces show the host-reported current selection when the exact provider/model pair remains in the advertised groups; a missing catalog row leaves the routable selection intact while the trigger prompts `Select model`. +Mount this plugin alongside `ui-conversation` and the commands package; the composer then shows the model seat next to the pending indicator, and `/model` opens the same directory as a popup. While the seat's menu is open, `↑`/`↓` move focus across the rows of the shown pane, Tab settles the focused row, and Escape and `Shift+Tab` leave a drilled pane first and otherwise close back to the trigger. Drilling lands on the row of the value in use, and going back lands on the cell that opened the pane left. Both surfaces show the host-reported current selection when the exact provider/model pair remains in the advertised groups; a missing catalog row clears the effective selection and the trigger prompts `Select model`, without changing the stored choice. ### Model and effort @@ -35,7 +35,7 @@ Models stay grouped by provider. The composer menu shows model and effort names ### Unroutable sessions -When the Host reports that no adapter serves the session's route, this plugin raises a composer block and the input goes inert with its own copy; recovering clears it without a reload. A `null` before the first load or after one failed never blocks, and catalog membership never blocks either — a route serving a model it does not advertise is missing from the groups yet usable. +The composer blocks sending while the exact provider/model pair is absent from the available catalog or availability is loading or unknown. It keeps the normal input placeholder and an enabled model picker. Sign-out, credential removal, and provider or model removal refresh availability without replacing the saved choice with another model. Existing session logs remain unchanged. Only the current Client binding's directory can publish its composer block. Cleanup from an older binding preserves a replacement directory's block; without a replacement directory, cleanup removes the obsolete block. @@ -51,7 +51,7 @@ When another writer owns the Session, model-selection failures tell the user to

Implementation internals — click to expand -Two entries over ONE per-session directory owned by `ModelDirectoryResolver` (`ctx.modelDirectories`): the `/model` popupSelect contribution (registered through `ctx.commandUi`) and the composer's named `conversation.input.model` seat both load the session's advisory directory through `session.models` and submit through `session.selectModel` via the same `ModelDirectory` instance, so a switch made in either entry is what the other shows next. Directory loads and selections share a generation counter so an older response never overwrites a newer one; a connection reset drops every resident projection and repulls the Host-restored selection before display. Directories are per-session, resolved lazily, and disposed with the session scope; addressed subagent sessions expose neither entry. Every resident directory refetches directly on forwarded `llm/adapters-updated` and `settings/document-updated` owner events. +Two entries over ONE per-session directory owned by `ModelDirectoryResolver` (`ctx.modelDirectories`): the `/model` popupSelect contribution (registered through `ctx.commandUi`) and the composer's named `conversation.input.model` seat both load the session's available directory through `session.models` and submit through `session.selectModel` via the same `ModelDirectory` instance, so a switch made in either entry is what the other shows next. Directory loads and selections share a generation counter so an older response never overwrites a newer one; a connection reset drops every resident projection and repulls the Host-restored selection before display. Directories are per-session, resolved lazily, and disposed with the session scope; addressed subagent sessions expose neither entry. Every resident directory refetches directly on forwarded `llm/adapters-updated`, `settings/document-updated`, and credential update events.
diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index 71eb0de85b..c14ad7ab05 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -9,7 +9,7 @@ kind: "package-reference" ## 概述 -Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有会话使用的模型与推理(reasoning)强度。两个界面呈现同一组按提供方分组的选择;所选模型决定可用的推理强度名称与默认值。完整选择从下一次请求开始生效;运行中的步骤保留其启动时的模型与推理强度。如果没有适配器可以服务会话路由,composer 会保持停用,直至路由恢复可用。 +Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有会话使用的模型与推理(reasoning)强度。两个界面呈现同一组按提供方分组的选择;所选模型决定可用的推理强度名称与默认值。完整选择从下一次请求开始生效;运行中的步骤保留其启动时的模型与推理强度。所选模型不可用时,composer 保持停用,直到用户选择可用模型或同一模型恢复可用。 ## 目录 @@ -27,7 +27,7 @@ Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有 DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示相同的已配置模型目录。 -与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,可路由的选择保持不变,触发器提示 `Select model`。 +与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,有效选择置空,触发器提示“请选择模型”,已保存的选择不变。 ### 模型与推理强度 @@ -35,7 +35,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 ### 不可路由的会话 -当 Host 报告没有适配器服务该会话的路由时,本插件注册一个 composer 阻塞块,输入框随之停用并显示本插件自己的文案;恢复后无需重新加载即清除。首次加载之前或加载失败之后的 `null` 绝不阻断;目录成员关系同样不阻断——一条仍在服务、只是不公布该模型的路由不在分组里,却可用。 +确切提供方/模型对不在可用目录中,或可用性仍在加载或未知时,composer 禁止发送。输入框保留常规占位文案,模型选择器仍可操作。退出账号、移除凭据、提供方或模型都会刷新可用性,不会用其他模型替换已保存的选择。既有会话日志保持不变。 只有当前 Client binding 的目录可以发布对应的 composer 阻塞块。旧 binding 的清理保留后继目录的阻塞块;若尚无后继目录,则移除已失效的阻塞块。 @@ -51,7 +51,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示
实现细节——点击展开 -两个入口共用一份由 `ModelDirectoryResolver`(`ctx.modelDirectories`)持有的会话级目录:`/model` popupSelect 贡献项(经 `ctx.commandUi` 注册)与 composer 的具名 `conversation.input.model` 位都经 `session.models` 加载会话的建议目录、经 `session.selectModel` 通过同一个 `ModelDirectory` 实例提交,因此任一入口所做的切换正是另一个入口接下来显示的。目录加载与选择共享一个代次计数器,旧响应不会覆盖新结果;连接重置丢弃所有常驻投影,并在显示前重新拉取 Host 恢复的选择。目录按会话惰性解析,随会话作用域一并 dispose(资源释放);已寻址 subagent 会话不公开任一入口。每份常驻目录都会直接在转发的 `llm/adapters-updated` 与 `settings/document-updated` owner 事件上重拉。 +两个入口共用一份由 `ModelDirectoryResolver`(`ctx.modelDirectories`)持有的会话级目录:`/model` popupSelect 贡献项(经 `ctx.commandUi` 注册)与 composer 的具名 `conversation.input.model` 位都经 `session.models` 加载会话的可用目录、经 `session.selectModel` 通过同一个 `ModelDirectory` 实例提交,因此任一入口所做的切换正是另一个入口接下来显示的。目录加载与选择共享一个代次计数器,旧响应不会覆盖新结果;连接重置丢弃所有常驻投影,并在显示前重新拉取 Host 恢复的选择。目录按会话惰性解析,随会话作用域一并 dispose(资源释放);已寻址 subagent 会话不公开任一入口。每份常驻目录都会直接在转发的 `llm/adapters-updated`、`settings/document-updated` 与凭据更新事件上重拉。
diff --git a/packages/client/ui-model-selection/src/client/directory.ts b/packages/client/ui-model-selection/src/client/directory.ts index b27811f501..8e03bcf206 100644 --- a/packages/client/ui-model-selection/src/client/directory.ts +++ b/packages/client/ui-model-selection/src/client/directory.ts @@ -15,15 +15,9 @@ import type { ModelCatalogDirectory } from './catalog.ts' /** Directory snapshot both entries render from. */ export interface ModelDirectoryState { - /** Effective selection: durable next-request projection, then Host default. */ + /** Available durable selection, or the available default for an unselected Session. */ current: ModelSelection | null - /** - * Whether an adapter serves the current selection's provider, as the host reports - * it — null before the first load, which is NOT the same as blocked. Read - * this rather than "current matches no group": catalog membership is - * advisory, so a route serving a model it stopped advertising is missing - * from the groups yet perfectly usable. - */ + /** Whether the current selection is present in the available catalog; null while unresolved. */ routable: boolean | null /** Successfully loaded provider groups (last good load). */ groups: readonly ModelProviderGroup[] @@ -45,7 +39,6 @@ export class ModelDirectory { /** Latest selection operation wins; an older response never overwrites a newer one. */ private generation = 0 private disposed = false - private resolved = false private readonly unsubscribeCatalog: () => void private readonly unsubscribeSelection: () => void @@ -69,7 +62,7 @@ export class ModelDirectory { } /** - * Ensure the Host generation's shared advisory catalog is loaded. + * Ensure the Host generation's shared available catalog is loaded. * @returns the fresh directory value. */ async load(): Promise { @@ -144,15 +137,6 @@ export class ModelDirectory { const catalog = this.catalog.store.getSnapshot() const projected = modelSelectionProjection(this.projected.getSnapshot()) if (catalog.status !== 'ready' || catalog.value === null || projected === undefined) { - if (this.resolved) { - if (catalog.status === 'error') { - this.store.update((state) => { - state.status = 'error' - state.error = catalog.error - }) - } - return - } this.store.set({ current: null, routable: null, @@ -163,11 +147,12 @@ export class ModelDirectory { }) return } - const current = projected.next ?? catalog.value.default - this.resolved = true + const intended = projected.next ?? catalog.value.default + const current = catalog.value.groups.some(group => group.id === intended.provider + && group.models.some(model => model.id === intended.model)) ? intended : null this.store.set({ current, - routable: catalog.value.routableProviders.includes(current.provider), + routable: current !== null, groups: catalog.value.groups, failures: catalog.value.failures, status: this.store.getSnapshot().status === 'selecting' diff --git a/packages/client/ui-model-selection/src/client/locales.ts b/packages/client/ui-model-selection/src/client/locales.ts index 2e573796ea..2ab727b353 100644 --- a/packages/client/ui-model-selection/src/client/locales.ts +++ b/packages/client/ui-model-selection/src/client/locales.ts @@ -15,9 +15,9 @@ export const zh = { 'option.loadError': '目录加载失败:{message}', 'option.deepseekV4Flash.description': '快速、高效且经济;适合目标明确、常规或并行任务。', 'option.deepseekV4Pro.description': '更强的自主编码、知识与复杂推理能力;适合复杂或质量优先的任务,但成本更高。', - 'trigger.fallback': '选择模型', + 'trigger.fallback': '请选择模型', 'trigger.loading': '正在加载模型…', - 'trigger.selectAria': '选择模型', + 'trigger.selectAria': '请选择模型', 'trigger.aria': '选择模型,当前 {model}', 'trigger.ariaEffort': '选择模型,当前 {model},推理等级 {effort}', 'menu.aria': '模型与推理等级', diff --git a/packages/client/ui-model-selection/src/client/service.ts b/packages/client/ui-model-selection/src/client/service.ts index d92c2c08b3..cee8e630d1 100644 --- a/packages/client/ui-model-selection/src/client/service.ts +++ b/packages/client/ui-model-selection/src/client/service.ts @@ -57,6 +57,7 @@ export class ModelDirectoryResolver extends Service { }) ctx.remote.$on('llm/adapters-updated', () => { this.catalog.refresh() }) ctx.remote.$on('settings/document-updated', () => { this.catalog.refresh() }) + ctx.remote.$on('credentials/record-updated', () => { this.catalog.refresh() }) ctx.remote.$on('credentials/reference-updated', () => { this.catalog.refresh() }) } @@ -83,16 +84,11 @@ export class ModelDirectoryResolver extends Service { binding.session.projections.faceOf('modelSelection'), ) live.directories.set(binding, directory) - // The composer cannot read this plugin (the dependency runs one way), so - // the block is pushed: the Host says whether an adapter serves the - // session's route, and only a definite `false` makes the input inert. - // `null` — before the first load, or after one failed — must not, or a - // slow or unreachable Host would lock a working composer. const conversation = this.ctx.get('conversation') if (conversation !== undefined) { const publish = (): void => { if (sessions.binding(sessionId) !== binding) return - conversation.blocks.set(sessionId, directory.store.getSnapshot().routable === false + conversation.blocks.set(sessionId, directory.store.getSnapshot().routable !== true ? { reason: this.blockReason() } : undefined) } diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index ecae6a1281..67484a5d95 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -83,7 +83,7 @@ async function bench(locale: 'zh' | 'en' = 'zh') { value: { default: defaultSelection, routableProviders: routable ? ['deepseek-official'] : [], - groups: GROUPS, + groups: routable ? GROUPS : [], failures: [], }, }) @@ -299,7 +299,7 @@ describe('ui-model-selection dual entry', () => { expect(b.calls.models).toBe(1) }) - it('keeps the durable projected selection while the eager catalog reconnects', async () => { + it('hides the effective selection until the reconnected catalog validates it', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) @@ -308,17 +308,17 @@ describe('ui-model-selection dual entry', () => { b.ctx.emit('connection/reset') expect(face.directory.getSnapshot()).toMatchObject({ - current: { provider: 'deepseek-official', model: 'deepseek-v4-pro' }, - status: 'ready', + current: null, + status: 'loading', }) face.load() expect(face.directory.getSnapshot()).toMatchObject({ - current: { provider: 'deepseek-official', model: 'deepseek-v4-pro' }, - status: 'ready', + current: null, + status: 'loading', }) }) - it('keeps the last complete view while a refreshed catalog catches up with projection', async () => { + it('blocks until a refreshed catalog validates the projected selection', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) @@ -331,8 +331,8 @@ describe('ui-model-selection dual entry', () => { next: { provider: 'deepseek-official', model: 'deepseek-v4-pro' }, }) expect(face.directory.getSnapshot()).toMatchObject({ - current: { provider: 'deepseek-official', model: 'deepseek-v4-flash' }, - status: 'ready', + current: null, + status: 'loading', }) await vi.waitFor(() => { @@ -415,13 +415,11 @@ describe('ui-model-selection dual entry', () => { } }) - it('blocks the composer only once the Host reports the route unservable', async () => { + it('blocks the composer when current catalog models disappear', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) - // Before the first load nothing is known. `null` is not `false`: a slow - // or unreachable Host must never lock a working composer. expect(b.blockOf('s1')).toBeUndefined() face.load() await Promise.resolve() @@ -445,20 +443,16 @@ describe('ui-model-selection dual entry', () => { expect(b.calls.models).toBe(3) }) - it('never blocks on catalog membership alone', async () => { + it('hides an unavailable durable selection without replacing or rewriting it', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) - // A model the route serves but no longer advertises: the seat prompts for - // a selection, the composer stays usable. Blocking here would break a - // supported configuration (a narrowed `models` list over a live route). - b.setHostCurrent({ provider: 'deepseek-official', model: 'unlisted' }) - face.load() - await Promise.resolve() - await Promise.resolve() - const snapshot = face.directory.getSnapshot() - expect(snapshot.groups.flatMap(group => group.models.map(model => model.id))).not.toContain('unlisted') - expect(b.blockOf('s1')).toBeUndefined() + const intended = { provider: 'deepseek-official', model: 'unlisted' } + b.setProjected(sid('s1'), { lastUsed: intended, next: intended }) + await vi.waitFor(() => { expect(face.directory.getSnapshot().status).toBe('ready') }) + expect(face.directory.getSnapshot().current).toBeNull() + expect(b.blockOf('s1')?.reason).toBe(zh['blocked.composer']) + expect(b.calls.select).toBe(0) }) it('clears its block when the session scope goes', async () => { diff --git a/packages/client/ui-model-selection/tests/expected/unselected-model.txt b/packages/client/ui-model-selection/tests/expected/unselected-model.txt new file mode 100644 index 0000000000..d6d4beb3b1 --- /dev/null +++ b/packages/client/ui-model-selection/tests/expected/unselected-model.txt @@ -0,0 +1 @@ +请选择模型 diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx index 4a5ee43b91..3ac3613aac 100644 --- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx +++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx @@ -446,3 +446,12 @@ describe('ModelSelect keyboard walk', () => { expect(document.activeElement).toBe(rows[0]) }) }) + +it('shows the unselected model control without a stale model or effort', async () => { + const directory = createSnapshotStore(state({ current: null, routable: false })) + render() + const trigger = screen.getByRole('button', { name: '请选择模型' }) + expect(trigger.hasAttribute('disabled')).toBe(false) + await expect(`${trigger.textContent}\n`).toMatchFileSnapshot('./expected/unselected-model.txt') + expect(trigger.textContent).not.toContain('High') +}) diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index 3e8fa7838f..a9fcd71d5a 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: e9df6c0f3dd20d47c688d3ca23b6cff88ab72e99 -README.zh.md: 775d518b1c0e75f7fbd191bc21e57ac24c7f8179 +README.md: d54687d083897842518a0c95dfc84d39e985f3a1 +README.zh.md: c4dbcf234fb72e826ccd742b70740744e98e8fcb diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index e9df6c0f3d..d54687d083 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -50,6 +50,9 @@ Account login uses a dismissible dialog before the model onboarding credential e The balance card shows recharge funds and positive bonus credit in separate rows. Empty or nonpositive bonus wallets hide the bonus row and its divider; currencies retain their own amounts. + +A successful first login initializes the default model from `deepseek-account` when no user choice has been saved. Later logins retain the saved choice, including an unavailable one. + ## Model Experience diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 775d518b1c..c4dbcf234f 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -50,6 +50,9 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl 余额卡片分行展示充值余额与正额赠金余额。赠送钱包为空或没有正余额时,隐藏赠金行及其分隔线;不同币种分别显示。 + +首次成功登录且用户尚未保存模型选择时,从 `deepseek-account` 初始化默认模型。后续登录保留已保存的选择,包括不可用的选择。 + ## 模型体验 diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index a5b1c715ab..da26bbd8d8 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -22,7 +22,7 @@ declare module '@deepseek-ai/dsh-client-ui-slots' { interface LocaleNamespaceMap { 'settings.account': AccountKey } } /** Services required by account settings. */ -export const inject = ['slots', 'locale', 'remote', 'remote.account'] +export const inject = ['slots', 'locale', 'remote', 'remote.account', 'remote.session'] /** @param ctx - browser plugin context. */ export function apply(ctx: Context): void { ctx.effect(() => ctx.locale.register('settings.account', { en, zh }), 'account: dictionaries') @@ -72,7 +72,17 @@ export function apply(ctx: Context): void { for await (const frame of stream) { revision++ refreshing = undefined - publish({ ...snapshot, view: frame.value, details: undefined, failed: false }) + let initializationFailed = false + if (frame.value.status === 'credential-stored' && frame.value.attempt?.phase === 'succeeded' + && snapshot.view?.attempt?.phase !== 'succeeded') { + try { + const initialized = await ctx.remote.session.initializeDefaultModel('deepseek-account') + initializationFailed = !initialized.ok + } catch (_error) { + initializationFailed = true + } + } + publish({ ...snapshot, view: frame.value, details: undefined, failed: initializationFailed }) browser.update(frame.value) frame.accept() void refresh() diff --git a/packages/client/ui-settings-account/tests/apply.client.spec.ts b/packages/client/ui-settings-account/tests/apply.client.spec.ts new file mode 100644 index 0000000000..7f01fc5f6e --- /dev/null +++ b/packages/client/ui-settings-account/tests/apply.client.spec.ts @@ -0,0 +1,55 @@ +// @vitest-environment jsdom +/** Account state updates continue after default-model initialization refuses. */ +import { expect, it, vi } from 'vitest' +import type { AccountView, SignInAttemptId } from '@deepseek-ai/dsh-deepseek-account/types' +import { apply, type AccountSectionInjected } from '../src/client/index.ts' + +it.each(['accepted', 'refused', 'disconnected'] as const)('initializes account models and keeps reading account state: %s', async (outcome) => { + const abort = new AbortController() + const done = Promise.withResolvers() + const release = Promise.withResolvers() + const initializeDefaultModel = vi.fn(async () => { + if (outcome === 'disconnected') throw new Error('connection lost') + return { ok: outcome === 'accepted', value: undefined } + }) + const links = { usageUrl: 'https://example.test/usage', topUpUrl: 'https://example.test/top_up' } + const signedIn: AccountView = { + status: 'credential-stored', links, attempt: { id: 'login' as SignInAttemptId, phase: 'succeeded' }, + } + const frames: AccountView[] = [signedIn, signedIn, { status: 'signed-out', links, attempt: null }] + const disposers: (() => void)[] = [] + let operations: AccountSectionInjected | undefined + const ctx = { + effect: (install: () => (() => void) | undefined) => { const dispose = install(); if (dispose) disposers.push(dispose) }, + locale: { register: () => () => {}, bind: () => (key: string) => key }, + slots: { + inject: (_name: string, install: () => (() => void) | undefined) => { + const dispose = install() + if (dispose) disposers.push(dispose) + }, + register: (entry: { inject?: () => AccountSectionInjected }) => { + if (entry.inject) operations = entry.inject() + return () => {} + }, + }, + remote: { + session: { initializeDefaultModel }, + account: { getProfile: async () => ({ ok: true, value: null }), getBalance: async () => ({ ok: true, value: null }) }, + $stream: () => ({ + signal: abort.signal, dispose: () => { abort.abort(); release.resolve(undefined) }, + async *[Symbol.asyncIterator]() { + for (const value of frames) yield { value, accept: () => { if (value.status === 'signed-out') done.resolve(undefined) } } + await release.promise + }, + }), + }, + } + try { + apply(ctx as never) + await done.promise + expect(initializeDefaultModel).toHaveBeenCalledExactlyOnceWith('deepseek-account') + expect(operations?.hooks.account.getSnapshot()).toMatchObject({ view: { status: 'signed-out' }, failed: false }) + } finally { + for (const dispose of disposers.reverse()) dispose() + } +}) diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index 59be36dcbd..c84f99abf1 100644 --- a/packages/client/ui-settings-models/README.i18n.yaml +++ b/packages/client/ui-settings-models/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-models/README.md -README.md: 19cf77c41f3c391622945a8eb28ab2bfa104f270 -README.zh.md: 47d67039ab7fcdf7ca8e0781498aa795dac7e002 +README.md: ccce6981a618fd2dfa451f1600ae19e443d77973 +README.zh.md: 0d2f64a1fe4583493b192f33f128f86157a65f8f diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index 19cf77c41f..ccce6981a6 100644 --- a/packages/client/ui-settings-models/README.md +++ b/packages/client/ui-settings-models/README.md @@ -55,6 +55,8 @@ After the versioned notice step completes, the DeepSeek step projects first-run The section declares two seats for plugins distributed outside this repository, typed in [`src/client/slot-contract.ts`](src/client/slot-contract.ts) and exported from `./client`. `settings.models.provider-card` (keyed) renders inside every card that shows a directory row — a saved row's card, its first-run setup posture, and the add-provider draft — dispatched with `entryKey = settingsNs` and owner props carrying the row's `ConfigurableProviderView`, its configured state, and its confirmed api-key credential state, so one registration under an adapter family's namespace receives every card of that family, hand-declared routes included; the hand-declared draft card has no directory row yet and dispatches nothing until saved. `settings.models.footer` (list) renders after the rows and the add controls. A registrant activates through `ctx.slots.inject` with a type-only import of this package's `/client` entry; without registrants both seats render nothing. +The Models page includes **DeepSeek Account** (`deepseek-account`, **DeepSeek 账号** in Chinese). Its editor exposes the shared DeepSeek model catalog without API-key or base-URL inputs. Account availability follows the stored account credential. The first successful API-key setup initializes the default from its own provider; later setup preserves the user’s saved model choice. + ----- diff --git a/packages/client/ui-settings-models/README.zh.md b/packages/client/ui-settings-models/README.zh.md index 47d67039ab..0d2f64a1fe 100644 --- a/packages/client/ui-settings-models/README.zh.md +++ b/packages/client/ui-settings-models/README.zh.md @@ -55,6 +55,8 @@ Host 配置 `credentialOnboarding` 默认为 `true`。Electron preload 标记会 本分区为仓库外分发的插件声明两个席位,类型定义在 [`src/client/slot-contract.ts`](src/client/slot-contract.ts) 并从 `./client` 导出。`settings.models.provider-card`(keyed)渲染在每张展示目录行的卡片内部——已保存行的卡片、其首次运行 setup 形态、以及「添加提供方」草稿卡——以 `entryKey = settingsNs` 分发,owner props 携带该行的 `ConfigurableProviderView`、其 configured 状态与已确认的 api-key 凭据状态,因此以某适配器家族的 namespace 注册一次即可收到该家族的全部卡片,含手工声明的路由;手工声明的草稿卡尚无目录行,保存之前不分发。`settings.models.footer`(list)渲染在行列表与新增控件之后。注册方通过 `ctx.slots.inject` 激活,并以 type-only import 引入本包 `/client` 入口;没有注册方时两个席位均不渲染任何内容。 +Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepSeek Account**)。其编辑器展示共享的 DeepSeek 模型目录,不提供 API Key 或 Base URL 输入框。账号可用性取决于已保存的账号凭据。首次成功配置 API Key 时,从对应提供方初始化默认模型;后续配置保留用户已保存的模型选择。 + ----- diff --git a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx index 4f382e92a1..c84e72f743 100644 --- a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx +++ b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx @@ -178,7 +178,7 @@ export function CustomProviderCard(props: CustomProviderCardProps): ReactNode { // and the retry above now goes straight back to this write. if (stored !== undefined) return stored } - return undefined + return operations.initializeModel(route.trim()) } const create = async (): Promise => { diff --git a/packages/client/ui-settings-models/src/client/ModelsSection.tsx b/packages/client/ui-settings-models/src/client/ModelsSection.tsx index a9ce163a50..c61b380a25 100644 --- a/packages/client/ui-settings-models/src/client/ModelsSection.tsx +++ b/packages/client/ui-settings-models/src/client/ModelsSection.tsx @@ -139,7 +139,7 @@ export async function removeProviderProfile( * @returns whether to render the setup card. */ export function needsSetup(row: ProviderRow, anyUsable: boolean): boolean { - if (anyUsable) return false + if (anyUsable || row.entry.provider === 'deepseek-account') return false if (row.entry.settingsPath.length > 0) return false return row.credential?.configured !== true } @@ -203,7 +203,9 @@ export function ModelsSection(props: ModelsSectionProps): ReactNode { function Loaded({ injected, renderSlot }: { injected: ModelsSectionFace; renderSlot: ModelsRenderSlot }): ReactNode { const { controller, operations, schema, t } = injected - const state = injected.useSnapshot(snapshot => snapshot) + const snapshot = injected.useSnapshot(value => value) + const state = { ...snapshot, rows: snapshot.rows.map(row => row.entry.provider === 'deepseek-account' + ? { ...row, entry: { ...row.entry, displayName: t('deepSeekAccount') } } : row) } const [editing, setEditing] = useState(undefined) const [adding, setAdding] = useState(false) const [deleteTarget, setDeleteTarget] = useState(undefined) diff --git a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx index bc89f43fc8..93e1fa7d1e 100644 --- a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx +++ b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx @@ -173,6 +173,7 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { const fallback = schema.getPath(namespace.value, settingsPath) const disabled = props.readOnly || busy const layout = layoutOf(namespace.ns) + const accountProvider = props.provider === 'deepseek-account' const keyRef = refFor(schema, namespace, settingsPath, props.provider) // The same schema read the create card makes, so the choices offered here // and there cannot drift apart: both come from the adapter's own `Config`. @@ -184,6 +185,7 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { ) useEffect(() => { + if (accountProvider) return let stale = false setKeyState(undefined) // The key state is a placeholder hint, not a precondition for editing: a @@ -193,7 +195,7 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { setKeyState(described) }) return () => { stale = true } - }, [operations, keyRef]) + }, [operations, keyRef, accountProvider]) const stringAt = (source: unknown, key: string): string | undefined => { const value = schema.getPath(source, [key]) @@ -286,6 +288,8 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { if (keyValue.length > 0) { const stored = await operations.storeCredential(keyRef, keyValue) if (stored !== undefined) return stored + const initialized = await operations.initializeModel(props.provider) + if (initialized !== undefined) return initialized } setKeyDraft('') return undefined @@ -358,6 +362,9 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { }, onReset: () => { setDraft(current => schema.deletePath(current, ['models'])) }, } + if (accountProvider) return return ( <>
diff --git a/packages/client/ui-settings-models/src/client/index.ts b/packages/client/ui-settings-models/src/client/index.ts index ddce8c9e49..9ce0e71534 100644 --- a/packages/client/ui-settings-models/src/client/index.ts +++ b/packages/client/ui-settings-models/src/client/index.ts @@ -64,7 +64,7 @@ export function refreshIfLoaded(controller: ModelsSettingsStore): void { * constrained; registration depends on each slot through `slots.inject()`. */ export const inject = [ - 'slots', 'locale', 'remote', 'remote.credentials', 'remote.llm', 'remote.settings', + 'slots', 'locale', 'remote', 'remote.credentials', 'remote.llm', 'remote.settings', 'remote.session', 'settingsScope', 'settingsSchema', ] @@ -125,6 +125,7 @@ export function apply(ctx: ClientContext): void { const refreshModels = (): void => { refreshIfLoaded(controller) } const disposers = [ ctx.remote.$on('settings/document-updated', () => { refreshModels() }), + ctx.remote.$on('credentials/record-updated', refreshModels), ctx.remote.$on('credentials/reference-updated', refreshModels), ctx.remote.$on('llm/adapters-updated', refreshModels), ctx.on('connection/reset', refreshModels), diff --git a/packages/client/ui-settings-models/src/client/locales.ts b/packages/client/ui-settings-models/src/client/locales.ts index 2b0f92d8df..1bafbdc514 100644 --- a/packages/client/ui-settings-models/src/client/locales.ts +++ b/packages/client/ui-settings-models/src/client/locales.ts @@ -3,6 +3,7 @@ /** English strings (the key-set source of truth for this pair). */ export const en = { nav: 'Models', + deepSeekAccount: 'DeepSeek Account', title: 'Models', intro: 'Enter your API keys to use models from the following providers.', edit: 'Edit', @@ -115,6 +116,7 @@ export type ModelsKey = keyof typeof en /** Chinese strings (same keys as {@link en}). */ export const zh: { [Key in keyof typeof en]: string } = { nav: '模型', + deepSeekAccount: 'DeepSeek 账号', title: '模型', intro: '填入各提供方的 API 密钥即可使用其模型。', edit: '编辑', diff --git a/packages/client/ui-settings-models/src/client/operations.ts b/packages/client/ui-settings-models/src/client/operations.ts index 8ca6beb798..75d87ac821 100644 --- a/packages/client/ui-settings-models/src/client/operations.ts +++ b/packages/client/ui-settings-models/src/client/operations.ts @@ -32,6 +32,8 @@ export type ModelDiscoveryOutcome = /** The Host operations the Models page and its cards invoke. */ export interface ModelsOperations { + /** @param provider - newly configured provider. @returns refusal text, or undefined after initialization. */ + initializeModel(provider: string): Promise /** * Read one credential reference's state. * @param ref - credential reference name. @@ -81,6 +83,10 @@ export interface ModelsOperations { */ export function createModelsOperations(ctx: ClientContext): ModelsOperations { return { + initializeModel: async (provider) => { + const response = await ctx.remote.session.initializeDefaultModel(provider) + return response.ok ? undefined : response.error.message + }, describeCredential: async (ref) => { const response = await ctx.remote.credentials.describe([ref]) return response.ok ? response.value[ref] : undefined diff --git a/packages/client/ui-settings-models/src/client/store.ts b/packages/client/ui-settings-models/src/client/store.ts index 2af1d54d5c..f3e948b79f 100644 --- a/packages/client/ui-settings-models/src/client/store.ts +++ b/packages/client/ui-settings-models/src/client/store.ts @@ -69,6 +69,8 @@ export function joinProviderDirectory( /** One provider row the page renders. */ export interface ProviderRow { + /** Account route has usable credentials for the configured inference origin. */ + accountAvailable?: boolean /** The directory entry (route id, display name, settings address, live state). */ entry: ProviderDirectoryEntry /** Whether any layer configures this provider (its profile resolves). */ @@ -208,11 +210,18 @@ export class ModelsSettingsStore { entry, configured, removable, - apiKeyEnv: apiKeyEnvOf(namespace, entry.settingsPath, this.schema), + apiKeyEnv: entry.provider === 'deepseek-account' ? undefined : apiKeyEnvOf(namespace, entry.settingsPath, this.schema), credential: undefined, } }) - const refs = [...new Set(rows.map(row => row.apiKeyEnv ?? deriveKeyRef(row.entry.provider)))] + if (rows.some(row => row.entry.provider === 'deepseek-account')) { + const catalog = await this.ctx.remote.session.modelCatalog() + for (const row of rows) { + if (row.entry.provider === 'deepseek-account') row.accountAvailable = catalog.ok + && catalog.value.groups.some(group => group.id === 'deepseek-account' && group.models.length > 0) + } + } + const refs = [...new Set(rows.filter(row => row.entry.provider !== 'deepseek-account').map(row => row.apiKeyEnv ?? deriveKeyRef(row.entry.provider)))] let credentials: Record = {} let credentialError: string | null = null if (refs.length > 0) { @@ -230,6 +239,7 @@ export class ModelsSettingsStore { s.credentialError = credentialError s.writable = writable s.rows = rows.map((row) => { + if (row.entry.provider === 'deepseek-account') return row const named = row.apiKeyEnv === undefined ? undefined : credentials[row.apiKeyEnv] const derived = row.apiKeyEnv !== undefined ? undefined : credentials[deriveKeyRef(row.entry.provider)] return { @@ -264,6 +274,7 @@ export class ModelsSettingsStore { */ export function providerUsable(row: ProviderRow): boolean { if (!row.entry.active) return false + if (row.entry.provider === 'deepseek-account') return row.accountAvailable === true if (row.apiKeyEnv === undefined) return true return row.credential?.configured === true } diff --git a/packages/client/ui-settings-models/tests/apply.client.spec.ts b/packages/client/ui-settings-models/tests/apply.client.spec.ts index 22e1d04f06..408de5248f 100644 --- a/packages/client/ui-settings-models/tests/apply.client.spec.ts +++ b/packages/client/ui-settings-models/tests/apply.client.spec.ts @@ -45,6 +45,7 @@ async function bench(isLoopback = true, mock = RemoteMock.create().load(remoteDe ...services, }, settings: mock.remote.settings, + session: { initializeDefaultModel: vi.fn(async () => ({ ok: true, value: undefined })) }, }) // The fixed Host facts the settings provider reads its persistence from. remote.$host = { home: undefined, isLoopback } @@ -107,7 +108,7 @@ describe('ui-settings-models apply', () => { it('declares the services it uses', () => { expect(inject).toEqual([ - 'slots', 'locale', 'remote', 'remote.credentials', 'remote.llm', 'remote.settings', + 'slots', 'locale', 'remote', 'remote.credentials', 'remote.llm', 'remote.settings', 'remote.session', 'settingsScope', 'settingsSchema', ]) }) diff --git a/packages/client/ui-settings-models/tests/components.client.spec.tsx b/packages/client/ui-settings-models/tests/components.client.spec.tsx index e9cec03e60..88e43e599f 100644 --- a/packages/client/ui-settings-models/tests/components.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/components.client.spec.tsx @@ -12,7 +12,7 @@ import { ModelsSection, needsSetup, providerCopy, providerTargetLabel, removeProviderProfile, } from '../src/client/ModelsSection.tsx' import type { ModelsSectionInjected, ModelsSectionProps } from '../src/client/ModelsSection.tsx' -import { pathOps } from '../src/client/ProviderEditor.tsx' +import { ProviderEditor, pathOps } from '../src/client/ProviderEditor.tsx' import { DeepSeekModelsEditor, formatCapacity, modelDrafts, parseCapacity, validateDeepSeekModels, } from '../src/client/DeepSeekModelsEditor.tsx' @@ -22,7 +22,7 @@ import { deriveKeyRef, ModelsSettingsStore } from '../src/client/store.ts' import { createModelsOperations } from '../src/client/operations.ts' import type { ModelsOperations } from '../src/client/operations.ts' import type { ProviderRow } from '../src/client/store.ts' -import { en } from '../src/client/locales.ts' +import { en, zh } from '../src/client/locales.ts' import { settingsSchema } from './settings-schema.client.ts' afterEach(cleanup) @@ -218,7 +218,9 @@ const contexts = new WeakMap() function ctxWith(face: object): PageContext { const existing = contexts.get(face) if (existing !== undefined) return existing - const ctx = { remote: face } as unknown as PageContext + const ctx = { remote: { ...face, + session: { initializeDefaultModel: async () => ({ ok: true, value: undefined }) }, + } } as unknown as PageContext contexts.set(face, ctx) return ctx } @@ -1620,3 +1622,18 @@ describe('apiKeyFailure', () => { expect(apiKeyFailure('"a')).toBeUndefined() }) }) + +it.each([en, zh])('edits the account model catalog without credential or endpoint fields', async (copy) => { + const scripted = scriptedFace({}) + const ops = operationsWith(scripted.face) + const describe = vi.spyOn(ops, 'describeCredential') + render( copy[key]} readOnly={false} onClose={() => {}} />) + expect(screen.queryByLabelText(copy.keyInput)).toBeNull() + expect(screen.queryByLabelText(copy.baseUrl)).toBeNull() + expect(describe).not.toHaveBeenCalled() + expect(screen.getByDisplayValue('deepseek-v4-flash')).toBeTruthy() + await expect(`${document.body.textContent}\n`) + .toMatchFileSnapshot(`./expected/deepseek-account-${copy === en ? 'en' : 'zh'}.txt`) +}) diff --git a/packages/client/ui-settings-models/tests/expected/deepseek-account-en.txt b/packages/client/ui-settings-models/tests/expected/deepseek-account-en.txt new file mode 100644 index 0000000000..c9841889a6 --- /dev/null +++ b/packages/client/ui-settings-models/tests/expected/deepseek-account-en.txt @@ -0,0 +1 @@ +DeepSeek Accountdeepseek-accountModelsUsing the adapter defaultsAdd modelCancelApply diff --git a/packages/client/ui-settings-models/tests/expected/deepseek-account-zh.txt b/packages/client/ui-settings-models/tests/expected/deepseek-account-zh.txt new file mode 100644 index 0000000000..e11c2e1969 --- /dev/null +++ b/packages/client/ui-settings-models/tests/expected/deepseek-account-zh.txt @@ -0,0 +1 @@ +DeepSeek 账号deepseek-account模型目录正在使用适配器默认模型添加模型取消保存 diff --git a/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx b/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx index 60e7d79165..f5c50b3056 100644 --- a/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx @@ -12,6 +12,7 @@ function operations(discoverModels: ModelsOperations['discoverModels']): ModelsO return { discoverModels, describeCredential: vi.fn(), + initializeModel: vi.fn(), storeCredential: vi.fn(), removeCredential: vi.fn(), writeSettings: vi.fn(), diff --git a/packages/client/ui-settings-models/tests/onboarding-dialog.client.spec.tsx b/packages/client/ui-settings-models/tests/onboarding-dialog.client.spec.tsx index 89bc6b2ca7..d19873f3b2 100644 --- a/packages/client/ui-settings-models/tests/onboarding-dialog.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/onboarding-dialog.client.spec.tsx @@ -136,7 +136,7 @@ function harness(options: { }, } // The page plugin's context, scripted down to the namespaces it reaches. - const ctx = { remote: face } as never + const ctx = { remote: { ...face, session: { initializeDefaultModel: async () => ({ ok: true, value: undefined }) } } } as never const operations = createModelsOperations(ctx) const controller = new ModelsSettingsStore(ctx, settingsSchema, new SettingsDescribeMirror(ctx)) const openSection = vi.fn() diff --git a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx index 57c61d702b..ae71cf0557 100644 --- a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx @@ -153,7 +153,9 @@ const contexts = new WeakMap() function ctxWith(face: object): PageContext { const existing = contexts.get(face) if (existing !== undefined) return existing - const ctx = { remote: face } as unknown as PageContext + const ctx = { remote: { ...face, + session: { initializeDefaultModel: async () => ({ ok: true, value: undefined }) }, + } } as unknown as PageContext contexts.set(face, ctx) return ctx } diff --git a/packages/client/ui-settings-models/tests/store.client.spec.ts b/packages/client/ui-settings-models/tests/store.client.spec.ts index 0ce5a995a1..d181edc12e 100644 --- a/packages/client/ui-settings-models/tests/store.client.spec.ts +++ b/packages/client/ui-settings-models/tests/store.client.spec.ts @@ -4,7 +4,7 @@ import type { RpcResponse } from '@deepseek-ai/dsh-api-remotes/client' import { RemoteError } from '@deepseek-ai/dsh-client-test-runtime' import { SettingsDescribeMirror } from '@deepseek-ai/dsh-client-ui-settings/src/client/settings-mirror.ts' import { settingsSchema } from './settings-schema.client.ts' -import { joinProviderDirectory, ModelsSettingsStore } from '../src/client/store.ts' +import { joinProviderDirectory, ModelsSettingsStore, providerUsable } from '../src/client/store.ts' it.each([false, true])('retains configuration diagnostics when the route is active: %s', (active) => { expect(joinProviderDirectory(active ? [{ id: 'openai', name: 'openai' }] : [], [{ @@ -64,6 +64,7 @@ const NAMESPACES = [ ] function api(overrides: { + accountAvailable?: boolean providers?: () => Promise> describeSettings?: () => Promise> describeCredentials?: (refs: readonly string[]) => Promise>> @@ -88,6 +89,8 @@ function api(overrides: { : remoteFail(response.result.error.message) } const face = { + session: { modelCatalog: async () => remoteOk({ groups: overrides.accountAvailable + ? [{ id: 'deepseek-account', models: [{ id: 'deepseek-flash' }] }] : [] }) }, llm: { listProviders: () => mapProviderBatch(rows => rows .filter(row => row.active) @@ -329,3 +332,16 @@ describe('edge joins', () => { expect(store.store.getSnapshot().rows).toHaveLength(4) }) }) + + +it.each([false, true])('uses account availability without asking for an API key: %s', async (accountAvailable) => { + const { ctx, mirror, seenRefs } = api({ accountAvailable, providers: async () => ok({ providers: [{ + provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: 'llm-deepseek', settingsPath: [], active: true, + }] }) }) + const store = new ModelsSettingsStore(ctx, settingsSchema, mirror) + await store.load() + const row = store.store.getSnapshot().rows[0]! + expect(row).toMatchObject({ accountAvailable, apiKeyEnv: undefined, credential: undefined }) + expect(providerUsable(row)).toBe(accountAvailable) + expect(seenRefs).toEqual([]) +}) diff --git a/packages/core/agent-default-model/README.i18n.yaml b/packages/core/agent-default-model/README.i18n.yaml index d32bdafa59..421bdb1e70 100644 --- a/packages/core/agent-default-model/README.i18n.yaml +++ b/packages/core/agent-default-model/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-default-model/README.md -README.md: df8b9c37ea58f4d35d2f9bda1f1e7001c8b2de59 -README.zh.md: d9d78452de9e0fa2a20bcc0bd9d16c41c69e1729 +README.md: 97130a007d91f936450e3593a4ea823ca90d4ae2 +README.zh.md: 2cb9d0b837c55c976c712f286f89a65eb0afab3a diff --git a/packages/core/agent-default-model/README.md b/packages/core/agent-default-model/README.md index df8b9c37ea..97130a007d 100644 --- a/packages/core/agent-default-model/README.md +++ b/packages/core/agent-default-model/README.md @@ -54,7 +54,7 @@ const selection = ctx.agentDefaultModel.currentSelection() await ctx.agentDefaultModel.saveSelection({ provider, model, reasoningEffort: 'high' }) ``` -Without a settings provider, `saveSelection()` is a no-op and the composition entry remains current. The service does not validate catalog membership: a provider route may serve an unadvertised model, and the consumer that opens a model request owns availability diagnostics. +Without a settings provider, `saveSelection()` retains the choice in memory for later agents in this process. `initializeSelection()` saves the first setup choice only when no user choice exists; an unavailable saved choice remains intact. The service does not validate catalog membership: a provider route may serve an unadvertised model, and the consumer that opens a model request owns availability diagnostics. ----- @@ -79,7 +79,7 @@ The service is a composition entry with a settings-backed source. The plugin con ### Behavior notes -Both public methods are thin reads and writes over that source: `currentSelection()` returns a fresh detached object so a caller can hold it without aliasing service state, and `saveSelection()` writes the whole selection through `ctx.settings` when present. +Reads return detached values and writes are serialized: `currentSelection()` returns a fresh detached object so a caller can hold it without aliasing service state, and `saveSelection()` writes the whole selection through `ctx.settings` when present. @@ -114,7 +114,7 @@ Changing the default affects only agents that subsequently resolve from it. An e These limits define the service's scope. They are current package constraints, not a task backlog. - **One process-wide default** — the service owns a single default; per-session model selection remains the entry point's responsibility. -- **No retention without a settings provider** — `saveSelection()` cannot keep a selection for a later agent when no settings provider is mounted. +- **No persistence without a settings provider** — in-memory selections last only for this process. ### Dev Note diff --git a/packages/core/agent-default-model/README.zh.md b/packages/core/agent-default-model/README.zh.md index d9d78452de..2cb9d0b837 100644 --- a/packages/core/agent-default-model/README.zh.md +++ b/packages/core/agent-default-model/README.zh.md @@ -54,7 +54,7 @@ const selection = ctx.agentDefaultModel.currentSelection() await ctx.agentDefaultModel.saveSelection({ provider, model, reasoningEffort: 'high' }) ``` -未挂载设置提供方时,`saveSelection()` 不执行任何操作,组合配置项仍为当前值。该服务不校验目录成员关系:提供方路由可以服务未在目录中公布的模型;发起模型请求的消费方负责可用性诊断。 +未挂载设置提供方时,`saveSelection()` 在内存中保留选择,供本进程后续 agent 使用。`initializeSelection()` 仅在用户尚未选择时保存首次配置的模型;已保存的选择即使不可用也保持不变。该服务不校验目录成员关系:提供方路由可以服务未在目录中公布的模型;发起模型请求的消费方负责可用性诊断。 ----- @@ -79,7 +79,7 @@ await ctx.agentDefaultModel.saveSelection({ provider, model, reasoningEffort: 'h ### 行为说明 -两个公开方法都只是对该数据源进行简单读写:`currentSelection()` 返回一个全新、独立的对象,因此调用方可以持有它,而不会与服务状态共享引用;`saveSelection()` 在存在 `ctx.settings` 时写入完整选择。 +读取返回独立值,写入按序执行:`currentSelection()` 返回一个全新、独立的对象,因此调用方可以持有它,而不会与服务状态共享引用;`saveSelection()` 在存在 `ctx.settings` 时写入完整选择。 @@ -114,7 +114,7 @@ await ctx.agentDefaultModel.saveSelection({ provider, model, reasoningEffort: 'h 这些限制界定该服务的范围。它们是当前包约束,不是任务积压。 - **单一的进程级默认值**——该服务只拥有一个默认值;按会话的模型选择仍由入口负责。 -- **没有设置提供方时无法保留**——未挂载设置提供方时,`saveSelection()` 无法为后续 agent 保留选择。 +- **没有设置提供方时无法持久化**——内存中的选择仅在本进程内保留。 ### 开发备注 diff --git a/packages/core/agent-default-model/src/index.ts b/packages/core/agent-default-model/src/index.ts index 82e4e0da6d..a2c804836c 100644 --- a/packages/core/agent-default-model/src/index.ts +++ b/packages/core/agent-default-model/src/index.ts @@ -68,6 +68,8 @@ export class AgentDefaultModelConfig extends Service { }) private source: () => AgentDefaultModelSettings + private saved: ModelSelection | undefined + private writes: Promise = Promise.resolve() constructor(ctx: Context, config: Config) { super(ctx, 'agentDefaultModel') @@ -88,22 +90,45 @@ export class AgentDefaultModelConfig extends Service { * @returns a detached provider, model, and optional reasoning selection. */ currentSelection(): ModelSelection { - return selection(this.source()) + return this.ctx.get('settings') === undefined && this.saved !== undefined + ? { ...this.saved } : selection(this.source()) } /** * Save the complete default model selection. A deployment without a settings - * provider keeps its composition entry. + * provider retains the selection for this process. * @param next - resolved selection accepted by an entry point. * @returns fulfillment after the optional settings write settles. */ async saveSelection(next: ModelSelection): Promise { - await this.ctx.get('settings')?.replace(AGENT_DEFAULT_MODEL_SETTINGS_NAMESPACE, { - provider: next.provider, - model: next.model, - ...next.reasoningEffort === undefined ? {} : { reasoningEffort: String(next.reasoningEffort) }, - }) + return this.writeSelection(next, false) } + + /** + * Store the initial credential setup choice only before a user selection exists. + * @param next - available model belonging to the provider the user initialized. + * @returns after the initial selection is saved, or immediately if already selected. + */ + async initializeSelection(next: ModelSelection): Promise { + return this.writeSelection(next, true) + } + + private writeSelection(next: ModelSelection, initialize: boolean): Promise { + const operation = this.writes.then(async () => { + const user = this.ctx.get('settings')?.describe().find(entry => entry.ns === AGENT_DEFAULT_MODEL_SETTINGS_NAMESPACE)?.user + if (initialize && (this.saved !== undefined + || (typeof user === 'object' && user !== null && ('provider' in user || 'model' in user)))) return + await this.ctx.get('settings')?.replace(AGENT_DEFAULT_MODEL_SETTINGS_NAMESPACE, { + provider: next.provider, + model: next.model, + ...next.reasoningEffort === undefined ? {} : { reasoningEffort: String(next.reasoningEffort) }, + }) + this.saved = { ...next } + }) + this.writes = operation.catch(() => { /* A refused write does not block the next user choice. */ }) + return operation + } + } export default AgentDefaultModelConfig diff --git a/packages/core/agent-default-model/tests/agent-default-model.spec.ts b/packages/core/agent-default-model/tests/agent-default-model.spec.ts index b16091d809..be76848e67 100644 --- a/packages/core/agent-default-model/tests/agent-default-model.spec.ts +++ b/packages/core/agent-default-model/tests/agent-default-model.spec.ts @@ -77,22 +77,33 @@ describe('AgentDefaultModelConfig', () => { await bench.ctx.fiber.dispose() }) - it('falls back to the composition entry when the settings provider detaches', async () => { + it('retains the saved selection when the settings provider detaches', async () => { const bench = await boot() await bench.defaultModel.saveSelection({ provider: 'acme-gateway', model: 'acme-large' }) expect(bench.defaultModel.currentSelection().provider).toBe('acme-gateway') await bench.settingsFiber.dispose() - expect(bench.defaultModel.currentSelection()).toEqual({ - provider: 'deepseek-official', model: 'deepseek-v4-flash', - }) + expect(bench.defaultModel.currentSelection()).toEqual({ provider: 'acme-gateway', model: 'acme-large' }) await bench.ctx.fiber.dispose() }) - it('keeps the composition entry when no settings provider is mounted', async () => { + it('retains a user selection when no settings provider is mounted', async () => { const ctx = new Context() await ctx.plugin(AgentDefaultModelConfig, { provider: 'p', model: 'm' }) await ctx.agentDefaultModel.saveSelection({ provider: 'other', model: 'other' }) - expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'p', model: 'm' }) + expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'other', model: 'other' }) await ctx.fiber.dispose() }) }) + +it('initializes once and retains an unavailable user selection instead of replacing it', async () => { + const bench = await boot() + try { + await bench.defaultModel.initializeSelection({ provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + expect(bench.defaultModel.currentSelection().provider).toBe('deepseek-account') + await bench.defaultModel.initializeSelection({ provider: 'deepseek-official', model: 'deepseek-v4-pro' }) + expect(bench.defaultModel.currentSelection().provider).toBe('deepseek-account') + await bench.defaultModel.saveSelection({ provider: 'deleted-provider', model: 'removed-model' }) + await bench.defaultModel.initializeSelection({ provider: 'deepseek-official', model: 'deepseek-v4-flash' }) + expect(bench.defaultModel.currentSelection()).toEqual({ provider: 'deleted-provider', model: 'removed-model' }) + } finally { await bench.ctx.fiber.dispose() } +}) diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 9e8c680d18..5706f2a77d 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -94,10 +94,16 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ }, { signature: 'async saveSelection(next: ModelSelection): Promise', - description: 'Save the complete default model selection. A deployment without a settings provider keeps its composition entry.', + description: 'Save the complete default model selection. A deployment without a settings provider retains the selection for this process.', parameters: [{ name: 'next', description: 'resolved selection accepted by an entry point.' }], returns: 'fulfillment after the optional settings write settles.', }, + { + signature: 'async initializeSelection(next: ModelSelection): Promise', + description: 'Store the initial credential setup choice only before a user selection exists.', + parameters: [{ name: 'next', description: 'available model belonging to the provider the user initialized.' }], + returns: 'after the initial selection is saved, or immediately if already selected.', + }, ], }, { @@ -1780,6 +1786,12 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ parameters: [{ name: 'request', description: 'Session identity and requested model selection.' }], returns: 'the normalized selection installed for the Session.', }, + { + signature: '@Remote async initializeDefaultModel(provider: string): Promise', + description: 'Initialize the default after the user first configures a provider credential.', + parameters: [{ name: 'provider', description: 'the provider whose credential was configured.' }], + returns: 'after saving the initial available model; existing user choices are retained.', + }, { signature: '@Remote(\'modelCatalog\') modelCatalog(): Promise', description: 'Describe every currently routable model for Host-generation selectors.', diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 11c68612d8..fcc298d024 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: abd29fbdc49a100fa3e5a92ad4db05fc487ef456 -README.zh.md: d955dc40190a2b00d9034859c99c004ba06a4fa3 +README.md: 7ded16b5e1d8c87b924aeb02c8eda0a3033bd3ee +README.zh.md: de612f7b2153eab35e8a00db71aeb1bb92824eb1 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index abd29fbdc4..7ded16b5e1 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -117,6 +117,8 @@ Successful Files responses must contain valid JSON. JSON decoding failures from Non-2xx responses fail with stable codes: `AUTH` (401/403), `QUOTA`, `RATE_LIMIT`, `CONTEXT_WINDOW_EXCEEDED`, `INVALID_REQUEST`, `SERVER`, and `HTTP_` otherwise; pre-response transport failures throw `TRANSPORT`, caller aborts throw `ABORTED`, and stream-idle expiry throws `TIMEOUT`. Request-extension preparation, field collision, or post-2xx acceptance fails with `REQUEST_EXTENSION`. A normalized-image rejection names every plausible attachment and its durable position when the provider does not identify a file id. Stale-file rejection invalidates the named mappings (or every mapping used by the attempt) and permits one replacement model request. Protocol violations throw `STREAM_CLOSED` or `MALFORMED_RESPONSE`, and a terminal `stop` with no content blocks becomes `EMPTY_RESPONSE`, which the default retry policy retries. A request with no key anywhere fails with `MISSING_CREDENTIAL`, and a malformed credential fails with `INVALID_CREDENTIAL` naming the reference to fix — never any part of the key. +Each route advertises models only while its own credential resolves. Missing API keys and missing or ineligible account grants yield an empty catalog; other credential errors remain visible. This check does not probe the inference endpoint. Both configurable provider entries share the same model catalog. + ----- diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index d955dc4019..de612f7b21 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -117,6 +117,8 @@ Files 模式通过 `maxRequestFilesBytes` 与 `maxImagesPerRequest` 限制保留 非 2xx 响应以稳定 code 失败:`AUTH`(401/403)、`QUOTA`、`RATE_LIMIT`、`CONTEXT_WINDOW_EXCEEDED`、`INVALID_REQUEST`、`SERVER` 以及其他情况的 `HTTP_`;响应前传输失败抛出 `TRANSPORT`,调用方中止抛出 `ABORTED`,流空闲超时抛出 `TIMEOUT`。请求扩展准备、字段冲突或 2xx 后接受失败使用 `REQUEST_EXTENSION`。当提供方未指出 file id 时,规范化图片拒绝会列出所有可能附件及其持久位置。陈旧文件拒绝会使点名映射(或该次尝试使用的全部映射)失效,并允许一次替换模型请求。协议违规抛出 `STREAM_CLOSED` 或 `MALFORMED_RESPONSE`;不带内容块的终止 `stop` 变成 `EMPTY_RESPONSE`,默认重试策略会重试它。任何位置都没有密钥的请求以 `MISSING_CREDENTIAL` 失败;格式错误的凭据以 `INVALID_CREDENTIAL` 失败,并点名需要修复的引用——绝不包含密钥的任何部分。 +每条路由仅在其自身凭据可解析时公布模型。缺少 API Key 或账号授权缺失、不适用时返回空目录;其他凭据错误仍会暴露。此检查不会探测推理端点。两个可配置提供方条目共用同一份模型目录。 + ----- diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index c25125987e..568b3190e6 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -1,6 +1,6 @@ /** Select a DeepSeek wire implementation from one validated configuration generation. */ import { assertNever } from '@deepseek-ai/dsh-util-values' -import { LlmAdapter } from '@deepseek-ai/dsh-llm' +import { LlmAdapter, LlmError } from '@deepseek-ai/dsh-llm' import type { GenerateOptions, PreparedAdapterCall, StreamChunk } from '@deepseek-ai/dsh-llm' import type { DeepSeekAdapterOptions } from './common/types.ts' import { ChatCompletionsAdapter } from './protocols/chat-completions/adapter.ts' @@ -41,9 +41,16 @@ export class DeepSeekAdapter extends LlmAdapter { } } - override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek (Account)' : 'DeepSeek (API Key)' } } + override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek Account' : 'DeepSeek (API Key)' } } override providerRetryPolicy(provider: string) { return this.implementation().providerRetryPolicy(provider) } - override listModels(provider: string) { return this.implementation().listModels(provider) } + override async listModels(provider: string) { + try { await this.dependencies.resolveApiKey(this.dependencies.options()) } + catch (error) { + if (error instanceof LlmError && ['MISSING_CREDENTIAL', 'ACCOUNT_SIGN_IN_REQUIRED'].includes(error.code)) return [] + throw error + } + return this.implementation().listModels(provider) + } override resolveModel(provider: string, model: string, signal?: AbortSignal) { return this.implementation().resolveModel(provider, model, signal) } diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index c740a9e449..f0c262c722 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -134,6 +134,7 @@ export function apply(ctx: Context, config: Config): void { }) ctx.llm.registerConfigurableProviders([ { provider: PROVIDER, displayName: 'DeepSeek (API Key)', settingsNs: NS, settingsPath: [] }, + { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: NS, settingsPath: [] }, ]) // Route effects bind to this apply fiber via the stable `ctx` reference, // even when a swap runs inside the scoped settings callback below. diff --git a/packages/llm/llm-deepseek/tests/account-routing.spec.ts b/packages/llm/llm-deepseek/tests/account-routing.spec.ts index 64b050fd02..95ffb361ca 100644 --- a/packages/llm/llm-deepseek/tests/account-routing.spec.ts +++ b/packages/llm/llm-deepseek/tests/account-routing.spec.ts @@ -214,3 +214,20 @@ it('cancels an account child without stopping its API-key parent', async () => { parent.cancel({ kind: 'user' }) await parent.whenIdle() }) + +it('advertises account and API-key models only while their own credential is available', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', '') + const ctx = await harness() + let token: string | undefined + ctx.provide('deepseekAccount', { resolveToken: async (url: string) => url === 'https://api.deepseek.com' ? token : undefined } as DeepSeekAccount) + expect(await ctx.llm.listModels('deepseek-account')).toEqual([]) + expect(await ctx.llm.listModels('deepseek-official')).toEqual([]) + token = 'fixture-account-token' + expect(await ctx.llm.listModels('deepseek-account')).not.toHaveLength(0) + expect(await ctx.llm.listModels('deepseek-official')).toEqual([]) + vi.stubEnv('DEEPSEEK_API_KEY', 'fixture-key') + expect(await ctx.llm.listModels('deepseek-official')).not.toHaveLength(0) + token = undefined + expect(await ctx.llm.listModels('deepseek-account')).toEqual([]) + expect(await ctx.llm.listModels('deepseek-official')).not.toHaveLength(0) +}) diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 2c95e5db00..89d33d64b4 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -1697,13 +1697,13 @@ describe('plugin registration and config', () => { protocol: 'chat-completions', baseURL: server.url, }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) expect(ctx.llm.listConfigurableProviders()).toEqual([{ provider: 'deepseek-official', displayName: 'DeepSeek (API Key)', settingsNs: 'llm-deepseek', settingsPath: [], - }]) + }, { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: 'llm-deepseek', settingsPath: [] }]) await fiber.dispose() expect(ctx.llm.listProviders()).toEqual([]) expect(ctx.llm.listConfigurableProviders()).toEqual([]) @@ -1730,10 +1730,11 @@ describe('plugin registration and config', () => { }) it('owns the deepseek provider and advertises the default models', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', 'catalog-fixture-key') const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([ { provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] }, { @@ -1861,6 +1862,7 @@ describe('plugin registration and config', () => { }) it('uses the default model catalog when apply is called directly', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', 'catalog-fixture-key') const ctx = new Context() await ctx.plugin(LlmRuntime) LlmDeepSeek.apply(ctx, { baseURL: 'http://127.0.0.1:1' }) @@ -1893,6 +1895,7 @@ describe('plugin registration and config', () => { }) it('advertises configured models without restricting arbitrary request ids', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', 'catalog-fixture-key') const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { @@ -2186,18 +2189,17 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) }) - it('loads keyless, keeps the catalog browsable, and fails the request actionably', async () => { + it('loads keyless, hides unavailable models, and fails the request actionably', async () => { vi.stubEnv('DEEPSEEK_API_KEY', '') const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) - // First-boot onboarding: the route registers so models stay discoverable; - // only the request itself needs a key. - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) - await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(2) + // The registered provider remains configurable before its credential exists. + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(0) const first = await assemble(ctx, { model: 'deepseek-flash', messages: [] }) expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) // The guidance leads with the managed credential store. @@ -2277,7 +2279,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) // Registration succeeds; no call is made (would hit api.deepseek.com). await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek (Account)' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) }) it('adapter is constructible directly for embedding over the shared resolver', async () => { diff --git a/packages/llm/llm-pi-ai/README.i18n.yaml b/packages/llm/llm-pi-ai/README.i18n.yaml index 175e1ab36e..dae9ded55a 100644 --- a/packages/llm/llm-pi-ai/README.i18n.yaml +++ b/packages/llm/llm-pi-ai/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-pi-ai/README.md -README.md: 4b3297ab96c2c691f9bbf849d8e49cb10a126a6a -README.zh.md: b33381468891fa81b199cca40f22a59183f5076a +README.md: ad39c0d53bc41b6c0da4d046a5d0cadd6ce6b3dc +README.zh.md: 082e8e4da8fd9b9948e9284cf9441f1e7d3e9c81 diff --git a/packages/llm/llm-pi-ai/README.md b/packages/llm/llm-pi-ai/README.md index 4b3297ab96..ad39c0d53b 100644 --- a/packages/llm/llm-pi-ai/README.md +++ b/packages/llm/llm-pi-ai/README.md @@ -120,6 +120,8 @@ Settings writes strictly validate each new or changed provider after merging its Changing `displayName`, `apiKeyEnv`, or `baseURL` without resolving the provider's model errors still rejects the save. For example, renaming an OpenRouter route whose model `111` needs an `api` cannot be saved on its own: repair or remove that model in the same editor draft, then save the complete provider configuration. Intermediate repairs remain in the draft until the whole provider validates; other providers can be saved independently. +Model discovery resolves each route’s credential configuration. A missing required credential yields an empty catalog; other resolution errors propagate. Routes with native authentication or no required key retain their configured catalog. This check does not probe the inference endpoint. + ----- diff --git a/packages/llm/llm-pi-ai/README.zh.md b/packages/llm/llm-pi-ai/README.zh.md index b333814688..082e8e4da8 100644 --- a/packages/llm/llm-pi-ai/README.zh.md +++ b/packages/llm/llm-pi-ai/README.zh.md @@ -120,6 +120,8 @@ Settings 写入会在合并组合层与用户层后严格校验每个新增或 只修改 `displayName`、`apiKeyEnv` 或 `baseURL` 而未解决提供方的模型配置错误时,保存仍会被拒绝。例如,OpenRouter 路由的模型 `111` 缺少 `api` 时,不能单独保存路由名称的修改:需要在同一份编辑草稿中修复或删除该模型,再保存完整的提供方配置。中间修复状态保留在草稿中,直到整条提供方配置通过校验;其他提供方可以独立保存。 +模型发现会解析各路由的凭据配置。缺少必需凭据时返回空目录;其他解析错误继续抛出。使用原生认证或无需密钥的路由保留其配置的目录。此检查不会探测推理端点。 + ----- diff --git a/packages/llm/llm-pi-ai/src/adapter.ts b/packages/llm/llm-pi-ai/src/adapter.ts index de9f3e0e42..3370e1ffcc 100644 --- a/packages/llm/llm-pi-ai/src/adapter.ts +++ b/packages/llm/llm-pi-ai/src/adapter.ts @@ -274,9 +274,14 @@ export class PiAiAdapter extends LlmAdapter { } override listModels(provider: string): Promise { - return Promise.resolve().then(() => { + return Promise.resolve().then(async () => { const snapshot = this.current() - this.profileOf(snapshot, provider) + const profile = this.profileOf(snapshot, provider) + try { await this.config.resolveApiKey(provider, profile) } + catch (error) { + if (error instanceof LlmError && error.code === 'MISSING_CREDENTIAL') return [] + throw error + } return snapshot.models.getModels(provider).map(model => ({ provider, id: model.id, diff --git a/packages/llm/llm-pi-ai/tests/catalog.spec.ts b/packages/llm/llm-pi-ai/tests/catalog.spec.ts index 85534d6773..ef4e3aa4be 100644 --- a/packages/llm/llm-pi-ai/tests/catalog.spec.ts +++ b/packages/llm/llm-pi-ai/tests/catalog.spec.ts @@ -1143,7 +1143,7 @@ describe('resolution snapshots', () => { profiles: () => current, // Credential resolution is the real await inside a stream call, and the // window a configuration change has to land in. - resolveApiKey: async () => { await held; return 'k' }, + resolveApiKey: async (provider) => { if (provider === 'deepseek') await held; return 'k' }, auth: memoryAuth(), }) From 325e28bfa0e310fd36dd8ecb40ee8f565cc1fb66 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Sun, 20 Sep 2026 11:42:43 +0800 Subject: [PATCH 04/60] fix(ui-model-selection,llm-deepseek): prioritize account models and simplify provider label --- .../client/ui-model-selection/README.i18n.yaml | 4 ++-- packages/client/ui-model-selection/README.md | 2 +- .../client/ui-model-selection/README.zh.md | 2 +- .../src/client/ModelSelect.tsx | 8 +++++--- .../tests/expected/account-first.txt | 8 ++++++++ .../tests/model-select.client.spec.tsx | 18 ++++++++++++++++++ packages/llm/llm-deepseek/src/adapter.ts | 2 +- packages/llm/llm-deepseek/src/index.ts | 2 +- .../llm/llm-deepseek/tests/adapter.spec.ts | 12 ++++++------ 9 files changed, 43 insertions(+), 15 deletions(-) create mode 100644 packages/client/ui-model-selection/tests/expected/account-first.txt diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 9ba09cab47..2b7317e90e 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-model-selection/README.md -README.md: 7afc8f158509e18e90236d6302ab51125fa7a891 -README.zh.md: c14ad7ab05af24c35727d42e6d843cbdaf20f332 +README.md: 9b73298b776d2f3d869a5da88db8d17e14f0f3a9 +README.zh.md: 4dbd077a30cbbaaefd9fabcbf1cc4661367a3069 diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index 7afc8f1585..9b73298b77 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -31,7 +31,7 @@ Mount this plugin alongside `ui-conversation` and the commands package; the comp ### Model and effort -Models stay grouped by provider. The composer menu shows model and effort names only. The `/model` popup shows provider names and catalog descriptions; it localizes the two built-in DeepSeek descriptions and leaves external provider descriptions verbatim. The popup applies the selected model's default effort; the composer can then choose any advertised effort. An adapter without reasoning metadata leaves the Effort row absent; there is no arbitrary effort input. +Models stay grouped by provider. The composer menu shows model and effort names only, with DeepSeek Account first; other providers retain their catalog order. The `/model` popup shows provider names and catalog descriptions; it localizes the two built-in DeepSeek descriptions and leaves external provider descriptions verbatim. The popup applies the selected model's default effort; the composer can then choose any advertised effort. An adapter without reasoning metadata leaves the Effort row absent; there is no arbitrary effort input. ### Unroutable sessions diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index c14ad7ab05..4dbd077a30 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -31,7 +31,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 ### 模型与推理强度 -模型按提供方分组。composer 菜单只显示模型与推理强度名称。`/model` 弹窗显示提供方名称与目录说明;其中两个内置 DeepSeek 模型的说明使用当前语言,外部提供方说明保持原文。弹窗应用所选模型的默认推理强度;composer 随后可以选择任一已公布的推理强度。适配器没有推理元数据时不显示 Effort 行;不存在任意推理强度输入。 +模型按提供方分组。composer 菜单只显示模型与推理强度名称,DeepSeek 账号置顶,其他提供方保持目录原有顺序。`/model` 弹窗显示提供方名称与目录说明;其中两个内置 DeepSeek 模型的说明使用当前语言,外部提供方说明保持原文。弹窗应用所选模型的默认推理强度;composer 随后可以选择任一已公布的推理强度。适配器没有推理元数据时不显示 Effort 行;不存在任意推理强度输入。 ### 不可路由的会话 diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.tsx b/packages/client/ui-model-selection/src/client/ModelSelect.tsx index b9c8993563..5e33fbe526 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx +++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx @@ -75,7 +75,9 @@ export function ModelSelect( const itemRefs = useRef<(HTMLButtonElement | null)[]>([]) const id = useId() - const choices = useMemo(() => state.groups.flatMap(group => + const groups = useMemo(() => state.groups.toSorted((left, right) => + Number(right.id === 'deepseek-account') - Number(left.id === 'deepseek-account')), [state.groups]) + const choices = useMemo(() => groups.flatMap(group => group.models.map(model => ({ group, model, @@ -86,7 +88,7 @@ export function ModelSelect( ? {} : { reasoningEffort: model.reasoning.defaultEffort }, } satisfies ModelSelection, - }))), [state.groups]) + }))), [groups]) const selectedIndex = state.current === null ? -1 : choices.findIndex(c => c.selection.provider === state.current?.provider && c.selection.model === state.current.model) @@ -409,7 +411,7 @@ export function ModelSelect(
))}
- {state.groups.map((group) => { + {groups.map((group) => { const headingId = `${id}-${group.id}` return (
diff --git a/packages/client/ui-model-selection/tests/expected/account-first.txt b/packages/client/ui-model-selection/tests/expected/account-first.txt new file mode 100644 index 0000000000..304c901c9f --- /dev/null +++ b/packages/client/ui-model-selection/tests/expected/account-first.txt @@ -0,0 +1,8 @@ +deepseek-account-1 +deepseek-account-2 +custom-1 +custom-2 +deepseek-official-1 +deepseek-official-2 +another-1 +another-2 diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx index 3ac3613aac..e71062bbdc 100644 --- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx +++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx @@ -455,3 +455,21 @@ it('shows the unselected model control without a stale model or effort', async ( await expect(`${trigger.textContent}\n`).toMatchFileSnapshot('./expected/unselected-model.txt') expect(trigger.textContent).not.toContain('High') }) + + +it('places account models first while preserving other provider and model order', async () => { + const groups = ['custom', 'deepseek-official', 'deepseek-account', 'another'].map(id => ({ + id, name: id, models: [1, 2].map(index => ({ id: `${id}-${index}`, name: `${id}-${index}` })), + })) + const directory = createSnapshotStore(state({ current: null, groups })) + render() + fireEvent.click(screen.getByRole('button', { name: '请选择模型' })) + fireEvent.click(screen.getByRole('menuitem', { name: /模型/ })) + const names = screen.getAllByRole('menuitemradio').map(row => row.textContent) + expect(names).toEqual([ + 'deepseek-account-1', 'deepseek-account-2', 'custom-1', 'custom-2', + 'deepseek-official-1', 'deepseek-official-2', 'another-1', 'another-2', + ]) + expect(groups.map(group => group.id)).toEqual(['custom', 'deepseek-official', 'deepseek-account', 'another']) + await expect(`${names.join('\n')}\n`).toMatchFileSnapshot('./expected/account-first.txt') +}) diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 568b3190e6..95add7b318 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -41,7 +41,7 @@ export class DeepSeekAdapter extends LlmAdapter { } } - override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek Account' : 'DeepSeek (API Key)' } } + override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek Account' : 'DeepSeek' } } override providerRetryPolicy(provider: string) { return this.implementation().providerRetryPolicy(provider) } override async listModels(provider: string) { try { await this.dependencies.resolveApiKey(this.dependencies.options()) } diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index f0c262c722..bd159998e3 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -133,7 +133,7 @@ export function apply(ctx: Context, config: Config): void { }, }) ctx.llm.registerConfigurableProviders([ - { provider: PROVIDER, displayName: 'DeepSeek (API Key)', settingsNs: NS, settingsPath: [] }, + { provider: PROVIDER, displayName: 'DeepSeek', settingsNs: NS, settingsPath: [] }, { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: NS, settingsPath: [] }, ]) // Route effects bind to this apply fiber via the stable `ctx` reference, diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 89d33d64b4..fb8c01a25a 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -1697,10 +1697,10 @@ describe('plugin registration and config', () => { protocol: 'chat-completions', baseURL: server.url, }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) expect(ctx.llm.listConfigurableProviders()).toEqual([{ provider: 'deepseek-official', - displayName: 'DeepSeek (API Key)', + displayName: 'DeepSeek', settingsNs: 'llm-deepseek', settingsPath: [], }, { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: 'llm-deepseek', settingsPath: [] }]) @@ -1734,7 +1734,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([ { provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] }, { @@ -2189,7 +2189,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) }) it('loads keyless, hides unavailable models, and fails the request actionably', async () => { @@ -2198,7 +2198,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions', baseURL: 'http://127.0.0.1:1' }) // The registered provider remains configurable before its credential exists. - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(0) const first = await assemble(ctx, { model: 'deepseek-flash', messages: [] }) expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) @@ -2279,7 +2279,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) // Registration succeeds; no call is made (would hit api.deepseek.com). await ctx.plugin(LlmDeepSeek, { protocol: 'chat-completions' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek (API Key)' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) }) it('adapter is constructible directly for embedding over the shared resolver', async () => { From 7dc86578d8870fdaea99361670f6d1448c43a86f Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Sun, 20 Sep 2026 11:50:14 +0800 Subject: [PATCH 05/60] fix(ui-settings-account,ui-model-selection): align with updated primitives and catalog checks --- .../tests/expected/default-model/unselected.expected.md | 7 ++----- .../ui-model-selection/tests/browser-plugin.client.spec.ts | 7 +++---- .../ui-settings-account/src/client/SignOutDialog.tsx | 4 ++-- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/apps/web/tests/expected/default-model/unselected.expected.md b/apps/web/tests/expected/default-model/unselected.expected.md index c4fb007e9c..6228bea41c 100644 --- a/apps/web/tests/expected/default-model/unselected.expected.md +++ b/apps/web/tests/expected/default-model/unselected.expected.md @@ -1,8 +1,5 @@ - textbox "描述你想要构建的内容, / 调用指令, @ 文件或对话" [disabled] -- button "添加文件或调用指令" [disabled]: - - img +- button "添加文件或调用指令" [disabled] - button "访问模式,当前:工作区内修改" [disabled]: 工作区内修改 -- button "请选择模型": - - text: 请选择模型 - - img +- button "请选择模型" - button "发送消息" [disabled] diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index 67484a5d95..4fa513e9ba 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -71,8 +71,7 @@ async function bench(locale: 'zh' | 'en' = 'zh') { let selected = defaultSelection const calls = { models: 0, select: 0 } const projections = new Map>() - // Whether the Host reports an adapter for the current route; the composer - // block follows this, never catalog membership. + // Whether the Host advertises available models for the current route. let routable = true let selectionFailure: RemoteError<'session/writer-held'> | undefined const sessionRemote = { @@ -382,14 +381,14 @@ describe('ui-model-selection dual entry', () => { await oldDirectory.load() const replacement = b.mint('s1') replacement.projection.set({ lastUsed: null, - next: { provider: routable ? 'deepseek-official' : 'missing', model: 'replacement' } }) + next: { provider: routable ? 'deepseek-official' : 'missing', model: 'deepseek-v4-flash' } }) const directory = b.ctx.modelDirectories.directoryFor(sid('s1')) try { expect(directory.store.getSnapshot().routable).toBe(routable) const expected = b.blockOf('s1') await Promise.resolve().then(() => { first.projection.set({ lastUsed: null, - next: { provider: routable ? 'missing' : 'deepseek-official', model: 'late-old' } }) + next: { provider: routable ? 'missing' : 'deepseek-official', model: 'deepseek-v4-pro' } }) }) expect(oldDirectory.store.getSnapshot().routable).toBe(!routable) expect(b.blockOf('s1')).toBe(expected) diff --git a/packages/client/ui-settings-account/src/client/SignOutDialog.tsx b/packages/client/ui-settings-account/src/client/SignOutDialog.tsx index c0679a0b2d..f9b59e8ea8 100644 --- a/packages/client/ui-settings-account/src/client/SignOutDialog.tsx +++ b/packages/client/ui-settings-account/src/client/SignOutDialog.tsx @@ -1,6 +1,6 @@ /** Account sign-out confirmation with the current task impact. */ import { useState } from 'react' -import { Button, IconCloseOutline16, Modal } from '@deepseek-ai/dsh-client-ui-primitives' +import { Button, IconCloseOutlineRegular, Modal } from '@deepseek-ai/dsh-client-ui-primitives' import type { AccountKey } from './locales.ts' import css from './SignInDialog.module.css' @@ -26,7 +26,7 @@ export function SignOutDialog({ running, signOut, close, t }: {

{t('signOut')}

{t(running ? 'signOutRunningDescription' : 'signOutDescription')}

From 9cf12959f22efe0e43ac097f69a503077a265c12 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Sun, 20 Sep 2026 17:05:58 +0800 Subject: [PATCH 06/60] fix(ui-model-selection): retain effort and open unselected models directly --- apps/web/tests/default-model.e2e.ts | 3 ++- .../ui-model-selection/README.i18n.yaml | 4 ++-- packages/client/ui-model-selection/README.md | 2 ++ .../client/ui-model-selection/README.zh.md | 2 ++ .../src/client/ModelSelect.module.css | 6 ++--- .../src/client/ModelSelect.tsx | 9 ++++---- .../ui-model-selection/src/client/catalog.ts | 19 ++++++++++++++- .../src/client/directory.ts | 15 +++++++++--- .../tests/browser-plugin.client.spec.ts | 23 +++++++++++++++++++ .../tests/expected/unselected-model.txt | 2 +- .../tests/model-select.client.spec.tsx | 13 +++++++---- 11 files changed, 79 insertions(+), 19 deletions(-) diff --git a/apps/web/tests/default-model.e2e.ts b/apps/web/tests/default-model.e2e.ts index f9fd8da7ea..40b3911071 100644 --- a/apps/web/tests/default-model.e2e.ts +++ b/apps/web/tests/default-model.e2e.ts @@ -104,6 +104,7 @@ describe('web e2e: the composer model switch is the default for later sessions', const trigger = page.getByRole('button', { name: /^选择模型/ }) await trigger.waitFor({ timeout: 15_000 }) + expect(await trigger.evaluate(element => getComputedStyle(element).fontWeight)).toBe('400') await trigger.click() await page.getByRole('menuitem', { name: /模型/ }).click() await page.getByRole('menuitemradio', { name: 'Acme Large' }).click() @@ -143,6 +144,7 @@ describe('web e2e: the composer model switch is the default for later sessions', await expect.poll(async () => box.isEnabled(), { timeout: 15_000 }).toBe(false) const unset = page.getByRole('button', { name: '请选择模型', exact: true }) await unset.waitFor() + expect(await unset.evaluate(element => getComputedStyle(element).fontWeight)).toBe('400') expect(await page.getByRole('button', { name: '发送消息', exact: true }).isEnabled()).toBe(false) const aria = await captureStableAria(page, '[data-composer-card]', scaffold.workspaceCwd) await compareOrRefreshGolden(fileURLToPath(new URL('./expected/default-model/unselected.expected.md', import.meta.url)), aria, webSnapshotMode()) @@ -161,7 +163,6 @@ describe('web e2e: the composer model switch is the default for later sessions', const seat = page.getByRole('button', { name: '请选择模型', exact: true }) expect(await seat.isEnabled()).toBe(true) await seat.click() - await page.getByRole('menuitem', { name: /模型/ }).click() await page.getByRole('menuitemradio').first().click() await expect.poll(async () => box.isEnabled(), { timeout: 15_000 }).toBe(true) expect(tripwire.pageErrors).toEqual([]) diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 2b7317e90e..db4fe73951 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-model-selection/README.md -README.md: 9b73298b776d2f3d869a5da88db8d17e14f0f3a9 -README.zh.md: 4dbd077a30cbbaaefd9fabcbf1cc4661367a3069 +README.md: 3c73a42b34ad9075eaaab9e256767b7250ea0513 +README.zh.md: 87cccdeacde3183427a1ff08e1d1288e5cf170be diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index 9b73298b77..3c73a42b34 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -27,6 +27,8 @@ The Web GUI lets users switch the model and reasoning effort for an existing ses DeepSeek account and API-key routes appear as separate provider groups, each exposing the same configured model catalog. +The unselected model label uses the same regular weight as an available model name and retains the saved reasoning effort caption for existing and new sessions; effort editing requires an available model. Clicking the unselected trigger opens the model list directly; Escape closes it. + Mount this plugin alongside `ui-conversation` and the commands package; the composer then shows the model seat next to the pending indicator, and `/model` opens the same directory as a popup. While the seat's menu is open, `↑`/`↓` move focus across the rows of the shown pane, Tab settles the focused row, and Escape and `Shift+Tab` leave a drilled pane first and otherwise close back to the trigger. Drilling lands on the row of the value in use, and going back lands on the cell that opened the pane left. Both surfaces show the host-reported current selection when the exact provider/model pair remains in the advertised groups; a missing catalog row clears the effective selection and the trigger prompts `Select model`, without changing the stored choice. ### Model and effort diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index 4dbd077a30..87cccdeacd 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -27,6 +27,8 @@ Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有 DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示相同的已配置模型目录。 +未选模型文案与可用模型名使用相同的常规字重,并在既有会话与新会话中保留已保存的推理强度显示;调整推理强度需要先选择可用模型。点击未选模型控件直接打开模型列表,Escape 关闭列表。 + 与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,有效选择置空,触发器提示“请选择模型”,已保存的选择不变。 ### 模型与推理强度 diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.module.css b/packages/client/ui-model-selection/src/client/ModelSelect.module.css index 799c10776c..3f42221fca 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.module.css +++ b/packages/client/ui-model-selection/src/client/ModelSelect.module.css @@ -3,7 +3,7 @@ min-width: 0; } -/* Figma 313:14108 ToggleButton: 13/20 medium secondary label, 4px gap, +/* Figma 313:14108 ToggleButton: 13/20 regular secondary label, 4px gap, 12px caption chevron; 28px chip height matches the sibling Plan / Read-only selects in the same tool row. */ .trigger { @@ -25,7 +25,7 @@ color: var(--dsw-alias-label-secondary); font-size: 13px; line-height: 20px; - font-weight: 500; + font-weight: 400; cursor: pointer; } @@ -49,7 +49,7 @@ white-space: nowrap; } -/* Effort value beside the model name (mock's 'High': same 13/20/500, caption +/* Effort value beside the model name (mock's 'High': same 13/20/400, caption tone). Adaptive priority: the huge shrink factor makes the effort absorb all deficit first — it ellipsizes away to nothing before the model name loses a single pixel, and the chevron stays snug throughout. */ diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.tsx b/packages/client/ui-model-selection/src/client/ModelSelect.tsx index 5e33fbe526..2223cd3c21 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx +++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx @@ -96,7 +96,7 @@ export function ModelSelect( const reasoning = currentChoice?.model.reasoning const effectiveEffort = state.current?.reasoningEffort ?? reasoning?.defaultEffort const effortLabel = reasoning === undefined - ? undefined + ? state.retainedEffort : effectiveEffort === undefined ? t('effort.providerDefault') : reasoning.efforts.find(level => level.id === effectiveEffort)?.name ?? effectiveEffort @@ -192,7 +192,8 @@ export function ModelSelect( if (!available) return null const show = (): void => { - setPane('root') + if (state.current === null) paneFocus.current = 'drill' + setPane(state.current === null ? 'model' : 'root') setOpen(true) reload() } @@ -231,7 +232,7 @@ export function ModelSelect( if (event.key === 'Escape' && open) { event.preventDefault() // Escape backs out of a drilled pane first, then closes. - if (pane !== 'root') back(pane) + if (pane !== 'root' && state.current !== null) back(pane) else close(true) return } @@ -242,7 +243,7 @@ export function ModelSelect( if (event.key === 'Tab') { if (event.shiftKey) { event.preventDefault() - if (pane !== 'root') back(pane) + if (pane !== 'root' && state.current !== null) back(pane) else close(true) return } diff --git a/packages/client/ui-model-selection/src/client/catalog.ts b/packages/client/ui-model-selection/src/client/catalog.ts index d5073d2ab0..cbc92642e7 100644 --- a/packages/client/ui-model-selection/src/client/catalog.ts +++ b/packages/client/ui-model-selection/src/client/catalog.ts @@ -1,7 +1,7 @@ /** One Host-generation model catalog shared by every Session selector. */ import type { Context as ClientContext } from '@deepseek-ai/cordis' -import type { ModelCatalog } from '@deepseek-ai/dsh-api-remotes/client' +import type { ModelCatalog, ModelSelection, ModelProviderGroup } from '@deepseek-ai/dsh-api-remotes/client' import { createSnapshotStore, type SnapshotStore } from '@deepseek-ai/dsh-client-store' /** Observable lifecycle of the shared model catalog. */ @@ -20,6 +20,17 @@ export class ModelCatalogDirectory { error: null, }) + private readonly reasoning = new Map() + + /** + * Read the last advertised reasoning metadata, including unavailable models. + * @param selection - provider and model whose effort is displayed. + * @returns reasoning metadata observed during this Host generation. + */ + reasoningFor(selection: ModelSelection): ModelProviderGroup['models'][number]['reasoning'] { + return this.reasoning.get(JSON.stringify([selection.provider, selection.model])) + } + private generation = 0 private inflight: Promise | undefined @@ -47,6 +58,11 @@ export class ModelCatalogDirectory { throw new Error(`${response.error.code}: ${response.error.message}`) } if (generation === this.generation) { + for (const group of response.value.groups) { + for (const model of group.models) { + this.reasoning.set(JSON.stringify([group.id, model.id]), model.reasoning) + } + } this.store.set({ value: response.value, status: 'ready', error: null }) } return response.value @@ -84,6 +100,7 @@ export class ModelCatalogDirectory { /** Clear Host-specific values and load the replacement Host generation. */ resetGeneration(): void { + this.reasoning.clear() this.invalidate(true) void this.load().catch(() => { /* the selector exposes the shared error */ }) } diff --git a/packages/client/ui-model-selection/src/client/directory.ts b/packages/client/ui-model-selection/src/client/directory.ts index 8e03bcf206..162ad5db7d 100644 --- a/packages/client/ui-model-selection/src/client/directory.ts +++ b/packages/client/ui-model-selection/src/client/directory.ts @@ -17,6 +17,8 @@ import type { ModelCatalogDirectory } from './catalog.ts' export interface ModelDirectoryState { /** Available durable selection, or the available default for an unselected Session. */ current: ModelSelection | null + /** Saved effort caption retained when the selected model is unavailable. */ + retainedEffort?: string /** Whether the current selection is present in the available catalog; null while unresolved. */ routable: boolean | null /** Successfully loaded provider groups (last good load). */ @@ -136,9 +138,15 @@ export class ModelDirectory { if (this.disposed) return const catalog = this.catalog.store.getSnapshot() const projected = modelSelectionProjection(this.projected.getSnapshot()) + const intended = projected?.next ?? catalog.value?.default + const reasoning = intended === undefined ? undefined : this.catalog.reasoningFor(intended) + const effort = intended?.reasoningEffort ?? reasoning?.defaultEffort + const retainedEffort = effort === undefined ? undefined + : reasoning?.efforts.find(level => level.id === effort)?.name ?? effort if (catalog.status !== 'ready' || catalog.value === null || projected === undefined) { this.store.set({ current: null, + ...retainedEffort === undefined ? {} : { retainedEffort }, routable: null, groups: [], failures: [], @@ -147,11 +155,12 @@ export class ModelDirectory { }) return } - const intended = projected.next ?? catalog.value.default - const current = catalog.value.groups.some(group => group.id === intended.provider - && group.models.some(model => model.id === intended.model)) ? intended : null + const selection = projected.next ?? catalog.value.default + const current = catalog.value.groups.some(group => group.id === selection.provider + && group.models.some(model => model.id === selection.model)) ? selection : null this.store.set({ current, + ...retainedEffort === undefined ? {} : { retainedEffort }, routable: current !== null, groups: catalog.value.groups, failures: catalog.value.failures, diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index 4fa513e9ba..af7d3dee20 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -414,6 +414,29 @@ describe('ui-model-selection dual entry', () => { } }) + it('retains saved effort for existing and new sessions after credentials disappear', async () => { + const b = await bench() + try { + b.setHostCurrent({ provider: 'deepseek-official', model: 'deepseek-v4-flash', reasoningEffort: 'max' }) + b.mint('existing') + const existing = b.ctx.modelDirectories.directoryFor(sid('existing')) + await existing.load() + b.setProjected(sid('existing'), { lastUsed: null, + next: { provider: 'deepseek-official', model: 'deepseek-v4-flash', reasoningEffort: 'high' } }) + b.setRoutable(false) + b.remote.emit('settings/document-updated', ['llm-deepseek', 1]) + expect(existing.store.getSnapshot().retainedEffort).toBe('High') + await vi.waitFor(() => { + expect(existing.store.getSnapshot()).toMatchObject({ current: null, routable: false, retainedEffort: 'High' }) + }) + b.mint('new') + const fresh = b.ctx.modelDirectories.directoryFor(sid('new')) + expect(fresh.store.getSnapshot()).toMatchObject({ current: null, routable: false, retainedEffort: 'Max' }) + } finally { + await b.ctx.fiber.dispose() + } + }) + it('blocks the composer when current catalog models disappear', async () => { const b = await bench() b.mint('s1') diff --git a/packages/client/ui-model-selection/tests/expected/unselected-model.txt b/packages/client/ui-model-selection/tests/expected/unselected-model.txt index d6d4beb3b1..2e251b01d4 100644 --- a/packages/client/ui-model-selection/tests/expected/unselected-model.txt +++ b/packages/client/ui-model-selection/tests/expected/unselected-model.txt @@ -1 +1 @@ -请选择模型 +请选择模型High diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx index e71062bbdc..2d8df4fad0 100644 --- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx +++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx @@ -447,13 +447,19 @@ describe('ModelSelect keyboard walk', () => { }) }) -it('shows the unselected model control without a stale model or effort', async () => { - const directory = createSnapshotStore(state({ current: null, routable: false })) +it('shows the unselected model control with the inherited effort', async () => { + const directory = createSnapshotStore(state({ current: null, routable: false, retainedEffort: 'High' })) render() const trigger = screen.getByRole('button', { name: '请选择模型' }) expect(trigger.hasAttribute('disabled')).toBe(false) await expect(`${trigger.textContent}\n`).toMatchFileSnapshot('./expected/unselected-model.txt') - expect(trigger.textContent).not.toContain('High') + expect(trigger.textContent).toContain('High') + fireEvent.click(trigger) + expect(screen.queryByRole('menuitem', { name: /模型/ })).toBeNull() + const model = screen.getByRole('menuitemradio', { name: 'DeepSeek-V4-Flash' }) + expect(document.activeElement).toBe(model) + fireEvent.keyDown(model, { key: 'Escape' }) + expect(screen.queryByRole('menu')).toBeNull() }) @@ -464,7 +470,6 @@ it('places account models first while preserving other provider and model order' const directory = createSnapshotStore(state({ current: null, groups })) render() fireEvent.click(screen.getByRole('button', { name: '请选择模型' })) - fireEvent.click(screen.getByRole('menuitem', { name: /模型/ })) const names = screen.getAllByRole('menuitemradio').map(row => row.textContent) expect(names).toEqual([ 'deepseek-account-1', 'deepseek-account-2', 'custom-1', 'custom-2', From 0d2fbaad67707f95b3281a1e39340c606283246a Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Sun, 20 Sep 2026 19:27:35 +0800 Subject: [PATCH 07/60] fix(session-controller,ui-model-selection,ui-settings): handle catalog and account setup failures --- apps/web/tests/default-model.e2e.ts | 6 +-- docs/architecture.i18n.yaml | 4 +- docs/architecture.md | 2 +- docs/architecture.zh.md | 2 +- docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 10 ++-- docs/event-producer-consumer.zh.md | 10 ++-- docs/persistence-catalog.i18n.yaml | 4 +- docs/persistence-catalog.md | 4 +- docs/persistence-catalog.zh.md | 4 +- docs/persistence-schema.json | 4 +- docs/subsystems/llm-streaming.i18n.yaml | 4 +- docs/subsystems/llm-streaming.md | 8 ++-- docs/subsystems/llm-streaming.zh.md | 8 ++-- .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 2 +- packages/api/session-controller/README.zh.md | 2 +- .../api/session-controller/src/catalog.ts | 17 +++++-- packages/api/session-controller/src/index.ts | 3 +- packages/api/session-controller/src/types.ts | 1 + .../tests/session-models.host.spec.ts | 46 +++++++++++++++++- .../client/skeleton/ConversationContent.tsx | 2 +- .../tests/skeleton.client.spec.tsx | 7 ++- .../ui-model-selection/README.i18n.yaml | 4 +- packages/client/ui-model-selection/README.md | 4 +- .../client/ui-model-selection/README.zh.md | 4 +- .../src/client/ModelSelect.tsx | 7 +-- .../src/client/directory.ts | 8 ++-- .../ui-model-selection/src/client/index.ts | 5 +- .../ui-model-selection/src/client/locales.ts | 2 + .../tests/browser-plugin.client.spec.ts | 48 ++++++++++++++++++- .../tests/expected/account-first.txt | 4 +- .../tests/model-select.client.spec.tsx | 21 ++++++-- .../ui-settings-account/README.i18n.yaml | 4 +- packages/client/ui-settings-account/README.md | 4 +- .../client/ui-settings-account/README.zh.md | 4 +- .../src/client/AccountMenu.tsx | 4 +- .../src/client/SignOutDialog.tsx | 4 +- .../ui-settings-account/src/client/index.ts | 22 ++++----- .../ui-settings-account/src/client/locales.ts | 2 + .../tests/account.client.spec.tsx | 6 +-- .../tests/apply.client.spec.ts | 26 ++++++++-- .../tests/expected/sign-out-unknown-en.txt | 1 + .../tests/expected/sign-out-unknown-zh.txt | 1 + .../tests/sign-out-dialog.client.spec.tsx | 6 +-- .../ui-settings-models/README.i18n.yaml | 4 +- packages/client/ui-settings-models/README.md | 4 ++ .../client/ui-settings-models/README.zh.md | 4 ++ .../src/client/CustomProviderCard.tsx | 3 +- .../src/client/ProviderEditor.tsx | 3 +- .../src/client/operations.ts | 15 ++++-- .../ui-settings-models/src/client/store.ts | 6 ++- .../tests/components.client.spec.tsx | 23 +++++++++ .../tests/provider-form.client.spec.tsx | 24 ++++++++++ .../tests/store.client.spec.ts | 10 ++++ .../extensions/tool-cordis/src/api-catalog.ts | 2 +- packages/llm/llm-deepseek/README.i18n.yaml | 4 +- packages/llm/llm-deepseek/README.md | 2 +- packages/llm/llm-deepseek/README.zh.md | 2 +- packages/llm/llm/README.i18n.yaml | 4 +- packages/llm/llm/README.md | 2 + packages/llm/llm/README.zh.md | 2 + packages/llm/llm/src/index.ts | 8 ++-- 63 files changed, 348 insertions(+), 123 deletions(-) create mode 100644 packages/client/ui-settings-account/tests/expected/sign-out-unknown-en.txt create mode 100644 packages/client/ui-settings-account/tests/expected/sign-out-unknown-zh.txt diff --git a/apps/web/tests/default-model.e2e.ts b/apps/web/tests/default-model.e2e.ts index 40b3911071..45975fe2df 100644 --- a/apps/web/tests/default-model.e2e.ts +++ b/apps/web/tests/default-model.e2e.ts @@ -132,10 +132,8 @@ describe('web e2e: the composer model switch is the default for later sessions', const box = page.locator('[data-composer-input]').first() await expect.poll(async () => box.isEnabled(), { timeout: 10_000 }).toBe(true) - // What removing the provider on the Models page leaves behind: the saved - // default still names the route, and nothing serves it any more. - // `replace`, not `update`: a merge patch of `{providers: {}}` leaves every - // stored profile in place. + // Removing the selected provider preserves the other route and the saved + // selection. A merge update would retain the removed profile. await scaffold.ctx.settings.replace('llm-pi-ai', { providers: { [START_ROUTE]: { displayName: 'Origin Gateway', api: 'openai-completions', baseURL: 'https://gateway.origin.example/v1', models: [{ id: START_MODEL, name: 'Origin Large' }] }, diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index d642a66c82..d1ac605308 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/architecture.md -architecture.md: 3e651fa4433f0d6bab0ba73cd85929ed45e9ee79 -architecture.zh.md: a30bb804c419f38e3f68a06c252e90e4993b9e42 +architecture.md: fd3e04f7287ce97628b162becf647284221c8f64 +architecture.zh.md: f5e3bf8a3a6746044d5fbd229997eeb21303576c diff --git a/docs/architecture.md b/docs/architecture.md index 3e651fa443..fd3e04f728 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -112,7 +112,7 @@ One inbox feeds the driver; injected context waits for a waking message. AgentLo `agent/pre-step` decides the accepted input. Listeners may rewrite or reject claimed messages; a rejected or empty first claim closes a durable turn without a step. An enter decision may set `startsRequestSeries`: the loop logs a fresh `request/header` (reason `series`, or `change` with `startsSeries: true` when the envelope also changed). Wrapping listeners preserve that declaration with `{ ...decision, messages }`. After assembly and `step/start`, `agent/request` and `prepareCall()` resolve the actual route before the system prompt and accepted users are committed; cancellation during either async phase commits neither. The prepared call capability governs prompt admission, not the preceding `request/context`. Every attempt synchronously reconciles the same rendered assembly, appends users only on the first attempt, logs header/context as needed, and derives and freezes the request before streaming the bound call. Retries do not repeat assembly or `agent/pre-step`. Surface replacements and image-offload decisions after attachment start a new request series, including during the first resumed pre-step; unchanged resume continues the series. The first admitted step reserves the system head before user messages even for an empty prompt (no wire message). The prompt travels only as `system/message` history: an empty rendering clears all active system nodes, leaving no old prompt model-visible; capable routes can append non-empty updates after the cached prefix; incapable routes and new request series consolidate non-empty prompt text at the first system node, with logged empty replacements for non-empty later system nodes ([decision](../.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.md); [decision rule](../packages/core/agent-loop/README.md#understand-the-implementation)). -Immutable requests retain cancellation. `Agent.activeProvider` exposes current provider ownership. It reuses message-freeze evidence only for identities it has fully frozen; [agent-loop](../packages/core/agent-loop/README.md) owns the request construction rules. +The loop sends immutable requests with live cancellation and reuses message-freeze evidence only for identities it fully froze; [agent-loop](../packages/core/agent-loop/README.md) owns request construction. `Agent.activeProvider` identifies the provider of the latest prepared request. Details: the [sequence diagram](agent-lifecycle.md), the [tool pipeline](tool-execution-pipeline.md), and [cancellation and error recovery](subsystems/core.md#the-agent-handle). diff --git a/docs/architecture.zh.md b/docs/architecture.zh.md index a30bb804c4..f5e3bf8a3a 100644 --- a/docs/architecture.zh.md +++ b/docs/architecture.zh.md @@ -116,7 +116,7 @@ turn/end `agent/pre-step` 决定接纳的输入。监听器可以改写或拒绝已领取消息;首次领取被拒绝或为空时,关闭不含步骤的持久轮次。enter 决策可设置 `startsRequestSeries`:循环记录新的 `request/header`(原因为 `series`,或在封装同时变化时为携带 `startsSeries: true` 的 `change`)。包装监听器通过 `{ ...decision, messages }` 保留该声明。组装与 `step/start` 之后,`agent/request` 和 `prepareCall()` 先解析实际路由,再提交系统提示词与已接纳用户消息;在任一异步阶段取消都不会提交这两者。提示词准入依据已准备调用的能力,而非先前的 `request/context`。每次尝试同步协调同一份已渲染组装结果、仅在首次尝试追加用户消息、按需记录 header/context、派生并冻结请求,再通过绑定调用发起流式请求。重试不重复组装或 `agent/pre-step`。附接后的 surface 替换和图片省略决定开启新请求序列,包括恢复后的首次 pre-step 中发生的替换;未变化的恢复延续序列。首次接纳的步骤在用户消息之前预留系统头节点,即使提示词为空(不产生协议消息)。提示词仅通过 `system/message` 历史传递:空渲染文本清除所有生效的系统节点,模型不再看到旧提示词;具备能力的路由可在缓存前缀之后追加非空更新;不具备能力的路由与新请求序列将非空提示词文本归并到首个系统节点,并为非空的后续系统节点记录空内容替换([决策](../.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.zh.md);[决策规则](../packages/core/agent-loop/README.zh.md#understand-the-implementation))。 -循环发送不可变请求,同时保留实时取消能力。只有已由该循环完整冻结的消息对象身份才能复用冻结证明;[agent-loop](../packages/core/agent-loop/README.zh.md)拥有请求构造规则。 `Agent.activeProvider` 暴露当前提供方归属。 +循环发送不可变请求并保留实时取消能力,只对已完整冻结的消息对象身份复用冻结证明;[agent-loop](../packages/core/agent-loop/README.zh.md)拥有请求构造规则。`Agent.activeProvider` 标识最近一次已准备请求的提供方。 详情见[时序图](agent-lifecycle.zh.md)、[工具流水线](tool-execution-pipeline.zh.md)和[取消与错误恢复](subsystems/core.zh.md#the-agent-handle)。 diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index e174fcd03e..ba7cde7178 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/event-producer-consumer.md -event-producer-consumer.md: c5535c610ed88f265efe5065e2ff3374030192d4 -event-producer-consumer.zh.md: b2e558f5e711a3cf3628f1b9da802c1d69693090 +event-producer-consumer.md: f8160835916b5f1e6e71583c2adf647e4d996316 +event-producer-consumer.zh.md: 7a17b855917b7cb35d0fe67a56a9040dcd615978 diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index c5535c610e..f816083591 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -21,11 +21,11 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:355`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | | `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:282`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | | `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:383`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | -| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:600`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:580`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:607`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:586`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:593`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:601`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:581`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:608`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:587`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:594`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `approval/request` | `waterfall` | [`packages/interaction/user-approval/src/types.ts:85`](../packages/interaction/user-approval/src/types.ts) | [`user-approval`](../packages/interaction/user-approval) (`waterfall`) | [`acp`](../packages/acp/acp), `remotes` | | `authorization/settled` | `emit` | [`packages/credentials/authorization/src/index.ts:57`](../packages/credentials/authorization/src/index.ts) | [`authorization`](../packages/credentials/authorization) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization) | | `commands/change` | `emit` | [`packages/interaction/commands/src/types.ts:89`](../packages/interaction/commands/src/types.ts) | [`commands`](../packages/interaction/commands) (`events.dispatch`) | `remotes` | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index b2e558f5e7..7a17b85591 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -23,11 +23,11 @@ | `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:355`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | | `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:282`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | | `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:383`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | -| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:600`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:580`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:607`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:586`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:593`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:601`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:581`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:608`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:587`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:594`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `approval/request` | `waterfall` | [`packages/interaction/user-approval/src/types.ts:85`](../packages/interaction/user-approval/src/types.ts) | [`user-approval`](../packages/interaction/user-approval) (`waterfall`) | [`acp`](../packages/acp/acp), `remotes` | | `authorization/settled` | `emit` | [`packages/credentials/authorization/src/index.ts:57`](../packages/credentials/authorization/src/index.ts) | [`authorization`](../packages/credentials/authorization) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization) | | `commands/change` | `emit` | [`packages/interaction/commands/src/types.ts:89`](../packages/interaction/commands/src/types.ts) | [`commands`](../packages/interaction/commands) (`events.dispatch`) | `remotes` | diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index ae6c4b51eb..d59f81da1a 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/persistence-catalog.md -persistence-catalog.md: 43b4f86125847625026bd5619216ccdc7be926c1 -persistence-catalog.zh.md: c655d97086fa60630aa5dae1bf3f93be595f179b +persistence-catalog.md: f71cb89c5494c77df8d036faddea811a110444e1 +persistence-catalog.zh.md: abd0280d094b9f24fea7d9abe59d2ad17af263c3 diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index 43b4f86125..f71cb89c54 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -5304,7 +5304,7 @@ Array of `number`. SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -Sources: [`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +Sources: [`packages/api/session-controller/src/types.ts:381`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7195,7 +7195,7 @@ Sources: [`packages/core/tools/src/index.ts:34`](../packages/core/tools/src/inde SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7` -Sources: [`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts) +Sources: [`packages/api/session-controller/src/types.ts:386`](../packages/api/session-controller/src/types.ts) | Property | Presence | Type | |---|---|---| diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index c655d97086..abd0280d09 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -5306,7 +5306,7 @@ SHA-256: `5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78` SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -来源:[`packages/api/session-controller/src/types.ts:380`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +来源:[`packages/api/session-controller/src/types.ts:381`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:10`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7197,7 +7197,7 @@ SHA-256: `8fcb0b44a575e998665c053643d1ab04c82f39253ebd190ac0c975b78e40b543` SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7` -来源:[`packages/api/session-controller/src/types.ts:385`](../packages/api/session-controller/src/types.ts) +来源:[`packages/api/session-controller/src/types.ts:386`](../packages/api/session-controller/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 428d512264..db3a0f152a 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -44144,7 +44144,7 @@ "packages/workflow/workflow/src/types.ts#WorkflowRunId" ], "sources": [ - "packages/api/session-controller/src/types.ts:380", + "packages/api/session-controller/src/types.ts:381", "packages/attachment/attachment/src/brand.ts:6", "packages/compaction/compaction/src/brand.ts:4", "packages/core/session/src/types.ts:20", @@ -57727,7 +57727,7 @@ }, "names": [], "sources": [ - "packages/api/session-controller/src/types.ts:385" + "packages/api/session-controller/src/types.ts:386" ] }, { diff --git a/docs/subsystems/llm-streaming.i18n.yaml b/docs/subsystems/llm-streaming.i18n.yaml index 757474dd41..2a34dc3c29 100644 --- a/docs/subsystems/llm-streaming.i18n.yaml +++ b/docs/subsystems/llm-streaming.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/llm-streaming.md -llm-streaming.md: 07fc6599bc5d4eb5a4af9b566032004932052585 -llm-streaming.zh.md: 079a33599d1e5169af6402db2b2abdd7dc978369 +llm-streaming.md: 6ff93698cb877591fb85bc1a05d1dabc95b6561b +llm-streaming.zh.md: 400fcd5a96de0097ec827055fe6f96fc3eef0846 diff --git a/docs/subsystems/llm-streaming.md b/docs/subsystems/llm-streaming.md index 07fc6599bc..6ff93698cb 100644 --- a/docs/subsystems/llm-streaming.md +++ b/docs/subsystems/llm-streaming.md @@ -837,8 +837,9 @@ declare abstract class LlmAdapter { imageRequestPricing(_provider: string, _model: string): LlmImageRequestPricing | undefined; /** * List models this adapter can currently advertise for one owned provider. - * The result is advisory: an adapter may accept unlisted model ids, and - * consumers must not turn absence into request rejection. + * Core routing accepts unlisted model ids; catalog-driven entry points such + * as the GUI may require membership. Adapters used there must advertise + * their available models; the base empty catalog offers no GUI selection. * @param _provider - one provider route owned by this adapter. * @returns discoverable models in adapter-preferred order. */ @@ -1014,7 +1015,8 @@ fileRequestText(ref: FileAttachmentRef): string /** * Discover models advertised by one registered provider. Catalog membership - * is advisory and never changes routing or request validation. + * does not constrain core routing. Catalog-driven entry points may restrict + * selection and submission to the advertised models. * @param provider - registered provider route to inspect. * @returns detached model metadata in adapter-preferred order. */ diff --git a/docs/subsystems/llm-streaming.zh.md b/docs/subsystems/llm-streaming.zh.md index 079a33599d..400fcd5a96 100644 --- a/docs/subsystems/llm-streaming.zh.md +++ b/docs/subsystems/llm-streaming.zh.md @@ -843,8 +843,9 @@ declare abstract class LlmAdapter { imageRequestPricing(_provider: string, _model: string): LlmImageRequestPricing | undefined; /** * List models this adapter can currently advertise for one owned provider. - * The result is advisory: an adapter may accept unlisted model ids, and - * consumers must not turn absence into request rejection. + * Core routing accepts unlisted model ids; catalog-driven entry points such + * as the GUI may require membership. Adapters used there must advertise + * their available models; the base empty catalog offers no GUI selection. * @param _provider - one provider route owned by this adapter. * @returns discoverable models in adapter-preferred order. */ @@ -1020,7 +1021,8 @@ fileRequestText(ref: FileAttachmentRef): string /** * Discover models advertised by one registered provider. Catalog membership - * is advisory and never changes routing or request validation. + * does not constrain core routing. Catalog-driven entry points may restrict + * selection and submission to the advertised models. * @param provider - registered provider route to inspect. * @returns detached model metadata in adapter-preferred order. */ diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index b178f956cf..c7614d54c7 100644 --- a/packages/api/session-controller/README.i18n.yaml +++ b/packages/api/session-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/session-controller/README.md -README.md: 5f09de61395c3d729144203b77eeb299c217128e -README.zh.md: dfb5b97b5804b4512d17eab47866ee079fbc047d +README.md: 5b96af2040c95e6e9195d55207ead0e0acbdba12 +README.zh.md: 42961830f1731ad9ce3efe048ebde03490f80637 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index 5f09de6139..5b96af2040 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -68,7 +68,7 @@ References keep local Session data, scoped Contexts, and history streams alive, `SessionMediaReferences` mounts `GET|HEAD /api/file?path=` on the authenticated `connection.fetch` channel when `connection`, `fs`, and `attachments` are composed. It reads ordinary files through `ctx.fs`, including temporary paths outside registered workspaces and files in remote providers. Neither directory containment nor MIME categories restrict access; `mime-types` supplies the response type, with `application/octet-stream` for unknown extensions. GET reuses `readBytes` for preflight and ongoing byte limits; HEAD reads metadata only. All files use `ctx.attachments.imageLimits.maxImageBytes` (normally 20 MiB); exceeding this limit returns 413. Responses contain the complete file, ignore Range, and carry `private, no-store`, `nosniff`, and a sandbox CSP so directly opened HTML/SVG cannot execute with the API origin. The Client rewrite lives in `ui-chat` (`AssistantMarkdown`); audio/video responses are available, while Markdown audio/video player nodes remain separate work. -GUI model selection and prompt admission require the exact provider/model pair in the current available catalog. An unavailable selection rejects with `session/model-unavailable` before delivery; admission checks again after attachment preparation. `initializeDefaultModel(provider)` saves the first available model of the explicitly configured provider only before any user choice exists. Availability never substitutes another model or rewrites a Session selection. +GUI model selection and prompt admission require the exact provider/model pair in the current available catalog. An unavailable selection or a failed catalog query rejects with `session/model-unavailable` before delivery; admission checks again after attachment preparation with the same error code. `initializeDefaultModel(provider)` saves the first available model of the explicitly configured provider only before any user choice exists. A provider with no available models rejects initialization with `session/provider-models-unavailable`. Availability never substitutes another model or rewrites a Session selection. These catalog requirements belong to GUI admission; direct LLM calls can use uncatalogued models. ----- diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index dfb5b97b58..42961830f1 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -68,7 +68,7 @@ Fork 复制 `atSeq` 所选的精确事件前缀,包含切点事件,允许在 当 `connection`、`fs` 与 `attachments` 均被组合时,`SessionMediaReferences` 在鉴权 `connection.fetch` 通道上挂载 `GET|HEAD /api/file?path=<绝对路径>`。它通过 `ctx.fs` 读取普通文件,包括已注册工作区之外的临时路径与远程提供方中的文件。目录包含关系与 MIME 类别均不限制访问;`mime-types` 提供响应类型,未知扩展名使用 `application/octet-stream`。GET 复用 `readBytes` 执行读取前及读取中的字节限制;HEAD 只读取元数据。所有文件均使用 `ctx.attachments.imageLimits.maxImageBytes`(通常为 20 MiB);超过此上限返回 413。响应包含完整文件,忽略 Range,并携带 `private, no-store`、`nosniff` 与沙箱 CSP,使直接打开的 HTML/SVG 无法以 API 源身份执行脚本。客户端重写位于 `ui-chat`(`AssistantMarkdown`);音视频文件响应已可用,Markdown 音视频播放器节点仍是独立工作。 -GUI 模型选择与提示词准入要求确切提供方/模型对出现在当前可用目录中。不可用的选择在投递前以 `session/model-unavailable` 拒绝;附件准备完成后再次检查。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存其显式配置的提供方的第一个可用模型。可用性变化不会替换模型或改写会话选择。 +GUI 模型选择与提示词准入要求确切提供方/模型对出现在当前可用目录中。选择不可用或目录查询失败时,投递前以 `session/model-unavailable` 拒绝;附件准备完成后再次检查,并使用相同错误码。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存其显式配置的提供方的第一个可用模型。提供方没有可用模型时,初始化以 `session/provider-models-unavailable` 拒绝。可用性变化不会替换模型或改写会话选择。这些目录要求属于 GUI 准入;直接 LLM 调用可使用未列入目录的模型。 ----- diff --git a/packages/api/session-controller/src/catalog.ts b/packages/api/session-controller/src/catalog.ts index df751d86ba..e66c6961cb 100644 --- a/packages/api/session-controller/src/catalog.ts +++ b/packages/api/session-controller/src/catalog.ts @@ -1,5 +1,7 @@ /** Shared projection of the live LLM registry into the browser model catalog. */ +import { RemoteError } from '@deepseek-ai/dsh-typert-protocol' +import type { LlmModelInfo } from '@deepseek-ai/dsh-llm' import type { Context } from '@deepseek-ai/cordis' import type { ModelCatalog, @@ -57,11 +59,12 @@ export async function buildModelCatalog( } } })) + const groups = catalog.flatMap(item => item.kind === 'group' ? [item.group] : []) + .filter(group => group.models.length > 0) return { default: { ...defaultSelection }, - routableProviders: catalog.flatMap(item => item.kind === 'group' && item.group.models.length > 0 ? [item.group.id] : []), - groups: catalog.flatMap(item => item.kind === 'group' ? [item.group] : []) - .filter(group => group.models.length > 0), + routableProviders: groups.map(group => group.id), + groups, failures: catalog.flatMap(item => item.kind === 'failure' ? [item.failure] : []), } } @@ -74,6 +77,12 @@ export async function buildModelCatalog( */ export async function modelAvailable(ctx: Context, selection: ModelSelection): Promise { if (!ctx.llm.listProviders().some(provider => provider.id === selection.provider)) return false - const models = await ctx.llm.listModels(selection.provider) + let models: readonly LlmModelInfo[] + try { models = await ctx.llm.listModels(selection.provider) } + catch (error) { + throw new RemoteError('session/model-unavailable', + error instanceof Error ? error.message : String(error), + { provider: selection.provider, model: selection.model }) + } return models.some(model => model.id === selection.model) } diff --git a/packages/api/session-controller/src/index.ts b/packages/api/session-controller/src/index.ts index 6f51c15da4..2cc81e3097 100644 --- a/packages/api/session-controller/src/index.ts +++ b/packages/api/session-controller/src/index.ts @@ -279,7 +279,8 @@ export class SessionController extends TypertRemoteService { async initializeDefaultModel(provider: string): Promise { const catalog = await buildModelCatalog(this.ctx) const model = catalog.groups.find(group => group.id === provider)?.models[0] - if (model === undefined) throw new Error(`provider "${provider}" has no available models`) + if (model === undefined) throw new RemoteError('session/provider-models-unavailable', + `provider "${provider}" has no available models`, { provider }) await this.ctx.agentDefaultModel.initializeSelection({ provider, model: model.id, ...model.reasoning?.defaultEffort === undefined ? {} : { reasoningEffort: ReasoningEffortId(model.reasoning.defaultEffort) }, }) diff --git a/packages/api/session-controller/src/types.ts b/packages/api/session-controller/src/types.ts index c5b92ec0cc..e1021e8c0e 100644 --- a/packages/api/session-controller/src/types.ts +++ b/packages/api/session-controller/src/types.ts @@ -187,6 +187,7 @@ export const SESSION_SEARCH_SNIPPET_MAX_CODE_POINTS = 240 declare module '@deepseek-ai/dsh-typert-protocol' { interface RemoteErrorDetailsMap { + 'session/provider-models-unavailable': { readonly provider: string } 'session/model-unavailable': { readonly provider: string; readonly model: string } 'session/conflict': { readonly sessionId: SessionId diff --git a/packages/api/session-controller/tests/session-models.host.spec.ts b/packages/api/session-controller/tests/session-models.host.spec.ts index 26d71d839e..0994ed1474 100644 --- a/packages/api/session-controller/tests/session-models.host.spec.ts +++ b/packages/api/session-controller/tests/session-models.host.spec.ts @@ -360,7 +360,9 @@ describe('Web session model selection', () => { await ctx.agentDefaultModel.saveSelection({ provider: 'removed', model: 'removed' }) await controller.initializeDefaultModel('deepseek-official') expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'removed', model: 'removed' }) - await expect(controller.initializeDefaultModel('empty')).rejects.toThrow('no available models') + await expect(controller.initializeDefaultModel('empty')).rejects.toMatchObject({ + code: 'session/provider-models-unavailable', details: { provider: 'empty' }, + }) await ctx.fiber.dispose() }) @@ -612,6 +614,48 @@ describe('Web session model selection', () => { await ctx.fiber.dispose() }) + it.each([1, 2])('reports catalog errors as model-unavailable at prompt check %s', async (check) => { + const { ctx, sessionId, agent } = await harness() + const followup = vi.fn() + Object.assign(agent, { followup }) + const remote = createSessionTestRemote(ctx, { + defaultModelSelection: () => ({ provider: 'deepseek-official', model: 'deepseek-chat' }), cwd: '/tmp', + }) + const list = vi.spyOn(ctx.llm, 'listModels') + if (check === 2) list.mockResolvedValueOnce([{ provider: 'deepseek-official', id: 'deepseek-chat', name: 'Chat' }]) + list.mockRejectedValueOnce(new Error('credential storage offline')) + try { + expect(await remote.prompt(promptRequest({ + sessionId, mode: 'queue', content: [{ type: 'text', text: 'hello' }], + }))).toMatchObject({ ok: false, error: { + code: 'session/model-unavailable', message: 'credential storage offline', + details: { provider: 'deepseek-official', model: 'deepseek-chat' }, + } }) + expect(list).toHaveBeenCalledTimes(check) + expect(followup).not.toHaveBeenCalled() + } finally { + list.mockRestore() + await ctx.fiber.dispose() + } + }) + + it('leaves uncatalogued adapters usable by core callers but unavailable to GUI selection', async () => { + const { ctx, sessionId } = await harness() + ctx.llm.registerAdapter(['uncatalogued'], new class extends LlmAdapter { + override async *stream(_options: GenerateOptions): AsyncIterable {} + }()) + try { + await expect(ctx.llm.resolveModelInfo('uncatalogued', 'custom-model')).resolves.toMatchObject({ id: 'custom-model' }) + const remote = createSessionTestRemote(ctx, { + defaultModelSelection: () => ({ provider: 'uncatalogued', model: 'custom-model' }), cwd: '/tmp', + }) + expect(await remote.selectModel({ sessionId, provider: 'uncatalogued', model: 'custom-model' })) + .toMatchObject({ ok: false, error: { code: 'session/model-unavailable' } }) + } finally { + await ctx.fiber.dispose() + } + }) + it('refuses a prompt no adapter can route, and reports it on the directory', async () => { const { ctx, sessionId } = await harness() const remote = createSessionTestRemote(ctx, { diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx index 42bc9724df..dc7e753c88 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx @@ -150,7 +150,7 @@ export function ConversationContent(props: ConversationContentProps) { // `blocked`, not `disabled`: the bar refuses input either way, but a // block keeps the model seat live because choosing a model is how the // user clears it. - ? { blocked: composerBlock, ...(hero ? { placeholder: t('placeholder.hero') } : {}) } + ? { blocked: composerBlock, placeholder: t(hero ? 'placeholder.hero' : 'placeholder.default') } : hero ? { placeholder: t('placeholder.hero') } : {}), }) diff --git a/packages/client/ui-conversation/tests/skeleton.client.spec.tsx b/packages/client/ui-conversation/tests/skeleton.client.spec.tsx index 17aadfb056..c7720a7db2 100644 --- a/packages/client/ui-conversation/tests/skeleton.client.spec.tsx +++ b/packages/client/ui-conversation/tests/skeleton.client.spec.tsx @@ -424,15 +424,14 @@ describe('ConversationRoot resident composer', () => { expect(dispatchCount()).toBe(before) }) - it('renders the composer inert with the blocker\u2019s own reason', () => { + it('keeps the normal placeholder while model availability blocks sending', () => { const b = mount(sessionSnapshotOf(), undefined, undefined, { composerBlock: { reason: 'select a model first' }, }) const box = b.view.getByRole('textbox') - // One disabled composer with the blocker's placeholder, never a second - // tree: the DOM survives the block being raised and cleared. + // Blocking keeps the mounted composer and its normal placeholder. expect(box.getAttribute('aria-disabled')).toBe('true') - expect(box.getAttribute('data-placeholder')).toBe('select a model first') + expect(box.getAttribute('data-placeholder')).toBe(zh['placeholder.default']) fireEvent.keyDown(box, { key: 'Enter' }) expect(b.sink).not.toHaveBeenCalled() diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index db4fe73951..496f41b644 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-model-selection/README.md -README.md: 3c73a42b34ad9075eaaab9e256767b7250ea0513 -README.zh.md: 87cccdeacde3183427a1ff08e1d1288e5cf170be +README.md: 25945f012b2c1f6cfc0f36203fac632c01a86101 +README.zh.md: 6c59586a08b7833f40491f61b5f57cd2b76e5735 diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index 3c73a42b34..25945f012b 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -33,11 +33,11 @@ Mount this plugin alongside `ui-conversation` and the commands package; the comp ### Model and effort -Models stay grouped by provider. The composer menu shows model and effort names only, with DeepSeek Account first; other providers retain their catalog order. The `/model` popup shows provider names and catalog descriptions; it localizes the two built-in DeepSeek descriptions and leaves external provider descriptions verbatim. The popup applies the selected model's default effort; the composer can then choose any advertised effort. An adapter without reasoning metadata leaves the Effort row absent; there is no arbitrary effort input. +Models stay grouped by provider. The composer menu shows model and effort names only, with DeepSeek Account first and DeepSeek second; third-party providers retain their catalog order. The `/model` popup shows provider names and catalog descriptions; it localizes the two built-in DeepSeek descriptions and leaves external provider descriptions verbatim. The popup applies the selected model's default effort; the composer can then choose any advertised effort. An adapter without reasoning metadata leaves the Effort row absent; there is no arbitrary effort input. ### Unroutable sessions -The composer blocks sending while the exact provider/model pair is absent from the available catalog or availability is loading or unknown. It keeps the normal input placeholder and an enabled model picker. Sign-out, credential removal, and provider or model removal refresh availability without replacing the saved choice with another model. Existing session logs remain unchanged. +The composer blocks sending while the exact provider/model pair is absent from the available catalog or availability is loading or unknown. It keeps the normal input placeholder and an enabled model picker. Refreshes and refresh failures retain the last displayed selection and groups while sending remains blocked; retry revalidates availability. A Host reset clears that display. The account provider name follows the active locale in both selectors. Sign-out, credential removal, and provider or model removal refresh availability without replacing the saved choice with another model. Existing session logs remain unchanged. Only the current Client binding's directory can publish its composer block. Cleanup from an older binding preserves a replacement directory's block; without a replacement directory, cleanup removes the obsolete block. diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index 87cccdeacd..6c59586a08 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -33,11 +33,11 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 ### 模型与推理强度 -模型按提供方分组。composer 菜单只显示模型与推理强度名称,DeepSeek 账号置顶,其他提供方保持目录原有顺序。`/model` 弹窗显示提供方名称与目录说明;其中两个内置 DeepSeek 模型的说明使用当前语言,外部提供方说明保持原文。弹窗应用所选模型的默认推理强度;composer 随后可以选择任一已公布的推理强度。适配器没有推理元数据时不显示 Effort 行;不存在任意推理强度输入。 +模型按提供方分组。composer 菜单只显示模型与推理强度名称,DeepSeek 账号排第一,DeepSeek 排第二,第三方提供方保持目录原有顺序。`/model` 弹窗显示提供方名称与目录说明;其中两个内置 DeepSeek 模型的说明使用当前语言,外部提供方说明保持原文。弹窗应用所选模型的默认推理强度;composer 随后可以选择任一已公布的推理强度。适配器没有推理元数据时不显示 Effort 行;不存在任意推理强度输入。 ### 不可路由的会话 -确切提供方/模型对不在可用目录中,或可用性仍在加载或未知时,composer 禁止发送。输入框保留常规占位文案,模型选择器仍可操作。退出账号、移除凭据、提供方或模型都会刷新可用性,不会用其他模型替换已保存的选择。既有会话日志保持不变。 +确切提供方/模型对不在可用目录中,或可用性仍在加载或未知时,composer 禁止发送。输入框保留常规占位文案,模型选择器仍可操作。刷新及刷新失败期间保留上次显示的选择和分组,同时继续禁发;重试会重新确认可用性。Host 重置时清空这些显示。两个选择器中的账号提供方名称均随当前语言显示。退出账号、移除凭据、提供方或模型都会刷新可用性,不会用其他模型替换已保存的选择。既有会话日志保持不变。 只有当前 Client binding 的目录可以发布对应的 composer 阻塞块。旧 binding 的清理保留后继目录的阻塞块;若尚无后继目录,则移除已失效的阻塞块。 diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.tsx b/packages/client/ui-model-selection/src/client/ModelSelect.tsx index 2223cd3c21..d209e23cc7 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx +++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx @@ -76,7 +76,8 @@ export function ModelSelect( const id = useId() const groups = useMemo(() => state.groups.toSorted((left, right) => - Number(right.id === 'deepseek-account') - Number(left.id === 'deepseek-account')), [state.groups]) + (left.id === 'deepseek-account' ? 0 : left.id === 'deepseek-official' ? 1 : 2) + - (right.id === 'deepseek-account' ? 0 : right.id === 'deepseek-official' ? 1 : 2)), [state.groups]) const choices = useMemo(() => groups.flatMap(group => group.models.map(model => ({ group, @@ -407,7 +408,7 @@ export function ModelSelect( )} {state.failures.map(failure => (
- {t('warning.groupLoad', { name: failure.name, message: failure.message })} + {t('warning.groupLoad', { name: failure.id === 'deepseek-account' ? t('provider.account') : failure.name, message: failure.message })}
))} @@ -416,7 +417,7 @@ export function ModelSelect( const headingId = `${id}-${group.id}` return (
-
{group.name}
+
{group.id === 'deepseek-account' ? t('provider.account') : group.name}
{group.models.map((model) => { const selected = state.current?.provider === group.id && state.current.model === model.id return ( diff --git a/packages/client/ui-model-selection/src/client/directory.ts b/packages/client/ui-model-selection/src/client/directory.ts index 162ad5db7d..355dfc7fda 100644 --- a/packages/client/ui-model-selection/src/client/directory.ts +++ b/packages/client/ui-model-selection/src/client/directory.ts @@ -15,7 +15,7 @@ import type { ModelCatalogDirectory } from './catalog.ts' /** Directory snapshot both entries render from. */ export interface ModelDirectoryState { - /** Available durable selection, or the available default for an unselected Session. */ + /** Last catalog-confirmed selection, retained for display during same-Host refreshes. */ current: ModelSelection | null /** Saved effort caption retained when the selected model is unavailable. */ retainedEffort?: string @@ -145,11 +145,11 @@ export class ModelDirectory { : reasoning?.efforts.find(level => level.id === effort)?.name ?? effort if (catalog.status !== 'ready' || catalog.value === null || projected === undefined) { this.store.set({ - current: null, + current: catalog.value === null ? null : this.store.getSnapshot().current, ...retainedEffort === undefined ? {} : { retainedEffort }, routable: null, - groups: [], - failures: [], + groups: catalog.value?.groups ?? [], + failures: catalog.value?.failures ?? [], status: catalog.status === 'error' ? 'error' : 'loading', error: catalog.error, }) diff --git a/packages/client/ui-model-selection/src/client/index.ts b/packages/client/ui-model-selection/src/client/index.ts index 201ac8c732..12f81cec2f 100644 --- a/packages/client/ui-model-selection/src/client/index.ts +++ b/packages/client/ui-model-selection/src/client/index.ts @@ -67,12 +67,13 @@ function descriptionOf( function optionsOf(directory: ModelDirectoryState, t: TranslateNS<'model'>): SelectOption[] { const rows: SelectOption[] = [] for (const group of directory.groups) { + const name = group.id === 'deepseek-account' ? t('provider.account') : group.name for (const model of group.models) { const description = descriptionOf(group.id, model, t) rows.push({ id: rowId(group.id, model.id), label: model.name, - detail: description !== undefined ? `${group.name} · ${description}` : group.name, + detail: description !== undefined ? `${name} · ${description}` : name, ...(directory.current !== null && directory.current.provider === group.id && directory.current.model === model.id @@ -83,7 +84,7 @@ function optionsOf(directory: ModelDirectoryState, t: TranslateNS<'model'>): Sel for (const failure of directory.failures) { rows.push({ id: `failure/${failure.id}`, - label: failure.name, + label: failure.id === 'deepseek-account' ? t('provider.account') : failure.name, detail: t('option.loadError', { message: failure.message }), }) } diff --git a/packages/client/ui-model-selection/src/client/locales.ts b/packages/client/ui-model-selection/src/client/locales.ts index 2ab727b353..9d60b95926 100644 --- a/packages/client/ui-model-selection/src/client/locales.ts +++ b/packages/client/ui-model-selection/src/client/locales.ts @@ -10,6 +10,7 @@ /** Simplified Chinese dictionary (the key-set source of truth). */ export const zh = { + 'provider.account': 'DeepSeek 账号', 'command.label': '模型', 'command.description': '选择本会话使用的模型', 'option.loadError': '目录加载失败:{message}', @@ -39,6 +40,7 @@ export type ModelKey = keyof typeof zh /** English dictionary, checked complete against the zh key set. */ export const en = { + 'provider.account': 'DeepSeek Account', 'command.label': 'Model', 'command.description': 'Select the model for this conversation', 'option.loadError': 'Catalog failed to load: {message}', diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index af7d3dee20..ffd02ee21b 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -73,16 +73,19 @@ async function bench(locale: 'zh' | 'en' = 'zh') { const projections = new Map>() // Whether the Host advertises available models for the current route. let routable = true + let catalogFailure = false + let groups = GROUPS let selectionFailure: RemoteError<'session/writer-held'> | undefined const sessionRemote = { modelCatalog: () => { calls.models += 1 + if (catalogFailure) return Promise.reject(new Error('catalog offline')) return Promise.resolve({ ok: true as const, value: { default: defaultSelection, routableProviders: routable ? ['deepseek-official'] : [], - groups: routable ? GROUPS : [], + groups: routable ? groups : [], failures: [], }, }) @@ -185,6 +188,8 @@ async function bench(locale: 'zh' | 'en' = 'zh') { setHostCurrent: (selection: ModelSelection) => { defaultSelection = selection }, setProjected: (id: SessionId, value: ModelSelectionProjection) => { projections.get(id)?.set(value) }, address: (id: SessionId) => { addressed.add(id) }, + setGroups: (next: typeof GROUPS) => { groups = next }, + setCatalogFailure: (next: boolean) => { catalogFailure = next }, setRoutable: (next: boolean) => { routable = next }, blockOf: (key: string) => blocks.get(sid(key)), } @@ -280,6 +285,19 @@ describe('ui-model-selection dual entry', () => { }) }) + it.each(['en', 'zh'] as const)('localizes account provider details in the %s model popup', async (locale) => { + const b = await bench(locale) + try { + b.setGroups([{ ...GROUPS[0]!, id: 'deepseek-account', name: 'DeepSeek Account' }]) + b.remote.emit('llm/adapters-updated', []) + b.mint('s1') + const options = await b.popup().options(projection('s1'), new AbortController().signal) + expect(options[0]?.detail).toContain(locale === 'zh' ? 'DeepSeek 账号' : 'DeepSeek Account') + } finally { + await b.ctx.fiber.dispose() + } + }) + it('both entries share one directory instance per session, isolated across sessions', async () => { const b = await bench() b.mint('a') @@ -330,7 +348,9 @@ describe('ui-model-selection dual entry', () => { next: { provider: 'deepseek-official', model: 'deepseek-v4-pro' }, }) expect(face.directory.getSnapshot()).toMatchObject({ - current: null, + current: { provider: 'deepseek-official', model: 'deepseek-v4-flash' }, + groups: GROUPS, + routable: null, status: 'loading', }) @@ -342,6 +362,30 @@ describe('ui-model-selection dual entry', () => { }) }) + it('retains the last catalog on refresh failure, blocks sending, and recovers on retry', async () => { + const b = await bench() + try { + b.mint('s1') + const face = b.seat().inject!(sid('s1')) + await b.ctx.modelDirectories.directoryFor(sid('s1')).load() + b.setCatalogFailure(true) + b.remote.emit('credentials/record-updated', ['DEEPSEEK_API_KEY']) + await vi.waitFor(() => { + expect(face.directory.getSnapshot()).toMatchObject({ + current: { provider: 'deepseek-official', model: 'deepseek-v4-flash' }, + groups: GROUPS, routable: null, status: 'error', error: 'catalog offline', + }) + }) + expect(b.blockOf('s1')).toBeDefined() + b.setCatalogFailure(false) + await b.ctx.modelDirectories.directoryFor(sid('s1')).load() + expect(face.directory.getSnapshot().routable).toBe(true) + expect(b.blockOf('s1')).toBeUndefined() + } finally { + await b.ctx.fiber.dispose() + } + }) + it('scope disposal drops the directory; a reborn scope gets a fresh one', async () => { const b = await bench() const first = b.mint('s1') diff --git a/packages/client/ui-model-selection/tests/expected/account-first.txt b/packages/client/ui-model-selection/tests/expected/account-first.txt index 304c901c9f..6a8a6e2c70 100644 --- a/packages/client/ui-model-selection/tests/expected/account-first.txt +++ b/packages/client/ui-model-selection/tests/expected/account-first.txt @@ -1,8 +1,8 @@ deepseek-account-1 deepseek-account-2 -custom-1 -custom-2 deepseek-official-1 deepseek-official-2 +custom-1 +custom-2 another-1 another-2 diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx index 2d8df4fad0..feef74b1bd 100644 --- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx +++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx @@ -8,7 +8,7 @@ import { createSnapshotStore } from '@deepseek-ai/dsh-client-store' import type { ComponentProps } from 'react' import type { ModelDirectoryState } from '../src/client/directory.ts' import { ModelSelect } from '../src/client/ModelSelect.tsx' -import { zh } from '../src/client/locales.ts' +import { en, zh } from '../src/client/locales.ts' import { zh as commonZh } from '@deepseek-ai/dsh-client-locale/src/locales/zh.ts' // The seat's key domain is model ∪ common; the stub mirrors the real lookup @@ -463,7 +463,7 @@ it('shows the unselected model control with the inherited effort', async () => { }) -it('places account models first while preserving other provider and model order', async () => { +it('places account and official models before third-party models', async () => { const groups = ['custom', 'deepseek-official', 'deepseek-account', 'another'].map(id => ({ id, name: id, models: [1, 2].map(index => ({ id: `${id}-${index}`, name: `${id}-${index}` })), })) @@ -472,9 +472,22 @@ it('places account models first while preserving other provider and model order' fireEvent.click(screen.getByRole('button', { name: '请选择模型' })) const names = screen.getAllByRole('menuitemradio').map(row => row.textContent) expect(names).toEqual([ - 'deepseek-account-1', 'deepseek-account-2', 'custom-1', 'custom-2', - 'deepseek-official-1', 'deepseek-official-2', 'another-1', 'another-2', + 'deepseek-account-1', 'deepseek-account-2', 'deepseek-official-1', 'deepseek-official-2', + 'custom-1', 'custom-2', 'another-1', 'another-2', ]) expect(groups.map(group => group.id)).toEqual(['custom', 'deepseek-official', 'deepseek-account', 'another']) await expect(`${names.join('\n')}\n`).toMatchFileSnapshot('./expected/account-first.txt') }) + +it.each([en, zh])('localizes the account group while preserving external names', (copy) => { + const groups = ['deepseek-account', 'custom'].map(id => ({ + id, name: id === 'deepseek-account' ? 'DeepSeek Account' : 'My Gateway', + models: [{ id: 'model', name: 'Model' }], + })) + render( key in copy ? copy[key as keyof typeof copy] : key} />) + fireEvent.click(screen.getByRole('button', { name: copy['trigger.selectAria'] })) + expect(screen.getByRole('group', { name: copy['provider.account'] })).toBeTruthy() + expect(screen.getByRole('group', { name: 'My Gateway' })).toBeTruthy() +}) diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index a9fcd71d5a..a3c8fbdf6f 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: d54687d083897842518a0c95dfc84d39e985f3a1 -README.zh.md: c4dbcf234fb72e826ccd742b70740744e98e8fcb +README.md: 615d2ef3466fc748d7b8c65c65c356afdd4f3cf3 +README.zh.md: 39d8a94b2e8d98896b13b8c76f7e5ff6390b5d0d diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index d54687d083..615d2ef346 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -34,7 +34,7 @@ The sidebar account menu uses the shared Menu surface, backdrop blur, spacing, a The account card’s More account information link opens `https://platform.deepseek.com` in the system browser on Desktop or a new tab on Web. -Sign out first queries running account-token tasks and opens a confirmation dialog. The warning describes interruption when such tasks exist; otherwise it explains that data is retained and the account can be signed in again. Cancel, close, and Escape dismiss without signing out. Failed queries keep the menu available; failed sign-out keeps the dialog available for retry. +Sign out first queries running account-token tasks and opens a confirmation dialog. The warning describes interruption when such tasks exist; otherwise it explains that data is retained and the account can be signed in again. Cancel, close, and Escape dismiss without signing out. Failed impact queries still open confirmation with an explicit unknown-task warning; failed sign-out keeps the dialog available for retry. ## Understand the implementation @@ -74,3 +74,5 @@ No model request prefix changes. The [desktop login decision](../../../.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.md) records cancellation and storage ownership. Usage and top-up show a centered 24px loading indicator without visible loading text until the native document loads; the return action remains available. The loading SVG is embedded locally from Figma node 2957:72553. + +Default-model initialization runs after publishing and accepting the sign-in frame, without delaying subsequent account frames. Failures are recorded in diagnostics and do not mark the signed-in account as failed. diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index c4dbcf234f..39d8a94b2e 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -34,7 +34,7 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl 账号卡片的“更多账号信息”链接在 Desktop 中通过系统浏览器打开 `https://platform.deepseek.com`,在 Web 中打开新标签页。 -退出登录先查询正在使用账号 token 的任务,再打开确认弹窗。有此类任务时提示执行将被打断,否则提示数据保留且可重新登录。取消、关闭和 Escape 均不退登。查询失败保留菜单;退登失败保留弹窗以便重试。 +退出登录先查询正在使用账号 token 的任务,再打开确认弹窗。有此类任务时提示执行将被打断,否则提示数据保留且可重新登录。取消、关闭和 Escape 均不退登。影响查询失败仍打开确认弹窗,并明确提示无法确认任务状态;退登失败保留弹窗以便重试。 ## 理解实现 @@ -74,3 +74,5 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl [桌面登录决策](../../../.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.zh.md)记录取消和存储的职责。 用量和充值在原生页面加载完成前显示居中的 24px 加载图标,不显示加载文字;返回操作始终可用。加载 SVG 从 Figma 节点 2957:72553 内嵌到本地样式。 + +默认模型初始化在登录帧发布并确认接收后运行,不延迟后续账号帧。初始化失败会记录诊断日志,不会将已登录账号标记为失败。 diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.tsx b/packages/client/ui-settings-account/src/client/AccountMenu.tsx index 6122728558..7570a13190 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.tsx +++ b/packages/client/ui-settings-account/src/client/AccountMenu.tsx @@ -27,12 +27,12 @@ export function AccountMenu({ const [open, setOpen] = useState(false) const [busy, setBusy] = useState(false) const [failed, setFailed] = useState(false) - const [signOutImpact, setSignOutImpact] = useState() + const [signOutImpact, setSignOutImpact] = useState() const requestSignOut = async () => { setBusy(true) setFailed(false) try { setSignOutImpact(await hasRunningAccountTasks()); setOpen(false) } - catch { setFailed(true) } + catch (_error) { setSignOutImpact('unknown'); setOpen(false) } finally { setBusy(false) } } return
diff --git a/packages/client/ui-settings-account/src/client/SignOutDialog.tsx b/packages/client/ui-settings-account/src/client/SignOutDialog.tsx index f9b59e8ea8..d364f41ede 100644 --- a/packages/client/ui-settings-account/src/client/SignOutDialog.tsx +++ b/packages/client/ui-settings-account/src/client/SignOutDialog.tsx @@ -6,7 +6,7 @@ import css from './SignInDialog.module.css' /** @param props - task impact at opening, localized copy, and account actions. @returns sign-out confirmation. */ export function SignOutDialog({ running, signOut, close, t }: { - running: boolean + running: boolean | 'unknown' signOut: () => Promise close: () => void t: (key: AccountKey) => string @@ -29,7 +29,7 @@ export function SignOutDialog({ running, signOut, close, t }: {
-

{t(running ? 'signOutRunningDescription' : 'signOutDescription')}

+

{t(running === 'unknown' ? 'signOutUnknownDescription' : running ? 'signOutRunningDescription' : 'signOutDescription')}

{failed &&

{t('failed')}

}
diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index da26bbd8d8..c718292cbf 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -72,19 +72,19 @@ export function apply(ctx: Context): void { for await (const frame of stream) { revision++ refreshing = undefined - let initializationFailed = false - if (frame.value.status === 'credential-stored' && frame.value.attempt?.phase === 'succeeded' - && snapshot.view?.attempt?.phase !== 'succeeded') { - try { - const initialized = await ctx.remote.session.initializeDefaultModel('deepseek-account') - initializationFailed = !initialized.ok - } catch (_error) { - initializationFailed = true - } - } - publish({ ...snapshot, view: frame.value, details: undefined, failed: initializationFailed }) + const initialize = frame.value.status === 'credential-stored' && frame.value.attempt?.phase === 'succeeded' + && snapshot.view?.attempt?.phase !== 'succeeded' + publish({ ...snapshot, view: frame.value, details: undefined, failed: false }) browser.update(frame.value) frame.accept() + if (initialize) void (async () => { + try { + const initialized = await ctx.remote.session.initializeDefaultModel('deepseek-account') + if (!initialized.ok) console.info('[deepseek-account] default model initialization failed', { reason: 'refused' }) + } catch (_error) { + console.info('[deepseek-account] default model initialization failed', { reason: 'disconnected' }) + } + })() void refresh() } })().catch(() => { if (!stream.signal.aborted) publish({ ...snapshot, failed: true }) }) diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index b93c8e61c0..e3a07f3f8f 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -10,6 +10,7 @@ export const en = { settings: 'Settings', contactUs: 'Contact us', menu: 'Account menu', nav: 'Account', signedIn: 'Signed in to DeepSeek', signedOut: 'Not signed in', signIn: 'Sign in', signOut: 'Sign out', + signOutUnknownDescription: 'Could not check running tasks. Signing out may interrupt tasks using this account. Sign out now?', signOutDescription: 'Signing out will not delete any data. You can sign in to this account again.', signOutRunningDescription: 'Tasks are currently running. Signing out will interrupt them. Sign out now?', cancel: 'Cancel', open: 'Open browser', initializing: 'Starting sign in…', waiting: 'Continue in your browser', @@ -36,6 +37,7 @@ export const zh: Record = { settings: '设置', contactUs: '联系我们', menu: '账号菜单', nav: '账号与余额', signedIn: '已登录 DeepSeek', signedOut: '尚未登录', signIn: '登录', signOut: '退出登录', + signOutUnknownDescription: '暂时无法确认任务状态。退出登录可能会中断使用此账号的任务,是否继续?', signOutDescription: '退出登录不会丢失任何数据,你仍可以登录此账号。', signOutRunningDescription: '当前有进程正在执行中,点击“退出登录”,将会打断进程,是否即刻退出登录?', cancel: '取消', open: '打开浏览器', initializing: '正在发起登录…', waiting: '请在浏览器中继续', diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index 3757579a79..dbf81ece0e 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -51,14 +51,14 @@ it('starts sign-in and disables cancellation during persistence', async () => { expect(screen.queryByRole('button', { name: en.signIn })).toBeNull() }) -it.each([en, zh].flatMap(copy => [false, true].map(running => ({ copy, running }))))('confirms sidebar sign-out with task impact $running', async ({ copy, running }) => { +it.each([en, zh].flatMap(copy => ([false, true, 'unknown'] as const).map(running => ({ copy, running }))))('confirms sidebar sign-out with task impact $running', async ({ copy, running }) => { const signOut = vi.fn(() => Promise.resolve()) const openSettings = vi.fn() const operations = mount({ status: 'credential-stored', attempt: null }, copy) cleanup() const { AccountMenu } = await import('../src/client/AccountMenu.tsx') render( running} + hasRunningAccountTasks={async () => { if (running === 'unknown') throw new Error('offline'); return running }} useAccount={selector => selector(operations.hooks.account.getSnapshot())} wide openOnboarding={() => {}} openSettings={openSettings} t={key => key in copy ? copy[key as AccountKey] : key} />) fireEvent.click(screen.getByRole('button', { name: copy.menu })) @@ -73,7 +73,7 @@ it.each([en, zh].flatMap(copy => [false, true].map(running => ({ copy, running } fireEvent.click(screen.getByRole('button', { name: copy.menu })) await act(async () => { fireEvent.click(screen.getByRole('menuitem', { name: copy.signOut })) }) expect(signOut).not.toHaveBeenCalled() - expect(screen.getByText(running ? copy.signOutRunningDescription : copy.signOutDescription)).toBeTruthy() + expect(screen.getByText(running === 'unknown' ? copy.signOutUnknownDescription : running ? copy.signOutRunningDescription : copy.signOutDescription)).toBeTruthy() await act(async () => { fireEvent.click(screen.getByRole('button', { name: copy.signOut })) }) expect(signOut).toHaveBeenCalledOnce() expect(screen.queryByRole('menu')).toBeNull() diff --git a/packages/client/ui-settings-account/tests/apply.client.spec.ts b/packages/client/ui-settings-account/tests/apply.client.spec.ts index 7f01fc5f6e..6a33cda9d4 100644 --- a/packages/client/ui-settings-account/tests/apply.client.spec.ts +++ b/packages/client/ui-settings-account/tests/apply.client.spec.ts @@ -4,13 +4,17 @@ import { expect, it, vi } from 'vitest' import type { AccountView, SignInAttemptId } from '@deepseek-ai/dsh-deepseek-account/types' import { apply, type AccountSectionInjected } from '../src/client/index.ts' -it.each(['accepted', 'refused', 'disconnected'] as const)('initializes account models and keeps reading account state: %s', async (outcome) => { +it.each(['accepted', 'refused', 'disconnected', 'pending'] as const)('initializes account models and keeps reading account state: %s', async (outcome) => { + const log = vi.spyOn(console, 'info').mockImplementation(() => {}) + const observed: { status: string | undefined; failed: boolean | undefined }[] = [] const abort = new AbortController() const done = Promise.withResolvers() const release = Promise.withResolvers() + const initialization = Promise.withResolvers() const initializeDefaultModel = vi.fn(async () => { + if (outcome === 'pending') await initialization.promise if (outcome === 'disconnected') throw new Error('connection lost') - return { ok: outcome === 'accepted', value: undefined } + return { ok: outcome === 'accepted' || outcome === 'pending', value: undefined } }) const links = { usageUrl: 'https://example.test/usage', topUpUrl: 'https://example.test/top_up' } const signedIn: AccountView = { @@ -38,7 +42,11 @@ it.each(['accepted', 'refused', 'disconnected'] as const)('initializes account m $stream: () => ({ signal: abort.signal, dispose: () => { abort.abort(); release.resolve(undefined) }, async *[Symbol.asyncIterator]() { - for (const value of frames) yield { value, accept: () => { if (value.status === 'signed-out') done.resolve(undefined) } } + for (const value of frames) yield { value, accept: () => { + const snapshot = operations?.hooks.account.getSnapshot() + observed.push({ status: snapshot?.view?.status, failed: snapshot?.failed }) + if (value.status === 'signed-out') done.resolve(undefined) + } } await release.promise }, }), @@ -48,8 +56,20 @@ it.each(['accepted', 'refused', 'disconnected'] as const)('initializes account m apply(ctx as never) await done.promise expect(initializeDefaultModel).toHaveBeenCalledExactlyOnceWith('deepseek-account') + expect(observed).toEqual([ + { status: 'credential-stored', failed: false }, + { status: 'credential-stored', failed: false }, + { status: 'signed-out', failed: false }, + ]) + if (outcome === 'accepted' || outcome === 'pending') expect(log).not.toHaveBeenCalled() + else expect(log).toHaveBeenCalledWith('[deepseek-account] default model initialization failed', { + reason: outcome === 'refused' ? 'refused' : 'disconnected', + }) expect(operations?.hooks.account.getSnapshot()).toMatchObject({ view: { status: 'signed-out' }, failed: false }) } finally { + initialization.resolve(undefined) + await Promise.resolve() for (const dispose of disposers.reverse()) dispose() + log.mockRestore() } }) diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-unknown-en.txt b/packages/client/ui-settings-account/tests/expected/sign-out-unknown-en.txt new file mode 100644 index 0000000000..d8b1fd328b --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-unknown-en.txt @@ -0,0 +1 @@ +Sign outCould not check running tasks. Signing out may interrupt tasks using this account. Sign out now?CancelSign out diff --git a/packages/client/ui-settings-account/tests/expected/sign-out-unknown-zh.txt b/packages/client/ui-settings-account/tests/expected/sign-out-unknown-zh.txt new file mode 100644 index 0000000000..3578b1f9bf --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/sign-out-unknown-zh.txt @@ -0,0 +1 @@ +退出登录暂时无法确认任务状态。退出登录可能会中断使用此账号的任务,是否继续?取消退出登录 diff --git a/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx b/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx index 9ee95e897f..d2fbb29028 100644 --- a/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/sign-out-dialog.client.spec.tsx @@ -6,16 +6,16 @@ import { SignOutDialog } from '../src/client/SignOutDialog.tsx' import { en, zh } from '../src/client/locales.ts' afterEach(cleanup) -function mount(running: boolean, copy: typeof en | typeof zh = en, signOut = vi.fn(async () => {})) { +function mount(running: boolean | 'unknown', copy: typeof en | typeof zh = en, signOut = vi.fn(async () => {})) { const close = vi.fn() render( copy[key]} />) return { signOut, close } } -it.each([en, zh].flatMap(copy => [false, true].map(running => ({ copy, running }))))( +it.each([en, zh].flatMap(copy => ([false, true, 'unknown'] as const).map(running => ({ copy, running }))))( 'confirms sign-out with localized task impact: $running', async ({ copy, running }) => { const props = mount(running, copy) await expect(`${screen.getByRole('dialog').textContent}\n`) - .toMatchFileSnapshot(`./expected/sign-out-${running ? 'running' : 'idle'}-${copy === en ? 'en' : 'zh'}.txt`) + .toMatchFileSnapshot(`./expected/sign-out-${running === 'unknown' ? 'unknown' : running ? 'running' : 'idle'}-${copy === en ? 'en' : 'zh'}.txt`) expect(props.signOut).not.toHaveBeenCalled() await act(async () => { fireEvent.click(screen.getByRole('button', { name: copy.signOut })) }) expect(props.signOut).toHaveBeenCalledOnce() diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index c84f99abf1..3147eeab54 100644 --- a/packages/client/ui-settings-models/README.i18n.yaml +++ b/packages/client/ui-settings-models/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-models/README.md -README.md: ccce6981a618fd2dfa451f1600ae19e443d77973 -README.zh.md: 0d2f64a1fe4583493b192f33f128f86157a65f8f +README.md: 289a0ec0b3603590dddcab848a79235ca4579bcf +README.zh.md: 10c61a464d48933a692a265b5d5b0812bf79cdbb diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index ccce6981a6..289a0ec0b3 100644 --- a/packages/client/ui-settings-models/README.md +++ b/packages/client/ui-settings-models/README.md @@ -25,6 +25,10 @@ English | [中文](README.zh.md) ## Use this package +Saving credentials or a custom provider completes independently of default-model initialization. Initialization failures are logged; they do not report a successful save as failed or prevent closing the editor. The user can select an available model from the composer. + +DeepSeek Account appears first and DeepSeek second in the provider list; third-party providers retain their directory order. + Open the Models page from the Settings navigation to see every configured provider as a row. A whole-section provider whose key is not configured anywhere renders as its open setup card instead, but only in the first-run posture and only until the user closes that card. Each card kind owns its own open state, so closing one never discards a draft in another. A provider with a stored catalog error remains visible with its diagnostic and edit/delete actions. Add actions are offered only for registered settings namespaces, so an unavailable namespace cannot leave a button that opens no editor. A rejected save leaves the editor open and displays the Host diagnostic. diff --git a/packages/client/ui-settings-models/README.zh.md b/packages/client/ui-settings-models/README.zh.md index 0d2f64a1fe..10c61a464d 100644 --- a/packages/client/ui-settings-models/README.zh.md +++ b/packages/client/ui-settings-models/README.zh.md @@ -25,6 +25,10 @@ kind: "package-reference" ## 使用本包 +凭据或自定义提供方保存成功后,不等待默认模型初始化即可完成操作。初始化失败记录日志,不会将已成功的保存报告为失败,也不会阻止编辑器关闭。用户可在 composer 中选择可用模型。 + +提供方列表中 DeepSeek 账号排第一,DeepSeek 排第二;第三方提供方保留目录中的相对顺序。 + 从设置导航打开 Models 页面,即可看到每个已配置的提供方都有一行。其配置键未在任何位置配置的整分节提供方会渲染为其展开的设置卡片而非一行,但仅限首次运行姿态,且仅持续到用户关闭该卡片为止。每一类卡片各自持有自己的展开状态,因此关掉其中一张绝不会丢弃另一张里的草稿。 存在已存储目录错误的提供方仍显示诊断以及编辑、删除入口。添加操作只面向已注册的 settings 命名空间,因此不可用的命名空间不会留下无法打开编辑器的按钮。保存被拒绝时,编辑器保持打开并展示 Host 诊断。 diff --git a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx index c84e72f743..38def6a132 100644 --- a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx +++ b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx @@ -178,7 +178,8 @@ export function CustomProviderCard(props: CustomProviderCardProps): ReactNode { // and the retry above now goes straight back to this write. if (stored !== undefined) return stored } - return operations.initializeModel(route.trim()) + void operations.initializeModel(route.trim()) + return undefined } const create = async (): Promise => { diff --git a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx index 93e1fa7d1e..a91cc0d744 100644 --- a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx +++ b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx @@ -288,8 +288,7 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { if (keyValue.length > 0) { const stored = await operations.storeCredential(keyRef, keyValue) if (stored !== undefined) return stored - const initialized = await operations.initializeModel(props.provider) - if (initialized !== undefined) return initialized + void operations.initializeModel(props.provider) } setKeyDraft('') return undefined diff --git a/packages/client/ui-settings-models/src/client/operations.ts b/packages/client/ui-settings-models/src/client/operations.ts index 75d87ac821..071ab72454 100644 --- a/packages/client/ui-settings-models/src/client/operations.ts +++ b/packages/client/ui-settings-models/src/client/operations.ts @@ -32,8 +32,11 @@ export type ModelDiscoveryOutcome = /** The Host operations the Models page and its cards invoke. */ export interface ModelsOperations { - /** @param provider - newly configured provider. @returns refusal text, or undefined after initialization. */ - initializeModel(provider: string): Promise + /** + * @param provider - newly configured provider. + * @returns after optional initialization; failures are logged without changing the save outcome. + */ + initializeModel(provider: string): Promise /** * Read one credential reference's state. * @param ref - credential reference name. @@ -84,8 +87,12 @@ export interface ModelsOperations { export function createModelsOperations(ctx: ClientContext): ModelsOperations { return { initializeModel: async (provider) => { - const response = await ctx.remote.session.initializeDefaultModel(provider) - return response.ok ? undefined : response.error.message + try { + const response = await ctx.remote.session.initializeDefaultModel(provider) + if (!response.ok) console.info('[models] default model initialization failed', { provider, reason: 'refused' }) + } catch (_error) { + console.info('[models] default model initialization failed', { provider, reason: 'disconnected' }) + } }, describeCredential: async (ref) => { const response = await ctx.remote.credentials.describe([ref]) diff --git a/packages/client/ui-settings-models/src/client/store.ts b/packages/client/ui-settings-models/src/client/store.ts index f3e948b79f..f693b5960d 100644 --- a/packages/client/ui-settings-models/src/client/store.ts +++ b/packages/client/ui-settings-models/src/client/store.ts @@ -37,7 +37,7 @@ export interface ProviderDirectoryEntry { * Join declared configurable providers with the currently registered routes. * @param registered - live provider routes in registration order. * @param directory - declared configurable providers in declaration order. - * @returns declared rows followed by live routes with no declaration. + * @returns account and official routes first, then other routes in their original order. */ export function joinProviderDirectory( registered: readonly LlmProviderInfo[], @@ -64,7 +64,9 @@ export function joinProviderDirectory( active: true, }) } - return rows + return rows.toSorted((left, right) => + (left.provider === 'deepseek-account' ? 0 : left.provider === 'deepseek-official' ? 1 : 2) + - (right.provider === 'deepseek-account' ? 0 : right.provider === 'deepseek-official' ? 1 : 2)) } /** One provider row the page renders. */ diff --git a/packages/client/ui-settings-models/tests/components.client.spec.tsx b/packages/client/ui-settings-models/tests/components.client.spec.tsx index 88e43e599f..c1752b9204 100644 --- a/packages/client/ui-settings-models/tests/components.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/components.client.spec.tsx @@ -1111,6 +1111,29 @@ describe('ModelsSection', () => { expect(baseURL.value).toBe('') }) + it.each(['refused', 'disconnected', 'pending'] as const)('finishes credential saving when default initialization is %s', async (outcome) => { + const log = vi.spyOn(console, 'info').mockImplementation(() => {}) + const pending = Promise.withResolvers() + const { ctx, set } = await mountDeepSeekCard() + const initialize = vi.spyOn(ctx.remote.session, 'initializeDefaultModel') + if (outcome === 'pending') initialize.mockReturnValue(pending.promise) + else if (outcome === 'disconnected') initialize.mockRejectedValue(new Error('offline')) + else initialize.mockResolvedValue({ ok: false, + error: new RemoteError('session/provider-models-unavailable', 'empty catalog', { provider: 'deepseek-official' }) }) + try { + fireEvent.change(await screen.findByLabelText(en.keyInput), { target: { value: 'test-key' } }) + fireEvent.click(screen.getByText(en.apply)) + await waitFor(() => { expect(screen.queryByText(en.apply)).toBeNull() }) + expect(set).toHaveBeenCalledOnce() + expect(initialize).toHaveBeenCalledExactlyOnceWith('deepseek-official') + expect(screen.queryByText('empty catalog')).toBeNull() + } finally { + if (outcome === 'pending') { pending.reject(new Error('closed')); await Promise.resolve() } + initialize.mockRestore() + log.mockRestore() + } + }) + it('rejects an invalid draft before writing', async () => { const { mutate } = await mountDeepSeekCard() fireEvent.click(screen.getByText(en.customized)) diff --git a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx index ae71cf0557..370027cdd7 100644 --- a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx @@ -847,6 +847,30 @@ describe('hand-declared providers', () => { return { ...scripted, onClose } } + it('closes a saved custom provider when default initialization is refused', async () => { + const log = vi.spyOn(console, 'info').mockImplementation(() => {}) + const { face, mutate, set, onClose } = mountCard() + const initialize = vi.spyOn(ctxWith(face).remote.session, 'initializeDefaultModel') + .mockResolvedValue({ ok: false, error: new RemoteError('session/provider-models-unavailable', + 'empty catalog', { provider: 'acme-gateway' }) }) + try { + fireEvent.change(screen.getByLabelText(en.customRoute), { target: { value: 'acme-gateway' } }) + fireEvent.change(screen.getByLabelText(en.baseUrl), { target: { value: 'https://gateway.example/v1' } }) + fireEvent.change(screen.getByLabelText(en.keyInput), { target: { value: 'test-key' } }) + fireEvent.click(screen.getByRole('button', { name: en.addModel })) + fireEvent.change(screen.getByLabelText(`${en.modelId} 1`), { target: { value: 'model' } }) + fireEvent.click(screen.getByText(en.create)) + await waitFor(() => { expect(onClose).toHaveBeenCalledWith(true) }) + expect(mutate).toHaveBeenCalledOnce() + expect(set).toHaveBeenCalledOnce() + expect(initialize).toHaveBeenCalledExactlyOnceWith('acme-gateway') + expect(screen.queryByText('empty catalog')).toBeNull() + } finally { + initialize.mockRestore() + log.mockRestore() + } + }) + it('writes the whole profile and the key under the derived reference', async () => { const { mutate, set, onClose } = mountCard() diff --git a/packages/client/ui-settings-models/tests/store.client.spec.ts b/packages/client/ui-settings-models/tests/store.client.spec.ts index d181edc12e..5a56062da4 100644 --- a/packages/client/ui-settings-models/tests/store.client.spec.ts +++ b/packages/client/ui-settings-models/tests/store.client.spec.ts @@ -16,6 +16,16 @@ it.each([false, true])('retains configuration diagnostics when the route is acti }]) }) +it('places account and official before third-party providers', () => { + const providers = ['custom', 'deepseek-official', 'deepseek-account', 'openai'] + const directory = providers.map(provider => ({ + provider, displayName: provider, settingsNs: 'fixture', settingsPath: [], + })) + expect(joinProviderDirectory([], directory).map(row => row.provider)) + .toEqual(['deepseek-account', 'deepseek-official', 'custom', 'openai']) + expect(directory.map(row => row.provider)).toEqual(providers) +}) + let nextRpc = 0 function ok(value: T): RpcResponse { return { rpcId: `r-${nextRpc++}` as never, result: { ok: true, value } } diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 5706f2a77d..f05c4ed4f6 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -1398,7 +1398,7 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ }, { signature: 'async listModels(provider: string): Promise', - description: 'Discover models advertised by one registered provider. Catalog membership is advisory and never changes routing or request validation.', + description: 'Discover models advertised by one registered provider. Catalog membership does not constrain core routing. Catalog-driven entry points may restrict selection and submission to the advertised models.', parameters: [{ name: 'provider', description: 'registered provider route to inspect.' }], returns: 'detached model metadata in adapter-preferred order.', }, diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index fcc298d024..8bfe705158 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 7ded16b5e1d8c87b924aeb02c8eda0a3033bd3ee -README.zh.md: de612f7b2153eab35e8a00db71aeb1bb92824eb1 +README.md: be2694c0f7cd1fd19b7f17cabb0e2598e995a065 +README.zh.md: e07afc9f9084c04bd0605de284e40c4f8c44b445 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 7ded16b5e1..be2694c0f7 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -47,7 +47,7 @@ Choose this adapter for DeepSeek's official API or a gateway that supports the s filesApiTimeoutMs: 60000 ``` -A request selects the route with `provider: deepseek-official`; the model id passes through to the wire, so new DeepSeek models need no re-registration. Omitted `models` advertises the text- and image-capable `deepseek-flash` alongside the text-only `deepseek-v4-pro`, each with a 1,000,000-token context window. An explicit list replaces those defaults, and unlisted model ids still pass through as text-only routes. Clients, including model discovery tools, can read the advisory entries through `ctx.llm.listModels('deepseek-official')`. Image-capable entries may set `imagePixelBudget` to a positive integer or `low`, and may set `imageMaxBytes`. An entry may declare `systemPromptUpdate: in-history` when its endpoint reads the latest `system` message at any position of `messages` as the complete effective system prompt; the adapter reports the mode on the resolved model and the prepared call, and the agent loop then appends a changed prompt after the cached history instead of rewriting the leading system message ([decision rule](../../core/agent-loop/README.md#understand-the-implementation)). The default `deepseek-flash` entry declares this mode; other models require an explicit `models` declaration, and any value other than `in-history` fails at load with `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present`. +A request selects the route with `provider: deepseek-official`; the model id passes through to the wire, so new DeepSeek models need no re-registration. Omitted `models` advertises the text- and image-capable `deepseek-flash` alongside the text-only `deepseek-v4-pro`, each with a 1,000,000-token context window. An explicit list replaces those defaults, and core calls still pass unlisted model ids through as text-only routes. GUI selection and submission require a catalog entry. Clients, including model discovery tools, can read the advisory entries through `ctx.llm.listModels('deepseek-official')`. Image-capable entries may set `imagePixelBudget` to a positive integer or `low`, and may set `imageMaxBytes`. An entry may declare `systemPromptUpdate: in-history` when its endpoint reads the latest `system` message at any position of `messages` as the complete effective system prompt; the adapter reports the mode on the resolved model and the prepared call, and the agent loop then appends a changed prompt after the cached history instead of rewriting the leading system message ([decision rule](../../core/agent-loop/README.md#understand-the-implementation)). The default `deepseek-flash` entry declares this mode; other models require an explicit `models` declaration, and any value other than `in-history` fails at load with `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present`. | Field | Default | Meaning | |---|---|---| diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index de612f7b21..e07afc9f90 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -47,7 +47,7 @@ kind: "package-reference" filesApiTimeoutMs: 60000 ``` -请求用 `provider: deepseek-official` 选择路由;模型 id 原样传到协议,因此新增 DeepSeek 模型无需重新注册。省略 `models` 时公布支持文本和图像的 `deepseek-flash`,以及仅支持文本的 `deepseek-v4-pro`,各自的上下文窗口均为 1,000,000 token。显式列表会替换这些默认值,未列出的模型 id 仍作为纯文本路由原样通过。包括模型发现工具在内的客户端可通过 `ctx.llm.listModels('deepseek-official')` 读取这些建议性条目。支持图片的条目可把 `imagePixelBudget` 设置为正整数或 `low`,也可以设置 `imageMaxBytes`。当端点把 `messages` 中任意位置最新的 `system` 消息读作完整的有效系统提示词时,条目可以声明 `systemPromptUpdate: in-history`;适配器会在已解析模型与已准备调用上报告该模式,agent loop(智能体循环)随后把变化后的提示词追加到已缓存历史之后,而不是改写开头的 system 消息([决策规则](../../core/agent-loop/README.zh.md#understand-the-implementation))。默认的 `deepseek-flash` 条目声明该模式;其他模型需通过 `models` 显式声明,`in-history` 以外的任何值都会在加载时以 `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present` 失败。 +请求用 `provider: deepseek-official` 选择路由;模型 id 原样传到协议,因此新增 DeepSeek 模型无需重新注册。省略 `models` 时公布支持文本和图像的 `deepseek-flash`,以及仅支持文本的 `deepseek-v4-pro`,各自的上下文窗口均为 1,000,000 token。显式列表会替换这些默认值,核心调用中未列出的模型 id 仍作为纯文本路由原样通过。GUI 选择与提交要求模型具有目录条目。包括模型发现工具在内的客户端可通过 `ctx.llm.listModels('deepseek-official')` 读取这些建议性条目。支持图片的条目可把 `imagePixelBudget` 设置为正整数或 `low`,也可以设置 `imageMaxBytes`。当端点把 `messages` 中任意位置最新的 `system` 消息读作完整的有效系统提示词时,条目可以声明 `systemPromptUpdate: in-history`;适配器会在已解析模型与已准备调用上报告该模式,agent loop(智能体循环)随后把变化后的提示词追加到已缓存历史之后,而不是改写开头的 system 消息([决策规则](../../core/agent-loop/README.zh.md#understand-the-implementation))。默认的 `deepseek-flash` 条目声明该模式;其他模型需通过 `models` 显式声明,`in-history` 以外的任何值都会在加载时以 `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present` 失败。 | 字段 | 默认值 | 含义 | |---|---|---| diff --git a/packages/llm/llm/README.i18n.yaml b/packages/llm/llm/README.i18n.yaml index 6fac0fb24a..0adf149bab 100644 --- a/packages/llm/llm/README.i18n.yaml +++ b/packages/llm/llm/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm/README.md -README.md: cdda682cebc720d51692a1b0c4c8691fa84359a3 -README.zh.md: 8c679ecc6910376f7270450ae5be867d0da353fc +README.md: 1abdc8e332410ccd69066af6944bc4a32221635e +README.zh.md: 320a232c13fd145b65d53860c0cb1a4f7bfeb5a7 diff --git a/packages/llm/llm/README.md b/packages/llm/llm/README.md index cdda682ceb..1abdc8e332 100644 --- a/packages/llm/llm/README.md +++ b/packages/llm/llm/README.md @@ -25,6 +25,8 @@ Use `@deepseek-ai/dsh-llm` to stream model calls through configured provider ada ## Use this package +`listModels` describes models offered by catalog-driven interfaces. Core resolution and streaming can still accept unlisted ids. The GUI requires catalog membership for selection and submission; adapters intended for GUI use must implement `listModels` and advertise their available models. The base implementation returns an empty list and therefore offers no GUI models. + Any composition that calls a model provider — an agent loop, a session-title generator, a compaction summarizer — streams its requests through this service. Mount it together with at least one provider adapter; the service itself has no configuration and no provider wire code. ### When to choose it diff --git a/packages/llm/llm/README.zh.md b/packages/llm/llm/README.zh.md index 8c679ecc69..320a232c13 100644 --- a/packages/llm/llm/README.zh.md +++ b/packages/llm/llm/README.zh.md @@ -25,6 +25,8 @@ kind: "package-reference" ## 使用本包 +`listModels` 描述目录驱动界面提供的模型。核心解析与流式调用仍可接受未列出的 ID。GUI 的模型选择与提交要求模型出现在目录中;供 GUI 使用的适配器必须实现 `listModels`,公布其可用模型。基类实现返回空列表,因此不向 GUI 提供模型。 + 任何调用模型提供方的组合——agent loop(智能体循环)、会话标题生成器、压缩(compaction)摘要器——都会通过本服务流式发起请求。与至少一个提供方适配器一起挂载它;服务本身没有任何配置,也不包含提供方协议代码。 ### 何时选择 diff --git a/packages/llm/llm/src/index.ts b/packages/llm/llm/src/index.ts index 5f633619ff..64252cb643 100644 --- a/packages/llm/llm/src/index.ts +++ b/packages/llm/llm/src/index.ts @@ -235,8 +235,9 @@ export abstract class LlmAdapter { /** * List models this adapter can currently advertise for one owned provider. - * The result is advisory: an adapter may accept unlisted model ids, and - * consumers must not turn absence into request rejection. + * Core routing accepts unlisted model ids; catalog-driven entry points such + * as the GUI may require membership. Adapters used there must advertise + * their available models; the base empty catalog offers no GUI selection. * @param _provider - one provider route owned by this adapter. * @returns discoverable models in adapter-preferred order. */ @@ -689,7 +690,8 @@ export class LlmRuntime extends TypertRemoteService { /** * Discover models advertised by one registered provider. Catalog membership - * is advisory and never changes routing or request validation. + * does not constrain core routing. Catalog-driven entry points may restrict + * selection and submission to the advertised models. * @param provider - registered provider route to inspect. * @returns detached model metadata in adapter-preferred order. */ From d685383ee64336517f80daf26f6ee7e4828a874f Mon Sep 17 00:00:00 2001 From: dsh-agent Date: Mon, 21 Sep 2026 16:39:34 +0800 Subject: [PATCH 08/60] 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. --- packages/util/native-command/README.i18n.yaml | 4 +- packages/util/native-command/README.md | 2 +- packages/util/native-command/README.zh.md | 2 +- .../src/file-applications-windows.ts | 39 +++++++++++++++++-- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/packages/util/native-command/README.i18n.yaml b/packages/util/native-command/README.i18n.yaml index e0280c9599..317286a9d9 100644 --- a/packages/util/native-command/README.i18n.yaml +++ b/packages/util/native-command/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/util/native-command/README.md -README.md: 2ae2fd047e6359428debfe9252dc87146b646596 -README.zh.md: 62bb667af4705aac1373d9d0dda809dbab60e7da +README.md: 1d42f4f15b4d36a09dfb76db7e951d4ec217df86 +README.zh.md: e9a0f690c556ce963635047f6d14dc4fbe473437 diff --git a/packages/util/native-command/README.md b/packages/util/native-command/README.md index 2ae2fd047e..1d42f4f15b 100644 --- a/packages/util/native-command/README.md +++ b/packages/util/native-command/README.md @@ -49,7 +49,7 @@ The `NativeCommandRunner` type is the injectable command boundary for host integ `revealNativePath(path, signal)` selects the file in Finder or Explorer, including WSL path translation, and opens its parent directory through `xdg-open` on desktop Linux. `nativeFileManager()` identifies that action for Host-derived UI labels; desktop availability remains a separate `canOpenNativePath()` check. Callers must authorize the absolute file path before invoking either operation. Platform dispatch is covered by injected-runner tests; native desktop verification belongs to the corresponding platform. Explorer receives an encoded file URI as a separate argument. Its exit code 1 is accepted as a delegated handoff; cancellation, missing executables, and other exit codes still reject. This acknowledgement does not prove that a desktop window selected the file. -`nativeFileApplications(path, signal)` returns registered applications, localized names, icons, and the current default. macOS 12 and later use LaunchServices; Windows uses Shell association handlers; Linux uses GIO with shared XDG desktop-entry and icon lookup. `openNativeFileApplication(path, application, signal)` revalidates the handler without changing the system default. Windows delegates invocation to the Shell, and Linux delegates argument expansion to `gio launch`. WSL translates the path and uses the Windows adapter. Callers authorize the local file path. Native integration tests use private Windows file associations and Linux XDG roots on their respective platforms. +`nativeFileApplications(path, signal)` returns registered applications, localized names, icons, and the current default. macOS 12 and later use LaunchServices; Windows uses Shell association handlers and resolves a packaged application’s indirect icon reference before extraction; Linux uses GIO with shared XDG desktop-entry and icon lookup. `openNativeFileApplication(path, application, signal)` revalidates the handler without changing the system default. Windows delegates invocation to the Shell, and Linux delegates argument expansion to `gio launch`. WSL translates the path and uses the Windows adapter. Callers authorize the local file path. Native integration tests use private Windows file associations and Linux XDG roots on their respective platforms. ----- diff --git a/packages/util/native-command/README.zh.md b/packages/util/native-command/README.zh.md index 62bb667af4..e9a0f690c5 100644 --- a/packages/util/native-command/README.zh.md +++ b/packages/util/native-command/README.zh.md @@ -49,7 +49,7 @@ const { stdout, stderr } = await runNativeCommand('osascript', ['-e', script], s `revealNativePath(path, signal)` 在 Finder 或文件资源管理器中选中文件,包含 WSL 路径转换;在桌面 Linux 上通过 `xdg-open` 打开上层目录。`nativeFileManager()` 标识该操作,供 UI 根据 Host 选择文案;桌面是否可用仍由独立的 `canOpenNativePath()` 检查决定。调用方必须先授权绝对文件路径,再执行操作。平台分派由注入运行器的测试覆盖;原生桌面验证由对应平台负责。 Explorer 接收独立参数中的编码文件 URI。退出码 1 按已转交请求处理;取消、找不到可执行文件和其他退出码仍然报错。该确认不能证明桌面窗口已选中文件。 -`nativeFileApplications(path, signal)` 返回关联应用、本地化名称、图标和当前默认项。macOS 12 及以上版本使用 LaunchServices,Windows 使用 Shell 关联处理器,Linux 使用 GIO,并共用 XDG 桌面文件和图标读取逻辑。`openNativeFileApplication(path, application, signal)` 重新验证关联应用,不修改系统默认值。Windows 交给 Shell 启动应用,Linux 交给 `gio launch` 展开参数。WSL 转换路径后使用 Windows 适配器。调用方负责验证本地文件路径。原生集成测试分别在相应平台使用独立的 Windows 文件关联和 Linux XDG 目录。 +`nativeFileApplications(path, signal)` 返回关联应用、本地化名称、图标和当前默认项。macOS 12 及以上版本使用 LaunchServices,Windows 使用 Shell 关联处理器并在提取前解析打包应用的间接图标引用,Linux 使用 GIO,并共用 XDG 桌面文件和图标读取逻辑。`openNativeFileApplication(path, application, signal)` 重新验证关联应用,不修改系统默认值。Windows 交给 Shell 启动应用,Linux 交给 `gio launch` 展开参数。WSL 转换路径后使用 Windows 适配器。调用方负责验证本地文件路径。原生集成测试分别在相应平台使用独立的 Windows 文件关联和 Linux XDG 目录。 ----- diff --git a/packages/util/native-command/src/file-applications-windows.ts b/packages/util/native-command/src/file-applications-windows.ts index a468c9979c..c9950875cd 100644 --- a/packages/util/native-command/src/file-applications-windows.ts +++ b/packages/util/native-command/src/file-applications-windows.ts @@ -41,6 +41,8 @@ public static class DshFileAssociations { static extern int SHDefExtractIcon(string path, int index, uint flags, out IntPtr large, out IntPtr small, uint size); [DllImport("user32.dll")] static extern bool DestroyIcon(IntPtr icon); + [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)] + static extern int SHLoadIndirectString(string source, StringBuilder output, uint size, IntPtr reserved); [DllImport("shlwapi.dll", PreserveSig = false)] static extern void SHCreateThreadRef(IntPtr count, out IntPtr reference); @@ -118,12 +120,18 @@ public static class DshFileAssociations { var text = new StringBuilder((int)size); return AssocQueryString(0, kind, extension, null, text, ref size) == 0 ? text.ToString() : null; } - static string IconData(IHandler handler) { + // Resolve a packaged application's indirect icon reference, for example + // @{Microsoft.WindowsNotepad_...?ms-resource://.../NotepadAppList.png}, to + // the resource file the Shell would draw; an unresolved reference is null. + static string ResolveIndirectIcon(string source) { + var output = new StringBuilder(1024); + return SHLoadIndirectString(source, output, (uint)output.Capacity, IntPtr.Zero) == 0 ? output.ToString() : null; + } + // Read one icon source into a 32px PNG: an image file directly, otherwise the + // resource the Shell extracts at the given index. A missing resource is null. + static string PngFromIconSource(string source, int index) { IntPtr large = IntPtr.Zero, small = IntPtr.Zero; try { - string source; int index; - handler.GetIconLocation(out source, out index); - source = Environment.ExpandEnvironmentVariables(source); if (Path.GetExtension(source).Equals(".png", StringComparison.OrdinalIgnoreCase)) { using (var original = Image.FromFile(source)) using (var resized = new Bitmap(original, new Size(32, 32))) @@ -147,6 +155,29 @@ public static class DshFileAssociations { if (small != IntPtr.Zero) DestroyIcon(small); } } + static string IconData(IHandler handler) { + string source = null; int index = 0; + try { handler.GetIconLocation(out source, out index); } catch (Exception) { + // A handler without a drawable icon location falls back to its executable. + } + if (!String.IsNullOrEmpty(source)) { + source = Environment.ExpandEnvironmentVariables(source); + if (source.StartsWith("@{", StringComparison.Ordinal) && source.EndsWith("}", StringComparison.Ordinal)) { + var resolved = ResolveIndirectIcon(source); + if (!String.IsNullOrEmpty(resolved)) source = resolved; + } + var icon = PngFromIconSource(source, index); + if (icon != null) return icon; + } + // Packaged handlers name the executable only in GetName; extract there too. + string executable = null; + try { handler.GetName(out executable); } catch (Exception) { + // A handler that names no executable has no icon to fall back to. + } + return String.IsNullOrEmpty(executable) || String.Equals(executable, source, StringComparison.OrdinalIgnoreCase) + ? null + : PngFromIconSource(executable, 0); + } static void Visit(string path, Action visit) { var extension = Path.GetExtension(path); if (extension.Length == 0) return; From 6fa5151d8a7cea9433b570861f7a9458bc0dc151 Mon Sep 17 00:00:00 2001 From: dsh-agent Date: Mon, 21 Sep 2026 16:39:38 +0800 Subject: [PATCH 09/60] fix(ui-open-in-app): keep an application as the default file action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../client/ui-open-in-app/README.i18n.yaml | 4 ++-- packages/client/ui-open-in-app/README.md | 2 +- packages/client/ui-open-in-app/README.zh.md | 2 +- .../src/client/OpenTargetButton.tsx | 13 +++++++--- .../tests/open-path-action.client.spec.tsx | 24 ++++++++++++------- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/packages/client/ui-open-in-app/README.i18n.yaml b/packages/client/ui-open-in-app/README.i18n.yaml index b0fa75db3e..4ceb2983f9 100644 --- a/packages/client/ui-open-in-app/README.i18n.yaml +++ b/packages/client/ui-open-in-app/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-open-in-app/README.md -README.md: 138be128c291fc4a0611295c54768a95f33f3ae1 -README.zh.md: b81f62f9dbf8ccfbc1822b8a72df95e7169228c0 +README.md: 4f8462b29579b7290398eac802a614c250f7501b +README.zh.md: df58e838628df98e0c95f6f67aab76299002b3c8 diff --git a/packages/client/ui-open-in-app/README.md b/packages/client/ui-open-in-app/README.md index 138be128c2..4f8462b295 100644 --- a/packages/client/ui-open-in-app/README.md +++ b/packages/client/ui-open-in-app/README.md @@ -31,7 +31,7 @@ Mount this plugin in the Web composition beside [`dsh-host-open-in-app`](../../h The Session header and document header use the same 24px-high split button with 9px corners. Both headers show only the icon; their tooltip names the default application or the reveal action. Both show the default action’s icon, mark its application with “(default)” in the menu, disable while their own gesture runs, and report failures through a transient toast. The directory adapter uses the existing cross-platform application catalog and remembers the last successful choice in `dsh.open-in-app.choice`; a missing choice falls back to the first available application. -File menus list the discovered associated applications without a separate “Open in default app” row. “Show file location” stays in a fixed footer separated from the scrolling applications. A successful query with only one available action renders a single button without a dropdown. Initial file-association loading uses a gray skeleton icon. When no default application is identified, that row reads “Show file location (default)” and the main button reveals the file. Directory menus have no reveal row. Choosing a file application does not change the system default. An unpreviewable file uses the same menu in a 40px-high split button with an icon and action text; its label is “Open” or “Show file location” according to the default action. +File menus list the discovered associated applications without a separate “Open in default app” row. “Show file location” stays in a fixed footer separated from the scrolling applications. A successful query with only one available action renders a single button without a dropdown. Initial file-association loading uses a gray skeleton icon. When the Host identifies a default application the menu marks it “(default)” and the main button opens it; otherwise the first associated application takes that place, so the main button reveals the file only when no application is registered. Directory menus have no reveal row. Choosing a file application does not change the system default. An unpreviewable file uses the same menu in a 40px-high split button with an icon and action text; its label is “Open” or “Show file location” according to the default action. Mounted controls with the same association reader and file share one query and its results; opening either menu refreshes all of them. Releasing the last control cancels the query and discards its state. Cancelled queries cannot replace another file’s results. A failed query displays a menu message and leaves reveal available as the default action. File-association discovery follows [native-command](../../util/native-command/README.md); an empty result, including a platform without a discovery adapter, uses the same reveal fallback without platform branches in the control. diff --git a/packages/client/ui-open-in-app/README.zh.md b/packages/client/ui-open-in-app/README.zh.md index b81f62f9db..df58e83862 100644 --- a/packages/client/ui-open-in-app/README.zh.md +++ b/packages/client/ui-open-in-app/README.zh.md @@ -31,7 +31,7 @@ kind: "package-reference" 会话标题栏和文档标题栏共用同一个高 24px、圆角 9px 的分体按钮。两个标题栏都只显示图标,悬停提示显示默认应用名称或文件定位动作。两者都显示默认动作的图标,在菜单的默认应用后标注“(默认)”,仅在自己的操作执行期间禁用,并通过短暂提示报告失败。目录适配器使用已有的跨平台应用列表,将最后一次成功选择保存在 `dsh.open-in-app.choice` 中;原选择不可用时回退到第一个可用应用。 -文件菜单列出已发现的关联应用,不单列“用默认应用打开”。“显示文件位置”固定在菜单底部,通过分隔线与滚动的应用列表分开。查询成功且只有一个可用操作时显示单按钮,不再显示下拉箭头。文件关联首次加载时使用灰色骨架图标。未识别到默认应用时,该项显示为“显示文件位置(默认)”,主按钮也执行文件定位。目录菜单不包含定位项。选择文件应用不修改系统默认应用。无法预览文件时,空态使用同一菜单,按钮增大到 40px 高并显示图标和动作文字;根据默认动作显示“打开”或“显示文件位置”。 +文件菜单列出已发现的关联应用,不单列“用默认应用打开”。“显示文件位置”固定在菜单底部,通过分隔线与滚动的应用列表分开。查询成功且只有一个可用操作时显示单按钮,不再显示下拉箭头。文件关联首次加载时使用灰色骨架图标。Host 识别出默认应用时,菜单将该项标注为“(默认)”,主按钮打开该应用;否则第一个关联应用占据该位置,只有在一个关联应用都没有时主按钮才执行文件定位。目录菜单不包含定位项。选择文件应用不修改系统默认应用。无法预览文件时,空态使用同一菜单,按钮增大到 40px 高并显示图标和动作文字;根据默认动作显示“打开”或“显示文件位置”。 使用同一查询函数和文件的已挂载控件共用查询与结果,打开任一菜单会刷新所有相关控件。最后一个控件释放后取消查询并清除状态。已取消的查询不会覆盖其他文件的结果。查询失败时菜单显示提示,并以文件定位作为默认动作。文件关联查询的平台支持范围见 [native-command](../../util/native-command/README.zh.md);查询结果为空时,包括平台尚无查询适配器的情况,控件统一使用定位动作,不按操作系统分支处理。 diff --git a/packages/client/ui-open-in-app/src/client/OpenTargetButton.tsx b/packages/client/ui-open-in-app/src/client/OpenTargetButton.tsx index 93a3a34657..9c4fa97242 100644 --- a/packages/client/ui-open-in-app/src/client/OpenTargetButton.tsx +++ b/packages/client/ui-open-in-app/src/client/OpenTargetButton.tsx @@ -71,7 +71,8 @@ function ApplicationIcon({ source, size = 14 }: { source: string | null; size?: } /** - * Render identical split buttons for files and directories. File reveal always stays last and becomes the default when no app is selected. + * Render identical split buttons for files and directories. File reveal always + * stays last; it is the default only when no application is registered. * @param props - target applications, default selection, and operations. * @returns the control and its transient failure feedback. */ @@ -79,7 +80,13 @@ export function OpenTargetButton(props: OpenTargetButtonProps): ReactNode { const { applications, defaultId, kind, t } = props const [menuOpen, setMenuOpen] = useState(false) const { pending, toast, act } = useOpenTargetGesture(props.execute, t) - const preferred = applications.find(app => app.id === defaultId) + // Files open through an application whenever one is registered: the OS-marked + // default when the Host reported one, else the first entry in the Shell's + // preference order. Reveal is only promoted with no registered application, so + // a missing default marker never hides the applications behind it. + const preferred = kind === 'file' + ? applications.find(app => app.id === defaultId) ?? applications[0] + : applications.find(app => app.id === defaultId) const disabled = pending || props.busy === true || props.loading === true const hasMenu = props.loading === true || props.failed || applications.length + (kind === 'file' ? 1 : 0) > 1 const revealDefault = kind === 'file' && preferred === undefined && props.loading !== true @@ -105,7 +112,7 @@ export function OpenTargetButton(props: OpenTargetButtonProps): ReactNode { ...applications.map(app => ({ id: `app:${app.id}`, icon: , - label: app.id === defaultId ? t('path.appDefault', { app: app.name }) : app.name, + label: app.id === preferred?.id ? t('path.appDefault', { app: app.name }) : app.name, })), ...(props.failed ? [{ id: 'unavailable', label: t('path.appsError'), disabled: true }] : []), ]} diff --git a/packages/client/ui-open-in-app/tests/open-path-action.client.spec.tsx b/packages/client/ui-open-in-app/tests/open-path-action.client.spec.tsx index 0a4a13f090..a504c3b158 100644 --- a/packages/client/ui-open-in-app/tests/open-path-action.client.spec.tsx +++ b/packages/client/ui-open-in-app/tests/open-path-action.client.spec.tsx @@ -196,16 +196,22 @@ it('keeps reveal last and makes it the default when the file query fails', async expect(b.openPath).toHaveBeenLastCalledWith(ABSOLUTE_PATH, 'reveal', undefined) }) -it.each([{ apps: [] }, { apps: [{ id: '/Player.app', name: 'Player', default: false, icon: null }] }])('uses reveal as the default after the available applications when none is default', async ({ apps }) => { +it('opens with the first registered application when none is marked default', async () => { const b = bench() - render( apps} />) + render( [{ id: '/Player.app', name: 'Player', default: false, icon: null }]} />) await act(async () => {}) - if (apps.length > 0) { - await act(async () => { fireEvent.click(screen.getByRole('button', { name: zh['path.more'] })) }) - expect(screen.getAllByRole('menuitem').at(-1)?.textContent).toBe('显示文件位置(默认)') - expect(screen.queryByText('用默认应用打开')).toBeNull() - fireEvent.keyDown(screen.getByRole('menu'), { key: 'Escape' }) - } else expect(screen.queryByRole('button', { name: zh['path.more'] })).toBeNull() + const main = screen.getByRole('button', { name: t('open.title', { app: 'Player' }) }) + await act(async () => { fireEvent.click(main) }) + expect(b.openPath).toHaveBeenLastCalledWith(ABSOLUTE_PATH, 'open', undefined) + await act(async () => { fireEvent.click(screen.getByRole('button', { name: zh['path.more'] })) }) + expect(screen.getAllByRole('menuitem').map(item => item.textContent)).toEqual(['Player(默认)', zh['path.reveal']]) +}) + +it('uses reveal as the default only when no application is registered', async () => { + const b = bench() + render( []} />) + await act(async () => {}) + expect(screen.queryByRole('button', { name: zh['path.more'] })).toBeNull() await act(async () => { fireEvent.click(screen.getByRole('button', { name: zh['path.reveal'] })) }) expect(b.openPath).toHaveBeenLastCalledWith(ABSOLUTE_PATH, 'reveal', undefined) }) @@ -262,7 +268,7 @@ it('uses the same application menu in the prominent empty-state control', async expect(b.openPath).toHaveBeenLastCalledWith(ABSOLUTE_PATH, 'open', '/Music.app') }) -it('labels the prominent default action as reveal when no default application is discovered', async () => { +it('labels the prominent default action as reveal when no application is registered', async () => { const b = bench() render( []} />) await act(async () => {}) From 2545414c02216a843406979bcc5b4abb8c8ce58a Mon Sep 17 00:00:00 2001 From: dsh-agent Date: Mon, 21 Sep 2026 16:46:45 +0800 Subject: [PATCH 10/60] 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. --- .../tests/code-registration.client.spec.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/client/ui-sidebar-documentpreview/tests/code-registration.client.spec.tsx b/packages/client/ui-sidebar-documentpreview/tests/code-registration.client.spec.tsx index 17fe414745..c429935443 100644 --- a/packages/client/ui-sidebar-documentpreview/tests/code-registration.client.spec.tsx +++ b/packages/client/ui-sidebar-documentpreview/tests/code-registration.client.spec.tsx @@ -48,6 +48,15 @@ describe('code renderer registration', () => { expect(h.previews.candidates('notes.unknown')).toEqual([]) }) + it('admits ini and other text configuration suffixes to the code renderer', async () => { + const h = await boot() + await h.rt.mount(plugin) + for (const path of ['config.ini', 'C:\\work\\settings.INI', 'pyproject.toml']) { + expect(h.previews.candidates(path).map(item => item.id), path).toEqual([ID]) + } + expect(h.previews.candidates('notes.unknown')).toEqual([]) + }) + it('resolves localized names at read time and removes metadata, locale, and body on disposal', async () => { const h = await boot() await h.declare() From 6f056da42f5156df6951706c1772b4a62b274f9e Mon Sep 17 00:00:00 2001 From: mektpoy Date: Mon, 21 Sep 2026 21:17:55 +0800 Subject: [PATCH 11/60] 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. --- pnpm-lock.yaml | 164 ++++++++++++++++++++----------------------------- 1 file changed, 65 insertions(+), 99 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b88b5fb63..8661bd2da8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,10 +65,10 @@ importers: version: 5.10.0(eslint@10.5.0(jiti@2.7.0)) '@testing-library/dom': specifier: ^10.4.1 - version: 10.4.2 + version: 10.4.1 '@testing-library/react': specifier: ^16.3.2 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -2333,7 +2333,7 @@ importers: version: 15.0.0 open: specifier: ^11.0.0 - version: 11.0.4 + version: 11.0.0 devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ @@ -2737,7 +2737,7 @@ importers: version: link:../ui-sidebar '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3193,7 +3193,7 @@ importers: version: link:../ui-workspace '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3223,7 +3223,7 @@ importers: version: link:../ui-workspace '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3247,7 +3247,7 @@ importers: version: link:../ui-primitives '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3313,7 +3313,7 @@ importers: version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3502,7 +3502,7 @@ importers: version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3814,7 +3814,7 @@ importers: version: link:../../util/crypto '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -3976,7 +3976,7 @@ importers: version: 18.3.7(@types/react@18.3.31) '@types/use-sync-external-store': specifier: ^1.5.0 - version: 1.7.0 + version: 1.5.0 react: specifier: ^18.2.0 version: 18.3.1 @@ -4024,7 +4024,7 @@ importers: version: link:../../core/session '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4260,7 +4260,7 @@ importers: version: link:../../util/package-manifest '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4389,7 +4389,7 @@ importers: version: link:../ui-slots '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4471,7 +4471,7 @@ importers: version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4543,7 +4543,7 @@ importers: version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4609,7 +4609,7 @@ importers: version: link:../../util/crypto '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/picomatch': specifier: ^4.0.2 version: 4.0.3 @@ -4687,7 +4687,7 @@ importers: version: link:../../core/session '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4756,7 +4756,7 @@ importers: version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -4979,7 +4979,7 @@ importers: version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -6616,7 +6616,7 @@ importers: version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ~18.3.1 version: 18.3.31 @@ -7901,10 +7901,10 @@ importers: version: link:../../../vendor/schemastery compression: specifier: ^1.8.1 - version: 1.8.2(supports-color@9.4.0) + version: 1.8.1(supports-color@9.4.0) negotiator: specifier: ^1.0.0 - version: 1.1.0 + version: 1.0.0 devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ @@ -11555,10 +11555,10 @@ importers: dependencies: '@testing-library/dom': specifier: ^10.4.1 - version: 10.4.2 + version: 10.4.1 '@testing-library/react': specifier: ^16.3.2 - version: 16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) js-yaml: specifier: ^4.2.0 version: 4.3.1 @@ -13521,13 +13521,13 @@ packages: os: [linux] '@deepseek-ai/libreoffice-kit-win32-arm64@0.0.1': - resolution: {integrity: sha512-9G7YxXHEFaVn5iFM6IaHusWuXAd3cEprwTYSA1OsYMUREliHzdcmJEqcEyePDpX1y39KNKWQgowYeSpFbfrbgg==, tarball: https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-win32-arm64/-/libreoffice-kit-win32-arm64-0.0.1.tgz} + resolution: {integrity: sha512-9G7YxXHEFaVn5iFM6IaHusWuXAd3cEprwTYSA1OsYMUREliHzdcmJEqcEyePDpX1y39KNKWQgowYeSpFbfrbgg==} engines: {node: '>=22.19.0'} cpu: [arm64] os: [win32] '@deepseek-ai/libreoffice-kit-win32-x64@0.0.1': - resolution: {integrity: sha512-+DPPT5V6rfwWfMf7scfgzxwNBQiuePdY4dmVvWb4QAINgquOXUAyWVNZaThWNCO8baRn1l4fb3L5sdbLWib3zQ==, tarball: https://registry.npmjs.org/@deepseek-ai/libreoffice-kit-win32-x64/-/libreoffice-kit-win32-x64-0.0.1.tgz} + resolution: {integrity: sha512-+DPPT5V6rfwWfMf7scfgzxwNBQiuePdY4dmVvWb4QAINgquOXUAyWVNZaThWNCO8baRn1l4fb3L5sdbLWib3zQ==} engines: {node: '>=22.19.0'} cpu: [x64] os: [win32] @@ -15616,8 +15616,8 @@ packages: '@tanstack/virtual-core@3.17.7': resolution: {integrity: sha512-bp+v10y65sp2H7WpWfIMyxTNfl8ZVfxFTLRjPIFRryi6FV/J33z4IS53WO4pTk36KlvJ4iLiQz+oaydDC1xbcA==} - '@testing-library/dom@10.4.2': - resolution: {integrity: sha512-yzr2S9HyAIdhz2/6qHgbs665Q7PKVcDF05vsOlHPxG1mo36gKVesdYVeDLnXgfjJ03CrKRk08knc6+E/9m8v2Q==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} '@testing-library/react@16.3.2': @@ -15945,8 +15945,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/use-sync-external-store@1.7.0': - resolution: {integrity: sha512-v8435kzWm3FuxyUa4r8o4sG6b0D+r+uOrzF5MXHxZKW4Haoo6txu/lq56Vio45e2i1nkmFPA+R7myWcmV7Z7Bg==} + '@types/use-sync-external-store@1.5.0': + resolution: {integrity: sha512-5dyB8nLC/qogMrlCizZnYWQTA4lnb/v+It+sqNl5YnSRAPMlIqY/X0Xn+gZw8vOL+TgTTr28VEbn3uf8fUtAkw==} '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} @@ -16692,8 +16692,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.8.2: - resolution: {integrity: sha512-o8vI5RE5A6EVVOd9o41jKp41aJom+QTEO/Bx8MYNjexMo/Bv2WOjUfZr+aL0WnYSgymUy6zeguqLTsIhV0gMvQ==} + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -16711,10 +16711,6 @@ packages: resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} engines: {node: '>=18'} - content-type@2.1.0: - resolution: {integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==} - engines: {node: '>=18'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -16986,8 +16982,8 @@ packages: resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==} engines: {node: '>=18'} - default-browser@5.5.1: - resolution: {integrity: sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==} + default-browser@5.5.0: + resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} defer-to-connect@2.0.1: @@ -17024,10 +17020,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -17573,13 +17565,9 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} @@ -18307,8 +18295,8 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} - media-typer@1.1.1: - resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} merge-descriptors@2.0.0: @@ -18510,9 +18498,9 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} - negotiator@1.1.0: - resolution: {integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==} - engines: {node: '>=18'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} node-abi@3.96.0: resolution: {integrity: sha512-rebQ/lz7i0EkoLzUVSrKRzA69zMkwLp95kKMWoMDkkM00Suxz0D7zEQPwRml5fQum24mj7bPvmlgLAmu2JCiYg==} @@ -18668,8 +18656,8 @@ packages: oniguruma-to-es@4.3.6: resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} - open@11.0.4: - resolution: {integrity: sha512-++Zlftm0kVLPmzC06t6epuWmcRMDbI4z5P3NNX979WA/k23+NtSOynEGzsVfZwguKw2mi5umVgnBlJQMwRz4Pg==} + open@11.0.0: + resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} openai@6.40.0: @@ -18873,10 +18861,6 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} - powershell-utils@0.2.1: - resolution: {integrity: sha512-C+y9x90UElAddDZmV4qOx9W53B61PO7cIqWz2dQsWlwswuq4mr8NEwytdGKboYbQlGZ3awrkTeNvcZiZNHnQ8A==} - engines: {node: '>=20'} - preact@10.29.7: resolution: {integrity: sha512-DCHYrK/B10yUD3ZjLfhZ3WIE/9Vf9VFUODcRE2dRomTYDpJk6z6L9wecSfhfE6M9ZTHUdyQkoC46arIDhEV84Q==} peerDependencies: @@ -18932,8 +18916,8 @@ packages: resolution: {integrity: sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==} engines: {node: '>=12.0.0'} - proxy-addr@2.0.8: - resolution: {integrity: sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} psl@1.15.0: @@ -20054,8 +20038,8 @@ packages: utf-8-validate: optional: true - wsl-utils@1.0.0: - resolution: {integrity: sha512-Hl0ZOAs672vg+06kfujwRhoS6/jehvULrlFkuF2dRu6pHgA8U06h3xqNIqNNU1LTXPcedxByAR4GS6pwQK0mgA==} + wsl-utils@0.3.1: + resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} engines: {node: '>=20'} xml-name-validator@5.0.0: @@ -22413,7 +22397,7 @@ snapshots: '@tanstack/virtual-core@3.17.7': {} - '@testing-library/dom@10.4.2': + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.29.7 '@babel/runtime': 7.29.7 @@ -22424,10 +22408,10 @@ snapshots: picocolors: 1.1.1 pretty-format: 27.5.1 - '@testing-library/react@16.3.2(@testing-library/dom@10.4.2)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@testing-library/react@16.3.2(@testing-library/dom@10.4.1)(@types/react-dom@18.3.7(@types/react@18.3.31))(@types/react@18.3.31)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.29.7 - '@testing-library/dom': 10.4.2 + '@testing-library/dom': 10.4.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: @@ -22787,7 +22771,7 @@ snapshots: '@types/unist@3.0.3': {} - '@types/use-sync-external-store@1.7.0': {} + '@types/use-sync-external-store@1.5.0': {} '@types/web-bluetooth@0.0.21': {} @@ -23152,7 +23136,7 @@ snapshots: accepts@2.0.0: dependencies: mime-types: 3.0.2 - negotiator: 1.1.0 + negotiator: 1.0.0 acorn-jsx@5.3.2(acorn@8.17.0): dependencies: @@ -23591,12 +23575,11 @@ snapshots: dependencies: mime-db: 1.54.0 - compression@1.8.2(supports-color@9.4.0): + compression@1.8.1(supports-color@9.4.0): dependencies: bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9(supports-color@9.4.0) - destroy: 1.2.0 negotiator: 0.6.4 on-headers: 1.1.0 safe-buffer: 5.2.1 @@ -23612,8 +23595,6 @@ snapshots: content-type@2.0.0: {} - content-type@2.1.0: {} - convert-source-map@2.0.0: {} cookie-signature@1.2.2: {} @@ -23917,7 +23898,7 @@ snapshots: default-browser-id@5.0.1: {} - default-browser@5.5.1: + default-browser@5.5.0: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.1 @@ -23952,8 +23933,6 @@ snapshots: dequal@2.0.3: {} - destroy@1.2.0: {} - detect-libc@2.1.2: {} detect-node@2.1.0: @@ -24406,7 +24385,7 @@ snapshots: on-finished: 2.4.1 once: 1.4.0 parseurl: 1.3.3 - proxy-addr: 2.0.8 + proxy-addr: 2.0.7 qs: 6.15.3 range-parser: 1.3.0 router: 2.2.0 @@ -24688,15 +24667,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@7.2.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -25490,7 +25460,7 @@ snapshots: mdn-data@2.27.1: {} - media-typer@1.1.1: {} + media-typer@1.1.0: {} merge-descriptors@2.0.0: {} @@ -25794,9 +25764,7 @@ snapshots: negotiator@0.6.4: {} - negotiator@1.1.0: - dependencies: - content-type: 2.1.0 + negotiator@1.0.0: {} node-abi@3.96.0: dependencies: @@ -25943,14 +25911,14 @@ snapshots: regex: 6.1.0 regex-recursion: 6.0.2 - open@11.0.4: + open@11.0.0: dependencies: - default-browser: 5.5.1 + default-browser: 5.5.0 define-lazy-prop: 3.0.0 is-in-ssh: 1.0.0 is-inside-container: 1.0.0 - powershell-utils: 0.2.1 - wsl-utils: 1.0.0 + powershell-utils: 0.1.0 + wsl-utils: 0.3.1 openai@6.40.0(ws@8.21.0)(zod@4.4.3): optionalDependencies: @@ -26154,8 +26122,6 @@ snapshots: powershell-utils@0.1.0: {} - powershell-utils@0.2.1: {} - preact@10.29.7: {} prebuild-install@7.1.3: @@ -26220,7 +26186,7 @@ snapshots: '@types/node': 22.20.0 long: 5.3.2 - proxy-addr@2.0.8: + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 @@ -26382,7 +26348,7 @@ snapshots: rimraf@2.6.3: dependencies: - glob: 7.2.0 + glob: 7.2.3 roarr@2.15.4: dependencies: @@ -27033,7 +26999,7 @@ snapshots: type-is@2.1.0: dependencies: content-type: 2.0.0 - media-typer: 1.1.1 + media-typer: 1.1.0 mime-types: 3.0.2 typebox@1.3.7: {} @@ -27492,7 +27458,7 @@ snapshots: ws@8.21.0: {} - wsl-utils@1.0.0: + wsl-utils@0.3.1: dependencies: is-wsl: 3.1.1 powershell-utils: 0.1.0 From f21098e9d32372ebe86605f81e392d4abecd88d7 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 14:41:33 +0800 Subject: [PATCH 12/60] fix(account): expire rejected credentials and hide signed-out provider --- apps/desktop/README.i18n.yaml | 4 +- apps/desktop/README.md | 2 + apps/desktop/README.zh.md | 2 + apps/desktop/src/account-backend.ts | 4 ++ apps/desktop/tests/account-backend.spec.ts | 7 +++ apps/desktop/tests/welcome-startup.spec.ts | 24 +++++++- docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- .../tests/browser-plugin.client.spec.ts | 21 +++++++ .../ui-settings-account/README.i18n.yaml | 4 +- packages/client/ui-settings-account/README.md | 2 + .../client/ui-settings-account/README.zh.md | 2 + .../src/client/AccountMenu.tsx | 8 ++- .../ui-settings-account/src/client/locales.ts | 2 + .../tests/account.client.spec.tsx | 11 ++++ .../tests/expected/expired-en.txt | 1 + .../tests/expected/expired-zh.txt | 1 + .../ui-settings-models/README.i18n.yaml | 4 +- packages/client/ui-settings-models/README.md | 2 +- .../client/ui-settings-models/README.zh.md | 2 +- .../ui-settings-models/src/client/store.ts | 2 +- .../tests/store.client.spec.ts | 26 ++++++++- .../README.i18n.yaml | 4 +- .../deepseek-account-platform/README.md | 2 + .../deepseek-account-platform/README.zh.md | 2 + .../deepseek-account-platform/src/details.ts | 8 ++- .../deepseek-account-platform/src/index.ts | 37 +++++++++++-- .../deepseek-account-platform/src/protocol.ts | 9 +++ .../tests/account.spec.ts | 55 +++++++++++++++++++ .../deepseek-account/README.i18n.yaml | 4 +- .../credentials/deepseek-account/README.md | 2 + .../credentials/deepseek-account/README.zh.md | 2 + .../credentials/deepseek-account/src/types.ts | 2 + .../extensions/tool-cordis/src/api-catalog.ts | 2 +- 35 files changed, 236 insertions(+), 32 deletions(-) create mode 100644 packages/client/ui-settings-account/tests/expected/expired-en.txt create mode 100644 packages/client/ui-settings-account/tests/expected/expired-zh.txt diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index d6d13bc0fb..1bf1514fdd 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 apps/desktop/README.md -README.md: 6107698a58cbbe76215d9f23607dabfb3031f8fd -README.zh.md: d85acc25c3bfdebf8929d74cba10e36ca7e8c64a +README.md: 5b9805dab3ee15bc32bdae9a62233ba2c64cadb0 +README.zh.md: bb3500dc834bc2d00f79984b4733715197c190e8 diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 6107698a58..5b9805dab3 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -14,6 +14,8 @@ Embedded Platform documents use a dedicated non-persistent WebContentsView sessi Desktop Host Platform API requests use the same `x-client-platform` mapping as update-policy requests. The account provider owns [API-only header configuration](../../packages/credentials/deepseek-account-platform/README.md#use-this-package). +A server-expired account credential returns to Welcome when no official API key is configured; an available API key keeps the workspace open. Explicit sign-out follows the same rule. + ## Key technical decisions The original artwork lives in `resources/icon.png` and `resources/icon.svg`; platform adaptations retain the whale and gradients in `resources/icon-windows.*` and `resources/icon-macos.*`. Export each platform SVG as a transparent 1024×1024 PNG. Electron-builder generates the multi-size ICO for the Windows application, installer, and uninstaller ([Windows icon requirements](https://learn.microsoft.com/en-us/windows/apps/design/iconography/app-icon-construction)). The installation pages use matching artwork in both themes; the uninstaller's welcome and finish pages share `installer/assets/uninstaller-sidebar.png`, converted to a 164×314 BMP during preparation. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index d85acc25c3..bb3500dc83 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -14,6 +14,8 @@ Creator 和 Web Plugin Manager 在 Electron Node 模式下使用 Desktop 内置 Desktop Host 的 Platform API 请求与更新策略请求使用相同的 `x-client-platform` 映射。账号 provider 管理[仅 API 使用的请求头配置](../../packages/credentials/deepseek-account-platform/README.zh.md#use-this-package)。 +账号凭据被服务端判定失效后,未配置官方 API key 时返回 Welcome;有可用 API key 时保持工作区打开。主动退出登录遵循相同规则。 + ## 关键技术决策 设计师原稿位于 `resources/icon.png` 和 `resources/icon.svg`;平台适配保留鲸鱼与渐变,分别位于 `resources/icon-windows.*` 和 `resources/icon-macos.*`。将各平台 SVG 导出为透明的 1024×1024 PNG。electron-builder 为 Windows 应用、安装程序和卸载程序生成多尺寸 ICO([Windows 图标要求](https://learn.microsoft.com/en-us/windows/apps/design/iconography/app-icon-construction))。安装页面在两种主题下使用匹配的图案;卸载程序的欢迎和完成页共用 `installer/assets/uninstaller-sidebar.png`,准备阶段将其转换为 164×314 BMP。 diff --git a/apps/desktop/src/account-backend.ts b/apps/desktop/src/account-backend.ts index 0db791f631..7b60e55db7 100644 --- a/apps/desktop/src/account-backend.ts +++ b/apps/desktop/src/account-backend.ts @@ -20,6 +20,9 @@ export function accountView(value: unknown): AccountView { } validateBrowserDestination(value.links.usageUrl) validateBrowserDestination(value.links.topUpUrl) + if ('signOutReason' in value && value.signOutReason !== 'expired') { + throw new Error('desktop account: invalid sign-out reason') + } const attempt = value.attempt if (attempt !== null && (typeof attempt !== 'object' || !('id' in attempt) || typeof attempt.id !== 'string' || !('phase' in attempt) || !['initializing', 'waiting-browser', 'exchanging', 'committing', 'succeeded', 'cancelled', 'expired', 'failed'].includes(String(attempt.phase)) @@ -34,6 +37,7 @@ export function accountView(value: unknown): AccountView { const parsed = value as AccountView return { status: parsed.status, + ...parsed.signOutReason === undefined ? {} : { signOutReason: parsed.signOutReason }, links: { usageUrl: parsed.links.usageUrl, topUpUrl: parsed.links.topUpUrl }, attempt: parsed.attempt === null ? null : { id: parsed.attempt.id, phase: parsed.attempt.phase, diff --git a/apps/desktop/tests/account-backend.spec.ts b/apps/desktop/tests/account-backend.spec.ts index 9c25ae1026..11217454ac 100644 --- a/apps/desktop/tests/account-backend.spec.ts +++ b/apps/desktop/tests/account-backend.spec.ts @@ -24,3 +24,10 @@ it('uses account Remote commands without returning additional wire fields', asyn expect(await backend.start('en')).toEqual({ links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' }, status: 'signed-out', attempt: null }) expect(requests).toEqual([{ namespace: 'account', method: 'startSignIn', args: { locale: 'en', callbackOrigin: 'http://127.0.0.1:1234', loginSource: 'desktop' } }]) }) + +it('preserves the safe expiration reason and rejects unknown reasons', () => { + const state = { status: 'signed-out', attempt: null, signOutReason: 'expired', + links: { usageUrl: 'https://platform.deepseek.com/usage', topUpUrl: 'https://platform.deepseek.com/top_up' } } + expect(accountView(state)).toEqual(state) + expect(() => accountView({ ...state, signOutReason: 'unexpected' })).toThrow('invalid sign-out reason') +}) diff --git a/apps/desktop/tests/welcome-startup.spec.ts b/apps/desktop/tests/welcome-startup.spec.ts index 5e12c279d6..5d29254c2f 100644 --- a/apps/desktop/tests/welcome-startup.spec.ts +++ b/apps/desktop/tests/welcome-startup.spec.ts @@ -13,6 +13,7 @@ const state = vi.hoisted(() => ({ beforeRead: vi.fn(async () => {}), beforeWelcome: vi.fn(async () => {}), copy: vi.fn(), + accountListener: undefined as ((value: AccountView) => void) | undefined, accountState: vi.fn<() => Promise>().mockResolvedValue({ status: 'signed-out', attempt: null, links: { usageUrl: '', topUpUrl: '' }, }), @@ -24,6 +25,7 @@ const state = vi.hoisted(() => ({ closeWelcome: vi.fn(), welcomeLocale: undefined as DesktopLocale | undefined, preference: 'zh', + hasApiKey: false, handlers: new Map unknown>(), listeners: new Map void>(), contents: undefined as { mainFrame: { url: string } } | undefined, @@ -87,7 +89,9 @@ vi.mock('../src/host-process.ts', () => ({ start = state.startHost stop = state.stopHost fetch() { - return Promise.resolve(Response.json({ loggedIn: false, hasApiKey: false, writable: true, localePreference: state.preference })) + return Promise.resolve(Response.json({ + loggedIn: false, hasApiKey: state.hasApiKey, writable: true, localePreference: state.preference, + })) } }, })) @@ -95,10 +99,13 @@ vi.mock('../src/welcome-backend.ts', () => ({ connectDesktopWelcome: async () => ({ read: async () => { await state.beforeRead() - return { loggedIn: false, hasApiKey: false, writable: true, localePreference: state.preference } + return { loggedIn: false, hasApiKey: state.hasApiKey, writable: true, localePreference: state.preference } }, save: async () => ({ ok: true }), - account: { watch: () => () => {}, state: state.accountState }, + account: { + watch: (listener: (value: AccountView) => void) => { state.accountListener = listener; return () => {} }, + state: state.accountState, + }, }), })) vi.mock('node:fs/promises', async importOriginal => ({ @@ -201,4 +208,15 @@ it('starts the Host for welcome onboarding and opens the workspace on skip witho changed(event, 'en') expect(state.menu).toHaveBeenCalledTimes(initialMenus + 1) expect(await bootstrap(event)).toEqual({ languages: ['en-US'], preference: 'en' }) + const welcomeCount = state.beforeWelcome.mock.calls.length + state.hasApiKey = true + state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + await vi.advanceTimersByTimeAsync(0) + expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount) + state.hasApiKey = false + state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + await vi.waitFor(() => { expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount + 1) }) + }) diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 3b89b5ced5..99b74a71ee 100644 --- a/docs/config-catalog.i18n.yaml +++ b/docs/config-catalog.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/config-catalog.md -config-catalog.md: 57e2c00c98ab2cf09757d78e93fff042156918b1 -config-catalog.zh.md: f197659787958d902a3069ac889b442dcad46d6b +config-catalog.md: 982333d8b645530f0e7a51440b1cfc9f74c86a1b +config-catalog.zh.md: bf195a16ebbc9e09eb8d6e5b79bb2671ee966b77 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 57e2c00c98..982333d8b6 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -639,7 +639,7 @@ export interface Config { } ``` -Source: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) +Source: [`packages/credentials/deepseek-account-platform/src/index.ts:24`](../packages/credentials/deepseek-account-platform/src/index.ts) diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index f197659787..bf195a16eb 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -641,7 +641,7 @@ export interface Config { } ``` -来源: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) +来源: [`packages/credentials/deepseek-account-platform/src/index.ts:24`](../packages/credentials/deepseek-account-platform/src/index.ts) diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index ffd02ee21b..eca46c5e64 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -298,6 +298,27 @@ describe('ui-model-selection dual entry', () => { } }) + it('removes account models from the picker after sign-out', async () => { + const b = await bench('en') + try { + b.setGroups([{ ...GROUPS[0]!, id: 'deepseek-account', name: 'DeepSeek Account' }, ...GROUPS]) + b.remote.emit('llm/adapters-updated', []) + b.mint('s1') + const before = await b.popup().options(projection('s1'), new AbortController().signal) + expect(before.some(option => option.detail?.includes('DeepSeek Account'))).toBe(true) + b.setGroups(GROUPS) + b.remote.emit('credentials/record-updated', ['deepseek-account-platform']) + await vi.waitFor(() => { + expect(b.ctx.modelDirectories.directoryFor(sid('s1')).store.getSnapshot().groups).toEqual(GROUPS) + }) + const after = await b.popup().options(projection('s1'), new AbortController().signal) + expect(after.some(option => option.detail?.includes('DeepSeek Account'))).toBe(false) + expect(after.length).toBeGreaterThan(0) + } finally { + await b.ctx.fiber.dispose() + } + }) + it('both entries share one directory instance per session, isolated across sessions', async () => { const b = await bench() b.mint('a') diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index a3c8fbdf6f..eb121fc25e 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: 615d2ef3466fc748d7b8c65c65c356afdd4f3cf3 -README.zh.md: 39d8a94b2e8d98896b13b8c76f7e5ff6390b5d0d +README.md: 54f4461573de456afc29fadabb28d29528199e74 +README.zh.md: 31fb4e76c97fb65aa278bf8c354e6dab169764a4 diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 615d2ef346..54f4461573 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -7,6 +7,8 @@ kind: "package-reference" English | [中文](README.zh.md) +Server-expired account credentials show a localized sign-in reminder toast and clear the displayed account details. + ## Summary The Account settings section displays DeepSeek login state and offers browser sign-in and cancellation; the sidebar account menu provides Platform sign-out. diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 39d8a94b2e..31fb4e76c9 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -7,6 +7,8 @@ kind: "package-reference" [English](README.md) | 中文 +账号凭据被服务端判定失效后,显示本地化的重新登录提示 toast,并清空显示的账号详情。 + ## 概述 设置中的账号页面显示 DeepSeek 登录状态,并提供浏览器登录和取消;侧边栏账号菜单提供 Platform 退出登录。 diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.tsx b/packages/client/ui-settings-account/src/client/AccountMenu.tsx index 7570a13190..6a1476175a 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.tsx +++ b/packages/client/ui-settings-account/src/client/AccountMenu.tsx @@ -1,6 +1,6 @@ /** Sidebar account launcher and locally authoritative sign-out action. */ -import { useState } from 'react' -import { Menu, IconPaperPlaneOutlineMedium, IconSettingsOutlineMedium, IconUserOutlineMedium } from '@deepseek-ai/dsh-client-ui-primitives' +import { useEffect, useState } from 'react' +import { Toast, Menu, IconPaperPlaneOutlineMedium, IconSettingsOutlineMedium, IconUserOutlineMedium } from '@deepseek-ai/dsh-client-ui-primitives' import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots' import type { AccountSectionInjected } from './AccountSection.tsx' import { SignOutDialog } from './SignOutDialog.tsx' @@ -21,6 +21,9 @@ export function AccountMenu({ }: AccountMenuProps) { const account = useAccount(state => state) const signedIn = account.view?.status === 'credential-stored' + const expired = account.view?.status === 'signed-out' && account.view.signOutReason === 'expired' + const [expiryNotice, setExpiryNotice] = useState(false) + useEffect(() => { setExpiryNotice(expired) }, [expired]) const profile = account.details?.profile const label = profile === undefined ? null : profile.status === 'ready' ? profile.value.name ?? profile.value.contact ?? t('signedIn') : t('signedIn') @@ -36,6 +39,7 @@ export function AccountMenu({ finally { setBusy(false) } } return
+ {expiryNotice && { setExpiryNotice(false) }} />} { setOpen(value => !value) }}> diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index e3a07f3f8f..fad00a6775 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -1,5 +1,6 @@ /** Account settings copy, owned by the account feature. */ export const en = { + sessionExpired: 'You have signed out of your account, please log in again.', close: 'Close', addApiKey: 'Add API Key', retry: 'Sign in again', loginTitle: 'Start creating', loginDescription: 'Sign in to create, edit, and share your design projects. Everything is saved locally.', browserTitle: 'Waiting for sign in', browserPrompt: 'Page did not open automatically? ', copyLink: 'Copy sign-in link', copiedLink: 'Link copied', copyFailed: 'Copy failed', @@ -27,6 +28,7 @@ export const en = { export type AccountKey = keyof typeof en /** Chinese account settings copy. */ export const zh: Record = { + sessionExpired: '登录信息已失效,请重新登录', close: '关闭', addApiKey: '添加 API Key', retry: '重新登录', loginTitle: '开始你的创作', loginDescription: '登录后即可创建、编辑和分享你的设计项目,所有内容在本地保存。', browserTitle: '等待登录', browserPrompt: '没有自动打开新页面?', copyLink: '复制登录链接', copiedLink: '链接已复制', copyFailed: '复制失败', diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index dbf81ece0e..3cfb77c5fc 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -243,3 +243,14 @@ it('opens more account information externally without invoking the embedded Plat fireEvent.click(link) expect(platform.open).not.toHaveBeenCalled() }) + +it.each([en, zh])('shows a localized toast when the account credential expires', async (copy) => { + const operations = mount({ status: 'signed-out', attempt: null, signOutReason: 'expired' }, copy) + cleanup() + const { AccountMenu } = await import('../src/client/AccountMenu.tsx') + render( selector(operations.hooks.account.getSnapshot())} wide openOnboarding={() => {}} openSettings={() => {}} + t={key => key in copy ? copy[key as AccountKey] : key} />) + expect(screen.getByRole('alert').textContent).toContain(copy.sessionExpired) + await expect(`${screen.getByRole('alert').textContent}\n`).toMatchFileSnapshot(`./expected/expired-${copy === en ? 'en' : 'zh'}.txt`) +}) diff --git a/packages/client/ui-settings-account/tests/expected/expired-en.txt b/packages/client/ui-settings-account/tests/expected/expired-en.txt new file mode 100644 index 0000000000..4187486bfe --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/expired-en.txt @@ -0,0 +1 @@ +You have signed out of your account, please log in again. diff --git a/packages/client/ui-settings-account/tests/expected/expired-zh.txt b/packages/client/ui-settings-account/tests/expected/expired-zh.txt new file mode 100644 index 0000000000..7995f21137 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/expired-zh.txt @@ -0,0 +1 @@ +登录信息已失效,请重新登录 diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index 3147eeab54..3854ee9364 100644 --- a/packages/client/ui-settings-models/README.i18n.yaml +++ b/packages/client/ui-settings-models/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-models/README.md -README.md: 289a0ec0b3603590dddcab848a79235ca4579bcf -README.zh.md: 10c61a464d48933a692a265b5d5b0812bf79cdbb +README.md: 99b090dcdda887e75b9e6bee6eb73495d9235af1 +README.zh.md: e89be1ab2959daf2758209c376ea6468d7953ed7 diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index 289a0ec0b3..99b090dcdd 100644 --- a/packages/client/ui-settings-models/README.md +++ b/packages/client/ui-settings-models/README.md @@ -59,7 +59,7 @@ After the versioned notice step completes, the DeepSeek step projects first-run The section declares two seats for plugins distributed outside this repository, typed in [`src/client/slot-contract.ts`](src/client/slot-contract.ts) and exported from `./client`. `settings.models.provider-card` (keyed) renders inside every card that shows a directory row — a saved row's card, its first-run setup posture, and the add-provider draft — dispatched with `entryKey = settingsNs` and owner props carrying the row's `ConfigurableProviderView`, its configured state, and its confirmed api-key credential state, so one registration under an adapter family's namespace receives every card of that family, hand-declared routes included; the hand-declared draft card has no directory row yet and dispatches nothing until saved. `settings.models.footer` (list) renders after the rows and the add controls. A registrant activates through `ctx.slots.inject` with a type-only import of this package's `/client` entry; without registrants both seats render nothing. -The Models page includes **DeepSeek Account** (`deepseek-account`, **DeepSeek 账号** in Chinese). Its editor exposes the shared DeepSeek model catalog without API-key or base-URL inputs. Account availability follows the stored account credential. The first successful API-key setup initializes the default from its own provider; later setup preserves the user’s saved model choice. +The Models page includes **DeepSeek Account** (`deepseek-account`, **DeepSeek 账号** in Chinese). Its editor exposes the shared DeepSeek model catalog without API-key or base-URL inputs. The account row is hidden when its available model catalog is empty, including before sign-in and after sign-out; it returns when account models become available. The first successful API-key setup initializes the default from its own provider; later setup preserves the user’s saved model choice. ----- diff --git a/packages/client/ui-settings-models/README.zh.md b/packages/client/ui-settings-models/README.zh.md index 10c61a464d..e89be1ab29 100644 --- a/packages/client/ui-settings-models/README.zh.md +++ b/packages/client/ui-settings-models/README.zh.md @@ -59,7 +59,7 @@ Host 配置 `credentialOnboarding` 默认为 `true`。Electron preload 标记会 本分区为仓库外分发的插件声明两个席位,类型定义在 [`src/client/slot-contract.ts`](src/client/slot-contract.ts) 并从 `./client` 导出。`settings.models.provider-card`(keyed)渲染在每张展示目录行的卡片内部——已保存行的卡片、其首次运行 setup 形态、以及「添加提供方」草稿卡——以 `entryKey = settingsNs` 分发,owner props 携带该行的 `ConfigurableProviderView`、其 configured 状态与已确认的 api-key 凭据状态,因此以某适配器家族的 namespace 注册一次即可收到该家族的全部卡片,含手工声明的路由;手工声明的草稿卡尚无目录行,保存之前不分发。`settings.models.footer`(list)渲染在行列表与新增控件之后。注册方通过 `ctx.slots.inject` 激活,并以 type-only import 引入本包 `/client` 入口;没有注册方时两个席位均不渲染任何内容。 -Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepSeek Account**)。其编辑器展示共享的 DeepSeek 模型目录,不提供 API Key 或 Base URL 输入框。账号可用性取决于已保存的账号凭据。首次成功配置 API Key 时,从对应提供方初始化默认模型;后续配置保留用户已保存的模型选择。 +Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepSeek Account**)。其编辑器展示共享的 DeepSeek 模型目录,不提供 API Key 或 Base URL 输入框。账号可用模型目录为空时隐藏账号行,包括登录前和退登后;账号模型恢复可用时重新显示。首次成功配置 API Key 时,从对应提供方初始化默认模型;后续配置保留用户已保存的模型选择。 ----- diff --git a/packages/client/ui-settings-models/src/client/store.ts b/packages/client/ui-settings-models/src/client/store.ts index f693b5960d..34a20107e3 100644 --- a/packages/client/ui-settings-models/src/client/store.ts +++ b/packages/client/ui-settings-models/src/client/store.ts @@ -240,7 +240,7 @@ export class ModelsSettingsStore { s.error = null s.credentialError = credentialError s.writable = writable - s.rows = rows.map((row) => { + s.rows = rows.filter(row => row.entry.provider !== 'deepseek-account' || row.accountAvailable === true).map((row) => { if (row.entry.provider === 'deepseek-account') return row const named = row.apiKeyEnv === undefined ? undefined : credentials[row.apiKeyEnv] const derived = row.apiKeyEnv !== undefined ? undefined : credentials[deriveKeyRef(row.entry.provider)] diff --git a/packages/client/ui-settings-models/tests/store.client.spec.ts b/packages/client/ui-settings-models/tests/store.client.spec.ts index 5a56062da4..85b2347122 100644 --- a/packages/client/ui-settings-models/tests/store.client.spec.ts +++ b/packages/client/ui-settings-models/tests/store.client.spec.ts @@ -350,8 +350,28 @@ it.each([false, true])('uses account availability without asking for an API key: }] }) }) const store = new ModelsSettingsStore(ctx, settingsSchema, mirror) await store.load() - const row = store.store.getSnapshot().rows[0]! - expect(row).toMatchObject({ accountAvailable, apiKeyEnv: undefined, credential: undefined }) - expect(providerUsable(row)).toBe(accountAvailable) + const rows = store.store.getSnapshot().rows + expect(rows).toHaveLength(accountAvailable ? 1 : 0) + if (accountAvailable) { + expect(rows[0]).toMatchObject({ accountAvailable: true, apiKeyEnv: undefined, credential: undefined }) + expect(providerUsable(rows[0]!)).toBe(true) + } expect(seenRefs).toEqual([]) }) + +it('removes the account row after sign-out and restores it after sign-in', async () => { + const overrides = { accountAvailable: true, providers: async () => ok({ providers: [{ + provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: 'llm-deepseek', settingsPath: [], active: true, + }, ...DIRECTORY] }) } + const { ctx, mirror } = api(overrides) + const store = new ModelsSettingsStore(ctx, settingsSchema, mirror) + await store.load() + expect(store.store.getSnapshot().rows[0]?.entry.provider).toBe('deepseek-account') + overrides.accountAvailable = false + await store.load() + expect(store.store.getSnapshot().rows.map(row => row.entry.provider)).not.toContain('deepseek-account') + expect(store.store.getSnapshot().rows).toHaveLength(DIRECTORY.length) + overrides.accountAvailable = true + await store.load() + expect(store.store.getSnapshot().rows[0]?.entry.provider).toBe('deepseek-account') +}) diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index b896927357..236da44ed1 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account-platform/README.md -README.md: 31172b1749428decebed41fac99e3fc34a70cf6d -README.zh.md: bdff2428021b7452865cb10d6774fff618c3b111 +README.md: 16cb23d805b15e7c2c0d3f6a0b71f52a35626f7a +README.zh.md: 63c2ec09f0ccae7ee7e3f6388974c5244676e939 diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md index 31172b1749..16cb23d805 100644 --- a/packages/credentials/deepseek-account-platform/README.md +++ b/packages/credentials/deepseek-account-platform/README.md @@ -13,6 +13,8 @@ getPlatformSession exports the stored grant only when its issuer matches platfor `desktopPlatform` defaults to `null`. The Desktop profile supplies `darwin` or `win32`; Host authorization, profile, balance, and logout requests then carry `x-client-platform: desktop-mac` or `desktop-win`, overriding that header in deployment configuration. Embedded Platform document and API requests receive the same platform header alongside their deployment headers, only at the configured origin. Other profiles omit the automatic header. +Profile and balance HTTP 401 responses clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. + ## Summary Sign in through the system browser and keep the account credential in the existing local credential store. Local cancellation prevents late callbacks and exchange responses from signing the user in. diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md index bdff242802..63c2ec09f0 100644 --- a/packages/credentials/deepseek-account-platform/README.zh.md +++ b/packages/credentials/deepseek-account-platform/README.zh.md @@ -13,6 +13,8 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导 `desktopPlatform` 默认为 `null`。Desktop profile 提供 `darwin` 或 `win32`,使 Host 的授权、资料、余额和退登请求携带 `x-client-platform: desktop-mac` 或 `desktop-win`,覆盖部署配置中的同名请求头。内嵌 Platform 的文档与 API 请求仅向配置来源发送相同的平台请求头,同时保留其他部署请求头;其他 profile 不自动添加平台请求头。 +资料和余额接口返回 HTTP 401 时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。 + ## 概述 通过系统浏览器登录,并将账号凭证保存在现有本地凭证存储中。本地取消会阻止迟到的回调和兑换响应使用户登录。 diff --git a/packages/credentials/deepseek-account-platform/src/details.ts b/packages/credentials/deepseek-account-platform/src/details.ts index d77606bd7b..a7847d0ca8 100644 --- a/packages/credentials/deepseek-account-platform/src/details.ts +++ b/packages/credentials/deepseek-account-platform/src/details.ts @@ -1,7 +1,7 @@ /** Platform Web profile and wallet queries projected for account UI consumers. */ import { z } from 'zod' import type { AccountDetails, AccountProfile, AccountUserId } from '@deepseek-ai/dsh-deepseek-account/types' -import { PlatformAuthError, requestAccount } from './protocol.ts' +import { AccountUnauthorizedError, PlatformAuthError, requestAccount } from './protocol.ts' const user = z.object({ id: z.string().nullish(), @@ -48,10 +48,14 @@ const queries: { [K in keyof AccountDetails]: { * @param signal - request and credential lifetime. * @param headers - validated deployment headers for the configured origin. * @returns sanitized query outcome; failure never becomes a zero balance. + * @throws AccountUnauthorizedError when Platform rejects the stored token with HTTP 401. */ export async function readAccountDetail(field: K, origin: string, token: string, signal: AbortSignal, headers: Record): Promise { const query = queries[field] try { return query.parse(await requestAccount(origin, query.path, token, signal, headers)) } - catch { return { status: 'failed' } } + catch (error) { + if (error instanceof AccountUnauthorizedError) throw error + return { status: 'failed' } + } } diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index 835b79d7da..c41ec18100 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -10,6 +10,7 @@ import { z } from 'zod' import { DeepSeekAccount, desktopClientHeaders, mergePlatformCookies, type PlatformSession, type AccountDetails, type AccountView, type SignInAttemptId, type SignInAttemptView } from '@deepseek-ai/dsh-deepseek-account' import { credentialKey } from '@deepseek-ai/dsh-credentials' import type { AuthorizationSession } from '@deepseek-ai/dsh-authorization' +import { AccountUnauthorizedError } from './protocol.ts' import { profile, readAccountDetail } from './details.ts' import { revokeAccount, type LogoutRetryPolicy } from './logout.ts' import { PlatformAuthError, platformHeaders, platformOrigin, browserUrl, requestPlatform, initialization, exchange, loginOrigin } from './protocol.ts' @@ -98,6 +99,7 @@ export class PlatformAccount extends DeepSeekAccount { private detailsLifetime = new AbortController() private closed = false private removing: Promise | undefined + private signOutReason: 'expired' | undefined /** @param ctx - Host with authorization and credentials services. @param config - deployment options. */ constructor(ctx: Context, config: Config = {}) { @@ -170,6 +172,7 @@ export class PlatformAccount extends DeepSeekAccount { throw new PlatformAuthError('storage') } return { + ...(record === undefined && this.signOutReason !== undefined ? { signOutReason: this.signOutReason } : {}), status: record === undefined ? 'signed-out' : 'credential-stored', attempt: this.attempt?.view ?? null, links: { usageUrl: new URL('/usage', this.origin).href, topUpUrl: new URL('/top_up', this.origin).href }, } @@ -200,10 +203,34 @@ export class PlatformAccount extends DeepSeekAccount { delete this.attempt.initialProfile return initial as AccountDetails[K] } - const details = await readAccountDetail(field, this.origin, parsed.data.token, - AbortSignal.any([lifetime.signal, AbortSignal.timeout(this.requestTimeout)]), - { ...this.accountRequestHeaders, ...this.clientHeaders }) - return this.detailsLifetime !== lifetime ? null : details + try { + const details = await readAccountDetail(field, this.origin, parsed.data.token, + AbortSignal.any([lifetime.signal, AbortSignal.timeout(this.requestTimeout)]), + { ...this.accountRequestHeaders, ...this.clientHeaders }) + return this.detailsLifetime !== lifetime ? null : details + } catch (error) { + if (!(error instanceof AccountUnauthorizedError)) throw error + if (this.detailsLifetime === lifetime) await this.expireCredential(parsed.data.token, lifetime) + return null + } + } + + private async expireCredential(token: string, lifetime: AbortController): Promise { + this.removing ??= (async () => { + if (this.attempt !== undefined) await this.cancelSignIn(this.attempt.view.id) + const record = await this.ctx.credentials.readRecord(KEY) + if (this.closed || this.detailsLifetime !== lifetime || record?.kind !== 'grant') return this.getState() + const current = grant.parse(record.payload) + if (current.token !== token || current.issuer !== this.origin) return this.getState() + this.signOutReason = 'expired' + try { await this.ctx.credentials.deleteRecord(KEY) } + catch (error) { this.signOutReason = undefined; throw error } + this.attempt = undefined + this.ctx.emit('deepseek-account/signed-out') + this.changed() + return this.getState() + })().finally(() => { this.removing = undefined }) + await this.removing } override async getPlatformSession(): Promise { @@ -241,6 +268,7 @@ export class PlatformAccount extends DeepSeekAccount { override async startSignIn(locale: string, callbackOrigin: string, loginSource: 'web' | 'desktop'): Promise { if (this.removing !== undefined) await this.removing + this.signOutReason = undefined const origin = loginOrigin(callbackOrigin) if (this.closed) throw new PlatformAuthError('protocol') if (this.attempt !== undefined && ['initializing', 'waiting-browser', 'exchanging', 'committing'].includes(this.attempt.view.phase)) { @@ -299,6 +327,7 @@ export class PlatformAccount extends DeepSeekAccount { } override signOut(): Promise { + this.signOutReason = undefined this.removing ??= (async () => { if (this.closed) throw new PlatformAuthError('protocol') if (this.attempt !== undefined) await this.cancelSignIn(this.attempt.view.id) diff --git a/packages/credentials/deepseek-account-platform/src/protocol.ts b/packages/credentials/deepseek-account-platform/src/protocol.ts index c437f67ac3..092518c4ad 100644 --- a/packages/credentials/deepseek-account-platform/src/protocol.ts +++ b/packages/credentials/deepseek-account-platform/src/protocol.ts @@ -7,6 +7,11 @@ export class PlatformAuthError extends Error { constructor(readonly code: 'network' | 'protocol' | 'expired' | 'storage') { super(`account: ${code}`) } } +/** An authenticated Platform request was rejected with HTTP 401. */ +export class AccountUnauthorizedError extends PlatformAuthError { + constructor() { super('expired') } +} + /** * Accept HTTPS platform endpoints, or explicitly configured loopback development HTTP. * @param value - configured origin. @@ -132,6 +137,10 @@ async function platformRequest(url: string, init: RequestInit, signal: AbortSign throw new PlatformAuthError('network') } console.info('[deepseek-account] response', { path, status: response.status }) + if (response.status === 401 && new Headers(init.headers).has('x-dsh-auth-token')) { + await response.body?.cancel() + throw new AccountUnauthorizedError() + } if (!response.ok || response.body === null) { await response.body?.cancel() throw new PlatformAuthError('network') diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index d04dc498ce..e690a5ccfc 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -45,6 +45,7 @@ async function fixture( let origin = '' let detailsHold = false let balanceHold = false + let detailStatus = 200 let profileFailed = false let summaryFailed = false let logoutFailed = false @@ -75,8 +76,10 @@ async function fixture( } if (req.method === 'GET') { detailRequests.push({ path: req.url!, authorization: req.headers['x-dsh-auth-token'] as string | undefined }) + const status = detailStatus detailsStarted.resolve(undefined) if (detailsHold || (balanceHold && req.url === '/api/v0/users/get_user_summary')) await release.promise + if (status !== 200) { res.writeHead(status).end(); return } const value = req.url === '/auth-api/v0/users/current' ? { id: 'test-user', token: 'never-copy-response-token', ...contact, id_profile: { name: 'Test Account', picture: null } } @@ -151,6 +154,7 @@ async function fixture( ctx, account, home, origin, callbackOrigin, wait, receivedHeaders, logoutHeaders, logoutCount: () => logoutCount, holdLogout: () => { logoutHold = true }, failLogout: (failed: boolean) => { logoutFailed = failed }, detailRequests, detailsStarted, + detailStatus: (status: number) => { detailStatus = status }, failProfile: (failed: boolean) => { profileFailed = failed }, holdBalance: () => { balanceHold = true }, holdDetails: () => { detailsHold = true }, failSummary: () => { summaryFailed = true }, @@ -801,3 +805,54 @@ it.each([undefined, [{ currency: 'EUR', balance: '1' }], [{ currency: 'CNY', bal expect(await f.account.getBalance()).toEqual({ status: 'failed' }) }, ) + +it.each(['profile', 'balance'] as const)('clears the rejected account grant after a %s HTTP 401', async (field) => { + const f = await fixture() + await storeAccount(f) + let signedOut = 0 + f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + f.detailStatus(401) + expect(await (field === 'profile' ? f.account.getProfile() : f.account.getBalance())).toBeNull() + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired', attempt: null }) + expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))).toBeUndefined() + expect(signedOut).toBe(1) +}) + +it('coalesces simultaneous unauthorized profile and balance responses', async () => { + const f = await fixture() + await storeAccount(f) + let signedOut = 0 + f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + f.detailStatus(401) + await Promise.all([f.account.getProfile(), f.account.getBalance()]) + expect(signedOut).toBe(1) + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired' }) +}) + +it.each([403, 500])('retains the account grant after HTTP %s', async (status) => { + const f = await fixture() + await storeAccount(f) + f.detailStatus(status) + expect(await f.account.getBalance()).toEqual({ status: 'failed' }) + expect(await f.account.getState()).toMatchObject({ status: 'credential-stored' }) +}) + +it('does not remove a replacement grant when an older request is rejected', async () => { + const f = await fixture() + await storeAccount(f) + f.detailStatus(401) + f.holdDetails() + const pending = f.account.getBalance() + try { + await f.detailsStarted.promise + await f.ctx.credentials.modifyRecord(credentialKey('deepseek-account-platform', 'default'), () => Promise.resolve({ + kind: 'grant', payload: { version: 1, issuer: f.origin, token: 'replacement-grant' }, + })) + } finally { + f.release.resolve(undefined) + } + expect(await pending).toBeNull() + expect(await f.account.getState()).toMatchObject({ status: 'credential-stored' }) + expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))) + .toMatchObject({ kind: 'grant', payload: { token: 'replacement-grant' } }) +}) diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index 4841809a90..c2ae5249f5 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account/README.md -README.md: 52bc8e15ee72282b79c0b8823b56476650cdf728 -README.zh.md: 427b4a22aaf1ed503d41e90d0db600d220ef931e +README.md: bfebbc1ca9fa7cdfedbfbef7b6ca5f696043752c +README.zh.md: dd1fe65c17a89a73132380d663743601dd0ec3d5 diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md index 52bc8e15ee..bfebbc1ca9 100644 --- a/packages/credentials/deepseek-account/README.md +++ b/packages/credentials/deepseek-account/README.md @@ -11,6 +11,8 @@ getPlatformSession returns a Host-only origin/token snapshot for native Platform `desktopClientHeaders` maps the native `darwin` and `win32` platforms to the shared Desktop account and update-policy request header; `null` adds no header. +`AccountView.signOutReason` identifies a server-expired credential separately from explicit sign-out; it is absent while signed in. + ## Summary Account consumers read stored login state, start or cancel a browser login, and sign out without editing API keys. Host model consumers resolve account credentials only for the provider-configured inference origin. diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md index 427b4a22aa..dd1fe65c17 100644 --- a/packages/credentials/deepseek-account/README.zh.md +++ b/packages/credentials/deepseek-account/README.zh.md @@ -11,6 +11,8 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token `desktopClientHeaders` 将原生平台 `darwin` 和 `win32` 映射为 Desktop 账号与更新策略请求共用的请求头;`null` 不添加请求头。 +`AccountView.signOutReason` 区分服务端判定凭据失效和主动退登;登录状态下不携带该字段。 + ## 概述 账号使用方可读取本地登录状态、发起或取消浏览器登录,并在保留 API Key 的情况下退出。Host 模型使用方仅能为提供者配置的推理来源解析账号凭证。 diff --git a/packages/credentials/deepseek-account/src/types.ts b/packages/credentials/deepseek-account/src/types.ts index f59c959567..7bc5f624f9 100644 --- a/packages/credentials/deepseek-account/src/types.ts +++ b/packages/credentials/deepseek-account/src/types.ts @@ -21,6 +21,8 @@ export interface AccountLinks { /** Stored-account presence is not a claim that the server has validated its token. */ export interface AccountView { readonly status: 'signed-out' | 'credential-stored' + /** Server rejection cleared the local credential. */ + readonly signOutReason?: 'expired' readonly links: AccountLinks readonly attempt: SignInAttemptView | null } diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index f05c4ed4f6..53b23dd9f8 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -4130,7 +4130,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'AccountView', - declaration: 'export interface AccountView {\n readonly status: \'signed-out\' | \'credential-stored\';\n readonly links: AccountLinks;\n readonly attempt: SignInAttemptView | null;\n}', + declaration: 'export interface AccountView {\n readonly status: \'signed-out\' | \'credential-stored\';\n readonly signOutReason?: \'expired\';\n readonly links: AccountLinks;\n readonly attempt: SignInAttemptView | null;\n}', }, { name: 'AccountWallet', From bc8e8005fc4d17a2ec4046c7103256ac43878c00 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 15:19:29 +0800 Subject: [PATCH 13/60] docs: refresh module graph for account provider dependencies --- docs/module-graph.i18n.yaml | 4 ++-- docs/module-graph.md | 32 +++++++++++++++++--------------- docs/module-graph.zh.md | 32 +++++++++++++++++--------------- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/docs/module-graph.i18n.yaml b/docs/module-graph.i18n.yaml index 6ae367c64a..19bba03247 100644 --- a/docs/module-graph.i18n.yaml +++ b/docs/module-graph.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/module-graph.md -module-graph.md: bfe3e5faa7168b03848ac76d2dd2584d4aa31f5e -module-graph.zh.md: bfa0f83e14cbcf89599fa207ec919195128db49e +module-graph.md: 7ccaa6d9eb060fadf75f581c6837cb7d06bd9e61 +module-graph.zh.md: 0e2ff4f1ea5780f7adc11693d7a97c39b37b0c3b diff --git a/docs/module-graph.md b/docs/module-graph.md index bfe3e5faa7..7ccaa6d9eb 100644 --- a/docs/module-graph.md +++ b/docs/module-graph.md @@ -460,8 +460,6 @@ flowchart TD pkg_web_search_exa --> pkg_web pkg_web_search_perplexity --> pkg_launch_environment pkg_web_search_perplexity --> pkg_web - pkg_api_account_controller --> pkg_deepseek_account - pkg_api_account_controller --> pkg_typert_protocol pkg_api_remotes --> pkg_scope pkg_api_terminal_controller --> pkg_subprocess pkg_attachment_local --> pkg_attachment @@ -546,17 +544,6 @@ flowchart TD pkg_workspace --> pkg_storage pkg_workspace --> pkg_storage_domain pkg_workspace --> pkg_typert_protocol - pkg_llm_deepseek --> pkg_anonymous_user_id - pkg_llm_deepseek --> pkg_atomic_write - pkg_llm_deepseek --> pkg_attachment - pkg_llm_deepseek --> pkg_credentials - pkg_llm_deepseek --> pkg_deepseek_account - pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions - pkg_llm_deepseek --> pkg_fs - pkg_llm_deepseek --> pkg_home_paths - pkg_llm_deepseek --> pkg_launch_environment - pkg_llm_deepseek --> pkg_llm - pkg_llm_deepseek --> pkg_timeout pkg_llm_pi_ai --> pkg_attachment pkg_llm_pi_ai --> pkg_authorization pkg_llm_pi_ai --> pkg_credentials @@ -609,6 +596,18 @@ flowchart TD pkg_pwsh_local --> pkg_shell pkg_pwsh_local --> pkg_subprocess pkg_pwsh_local --> pkg_timeout + pkg_llm_deepseek --> pkg_agent + pkg_llm_deepseek --> pkg_anonymous_user_id + pkg_llm_deepseek --> pkg_atomic_write + pkg_llm_deepseek --> pkg_attachment + pkg_llm_deepseek --> pkg_credentials + pkg_llm_deepseek --> pkg_deepseek_account + pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions + pkg_llm_deepseek --> pkg_fs + pkg_llm_deepseek --> pkg_home_paths + pkg_llm_deepseek --> pkg_launch_environment + pkg_llm_deepseek --> pkg_llm + pkg_llm_deepseek --> pkg_timeout pkg_llm_retry --> pkg_agent pkg_llm_retry --> pkg_brand pkg_llm_retry --> pkg_invariants @@ -631,6 +630,9 @@ flowchart TD pkg_web_search_deepseek --> pkg_launch_environment pkg_web_search_deepseek --> pkg_session pkg_web_search_deepseek --> pkg_web + pkg_api_account_controller --> pkg_agent + pkg_api_account_controller --> pkg_deepseek_account + pkg_api_account_controller --> pkg_typert_protocol pkg_file_reference --> pkg_agent pkg_time_context --> pkg_agent pkg_time_context --> pkg_invariants @@ -1475,7 +1477,6 @@ flowchart TD | [`web-fetch-http`](../packages/web/web-fetch-http) | `web` | [`http-proxy`](../packages/util/http-proxy), [`timeout`](../packages/util/timeout), [`web`](../packages/web/web) | | [`web-search-exa`](../packages/web/web-search-exa) | `web` | [`launch-environment`](../packages/util/launch-environment), [`web`](../packages/web/web) | | [`web-search-perplexity`](../packages/web/web-search-perplexity) | `web` | [`launch-environment`](../packages/util/launch-environment), [`web`](../packages/web/web) | -| [`api-account-controller`](../packages/api/account-controller) | `api` | [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`api-remotes`](../packages/api/remotes) | `api` | [`scope`](../packages/core/scope) | | [`api-terminal-controller`](../packages/api/terminal-controller) | `api` | [`subprocess`](../packages/subprocess/subprocess) | | [`attachment-local`](../packages/attachment/attachment-local) | `attachment` | [`attachment`](../packages/attachment/attachment), [`home-paths`](../packages/util/home-paths) | @@ -1515,7 +1516,6 @@ flowchart TD | [`session-turn-outline`](../packages/session/session-turn-outline) | `session` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`shell`](../packages/shell/shell) | `shell` | [`sandbox`](../packages/sandbox/sandbox), [`subprocess`](../packages/subprocess/subprocess) | | [`workspace`](../packages/workspace/workspace) | `workspace` | [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`storage`](../packages/storage/storage), [`storage-domain`](../packages/storage/storage-domain), [`typert-protocol`](../packages/typert/protocol) | -| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | `llm` | [`attachment`](../packages/attachment/attachment), [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`fs`](../packages/fs/fs), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`agent`](../packages/core/agent) | `core` | [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol), [`util-values`](../packages/util/values), [`workspace`](../packages/workspace/workspace) | | [`fs-local`](../packages/fs/fs-local) | `fs` | [`fs`](../packages/fs/fs) | @@ -1530,10 +1530,12 @@ flowchart TD | [`lsp-stdio`](../packages/lsp/lsp-stdio) | `lsp` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`lsp`](../packages/lsp/lsp), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`bash-local`](../packages/shell/bash-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`pwsh-local`](../packages/shell/pwsh-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | +| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`agent`](../packages/core/agent), [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-retry`](../packages/llm/llm-retry) | `llm` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`timeout`](../packages/util/timeout) | | [`agent-default-model`](../packages/core/agent-default-model) | `core` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm) | | [`goal`](../packages/goal/goal) | `goal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`typert-protocol`](../packages/typert/protocol) | | [`web-search-deepseek`](../packages/web/web-search-deepseek) | `web` | [`agent`](../packages/core/agent), [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`session`](../packages/core/session), [`web`](../packages/web/web) | +| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`file-reference`](../packages/context/file-reference) | `context` | [`agent`](../packages/core/agent) | | [`time-context`](../packages/context/time-context) | `context` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`tmux-context`](../packages/context/tmux-context) | `context` | [`agent`](../packages/core/agent), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell) | diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md index bfa0f83e14..0e2ff4f1ea 100644 --- a/docs/module-graph.zh.md +++ b/docs/module-graph.zh.md @@ -462,8 +462,6 @@ flowchart TD pkg_web_search_exa --> pkg_web pkg_web_search_perplexity --> pkg_launch_environment pkg_web_search_perplexity --> pkg_web - pkg_api_account_controller --> pkg_deepseek_account - pkg_api_account_controller --> pkg_typert_protocol pkg_api_remotes --> pkg_scope pkg_api_terminal_controller --> pkg_subprocess pkg_attachment_local --> pkg_attachment @@ -548,17 +546,6 @@ flowchart TD pkg_workspace --> pkg_storage pkg_workspace --> pkg_storage_domain pkg_workspace --> pkg_typert_protocol - pkg_llm_deepseek --> pkg_anonymous_user_id - pkg_llm_deepseek --> pkg_atomic_write - pkg_llm_deepseek --> pkg_attachment - pkg_llm_deepseek --> pkg_credentials - pkg_llm_deepseek --> pkg_deepseek_account - pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions - pkg_llm_deepseek --> pkg_fs - pkg_llm_deepseek --> pkg_home_paths - pkg_llm_deepseek --> pkg_launch_environment - pkg_llm_deepseek --> pkg_llm - pkg_llm_deepseek --> pkg_timeout pkg_llm_pi_ai --> pkg_attachment pkg_llm_pi_ai --> pkg_authorization pkg_llm_pi_ai --> pkg_credentials @@ -611,6 +598,18 @@ flowchart TD pkg_pwsh_local --> pkg_shell pkg_pwsh_local --> pkg_subprocess pkg_pwsh_local --> pkg_timeout + pkg_llm_deepseek --> pkg_agent + pkg_llm_deepseek --> pkg_anonymous_user_id + pkg_llm_deepseek --> pkg_atomic_write + pkg_llm_deepseek --> pkg_attachment + pkg_llm_deepseek --> pkg_credentials + pkg_llm_deepseek --> pkg_deepseek_account + pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions + pkg_llm_deepseek --> pkg_fs + pkg_llm_deepseek --> pkg_home_paths + pkg_llm_deepseek --> pkg_launch_environment + pkg_llm_deepseek --> pkg_llm + pkg_llm_deepseek --> pkg_timeout pkg_llm_retry --> pkg_agent pkg_llm_retry --> pkg_brand pkg_llm_retry --> pkg_invariants @@ -633,6 +632,9 @@ flowchart TD pkg_web_search_deepseek --> pkg_launch_environment pkg_web_search_deepseek --> pkg_session pkg_web_search_deepseek --> pkg_web + pkg_api_account_controller --> pkg_agent + pkg_api_account_controller --> pkg_deepseek_account + pkg_api_account_controller --> pkg_typert_protocol pkg_file_reference --> pkg_agent pkg_time_context --> pkg_agent pkg_time_context --> pkg_invariants @@ -1477,7 +1479,6 @@ flowchart TD | [`web-fetch-http`](../packages/web/web-fetch-http) | `web` | [`http-proxy`](../packages/util/http-proxy), [`timeout`](../packages/util/timeout), [`web`](../packages/web/web) | | [`web-search-exa`](../packages/web/web-search-exa) | `web` | [`launch-environment`](../packages/util/launch-environment), [`web`](../packages/web/web) | | [`web-search-perplexity`](../packages/web/web-search-perplexity) | `web` | [`launch-environment`](../packages/util/launch-environment), [`web`](../packages/web/web) | -| [`api-account-controller`](../packages/api/account-controller) | `api` | [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`api-remotes`](../packages/api/remotes) | `api` | [`scope`](../packages/core/scope) | | [`api-terminal-controller`](../packages/api/terminal-controller) | `api` | [`subprocess`](../packages/subprocess/subprocess) | | [`attachment-local`](../packages/attachment/attachment-local) | `attachment` | [`attachment`](../packages/attachment/attachment), [`home-paths`](../packages/util/home-paths) | @@ -1517,7 +1518,6 @@ flowchart TD | [`session-turn-outline`](../packages/session/session-turn-outline) | `session` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`shell`](../packages/shell/shell) | `shell` | [`sandbox`](../packages/sandbox/sandbox), [`subprocess`](../packages/subprocess/subprocess) | | [`workspace`](../packages/workspace/workspace) | `workspace` | [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`storage`](../packages/storage/storage), [`storage-domain`](../packages/storage/storage-domain), [`typert-protocol`](../packages/typert/protocol) | -| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | `llm` | [`attachment`](../packages/attachment/attachment), [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`fs`](../packages/fs/fs), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`agent`](../packages/core/agent) | `core` | [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol), [`util-values`](../packages/util/values), [`workspace`](../packages/workspace/workspace) | | [`fs-local`](../packages/fs/fs-local) | `fs` | [`fs`](../packages/fs/fs) | @@ -1532,10 +1532,12 @@ flowchart TD | [`lsp-stdio`](../packages/lsp/lsp-stdio) | `lsp` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`lsp`](../packages/lsp/lsp), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`bash-local`](../packages/shell/bash-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`pwsh-local`](../packages/shell/pwsh-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | +| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`agent`](../packages/core/agent), [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-retry`](../packages/llm/llm-retry) | `llm` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`timeout`](../packages/util/timeout) | | [`agent-default-model`](../packages/core/agent-default-model) | `core` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm) | | [`goal`](../packages/goal/goal) | `goal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`typert-protocol`](../packages/typert/protocol) | | [`web-search-deepseek`](../packages/web/web-search-deepseek) | `web` | [`agent`](../packages/core/agent), [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`session`](../packages/core/session), [`web`](../packages/web/web) | +| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`file-reference`](../packages/context/file-reference) | `context` | [`agent`](../packages/core/agent) | | [`time-context`](../packages/context/time-context) | `context` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`tmux-context`](../packages/context/tmux-context) | `context` | [`agent`](../packages/core/agent), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell) | From 43f107d164ce69a24c98f65b8835ce43982f7647 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 15:27:38 +0800 Subject: [PATCH 14/60] fix(account): expire grants rejected by Platform response code --- .../deepseek-account-platform/README.i18n.yaml | 4 ++-- .../deepseek-account-platform/README.md | 2 +- .../deepseek-account-platform/README.zh.md | 2 +- .../deepseek-account-platform/src/details.ts | 2 +- .../deepseek-account-platform/src/index.ts | 2 +- .../deepseek-account-platform/src/protocol.ts | 9 +++++++-- .../tests/account.spec.ts | 15 +++++++++++++++ .../tests/authorization-response.spec.ts | 18 ++++++++++++++++++ 8 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 packages/credentials/deepseek-account-platform/tests/authorization-response.spec.ts diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index 4a5e95d0b8..1e0eb5ef40 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account-platform/README.md -README.md: 204689db355a988daa91f645c338421c50429193 -README.zh.md: 6ae778df799b6fff8e01bf46e284a537819b9412 +README.md: a7e9ef87ce59a01cef4a20b2d544a986d26a7d73 +README.zh.md: f64964af053f4ab601cdda3b90f4c15ffc360650 diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md index 204689db35..a7e9ef87ce 100644 --- a/packages/credentials/deepseek-account-platform/README.md +++ b/packages/credentials/deepseek-account-platform/README.md @@ -13,7 +13,7 @@ getPlatformSession exports the stored grant only when its issuer matches platfor `desktopPlatform` defaults to `null`. Every profile then sends `x-client-platform: web` on Host authorization, profile, balance, and logout requests; the Desktop profile supplies `darwin` or `win32`, replacing it with `x-client-platform: desktop-mac` or `desktop-win`. The provider owns that header, so deployment configuration cannot override it. Embedded Platform document and API requests receive the same platform header alongside their deployment headers, only at the configured origin. -Profile and balance HTTP 401 responses clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. +Profile and balance HTTP 401 responses or top-level response code `40003` (invalid authorization) clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. ## Summary diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md index 6ae778df79..f64964af05 100644 --- a/packages/credentials/deepseek-account-platform/README.zh.md +++ b/packages/credentials/deepseek-account-platform/README.zh.md @@ -13,7 +13,7 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导 `desktopPlatform` 默认为 `null`。此时所有 profile 的 Host 授权、资料、余额和退登请求都携带 `x-client-platform: web`;Desktop profile 提供 `darwin` 或 `win32`,改为携带 `x-client-platform: desktop-mac` 或 `desktop-win`。该请求头由 provider 拥有,部署配置无法覆盖。内嵌 Platform 的文档与 API 请求仅向配置来源发送相同的平台请求头,同时保留其他部署请求头。 -资料和余额接口返回 HTTP 401 时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。 +资料和余额接口返回 HTTP 401 或顶层响应码 `40003`(鉴权失效)时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。 ## 概述 diff --git a/packages/credentials/deepseek-account-platform/src/details.ts b/packages/credentials/deepseek-account-platform/src/details.ts index a7847d0ca8..a3638116b4 100644 --- a/packages/credentials/deepseek-account-platform/src/details.ts +++ b/packages/credentials/deepseek-account-platform/src/details.ts @@ -48,7 +48,7 @@ const queries: { [K in keyof AccountDetails]: { * @param signal - request and credential lifetime. * @param headers - validated deployment headers for the configured origin. * @returns sanitized query outcome; failure never becomes a zero balance. - * @throws AccountUnauthorizedError when Platform rejects the stored token with HTTP 401. + * @throws AccountUnauthorizedError when Platform rejects the stored token with HTTP 401 or response code 40003. */ export async function readAccountDetail(field: K, origin: string, token: string, signal: AbortSignal, headers: Record): Promise { diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index d0cc6f5d21..06896b701a 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -202,7 +202,7 @@ export class PlatformAccount extends DeepSeekAccount { { ...this.accountRequestHeaders, ...this.clientHeaders }) return this.detailsLifetime !== lifetime ? null : details } catch (_unauthorized) { - // readAccountDetail exposes only authenticated HTTP 401 failures. + // readAccountDetail exposes only authenticated credential rejection failures. if (this.detailsLifetime === lifetime) await this.expireCredential(stored.token, lifetime) return null } diff --git a/packages/credentials/deepseek-account-platform/src/protocol.ts b/packages/credentials/deepseek-account-platform/src/protocol.ts index 092518c4ad..c8e65107d8 100644 --- a/packages/credentials/deepseek-account-platform/src/protocol.ts +++ b/packages/credentials/deepseek-account-platform/src/protocol.ts @@ -7,7 +7,7 @@ export class PlatformAuthError extends Error { constructor(readonly code: 'network' | 'protocol' | 'expired' | 'storage') { super(`account: ${code}`) } } -/** An authenticated Platform request was rejected with HTTP 401. */ +/** An authenticated Platform request was rejected with HTTP 401 or code 40003. */ export class AccountUnauthorizedError extends PlatformAuthError { constructor() { super('expired') } } @@ -162,6 +162,10 @@ async function platformRequest(url: string, init: RequestInit, signal: AbortSign } stage = 'parse-json' const payload: unknown = JSON.parse(Buffer.concat(chunks).toString('utf8')) + const authorization = z.object({ code: z.literal(40003) }).safeParse(payload) + if (authorization.success && new Headers(init.headers).has('x-dsh-auth-token')) { + throw new AccountUnauthorizedError() + } const codes = z.object({ code: z.number().int(), data: z.object({ biz_code: z.number().int() }).optional() }).safeParse(payload) if (codes.success) console.info('[deepseek-account] response codes', { path, code: codes.data.code, bizCode: codes.data.data?.biz_code, @@ -182,7 +186,8 @@ async function platformRequest(url: string, init: RequestInit, signal: AbortSign } return parsed.data.data.biz_data } catch (error) { - console.info('[deepseek-account] response rejected', { path, stage, errorCode: 'protocol' }) + console.info('[deepseek-account] response rejected', { path, stage, + errorCode: error instanceof PlatformAuthError ? error.code : 'protocol' }) if (error instanceof PlatformAuthError) throw error throw new PlatformAuthError('protocol') } finally { diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index a6e90657bd..805c8ed46d 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -49,6 +49,7 @@ async function fixture( let origin = '' let detailsHold = false let balanceHold = false + let detailCode = 0 let detailStatus = 200 let profileFailed = false let summaryFailed = false @@ -84,6 +85,7 @@ async function fixture( detailsStarted.resolve(undefined) if (detailsHold || (balanceHold && req.url === '/api/v0/users/get_user_summary')) await release.promise if (status !== 200) { res.writeHead(status).end(); return } + if (detailCode !== 0) { res.end(JSON.stringify({ code: detailCode, data: null })); return } const value = req.url === '/auth-api/v0/users/current' ? { id: 'test-user', token: 'never-copy-response-token', ...contact, id_profile: { name: 'Test Account', picture: null } } @@ -159,6 +161,7 @@ async function fixture( ctx, account, home, origin, callbackOrigin, wait, receivedHeaders, logoutHeaders, logoutCount: () => logoutCount, holdLogout: () => { logoutHold = true }, failLogout: (failed: boolean) => { logoutFailed = failed }, detailRequests, detailsStarted, + detailCode: (code: number) => { detailCode = code }, detailStatus: (status: number) => { detailStatus = status }, failProfile: (failed: boolean) => { profileFailed = failed }, holdBalance: () => { balanceHold = true }, @@ -883,6 +886,18 @@ it.each(['profile', 'balance'] as const)('clears the rejected account grant afte expect(signedOut).toBe(1) }) +it.each(['profile', 'balance'] as const)('clears the rejected account grant after a %s HTTP 200 with code 40003', async (field) => { + const f = await fixture() + await storeAccount(f) + let signedOut = 0 + f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + f.detailCode(40003) + expect(await (field === 'profile' ? f.account.getProfile() : f.account.getBalance())).toBeNull() + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired', attempt: null }) + expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))).toBeUndefined() + expect(signedOut).toBe(1) +}) + it('coalesces simultaneous unauthorized profile and balance responses', async () => { const f = await fixture() await storeAccount(f) diff --git a/packages/credentials/deepseek-account-platform/tests/authorization-response.spec.ts b/packages/credentials/deepseek-account-platform/tests/authorization-response.spec.ts new file mode 100644 index 0000000000..f28fd25928 --- /dev/null +++ b/packages/credentials/deepseek-account-platform/tests/authorization-response.spec.ts @@ -0,0 +1,18 @@ +import { expect, it, vi } from 'vitest' +import { AccountUnauthorizedError, requestAccount, requestPlatform } from '../src/protocol.ts' + +it.each([null, undefined])('recognizes invalid authorization without requiring business data (%s)', async (data) => { + const fetcher = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response(JSON.stringify({ code: 40003, data }))) + try { + await expect(requestAccount('https://platform.deepseek.com', '/auth-api/v0/users/current', + 'fixture-token', new AbortController().signal, {})).rejects.toBeInstanceOf(AccountUnauthorizedError) + } finally { fetcher.mockRestore() } +}) + +it('does not classify an unauthenticated exchange failure as a rejected stored credential', async () => { + const fetcher = vi.spyOn(globalThis, 'fetch').mockResolvedValue(new Response(JSON.stringify({ code: 40003, data: null }))) + try { + await expect(requestPlatform('https://platform.deepseek.com', 'auth_exchange', {}, + new AbortController().signal, {})).rejects.toThrow('account: protocol') + } finally { fetcher.mockRestore() } +}) From 37d3a31e295bb93e4bf29e46b1b962c147075f95 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 15:44:26 +0800 Subject: [PATCH 15/60] fix(account): sign out on rejected inference tokens --- .../tests/platform-session.spec.ts | 1 + docs/subsystems/credentials.i18n.yaml | 4 +- docs/subsystems/credentials.md | 7 ++ docs/subsystems/credentials.zh.md | 7 ++ .../README.i18n.yaml | 4 +- .../deepseek-account-platform/README.md | 2 +- .../deepseek-account-platform/README.zh.md | 2 +- .../deepseek-account-platform/src/index.ts | 7 ++ .../tests/account.spec.ts | 36 ++++++ .../deepseek-account/README.i18n.yaml | 4 +- .../credentials/deepseek-account/README.md | 2 + .../credentials/deepseek-account/README.zh.md | 2 + .../credentials/deepseek-account/src/index.ts | 6 + .../extensions/tool-cordis/src/api-catalog.ts | 6 + packages/llm/llm-deepseek/README.i18n.yaml | 4 +- packages/llm/llm-deepseek/README.md | 2 +- packages/llm/llm-deepseek/README.zh.md | 2 +- packages/llm/llm-deepseek/src/adapter.ts | 119 ++++++++++-------- packages/llm/llm-deepseek/src/index.ts | 1 + packages/llm/llm-deepseek/src/transport.ts | 3 +- packages/llm/llm-deepseek/src/types.ts | 2 + .../llm/llm-deepseek/tests/adapter.spec.ts | 55 ++++++++ 22 files changed, 210 insertions(+), 68 deletions(-) diff --git a/apps/desktop-host/tests/platform-session.spec.ts b/apps/desktop-host/tests/platform-session.spec.ts index 3fee3c2d5e..7be4154979 100644 --- a/apps/desktop-host/tests/platform-session.spec.ts +++ b/apps/desktop-host/tests/platform-session.spec.ts @@ -20,6 +20,7 @@ class Account extends DeepSeekAccount { override async startSignIn() { return state } override async cancelSignIn() { return state } override async signOut() { return state } + override async rejectToken() {} override async resolveToken() { return undefined } override async getPlatformSession() { this.reading.resolve(undefined); return this.read() } override async *watch(signal: AbortSignal) { diff --git a/docs/subsystems/credentials.i18n.yaml b/docs/subsystems/credentials.i18n.yaml index 186e3f2fb6..509edf1de2 100644 --- a/docs/subsystems/credentials.i18n.yaml +++ b/docs/subsystems/credentials.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/credentials.md -credentials.md: bce883640da863b5d0cc7e5657ee2fcff9eec661 -credentials.zh.md: 58ed1e1d1df217f0ecdecc06a55e36447ad28d99 +credentials.md: f6d510d48ec92feb28cc3af8820a1e497fad2cdd +credentials.zh.md: 7040fe28cb930a0f2dce9a092124fa24e72cf767 diff --git a/docs/subsystems/credentials.md b/docs/subsystems/credentials.md index bce883640d..f6d510d48e 100644 --- a/docs/subsystems/credentials.md +++ b/docs/subsystems/credentials.md @@ -320,6 +320,13 @@ abstract watch(signal: AbortSignal): AsyncIterable */ abstract resolveToken(url: string): Promise +/** + * Remove an inference-rejected token only while it still matches the stored login. + * @param token - token captured by the rejected inference request. + * @returns after matching credentials are removed and expiry state is published. + */ +abstract rejectToken(token: string): Promise + /** * Read credentials for the configured Platform origin, bound to their issuing environment. * @returns a Host-only snapshot, or null while signed out. diff --git a/docs/subsystems/credentials.zh.md b/docs/subsystems/credentials.zh.md index 58ed1e1d1d..7040fe28cb 100644 --- a/docs/subsystems/credentials.zh.md +++ b/docs/subsystems/credentials.zh.md @@ -320,6 +320,13 @@ abstract watch(signal: AbortSignal): AsyncIterable */ abstract resolveToken(url: string): Promise +/** + * Remove an inference-rejected token only while it still matches the stored login. + * @param token - token captured by the rejected inference request. + * @returns after matching credentials are removed and expiry state is published. + */ +abstract rejectToken(token: string): Promise + /** * Read credentials for the configured Platform origin, bound to their issuing environment. * @returns a Host-only snapshot, or null while signed out. diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index 1e0eb5ef40..69ffd59af5 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account-platform/README.md -README.md: a7e9ef87ce59a01cef4a20b2d544a986d26a7d73 -README.zh.md: f64964af053f4ab601cdda3b90f4c15ffc360650 +README.md: ecb4f9616bc9da0d25d5d8f70690efa983b35279 +README.zh.md: e384b982def75b07bb7290ca1bf70b1b4d144c70 diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md index a7e9ef87ce..ecb4f9616b 100644 --- a/packages/credentials/deepseek-account-platform/README.md +++ b/packages/credentials/deepseek-account-platform/README.md @@ -13,7 +13,7 @@ getPlatformSession exports the stored grant only when its issuer matches platfor `desktopPlatform` defaults to `null`. Every profile then sends `x-client-platform: web` on Host authorization, profile, balance, and logout requests; the Desktop profile supplies `darwin` or `win32`, replacing it with `x-client-platform: desktop-mac` or `desktop-win`. The provider owns that header, so deployment configuration cannot override it. Embedded Platform document and API requests receive the same platform header alongside their deployment headers, only at the configured origin. -Profile and balance HTTP 401 responses or top-level response code `40003` (invalid authorization) clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. +Profile and balance HTTP 401 responses or top-level response code `40003` (invalid authorization) clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. Host inference consumers can report a rejected request token through `rejectToken`; removal requires that it still matches the stored login. ## Summary diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md index f64964af05..e384b982de 100644 --- a/packages/credentials/deepseek-account-platform/README.zh.md +++ b/packages/credentials/deepseek-account-platform/README.zh.md @@ -13,7 +13,7 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导 `desktopPlatform` 默认为 `null`。此时所有 profile 的 Host 授权、资料、余额和退登请求都携带 `x-client-platform: web`;Desktop profile 提供 `darwin` 或 `win32`,改为携带 `x-client-platform: desktop-mac` 或 `desktop-win`。该请求头由 provider 拥有,部署配置无法覆盖。内嵌 Platform 的文档与 API 请求仅向配置来源发送相同的平台请求头,同时保留其他部署请求头。 -资料和余额接口返回 HTTP 401 或顶层响应码 `40003`(鉴权失效)时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。 +资料和余额接口返回 HTTP 401 或顶层响应码 `40003`(鉴权失效)时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。Host 推理调用方可以通过 `rejectToken` 报告被拒绝的请求 token;仅当它仍匹配当前登录凭据时才执行清除。 ## 概述 diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index 06896b701a..3909be12e5 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -209,6 +209,13 @@ export class PlatformAccount extends DeepSeekAccount { } + override async rejectToken(token: string): Promise { + const lifetime = this.detailsLifetime + const stored = await this.readCurrentGrant(lifetime) + if (stored?.token !== token || this.detailsLifetime !== lifetime) return + await this.expireCredential(token, lifetime) + } + private async expireCredential(token: string, lifetime: AbortController): Promise { this.removing ??= (async () => { if (this.attempt !== undefined) await this.cancelSignIn(this.attempt.view.id) diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index 805c8ed46d..5d80023af5 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -1346,3 +1346,39 @@ it('ignores a 401 whose response cleanup overlaps a credential replacement', asy .toMatchObject({ kind: 'grant', payload: { token: 'new-login' } }) } finally { cleanup.mockRestore(); fetchResponse.mockRestore() } }) + +it('expires an inference-rejected token without another Platform request', async () => { + const f = await fixture() + await storeAccount(f) + const published: string[] = [] + f.ctx.on('deepseek-account/signed-out', () => { published.push('signed-out') }) + await f.account.rejectToken('test-platform-grant') + const state = await f.account.getState() + expect({ status: state.status, reason: state.signOutReason, published, detailRequests: f.detailRequests }) + .toMatchInlineSnapshot(` + { + "detailRequests": [], + "published": [ + "signed-out", + ], + "reason": "expired", + "status": "signed-out", + } + `) +}) + +it('retains a replacement login when inference rejects the previous token', async () => { + const f = await fixture() + await storeAccount(f) + await f.account.rejectToken('previous-platform-grant') + expect(await f.account.getState()).toMatchObject({ status: 'credential-stored' }) + expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))) + .toMatchObject({ kind: 'grant', payload: { token: 'test-platform-grant' } }) +}) + +it('ignores an inference rejection while already signed out', async () => { + const f = await fixture() + await f.account.rejectToken('previous-platform-grant') + expect(await f.account.getState()).toMatchObject({ status: 'signed-out' }) + expect((await f.account.getState()).signOutReason).toBeUndefined() +}) diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index 0289b83b50..04ef86deeb 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account/README.md -README.md: 85b4c9a7eca12358b425ccf7db092ae71ec98465 -README.zh.md: f29d1becdb258bfd6bc3b833d6e723f1f9e0e8f1 +README.md: eabed7ba74cc9995a46e42eb13eb238a06ec0359 +README.zh.md: 0f48d6286e8eec9d375439e052272e10f2871806 diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md index 85b4c9a7ec..eabed7ba74 100644 --- a/packages/credentials/deepseek-account/README.md +++ b/packages/credentials/deepseek-account/README.md @@ -11,6 +11,8 @@ getPlatformSession returns a Host-only origin/token snapshot for native Platform `desktopClientHeaders` maps the native `darwin` and `win32` platforms to the shared Desktop account and update-policy request header; `null` adds no header. +`rejectToken` accepts a Host inference request’s rejected token and removes only the matching current login; a late rejection cannot clear a replacement credential. + `AccountView.signOutReason` identifies a server-expired credential separately from explicit sign-out; it is absent while signed in. ## Summary diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md index f29d1becdb..0f48d6286e 100644 --- a/packages/credentials/deepseek-account/README.zh.md +++ b/packages/credentials/deepseek-account/README.zh.md @@ -11,6 +11,8 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token `desktopClientHeaders` 将原生平台 `darwin` 和 `win32` 映射为 Desktop 账号与更新策略请求共用的请求头;`null` 不添加请求头。 +`rejectToken` 接收 Host 推理请求被拒绝的 token,仅删除与它匹配的当前登录凭据;延迟返回的拒绝不能清除替换后的凭据。 + `AccountView.signOutReason` 区分服务端判定凭据失效和主动退登;登录状态下不携带该字段。 ## 概述 diff --git a/packages/credentials/deepseek-account/src/index.ts b/packages/credentials/deepseek-account/src/index.ts index 6ae86556c7..f876c749c8 100644 --- a/packages/credentials/deepseek-account/src/index.ts +++ b/packages/credentials/deepseek-account/src/index.ts @@ -75,6 +75,12 @@ export abstract class DeepSeekAccount extends Service { * @returns stored token, or undefined for other origins or a signed-out account. */ abstract resolveToken(url: string): Promise + /** + * Remove an inference-rejected token only while it still matches the stored login. + * @param token - token captured by the rejected inference request. + * @returns after matching credentials are removed and expiry state is published. + */ + abstract rejectToken(token: string): Promise /** * Read credentials for the configured Platform origin, bound to their issuing environment. * @returns a Host-only snapshot, or null while signed out. diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 5c4b0b05d8..6de43328f2 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -901,6 +901,12 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ parameters: [{ name: 'url', description: 'actual request destination or API base URL.' }], returns: 'stored token, or undefined for other origins or a signed-out account.', }, + { + signature: 'abstract rejectToken(token: string): Promise', + description: 'Remove an inference-rejected token only while it still matches the stored login.', + parameters: [{ name: 'token', description: 'token captured by the rejected inference request.' }], + returns: 'after matching credentials are removed and expiry state is published.', + }, { signature: 'abstract getPlatformSession(): Promise', description: 'Read credentials for the configured Platform origin, bound to their issuing environment.', diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index d43739e1f4..765dd5a54a 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 6a3e89788a5a23a56727fb41615898993939ef8c -README.zh.md: db364b968f33838d3f8360ec54b2cf929866be67 +README.md: 8019a8be1f0c8e1f00ae5573e350c3a7eaf1c721 +README.zh.md: 86855c49ebeb9fd3c3ca578d52eefe7b6e4c8f92 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 6a3e89788a..8019a8be1f 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -86,7 +86,7 @@ Messages sends text, thinking, tool calls, and tool results as content blocks, r `deepseek-official` resolves only its configured API-key reference. `deepseek-account` resolves only the stored grant from the [account provider](../../credentials/deepseek-account-platform/README.md), whose allowed `inferenceOrigin` defaults to `https://api.deepseek.com`. Neither route falls back to the other. Signing out removes the account grant and preserves API keys. -Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. +Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. HTTP 401 with the provider message `Authentication Fails (invalid dsh token)` becomes `ACCOUNT_TOKEN_INVALID`. On the account route, it removes the request token only if it still matches the stored login, then publishes account expiry and UI sign-out. Generic authentication errors and API-key routes do not remove account credentials. ### Streaming with thinking and images diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index db364b968f..86855c49eb 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -86,7 +86,7 @@ Messages 以内容块发送文本、思考、工具调用和工具结果,以 ` `deepseek-official` 仅解析配置的 API Key 引用。`deepseek-account` 仅解析[账号提供者](../../credentials/deepseek-account-platform/README.zh.md)保存的授权,其允许的 `inferenceOrigin` 默认为 `https://api.deepseek.com`。两条路由均不回退到另一凭证。退出登录删除账号授权,保留 API Key。 -Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。 +Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。HTTP 401 且提供方消息为 `Authentication Fails (invalid dsh token)` 时归类为 `ACCOUNT_TOKEN_INVALID`。账号路由仅在请求 token 仍匹配已存登录凭据时删除它,并发布账号过期状态和 UI 退登通知。普通鉴权错误和 API Key 路由不会删除账号凭据。 ### 带 thinking 与图片的流式调用 diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 03aa7b605b..41a2cf4a96 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -87,63 +87,72 @@ export class DeepSeekAdapter extends LlmAdapter { ) const key = await this.dependencies.resolveApiKey(connection) const accountToken = this.dependencies.accountCredential === true ? key : undefined - const files = new RequestFiles(this.files, { - baseURL: connection.baseURL, apiKey: key, accountCredential: accountToken !== undefined, - }, - connection.filePolicy, connection.filesApiTimeoutMs, signal, activity) - let inline = false - while (true) { - signal.throwIfAborted() - files.beginAttempt() - let fileIds: Awaited> | undefined - if (!inline) { - try { - fileIds = await prepareFileIds(messages, versions, files) - } catch (error) { - if (!(error instanceof FileResolutionFailure)) throw error - inline = true - continue + try { + const files = new RequestFiles(this.files, { + baseURL: connection.baseURL, apiKey: key, accountCredential: accountToken !== undefined, + }, + connection.filePolicy, connection.filesApiTimeoutMs, signal, activity) + let inline = false + while (true) { + signal.throwIfAborted() + files.beginAttempt() + let fileIds: Awaited> | undefined + if (!inline) { + try { + fileIds = await prepareFileIds(messages, versions, files) + } catch (error) { + if (!(error instanceof FileResolutionFailure)) throw error + inline = true + continue + } + } + const history = inline ? inlineImages(messages, versions, connection) : messages + const body = serialize(options, connection, history, versions, this.imageAccess, (reason) => { + this.dependencies.onReplayDegrade?.({ provider: options.provider, model: options.model, reason }) + }, fileIds) + const extensions = await prepareRequestExtensions(body as Readonly>, { + signal, + ...options.sessionId === undefined ? {} : { sessionId: String(options.sessionId) }, + ...options.purpose === undefined ? {} : { purpose: options.purpose }, + }, this.dependencies.prepareExtensions) + signal.throwIfAborted() + const response = await fetch(`${messagesApiRoot(connection.baseURL)}/messages`, { + method: 'POST', signal, body: extensions.payload, redirect: 'error', + headers: { + ...attributionHeaders(), + 'content-type': 'application/json', 'accept': 'text/event-stream', + ...accountToken === undefined ? { 'x-api-key': key } : { 'x-dsh-auth-token': accountToken }, + 'anthropic-version': '2023-06-01', + ...fileIds === undefined || fileIds.size === 0 ? {} : { 'anthropic-beta': MESSAGES_FILES_BETA }, + 'x-deepseek-harness-user-id': this.dependencies.resolveUserId(), + ...options.sessionId === undefined ? {} : { 'x-deepseek-harness-session-id': String(options.sessionId) }, + ...options.purpose === 'compaction' ? { 'x-deepseek-harness-compact': '1' } : {}, + }, + }) + if (!response.ok) { + const text = await response.text() + let raw: unknown + try { raw = JSON.parse(text) } catch (_nonJsonGatewayError) { + // HTTP status is authoritative when a gateway does not return JSON. + } + const detail = providerErrorDetail(raw) + if (await files.retry(detail)) continue + const failure = providerError(raw, response.status, response.headers) + const message = files.errorMessage(response.status, failure.message, detail) + throw new LlmError(message, failure.code, { ...failure.failure, cause: new Error(text) }) + } + await extensions.accept() + if (response.body === null) throw new LlmError('DeepSeek Messages returned no response body', 'EMPTY_RESPONSE') + yield* translate(parseSse(response.body, activity), options.model) + return + } + } catch (error) { + if (accountToken !== undefined && error instanceof LlmError && error.code === 'ACCOUNT_TOKEN_INVALID') { + try { await this.dependencies.onInvalidAccountToken?.(accountToken) } catch (_credentialRemovalFailed) { + // Credential storage failure cannot replace the inference failure. } } - const history = inline ? inlineImages(messages, versions, connection) : messages - const body = serialize(options, connection, history, versions, this.imageAccess, (reason) => { - this.dependencies.onReplayDegrade?.({ provider: options.provider, model: options.model, reason }) - }, fileIds) - const extensions = await prepareRequestExtensions(body as Readonly>, { - signal, - ...options.sessionId === undefined ? {} : { sessionId: String(options.sessionId) }, - ...options.purpose === undefined ? {} : { purpose: options.purpose }, - }, this.dependencies.prepareExtensions) - signal.throwIfAborted() - const response = await fetch(`${messagesApiRoot(connection.baseURL)}/messages`, { - method: 'POST', signal, body: extensions.payload, redirect: 'error', - headers: { - ...attributionHeaders(), - 'content-type': 'application/json', 'accept': 'text/event-stream', - ...accountToken === undefined ? { 'x-api-key': key } : { 'x-dsh-auth-token': accountToken }, - 'anthropic-version': '2023-06-01', - ...fileIds === undefined || fileIds.size === 0 ? {} : { 'anthropic-beta': MESSAGES_FILES_BETA }, - 'x-deepseek-harness-user-id': this.dependencies.resolveUserId(), - ...options.sessionId === undefined ? {} : { 'x-deepseek-harness-session-id': String(options.sessionId) }, - ...options.purpose === 'compaction' ? { 'x-deepseek-harness-compact': '1' } : {}, - }, - }) - if (!response.ok) { - const text = await response.text() - let raw: unknown - try { raw = JSON.parse(text) } catch (_nonJsonGatewayError) { - // HTTP status is authoritative when a gateway does not return JSON. - } - const detail = providerErrorDetail(raw) - if (await files.retry(detail)) continue - const failure = providerError(raw, response.status, response.headers) - const message = files.errorMessage(response.status, failure.message, detail) - throw new LlmError(message, failure.code, { ...failure.failure, cause: new Error(text) }) - } - await extensions.accept() - if (response.body === null) throw new LlmError('DeepSeek Messages returned no response body', 'EMPTY_RESPONSE') - yield* translate(parseSse(response.body, activity), options.model) - return + throw error } } } diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index 366f184e03..34a2581ece 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -89,6 +89,7 @@ export function apply(ctx: Context, config: Config): void { const resolveUserId = (): AnonymousUserId => userId ??= getOrCreateAnonymousUserId() const adapter = (accountCredential: boolean): DeepSeekAdapter => new DeepSeekAdapter({ accountCredential, + ...accountCredential ? { onInvalidAccountToken: async (token: string) => { await ctx.get('deepseekAccount')?.rejectToken(token) } } : {}, options, onReplayDegrade: ({ provider, model, reason }) => { ctx.logger.warn(`llm-deepseek: unusable Messages replay state on assistant history for route "${provider}/${model}"; sending provider-neutral content (${reason})`) diff --git a/packages/llm/llm-deepseek/src/transport.ts b/packages/llm/llm-deepseek/src/transport.ts index 935e8855df..ddae610178 100644 --- a/packages/llm/llm-deepseek/src/transport.ts +++ b/packages/llm/llm-deepseek/src/transport.ts @@ -26,7 +26,8 @@ export function providerError(raw: unknown, status: number | undefined, headers? const type = typeof error.type === 'string' ? error.type : '' const detail = `${type} ${typeof error.code === 'string' ? error.code : ''} ${message}` let code: string - if (status === 401 || status === 403 || ['authentication_error', 'permission_error'].includes(type)) code = 'AUTH' + if (status === 401 && message === 'Authentication Fails (invalid dsh token)') code = 'ACCOUNT_TOKEN_INVALID' + else if (status === 401 || status === 403 || ['authentication_error', 'permission_error'].includes(type)) code = 'AUTH' else if (isQuotaExceededError(detail) || status === 402) code = 'QUOTA' else if (status === 429 || type === 'rate_limit_error') code = 'RATE_LIMIT' else if (isContextWindowExceededError(detail)) code = 'CONTEXT_WINDOW_EXCEEDED' diff --git a/packages/llm/llm-deepseek/src/types.ts b/packages/llm/llm-deepseek/src/types.ts index 25bf19636b..8beb5030d5 100644 --- a/packages/llm/llm-deepseek/src/types.ts +++ b/packages/llm/llm-deepseek/src/types.ts @@ -86,6 +86,8 @@ export interface DeepSeekConnectionOptions { export interface DeepSeekAdapterOptions { /** Report unusable native Messages replay metadata without exposing content or signatures. */ onReplayDegrade?: (detail: { provider: string; model: string; reason: string }) => void + /** Remove a server-rejected account token if it still matches the current login; failures preserve the inference error. */ + onInvalidAccountToken?: (token: string) => Promise /** Current validated connection facts; called once per operation. */ options: () => DeepSeekConnectionOptions /** diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 088985a3ad..b051aedda6 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -277,6 +277,61 @@ describe('Cordis provider composition', () => { return { ctx, http } } + it.each(['deepseek-account', 'deepseek-official'])('reports the rejected account token only for %s', async (provider) => { + const { ctx } = await boot((response) => { + response.writeHead(401, { 'content-type': 'application/json' }) + response.end(JSON.stringify({ error: { type: 'authentication_error', message: 'Authentication Fails (invalid dsh token)' } })) + }) + const rejectToken = vi.fn(async (_token: string) => {}) + ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', + rejectToken: (token: string): Promise => rejectToken(token) } as DeepSeekAccount) + expect((await chunks(ctx.llm.stream(options({ provider })))).at(-1)).toMatchObject({ + type: 'finish', reason: { kind: 'error', failure: { code: 'ACCOUNT_TOKEN_INVALID' } }, + }) + expect(rejectToken.mock.calls).toEqual(provider === 'deepseek-account' ? [['fixture-token']] : []) + }) + + it('finishes the active account turn when rejected credentials publish sign-out', async () => { + const { ctx } = await boot((response) => { + response.writeHead(401) + response.end(JSON.stringify({ error: { message: 'Authentication Fails (invalid dsh token)' } })) + }) + ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', + rejectToken: async (_token: string): Promise => { ctx.emit('deepseek-account/signed-out') } } as DeepSeekAccount) + const agent = await ctx.agentLoop.create(SessionId('inference-account-expiry'), { provider: 'deepseek-account', model: MODEL }) + agent.followup(user('hello')) + await agent.whenIdle() + expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ + reason: { kind: 'aborted', reason: { kind: 'hook', reason: 'deepseek-account/signed-out' } }, + }) + }) + + it('preserves the inference error when rejected credential removal fails', async () => { + const { ctx } = await boot((response) => { + response.writeHead(401) + response.end(JSON.stringify({ error: { message: 'Authentication Fails (invalid dsh token)' } })) + }) + ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', + rejectToken: async (_token: string): Promise => { throw new Error('credential storage unavailable') } } as DeepSeekAccount) + expect((await chunks(ctx.llm.stream(options({ provider: 'deepseek-account' })))).at(-1)).toMatchObject({ + type: 'finish', reason: { kind: 'error', failure: { code: 'ACCOUNT_TOKEN_INVALID' } }, + }) + }) + + it('does not remove account credentials for a generic authentication error', async () => { + const { ctx } = await boot((response) => { + response.writeHead(401) + response.end(JSON.stringify({ error: { type: 'authentication_error', message: 'API key is invalid' } })) + }) + const rejectToken = vi.fn(async (_token: string) => {}) + ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', + rejectToken: (token: string): Promise => rejectToken(token) } as DeepSeekAccount) + expect((await chunks(ctx.llm.stream(options({ provider: 'deepseek-account' })))).at(-1)).toMatchObject({ + type: 'finish', reason: { kind: 'error', failure: { code: 'AUTH' } }, + }) + expect(rejectToken).not.toHaveBeenCalled() + }) + it.each([ { model: MODEL, inHistory: false }, { model: MODEL, inHistory: true }, From 64154d2f68f4c43e7a7c0a2752bfdc063abd4dc1 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 15:49:54 +0800 Subject: [PATCH 16/60] test(models): declare available fixture models and update selection flows --- apps/web/tests/deepseek-messages-settings.e2e.ts | 9 ++++----- apps/web/tests/github-ready-review.e2e.ts | 1 + apps/web/tests/onboarding-deepseek-config.e2e.ts | 5 ++--- apps/web/tests/reasoning-preview.e2e.ts | 1 + apps/web/tests/schedule-after.e2e.ts | 3 +++ apps/web/tests/shipped-composition.e2e.ts | 2 ++ apps/web/tests/streaming-fence-highlight.e2e.ts | 1 + apps/web/tests/support.ts | 6 ++++-- packages/sdk/server/tests/server.spec.ts | 5 ++++- 9 files changed, 22 insertions(+), 11 deletions(-) diff --git a/apps/web/tests/deepseek-messages-settings.e2e.ts b/apps/web/tests/deepseek-messages-settings.e2e.ts index 8e5f2a9617..93aa400f57 100644 --- a/apps/web/tests/deepseek-messages-settings.e2e.ts +++ b/apps/web/tests/deepseek-messages-settings.e2e.ts @@ -84,17 +84,16 @@ describe.skipIf(webSnapshotMode() === 'record')('web e2e: DeepSeek Messages sett expect(tripwire.pageErrors).toEqual([]) }, 60_000) - it('keeps a saved DeepSeek selection available after editing provider settings', async () => { + it('selects an available DeepSeek model after provider settings remove the default', async () => { onTestFailed(() => saveFailureShot(page, 'web-e2e-deepseek-messages-default')) await page.keyboard.press('Escape') await scaffold.ctx.agentDefaultModel.saveSelection({ provider: 'deepseek-official', model: 'deepseek-v4-flash' }) await page.reload({ waitUntil: 'load' }) const input = page.locator('[data-composer-input]').first() - await expect.poll(() => input.isEnabled()).toBe(true) - await page.getByRole('button', { name: /^选择模型/ }).click() - await page.getByRole('menuitem', { name: /模型/ }).click() + await expect.poll(() => input.getAttribute('contenteditable')).toBe('false') + await page.getByRole('button', { name: '请选择模型', exact: true }).click() await page.getByRole('menuitemradio', { name: 'Messages Flash', exact: true }).click() - await expect.poll(() => input.isEnabled()).toBe(true) + await expect.poll(() => input.getAttribute('contenteditable')).toBe('true') await expect.poll(() => scaffold.ctx.agentDefaultModel.currentSelection().provider).toBe('deepseek-official') const settings = await readFile(join(scaffold.harnessHome, 'profiles', 'scaffold', 'cordis.patch.yml'), 'utf8') expect(settings).toContain('provider: deepseek-official') diff --git a/apps/web/tests/github-ready-review.e2e.ts b/apps/web/tests/github-ready-review.e2e.ts index 1477e2ea25..8bca2a746a 100644 --- a/apps/web/tests/github-ready-review.e2e.ts +++ b/apps/web/tests/github-ready-review.e2e.ts @@ -35,6 +35,7 @@ const REPLY = 'Review complete: no actionable findings.' /** Deterministic model response for the webhook-created Session. */ class ReviewAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: MODEL, name: `${provider}/${MODEL}` }] } readonly requests: GenerateOptions[] = [] override async * stream(options: GenerateOptions): AsyncIterable { diff --git a/apps/web/tests/onboarding-deepseek-config.e2e.ts b/apps/web/tests/onboarding-deepseek-config.e2e.ts index 30cae9db7b..d0e5ddd582 100644 --- a/apps/web/tests/onboarding-deepseek-config.e2e.ts +++ b/apps/web/tests/onboarding-deepseek-config.e2e.ts @@ -273,12 +273,11 @@ describe.skipIf(MODE === 'record')('web e2e: first-run DeepSeek credential setup await page.keyboard.press('Escape') // A connected Workspace is what puts a live composer — and its model // trigger — on the page; the scaffold boots without one. - await connectFreshWorkspaceZh(page, scaffold.workspaceCwd, 'model-fallback-e2e') + await connectFreshWorkspaceZh(page, scaffold.workspaceCwd, 'model-fallback-e2e', false) - const modelTrigger = page.getByRole('button', { name: /^选择模型/ }) + const modelTrigger = page.getByRole('button', { name: '请选择模型', exact: true }) await modelTrigger.waitFor({ timeout: 10_000 }) await modelTrigger.click() - await page.getByRole('menuitem', { name: /模型/ }).click() expect(await page.getByText('Configured Flash', { exact: true }).count()).toBe(0) await page.getByRole('menuitemradio', { name: 'Private Preview' }).waitFor({ timeout: 10_000 }) expect(tripwire.warnings).toEqual([]) diff --git a/apps/web/tests/reasoning-preview.e2e.ts b/apps/web/tests/reasoning-preview.e2e.ts index 9571b51d1c..0d5911edde 100644 --- a/apps/web/tests/reasoning-preview.e2e.ts +++ b/apps/web/tests/reasoning-preview.e2e.ts @@ -14,6 +14,7 @@ const DELTAS = ['First paragraph', `\nDetails\n\n\n${SUMMARY}`, '\nMore detail'] const UI_EXPECTED = fileURLToPath(new URL('./expected/reasoning-preview/running.expected.md', import.meta.url)) class PausedReasoningAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: 'paused', name: `${provider}/paused` }] } readonly stages = DELTAS.map(text => ({ text, arrived: Promise.withResolvers(), diff --git a/apps/web/tests/schedule-after.e2e.ts b/apps/web/tests/schedule-after.e2e.ts index 5dd7bf2ccb..9ce1560f7b 100644 --- a/apps/web/tests/schedule-after.e2e.ts +++ b/apps/web/tests/schedule-after.e2e.ts @@ -92,6 +92,7 @@ function textResponse(text: string): StreamChunk[] { /** Deterministic model seam that turns one due reminder into ordinary assistant prose. */ class ReminderAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: MODEL, name: `${provider}/${MODEL}` }] } readonly requests: GenerateOptions[] = [] override async * stream(options: GenerateOptions): AsyncIterable { @@ -102,6 +103,7 @@ class ReminderAdapter extends LlmAdapter { /** Deterministic model seam for one multi-record fixed-rate batch. */ class EveryReminderAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: MODEL, name: `${provider}/${MODEL}` }] } readonly requests: GenerateOptions[] = [] override async * stream(options: GenerateOptions): AsyncIterable { @@ -137,6 +139,7 @@ function localAt(epoch: number, timeZone: string): LocalAt { /** Dynamic model seam proving request-local browser context becomes an explicit At selector. */ class BrowserZoneAtAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: MODEL, name: `${provider}/${MODEL}` }] } readonly requests: GenerateOptions[] = [] selectedAt: LocalAt | undefined scheduledAt: string | undefined diff --git a/apps/web/tests/shipped-composition.e2e.ts b/apps/web/tests/shipped-composition.e2e.ts index d1e6ecd83a..f6727eecaa 100644 --- a/apps/web/tests/shipped-composition.e2e.ts +++ b/apps/web/tests/shipped-composition.e2e.ts @@ -94,6 +94,7 @@ function textChunks(text: string): StreamChunk[] { /** Scripted same-route main model and reviewer for the shipped Auto pipeline. */ class ShippedAutoAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: AUTO_MODEL, name: AUTO_MODEL }] } readonly requests: GenerateOptions[] = [] constructor(private readonly targetPath: string) { @@ -196,6 +197,7 @@ function topLevelText(options: GenerateOptions): string { /** Same-route scripts for real one-shot, continuable, and cold-resumed children. */ class ShippedChildAutoAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: AUTO_MODEL, name: AUTO_MODEL }] } readonly requests: GenerateOptions[] = [] readonly reviews: ChildReviewObservation[] = [] private readonly children = new Map() diff --git a/apps/web/tests/streaming-fence-highlight.e2e.ts b/apps/web/tests/streaming-fence-highlight.e2e.ts index 6d65cdca0d..bff5ff0f7e 100644 --- a/apps/web/tests/streaming-fence-highlight.e2e.ts +++ b/apps/web/tests/streaming-fence-highlight.e2e.ts @@ -30,6 +30,7 @@ const REPLY = `${OPEN_REPLY}\n\`\`\`` /** Deterministic model response held after each visible fence-growth frame. */ class StreamingFenceAdapter extends LlmAdapter { + override async listModels(provider: string) { return [{ provider, id: MODEL, name: `${provider}/${MODEL}` }] } private resolveFirstPaused!: () => void private resolveFirstContinuation!: () => void private resolveSecondPaused!: () => void diff --git a/apps/web/tests/support.ts b/apps/web/tests/support.ts index 9945da66a4..83e5d25253 100644 --- a/apps/web/tests/support.ts +++ b/apps/web/tests/support.ts @@ -153,8 +153,9 @@ export async function connectFreshWorkspace(page: Page, root: string, name = 'wo * @param page - the browser page under test. * @param root - workspace parent directory. * @param name - directory created under `root` and connected. + * @param modelAvailable - require an editable composer when the selected model is available. */ -export async function connectFreshWorkspaceZh(page: Page, root: string, name = 'workspace'): Promise { +export async function connectFreshWorkspaceZh(page: Page, root: string, name = 'workspace', modelAvailable = true): Promise { mkdirSync(join(root, name), { recursive: true }) await page.getByRole('textbox', { name: '选择工作区' }).click() const dialog = page.getByRole('dialog', { name: '选择工作区目录' }) @@ -164,7 +165,8 @@ export async function connectFreshWorkspaceZh(page: Page, root: string, name = ' await pathInput.fill(join(root, name)) await pathInput.press('Enter') await dialog.getByRole('button', { name: '打开', exact: true }).click() - await page.locator('[data-composer-input][contenteditable="true"][data-placeholder="描述你想要构建的内容, / 调用指令, @ 文件或对话"]') + const editable = modelAvailable ? '[contenteditable="true"]' : '' + await page.locator(`[data-composer-input]${editable}[data-placeholder="描述你想要构建的内容, / 调用指令, @ 文件或对话"]`) .waitFor({ timeout: 15_000 }) } diff --git a/packages/sdk/server/tests/server.spec.ts b/packages/sdk/server/tests/server.spec.ts index 3448c5dc87..eb74c12243 100644 --- a/packages/sdk/server/tests/server.spec.ts +++ b/packages/sdk/server/tests/server.spec.ts @@ -922,7 +922,10 @@ describe('HarnessSdkJsonRpcServer', () => { await expect(server.initialize({ cwd: storageDir, provider: 'private', model: 'new-model' })) .rejects.toThrow('no adapter registered for provider "private"') - expect(ctx.get('llm')?.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(ctx.get('llm')?.listProviders()).toEqual([ + { id: 'deepseek-official', name: 'DeepSeek' }, + { id: 'deepseek-account', name: 'DeepSeek Account' }, + ]) await server.shutdown() } finally { await ctx.fiber.dispose() From 3e4119ebdb331ebca0a78676a3967ed3db0f3734 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 16:12:01 +0800 Subject: [PATCH 17/60] fix(account): expire account credentials on inference HTTP 401 --- packages/llm/llm-deepseek/README.i18n.yaml | 4 ++-- packages/llm/llm-deepseek/README.md | 2 +- packages/llm/llm-deepseek/README.zh.md | 2 +- packages/llm/llm-deepseek/src/adapter.ts | 3 ++- packages/llm/llm-deepseek/src/transport.ts | 3 +-- packages/llm/llm-deepseek/tests/adapter.spec.ts | 15 ++++++++++----- 6 files changed, 17 insertions(+), 12 deletions(-) diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 765dd5a54a..7381689090 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 8019a8be1f0c8e1f00ae5573e350c3a7eaf1c721 -README.zh.md: 86855c49ebeb9fd3c3ca578d52eefe7b6e4c8f92 +README.md: 8d8e28faddf91026c249dbbfb0cfc183c815ae9d +README.zh.md: cee5d30a17a39d9e0613747db4b1a0035bef9c53 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 8019a8be1f..8d8e28fadd 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -86,7 +86,7 @@ Messages sends text, thinking, tool calls, and tool results as content blocks, r `deepseek-official` resolves only its configured API-key reference. `deepseek-account` resolves only the stored grant from the [account provider](../../credentials/deepseek-account-platform/README.md), whose allowed `inferenceOrigin` defaults to `https://api.deepseek.com`. Neither route falls back to the other. Signing out removes the account grant and preserves API keys. -Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. HTTP 401 with the provider message `Authentication Fails (invalid dsh token)` becomes `ACCOUNT_TOKEN_INVALID`. On the account route, it removes the request token only if it still matches the stored login, then publishes account expiry and UI sign-out. Generic authentication errors and API-key routes do not remove account credentials. +Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. HTTP 401 on a request authenticated with an account token becomes `ACCOUNT_TOKEN_INVALID`, regardless of the response body. It removes that request token only if it still matches the stored login, then publishes account expiry and UI sign-out. API-key routes and other HTTP statuses do not remove account credentials. ### Streaming with thinking and images diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index 86855c49eb..cee5d30a17 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -86,7 +86,7 @@ Messages 以内容块发送文本、思考、工具调用和工具结果,以 ` `deepseek-official` 仅解析配置的 API Key 引用。`deepseek-account` 仅解析[账号提供者](../../credentials/deepseek-account-platform/README.zh.md)保存的授权,其允许的 `inferenceOrigin` 默认为 `https://api.deepseek.com`。两条路由均不回退到另一凭证。退出登录删除账号授权,保留 API Key。 -Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。HTTP 401 且提供方消息为 `Authentication Fails (invalid dsh token)` 时归类为 `ACCOUNT_TOKEN_INVALID`。账号路由仅在请求 token 仍匹配已存登录凭据时删除它,并发布账号过期状态和 UI 退登通知。普通鉴权错误和 API Key 路由不会删除账号凭据。 +Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。使用账号 token 鉴权的请求返回 HTTP 401 时归类为 `ACCOUNT_TOKEN_INVALID`,不依赖响应体内容。仅当该请求的 token 仍匹配已存登录凭据时才删除它,并发布账号过期状态和 UI 退登通知。API Key 路由和其他 HTTP 状态码不会删除账号凭据。 ### 带 thinking 与图片的流式调用 diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 41a2cf4a96..2010a72dcf 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -139,7 +139,8 @@ export class DeepSeekAdapter extends LlmAdapter { if (await files.retry(detail)) continue const failure = providerError(raw, response.status, response.headers) const message = files.errorMessage(response.status, failure.message, detail) - throw new LlmError(message, failure.code, { ...failure.failure, cause: new Error(text) }) + const code = accountToken !== undefined && response.status === 401 ? 'ACCOUNT_TOKEN_INVALID' : failure.code + throw new LlmError(message, code, { ...failure.failure, cause: new Error(text) }) } await extensions.accept() if (response.body === null) throw new LlmError('DeepSeek Messages returned no response body', 'EMPTY_RESPONSE') diff --git a/packages/llm/llm-deepseek/src/transport.ts b/packages/llm/llm-deepseek/src/transport.ts index ddae610178..935e8855df 100644 --- a/packages/llm/llm-deepseek/src/transport.ts +++ b/packages/llm/llm-deepseek/src/transport.ts @@ -26,8 +26,7 @@ export function providerError(raw: unknown, status: number | undefined, headers? const type = typeof error.type === 'string' ? error.type : '' const detail = `${type} ${typeof error.code === 'string' ? error.code : ''} ${message}` let code: string - if (status === 401 && message === 'Authentication Fails (invalid dsh token)') code = 'ACCOUNT_TOKEN_INVALID' - else if (status === 401 || status === 403 || ['authentication_error', 'permission_error'].includes(type)) code = 'AUTH' + if (status === 401 || status === 403 || ['authentication_error', 'permission_error'].includes(type)) code = 'AUTH' else if (isQuotaExceededError(detail) || status === 402) code = 'QUOTA' else if (status === 429 || type === 'rate_limit_error') code = 'RATE_LIMIT' else if (isContextWindowExceededError(detail)) code = 'CONTEXT_WINDOW_EXCEEDED' diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index b051aedda6..c03a5f6d65 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -277,16 +277,21 @@ describe('Cordis provider composition', () => { return { ctx, http } } - it.each(['deepseek-account', 'deepseek-official'])('reports the rejected account token only for %s', async (provider) => { + it.each(['deepseek-account', 'deepseek-official'].flatMap(provider => [ + { provider, body: JSON.stringify({ error: { type: 'authentication_error', message: 'API key is invalid' } }) }, + { provider, body: JSON.stringify({ error: { message: 'Authentication Fails (invalid dsh token)' } }) }, + { provider, body: 'Unauthorized' }, + { provider, body: '' }, + ]))('handles $provider HTTP 401 independently of the response body ($body)', async ({ provider, body }) => { const { ctx } = await boot((response) => { response.writeHead(401, { 'content-type': 'application/json' }) - response.end(JSON.stringify({ error: { type: 'authentication_error', message: 'Authentication Fails (invalid dsh token)' } })) + response.end(body) }) const rejectToken = vi.fn(async (_token: string) => {}) ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', rejectToken: (token: string): Promise => rejectToken(token) } as DeepSeekAccount) expect((await chunks(ctx.llm.stream(options({ provider })))).at(-1)).toMatchObject({ - type: 'finish', reason: { kind: 'error', failure: { code: 'ACCOUNT_TOKEN_INVALID' } }, + type: 'finish', reason: { kind: 'error', failure: { code: provider === 'deepseek-account' ? 'ACCOUNT_TOKEN_INVALID' : 'AUTH' } }, }) expect(rejectToken.mock.calls).toEqual(provider === 'deepseek-account' ? [['fixture-token']] : []) }) @@ -318,9 +323,9 @@ describe('Cordis provider composition', () => { }) }) - it('does not remove account credentials for a generic authentication error', async () => { + it('does not remove account credentials for HTTP 403', async () => { const { ctx } = await boot((response) => { - response.writeHead(401) + response.writeHead(403) response.end(JSON.stringify({ error: { type: 'authentication_error', message: 'API key is invalid' } })) }) const rejectToken = vi.fn(async (_token: string) => {}) From f0f4bb73fccb4c01710e7ba5d36c6cf7c4882f32 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 16:58:55 +0800 Subject: [PATCH 18/60] fix(desktop): keep welcome back action on one line --- apps/desktop/renderer/welcome.css | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/desktop/renderer/welcome.css b/apps/desktop/renderer/welcome.css index 3d5fc88460..068bcc36fd 100644 --- a/apps/desktop/renderer/welcome.css +++ b/apps/desktop/renderer/welcome.css @@ -192,6 +192,7 @@ body { top: calc(100% + 16px); left: 50%; transform: translateX(-50%); + white-space: nowrap; min-width: 58px; height: 28px; padding: 4px 10px; From 5a3c316401cd461f0234f64be39023702ccb4ea0 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Tue, 22 Sep 2026 19:21:12 +0800 Subject: [PATCH 19/60] fix(desktop): deliver welcome expiry notice once across windows --- apps/desktop/README.i18n.yaml | 4 +- apps/desktop/README.md | 2 + apps/desktop/README.zh.md | 2 + apps/desktop/src/client/WelcomePage.tsx | 12 ++++-- apps/desktop/src/main.ts | 17 ++++++-- apps/desktop/src/preload-welcome.ts | 3 +- apps/desktop/src/welcome-api.ts | 6 +++ apps/desktop/src/welcome-window.ts | 5 ++- apps/desktop/tests/preload.e2e.ts | 3 ++ .../tests/welcome-renderer.client.spec.tsx | 39 +++++++++++++++++-- apps/desktop/tests/welcome-startup.spec.ts | 14 ++++++- apps/desktop/tests/welcome-window.spec.ts | 9 ++++- 12 files changed, 101 insertions(+), 15 deletions(-) diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index 7dbf8777b4..a9b5df858a 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 apps/desktop/README.md -README.md: cb10794ae6e9c5cbdc9e0f58acdefe8a252e35e1 -README.zh.md: 778fe9c6bc8df8a727d2a03a818a44f6fbb2e0f9 +README.md: 4ad377430d679fc505c480f2766b474b060a9f60 +README.zh.md: a36ebf77394e016336018d02f38b6688b2936f7f diff --git a/apps/desktop/README.md b/apps/desktop/README.md index cb10794ae6..4ad377430d 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -409,6 +409,8 @@ An unpackaged Electron process uses `.desktop-build/development/project` under i Sign in opens the configured platform page in the system browser. The Host owns PKCE and a temporary loopback callback, saves the credential before entering the workspace, and redirects the browser to the platform completion page. Opened and copied authorization links carry the effective Desktop theme as `theme=light` or `theme=dark`; `system` resolves at the time of the action. Cancel withdraws the local attempt even if the platform page later approves it. Settings offers Account sign-out; without a separate API key, sign-out returns to the welcome window. Packaged applications register dsh://open to show the window without passing credentials. On macOS, the development launcher prepares an ad-hoc-signed `Harness Dev.app` under `.desktop-build/development`, declares `dsh` in its Info.plist, and registers it with Launch Services. It loads the current workspace and records the selected development home, browser-data path, and debug settings for cold starts. Starting this bundle makes it the default `dsh://` handler; starting the packaged application registers the packaged handler again. The generated bundle does not contain account tokens and requires the workspace and prepared runtime to remain available. +When an expired account returns to Welcome, the main process retains a one-time notification until the renderer requests it over window-owned IPC. Reloading Welcome does not repeat the notice; manual sign-out and cold startup do not create it. + An expired login displays a timeout heading with explicit Sign in again and Add API Key actions. Opening the API-key form dismisses the authorization view; late account-state notifications do not replace an in-progress key entry. Embedded Platform views remain hidden until document loading completes so the renderer loading indicator stays visible. Closing or replacing a pending view prevents it from appearing later. Reloading or replacing the owning application document, renderer termination, and window closure also destroy the native view without relying on React cleanup. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index 778fe9c6bc..a36ebf7739 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -409,6 +409,8 @@ node apps/desktop/node_modules/pnpm/bin/pnpm.mjs --dir apps/desktop run test:upd 登录会在系统浏览器中打开配置的平台页面。Host 负责 PKCE 和临时本机回调,在进入工作区前保存凭证,再将浏览器跳转到平台完成页。打开和复制的授权链接通过 `theme=light` 或 `theme=dark` 携带当前生效的 Desktop 主题;`system` 在执行操作时解析。即使平台页面随后批准,取消仍会撤销本地尝试。设置中的账号页面提供退出;没有独立 API Key 时,退出后返回欢迎窗。打包应用注册 dsh://open,只显示窗口而不传递凭证。macOS 开发启动器在 `.desktop-build/development` 下准备经临时签名的 `Harness Dev.app`,在 Info.plist 中声明 `dsh` 并注册到 Launch Services。它加载当前工作区,并记录选定的开发 home、浏览器数据路径和调试设置,以供冷启动使用。启动此应用会将其设为 `dsh://` 默认处理程序;启动打包应用会重新注册打包版处理程序。生成的应用包不包含账号 token,依赖工作区和已准备的运行环境继续存在。 +账号失效并返回 Welcome 时,主进程保留一次性通知,直到渲染器通过所属窗口的 IPC 领取。重新加载 Welcome 不会重复提示;主动退登和冷启动不会生成该通知。 + 登录超时后显示超时标题,并提供重新登录和添加 API Key 按钮。打开 API Key 表单会关闭授权视图;后续账号状态通知不会覆盖正在填写的密钥。 内嵌 Platform 视图在文档加载完成前保持隐藏,让渲染层加载图标可见。关闭或替换待加载视图后,该视图不会再次出现。 所属应用文档刷新或替换、渲染进程终止以及窗口关闭也会销毁原生视图,不依赖 React 清理。 diff --git a/apps/desktop/src/client/WelcomePage.tsx b/apps/desktop/src/client/WelcomePage.tsx index 054b9b11bf..b24618a0da 100644 --- a/apps/desktop/src/client/WelcomePage.tsx +++ b/apps/desktop/src/client/WelcomePage.tsx @@ -15,9 +15,7 @@ type Page = 'entry' | 'key' | 'account' */ export function Welcome({ api }: { api: WelcomeApi }) { const { messages: m } = api - const [expired, setExpired] = useState(false) const [expiryNotice, setExpiryNotice] = useState(false) - useEffect(() => { setExpiryNotice(expired) }, [expired]) const [page, setPage] = useState('entry') const pageRef = useRef('entry') const [attempt, setAttempt] = useState(null) @@ -53,9 +51,17 @@ export function Welcome({ api }: { api: WelcomeApi }) { mounted.current = true document.documentElement.lang = api.id document.title = m.welcomeTitle + const takeNotice = (): void => { + void api.takeNotice().then((notice) => { + if (mounted.current && notice === 'session-expired') setExpiryNotice(true) + }).catch((_closedChannel: unknown) => { + // A closed Welcome IPC channel must not interrupt the sign-in page. + }) + } + takeNotice() const stop = api.onAccountState((state) => { revision.current++ - setExpired(state.status === 'signed-out' && state.signOutReason === 'expired') + takeNotice() showAccount(state) }) return () => { mounted.current = false; stop() } diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index d9c55f44ae..45a3a4a8c4 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -34,7 +34,7 @@ import { DesktopUpdateCoordinator } from './update-coordinator.ts' import { serveWebDocument, authenticateWebHost, forwardWebRequest } from './web-document.ts' import { DesktopFatalRecovery } from './fatal-recovery.ts' import { openWelcomeWindow } from './welcome-window.ts' -import { WELCOME_IPC, needsWelcome } from './welcome-api.ts' +import { WELCOME_IPC, needsWelcome, type WelcomeNotice } from './welcome-api.ts' import { connectDesktopWelcome, type DesktopWelcomeBackend } from './welcome-backend.ts' import { DesktopUpdateJournal } from './update-journal.ts' import { DesktopUpdatePreparationError } from './update-error.ts' @@ -307,6 +307,7 @@ async function main(): Promise { let stopAccount: (() => void) | undefined let openedAttempt: string | undefined let returnedAttempt: string | undefined + let pendingWelcomeNotice: WelcomeNotice | undefined let previousAccountStatus: string | undefined const assertProductSender = (event: IpcMainInvokeEvent): void => { assertDesktopSender(event, ['app']) @@ -362,8 +363,13 @@ async function main(): Promise { } if (attempt?.phase === 'succeeded' && welcomeWindow !== undefined) void enterWorkspace().catch(() => undefined) if (previousAccountStatus === 'credential-stored' && state.status === 'signed-out') { - void readWelcomeState().then((value) => { - if (!value.hasApiKey && !quitting) { enteredWorkspace = false; return showWelcome() } + void readWelcomeState().then(async (value) => { + if (needsWelcome(value) && !quitting) { + if (state.signOutReason === 'expired') pendingWelcomeNotice = 'session-expired' + enteredWorkspace = false + await showWelcome() + if (welcomeWindow !== undefined && !welcomeWindow.isDestroyed()) welcomeWindow.webContents.send(WELCOME_IPC.state, state) + } return undefined }).catch(() => undefined) } @@ -905,6 +911,11 @@ async function main(): Promise { } openingWelcome ??= (async () => { welcomeWindow = await openWelcomeWindow(locale, { + takeNotice: () => { + const notice = pendingWelcomeNotice + pendingWelcomeNotice = undefined + return Promise.resolve(notice) + }, startSignIn: async () => { if (welcomeBackend === undefined) throw new Error('desktop welcome: backend unavailable') return welcomeBackend.account.start(locale.id) diff --git a/apps/desktop/src/preload-welcome.ts b/apps/desktop/src/preload-welcome.ts index 490a894394..e9ec1aa910 100644 --- a/apps/desktop/src/preload-welcome.ts +++ b/apps/desktop/src/preload-welcome.ts @@ -3,13 +3,14 @@ import type { AccountView, SignInAttemptId } from '@deepseek-ai/dsh-deepseek-acc import { contextBridge, ipcRenderer } from 'electron' import { resolveDesktopLocale } from './locale.ts' -import { WELCOME_IPC, type WelcomeApi, type WelcomeSaveResult } from './welcome-api.ts' +import { WELCOME_IPC, type WelcomeApi, type WelcomeNotice, type WelcomeSaveResult } from './welcome-api.ts' const prefix = '--dsh-welcome-locale=' const locale = process.argv.find(argument => argument.startsWith(prefix))?.slice(prefix.length) if (locale === undefined) throw new Error('desktop welcome: missing window locale') const api: WelcomeApi = { ...resolveDesktopLocale(locale), + takeNotice: () => ipcRenderer.invoke(WELCOME_IPC.takeNotice) as Promise, startSignIn: () => ipcRenderer.invoke(WELCOME_IPC.start) as Promise, cancelSignIn: (id: SignInAttemptId) => ipcRenderer.invoke(WELCOME_IPC.cancel, id) as Promise, copySignInLink: (id: SignInAttemptId) => ipcRenderer.invoke(WELCOME_IPC.copyLink, id) as Promise, diff --git a/apps/desktop/src/welcome-api.ts b/apps/desktop/src/welcome-api.ts index 36dd85f17a..015296776a 100644 --- a/apps/desktop/src/welcome-api.ts +++ b/apps/desktop/src/welcome-api.ts @@ -11,13 +11,19 @@ export const WELCOME_IPC = { cancel: 'dsh-welcome:cancel', copyLink: 'dsh-welcome:copy-link', state: 'dsh-welcome:state', + takeNotice: 'dsh-welcome:take-notice', } as const /** Credential writes return a safe outcome without exposing Host diagnostics. */ export type WelcomeSaveResult = { readonly ok: true } | { readonly ok: false } +/** One-time notification retained by the main process until Welcome receives it. */ +export type WelcomeNotice = 'session-expired' + /** Host-owned operations used by the welcome window. */ export interface WelcomeOperations { + /** @returns the pending notification, clearing it before another renderer can receive it. */ + takeNotice(): Promise /** @returns account state after starting a login attempt. */ startSignIn(): Promise /** @param id - attempt to cancel. @returns the settled state. */ diff --git a/apps/desktop/src/welcome-window.ts b/apps/desktop/src/welcome-window.ts index 0edda21454..a32e1f1c56 100644 --- a/apps/desktop/src/welcome-window.ts +++ b/apps/desktop/src/welcome-window.ts @@ -63,7 +63,9 @@ export async function openWelcomeWindow(locale: DesktopLocale, operations: Welco const disposeHandlers = (): void => { if (!active) return active = false - for (const channel of [WELCOME_IPC.saveApiKey, WELCOME_IPC.skip, WELCOME_IPC.start, WELCOME_IPC.cancel, WELCOME_IPC.copyLink]) { + for (const channel of [ + WELCOME_IPC.takeNotice, WELCOME_IPC.saveApiKey, WELCOME_IPC.skip, WELCOME_IPC.start, WELCOME_IPC.cancel, WELCOME_IPC.copyLink, + ]) { ipcMain.removeHandler(channel) } disposeActiveHandlers = undefined @@ -74,6 +76,7 @@ export async function openWelcomeWindow(locale: DesktopLocale, operations: Welco throw new Error('desktop welcome: rejected action from an unowned frame') } } + ipcMain.handle(WELCOME_IPC.takeNotice, async (event) => { assertSender(event); return operations.takeNotice() }) ipcMain.handle(WELCOME_IPC.saveApiKey, async (event, value: unknown) => { assertSender(event) if (typeof value !== 'string' || !/^[\x21-\x7e]+$/.test(value)) return { ok: false } diff --git a/apps/desktop/tests/preload.e2e.ts b/apps/desktop/tests/preload.e2e.ts index 1022b3a8b8..d18f475bc1 100644 --- a/apps/desktop/tests/preload.e2e.ts +++ b/apps/desktop/tests/preload.e2e.ts @@ -80,6 +80,9 @@ describe.skipIf(!existsSync(preload('preload-app')))('built sandboxed Desktop pr expect(send).toHaveBeenCalledWith('dsh-desktop:locale-changed', 'zh') } else { expect(exposed.has('dshWelcome')).toBe(true) + const bridge = exposed.get('dshWelcome') as { takeNotice(): Promise } + void bridge.takeNotice() + expect(invoke).toHaveBeenCalledWith('dsh-welcome:take-notice') } }) }) diff --git a/apps/desktop/tests/welcome-renderer.client.spec.tsx b/apps/desktop/tests/welcome-renderer.client.spec.tsx index 0778b59805..0d3586ecfe 100644 --- a/apps/desktop/tests/welcome-renderer.client.spec.tsx +++ b/apps/desktop/tests/welcome-renderer.client.spec.tsx @@ -6,15 +6,16 @@ import { Welcome } from '../src/client/WelcomePage.tsx' import { afterEach, describe, expect, it, vi } from 'vitest' import { resolveDesktopLocale } from '../src/locale.ts' import type { AccountView } from '@deepseek-ai/dsh-deepseek-account/types' -import type { WelcomeSaveResult } from '../src/welcome-api.ts' +import type { WelcomeSaveResult, WelcomeNotice } from '../src/welcome-api.ts' const html = readFileSync(join(import.meta.dirname, '../renderer/welcome.html'), 'utf8') afterEach(cleanup) -function mount(language = 'zh-CN') { +function mount(language = 'zh-CN', takeNotice = vi.fn<() => Promise>().mockResolvedValue(undefined)) { cleanup() const stopAccount = vi.fn() const api = { + takeNotice, onAccountState: vi.fn((_listener: (state: AccountView) => void) => stopAccount), startSignIn: vi.fn(async (): Promise => ({ links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' }, status: 'signed-out', attempt: null })), cancelSignIn: vi.fn(async (): Promise => ({ links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' }, status: 'signed-out', attempt: null })), @@ -264,7 +265,9 @@ it.each(['copied', 'failed'] as const)('restores the copy action after %s feedba it.each(['zh-CN', 'en'])('keeps the expiry notice visible after returning to Welcome: %s', async (language) => { vi.useFakeTimers() try { - const view = mount(language) + const takeNotice = vi.fn<() => Promise>().mockResolvedValue(undefined).mockResolvedValueOnce('session-expired') + const view = mount(language, takeNotice) + await act(async () => {}) const publish = view.api.onAccountState.mock.calls[0]![0] const expired: AccountView = { status: 'signed-out', signOutReason: 'expired', attempt: null, links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' } } @@ -277,5 +280,35 @@ it.each(['zh-CN', 'en'])('keeps the expiry notice visible after returning to Wel expect(screen.queryByRole('alert')).toBeNull() await act(async () => { publish(expired) }) expect(screen.queryByRole('alert')).toBeNull() + view.unmount() + mount(language, takeNotice) + await act(async () => {}) + expect(screen.queryByRole('alert')).toBeNull() } finally { cleanup(); vi.useRealTimers() } }) + +it('does not infer a notification from a retained expired account snapshot', async () => { + const view = mount() + await act(async () => { + view.api.onAccountState.mock.calls[0]![0]({ status: 'signed-out', signOutReason: 'expired', attempt: null, + links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' } }) + }) + expect(screen.queryByRole('alert')).toBeNull() +}) + +it('keeps the entry usable when notification IPC fails', async () => { + const view = mount('en', vi.fn<() => Promise>().mockRejectedValue(new Error('closed'))) + await act(async () => {}) + expect(screen.queryByRole('alert')).toBeNull() + fireEvent.click(view.button('#api-key')) + expect(view.input.closest('[hidden]')).toBeNull() +}) + +it('ignores a notification received after its renderer unmounts', async () => { + const pending = Promise.withResolvers() + const view = mount('en', vi.fn<() => Promise>().mockReturnValue(pending.promise)) + view.unmount() + mount('en') + await act(async () => { pending.resolve('session-expired') }) + expect(screen.queryByRole('alert')).toBeNull() +}) diff --git a/apps/desktop/tests/welcome-startup.spec.ts b/apps/desktop/tests/welcome-startup.spec.ts index 20a5a441f4..737a3167be 100644 --- a/apps/desktop/tests/welcome-startup.spec.ts +++ b/apps/desktop/tests/welcome-startup.spec.ts @@ -131,7 +131,8 @@ vi.mock('../src/welcome-window.ts', () => ({ state.welcomeLocale = locale state.operations = operations await state.beforeWelcome() - return { once: vi.fn(), close: state.closeWelcome } + return { once: vi.fn(), close: state.closeWelcome, isDestroyed: () => false, + show: vi.fn(), focus: vi.fn(), webContents: { send: vi.fn() } } }, })) @@ -179,6 +180,7 @@ it('starts the Host for welcome onboarding and opens the workspace on skip witho expect(state.showWorkspace).not.toHaveBeenCalled() state.loadWorkspace.mockClear() expect(state.welcomeLocale).toMatchObject({ id: 'zh-CN' }) + expect(await state.operations!.takeNotice()).toBeUndefined() expect(state.dialogLocale!().id).toBe('zh-CN') const attemptId = 'login' as NonNullable['id'] const account: AccountView = { status: 'signed-out', links: { usageUrl: '', topUpUrl: '' }, @@ -228,9 +230,19 @@ it('starts the Host for welcome onboarding and opens the workspace on skip witho state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) await vi.advanceTimersByTimeAsync(0) expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount) + expect(await state.operations!.takeNotice()).toBeUndefined() state.hasApiKey = false state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) await vi.waitFor(() => { expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount + 1) }) + expect(await state.operations!.takeNotice()).toBe('session-expired') + expect(await state.operations!.takeNotice()).toBeUndefined() + state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + await vi.advanceTimersByTimeAsync(0) + expect(await state.operations!.takeNotice()).toBeUndefined() + state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null }) + await vi.advanceTimersByTimeAsync(0) + expect(await state.operations!.takeNotice()).toBeUndefined() }) diff --git a/apps/desktop/tests/welcome-window.spec.ts b/apps/desktop/tests/welcome-window.spec.ts index b357f8dcb5..5ab4a1c031 100644 --- a/apps/desktop/tests/welcome-window.spec.ts +++ b/apps/desktop/tests/welcome-window.spec.ts @@ -40,6 +40,7 @@ function createWindow() { beforeEach(() => { electron.create.mockReset(); electron.handlers.clear() }) const operations = { + takeNotice: async () => undefined, startSignIn: async () => ({ links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' }, status: 'signed-out' as const, attempt: null }), cancelSignIn: async () => ({ links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' }, status: 'signed-out' as const, attempt: null }), copySignInLink: async () => undefined, @@ -115,8 +116,14 @@ describe('desktop welcome window', () => { const saveApiKey = vi.fn(operations.saveApiKey) const skip = vi.fn(operations.skip) const copySignInLink = vi.fn(operations.copySignInLink) - await openWelcomeWindow(resolveDesktopLocale('en'), { ...operations, saveApiKey, skip, copySignInLink }) + const takeNotice = vi.fn(async () => 'session-expired' as const) + await openWelcomeWindow(resolveDesktopLocale('en'), { ...operations, saveApiKey, skip, copySignInLink, takeNotice }) const own = { sender: window.webContents, senderFrame: window.webContents.mainFrame } + const take = electron.handlers.get(WELCOME_IPC.takeNotice)! + await expect(take({ ...own, senderFrame: {} })).rejects.toThrow('unowned frame') + expect(takeNotice).not.toHaveBeenCalled() + expect(await take(own)).toBe('session-expired') + expect(takeNotice).toHaveBeenCalledOnce() const save = electron.handlers.get(WELCOME_IPC.saveApiKey)! await expect(save({ sender: {}, senderFrame: {} }, 'sk-test')).rejects.toThrow('unowned frame') await expect(save({ ...own, senderFrame: {} }, 'sk-test')).rejects.toThrow('unowned frame') From 10b6ffec3fb414a5673f88d350a5f019ce3dc396 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 11:00:13 +0800 Subject: [PATCH 20/60] fix(desktop): use regular weight for welcome API key heading --- apps/desktop/renderer/welcome.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/renderer/welcome.css b/apps/desktop/renderer/welcome.css index 068bcc36fd..1e043dcee4 100644 --- a/apps/desktop/renderer/welcome.css +++ b/apps/desktop/renderer/welcome.css @@ -246,7 +246,7 @@ body { .key-heading h1 { margin: 0; font-size: 20px; - font-weight: 300; + font-weight: 400; line-height: 32px; letter-spacing: 0.01em; } From 4283f62d01a820ed04a10072b30a6ad2f3c1ff65 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 11:11:44 +0800 Subject: [PATCH 21/60] fix(desktop): leave sign-in activation to the completion page --- apps/desktop/README.i18n.yaml | 4 ++-- apps/desktop/README.md | 2 +- apps/desktop/README.zh.md | 2 +- apps/desktop/src/main.ts | 9 +++++---- apps/desktop/tests/welcome-startup.spec.ts | 20 ++++++++++++++++++-- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index 7ba0de6abb..d414b6d5c3 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 apps/desktop/README.md -README.md: 372ea4a0ac1ccb6ec7aeedd99899111f9b5801c7 -README.zh.md: b155745f68e9a3f706650f81309c8d1e7d179586 +README.md: f00608919c1a44441bffa57d2b601c12b47724a8 +README.zh.md: 76862075461d651a4d25235d57eb1855602ea90e diff --git a/apps/desktop/README.md b/apps/desktop/README.md index 372ea4a0ac..f00608919c 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -411,7 +411,7 @@ An unpackaged Electron process uses `.desktop-build/development/project` under i - Dependency lifecycle scripts follow pnpm’s build permissions; Desktop provides no separate approval dialog. - The desktop shell shares sessions, settings, credentials, workspaces, and storage under `$DSH_HOME` with CLI dsh, while executable packages, plugin activation, and lockfiles remain separate. -Sign in opens the configured platform page in the system browser. The Host owns PKCE and a temporary loopback callback, saves the credential before entering the workspace, and redirects the browser to the platform completion page. Opened and copied authorization links carry the effective Desktop theme as `theme=light` or `theme=dark`; `system` resolves at the time of the action. Cancel withdraws the local attempt even if the platform page later approves it. Settings offers Account sign-out; without a separate API key, sign-out returns to the welcome window. Packaged applications register dsh://open to show the window without passing credentials. On macOS, the development launcher prepares an ad-hoc-signed `Harness Dev.app` under `.desktop-build/development`, declares `dsh` in its Info.plist, and registers it with Launch Services. It loads the current workspace and records the selected development home, browser-data path, and debug settings for cold starts. Starting this bundle makes it the default `dsh://` handler; starting the packaged application registers the packaged handler again. The generated bundle does not contain account tokens and requires the workspace and prepared runtime to remain available. +Sign in opens the configured platform page in the system browser. The Host owns PKCE and a temporary loopback callback, saves the credential before entering the workspace, and redirects the browser to the platform completion page. Opened and copied authorization links carry the effective Desktop theme as `theme=light` or `theme=dark`; `system` resolves at the time of the action. Cancel withdraws the local attempt even if the platform page later approves it. Settings offers Account sign-out; without a separate API key, sign-out returns to the welcome window. Successful browser sign-in switches Welcome to the workspace without activating the application; the completion page’s dsh://open link brings it to the foreground. Packaged applications register dsh://open to show the window without passing credentials. On macOS, the development launcher prepares an ad-hoc-signed `Harness Dev.app` under `.desktop-build/development`, declares `dsh` in its Info.plist, and registers it with Launch Services. It loads the current workspace and records the selected development home, browser-data path, and debug settings for cold starts. Starting this bundle makes it the default `dsh://` handler; starting the packaged application registers the packaged handler again. The generated bundle does not contain account tokens and requires the workspace and prepared runtime to remain available. When an expired account returns to Welcome, the main process retains a one-time notification until the renderer requests it over window-owned IPC. Reloading Welcome does not repeat the notice; manual sign-out and cold startup do not create it. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index b155745f68..7686207546 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -411,7 +411,7 @@ node apps/desktop/node_modules/pnpm/bin/pnpm.mjs --dir apps/desktop run test:upd - 依赖的生命周期脚本遵循 pnpm 的构建权限;Desktop 不提供单独的审批对话框。 - 桌面壳与 CLI dsh 共享 `$DSH_HOME` 下的会话、设置、凭据、工作区和存储,但可执行包、插件激活和锁文件彼此隔离。 -登录会在系统浏览器中打开配置的平台页面。Host 负责 PKCE 和临时本机回调,在进入工作区前保存凭证,再将浏览器跳转到平台完成页。打开和复制的授权链接通过 `theme=light` 或 `theme=dark` 携带当前生效的 Desktop 主题;`system` 在执行操作时解析。即使平台页面随后批准,取消仍会撤销本地尝试。设置中的账号页面提供退出;没有独立 API Key 时,退出后返回欢迎窗。打包应用注册 dsh://open,只显示窗口而不传递凭证。macOS 开发启动器在 `.desktop-build/development` 下准备经临时签名的 `Harness Dev.app`,在 Info.plist 中声明 `dsh` 并注册到 Launch Services。它加载当前工作区,并记录选定的开发 home、浏览器数据路径和调试设置,以供冷启动使用。启动此应用会将其设为 `dsh://` 默认处理程序;启动打包应用会重新注册打包版处理程序。生成的应用包不包含账号 token,依赖工作区和已准备的运行环境继续存在。 +登录会在系统浏览器中打开配置的平台页面。Host 负责 PKCE 和临时本机回调,在进入工作区前保存凭证,再将浏览器跳转到平台完成页。打开和复制的授权链接通过 `theme=light` 或 `theme=dark` 携带当前生效的 Desktop 主题;`system` 在执行操作时解析。即使平台页面随后批准,取消仍会撤销本地尝试。设置中的账号页面提供退出;没有独立 API Key 时,退出后返回欢迎窗。浏览器登录成功后,Welcome 切换到工作区但不激活应用;完成页的 dsh://open 链接负责将客户端置前。打包应用注册 dsh://open,只显示窗口而不传递凭证。macOS 开发启动器在 `.desktop-build/development` 下准备经临时签名的 `Harness Dev.app`,在 Info.plist 中声明 `dsh` 并注册到 Launch Services。它加载当前工作区,并记录选定的开发 home、浏览器数据路径和调试设置,以供冷启动使用。启动此应用会将其设为 `dsh://` 默认处理程序;启动打包应用会重新注册打包版处理程序。生成的应用包不包含账号 token,依赖工作区和已准备的运行环境继续存在。 账号失效并返回 Welcome 时,主进程保留一次性通知,直到渲染器通过所属窗口的 IPC 领取。重新加载 Welcome 不会重复提示;主动退登和冷启动不会生成该通知。 diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 56b9d061e9..ca2ed4b204 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -395,7 +395,7 @@ async function main(): Promise { returnedAttempt = attempt.id focusPrimaryWindow() } - if (attempt?.phase === 'succeeded' && welcomeWindow !== undefined) void enterWorkspace().catch(() => undefined) + if (attempt?.phase === 'succeeded' && welcomeWindow !== undefined) void enterWorkspace({ activate: false }).catch(() => undefined) if (previousAccountStatus === 'credential-stored' && state.status === 'signed-out') { void readWelcomeState().then(async (value) => { if (needsWelcome(value) && !quitting) { @@ -924,19 +924,20 @@ async function main(): Promise { }) return window } - const enterWorkspace = async (): Promise => { + const enterWorkspace = async ({ activate = true }: { activate?: boolean } = {}): Promise => { if (quitting) return const window = mainWindow ?? createMainWindow() await navigateMain(applicationUrl) if (isQuitting() || recovery.active || window.isDestroyed()) return - window.show() + if (activate) window.show() + else window.showInactive() enteredWorkspace = true if (welcomeWindow !== undefined) { welcomeWindow.close() window.webContents.send(DESKTOP_IPC.enterWorkspace) } welcomeWindow = undefined - if (development && process.env.DSH_DESKTOP_OPEN_DEVTOOLS !== '0') { + if (activate && development && process.env.DSH_DESKTOP_OPEN_DEVTOOLS !== '0') { window.webContents.openDevTools({ mode: 'detach' }) } } diff --git a/apps/desktop/tests/welcome-startup.spec.ts b/apps/desktop/tests/welcome-startup.spec.ts index 859dc97e46..0d19f78585 100644 --- a/apps/desktop/tests/welcome-startup.spec.ts +++ b/apps/desktop/tests/welcome-startup.spec.ts @@ -23,6 +23,9 @@ const state = vi.hoisted(() => ({ stopHost: vi.fn<() => Promise>().mockResolvedValue(undefined), loadWorkspace: vi.fn<(url: string) => Promise>().mockResolvedValue(undefined), showWorkspace: vi.fn(), + showInactiveWorkspace: vi.fn(), + focusWorkspace: vi.fn(), + openDevTools: vi.fn(), closeWelcome: vi.fn(), welcomeLocale: undefined as DesktopLocale | undefined, preference: 'zh', @@ -64,16 +67,18 @@ vi.mock('electron', () => ({ BrowserWindow: class { constructor(options: BrowserWindowConstructorOptions) { state.windowOptions = options } private ready: (() => void) | undefined - webContents = { mainFrame: { url: 'dsh-app://app/' }, setWindowOpenHandler: vi.fn(), on: vi.fn(), once: vi.fn(), send: vi.fn(), openDevTools: vi.fn() } + webContents = { mainFrame: { url: 'dsh-app://app/' }, setWindowOpenHandler: vi.fn(), + on: vi.fn(), once: vi.fn(), send: vi.fn(), openDevTools: state.openDevTools } static getAllWindows() { return [] } once(name: string, callback: () => void) { if (name === 'ready-to-show') this.ready = callback; return this } on() { return this } isDestroyed() { return false } isMinimized() { return false } restore = vi.fn() - focus = vi.fn() + focus = state.focusWorkspace hide = vi.fn() show = state.showWorkspace + showInactive = state.showInactiveWorkspace async loadURL(url: string) { state.contents = this.webContents; await state.loadWorkspace(url); this.ready?.() } }, net: { fetch: vi.fn() }, @@ -251,5 +256,16 @@ it('starts the Host for welcome onboarding and opens the workspace on skip witho state.accountListener!({ ...account, status: 'signed-out', attempt: null }) await vi.advanceTimersByTimeAsync(0) expect(await state.operations!.takeNotice()).toBeUndefined() + state.showWorkspace.mockClear() + state.focusWorkspace.mockClear() + vi.stubEnv('DSH_DESKTOP_OPEN_DEVTOOLS', '1') + state.accountListener!({ ...account, status: 'credential-stored', attempt: { id: attemptId, phase: 'succeeded' } }) + await vi.waitFor(() => { expect(state.showInactiveWorkspace).toHaveBeenCalledOnce() }) + expect(state.showWorkspace).not.toHaveBeenCalled() + expect(state.focusWorkspace).not.toHaveBeenCalled() + expect(state.openDevTools).not.toHaveBeenCalled() + state.appListeners.get('open-url')!({ preventDefault: vi.fn() }, 'dsh://open') + expect(state.showWorkspace).toHaveBeenCalledOnce() + expect(state.focusWorkspace).toHaveBeenCalledOnce() }) From c062c615dc0db26c7244d62ee37e60194a46e2b3 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 11:12:06 +0800 Subject: [PATCH 22/60] feat(account): align signed-out sidebar menu with design --- .../signed-out-menu.expected.md | 4 +++ apps/web/tests/onboarding-native.e2e.ts | 31 +++++++++++++++++-- .../ui-settings-account/README.i18n.yaml | 4 +-- packages/client/ui-settings-account/README.md | 4 +-- .../client/ui-settings-account/README.zh.md | 4 +-- .../src/client/AccountMenu.module.css | 29 +++++++++++++++++ .../src/client/AccountMenu.tsx | 16 ++++++---- .../ui-settings-account/src/client/locales.ts | 4 +-- .../tests/account.client.spec.tsx | 21 +++++++++++++ .../tests/expected/login-failed-en.txt | 2 +- .../tests/expected/menu-signed-out-en.txt | 1 + .../tests/expected/menu-signed-out-zh.txt | 1 + 12 files changed, 103 insertions(+), 18 deletions(-) create mode 100644 apps/web/tests/expected/onboarding-native/signed-out-menu.expected.md create mode 100644 packages/client/ui-settings-account/tests/expected/menu-signed-out-en.txt create mode 100644 packages/client/ui-settings-account/tests/expected/menu-signed-out-zh.txt diff --git a/apps/web/tests/expected/onboarding-native/signed-out-menu.expected.md b/apps/web/tests/expected/onboarding-native/signed-out-menu.expected.md new file mode 100644 index 0000000000..6fe7a0d67b --- /dev/null +++ b/apps/web/tests/expected/onboarding-native/signed-out-menu.expected.md @@ -0,0 +1,4 @@ +- menu: + - menuitem "设置" + - menuitem "联系我们" + - menuitem "登录" diff --git a/apps/web/tests/onboarding-native.e2e.ts b/apps/web/tests/onboarding-native.e2e.ts index c899288606..c59c7f238a 100644 --- a/apps/web/tests/onboarding-native.e2e.ts +++ b/apps/web/tests/onboarding-native.e2e.ts @@ -11,6 +11,7 @@ import { import { openSettings, ZH_BROWSER_LOCALE, saveFailureShot } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('./expected/onboarding-native', import.meta.url)) +const SIGNED_OUT_MENU_EXPECTED = join(SNAPSHOT_DIR, 'signed-out-menu.expected.md') const MODE = webSnapshotMode() describe.skipIf(MODE === 'record').each([false, true])('web e2e: native credential onboarding (desktop marker: %s)', (desktop) => { @@ -53,8 +54,32 @@ describe.skipIf(MODE === 'record').each([false, true])('web e2e: native credenti acknowledgeReloadConnectionLoss(tripwire, warningsBefore) } const accountMenu = page.getByRole('button', { name: '账号菜单', exact: true }) - if (desktop) await accountMenu.waitFor() - else { + if (desktop) { + await accountMenu.waitFor() + expect(await accountMenu.textContent()).toBe('更多') + const triggerBox = (await accountMenu.boundingBox())! + expect(Math.abs(triggerBox.height - 32)).toBeLessThan(1) + await accountMenu.click() + const menu = page.getByRole('menu') + await menu.waitFor() + expect(await menu.getByRole('menuitem').allTextContents()).toEqual(['设置', '联系我们', '登录']) + const menuBox = (await menu.boundingBox())! + expect(Math.abs(menuBox.width - 124)).toBeLessThan(1) + expect(Math.abs(menuBox.height - 128)).toBeLessThan(1) + expect(Math.abs(triggerBox.y - (menuBox.y + menuBox.height) - 4)).toBeLessThan(1) + for (const row of await menu.getByRole('menuitem').all()) { + const rowBox = (await row.boundingBox())! + expect(Math.abs(rowBox.height - 40)).toBeLessThan(1) + expect(Math.abs(menuBox.width - rowBox.width - 8)).toBeLessThan(1) + const glyph = (await row.locator('svg').first().boundingBox())! + expect(Math.abs(glyph.width - 16)).toBeLessThan(1) + expect(Math.abs(glyph.height - 16)).toBeLessThan(1) + } + const menuAria = await captureStableAria(page, '[role="menu"]', scaffold.workspaceCwd) + await compareOrRefreshGolden(SIGNED_OUT_MENU_EXPECTED, menuAria, MODE) + await page.keyboard.press('Escape') + await menu.waitFor({ state: 'detached' }) + } else { await page.getByRole('button', { name: '设置', exact: true }).waitFor() expect(await accountMenu.count()).toBe(0) expect(await page.getByRole('dialog', { name: '开始你的创作' }).count()).toBe(0) @@ -72,6 +97,6 @@ describe.skipIf(MODE === 'record').each([false, true])('web e2e: native credenti } expect(tripwire.warnings).toEqual([]) expect(tripwire.pageErrors).toEqual([]) - await assertFixtureInventory(SNAPSHOT_DIR, ['models.expected.md']) + await assertFixtureInventory(SNAPSHOT_DIR, ['models.expected.md', 'signed-out-menu.expected.md']) }) }) diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index 5b10d61e19..d2992bfd87 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: 2eb0f56daec2ad66c1407e397e30a872bda8c52e -README.zh.md: f1c1a5b66327d9dee85536afb737efd2afa23acb +README.md: 55a747896f5c115d08ebacea6046b4de711a530c +README.zh.md: 582a1b21113631305eb38bd02a140479704d365d diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 2eb0f56dae..55a747896f 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -24,7 +24,7 @@ Desktop Account settings display DeepSeek login state and offer browser authoriz The client activates only inside Desktop, identified by its preload bridge. Plain Web clients keep the standard Settings launcher and API-key onboarding without account login, account settings, or an account-state subscription. -The sidebar and Account settings display the profile avatar as a circular image, with the account icon as fallback when the URL is absent or the image fails to load. The collapsed sidebar centers the avatar in a 36 × 36 px button. +The sidebar and Account settings display the profile avatar as a circular image, with the account icon as fallback when the URL is absent or the image fails to load. The collapsed sidebar centers the avatar in a 36 × 36 px button. Before sign-in the sidebar launcher shows a More row instead, leading with the ellipsis glyph. The section registers through settings.section and uses the account Remote namespace. The stream survives carrier reconnects through the shared Remote supervisor. The page renders feature-owned English and Chinese copy and keeps API keys separate from account state. @@ -34,7 +34,7 @@ Desktop usage and top-up actions open an isolated native Platform view below a 4 The account menu's Feedback entry opens the Feishu questionnaire in the system browser. It supplies the available build version, UI locale and physical screen resolution as prefill_* parameters, with hide_*=1 for every context field; the account UID, tokens and contact details are excluded. Configure contactFormUrl on the ui-settings-account plugin to select another HTTPS form. contactSource defaults to empty until the questionnaire supports a Harness source option; OS and device fields remain unfilled, matching the Web implementation. -The sidebar account menu uses the shared Menu surface, backdrop blur, spacing, and row typography; feature styles only size its launcher. +The sidebar account menu uses the shared Menu surface and backdrop blur. The signed-in menu keeps the shared row typography; the signed-out menu carries its own wider rows and its Contact us copy for the Feedback entry. The account card’s More account information link opens `https://platform.deepseek.com` in the system browser. diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index f1c1a5b663..582a1b2111 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -24,7 +24,7 @@ Desktop 设置中的账号页面显示 DeepSeek 登录状态,并提供浏览 客户端仅在具有 preload 桥接的 Desktop 内启用。普通 Web 客户端保留标准设置入口和 API Key 引导,不显示账号登录和账号设置,也不订阅账号状态。 -侧边栏和账号设置以圆形图片显示账号头像;头像 URL 缺失或图片加载失败时使用账号图标兜底。折叠侧边栏将头像居中放置在 36 × 36 px 的按钮内。 +侧边栏和账号设置以圆形图片显示账号头像;头像 URL 缺失或图片加载失败时使用账号图标兜底。折叠侧边栏将头像居中放置在 36 × 36 px 的按钮内。登录前侧边栏入口改为「更多」行,以三点图标开头。 该页面通过 settings.section 注册,并使用 account Remote 命名空间。共享 Remote 管理器负责连接恢复后的流重连。页面使用功能自有的中英文文案,将 API Key 与账号状态分开。 @@ -34,7 +34,7 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl 账号菜单的“意见反馈”入口在系统浏览器中打开飞书问卷。链接通过 prefill_* 参数填写已有的构建版本、界面语言和屏幕物理分辨率,并为所有上下文字段设置 hide_*=1;不传账号 UID、token 或联系方式。可在 ui-settings-account 插件配置 contactFormUrl,切换到另一个 HTTPS 问卷。问卷支持 Harness 来源选项前,contactSource 默认为空;OS 和设备字段沿用 Web 实现,保持未填写。 -侧边栏账号菜单使用公共 Menu 的表面、背景模糊、间距和菜单项排版;功能样式仅设置入口布局。 +侧边栏账号菜单使用公共 Menu 的表面和背景模糊。已登录菜单沿用公共菜单项排版;未登录菜单使用自己的较宽菜单项,并将“意见反馈”入口的文案改为“联系我们”。 账号卡片的“更多账号信息”链接通过系统浏览器打开 `https://platform.deepseek.com`。 diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.module.css b/packages/client/ui-settings-account/src/client/AccountMenu.module.css index 71a1f38572..33dc01d4df 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.module.css +++ b/packages/client/ui-settings-account/src/client/AccountMenu.module.css @@ -6,3 +6,32 @@ .avatar { display: flex; align-items: center; justify-content: center; flex: none; width: 32px; height: 32px; border-radius: 16px; background: var(--dsw-alias-bg-skeleton); color: var(--dsw-alias-label-tertiary); } .label { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .error { color: var(--dsw-alias-state-error-primary); font-size: 12px; } + +/* Signed-out launcher: a 32px More row carrying the 14px ellipsis. */ +.trigger[data-signed-out='true']:not([data-collapsed='true']) { height: 32px; padding: 6px 2px 6px 6px; line-height: 20px; } + +/* Signed-out menu card and rows; listClassName reaches the portaled card. */ +.signedOutMenu[role='menu'] { + min-width: 124px; + max-width: 280px; + padding: 4px; + border-radius: 12px; + --dsw-elevation-stroke-color: var(--dsw-alias-border-inverted); +} + +.signedOutMenu [role='menuitem'] { + min-height: 40px; + gap: 8px; + padding: 8px 10px; + border-radius: 10px; + font-size: 14px; + line-height: 22px; +} + +.signedOutMenu [role='menuitem'] > span:first-child:not(:last-child) { + width: 16px; + height: 16px; + color: var(--dsw-alias-label-primary); +} + +.signedOutMenu [role='menuitem'] > span:first-child:not(:last-child) svg { width: 16px; height: 16px; } diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.tsx b/packages/client/ui-settings-account/src/client/AccountMenu.tsx index 2ad41b76a3..641716e16b 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.tsx +++ b/packages/client/ui-settings-account/src/client/AccountMenu.tsx @@ -1,6 +1,8 @@ /** Sidebar account launcher and locally authoritative sign-out action. */ import { useEffect, useState } from 'react' -import { Toast, Menu, IconPaperPlaneOutlineMedium, IconSettingsOutlineMedium, IconUserOutlineMedium } from '@deepseek-ai/dsh-client-ui-primitives' +import { + Toast, Menu, IconEllipsisOutlineMedium, IconPaperPlaneOutlineMedium, IconSettingsOutlineMedium, IconUserOutlineMedium, +} from '@deepseek-ai/dsh-client-ui-primitives' import type { InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots' import type { AccountSectionInjected } from './AccountSection.tsx' import { SignOutDialog } from './SignOutDialog.tsx' @@ -41,15 +43,17 @@ export function AccountMenu({ const beginSignIn = (): void => { setOpen(false); void start().catch(() => undefined) } return
{expiryNotice && { setExpiryNotice(false) }} />} - { setOpen(value => !value) }}> - - {wide && {signedIn ? label : t('signedOut')}} + {signedIn + ? + : } + {wide && {signedIn ? label : t('more')}} } items={[ { id: 'settings', label: t('settings'), icon: }, - { id: 'contact', label: t('contactUs'), icon: }, + { id: 'contact', label: signedIn ? t('contactUs') : t('contactUsSignedOut'), icon: }, ...(signedIn ? [{ id: 'signout', label: t('signOut'), icon: , disabled: busy }] : [{ id: 'signin', label: t('signIn'), icon: }]), ]} diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index 298475e62a..22a61c95a8 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -9,7 +9,7 @@ export const en = { failureTitle: 'Could not sign in', platformFailed: 'Could not complete the operation. Try again.', platformRetry: 'Retry', loading: 'Loading…', backToHarness: 'Back to DeepSeek Harness', - settings: 'Settings', contactUs: 'Feedback', menu: 'Account menu', + settings: 'Settings', contactUs: 'Feedback', contactUsSignedOut: 'Contact us', menu: 'Account menu', nav: 'Account', signedIn: 'Signed in to DeepSeek', signedOut: 'Not signed in', signIn: 'Sign in', signOut: 'Sign out', signOutUnknownDescription: 'Could not check running tasks. Signing out may interrupt tasks using this account. Sign out now?', @@ -38,7 +38,7 @@ export const zh: Record = { failureTitle: '登录失败', platformFailed: '操作未完成,请重试', platformRetry: '重试', loading: '加载中…', backToHarness: '返回 DeepSeek Harness', - settings: '设置', contactUs: '意见反馈', menu: '账号菜单', + settings: '设置', contactUs: '意见反馈', contactUsSignedOut: '联系我们', menu: '账号菜单', nav: '账号与余额', signedIn: '已登录 DeepSeek', signedOut: '尚未登录', signIn: '登录', signOut: '退出登录', signOutUnknownDescription: '暂时无法确认任务状态。退出登录可能会中断使用此账号的任务,是否继续?', diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index ea453dd99d..58fbbd01f4 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -95,6 +95,27 @@ it.each([en, zh].flatMap(copy => ([false, true, 'unknown'] as const).map(running expect(screen.queryByRole('menu')).toBeNull() }) +it.each([en, zh])('offers settings, contact and sign-in from the signed-out account menu', async (copy) => { + const openSettings = vi.fn() + const operations = operationsOf({ status: 'signed-out', attempt: null }) + const { AccountMenu } = await import('../src/client/AccountMenu.tsx') + render( selector(operations.hooks.account.getSnapshot())} + useTheme={selector => selector(operations.hooks.theme.getSnapshot())} wide openOnboarding={() => {}} openSettings={openSettings} + t={key => key in copy ? copy[key as AccountKey] : key} />) + const trigger = screen.getByRole('button', { name: copy.menu }) + expect(trigger.textContent).toBe(copy.more) + expect(trigger.querySelector('svg')).not.toBeNull() + fireEvent.click(trigger) + expect(screen.getAllByRole('menuitem').map(item => item.textContent)).toEqual([copy.settings, copy.contactUsSignedOut, copy.signIn]) + await expect(`${screen.getByRole('menu').textContent}\n`).toMatchFileSnapshot(`./expected/menu-signed-out-${copy === en ? 'en' : 'zh'}.txt`) + fireEvent.click(screen.getByRole('menuitem', { name: copy.settings })) + expect(openSettings).toHaveBeenCalledOnce() + fireEvent.click(screen.getByRole('button', { name: copy.menu })) + fireEvent.click(screen.getByRole('menuitem', { name: copy.contactUsSignedOut })) + expect(operations.contactUs).toHaveBeenCalledOnce() +}) + it('reports a failed start in the login dialog, not as a sidebar alert', async () => { const operations = mount({ status: 'signed-out', attempt: null }) cleanup() diff --git a/packages/client/ui-settings-account/tests/expected/login-failed-en.txt b/packages/client/ui-settings-account/tests/expected/login-failed-en.txt index bc8b5ad67b..3d89b41c4f 100644 --- a/packages/client/ui-settings-account/tests/expected/login-failed-en.txt +++ b/packages/client/ui-settings-account/tests/expected/login-failed-en.txt @@ -1 +1 @@ -Not signed inCould not sign inCould not complete the operation. Try again.Add API KeySign in again +MoreCould not sign inCould not complete the operation. Try again.Add API KeySign in again diff --git a/packages/client/ui-settings-account/tests/expected/menu-signed-out-en.txt b/packages/client/ui-settings-account/tests/expected/menu-signed-out-en.txt new file mode 100644 index 0000000000..9875291a51 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/menu-signed-out-en.txt @@ -0,0 +1 @@ +SettingsContact usSign in diff --git a/packages/client/ui-settings-account/tests/expected/menu-signed-out-zh.txt b/packages/client/ui-settings-account/tests/expected/menu-signed-out-zh.txt new file mode 100644 index 0000000000..fa5c8d7512 --- /dev/null +++ b/packages/client/ui-settings-account/tests/expected/menu-signed-out-zh.txt @@ -0,0 +1 @@ +设置联系我们登录 From 40da69ff7510ae7c642285c4a3665c92743d8291 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 14:43:47 +0800 Subject: [PATCH 23/60] refactor(account): isolate provider authentication and preserve model selections --- ...6-09-17-account-provider-signout.i18n.yaml | 4 +- .../2026-09-17-account-provider-signout.md | 10 +- .../2026-09-17-account-provider-signout.zh.md | 10 +- apps/cli/composition.md | 7 +- apps/cli/package.json | 2 + apps/cli/tests/built-bin.e2e.ts | 2 +- apps/cli/tests/fixtures/dsh-badge/snapshot.ts | 1 - .../tests/fixtures/control-surface/cordis.yml | 2 +- .../tests/fixtures/image-offload.cordis.yml | 2 +- .../headless/credentials-snapshot.patch.yml | 2 +- .../tests/profiles/headless/tests/harness.ts | 2 +- .../tests/profiles/headless/tests/ptc.e2e.ts | 2 +- docs/architecture.i18n.yaml | 4 +- docs/architecture.md | 2 +- docs/architecture.zh.md | 2 +- docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 103 ++++---------- docs/config-catalog.zh.md | 103 ++++---------- docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 37 ++--- docs/event-producer-consumer.zh.md | 37 ++--- docs/persistence-catalog.i18n.yaml | 4 +- docs/persistence-catalog.md | 4 +- docs/persistence-catalog.zh.md | 4 +- docs/persistence-schema.json | 4 +- docs/subsystems/core.i18n.yaml | 4 +- docs/subsystems/core.md | 4 - docs/subsystems/core.zh.md | 4 - docs/subsystems/credentials.i18n.yaml | 4 +- docs/subsystems/credentials.md | 15 ++ docs/subsystems/credentials.zh.md | 15 ++ docs/subsystems/session.i18n.yaml | 4 +- docs/subsystems/session.md | 4 +- docs/subsystems/session.zh.md | 4 +- .../api/account-controller/README.i18n.yaml | 4 +- packages/api/account-controller/README.md | 2 +- packages/api/account-controller/README.zh.md | 2 +- packages/api/account-controller/src/index.ts | 8 +- .../tests/signout-impact.spec.ts | 17 +-- .../api/job-controller/tests/host-harness.ts | 1 - .../job-controller/tests/observe.host.spec.ts | 1 - packages/api/remotes/package.json | 3 +- packages/api/remotes/src/remote-events.ts | 2 + packages/api/remotes/tsconfig.client.json | 3 + packages/api/remotes/tsconfig.host.json | 3 + .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 2 +- packages/api/session-controller/README.zh.md | 2 +- packages/api/session-controller/package.json | 7 + .../api/session-controller/src/catalog.ts | 28 ++++ .../api/session-controller/src/commands.ts | 3 - packages/api/session-controller/src/index.ts | 13 +- packages/api/session-controller/src/types.ts | 1 + .../tests/archived-session-gate.host.spec.ts | 1 - .../tests/session-models.host.spec.ts | 97 ++++++++++--- packages/bundle/base/cordis.patch.yml | 5 +- packages/bundle/base/package.json | 3 +- .../bundle/headless/tests/headless.spec.ts | 1 - packages/bundle/sdk-minimal/cordis.patch.yml | 2 +- packages/bundle/sdk-minimal/package.json | 2 +- .../sdk-minimal/tests/sdk-minimal.spec.ts | 2 +- .../client/ui-conversation/README.i18n.yaml | 4 +- packages/client/ui-conversation/README.md | 2 +- packages/client/ui-conversation/README.zh.md | 2 +- .../client/skeleton/ConversationContent.tsx | 4 +- .../tests/skeleton.client.spec.tsx | 7 +- .../ui-model-selection/README.i18n.yaml | 4 +- packages/client/ui-model-selection/README.md | 9 +- .../client/ui-model-selection/README.zh.md | 9 +- .../src/client/directory.ts | 10 +- .../ui-model-selection/src/client/index.ts | 4 +- .../ui-model-selection/src/client/locales.ts | 2 - .../ui-model-selection/src/client/service.ts | 26 +--- .../tests/browser-plugin.client.spec.ts | 95 ++----------- .../tests/model-select.client.spec.tsx | 31 ++++- .../ui-settings-account/README.i18n.yaml | 4 +- packages/client/ui-settings-account/README.md | 4 +- .../client/ui-settings-account/README.zh.md | 4 +- .../src/client/AccountMenu.tsx | 6 +- .../src/client/AccountSection.tsx | 5 + .../ui-settings-account/src/client/index.ts | 1 + .../ui-settings-account/src/client/locales.ts | 2 + .../tests/account.client.spec.tsx | 22 +++ .../context/agent-instructions/package.json | 1 + .../tests/agent-instructions.e2e.ts | 2 +- .../time-context/tests/time-context.spec.ts | 1 - .../tmux-context/tests/tmux-context.spec.ts | 1 - .../core/agent-default-model/README.i18n.yaml | 4 +- packages/core/agent-default-model/README.md | 2 +- .../core/agent-default-model/README.zh.md | 2 +- .../core/agent-default-model/src/index.ts | 4 +- packages/core/agent-loop/README.i18n.yaml | 4 +- packages/core/agent-loop/README.md | 1 - packages/core/agent-loop/README.zh.md | 1 - packages/core/agent-loop/package.json | 1 + packages/core/agent-loop/src/agent.ts | 8 +- packages/core/agent-loop/tests/inbox.spec.ts | 1 - .../agent-loop/tests/request-cache.e2e.ts | 2 +- packages/core/agent/README.i18n.yaml | 4 +- packages/core/agent/README.md | 1 - packages/core/agent/README.zh.md | 1 - packages/core/agent/src/runtime-types.ts | 2 - packages/core/agent/tests/agent.spec.ts | 1 - .../agent/tests/archive-admission.spec.ts | 1 - .../deepseek-account-platform/src/index.ts | 3 +- .../deepseek-account/README.i18n.yaml | 4 +- .../credentials/deepseek-account/README.md | 4 +- .../credentials/deepseek-account/README.zh.md | 4 +- .../credentials/deepseek-account/package.json | 13 +- .../deepseek-account/src/account-tasks.ts | 35 +++++ .../credentials/deepseek-account/src/index.ts | 1 + .../credentials/deepseek-account/src/types.ts | 10 ++ .../tests/account-tasks.spec.ts | 42 ++++++ .../deepseek-account/tsconfig.json | 6 + .../tool-present/tests/present.spec.ts | 1 - .../experimental/auto-review/package.json | 1 + .../auto-review/tests/auto-review.e2e.ts | 2 +- .../tests/resources.spec.ts | 2 +- .../extensions/tool-cordis/src/api-catalog.ts | 12 +- .../tests/command-feedback.spec.ts | 1 - .../tests/loader-composition.spec.ts | 1 - packages/fs/tool-fs/package.json | 1 + packages/fs/tool-fs/tests/harness.ts | 2 +- .../tests/tools.spec.ts | 1 - .../command-goal/tests/command-goal.spec.ts | 1 - packages/goal/goal/tests/goal.spec.ts | 1 - packages/goal/goal/tests/projection.spec.ts | 1 - .../goal/tool-goal/tests/tool-goal.spec.ts | 1 - packages/jobs/jobs-local/tests/events.spec.ts | 1 - packages/jobs/jobs-local/tests/jobs.spec.ts | 1 - packages/llm/README.i18n.yaml | 4 +- packages/llm/README.md | 4 +- packages/llm/README.zh.md | 4 +- .../llm/llm-deepseek-account/README.i18n.yaml | 6 + packages/llm/llm-deepseek-account/README.md | 75 ++++++++++ .../llm/llm-deepseek-account/README.zh.md | 75 ++++++++++ .../llm/llm-deepseek-account/package.json | 54 ++++++++ .../llm/llm-deepseek-account/src/config.ts | 6 + .../llm/llm-deepseek-account/src/index.ts | 47 +++++++ .../tests/provider.spec.ts | 44 ++++++ .../llm/llm-deepseek-account/tsconfig.json | 30 ++++ .../llm/llm-deepseek-api-key/README.i18n.yaml | 6 + packages/llm/llm-deepseek-api-key/README.md | 76 ++++++++++ .../llm/llm-deepseek-api-key/README.zh.md | 76 ++++++++++ .../llm/llm-deepseek-api-key/package.json | 53 +++++++ .../llm/llm-deepseek-api-key/src/config.ts | 39 ++++++ .../llm/llm-deepseek-api-key/src/index.ts | 51 +++++++ .../tests/discovery.spec.ts | 18 +++ .../llm/llm-deepseek-api-key/tsconfig.json | 33 +++++ packages/llm/llm-deepseek/README.i18n.yaml | 4 +- packages/llm/llm-deepseek/README.md | 19 ++- packages/llm/llm-deepseek/README.zh.md | 19 ++- packages/llm/llm-deepseek/package.json | 13 +- packages/llm/llm-deepseek/src/adapter.ts | 32 ++--- packages/llm/llm-deepseek/src/config.ts | 36 ++--- packages/llm/llm-deepseek/src/host.ts | 46 +++++++ packages/llm/llm-deepseek/src/index.ts | 121 +--------------- packages/llm/llm-deepseek/src/types.ts | 24 ++-- .../tests/account-routing.spec.ts | 70 ++++++++-- .../llm/llm-deepseek/tests/adapter.e2e.ts | 19 +-- .../llm/llm-deepseek/tests/adapter.spec.ts | 30 ++-- .../llm-deepseek/tests/dynamic-config.spec.ts | 6 +- .../llm/llm-deepseek/tests/egress.spec.ts | 2 +- .../llm/llm-deepseek/tests/extensions.spec.ts | 2 +- .../llm-deepseek/tests/fixtures/cordis.yml | 5 +- .../tests/loader-composition.spec.ts | 8 +- .../llm/llm-deepseek/tests/model-info.spec.ts | 9 ++ .../llm-deepseek/tests/prepared-call.spec.ts | 5 +- .../llm/llm-deepseek/tests/runtime.e2e.ts | 19 +-- .../llm/llm-deepseek/tests/runtime.spec.ts | 49 +++---- packages/llm/llm-deepseek/tsconfig.json | 9 -- packages/llm/llm-pi-ai/package.json | 1 + packages/llm/llm-pi-ai/tests/adapter.e2e.ts | 2 +- packages/llm/llm-retry/README.i18n.yaml | 4 +- packages/llm/llm-retry/README.md | 2 +- packages/llm/llm-retry/README.zh.md | 2 +- packages/llm/llm-retry/package.json | 1 + .../tests/transport-recovery.spec.ts | 2 +- packages/llm/llm/README.i18n.yaml | 4 +- packages/llm/llm/README.md | 2 +- packages/llm/llm/README.zh.md | 2 +- .../references/packages.md | 3 +- .../schedule/schedule/tests/runtime.spec.ts | 1 - .../schedule/schedule/tests/tools.spec.ts | 1 - packages/sdk/server/package.json | 4 +- packages/sdk/server/src/server.ts | 2 +- packages/sdk/server/tests/server.spec.ts | 3 +- packages/sdk/server/tsconfig.json | 2 +- .../session/session-log-deepseek/package.json | 1 + .../tests/feedback-composition.spec.ts | 6 +- .../package.json | 1 + .../tests/provider.e2e.ts | 2 +- .../tests/loader-composition.spec.ts | 1 - .../tool-bash-persistent/tests/tools.spec.ts | 1 - .../shell/tool-bash/tests/background.spec.ts | 2 - .../tests/loader-composition.spec.ts | 1 - .../tool-pwsh-persistent/tests/tools.spec.ts | 1 - .../shell/tool-pwsh/tests/background.spec.ts | 2 - .../skill/tool-skill/tests/tool-skill.spec.ts | 2 - .../subagent/subagent-dsh-sdk/package.json | 1 + .../tests/fixtures/loader/child.patch.yml | 2 +- .../subagent-spawn-in-process/package.json | 1 + .../tests/harness.ts | 2 +- .../subagent/tests/archive-admission.spec.ts | 1 - .../terminal-bash/tests/index.spec.ts | 3 - .../terminal-bash/tests/local.spec.ts | 1 - .../terminal/terminal/tests/service.spec.ts | 1 - .../tests/loader-composition.spec.ts | 1 - .../tool-terminal/tests/tools.spec.ts | 1 - .../tests/loader-composition.spec.ts | 1 - .../tool-workflow/tests/tool-workflow.spec.ts | 2 - packages/workflow/workflow-ptc/package.json | 1 + .../workflow-ptc/tests/workflow-ptc.e2e.ts | 2 +- pnpm-lock.yaml | 130 +++++++++++++++++- python/sdk-runtime/package.json | 2 + .../escalation-approved/cordis.snapshot.yml | 2 +- snapshots/acp/escalation-approved/cordis.yml | 2 +- .../acp/image-compaction/cordis.snapshot.yml | 2 +- .../account-signout.mjs | 2 +- .../sdk/account-provider-signout/cordis.yml | 4 +- snapshots/sdk/bash-tool/cordis.snapshot.yml | 2 +- snapshots/sdk/bash-tool/cordis.yml | 2 +- .../sdk/persistent-tools/cordis.snapshot.yml | 2 +- snapshots/sdk/persistent-tools/cordis.yml | 2 +- .../sdk/serial-created/cordis.snapshot.yml | 2 +- snapshots/sdk/serial-created/cordis.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../child.cordis.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../subagent-dsh-sdk-diagnostic/cordis.yml | 2 +- .../subagent-dsh-sdk-dynamic-route/cordis.yml | 2 +- .../subagent-send-message/cordis.snapshot.yml | 2 +- snapshots/sdk/text-turn/cordis.snapshot.yml | 2 +- snapshots/sdk/text-turn/cordis.yml | 2 +- .../agent-instructions/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../both-mode-turn/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../compaction-recovery/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis-inspect-jsdoc/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../empty-response-retry/cordis.snapshot.yml | 2 +- .../session/empty-response-retry/cordis.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../fs-glob-sampling/cordis.snapshot.yml | 2 +- snapshots/session/fs-glob-sampling/cordis.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../lsp-definition/cordis.snapshot.yml | 2 +- .../model-switch-notice/cordis.snapshot.yml | 2 +- .../multimodal-spill-ends/cordis.snapshot.yml | 2 +- .../session/office-skills/cordis.snapshot.yml | 2 +- .../parallel-tool-calls/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../persistent-pwsh-tool-turn/cordis.yml | 2 +- .../plugin-manager-mcp/cordis.snapshot.yml | 2 +- .../plugin-manager/cordis.snapshot.yml | 2 +- .../product-subagent-both/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../session/provider-cwd/cordis.snapshot.yml | 2 +- .../ptc-node-read-only/cordis.snapshot.yml | 2 +- .../ptc-node-workspace/cordis.snapshot.yml | 2 +- .../ptc-python-turn/cordis.snapshot.yml | 2 +- .../ptc-read-image/cordis.snapshot.yml | 2 +- .../session/ptc-turn/cordis.snapshot.yml | 2 +- .../ptc-workspace-context/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../pwsh-tool-turn/cordis.snapshot.yml | 2 +- snapshots/session/pwsh-tool-turn/cordis.yml | 2 +- .../session/ralph-loop/cordis.snapshot.yml | 2 +- .../read-image-text-route/cordis.snapshot.yml | 2 +- .../session/read-image/cordis.snapshot.yml | 2 +- .../session-query-spill/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../session-sandbox-root/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../subagent-tool-filter/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../system-prompt-in-history/cordis.yml | 2 +- .../session/team-targets/cordis.snapshot.yml | 2 +- .../session/text-turn/cordis.snapshot.yml | 2 +- snapshots/session/text-turn/cordis.yml | 2 +- .../session/web-fetch/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- .../workflow-confinement/cordis.snapshot.yml | 2 +- .../cordis.snapshot.yml | 2 +- tsconfig.base.json | 2 + tsconfig.host.json | 2 + 302 files changed, 1771 insertions(+), 952 deletions(-) create mode 100644 packages/credentials/deepseek-account/src/account-tasks.ts create mode 100644 packages/credentials/deepseek-account/tests/account-tasks.spec.ts create mode 100644 packages/llm/llm-deepseek-account/README.i18n.yaml create mode 100644 packages/llm/llm-deepseek-account/README.md create mode 100644 packages/llm/llm-deepseek-account/README.zh.md create mode 100644 packages/llm/llm-deepseek-account/package.json create mode 100644 packages/llm/llm-deepseek-account/src/config.ts create mode 100644 packages/llm/llm-deepseek-account/src/index.ts create mode 100644 packages/llm/llm-deepseek-account/tests/provider.spec.ts create mode 100644 packages/llm/llm-deepseek-account/tsconfig.json create mode 100644 packages/llm/llm-deepseek-api-key/README.i18n.yaml create mode 100644 packages/llm/llm-deepseek-api-key/README.md create mode 100644 packages/llm/llm-deepseek-api-key/README.zh.md create mode 100644 packages/llm/llm-deepseek-api-key/package.json create mode 100644 packages/llm/llm-deepseek-api-key/src/config.ts create mode 100644 packages/llm/llm-deepseek-api-key/src/index.ts create mode 100644 packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts create mode 100644 packages/llm/llm-deepseek-api-key/tsconfig.json create mode 100644 packages/llm/llm-deepseek/src/host.ts create mode 100644 packages/llm/llm-deepseek/tests/model-info.spec.ts diff --git a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml index 508dec336c..09412b4916 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml @@ -2,5 +2,5 @@ # 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/implemented/architecture/2026-09-17-account-provider-signout.md -2026-09-17-account-provider-signout.md: dd9930a7b36fd93c18febb8cca506e59bb605797 -2026-09-17-account-provider-signout.zh.md: e706a1bacc3c3ef2c3b29912fa85da59b02d8d5e +2026-09-17-account-provider-signout.md: 6b8ef842c54ef25d1e5fc063c40361775aae9a92 +2026-09-17-account-provider-signout.zh.md: 588dd38bf9fbae8131a9e3c5cb1181dcc807df8c diff --git a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.md b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.md index dd9930a7b3..6b8ef842c5 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.md +++ b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.md @@ -10,18 +10,18 @@ Selecting credentials from login state changes the billing identity of an existi ## Decision -`deepseek-official` and `deepseek-account` are independent routes sharing the DeepSeek protocol implementation and validated connection settings. Each adapter has exactly one credential resolver and authentication header mode. Neither route falls back to the other credential. The account service retains the origin and issuer validation defined by the [login decision](2026-09-14-deepseek-account-login.md). +`deepseek-official` and `deepseek-account` are independent routes sharing the DeepSeek protocol implementation. Each adapter has exactly one credential resolver and authentication header mode. Neither route falls back to the other credential. The account service retains the origin and issuer validation defined by the [login decision](2026-09-14-deepseek-account-login.md). -The Agent running phase owns `activeProvider`, the final provider returned by request preparation. The value remains through tools and retry preparation, changes when the next request binds, and clears before `turn/end`. It is undefined during a turn’s first preparation. A missing account credential still rejects the first request before transport. Token resolution checks local sign-out in progress; no login-level signal, credential lease, or synchronization protocol covers the short token-read/send interval. +Account cancellation reads each running Agent’s latest `Session.requestContext()` instead of maintaining another provider field. This logged value remains through tools and retries and follows the next bound request. Idle Agents are excluded. During a new turn’s first preparation it can still name the previous turn’s account route, so sign-out can also interrupt an API-key turn that has not bound its new request yet. A missing account credential rejects a first request without a previous context before transport. -Successful local sign-out publishes an account event. The DeepSeek plugin enumerates the live Agent registry and cancels matching account routes through `Agent.cancel`, preserving inboxes. Each registered child is classified independently; existing parent-owned cancellation still applies to children whose lifetime is attached to a cancelled parent. Independent API-key agents continue. The existing HTTP signal carries cancellation to the transport. +Successful local sign-out publishes an account event. The platform account provider installs the account module’s listener, which enumerates the Agent registry and cancels matching account routes through `Agent.cancel`, preserving inboxes. The account controller shares its predicate for sign-out confirmation. Each registered child is classified independently; existing parent-owned cancellation still applies to children whose lifetime is attached to a cancelled parent. The existing HTTP signal carries cancellation to transport. ## Alternatives considered -A historical set of providers wrongly cancels a turn after it switches to an API-key route. Current settings misclassify an older in-flight request. A module-global map duplicates Agent lifecycle ownership, while making the account service manage every provider reverses the service dependency. A login-level cancellation signal duplicates the existing Agent and HTTP cancellation chain. +A historical set of providers wrongly cancels a turn after it switches to an API-key route. Current settings misclassify an older in-flight request. A second provider field or module-global map duplicates information already recorded in request context. A login-level cancellation signal duplicates the existing Agent and HTTP cancellation chain. ## Consequences -Model selection exposes both routes, and choosing an account route requires login even when an API key exists. The account route shares its model catalog and connection settings with the API-key route. Cancellation preserves queued input without waking it automatically. The recorded hook reason produces a localized conversation notice without changing durable event types. +Model selection exposes both routes, and choosing an account route requires login even when an API key exists. The `llm-deepseek-account` and `llm-deepseek-api-key` plugins independently own catalogs, connection settings, and credentials; both use the `llm-deepseek` protocol library. Cancellation preserves queued input without waking it automatically. The recorded hook reason produces a localized conversation notice without changing durable event types. Behavior tests cover credential separation, first preparation, tool-stage cancellation, and route replacement. The SDK account-provider-signout scenario boots the shipped profile and records interrupted output plus the cancellation cause. diff --git a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.zh.md b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.zh.md index e706a1bacc..588dd38bf9 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.zh.md +++ b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.zh.md @@ -10,18 +10,18 @@ Status: implemented ## Decision -`deepseek-official` 和 `deepseek-account` 是独立路由,共享 DeepSeek 协议实现及已校验的连接设置。每个适配器仅有一个凭证解析器和认证请求头模式。两条路由均不回退到另一凭证。账号服务保留[登录决策](2026-09-14-deepseek-account-login.zh.md)定义的来源及签发方校验。 +`deepseek-official` 和 `deepseek-account` 是独立路由,共享 DeepSeek 协议实现。每个适配器仅有一个凭证解析器和认证请求头模式。两条路由均不回退到另一凭证。账号服务保留[登录决策](2026-09-14-deepseek-account-login.zh.md)定义的来源及签发方校验。 -Agent 运行阶段拥有 `activeProvider`,其值是请求准备返回的最终提供方。该值在工具执行及重试准备期间保留,在绑定下一请求时改变,在 `turn/end` 前清除。轮次的首请求准备期间该值为 undefined。账号凭证缺失仍在首请求进入传输前拒绝请求。Token 解析检查本地退登是否进行中;不为短暂的读取 token 到发送间隙引入登录级信号、凭证租约或同步协议。 +账号取消读取运行中 Agent 最近的 `Session.requestContext()`,不维护额外提供方字段。该已记录值在工具和重试阶段保留,随下一次绑定请求更新;空闲 Agent 不计入。新轮次首次准备期间,它仍可能指向上一轮的账号路由,因此退登也可能打断尚未绑定新请求的 API key 轮次。没有历史上下文的首请求若缺少账号凭据,会在传输前失败。 -本地退登成功后发布账号事件。DeepSeek 插件遍历运行中的 Agent 注册表,通过 `Agent.cancel` 取消匹配的账号路由并保留收件箱。每个已注册子代理独立分类;生命周期绑定到已取消父代理的子代理仍受现有父级取消规则约束。独立的 API Key 代理继续运行。现有 HTTP 信号将取消传递到传输层。 +本地退登成功后发布账号事件。Platform 账号提供方安装账号模块的监听器,遍历 Agent 注册表,通过 `Agent.cancel` 取消匹配的账号路由并保留收件箱。账号控制器的退登确认复用同一判断函数。每个已注册子代理独立分类;生命周期绑定到已取消父代理的子代理仍受现有父级取消规则约束。现有 HTTP 信号将取消传递到传输层。 ## Alternatives considered -历史提供方集合会在轮次切换到 API Key 路由后仍错误取消它。当前设置会误判更早的在途请求。模块级全局映射重复拥有 Agent 生命周期,让账号服务管理所有提供方则反转服务依赖。登录级取消信号重复现有 Agent 与 HTTP 取消链路。 +历史提供方集合会在轮次切换到 API Key 路由后仍错误取消它。当前设置会误判更早的在途请求。额外的提供方字段或模块级全局映射重复保存请求上下文中已有的信息。登录级取消信号重复现有 Agent 与 HTTP 取消链路。 ## Consequences -模型选择展示两条路由,即使存在 API Key,选择账号路由仍要求登录。账号路由与 API Key 路由共享模型目录和连接设置。取消保留排队输入,不自动唤醒。已记录的 hook 原因生成本地化对话提示,无须改变持久事件类型。 +模型选择展示两条路由,即使存在 API Key,选择账号路由仍要求登录。两个路由分别由 `llm-deepseek-account` 和 `llm-deepseek-api-key` 注册,拥有独立的模型目录与连接设置,共用 `llm-deepseek` 协议实现。取消保留排队输入,不自动唤醒。已记录的 hook 原因生成本地化对话提示,无须改变持久事件类型。 行为测试覆盖凭证分离、首请求准备、工具阶段取消及路由替换。SDK account-provider-signout 场景启动随附 profile,记录被中断的输出和取消原因。 diff --git a/apps/cli/composition.md b/apps/cli/composition.md index 81097704db..e72a1f0ce6 100644 --- a/apps/cli/composition.md +++ b/apps/cli/composition.md @@ -190,8 +190,10 @@ flowchart LR cfg --> plugin_dsh_base_agent_loop plugin_dsh_base_fs_sandbox["fs-sandbox
@deepseek-ai/dsh-fs-sandbox"] cfg --> plugin_dsh_base_fs_sandbox - plugin_dsh_base_llm_deepseek["llm-deepseek
@deepseek-ai/dsh-llm-deepseek"] + plugin_dsh_base_llm_deepseek["llm-deepseek
@deepseek-ai/dsh-llm-deepseek-api-key"] cfg --> plugin_dsh_base_llm_deepseek + plugin_dsh_base_llm_deepseek_account["llm-deepseek-account
@deepseek-ai/dsh-llm-deepseek-account"] + cfg --> plugin_dsh_base_llm_deepseek_account ``` | Plugin id | Package / module | @@ -287,7 +289,8 @@ flowchart LR | `system-prompt` | `@deepseek-ai/dsh-system-prompt` | | `agent-loop` | `@deepseek-ai/dsh-agent-loop` | | `fs-sandbox` | `@deepseek-ai/dsh-fs-sandbox` | -| `llm-deepseek` | `@deepseek-ai/dsh-llm-deepseek` | +| `llm-deepseek` | `@deepseek-ai/dsh-llm-deepseek-api-key` | +| `llm-deepseek-account` | `@deepseek-ai/dsh-llm-deepseek-account` | Source config: [`packages/bundle/base/cordis.patch.yml`](../../packages/bundle/base/cordis.patch.yml). diff --git a/apps/cli/package.json b/apps/cli/package.json index b433c2407f..a8e3175754 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -120,6 +120,8 @@ "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-account": "workspace:*", "@deepseek-ai/dsh-llm-mock-server": "workspace:*", "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", "@deepseek-ai/dsh-llm-replay": "workspace:*", diff --git a/apps/cli/tests/built-bin.e2e.ts b/apps/cli/tests/built-bin.e2e.ts index 874e216499..b26b3e538c 100644 --- a/apps/cli/tests/built-bin.e2e.ts +++ b/apps/cli/tests/built-bin.e2e.ts @@ -1246,7 +1246,7 @@ describe.skipIf(!existsSync(dshBin))('dsh BUILT bin (node lib/bin.js, no tsx)', ['deepseek-llm-api-extensions', '@deepseek-ai/dsh-deepseek-llm-api-extensions'], ['session-log-deepseek', '@deepseek-ai/dsh-session-log-deepseek'], ['plugin-package-inventory-deepseek', '@deepseek-ai/dsh-plugin-package-inventory-deepseek'], - ['llm-deepseek', '@deepseek-ai/dsh-llm-deepseek'], + ['llm-deepseek', '@deepseek-ai/dsh-llm-deepseek-api-key'], ['sandbox', '@deepseek-ai/dsh-sandbox-local'], ['session-projection', '@deepseek-ai/dsh-session-projection'], ['sandbox-policy', '@deepseek-ai/dsh-sandbox-policy'], diff --git a/apps/cli/tests/fixtures/dsh-badge/snapshot.ts b/apps/cli/tests/fixtures/dsh-badge/snapshot.ts index 89936bf4e7..4c2331ed0b 100644 --- a/apps/cli/tests/fixtures/dsh-badge/snapshot.ts +++ b/apps/cli/tests/fixtures/dsh-badge/snapshot.ts @@ -25,7 +25,6 @@ try { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', send: () => {}, followup: () => {}, diff --git a/apps/cli/tests/profiles/acp/tests/fixtures/control-surface/cordis.yml b/apps/cli/tests/profiles/acp/tests/fixtures/control-surface/cordis.yml index a74e909b1b..fa96b68772 100644 --- a/apps/cli/tests/profiles/acp/tests/fixtures/control-surface/cordis.yml +++ b/apps/cli/tests/profiles/acp/tests/fixtures/control-surface/cordis.yml @@ -1,7 +1,7 @@ # Keyless generic ACP v1 control-surface patch over `dsh --profile acp`. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: acp diff --git a/apps/cli/tests/profiles/acp/tests/fixtures/image-offload.cordis.yml b/apps/cli/tests/profiles/acp/tests/fixtures/image-offload.cordis.yml index aec25ed875..21a9ead728 100644 --- a/apps/cli/tests/profiles/acp/tests/fixtures/image-offload.cordis.yml +++ b/apps/cli/tests/profiles/acp/tests/fixtures/image-offload.cordis.yml @@ -2,7 +2,7 @@ # local provider endpoint is supplied by the snapshot test; the real attachment # store and ACP bridge carry two uploaded images into one model request. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DSH_SNAPSHOT_API_KEY baseURL: !!js process.env.DSH_SNAPSHOT_BASE_URL diff --git a/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml b/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml index 79757baa74..148d357d23 100644 --- a/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml +++ b/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml @@ -24,6 +24,6 @@ - insert: - id: llm-deepseek-keyless - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: baseURL: 'http://127.0.0.1:9' diff --git a/apps/cli/tests/profiles/headless/tests/harness.ts b/apps/cli/tests/profiles/headless/tests/harness.ts index 9c17fa27f4..c07b4b73fd 100644 --- a/apps/cli/tests/profiles/headless/tests/harness.ts +++ b/apps/cli/tests/profiles/headless/tests/harness.ts @@ -8,7 +8,7 @@ import * as BashEnvPlugin from '@deepseek-ai/dsh-shell-env' import LocalSubprocessRuntime from '@deepseek-ai/dsh-subprocess-local' import * as ToolBash from '@deepseek-ai/dsh-tool-bash' import * as ToolTodo from '@deepseek-ai/dsh-tool-todo' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import TokenMeter from '@deepseek-ai/dsh-token-meter' import ToolResultPruner from '@deepseek-ai/dsh-compaction-tool-result-pruner' import JsonlSessionPersistence from '@deepseek-ai/dsh-session-persistence-jsonl' diff --git a/apps/cli/tests/profiles/headless/tests/ptc.e2e.ts b/apps/cli/tests/profiles/headless/tests/ptc.e2e.ts index 4e0fc43235..ba55c91d16 100644 --- a/apps/cli/tests/profiles/headless/tests/ptc.e2e.ts +++ b/apps/cli/tests/profiles/headless/tests/ptc.e2e.ts @@ -17,7 +17,7 @@ import { LocalBashExecutor } from '@deepseek-ai/dsh-bash-local' import * as BashEnvPlugin from '@deepseek-ai/dsh-shell-env' import LocalSubprocessRuntime from '@deepseek-ai/dsh-subprocess-local' import * as ToolBash from '@deepseek-ai/dsh-tool-bash' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import NodeRuntime from '@deepseek-ai/dsh-ptc-runtime-node' import Sandbox from '@deepseek-ai/dsh-sandbox-local' import SandboxPolicy from '@deepseek-ai/dsh-sandbox-policy' diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index 4ff31ef398..133e6d9aa0 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/architecture.md -architecture.md: 09ad613e0a985e149579b7c655a503a4602f8ef6 -architecture.zh.md: 9eed57f4cc4f6368d8ce3913baae2cb3116055f9 +architecture.md: 634214943c14fe049f141350cad6518167f52bb1 +architecture.zh.md: 6082c5c86a900c03017fbf15f6c4abd41a48a9f9 diff --git a/docs/architecture.md b/docs/architecture.md index 09ad613e0a..634214943c 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -112,7 +112,7 @@ One inbox feeds the driver; injected context waits for a waking message. AgentLo `agent/pre-step` decides the accepted input. Listeners may rewrite or reject claimed messages; a rejected or empty first claim closes a durable turn without a step. An enter decision may set `startsRequestSeries`: the loop logs a fresh `request/header` (reason `series`, or `change` with `startsSeries: true` when the envelope also changed). Wrapping listeners preserve that declaration with `{ ...decision, messages }`. After assembly and `step/start`, `agent/request` and `prepareCall()` resolve the actual route before the system prompt and accepted users are committed; cancellation during either async phase commits neither. The prepared call capability governs prompt admission, not the preceding `request/context`. Every attempt synchronously reconciles the same rendered assembly, appends users only on the first attempt, logs header/context as needed, and derives and freezes the request before streaming the bound call. Retries do not repeat assembly or `agent/pre-step`. Surface replacements and image-offload decisions after attachment start a new request series, including during the first resumed pre-step; unchanged resume continues the series. The first admitted step reserves the system head before user messages even for an empty prompt (no wire message). The prompt travels only as `system/message` history: an empty rendering clears all active system nodes, leaving no old prompt model-visible; capable routes can append non-empty updates after the cached prefix; incapable routes and new request series consolidate non-empty prompt text at the first system node, with logged empty replacements for non-empty later system nodes ([decision](../.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.md); [decision rule](../packages/core/agent-loop/README.md#understand-the-implementation)). -The loop sends immutable requests with live cancellation and reuses freeze evidence for frozen identities; [agent-loop](../packages/core/agent-loop/README.md) owns construction and cancellation causes. `Agent.activeProvider` identifies the latest prepared request’s provider. +The loop sends immutable requests with live cancellation and reuses freeze evidence for frozen identities; [agent-loop](../packages/core/agent-loop/README.md) owns construction and cancellation causes. Details: the [sequence diagram](agent-lifecycle.md), the [tool pipeline](tool-execution-pipeline.md), and [cancellation and error recovery](subsystems/core.md#the-agent-handle). diff --git a/docs/architecture.zh.md b/docs/architecture.zh.md index 9eed57f4cc..6082c5c86a 100644 --- a/docs/architecture.zh.md +++ b/docs/architecture.zh.md @@ -116,7 +116,7 @@ turn/end `agent/pre-step` 决定接纳的输入。监听器可以改写或拒绝已领取消息;首次领取被拒绝或为空时,关闭不含步骤的持久轮次。enter 决策可设置 `startsRequestSeries`:循环记录新的 `request/header`(原因为 `series`,或在封装同时变化时为携带 `startsSeries: true` 的 `change`)。包装监听器通过 `{ ...decision, messages }` 保留该声明。组装与 `step/start` 之后,`agent/request` 和 `prepareCall()` 先解析实际路由,再提交系统提示词与已接纳用户消息;在任一异步阶段取消都不会提交这两者。提示词准入依据已准备调用的能力,而非先前的 `request/context`。每次尝试同步协调同一份已渲染组装结果、仅在首次尝试追加用户消息、按需记录 header/context、派生并冻结请求,再通过绑定调用发起流式请求。重试不重复组装或 `agent/pre-step`。附接后的 surface 替换和图片省略决定开启新请求序列,包括恢复后的首次 pre-step 中发生的替换;未变化的恢复延续序列。首次接纳的步骤在用户消息之前预留系统头节点,即使提示词为空(不产生协议消息)。提示词仅通过 `system/message` 历史传递:空渲染文本清除所有生效的系统节点,模型不再看到旧提示词;具备能力的路由可在缓存前缀之后追加非空更新;不具备能力的路由与新请求序列将非空提示词文本归并到首个系统节点,并为非空的后续系统节点记录空内容替换([决策](../.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.zh.md);[决策规则](../packages/core/agent-loop/README.zh.md#understand-the-implementation))。 -循环发送不可变请求,同时保持取消有效,仅对完全冻结的对象复用冻结证据;[agent-loop](../packages/core/agent-loop/README.zh.md) 负责请求构建与取消原因。`Agent.activeProvider` 标识最近一次已准备请求的提供方。 +循环发送不可变请求,同时保持取消有效,仅对完全冻结的对象复用冻结证据;[agent-loop](../packages/core/agent-loop/README.zh.md) 负责请求构建与取消原因。 详情见[时序图](agent-lifecycle.zh.md)、[工具流水线](tool-execution-pipeline.zh.md)和[取消与错误恢复](subsystems/core.zh.md#the-agent-handle)。 diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index a05d0be3b6..5b2e450ced 100644 --- a/docs/config-catalog.i18n.yaml +++ b/docs/config-catalog.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/config-catalog.md -config-catalog.md: 4df7032411d67f888c395faee700eb3f9729dfed -config-catalog.zh.md: bf5931d1726e7a5b8df4742bd925942c950c8511 +config-catalog.md: 6bc5481042c4c7db272404c97fbb1225fed227df +config-catalog.zh.md: bb48754fb2724f9dae49a4d0b12f50caa6525ded diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 4df7032411..6bc5481042 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -1430,96 +1430,38 @@ export interface Config { Source: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) - + -## `@deepseek-ai/dsh-llm-deepseek` +## `@deepseek-ai/dsh-llm-deepseek-account` Requires: `llm` ```ts config-catalog -/** - * Plugin config, validated by the same-named schemastery schema and doubling - * as the `llm-deepseek` settings-section shape. Every field is optional in - * yml: a missing API key resolves through {@link Config.apiKeyEnv} at each - * request (a request without any key fails with `MISSING_CREDENTIAL`, not at - * plugin load), omitted thinking mode uses the provider default, and omitted - * reasoning effort resolves to `high`. - */ -export interface Config { - /** Credential reference (environment-variable name) resolved per request; defaults to `DEEPSEEK_API_KEY`. */ - apiKeyEnv: Volatile - /** Endpoint base; falls back to $DEEPSEEK_BASE_URL from a trusted environment layer, then the public API. */ - baseURL: Volatile - /** Deployment thinking policy; `disabled` limits every conversation request to `off`. */ - thinking: Volatile<'enabled' | 'disabled' | undefined> - /** Default thinking effort (default `high`); `off` disables thinking per request. */ - reasoningEffort: Volatile<'off' | 'low' | 'high' | 'max' | undefined> - /** Default per-request output cap (default 256,000); a model's own cap and explicit request values win. */ - maxTokens: Volatile - /** Positive context capacity used when the selected model has no exact value (default 1,000,000). */ - defaultContextWindow: Volatile - /** Advisory models shown by discovery consumers; defaults to V41 Flash and V4 Pro. */ - models: Volatile - /** Maximum provider idle time while one stream read is outstanding (default five minutes). */ - streamIdleTimeoutMs: Volatile - /** Maximum accumulated file-referenced image bytes per chat request (default 128 MiB). */ - maxRequestFilesBytes: Volatile - /** Maximum accumulated base64 image payload after Files API fallback (default 20 MiB). */ - maxInlineRequestImageBytes: Volatile - /** Maximum number of represented images per chat request (default 600). */ - maxImagesPerRequest: Volatile - /** Raw-byte removal step after the request exceeds its file bound (default 64 MiB). */ - imageOffloadByteQuantum: Volatile - /** Base64-byte removal step after inline fallback exceeds its bound (default 10 MiB). */ - inlineImageOffloadByteQuantum: Volatile - /** Image-count removal step after the request exceeds its count bound (default 20). */ - imageOffloadCountQuantum: Volatile - /** Maximum duration of one request-image Files API resolution (default one minute). */ - filesApiTimeoutMs: Volatile - /** Explicit lifetime assigned to each uploaded image (default seven days). */ - fileExpiresAfterSeconds: Volatile - /** Remaining lifetime below which an indexed file is replaced (default one hour). */ - fileRefreshMarginSeconds: Volatile - /** Oldest harness-owned files deleted before one quota-recovery upload retry (default 100). */ - fileQuotaCleanupBatch: Volatile - /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */ - retryPolicy: Volatile -} +/** Account route configuration; authentication comes exclusively from the account service. */ +export type Config = ProtocolConfig +``` -/** One optional model entry advertised by the direct-fetch adapter. */ -export interface DeepSeekCatalogModel { - /** Wire model id accepted by the configured endpoint. */ - id: string - /** Selector label; defaults to {@link id}. */ - name?: string - /** Optional selector detail for deployments with similar model variants. */ - description?: string - /** Known combined request/response context capacity; omitted when deployment metadata is unavailable. */ - contextWindow?: number - /** Per-request output cap for this model; omission falls back to the profile's {@link DeepSeekConnectionOptions.maxTokens}. */ - maxTokens?: number - /** Accepted request modalities; omission is text-only. */ - inputModalities?: ModelModality[] - /** - * Total-pixel budget replacing the published token-grid projection for one - * deterministic request preview, or the 512-by-512 `low` preset; omission - * projects onto the token grid. - */ - imagePixelBudget?: number | 'low' - /** Encoded-byte target for one deterministic request preview; the smallest quality-ladder output is used when no quality fits. */ - imageMaxBytes?: number - /** - * `'in-history'` declares that the endpoint reads the latest `system` - * message at any position of the conversation as the complete effective - * system prompt; omission means only a leading system message is read. - */ - systemPromptUpdate?: SystemPromptUpdate +Depends on: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) + +Source: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) + + + +## `@deepseek-ai/dsh-llm-deepseek-api-key` + +Requires: `llm` + +```ts config-catalog +/** Messages configuration with a per-request API-key reference. */ +export interface Config extends ProtocolConfig { + /** Credential reference resolved per request; defaults to DEEPSEEK_API_KEY. */ + apiKeyEnv: Volatile } ``` -Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) +Depends on: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) -Source: [`packages/llm/llm-deepseek/src/config.ts:28`](../packages/llm/llm-deepseek/src/config.ts) +Source: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) @@ -4247,6 +4189,7 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them. - `@deepseek-ai/dsh-http-proxy` ([`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts)) - `@deepseek-ai/dsh-launch-environment` ([`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts)) - `@deepseek-ai/dsh-lazy-require` ([`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts)) +- `@deepseek-ai/dsh-llm-deepseek` ([`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts)) - `@deepseek-ai/dsh-llm-mock-server` ([`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts)) - `@deepseek-ai/dsh-loader-smoke` ([`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts)) - `@deepseek-ai/dsh-native-command` ([`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts)) diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index bf5931d172..bb48754fb2 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -1432,96 +1432,38 @@ export interface Config { 来源: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) - + -## `@deepseek-ai/dsh-llm-deepseek` +## `@deepseek-ai/dsh-llm-deepseek-account` 需要: `llm` ```ts config-catalog -/** - * Plugin config, validated by the same-named schemastery schema and doubling - * as the `llm-deepseek` settings-section shape. Every field is optional in - * yml: a missing API key resolves through {@link Config.apiKeyEnv} at each - * request (a request without any key fails with `MISSING_CREDENTIAL`, not at - * plugin load), omitted thinking mode uses the provider default, and omitted - * reasoning effort resolves to `high`. - */ -export interface Config { - /** Credential reference (environment-variable name) resolved per request; defaults to `DEEPSEEK_API_KEY`. */ - apiKeyEnv: Volatile - /** Endpoint base; falls back to $DEEPSEEK_BASE_URL from a trusted environment layer, then the public API. */ - baseURL: Volatile - /** Deployment thinking policy; `disabled` limits every conversation request to `off`. */ - thinking: Volatile<'enabled' | 'disabled' | undefined> - /** Default thinking effort (default `high`); `off` disables thinking per request. */ - reasoningEffort: Volatile<'off' | 'low' | 'high' | 'max' | undefined> - /** Default per-request output cap (default 256,000); a model's own cap and explicit request values win. */ - maxTokens: Volatile - /** Positive context capacity used when the selected model has no exact value (default 1,000,000). */ - defaultContextWindow: Volatile - /** Advisory models shown by discovery consumers; defaults to V41 Flash and V4 Pro. */ - models: Volatile - /** Maximum provider idle time while one stream read is outstanding (default five minutes). */ - streamIdleTimeoutMs: Volatile - /** Maximum accumulated file-referenced image bytes per chat request (default 128 MiB). */ - maxRequestFilesBytes: Volatile - /** Maximum accumulated base64 image payload after Files API fallback (default 20 MiB). */ - maxInlineRequestImageBytes: Volatile - /** Maximum number of represented images per chat request (default 600). */ - maxImagesPerRequest: Volatile - /** Raw-byte removal step after the request exceeds its file bound (default 64 MiB). */ - imageOffloadByteQuantum: Volatile - /** Base64-byte removal step after inline fallback exceeds its bound (default 10 MiB). */ - inlineImageOffloadByteQuantum: Volatile - /** Image-count removal step after the request exceeds its count bound (default 20). */ - imageOffloadCountQuantum: Volatile - /** Maximum duration of one request-image Files API resolution (default one minute). */ - filesApiTimeoutMs: Volatile - /** Explicit lifetime assigned to each uploaded image (default seven days). */ - fileExpiresAfterSeconds: Volatile - /** Remaining lifetime below which an indexed file is replaced (default one hour). */ - fileRefreshMarginSeconds: Volatile - /** Oldest harness-owned files deleted before one quota-recovery upload retry (default 100). */ - fileQuotaCleanupBatch: Volatile - /** Provider-owned model-request retry policy; omission uses normal mode with five retries. */ - retryPolicy: Volatile -} +/** Account route configuration; authentication comes exclusively from the account service. */ +export type Config = ProtocolConfig +``` -/** One optional model entry advertised by the direct-fetch adapter. */ -export interface DeepSeekCatalogModel { - /** Wire model id accepted by the configured endpoint. */ - id: string - /** Selector label; defaults to {@link id}. */ - name?: string - /** Optional selector detail for deployments with similar model variants. */ - description?: string - /** Known combined request/response context capacity; omitted when deployment metadata is unavailable. */ - contextWindow?: number - /** Per-request output cap for this model; omission falls back to the profile's {@link DeepSeekConnectionOptions.maxTokens}. */ - maxTokens?: number - /** Accepted request modalities; omission is text-only. */ - inputModalities?: ModelModality[] - /** - * Total-pixel budget replacing the published token-grid projection for one - * deterministic request preview, or the 512-by-512 `low` preset; omission - * projects onto the token grid. - */ - imagePixelBudget?: number | 'low' - /** Encoded-byte target for one deterministic request preview; the smallest quality-ladder output is used when no quality fits. */ - imageMaxBytes?: number - /** - * `'in-history'` declares that the endpoint reads the latest `system` - * message at any position of the conversation as the complete effective - * system prompt; omission means only a leading system message is read. - */ - systemPromptUpdate?: SystemPromptUpdate +依赖: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) + +来源: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) + + + +## `@deepseek-ai/dsh-llm-deepseek-api-key` + +需要: `llm` + +```ts config-catalog +/** Messages configuration with a per-request API-key reference. */ +export interface Config extends ProtocolConfig { + /** Credential reference resolved per request; defaults to DEEPSEEK_API_KEY. */ + apiKeyEnv: Volatile } ``` -Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) +依赖: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) -来源: [`packages/llm/llm-deepseek/src/config.ts:28`](../packages/llm/llm-deepseek/src/config.ts) +来源: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) @@ -4249,6 +4191,7 @@ export interface Config { - `@deepseek-ai/dsh-http-proxy`([`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts)) - `@deepseek-ai/dsh-launch-environment`([`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts)) - `@deepseek-ai/dsh-lazy-require`([`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts)) +- `@deepseek-ai/dsh-llm-deepseek`([`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts)) - `@deepseek-ai/dsh-llm-mock-server`([`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts)) - `@deepseek-ai/dsh-loader-smoke`([`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts)) - `@deepseek-ai/dsh-native-command`([`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts)) diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index b14b776b69..081eff2e79 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/event-producer-consumer.md -event-producer-consumer.md: 0b66d761bf95950f6b7031552ea08636b8113427 -event-producer-consumer.zh.md: 5d73788aaff631e7164b335d83f7c0202f2ee9b0 +event-producer-consumer.md: 9db87ff7725beda6d0aa22c7fea301bab3fd9a5c +event-producer-consumer.zh.md: 6d45f01d4cc79d4b746d2f757d05a32d0a2a79ce diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 0b66d761bf..9db87ff772 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -9,23 +9,23 @@ This matrix shows which packages dispatch each harness-owned event and which pac | --- | --- | --- | --- | --- | | `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | | `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:59`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | `remotes` | -| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:365`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | -| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:263`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`schedule`](../packages/schedule/schedule), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:272`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:395`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`session-telemetry`](../packages/session/session-telemetry) | -| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:301`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) | -| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:309`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent) | -| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:290`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver) | -| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:322`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill), [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/request` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:339`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`webhook`](../packages/webhook/webhook) | -| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:355`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | -| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:282`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | -| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:383`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | -| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:610`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:590`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:617`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:596`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:603`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | +| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:261`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`schedule`](../packages/schedule/schedule), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:270`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:393`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`deepseek-account`](../packages/credentials/deepseek-account), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`session-telemetry`](../packages/session/session-telemetry) | +| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) | +| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:307`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent) | +| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:288`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver) | +| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:320`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill), [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/request` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:337`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`webhook`](../packages/webhook/webhook) | +| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:353`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | +| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:280`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | +| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:381`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:611`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:591`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:618`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:597`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:604`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `app-boot/config-reload` | `emit` | [`packages/boot/app-boot/src/index.ts:45`](../packages/boot/app-boot/src/index.ts) | [`app-boot`](../packages/boot/app-boot) (`emit`) | [`settings`](../packages/settings/settings) | | `approval/request` | `waterfall` | [`packages/interaction/user-approval/src/types.ts:85`](../packages/interaction/user-approval/src/types.ts) | [`user-approval`](../packages/interaction/user-approval) (`waterfall`) | [`acp`](../packages/acp/acp), `remotes` | | `authorization/settled` | `emit` | [`packages/credentials/authorization/src/index.ts:57`](../packages/credentials/authorization/src/index.ts) | [`authorization`](../packages/credentials/authorization) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization) | @@ -40,7 +40,8 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | -| `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:11`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`llm-deepseek`](../packages/llm/llm-deepseek) | +| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:57`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:12`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`deepseek-account`](../packages/credentials/deepseek-account) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | | `feedback/committed` | `parallel` | [`packages/feedback/message-feedback/src/index.ts:58`](../packages/feedback/message-feedback/src/index.ts) | [`message-feedback`](../packages/feedback/message-feedback) (`parallel`) | [`session-telemetry-otel`](../packages/session/session-telemetry-otel) | | `fs/edit-intent` | `waterfall` | [`packages/fs/fs/src/index.ts:67`](../packages/fs/fs/src/index.ts) | [`tool-fs`](../packages/fs/tool-fs) (`waterfall`), [`tool-str-replace-editor`](../packages/fs/tool-str-replace-editor) (`waterfall`) | [`fs-observation-policy`](../packages/fs/fs-observation-policy) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index 5d73788aaf..6d45f01d4c 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -11,23 +11,23 @@ | --- | --- | --- | --- | --- | | `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | | `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:59`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | `remotes` | -| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:365`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | -| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:263`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`schedule`](../packages/schedule/schedule), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:272`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:395`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`session-telemetry`](../packages/session/session-telemetry) | -| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:301`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) | -| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:309`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent) | -| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:290`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver) | -| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:322`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill), [`tool-subagent`](../packages/subagent/tool-subagent) | -| `agent/request` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:339`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`webhook`](../packages/webhook/webhook) | -| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:355`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | -| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:282`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | -| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:383`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | -| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:610`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:590`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:617`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:596`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:603`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:363`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` | +| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:261`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`schedule`](../packages/schedule/schedule), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:270`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:393`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`deepseek-account`](../packages/credentials/deepseek-account), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`session-telemetry`](../packages/session/session-telemetry) | +| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) | +| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:307`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent) | +| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:288`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver) | +| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:320`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`subagent-in-process-driver`](../packages/subagent/subagent-in-process-driver), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill), [`tool-subagent`](../packages/subagent/tool-subagent) | +| `agent/request` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:337`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`webhook`](../packages/webhook/webhook) | +| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:353`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) | +| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:280`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`agent`](../packages/core/agent), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`schedule`](../packages/schedule/schedule), `server`, `session-controller` | +| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:381`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/hooks/hooks-claude-code), [`hooks-codex`](../packages/hooks/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:611`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:591`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:618`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:597`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:604`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `app-boot/config-reload` | `emit` | [`packages/boot/app-boot/src/index.ts:45`](../packages/boot/app-boot/src/index.ts) | [`app-boot`](../packages/boot/app-boot) (`emit`) | [`settings`](../packages/settings/settings) | | `approval/request` | `waterfall` | [`packages/interaction/user-approval/src/types.ts:85`](../packages/interaction/user-approval/src/types.ts) | [`user-approval`](../packages/interaction/user-approval) (`waterfall`) | [`acp`](../packages/acp/acp), `remotes` | | `authorization/settled` | `emit` | [`packages/credentials/authorization/src/index.ts:57`](../packages/credentials/authorization/src/index.ts) | [`authorization`](../packages/credentials/authorization) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization) | @@ -42,7 +42,8 @@ | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | -| `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:11`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`llm-deepseek`](../packages/llm/llm-deepseek) | +| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:57`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:12`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`deepseek-account`](../packages/credentials/deepseek-account) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | | `feedback/committed` | `parallel` | [`packages/feedback/message-feedback/src/index.ts:58`](../packages/feedback/message-feedback/src/index.ts) | [`message-feedback`](../packages/feedback/message-feedback) (`parallel`) | [`session-telemetry-otel`](../packages/session/session-telemetry-otel) | | `fs/edit-intent` | `waterfall` | [`packages/fs/fs/src/index.ts:67`](../packages/fs/fs/src/index.ts) | [`tool-fs`](../packages/fs/tool-fs) (`waterfall`), [`tool-str-replace-editor`](../packages/fs/tool-str-replace-editor) (`waterfall`) | [`fs-observation-policy`](../packages/fs/fs-observation-policy) | diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index fe679d21df..84e4e8fecc 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/persistence-catalog.md -persistence-catalog.md: e8ac36448d2365ae11b103ede84f55499850232e -persistence-catalog.zh.md: 1928c824c273fce4ce12016edd2f636234f69fc3 +persistence-catalog.md: 730e85c773fe34b8fd12a0aff8107401b54620d6 +persistence-catalog.zh.md: 7829109459c268139f15a804cc2443c6d566360c diff --git a/docs/persistence-catalog.md b/docs/persistence-catalog.md index e8ac36448d..730e85c773 100644 --- a/docs/persistence-catalog.md +++ b/docs/persistence-catalog.md @@ -5315,7 +5315,7 @@ Array of `number`. SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -Sources: [`packages/api/session-controller/src/types.ts:397`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:12`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +Sources: [`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:12`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7248,7 +7248,7 @@ Sources: [`packages/core/tools/src/index.ts:34`](../packages/core/tools/src/inde SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7` -Sources: [`packages/api/session-controller/src/types.ts:402`](../packages/api/session-controller/src/types.ts) +Sources: [`packages/api/session-controller/src/types.ts:403`](../packages/api/session-controller/src/types.ts) | Property | Presence | Type | |---|---|---| diff --git a/docs/persistence-catalog.zh.md b/docs/persistence-catalog.zh.md index 1928c824c2..7829109459 100644 --- a/docs/persistence-catalog.zh.md +++ b/docs/persistence-catalog.zh.md @@ -5317,7 +5317,7 @@ SHA-256: `5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78` SHA-256: `4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b` -来源:[`packages/api/session-controller/src/types.ts:397`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:12`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) +来源:[`packages/api/session-controller/src/types.ts:398`](../packages/api/session-controller/src/types.ts) · [`packages/attachment/attachment/src/brand.ts:6`](../packages/attachment/attachment/src/brand.ts) · [`packages/compaction/compaction/src/brand.ts:4`](../packages/compaction/compaction/src/brand.ts) · [`packages/core/session/src/types.ts:20`](../packages/core/session/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:20`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:32`](../packages/experimental/agent-team/src/types.ts) · [`packages/experimental/agent-team/src/types.ts:8`](../packages/experimental/agent-team/src/types.ts) · [`packages/feedback/message-feedback/src/types.ts:14`](../packages/feedback/message-feedback/src/types.ts) · [`packages/goal/goal/src/types.ts:17`](../packages/goal/goal/src/types.ts) · [`packages/interaction/commands/src/brand.ts:31`](../packages/interaction/commands/src/brand.ts) · [`packages/interaction/user-approval/src/types.ts:17`](../packages/interaction/user-approval/src/types.ts) · [`packages/llm/llm-retry/src/brand.ts:4`](../packages/llm/llm-retry/src/brand.ts) · [`packages/llm/llm/src/brand.ts:16`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:31`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:43`](../packages/llm/llm/src/brand.ts) · [`packages/llm/llm/src/brand.ts:67`](../packages/llm/llm/src/brand.ts) · [`packages/schedule/schedule/src/types.ts:12`](../packages/schedule/schedule/src/types.ts) · [`packages/session/session-title/src/index.ts:42`](../packages/session/session-title/src/index.ts) · [`packages/session/session-title/src/types.ts:17`](../packages/session/session-title/src/types.ts) · [`packages/webhook/webhook/src/brand.ts:12`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:6`](../packages/webhook/webhook/src/brand.ts) · [`packages/webhook/webhook/src/brand.ts:9`](../packages/webhook/webhook/src/brand.ts) · [`packages/workflow/workflow/src/types.ts:13`](../packages/workflow/workflow/src/types.ts) `string` @@ -7250,7 +7250,7 @@ SHA-256: `8fcb0b44a575e998665c053643d1ab04c82f39253ebd190ac0c975b78e40b543` SHA-256: `6a4f72e2e179e17b922f2a9392c0e1c8f8c707f32494372454850a3eb184a6e7` -来源:[`packages/api/session-controller/src/types.ts:402`](../packages/api/session-controller/src/types.ts) +来源:[`packages/api/session-controller/src/types.ts:403`](../packages/api/session-controller/src/types.ts) | 属性 | 存在性 | 类型 | |---|---|---| diff --git a/docs/persistence-schema.json b/docs/persistence-schema.json index 6b93bc0670..909a082aa7 100644 --- a/docs/persistence-schema.json +++ b/docs/persistence-schema.json @@ -44608,7 +44608,7 @@ "packages/workflow/workflow/src/types.ts#WorkflowRunId" ], "sources": [ - "packages/api/session-controller/src/types.ts:397", + "packages/api/session-controller/src/types.ts:398", "packages/attachment/attachment/src/brand.ts:6", "packages/compaction/compaction/src/brand.ts:4", "packages/core/session/src/types.ts:20", @@ -58191,7 +58191,7 @@ }, "names": [], "sources": [ - "packages/api/session-controller/src/types.ts:402" + "packages/api/session-controller/src/types.ts:403" ] }, { diff --git a/docs/subsystems/core.i18n.yaml b/docs/subsystems/core.i18n.yaml index 82bccd08e4..28bbc0d975 100644 --- a/docs/subsystems/core.i18n.yaml +++ b/docs/subsystems/core.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/core.md -core.md: d6069514aebceb1b226874dc55a1711ee92adbdc -core.zh.md: eb6a4b66509cd572618bcab85f8cb520ee8ddea3 +core.md: 36fee2dfea5e38229f16ddbca2da567eeca0f2c5 +core.zh.md: c807828249fde64df291ca098922829107515d1d diff --git a/docs/subsystems/core.md b/docs/subsystems/core.md index d6069514ae..36fee2dfea 100644 --- a/docs/subsystems/core.md +++ b/docs/subsystems/core.md @@ -69,8 +69,6 @@ interface Agent { readonly inbox: Inbox /** The current lifecycle state, mirrored on every `agent/status` transition. */ readonly status: AgentStatus - /** Latest prepared provider in this turn; retained through tools and retries, absent before preparation and between turns. */ - readonly activeProvider: string | undefined /** Agent-scoped context; its contributions are agent-local, unwind on disposal, and reject registration afterward. */ readonly ctx: Context @@ -1105,5 +1103,3 @@ One session committed a different agent preset to its durable log. Consumers inv Source: [`packages/preset/agent-preset-registry/src/types.ts`](../../packages/preset/agent-preset-registry/src/types.ts) - -`Agent.activeProvider` is the latest prepared request’s provider in the current turn. It is undefined before first preparation and between turns, stays unchanged during tools and subsequent preparation, and changes only when the next final request configuration is bound. diff --git a/docs/subsystems/core.zh.md b/docs/subsystems/core.zh.md index eb6a4b6650..c807828249 100644 --- a/docs/subsystems/core.zh.md +++ b/docs/subsystems/core.zh.md @@ -73,8 +73,6 @@ interface Agent { readonly inbox: Inbox /** The current lifecycle state, mirrored on every `agent/status` transition. */ readonly status: AgentStatus - /** Latest prepared provider in this turn; retained through tools and retries, absent before preparation and between turns. */ - readonly activeProvider: string | undefined /** Agent-scoped context; its contributions are agent-local, unwind on disposal, and reject registration afterward. */ readonly ctx: Context @@ -1115,5 +1113,3 @@ One session committed a different agent preset to its durable log. Consumers inv Source: [`packages/preset/agent-preset-registry/src/types.ts`](../../packages/preset/agent-preset-registry/src/types.ts) - -`Agent.activeProvider` 是当前轮次最近已准备请求的提供方。首请求准备前及轮次之间为 undefined,工具执行和后续请求准备期间保持不变,仅在绑定下一最终请求配置时改变。 diff --git a/docs/subsystems/credentials.i18n.yaml b/docs/subsystems/credentials.i18n.yaml index 509edf1de2..12c977de99 100644 --- a/docs/subsystems/credentials.i18n.yaml +++ b/docs/subsystems/credentials.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/credentials.md -credentials.md: f6d510d48ec92feb28cc3af8820a1e497fad2cdd -credentials.zh.md: 7040fe28cb930a0f2dce9a092124fa24e72cf767 +credentials.md: 46427bd45c50a9ecee173ba05528339692abbb7f +credentials.zh.md: 1c3e6f3d16e08fe06376f77ff79df3ffcc208cde diff --git a/docs/subsystems/credentials.md b/docs/subsystems/credentials.md index f6d510d48e..46427bd45c 100644 --- a/docs/subsystems/credentials.md +++ b/docs/subsystems/credentials.md @@ -414,6 +414,21 @@ Source: [`packages/credentials/credentials/src/types.ts`](../../packages/credent ### `deepseek-account/*` events + + +#### `deepseek-account/model-sign-in-required` — emit + +An account model request requires the user to sign in. + +```ts cordis-catalog +/** An account model request requires the user to sign in. + * @mode emit + */ +'deepseek-account/model-sign-in-required'(): void +``` + +Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + #### `deepseek-account/signed-out` — emit diff --git a/docs/subsystems/credentials.zh.md b/docs/subsystems/credentials.zh.md index 7040fe28cb..1c3e6f3d16 100644 --- a/docs/subsystems/credentials.zh.md +++ b/docs/subsystems/credentials.zh.md @@ -414,6 +414,21 @@ Source: [`packages/credentials/credentials/src/types.ts`](../../packages/credent ### `deepseek-account/*` events + + +#### `deepseek-account/model-sign-in-required` — emit + +An account model request requires the user to sign in. + +```ts cordis-catalog +/** An account model request requires the user to sign in. + * @mode emit + */ +'deepseek-account/model-sign-in-required'(): void +``` + +Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + #### `deepseek-account/signed-out` — emit diff --git a/docs/subsystems/session.i18n.yaml b/docs/subsystems/session.i18n.yaml index d1d8cc0230..40802fb4a8 100644 --- a/docs/subsystems/session.i18n.yaml +++ b/docs/subsystems/session.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/session.md -session.md: 8a8fbc6a68b414b9e8d658822bc9f2cb26000d8f -session.zh.md: 04a4ed2becfad588bc8c1fcd64cba5d84820ea5a +session.md: 8c060b1a34f9f16ebf0ececd28ecdf24e77f497b +session.zh.md: dc26e5a5dc15251bef1fb93cc53ceff2fee55ab6 diff --git a/docs/subsystems/session.md b/docs/subsystems/session.md index 8a8fbc6a68..8c060b1a34 100644 --- a/docs/subsystems/session.md +++ b/docs/subsystems/session.md @@ -821,9 +821,9 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise /** - * Initialize the default after the user first configures a provider credential. + * Initialize a provider default; account login replaces it only when no provider API key is configured. * @param provider - the provider whose credential was configured. - * @returns after saving the initial available model; existing user choices are retained. + * @returns after saving the first available model or retaining the existing default. */ @Remote async initializeDefaultModel(provider: string): Promise diff --git a/docs/subsystems/session.zh.md b/docs/subsystems/session.zh.md index 04a4ed2bec..dc26e5a5dc 100644 --- a/docs/subsystems/session.zh.md +++ b/docs/subsystems/session.zh.md @@ -825,9 +825,9 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise /** - * Initialize the default after the user first configures a provider credential. + * Initialize a provider default; account login replaces it only when no provider API key is configured. * @param provider - the provider whose credential was configured. - * @returns after saving the initial available model; existing user choices are retained. + * @returns after saving the first available model or retaining the existing default. */ @Remote async initializeDefaultModel(provider: string): Promise diff --git a/packages/api/account-controller/README.i18n.yaml b/packages/api/account-controller/README.i18n.yaml index 236a988cda..8cd04c057c 100644 --- a/packages/api/account-controller/README.i18n.yaml +++ b/packages/api/account-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/account-controller/README.md -README.md: e1d0769e5e76541355f6b725627a833ce399fa2b -README.zh.md: cbc167df735d692c5395bf167c777f1bf17fe8a5 +README.md: a5d3405353245335a45a26eedc4e4281cf045ecb +README.zh.md: 353d79fac4ab0a01a659d9f1ad9d2944fe01f735 diff --git a/packages/api/account-controller/README.md b/packages/api/account-controller/README.md index e1d0769e5e..a5d3405353 100644 --- a/packages/api/account-controller/README.md +++ b/packages/api/account-controller/README.md @@ -22,7 +22,7 @@ Account screens use authenticated Remote commands and a snapshot stream. The con The account namespace exposes getState, getProfile / getBalance, startSignIn, cancelSignIn, signOut, and watch. watch emits an initial complete state and subsequent complete states; disconnecting stops observation, not the login attempt. Cancellation names the attempt ID so a stale screen cannot cancel a newer login. -hasRunningAccountTasks reads the agents registry and reports whether any active prepared provider is deepseek-account, including tool execution and retries. It excludes unprepared turns and API-key providers. The result describes the query instant; sign-out independently cancels matching agents when credentials are removed. +`hasRunningAccountTasks` checks running Agents through the account-owned predicate over their latest logged request context, including tools and retries. Idle Agents and API-key contexts are excluded. The account provider independently cancels matching tasks when credentials are removed. ## Understand the implementation diff --git a/packages/api/account-controller/README.zh.md b/packages/api/account-controller/README.zh.md index cbc167df73..353d79fac4 100644 --- a/packages/api/account-controller/README.zh.md +++ b/packages/api/account-controller/README.zh.md @@ -22,7 +22,7 @@ kind: "package-reference" account 命名空间提供 getState、getProfile / getBalance、startSignIn、cancelSignIn、signOut 和 watch。watch 先发送完整初始状态,随后发送完整状态变化;断开连接只停止观察,不取消登录。取消操作必须指定尝试 ID,防止旧页面取消新登录。 -hasRunningAccountTasks 读取 agents 注册表,判断是否有任务实际使用 deepseek-account,包括工具执行和重试阶段;未完成请求准备的轮次和 API key provider 不计入。结果反映查询时刻;移除凭据时,退登操作会独立取消匹配的 Agent。 +`hasRunningAccountTasks` 通过账号模块的判断函数,检查运行中 Agent 最近记录的请求上下文,包括工具和重试阶段。空闲 Agent 及 API key 上下文不计入。移除凭据时,账号提供方独立取消匹配任务。 ## 理解实现 diff --git a/packages/api/account-controller/src/index.ts b/packages/api/account-controller/src/index.ts index 3984b3b291..d713673499 100644 --- a/packages/api/account-controller/src/index.ts +++ b/packages/api/account-controller/src/index.ts @@ -1,7 +1,7 @@ /** Authenticated Remote operations for account UI consumers. */ import { Context } from '@deepseek-ai/cordis' import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol' -import type {} from '@deepseek-ai/dsh-deepseek-account' +import { isRunningAccountTask } from '@deepseek-ai/dsh-deepseek-account' import type {} from '@deepseek-ai/dsh-agent' import type { AccountDetails } from '@deepseek-ai/dsh-deepseek-account/types' import type { AccountView, SignInAttemptId } from './types.ts' @@ -46,12 +46,12 @@ export class AccountController extends TypertRemoteService { @Remote cancelSignIn(attemptId: SignInAttemptId): Promise { return this.ctx.deepseekAccount.cancelSignIn(attemptId) } /** - * Inspect prepared providers across running tasks, including tools and retries. - * @returns whether any task currently uses the account token; unprepared turns are excluded. + * Inspect the latest logged request providers of running tasks, including tools and retries. + * @returns whether running work has a latest request context on the account route. */ @Remote hasRunningAccountTasks(): boolean { - return this.ctx.agents.list().some(agent => agent.activeProvider === 'deepseek-account') + return this.ctx.agents.list().some(isRunningAccountTask) } /** * Remove the local account grant and revoke it through Platform in the background, without deleting API keys. diff --git a/packages/api/account-controller/tests/signout-impact.spec.ts b/packages/api/account-controller/tests/signout-impact.spec.ts index ff618dcae2..837deddd27 100644 --- a/packages/api/account-controller/tests/signout-impact.spec.ts +++ b/packages/api/account-controller/tests/signout-impact.spec.ts @@ -1,21 +1,22 @@ -/** Sign-out impact reads prepared providers rather than configured routes. */ +/** Sign-out impact follows the latest logged provider of running tasks. */ import { Context } from '@deepseek-ai/cordis' import { expect, it } from 'vitest' import type { Agent } from '@deepseek-ai/dsh-agent' import { AccountController } from '../src/index.ts' -it('reports only currently prepared account-token tasks', async () => { +it('reports running account requests and excludes idle or unbound tasks', async () => { const ctx = new Context() - const active: Array> = [] - // This query only consumes the registry list and each agent's prepared provider. - ctx.provide('agents') - ctx.set('agents', { list: () => active } as Context['agents']) + const active: Array> = [] + const task = (status: Agent['status'], provider?: string): Pick => ({ + status, session: { requestContext: () => provider === undefined ? undefined : { provider, model: 'model' } } as Agent['session'], + }) + ctx.provide('agents', { list: () => active } as Context['agents']) const controller = new AccountController(ctx) try { expect(controller.hasRunningAccountTasks()).toBe(false) - active.push({ activeProvider: undefined }, { activeProvider: 'deepseek-official' }) + active.push(task('running'), task('running', 'deepseek-official'), task('idle', 'deepseek-account')) expect(controller.hasRunningAccountTasks()).toBe(false) - active.push({ activeProvider: 'deepseek-account' }) + active.push(task('running', 'deepseek-account')) expect(controller.hasRunningAccountTasks()).toBe(true) active.pop() expect(controller.hasRunningAccountTasks()).toBe(false) diff --git a/packages/api/job-controller/tests/host-harness.ts b/packages/api/job-controller/tests/host-harness.ts index 2bd0ef37ea..85609166b0 100644 --- a/packages/api/job-controller/tests/host-harness.ts +++ b/packages/api/job-controller/tests/host-harness.ts @@ -21,7 +21,6 @@ export async function registerAgent(ctx: Context, rawId: string): Promise Promise } = { - activeProvider: undefined, id, options: {}, session, diff --git a/packages/api/job-controller/tests/observe.host.spec.ts b/packages/api/job-controller/tests/observe.host.spec.ts index e578aacf53..583862eeac 100644 --- a/packages/api/job-controller/tests/observe.host.spec.ts +++ b/packages/api/job-controller/tests/observe.host.spec.ts @@ -226,7 +226,6 @@ describe('JobController', () => { async function liveOwner(ctx: Context, rawId: string): Promise { const session = ctx.sessions.create(SessionId(rawId)) const owner: Agent = { - activeProvider: undefined, id: session.id, options: {}, session, diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index dc33e2f2c0..b0b1168d89 100644 --- a/packages/api/remotes/package.json +++ b/packages/api/remotes/package.json @@ -97,6 +97,7 @@ "@deepseek-ai/dsh-plugin-manager": "workspace:*", "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", "@deepseek-ai/dsh-office-to-pdf": "workspace:*", - "@deepseek-ai/dsh-api-account-controller": "workspace:*" + "@deepseek-ai/dsh-api-account-controller": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*" } } diff --git a/packages/api/remotes/src/remote-events.ts b/packages/api/remotes/src/remote-events.ts index b9cecc5b13..f52859acb9 100644 --- a/packages/api/remotes/src/remote-events.ts +++ b/packages/api/remotes/src/remote-events.ts @@ -7,6 +7,7 @@ */ import type {} from '@deepseek-ai/dsh-api-session-controller/remote-events' +import type {} from '@deepseek-ai/dsh-deepseek-account/types' import type {} from '@deepseek-ai/dsh-permission-presets/types' import type {} from '@deepseek-ai/dsh-plugin-manager/types' import type { TypertForwardableEventEntry } from '@deepseek-ai/dsh-typert-protocol' @@ -24,6 +25,7 @@ export const API_REMOTE_FORWARDED_EVENTS = [ { event: 'api-session/removed', mode: 'emit' }, { event: 'api-session/status', mode: 'emit' }, { event: 'commands/change', mode: 'emit' }, + { event: 'deepseek-account/model-sign-in-required', mode: 'emit' }, { event: 'credentials/record-updated', mode: 'emit' }, { event: 'credentials/reference-updated', mode: 'emit' }, { event: 'goal/activation-changed', mode: 'emit' }, diff --git a/packages/api/remotes/tsconfig.client.json b/packages/api/remotes/tsconfig.client.json index 96ad6d9b61..55407602bc 100644 --- a/packages/api/remotes/tsconfig.client.json +++ b/packages/api/remotes/tsconfig.client.json @@ -100,6 +100,9 @@ }, { "path": "../account-controller" + }, + { + "path": "../../credentials/deepseek-account" } ] } diff --git a/packages/api/remotes/tsconfig.host.json b/packages/api/remotes/tsconfig.host.json index 453e76fbe5..9357ca3a8e 100644 --- a/packages/api/remotes/tsconfig.host.json +++ b/packages/api/remotes/tsconfig.host.json @@ -82,6 +82,9 @@ }, { "path": "../account-controller" + }, + { + "path": "../../credentials/deepseek-account" } ] } diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index 881a5d5557..ac8eca4d71 100644 --- a/packages/api/session-controller/README.i18n.yaml +++ b/packages/api/session-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/session-controller/README.md -README.md: 38ee7d644784344e95745d8ddf8d2efc48f18110 -README.zh.md: 75625d404ac68430c80c966c928a080a22b174e3 +README.md: abe79ff7b2b4be6f2b0ba626c77ad9af22fa2f33 +README.zh.md: 7468ed80cb741574a8ab79422ee363af2bbad3e4 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index 38ee7d6447..abe79ff7b2 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -78,7 +78,7 @@ References keep local Session data, scoped Contexts, and history streams alive, `SessionMediaReferences` mounts `GET|HEAD /api/file?path=` on the authenticated `connection.fetch` channel when `connection`, `fs`, and `attachments` are composed. It reads ordinary files through `ctx.fs`, including temporary paths outside registered workspaces and files in remote providers. Neither directory containment nor MIME categories restrict access; `mime-types` supplies the response type, with `application/octet-stream` for unknown extensions. GET reuses `readBytes` for preflight and ongoing byte limits; HEAD reads metadata only. All files use `ctx.attachments.imageLimits.maxImageBytes` (normally 20 MiB); exceeding this limit returns 413. Responses contain the complete file, ignore Range, and carry `private, no-store`, `nosniff`, and a sandbox CSP so directly opened HTML/SVG cannot execute with the API origin. The Client rewrite lives in `ui-chat` (`AssistantMarkdown`); audio/video responses are available, while Markdown audio/video player nodes remain separate work. -GUI model selection and prompt admission require the exact provider/model pair in the current available catalog. An unavailable selection or a failed catalog query rejects with `session/model-unavailable` before delivery; admission checks again after attachment preparation with the same error code. `initializeDefaultModel(provider)` saves the first available model of the explicitly configured provider only before any user choice exists. A provider with no available models rejects initialization with `session/provider-models-unavailable`. Availability never substitutes another model or rewrites a Session selection. These catalog requirements belong to GUI admission; direct LLM calls can use uncatalogued models. +GUI model selection requires the exact provider/model pair in the available catalog; unavailable choices reject with `session/model-unavailable`. Prompt admission retains the saved route without a catalog availability gate, so request execution reports missing credentials or unavailable models. `initializeDefaultModel(provider)` saves the first available model of an API-key provider only before any user choice exists. Account login instead replaces the default when no other provider has a configured API key; credential checks use configured references independently of model availability. A provider with no available models rejects initialization with `session/provider-models-unavailable`. Availability never substitutes another model or rewrites a Session selection. ----- diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index 75625d404a..7468ed80cb 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -78,7 +78,7 @@ Client 的首次 `follow`、重连首屏与 `loadOlder()` 至少请求 50 条以 当 `connection`、`fs` 与 `attachments` 均被组合时,`SessionMediaReferences` 在鉴权 `connection.fetch` 通道上挂载 `GET|HEAD /api/file?path=<绝对路径>`。它通过 `ctx.fs` 读取普通文件,包括已注册工作区之外的临时路径与远程提供方中的文件。目录包含关系与 MIME 类别均不限制访问;`mime-types` 提供响应类型,未知扩展名使用 `application/octet-stream`。GET 复用 `readBytes` 执行读取前及读取中的字节限制;HEAD 只读取元数据。所有文件均使用 `ctx.attachments.imageLimits.maxImageBytes`(通常为 20 MiB);超过此上限返回 413。响应包含完整文件,忽略 Range,并携带 `private, no-store`、`nosniff` 与沙箱 CSP,使直接打开的 HTML/SVG 无法以 API 源身份执行脚本。客户端重写位于 `ui-chat`(`AssistantMarkdown`);音视频文件响应已可用,Markdown 音视频播放器节点仍是独立工作。 -GUI 模型选择与提示词准入要求确切提供方/模型对出现在当前可用目录中。选择不可用或目录查询失败时,投递前以 `session/model-unavailable` 拒绝;附件准备完成后再次检查,并使用相同错误码。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存其显式配置的提供方的第一个可用模型。提供方没有可用模型时,初始化以 `session/provider-models-unavailable` 拒绝。可用性变化不会替换模型或改写会话选择。这些目录要求属于 GUI 准入;直接 LLM 调用可使用未列入目录的模型。 +GUI 模型选择要求确切提供方/模型对出现在可用目录中;不可用的选择以 `session/model-unavailable` 拒绝。提示词准入保留已保存的路由,不按目录可用性阻断发送,由请求执行报告凭据缺失或模型不可用。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存 API key 提供方的第一个可用模型。账号登录则在其他提供方均未配置 API key 时替换默认模型;凭据检查使用已配置的引用,不依赖模型是否可用。提供方没有可用模型时,初始化以 `session/provider-models-unavailable` 拒绝。可用性变化不会替换模型或改写会话选择。 ----- diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index 08704ed09d..86889e33d8 100644 --- a/packages/api/session-controller/package.json +++ b/packages/api/session-controller/package.json @@ -85,6 +85,7 @@ "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-file-upload": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-file-reference": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -96,6 +97,7 @@ "@deepseek-ai/dsh-session-projection-cache": "workspace:*", "@deepseek-ai/dsh-session-query": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", @@ -111,6 +113,9 @@ }, "@deepseek-ai/dsh-session-projection-cache": { "optional": true + }, + "@deepseek-ai/dsh-settings": { + "optional": true } }, "devDependencies": { @@ -127,6 +132,7 @@ "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-file-reference": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", @@ -141,6 +147,7 @@ "@deepseek-ai/dsh-session-projection-cache": "workspace:*", "@deepseek-ai/dsh-session-query": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/dsh-storage-domain": "workspace:*", diff --git a/packages/api/session-controller/src/catalog.ts b/packages/api/session-controller/src/catalog.ts index e66c6961cb..83ee7a8b93 100644 --- a/packages/api/session-controller/src/catalog.ts +++ b/packages/api/session-controller/src/catalog.ts @@ -1,6 +1,8 @@ /** Shared projection of the live LLM registry into the browser model catalog. */ import { RemoteError } from '@deepseek-ai/dsh-typert-protocol' +import { credentialRef } from '@deepseek-ai/dsh-credentials' +import type {} from '@deepseek-ai/dsh-settings' import type { LlmModelInfo } from '@deepseek-ai/dsh-llm' import type { Context } from '@deepseek-ai/cordis' import type { @@ -86,3 +88,29 @@ export async function modelAvailable(ctx: Context, selection: ModelSelection): P } return models.some(model => model.id === selection.model) } + +/** + * Check configured provider API-key references independently of model availability. + * @param ctx - Host registry, settings, and credential services. + * @returns whether any API-key provider has a configured credential. + */ +export async function hasProviderApiKey(ctx: Context): Promise { + const settings = ctx.get('settings') + const credentials = ctx.get('credentials') + if (settings === undefined || credentials === undefined) { + throw new RemoteError('session/provider-credentials-unavailable', 'provider credentials are unavailable', {}) + } + const namespaces = settings.describe({ redactSecrets: true }) + for (const provider of ctx.llm.listConfigurableProviders()) { + if (provider.provider === 'deepseek-account') continue + let profile = namespaces.find(namespace => namespace.ns === provider.settingsNs)?.value + for (const key of provider.settingsPath) { + profile = typeof profile === 'object' && profile !== null ? Reflect.get(profile, key) : undefined + } + if (typeof profile !== 'object' || profile === null) continue + const ref: unknown = Reflect.get(profile, 'apiKeyEnv') + if (typeof ref === 'string' && ref.length > 0 + && (await credentials.describe(credentialRef(ref))).configured) return true + } + return false +} diff --git a/packages/api/session-controller/src/commands.ts b/packages/api/session-controller/src/commands.ts index e73659d4cb..89300147ab 100644 --- a/packages/api/session-controller/src/commands.ts +++ b/packages/api/session-controller/src/commands.ts @@ -330,8 +330,6 @@ export class SessionCommandController { } const agent = await this.resolveAgent(request.sessionId) if (hasPromptRequest(agent, request.requestId)) return { accepted: true } - const selection = this.agents.selectionFor(agent).current - await this.requireModel(selection) const source: MessageSource = { kind: 'user', rpcId: request.requestId, @@ -357,7 +355,6 @@ export class SessionCommandController { ) const content = await this.ctx.attachments.admitPromptContent(admission.content) const message: UserMessage = createUserMessage({ content, source }) - await this.requireModel(this.agents.selectionFor(agent).current) if (this.ctx.agents.get(agent.id) !== agent) { throw new RemoteError( 'session/not-found', diff --git a/packages/api/session-controller/src/index.ts b/packages/api/session-controller/src/index.ts index db8c6e09b7..b5725bd715 100644 --- a/packages/api/session-controller/src/index.ts +++ b/packages/api/session-controller/src/index.ts @@ -23,7 +23,7 @@ import { SessionControlController } from './control.ts' import { SessionHistoryController } from './history.ts' import { SessionFileReferences } from './file-references.ts' import { ApiSessionList } from './list.ts' -import { buildModelCatalog } from './catalog.ts' +import { buildModelCatalog, hasProviderApiKey } from './catalog.ts' import { installModelSelectionProjection } from './model-selection-projection.ts' import { SessionSkillCatalog } from './skill-catalog.ts' import { SessionMediaReferences } from './media-references.ts' @@ -285,19 +285,22 @@ export class SessionController extends TypertRemoteService { } /** - * Initialize the default after the user first configures a provider credential. + * Initialize a provider default; account login replaces it only when no provider API key is configured. * @param provider - the provider whose credential was configured. - * @returns after saving the initial available model; existing user choices are retained. + * @returns after saving the first available model or retaining the existing default. */ @Remote async initializeDefaultModel(provider: string): Promise { + if (provider === 'deepseek-account' && await hasProviderApiKey(this.ctx)) return const catalog = await buildModelCatalog(this.ctx) const model = catalog.groups.find(group => group.id === provider)?.models[0] if (model === undefined) throw new RemoteError('session/provider-models-unavailable', `provider "${provider}" has no available models`, { provider }) - await this.ctx.agentDefaultModel.initializeSelection({ provider, model: model.id, + const selection = { provider, model: model.id, ...model.reasoning?.defaultEffort === undefined ? {} : { reasoningEffort: ReasoningEffortId(model.reasoning.defaultEffort) }, - }) + } + if (provider === 'deepseek-account') await this.ctx.agentDefaultModel.saveSelection(selection) + else await this.ctx.agentDefaultModel.initializeSelection(selection) } /** diff --git a/packages/api/session-controller/src/types.ts b/packages/api/session-controller/src/types.ts index 677a1da11c..a8f0d7e450 100644 --- a/packages/api/session-controller/src/types.ts +++ b/packages/api/session-controller/src/types.ts @@ -201,6 +201,7 @@ export const SESSION_SEARCH_SNIPPET_MAX_CODE_POINTS = 240 declare module '@deepseek-ai/dsh-typert-protocol' { interface RemoteErrorDetailsMap { + 'session/provider-credentials-unavailable': Record 'session/provider-models-unavailable': { readonly provider: string } 'session/model-unavailable': { readonly provider: string; readonly model: string } 'session/conflict': { diff --git a/packages/api/session-controller/tests/archived-session-gate.host.spec.ts b/packages/api/session-controller/tests/archived-session-gate.host.spec.ts index 8cb8f0c51d..79bad41b7c 100644 --- a/packages/api/session-controller/tests/archived-session-gate.host.spec.ts +++ b/packages/api/session-controller/tests/archived-session-gate.host.spec.ts @@ -26,7 +26,6 @@ async function harness(): Promise { /** A registered idle Agent double: the gate reads only its Session header. */ async function liveAgent(ctx: Context, session: Session): Promise { const agent: Agent = { - activeProvider: undefined, id: session.id, options: {}, session, diff --git a/packages/api/session-controller/tests/session-models.host.spec.ts b/packages/api/session-controller/tests/session-models.host.spec.ts index a9e3d21747..89f087e71f 100644 --- a/packages/api/session-controller/tests/session-models.host.spec.ts +++ b/packages/api/session-controller/tests/session-models.host.spec.ts @@ -20,7 +20,7 @@ import SessionStore from '@deepseek-ai/dsh-session' import type { SessionId } from '@deepseek-ai/dsh-session' import type { SessionPromptRequest, SessionRequestId } from '../src/types.ts' import { ApiSessionAgentController } from '../src/agent.ts' -import { buildModelCatalog } from '../src/catalog.ts' +import { buildModelCatalog, hasProviderApiKey } from '../src/catalog.ts' import SystemPrompt from '@deepseek-ai/dsh-system-prompt' import { RemoteError } from '@deepseek-ai/dsh-typert-protocol' import { createSessionTestController, createSessionTestRemote } from './test-remote.ts' @@ -365,6 +365,66 @@ describe('Web session model selection', () => { await ctx.fiber.dispose() }) + it('checks configured key references even for empty catalogs and skips profiles without keys', async () => { + const ctx = new Context() + await ctx.plugin(LlmRuntime) + const describe = vi.fn(async () => ({ configured: true, writable: true })) + ctx.provide('credentials', { describe } as never) + ctx.provide('settings', { describe: () => [{ ns: 'profiles', value: { + providers: { blank: { apiKeyEnv: '' }, absent: {}, configured: { apiKeyEnv: 'CUSTOM_KEY' } }, + } }] } as never) + const routes = ['missing', 'blank', 'absent', 'configured'] + ctx.effect(() => ctx.llm.registerConfigurableProviders(routes.map(provider => ({ + provider, displayName: provider, settingsNs: 'profiles', + settingsPath: provider === 'missing' ? ['missing', 'nested'] : ['providers', provider], + })))) + try { + expect(await hasProviderApiKey(ctx)).toBe(true) + expect(describe).toHaveBeenCalledExactlyOnceWith('CUSTOM_KEY') + describe.mockRejectedValueOnce(new Error('credential read failed')) + await expect(hasProviderApiKey(ctx)).rejects.toThrow('credential read failed') + } finally { await ctx.fiber.dispose() } + }) + + it.each(['settings', 'credentials'] as const)('refuses account initialization without %s inspection', async (missing) => { + const ctx = new Context() + if (missing !== 'settings') ctx.provide('settings', {} as never) + if (missing !== 'credentials') ctx.provide('credentials', {} as never) + try { + await expect(hasProviderApiKey(ctx)).rejects.toMatchObject({ code: 'session/provider-credentials-unavailable' }) + } finally { await ctx.fiber.dispose() } + }) + + it.each([false, true])('account login replaces a saved default only without another API key: %s', async (configuredKey) => { + const { configurationFixture } = await import('../../../settings/settings/tests/configuration-fixture.ts') + const configured = await configurationFixture({ hmr: false }) + const { ctx } = await harness(undefined, configured.ctx) + ctx.effect(() => ctx.llm.registerAdapter(['deepseek-account'], new CatalogAdapter('Account', [ + { provider: 'deepseek-account', id: 'first-model', name: 'First' }, + { provider: 'deepseek-account', id: 'second-model', name: 'Second' }, + ], REASONING))) + const describe = vi.fn(async () => ({ configured: configuredKey, writable: true })) + ctx.provide('credentials', { describe } as never) + ctx.effect(() => ctx.llm.registerConfigurableProviders([ + { provider: 'deepseek-account', displayName: 'Account', settingsNs: 'account', settingsPath: [] }, + { provider: 'removed-model-provider', displayName: 'Custom', settingsNs: 'first', settingsPath: ['providers', 'custom'] }, + ])) + vi.spyOn(ctx.settings, 'describe').mockReturnValue([{ + ns: 'first' as never, autoGenerate: false, schema: {}, revision: 0, applies: 'live', + value: { providers: { custom: { apiKeyEnv: 'CUSTOM_API_KEY', models: [] } } }, + }]) + await ctx.agentDefaultModel.saveSelection({ provider: 'removed', model: 'saved' }) + const controller = createSessionTestController(ctx, { + defaultModelSelection: () => ctx.agentDefaultModel.currentSelection(), cwd: '/tmp', + }) + await controller.initializeDefaultModel('deepseek-account') + expect(describe).toHaveBeenCalledWith('CUSTOM_API_KEY') + expect(ctx.agentDefaultModel.currentSelection()).toEqual(configuredKey + ? { provider: 'removed', model: 'saved' } + : { provider: 'deepseek-account', model: 'first-model', reasoningEffort: 'high' }) + await ctx.fiber.dispose() + }) + it('groups successful providers and leaves an unlisted current selection out of the catalog', async () => { const { ctx, sessionId } = await harness({ provider: 'deepseek-official', @@ -613,7 +673,7 @@ describe('Web session model selection', () => { await ctx.fiber.dispose() }) - it.each([1, 2])('reports catalog errors as model-unavailable at prompt check %s', async (check) => { + it('admits saved selections without querying the advisory model catalog', async () => { const { ctx, sessionId, agent } = await harness() const followup = vi.fn() Object.assign(agent, { followup }) @@ -621,17 +681,13 @@ describe('Web session model selection', () => { defaultModelSelection: () => ({ provider: 'deepseek-official', model: 'deepseek-chat' }), cwd: '/tmp', }) const list = vi.spyOn(ctx.llm, 'listModels') - if (check === 2) list.mockResolvedValueOnce([{ provider: 'deepseek-official', id: 'deepseek-chat', name: 'Chat' }]) list.mockRejectedValueOnce(new Error('credential storage offline')) try { expect(await remote.prompt(promptRequest({ sessionId, mode: 'queue', content: [{ type: 'text', text: 'hello' }], - }))).toMatchObject({ ok: false, error: { - code: 'session/model-unavailable', message: 'credential storage offline', - details: { provider: 'deepseek-official', model: 'deepseek-chat' }, - } }) - expect(list).toHaveBeenCalledTimes(check) - expect(followup).not.toHaveBeenCalled() + }))).toMatchObject({ ok: true, value: { accepted: true } }) + expect(list).not.toHaveBeenCalled() + expect(followup).toHaveBeenCalledOnce() } finally { list.mockRestore() await ctx.fiber.dispose() @@ -655,22 +711,20 @@ describe('Web session model selection', () => { } }) - it('refuses a prompt no adapter can route, and reports it on the directory', async () => { - const { ctx, sessionId } = await harness() + it('admits an unavailable saved route for execution without rewriting the selection', async () => { + const { ctx, sessionId, agent } = await harness() + const followup = vi.fn() + Object.assign(agent, { followup }) const remote = createSessionTestRemote(ctx, { defaultModelSelection: () => ({ provider: 'deleted-gateway', model: 'deleted-model' }), cwd: '/tmp', }) - // The client disabling its input is an affordance; this method stays - // callable, so the refusal has to live here. - const refused = await remote.prompt(promptRequest({ + const admitted = await remote.prompt(promptRequest({ sessionId, mode: 'queue' as const, content: [{ type: 'text' as const, text: 'hi' }], })) - expect(refused).toMatchObject({ - ok: false, - error: { code: 'session/model-unavailable', details: { provider: 'deleted-gateway', model: 'deleted-model' } }, - }) + expect(admitted).toMatchObject({ ok: true, value: { accepted: true } }) + expect(followup).toHaveBeenCalledOnce() const unavailableCatalog = await buildModelCatalog(ctx) expect(unavailableCatalog.routableProviders.includes(currentSelection(ctx, sessionId).provider)).toBe(false) @@ -681,14 +735,17 @@ describe('Web session model selection', () => { await ctx.fiber.dispose() }) - it('refuses a removed model while its provider still serves other models without changing the log', async () => { + it('admits a removed model without changing its saved selection', async () => { const { ctx, sessionId, agent } = await harness({ provider: 'deepseek-official', model: 'removed-model' }) const remote = createSessionTestRemote(ctx, { defaultModelSelection: () => ({ provider: 'deepseek-official', model: 'deepseek-chat' }), cwd: '/tmp', }) const events = [...agent.session.snapshotEvents()] + const followup = vi.fn() + Object.assign(agent, { followup }) expect(await remote.prompt(promptRequest({ sessionId, mode: 'queue', content: [{ type: 'text', text: 'hi' }] }))) - .toMatchObject({ ok: false, error: { code: 'session/model-unavailable' } }) + .toMatchObject({ ok: true, value: { accepted: true } }) + expect(followup).toHaveBeenCalledOnce() expect(agent.session.snapshotEvents()).toEqual(events) expect(currentSelection(ctx, sessionId)).toMatchObject({ provider: 'deepseek-official', model: 'removed-model' }) await ctx.fiber.dispose() diff --git a/packages/bundle/base/cordis.patch.yml b/packages/bundle/base/cordis.patch.yml index 48d7ff6e4b..db6701a9b6 100644 --- a/packages/bundle/base/cordis.patch.yml +++ b/packages/bundle/base/cordis.patch.yml @@ -522,4 +522,7 @@ # key coming from the credential store below. Thinking defaults are a deployment # choice. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' + + - id: llm-deepseek-account + name: '@deepseek-ai/dsh-llm-deepseek-account' diff --git a/packages/bundle/base/package.json b/packages/bundle/base/package.json index 9bac1d952d..97fee045bc 100644 --- a/packages/bundle/base/package.json +++ b/packages/bundle/base/package.json @@ -59,7 +59,8 @@ "@deepseek-ai/dsh-goal-round-driver": "workspace:*", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-account": "workspace:*", "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", "@deepseek-ai/dsh-llm-retry": "workspace:*", "@deepseek-ai/dsh-mcp-resources": "workspace:*", diff --git a/packages/bundle/headless/tests/headless.spec.ts b/packages/bundle/headless/tests/headless.spec.ts index d2cc7a47f8..5c8bd6b0f9 100644 --- a/packages/bundle/headless/tests/headless.spec.ts +++ b/packages/bundle/headless/tests/headless.spec.ts @@ -148,7 +148,6 @@ async function bench(script: Script, options: BenchOptions = {}): Promise<{ options: createOptions.agentOptions ?? {}, session, inbox, - activeProvider: undefined, status: 'idle', ctx: ownerCtx, cancel: () => {}, diff --git a/packages/bundle/sdk-minimal/cordis.patch.yml b/packages/bundle/sdk-minimal/cordis.patch.yml index e5c9436eba..ac6c7c4bca 100644 --- a/packages/bundle/sdk-minimal/cordis.patch.yml +++ b/packages/bundle/sdk-minimal/cordis.patch.yml @@ -24,7 +24,7 @@ name: '@deepseek-ai/dsh-plugin-package-inventory-deepseek' - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY defaultContextWindow: !!js Number(process.env.DSH_CONTEXT_WINDOW ?? 1000000) diff --git a/packages/bundle/sdk-minimal/package.json b/packages/bundle/sdk-minimal/package.json index d62fa60d58..5786f0d6a0 100644 --- a/packages/bundle/sdk-minimal/package.json +++ b/packages/bundle/sdk-minimal/package.json @@ -41,7 +41,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-jobs-local": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-llm-retry": "workspace:*", "@deepseek-ai/dsh-mcp-resources": "workspace:*", "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:*", diff --git a/packages/bundle/sdk-minimal/tests/sdk-minimal.spec.ts b/packages/bundle/sdk-minimal/tests/sdk-minimal.spec.ts index b059a9d96f..f23bc62084 100644 --- a/packages/bundle/sdk-minimal/tests/sdk-minimal.spec.ts +++ b/packages/bundle/sdk-minimal/tests/sdk-minimal.spec.ts @@ -31,7 +31,7 @@ describe('dsh-sdk-minimal bundle', () => { ['deepseek-llm-api-extensions', '@deepseek-ai/dsh-deepseek-llm-api-extensions'], ['session-log-deepseek', '@deepseek-ai/dsh-session-log-deepseek'], ['plugin-package-inventory-deepseek', '@deepseek-ai/dsh-plugin-package-inventory-deepseek'], - ['llm-deepseek', '@deepseek-ai/dsh-llm-deepseek'], + ['llm-deepseek', '@deepseek-ai/dsh-llm-deepseek-api-key'], ['sandbox', '@deepseek-ai/dsh-sandbox-local'], ['session-projection', '@deepseek-ai/dsh-session-projection'], ['sandbox-policy', '@deepseek-ai/dsh-sandbox-policy'], diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index c22219a947..2006e11e50 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-conversation/README.md -README.md: 3c18d65e996812f08a6c70a74669e8449737968e -README.zh.md: b48d2cf38aba13d42bff524004b077ff0dc179f0 +README.md: 4823aa0a1ba5975c4efc8b6bdddd7ca8c57c068f +README.zh.md: 5ef8a1b6621bf8bab7e98cb18722a9aedda29101 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 3c18d65e99..4823aa0a1b 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -68,7 +68,7 @@ Active transcripts in the main occurrence expose content-width drag handles in t The width-handle indicator follows the pointer only during a captured drag; ordinary hover leaves its position unchanged. -The resident composer survives no-Session and Session transitions. Whitespace hides its placeholder; a whitespace-only draft without attachments cannot be sent. The no-Session state keeps the same composer surface mounted but inert while the Workspace picker connects a blank Session. The surface is a shell-owned Lexical editor: reference chips are atomic decorator nodes carrying the owner's serialization identity (submission expands them through the owner codec), claimed slash commands stay styled leading text, folder text references carry the folder glyph as an icon prefix, and the draft's clipboard projection is mirrored into the per-Session Conversation store. QueueDock reads `next-turn` from the Session `inbox` projection, including cold recovered messages, and excludes only requestIds still owned by local transcript submissions. Other queued rows retain their normal display and actions. Queue operations address exact queue occurrences through the scoped `ctx.conversation` service; queue previews render sent text through the shared inline reference projection from `ui-primitives` (wire session forms fold to their label) and show local or durable images and files in original attachment order. Images use thumbnails; files use compact name-and-size cards. An edit exposes the literal sent text in a textarea that grows with its content, so line breaks survive re-editing; Enter saves, Shift+Enter breaks the line, and Escape cancels. Durable thumbnails resolve through the session image URL cache. Busy Enter behavior is stored in the Host-backed `ui-conversation` settings namespace. The composer keymap arbitrates the trigger menu's keys through the slash pipeline — Tab settles the highlighted completion (or drills a drillable one), Escape and Shift+Tab leave the menu without settling — and leaves every other key to the editor. An overlay that takes the keyboard hands it back through `SessionInput.focus()`, which rides Lexical's own focus so the caret returns where the draft left it rather than at the start. Model availability blocks retain the normal input placeholder while leaving the model picker enabled. +The resident composer survives no-Session and Session transitions. Whitespace hides its placeholder; a whitespace-only draft without attachments cannot be sent. The no-Session state keeps the same composer surface mounted but inert while the Workspace picker connects a blank Session. The surface is a shell-owned Lexical editor: reference chips are atomic decorator nodes carrying the owner's serialization identity (submission expands them through the owner codec), claimed slash commands stay styled leading text, folder text references carry the folder glyph as an icon prefix, and the draft's clipboard projection is mirrored into the per-Session Conversation store. QueueDock reads `next-turn` from the Session `inbox` projection, including cold recovered messages, and excludes only requestIds still owned by local transcript submissions. Other queued rows retain their normal display and actions. Queue operations address exact queue occurrences through the scoped `ctx.conversation` service; queue previews render sent text through the shared inline reference projection from `ui-primitives` (wire session forms fold to their label) and show local or durable images and files in original attachment order. Images use thumbnails; files use compact name-and-size cards. An edit exposes the literal sent text in a textarea that grows with its content, so line breaks survive re-editing; Enter saves, Shift+Enter breaks the line, and Escape cancels. Durable thumbnails resolve through the session image URL cache. Busy Enter behavior is stored in the Host-backed `ui-conversation` settings namespace. The composer keymap arbitrates the trigger menu's keys through the slash pipeline — Tab settles the highlighted completion (or drills a drillable one), Escape and Shift+Tab leave the menu without settling — and leaves every other key to the editor. An overlay that takes the keyboard hands it back through `SessionInput.focus()`, which rides Lexical's own focus so the caret returns where the draft left it rather than at the start. Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; Session retires the echo once at its display handoff, correlated by that `rpcId`. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Where the browser shell exposes `__DSH_HOST_PATHS__` (the Desktop application), dropped or pasted folders and dropped, picked, or pasted non-image files with a real path become `@path` chips; images keep uploading. Drag-and-drop and paste identify directories through the browser entry API; when that API is absent or returns no entry, pasted items retain ordinary file handling. The file picker cannot select directories. References require the `ui-reference` plugin and the original paths to remain readable by the model's file tools. Paths inside the workspace are relative; others remain absolute. The whole batch is validated before insertion, retains source order and selected text, and uses whitespace-separated, closed-quote mentions. A browser without the bridge refuses dropped or pasted folders; a Desktop folder without a reported path is rejected separately. Continuable subagents disable attachment intake and skip local echoes because their transport does not preserve the browser request id. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index b48d2cf38a..5ef8a1b662 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -68,7 +68,7 @@ Session 首次绑定或缓存的 Session 成为 current 时,shell 会在渲染 宽度拖拽条的指示线只在已捕获指针的拖拽期间跟随指针,普通悬停不改变其位置。 -常驻 composer 在无 Session 与有 Session 之间保持挂载。输入空白字符会隐藏占位提示;没有附件的纯空白草稿无法发送。无 Session 时,同一个编辑器表面保持 inert,Workspace picker 连接 blank Session。该表面是 shell 所有的 Lexical 编辑器:引用 chip 是携带 owner 序列化身份的原子 decorator 节点(提交时经 owner codec 展开),已认领的 slash command 保持为带样式的行首文本,文件夹文本引用以图标前缀携带文件夹图形,草稿的剪贴板投影镜像到逐 Session Conversation store。QueueDock 从 Session 的 `inbox` 投影读取 `next-turn`,包含从冷状态恢复的消息,仅排除仍由本地 transcript 提交承接的 requestId。其他排队行保留正常展示和操作。Queue 操作通过 scoped `ctx.conversation` service 寻址准确的 queue occurrence;queue 预览经 `ui-primitives` 的共享行内引用投影渲染已发送文本(wire 会话形式折叠为其标签),并按原始附件顺序展示本地或持久化的图片和文件。图片使用缩略图,文件使用紧凑的名称与大小卡片。编辑态在可随内容增高的 textarea 中展示字面发送文本,因此重新编辑不会丢失换行;Enter 保存,Shift+Enter 换行,Escape 取消。持久化缩略图通过会话图片 URL 缓存解析。繁忙时 Enter 行为保存在 Host-backed `ui-conversation` settings namespace。 composer 键盘映射经斜杠流水线裁决触发菜单的按键——Tab 确认高亮补全项(可下钻项则下钻),Escape 与 Shift+Tab 离开菜单且不选定——其余按键交给编辑器自身。 接管键盘的浮层通过 `SessionInput.focus()` 把键盘还回来,该路径走 Lexical 自己的 focus,因此光标回到草稿原来的位置而不是开头。 模型不可用导致的阻塞保留常规输入占位文案,模型选择器仍可操作。 +常驻 composer 在无 Session 与有 Session 之间保持挂载。输入空白字符会隐藏占位提示;没有附件的纯空白草稿无法发送。无 Session 时,同一个编辑器表面保持 inert,Workspace picker 连接 blank Session。该表面是 shell 所有的 Lexical 编辑器:引用 chip 是携带 owner 序列化身份的原子 decorator 节点(提交时经 owner codec 展开),已认领的 slash command 保持为带样式的行首文本,文件夹文本引用以图标前缀携带文件夹图形,草稿的剪贴板投影镜像到逐 Session Conversation store。QueueDock 从 Session 的 `inbox` 投影读取 `next-turn`,包含从冷状态恢复的消息,仅排除仍由本地 transcript 提交承接的 requestId。其他排队行保留正常展示和操作。Queue 操作通过 scoped `ctx.conversation` service 寻址准确的 queue occurrence;queue 预览经 `ui-primitives` 的共享行内引用投影渲染已发送文本(wire 会话形式折叠为其标签),并按原始附件顺序展示本地或持久化的图片和文件。图片使用缩略图,文件使用紧凑的名称与大小卡片。编辑态在可随内容增高的 textarea 中展示字面发送文本,因此重新编辑不会丢失换行;Enter 保存,Shift+Enter 换行,Escape 取消。持久化缩略图通过会话图片 URL 缓存解析。繁忙时 Enter 行为保存在 Host-backed `ui-conversation` settings namespace。 composer 键盘映射经斜杠流水线裁决触发菜单的按键——Tab 确认高亮补全项(可下钻项则下钻),Escape 与 Shift+Tab 离开菜单且不选定——其余按键交给编辑器自身。 接管键盘的浮层通过 `SessionInput.focus()` 把键盘还回来,该路径走 Lexical 自己的 focus,因此光标回到草稿原来的位置而不是开头。 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;Session 按同一 `rpcId` 关联展示接管,并仅退休回显一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。浏览器 shell 暴露 `__DSH_HOST_PATHS__` 时(桌面应用),拖入或粘贴的文件夹以及拖入、选择或粘贴的带真实路径的非图片文件会成为 `@路径` chip;图片仍然上传。拖放和粘贴通过浏览器 entry API 识别目录;该 API 不可用或没有返回 entry 时,粘贴项沿用普通文件处理。文件选择器不能选择目录。引用需要启用 `ui-reference` 插件,原路径也必须仍可由模型的文件工具读取。工作区内的路径使用相对形式,其他路径保留绝对形式。整批文件先校验再插入,保留来源顺序和已选中的文字,引用之间有空白分隔,含空格的路径使用闭合引号。没有该桥的浏览器会拒绝拖入或粘贴的文件夹,桌面端无法获取文件夹路径时单独报错。continuable 子代理禁用附件入口,也不创建本地回显,因为其 transport 不保留浏览器 request id。 diff --git a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx index dc7e753c88..adace1c113 100644 --- a/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx +++ b/packages/client/ui-conversation/src/client/skeleton/ConversationContent.tsx @@ -133,7 +133,7 @@ export function ConversationContent(props: ConversationContentProps) { // bar is ONE session-maybe slot rendered unconditionally — inert is a prop, // not a different tree, so the textarea DOM survives the transition. const inert = sessionId === undefined || (hero && chipTitle === undefined) - // A raised block keeps the same textarea mounted: + // A raised block is the same inert posture with the blocker's own reason: // one disabled textarea, never a second tree. The no-workspace state wins // when both hold — picking a workspace is the earlier prerequisite. const blocked = !inert && composerBlock !== undefined @@ -150,7 +150,7 @@ export function ConversationContent(props: ConversationContentProps) { // `blocked`, not `disabled`: the bar refuses input either way, but a // block keeps the model seat live because choosing a model is how the // user clears it. - ? { blocked: composerBlock, placeholder: t(hero ? 'placeholder.hero' : 'placeholder.default') } + ? { blocked: composerBlock, placeholder: composerBlock.reason } : hero ? { placeholder: t('placeholder.hero') } : {}), }) diff --git a/packages/client/ui-conversation/tests/skeleton.client.spec.tsx b/packages/client/ui-conversation/tests/skeleton.client.spec.tsx index 4a8993091c..90a9bab137 100644 --- a/packages/client/ui-conversation/tests/skeleton.client.spec.tsx +++ b/packages/client/ui-conversation/tests/skeleton.client.spec.tsx @@ -425,14 +425,15 @@ describe('ConversationRoot resident composer', () => { expect(dispatchCount()).toBe(before) }) - it('keeps the normal placeholder while model availability blocks sending', () => { + it('renders the composer inert with the blocker\u2019s own reason', () => { const b = mount(sessionSnapshotOf(), undefined, undefined, { composerBlock: { reason: 'select a model first' }, }) const box = b.view.getByRole('textbox') - // Blocking keeps the mounted composer and its normal placeholder. + // One disabled composer with the blocker's placeholder, never a second + // tree: the DOM survives the block being raised and cleared. expect(box.getAttribute('aria-disabled')).toBe('true') - expect(box.getAttribute('data-placeholder')).toBe(zh['placeholder.default']) + expect(box.getAttribute('data-placeholder')).toBe('select a model first') fireEvent.keyDown(box, { key: 'Enter' }) expect(b.sink).not.toHaveBeenCalled() diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 741628e261..b9eb0ecc76 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-model-selection/README.md -README.md: aa4a9150a81417241227f99ec747a617640f1302 -README.zh.md: 79516f159d95335561b95bbc8f8be1ecd8ccf9b0 +README.md: b741e05a983fd35ab9d17164b020ff5ba86137b7 +README.zh.md: 1ce5a2b1ae191ac2da86f6a4ac854bd3c9431c8c diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index aa4a9150a8..b741e05a98 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -29,7 +29,7 @@ DeepSeek account and API-key routes appear as separate provider groups, each exp The unselected model label uses the same regular weight as an available model name and retains the saved reasoning effort caption for existing and new sessions; effort editing requires an available model. Clicking the unselected trigger opens the model list directly; Escape closes it. -Mount this plugin alongside `ui-conversation` and the commands package; the composer then shows the model seat next to the pending indicator, and `/model` opens the same directory as a popup. While the seat's menu is open, `↑`/`↓` move focus across the rows of the shown pane, Tab settles the focused row, and Escape and `Shift+Tab` leave a drilled pane first and otherwise close back to the trigger. Drilling lands on the row of the value in use, and going back lands on the cell that opened the pane left. Both surfaces show the host-reported current selection when the exact provider/model pair remains in the advertised groups; a missing catalog row clears the effective selection and the trigger prompts `Select model`, without changing the stored choice. +Mount this plugin alongside `ui-conversation` and the commands package; the composer then shows the model seat next to the pending indicator, and `/model` opens the same directory as a popup. While the seat's menu is open, `↑`/`↓` move focus across the rows of the shown pane, Tab settles the focused row, and Escape and `Shift+Tab` leave a drilled pane first and otherwise close back to the trigger. Drilling lands on the row of the value in use, and going back lands on the cell that opened the pane left. The composer shows the catalog name while the selected model is available, and its saved `provider/model` ID when the model or provider is removed, including account sign-out. The stored provider, model, and reasoning effort remain unchanged. ### Model and effort @@ -39,9 +39,7 @@ The composer replaces the model and effort text with the Models icon when the ex ### Unroutable sessions -The composer blocks sending while the exact provider/model pair is absent from the available catalog or availability is loading or unknown. It keeps the normal input placeholder and an enabled model picker. Refreshes and refresh failures retain the last displayed selection and groups while sending remains blocked; retry revalidates availability. A Host reset clears that display. The account provider name follows the active locale in both selectors. Sign-out, credential removal, and provider or model removal refresh availability without replacing the saved choice with another model. Existing session logs remain unchanged. - -Only the current Client binding's directory can publish its composer block. Cleanup from an older binding preserves a replacement directory's block; without a replacement directory, cleanup removes the obsolete block. +Catalog availability does not block sending with a saved selection; request execution reports missing credentials or unavailable models. Refreshes and refresh failures retain the last displayed selection and groups. A Host reset clears that display. Sign-out hides the account provider from the picker while preserving the saved provider/model ID and reasoning effort. Signing in restores the catalog name when that model is available again. Existing session logs remain unchanged. ### Selection failures @@ -67,7 +65,7 @@ Two entries over ONE per-session directory owned by `ModelDirectoryResolver` (`c Read these pages when the model surface is not enough. They move from the browser surfaces to the command popup shell and the selection contract. - [ui-commands](../ui-commands/README.md) — the popupSelect shell the `/model` contribution registers into. -- [ui-conversation](../ui-conversation/README.md) — declares the composer's `conversation.input.model` seat and the composer block. +- [ui-conversation](../ui-conversation/README.md) — declares the composer's `conversation.input.model` seat. - [dsh-agent-default-model](../../core/agent-default-model/README.md) — the default-model service for sessions that never choose. - [Client package map](../README.md) — adjacent browser UI packages. @@ -86,7 +84,6 @@ Switching the route can reduce or invalidate provider-side cache reuse for subse - These limits define the current model surface. They are current package constraints, not a general model-router comparison or a task backlog. - **No create-time or addressed-subagent selection** — both entries require an existing ordinary session's Agent; there is no draft-phase model choice to fold into session creation, and subagent continuation deliberately exposes no independent model-selection contract. diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index 79516f159d..1ce5a2b1ae 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -29,7 +29,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 未选模型文案与可用模型名使用相同的常规字重,并在既有会话与新会话中保留已保存的推理强度显示;调整推理强度需要先选择可用模型。点击未选模型控件直接打开模型列表,Escape 关闭列表。 -与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,有效选择置空,触发器提示“请选择模型”,已保存的选择不变。 +与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。所选模型可用时,composer 显示目录中的模型名称;模型或提供方被删除时(包括账号退登),改为显示已保存的 `provider/model` ID。保存的提供方、模型和推理强度均保持不变。 ### 模型与推理强度 @@ -39,9 +39,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 ### 不可路由的会话 -确切提供方/模型对不在可用目录中,或可用性仍在加载或未知时,composer 禁止发送。输入框保留常规占位文案,模型选择器仍可操作。刷新及刷新失败期间保留上次显示的选择和分组,同时继续禁发;重试会重新确认可用性。Host 重置时清空这些显示。两个选择器中的账号提供方名称均随当前语言显示。退出账号、移除凭据、提供方或模型都会刷新可用性,不会用其他模型替换已保存的选择。既有会话日志保持不变。 - -只有当前 Client binding 的目录可以发布对应的 composer 阻塞块。旧 binding 的清理保留后继目录的阻塞块;若尚无后继目录,则移除已失效的阻塞块。 +目录可用性不会阻止使用已保存选择发送消息;请求执行负责报告凭据缺失或模型不可用。刷新及刷新失败期间保留上次显示的选择和分组。Host 重置时清空这些显示。退登后选择器隐藏账号提供方,同时保留已保存的提供方/模型 ID 和推理强度。再次登录且该模型可用时恢复目录名称。既有会话日志保持不变。 ### 选择失败 @@ -67,7 +65,7 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 当仅了解模型界面还不够时,请阅读以下页面。这些页面从浏览器界面逐步深入到命令弹窗外壳与选择约定。 - [ui-commands](../ui-commands/README.zh.md)——`/model` 贡献项注册进的 popupSelect 外壳。 -- [ui-conversation](../ui-conversation/README.zh.md)——声明 composer 的 `conversation.input.model` 位与 composer 阻塞块。 +- [ui-conversation](../ui-conversation/README.zh.md)——声明 composer 的 `conversation.input.model` 位。 - [dsh-agent-default-model](../../core/agent-default-model/README.zh.md)——为从未选择的会话提供默认模型的默认模型服务。 - [客户端包映射](../README.zh.md)——相邻的浏览器 UI 包。 @@ -86,7 +84,6 @@ DeepSeek 账号和 API Key 路由显示为独立提供方分组,各自展示 - 这些限制界定了当前模型选择界面。它们是当前包约束,不是通用模型路由器对比或任务积压。 - **无创建期或已寻址 subagent 选择**——两个入口都要求既有普通会话的 agent(智能体);没有可纳入会话创建的草稿阶段模型选择,subagent 继续执行也有意不公开独立的模型选择约定。 diff --git a/packages/client/ui-model-selection/src/client/directory.ts b/packages/client/ui-model-selection/src/client/directory.ts index 355dfc7fda..856bfae24d 100644 --- a/packages/client/ui-model-selection/src/client/directory.ts +++ b/packages/client/ui-model-selection/src/client/directory.ts @@ -15,7 +15,7 @@ import type { ModelCatalogDirectory } from './catalog.ts' /** Directory snapshot both entries render from. */ export interface ModelDirectoryState { - /** Last catalog-confirmed selection, retained for display during same-Host refreshes. */ + /** Saved selection, retained even when its provider or model leaves the catalog. */ current: ModelSelection | null /** Saved effort caption retained when the selected model is unavailable. */ retainedEffort?: string @@ -156,12 +156,12 @@ export class ModelDirectory { return } const selection = projected.next ?? catalog.value.default - const current = catalog.value.groups.some(group => group.id === selection.provider - && group.models.some(model => model.id === selection.model)) ? selection : null + const routable = catalog.value.groups.some(group => group.id === selection.provider + && group.models.some(model => model.id === selection.model)) this.store.set({ - current, + current: selection, ...retainedEffort === undefined ? {} : { retainedEffort }, - routable: current !== null, + routable, groups: catalog.value.groups, failures: catalog.value.failures, status: this.store.getSnapshot().status === 'selecting' diff --git a/packages/client/ui-model-selection/src/client/index.ts b/packages/client/ui-model-selection/src/client/index.ts index 12f81cec2f..7451f225bf 100644 --- a/packages/client/ui-model-selection/src/client/index.ts +++ b/packages/client/ui-model-selection/src/client/index.ts @@ -135,9 +135,7 @@ export function apply(ctx: ClientContext): void { // through the bound translate; the seat component reads the standard seat. const t = ctx.locale.bind(NS) - // The composer-block reason is this plugin's own copy, read at raise time so - // a locale change reaches the next publish. - ctx.plugin(ModelDirectoryResolver, { blockReason: () => t('blocked.composer') }) + ctx.plugin(ModelDirectoryResolver) // Entry 1: the /model popupSelect over the shared directory. ctx.inject(['commandUi', 'modelDirectories'], (scope: ClientContext) => { diff --git a/packages/client/ui-model-selection/src/client/locales.ts b/packages/client/ui-model-selection/src/client/locales.ts index 9d60b95926..bb61b7e931 100644 --- a/packages/client/ui-model-selection/src/client/locales.ts +++ b/packages/client/ui-model-selection/src/client/locales.ts @@ -31,7 +31,6 @@ export const zh = { 'action.reload': '重新加载', 'warning.groupLoad': '{name} 加载失败:{message}', 'empty.models': '没有可用的模型。', - 'blocked.composer': '当前模型不可用,请先选择模型', 'empty.efforts': '当前模型未提供推理等级。', } satisfies Record @@ -61,6 +60,5 @@ export const en = { 'action.reload': 'Reload', 'warning.groupLoad': '{name} failed to load: {message}', 'empty.models': 'No models available.', - 'blocked.composer': 'This model is unavailable — select one to continue', 'empty.efforts': 'This model provides no reasoning effort levels.', } satisfies Record diff --git a/packages/client/ui-model-selection/src/client/service.ts b/packages/client/ui-model-selection/src/client/service.ts index cee8e630d1..1e8fe46c0a 100644 --- a/packages/client/ui-model-selection/src/client/service.ts +++ b/packages/client/ui-model-selection/src/client/service.ts @@ -39,16 +39,11 @@ export class ModelDirectoryResolver extends Service { private readonly live: LiveState = { directories: new WeakMapWithValues() } private readonly catalog: ModelCatalogDirectory - /** Localized composer-block copy; this plugin owns the string it raises. */ - private readonly blockReason: () => string - /** * @param ctx - owning root context (the service registers itself as `models`). - * @param config - the bound translator for this plugin's own dictionary. */ - constructor(ctx: Context, config: { blockReason: () => string }) { + constructor(ctx: Context) { super(ctx, 'modelDirectories') - this.blockReason = config.blockReason this.catalog = new ModelCatalogDirectory(ctx) void this.catalog.load().catch(() => { /* selectors expose the shared error */ }) ctx.on('connection/reset', () => { @@ -84,25 +79,6 @@ export class ModelDirectoryResolver extends Service { binding.session.projections.faceOf('modelSelection'), ) live.directories.set(binding, directory) - const conversation = this.ctx.get('conversation') - if (conversation !== undefined) { - const publish = (): void => { - if (sessions.binding(sessionId) !== binding) return - conversation.blocks.set(sessionId, directory.store.getSnapshot().routable !== true - ? { reason: this.blockReason() } - : undefined) - } - publish() - actx.effect(() => { - const stop = directory.store.subscribe(publish) - return () => { - stop() - const current = sessions.binding(sessionId) - if (current !== undefined && current !== binding && live.directories.get(current) !== undefined) return - conversation.blocks.set(sessionId, undefined) - } - }, 'ui-model-selection: composer block') - } actx.effect(() => () => { directory.dispose() live.directories.delete(binding) diff --git a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts index eca46c5e64..0d035379da 100644 --- a/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts +++ b/packages/client/ui-model-selection/tests/browser-plugin.client.spec.ts @@ -356,7 +356,7 @@ describe('ui-model-selection dual entry', () => { }) }) - it('blocks until a refreshed catalog validates the projected selection', async () => { + it('retains the selected model while refreshing its catalog', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) @@ -383,7 +383,7 @@ describe('ui-model-selection dual entry', () => { }) }) - it('retains the last catalog on refresh failure, blocks sending, and recovers on retry', async () => { + it('retains the last catalog on refresh failure and recovers on retry', async () => { const b = await bench() try { b.mint('s1') @@ -397,7 +397,7 @@ describe('ui-model-selection dual entry', () => { groups: GROUPS, routable: null, status: 'error', error: 'catalog offline', }) }) - expect(b.blockOf('s1')).toBeDefined() + expect(b.blockOf('s1')).toBeUndefined() b.setCatalogFailure(false) await b.ctx.modelDirectories.directoryFor(sid('s1')).load() expect(face.directory.getSnapshot().routable).toBe(true) @@ -417,68 +417,6 @@ describe('ui-model-selection dual entry', () => { expect(face2.directory).not.toBe(face1.directory) }) - it('keeps the replacement directory block when the previous scope finishes cleanup', async () => { - const b = await bench() - const first = b.mint('s1') - const oldDirectory = b.ctx.modelDirectories.directoryFor(sid('s1')) - await oldDirectory.load() - const replacement = b.mint('s1') - replacement.projection.set({ lastUsed: null, next: { provider: 'missing', model: 'unserved' } }) - const directory = b.ctx.modelDirectories.directoryFor(sid('s1')) - try { - expect(directory).not.toBe(oldDirectory) - expect(directory.store.getSnapshot().routable).toBe(false) - expect(b.blockOf('s1')?.reason).toBe(zh['blocked.composer']) - await first.fiber.dispose() - expect(b.blockOf('s1')?.reason).toBe(zh['blocked.composer']) - await replacement.fiber.dispose() - expect(b.blockOf('s1')).toBeUndefined() - } finally { - await Promise.all([first.fiber.dispose(), replacement.fiber.dispose()]) - await b.ctx.fiber.dispose() - } - }) - - it.each([false, true])('ignores late old projection publication while the replacement is routable=%s', async (routable) => { - const b = await bench() - const first = b.mint('s1') - const oldDirectory = b.ctx.modelDirectories.directoryFor(sid('s1')) - await oldDirectory.load() - const replacement = b.mint('s1') - replacement.projection.set({ lastUsed: null, - next: { provider: routable ? 'deepseek-official' : 'missing', model: 'deepseek-v4-flash' } }) - const directory = b.ctx.modelDirectories.directoryFor(sid('s1')) - try { - expect(directory.store.getSnapshot().routable).toBe(routable) - const expected = b.blockOf('s1') - await Promise.resolve().then(() => { - first.projection.set({ lastUsed: null, - next: { provider: routable ? 'missing' : 'deepseek-official', model: 'deepseek-v4-pro' } }) - }) - expect(oldDirectory.store.getSnapshot().routable).toBe(!routable) - expect(b.blockOf('s1')).toBe(expected) - } finally { - await Promise.all([first.fiber.dispose(), replacement.fiber.dispose()]) - await b.ctx.fiber.dispose() - } - }) - - it('clears an obsolete block when the new binding has no model directory', async () => { - const b = await bench() - const first = b.mint('s1') - first.projection.set({ lastUsed: null, next: { provider: 'missing', model: 'unserved' } }) - await b.ctx.modelDirectories.directoryFor(sid('s1')).load() - const replacement = b.mint('s1') - try { - expect(b.blockOf('s1')).toBeDefined() - await first.fiber.dispose() - expect(b.blockOf('s1')).toBeUndefined() - } finally { - await Promise.all([first.fiber.dispose(), replacement.fiber.dispose()]) - await b.ctx.fiber.dispose() - } - }) - it('retains saved effort for existing and new sessions after credentials disappear', async () => { const b = await bench() try { @@ -492,17 +430,17 @@ describe('ui-model-selection dual entry', () => { b.remote.emit('settings/document-updated', ['llm-deepseek', 1]) expect(existing.store.getSnapshot().retainedEffort).toBe('High') await vi.waitFor(() => { - expect(existing.store.getSnapshot()).toMatchObject({ current: null, routable: false, retainedEffort: 'High' }) + expect(existing.store.getSnapshot()).toMatchObject({ current: { provider: 'deepseek-official', model: 'deepseek-v4-flash', reasoningEffort: 'high' }, routable: false, retainedEffort: 'High' }) }) b.mint('new') const fresh = b.ctx.modelDirectories.directoryFor(sid('new')) - expect(fresh.store.getSnapshot()).toMatchObject({ current: null, routable: false, retainedEffort: 'Max' }) + expect(fresh.store.getSnapshot()).toMatchObject({ current: { provider: 'deepseek-official', model: 'deepseek-v4-flash', reasoningEffort: 'max' }, routable: false, retainedEffort: 'Max' }) } finally { await b.ctx.fiber.dispose() } }) - it('blocks the composer when current catalog models disappear', async () => { + it('keeps the composer usable when current catalog models disappear', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) @@ -518,7 +456,7 @@ describe('ui-model-selection dual entry', () => { b.remote.emit('settings/document-updated', ['llm-deepseek', 1]) await Promise.resolve() await Promise.resolve() - expect(b.blockOf('s1')?.reason).toBe(zh['blocked.composer']) + expect(b.blockOf('s1')).toBeUndefined() expect(b.calls.models).toBe(2) // Recovering clears it without a reload of the surface. @@ -530,29 +468,16 @@ describe('ui-model-selection dual entry', () => { expect(b.calls.models).toBe(3) }) - it('hides an unavailable durable selection without replacing or rewriting it', async () => { + it('retains an unavailable durable selection without replacing or rewriting it', async () => { const b = await bench() b.mint('s1') const face = b.seat().inject!(sid('s1')) const intended = { provider: 'deepseek-official', model: 'unlisted' } b.setProjected(sid('s1'), { lastUsed: intended, next: intended }) await vi.waitFor(() => { expect(face.directory.getSnapshot().status).toBe('ready') }) - expect(face.directory.getSnapshot().current).toBeNull() - expect(b.blockOf('s1')?.reason).toBe(zh['blocked.composer']) - expect(b.calls.select).toBe(0) - }) - - it('clears its block when the session scope goes', async () => { - const b = await bench() - const scope = b.mint('s1') - b.setRoutable(false) - const face = b.seat().inject!(sid('s1')) - face.load() - b.remote.emit('llm/adapters-updated', []) - await vi.waitFor(() => { expect(b.blockOf('s1')).toBeDefined() }) - - await scope.fiber.dispose() + expect(face.directory.getSnapshot().current).toEqual(intended) expect(b.blockOf('s1')).toBeUndefined() + expect(b.calls.select).toBe(0) }) it('an unknown session fails loud at the seat inject', async () => { diff --git a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx index feef74b1bd..947d1fea75 100644 --- a/packages/client/ui-model-selection/tests/model-select.client.spec.tsx +++ b/packages/client/ui-model-selection/tests/model-select.client.spec.tsx @@ -1,5 +1,5 @@ // @vitest-environment jsdom -import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react' +import { act, cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' import { RemoteError } from '@deepseek-ai/dsh-client-test-runtime' import { SessionId } from '@deepseek-ai/dsh-session/types' @@ -144,6 +144,19 @@ describe('ModelSelect reasoning effort', () => { expect(screen.queryByText('Fast catalog description')).toBeNull() }) + it.each(['model', 'provider'])('keeps the saved id and effort when the selected %s disappears', (removed) => { + const directory = createSnapshotStore(state({ retainedEffort: 'High' })) + render() + expect(screen.getByRole('button', { name: /选择模型,当前/ }).textContent).toContain('DeepSeek-V4-Flash') + act(() => { directory.update((snapshot) => { + snapshot.groups = removed === 'provider' ? [] : snapshot.groups.map(group => ({ ...group, models: [] })) + snapshot.routable = false + }) }) + expect(screen.getByRole('button', { name: /选择模型,当前/ }).textContent) + .toMatchInlineSnapshot('"deepseek-official/deepseek-v4-flashHigh"') + expect(directory.getSnapshot().current).toEqual(state().current) + }) + it('shows loading until the catalog and Session projection are both ready', async () => { const directory = createSnapshotStore(state({ current: null, @@ -491,3 +504,19 @@ it.each([en, zh])('localizes the account group while preserving external names', expect(screen.getByRole('group', { name: copy['provider.account'] })).toBeTruthy() expect(screen.getByRole('group', { name: 'My Gateway' })).toBeTruthy() }) + +it('restores the account model name after login without changing the saved route', () => { + const groups = [{ id: 'deepseek-account', name: 'DeepSeek Account', models: [ + { id: 'deepseek-flash', name: 'DeepSeek Flash', reasoning }, + ] }] + const selected = { provider: 'deepseek-account', model: 'deepseek-flash', reasoningEffort: 'high' } + const directory = createSnapshotStore(state({ current: selected, groups, retainedEffort: 'High' })) + render() + expect(screen.getByRole('button', { name: /选择模型,当前/ }).textContent).toBe('DeepSeek FlashHigh') + act(() => { directory.update((snapshot) => { snapshot.groups = []; snapshot.routable = false }) }) + expect(screen.getByRole('button', { name: /选择模型,当前/ }).textContent) + .toMatchInlineSnapshot('"deepseek-account/deepseek-flashHigh"') + act(() => { directory.update((snapshot) => { snapshot.groups = groups; snapshot.routable = true }) }) + expect(screen.getByRole('button', { name: /选择模型,当前/ }).textContent).toBe('DeepSeek FlashHigh') + expect(directory.getSnapshot().current).toEqual(selected) +}) diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index d2992bfd87..429a8a450e 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: 55a747896f5c115d08ebacea6046b4de711a530c -README.zh.md: 582a1b21113631305eb38bd02a140479704d365d +README.md: 2a539ab2ed5836e8a9a2afaf4ff49f19e8d20fe8 +README.zh.md: b3d7cd1fb85ed445a32b796cd344c27b19d30229 diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 55a747896f..2a539ab2ed 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -19,6 +19,8 @@ Desktop Account settings display DeepSeek login state and offer browser authoriz - [Model Experience](#model-experience) - [Known Limitations and Deferred Work](#known-limitations-and-deferred-work) +A new account-model sign-in-required event displays “Model unavailable. Please sign in and try again.” in a toast. The notice is transient: remounting or refreshing does not replay it. + ## Use this package @@ -57,7 +59,7 @@ A terminal account-state stream failure appears in the sign-in dialog or Account The balance card shows recharge funds and positive bonus credit in separate rows. Empty or nonpositive bonus wallets hide the bonus row and its divider; currencies retain their own amounts. -A successful first login initializes the default model from `deepseek-account` when no user choice has been saved. Later logins retain the saved choice, including an unavailable one. +A successful login selects the first available `deepseek-account` model as the default when no other provider has a configured API key, even if a previous default was saved. Configured keys preserve the existing default even when their provider has no available models. Session-specific selections remain unchanged. ## Model Experience diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 582a1b2111..b3d7cd1fb8 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -19,6 +19,8 @@ Desktop 设置中的账号页面显示 DeepSeek 登录状态,并提供浏览 - [模型体验](#model-experience) - [已知限制与后续工作](#known-limitations-and-deferred-work) +新的账号模型登录要求事件会弹出“当前模型暂不可用,请登录后再试”提示。提示仅保留在当前界面,重新挂载或刷新不会重放。 + ## 使用此包 @@ -57,7 +59,7 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl 余额卡片分行展示充值余额与正额赠金余额。赠送钱包为空或没有正余额时,隐藏赠金行及其分隔线;不同币种分别显示。 -首次成功登录且用户尚未保存模型选择时,从 `deepseek-account` 初始化默认模型。后续登录保留已保存的选择,包括不可用的选择。 +登录成功时,若其他提供方均未配置 API key,则将 `deepseek-account` 的第一个可用模型设为默认值,即使此前保存过默认选择。其他提供方只要配置了 key,就保留原默认值,即使其没有可用模型。会话内的显式选择保持不变。 ## 模型体验 diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.tsx b/packages/client/ui-settings-account/src/client/AccountMenu.tsx index 641716e16b..a8fab33a82 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.tsx +++ b/packages/client/ui-settings-account/src/client/AccountMenu.tsx @@ -19,12 +19,15 @@ export type AccountMenuProps = PropsRuntime<'settings.launcher'> & PropsLocale<' * @returns account menu launcher. */ export function AccountMenu({ - wide, openSettings, openOnboarding, useAccount, useTheme, signOut, hasRunningAccountTasks, contactUs, showLogin, start, cancel, t, + subscribeModelSignInRequired, wide, openSettings, openOnboarding, useAccount, useTheme, signOut, hasRunningAccountTasks, + contactUs, showLogin, start, cancel, t, }: AccountMenuProps) { const account = useAccount(state => state) const colorScheme = useTheme(snapshot => snapshot.active.colorScheme) const signedIn = account.view?.status === 'credential-stored' const expired = account.view?.status === 'signed-out' && account.view.signOutReason === 'expired' + const [signInNotice, setSignInNotice] = useState(0) + useEffect(() => subscribeModelSignInRequired?.(() => { setSignInNotice(value => value + 1) }), [subscribeModelSignInRequired]) const [expiryNotice, setExpiryNotice] = useState(false) useEffect(() => { setExpiryNotice(expired) }, [expired]) const profile = account.details?.profile @@ -42,6 +45,7 @@ export function AccountMenu({ // The plugin's start publishes `loginFailed` before it rejects, so the dialog owns the report. const beginSignIn = (): void => { setOpen(false); void start().catch(() => undefined) } return
+ {signInNotice > 0 && { setSignInNotice(0) }} />} {expiryNotice && { setExpiryNotice(false) }} />} void) => () => void /** Desktop-only commands; absent in ordinary browsers. */ platform?: PlatformBridge diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index d8b844049f..58d68827d1 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -89,6 +89,7 @@ export function apply(ctx: Context): void { })().catch(() => { if (!disposed) publish({ ...snapshot, failed: true }) }) const nativePlatform = (globalThis as typeof globalThis & { dshPlatform?: PlatformBridge }).dshPlatform const operations: AccountSectionInjected = { + subscribeModelSignInRequired: listener => ctx.remote.$on('deepseek-account/model-sign-in-required', listener), ...nativePlatform === undefined ? {} : { platform: nativePlatform }, refresh, contactUs() { diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index 22a61c95a8..1c8a62192b 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -1,5 +1,6 @@ /** Account settings copy, owned by the account feature. */ export const en = { + modelSignInRequired: 'Model unavailable. Please sign in and try again.', sessionExpired: 'You have signed out of your account, please log in again.', close: 'Close', addApiKey: 'Add API Key', retry: 'Sign in again', loginTitle: 'Start creating', loginDescription: 'Sign in to create, edit, and share your design projects. Everything is saved locally.', @@ -29,6 +30,7 @@ export const en = { export type AccountKey = keyof typeof en /** Chinese account settings copy. */ export const zh: Record = { + modelSignInRequired: '当前模型暂不可用,请登录后再试', sessionExpired: '登录信息已失效,请重新登录', close: '关闭', addApiKey: '添加 API Key', retry: '重新登录', loginTitle: '开始你的创作', loginDescription: '登录后即可创建、编辑和分享你的设计项目,所有内容在本地保存。', diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index 58fbbd01f4..8905710af7 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -491,3 +491,25 @@ it('reports resize failure, ignores late native failures, and tolerates a remove await act(async () => { loaded.reject(new Error('late failure')); await loaded.promise.catch(() => {}) }) expect(screen.queryByRole('dialog')).toBeNull() }) + +it.each([en, zh])('shows live model sign-in guidance without replaying it after remount', async (copy) => { + const operations = operationsOf({ status: 'signed-out', attempt: null }) + let listener: (() => void) | undefined + const unsubscribe = vi.fn(() => { listener = undefined }) + operations.subscribeModelSignInRequired = (next) => { listener = next; return unsubscribe } + const { AccountMenu } = await import('../src/client/AccountMenu.tsx') + const element = selector(operations.hooks.account.getSnapshot())} + useTheme={selector => selector(operations.hooks.theme.getSnapshot())} wide openOnboarding={() => {}} openSettings={() => {}} + t={key => key in copy ? copy[key as AccountKey] : key} /> + const view = render(element) + expect(screen.queryByRole('alert')).toBeNull() + act(() => { listener?.() }) + expect(screen.getByRole('alert').textContent).toBe(copy.modelSignInRequired) + act(() => { listener?.() }) + expect(screen.getAllByRole('alert')).toHaveLength(1) + view.unmount() + expect(unsubscribe).toHaveBeenCalledOnce() + render(element) + expect(screen.queryByRole('alert')).toBeNull() +}) diff --git a/packages/context/agent-instructions/package.json b/packages/context/agent-instructions/package.json index 90cfff97ab..d76238422d 100644 --- a/packages/context/agent-instructions/package.json +++ b/packages/context/agent-instructions/package.json @@ -51,6 +51,7 @@ "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", diff --git a/packages/context/agent-instructions/tests/agent-instructions.e2e.ts b/packages/context/agent-instructions/tests/agent-instructions.e2e.ts index 4d91d49e29..5a5592b309 100644 --- a/packages/context/agent-instructions/tests/agent-instructions.e2e.ts +++ b/packages/context/agent-instructions/tests/agent-instructions.e2e.ts @@ -8,7 +8,7 @@ import { SessionId } from '@deepseek-ai/dsh-session' import type { Agent } from '@deepseek-ai/dsh-agent' import AgentLoop from '@deepseek-ai/dsh-agent-loop' import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import * as AgentInstructions from '@deepseek-ai/dsh-agent-instructions' import { candidateScopeKey } from '../src/render.ts' import LocalFileSystem from '@deepseek-ai/dsh-fs-local' diff --git a/packages/context/time-context/tests/time-context.spec.ts b/packages/context/time-context/tests/time-context.spec.ts index 5d0264c3ce..454baf309b 100644 --- a/packages/context/time-context/tests/time-context.spec.ts +++ b/packages/context/time-context/tests/time-context.spec.ts @@ -51,7 +51,6 @@ function sessionAgent(session: Session, id = 'agent'): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/context/tmux-context/tests/tmux-context.spec.ts b/packages/context/tmux-context/tests/tmux-context.spec.ts index cd8d778065..ae15f20a46 100644 --- a/packages/context/tmux-context/tests/tmux-context.spec.ts +++ b/packages/context/tmux-context/tests/tmux-context.spec.ts @@ -110,7 +110,6 @@ function sessionAgent(session: Session, id = 'agent'): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/core/agent-default-model/README.i18n.yaml b/packages/core/agent-default-model/README.i18n.yaml index 7ea0e58c92..eac56801bf 100644 --- a/packages/core/agent-default-model/README.i18n.yaml +++ b/packages/core/agent-default-model/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-default-model/README.md -README.md: 376698f309e311f979a01f39feb1f84a71751713 -README.zh.md: b24b0925504f45553d71e2f2594f359daa29983c +README.md: 2aa3d8ed4e4f36286226f76df4c21dd5cb87be0d +README.zh.md: 7283a44f5f491c1fd51d4c33b6df3f65cb8e76bf diff --git a/packages/core/agent-default-model/README.md b/packages/core/agent-default-model/README.md index 376698f309..2aa3d8ed4e 100644 --- a/packages/core/agent-default-model/README.md +++ b/packages/core/agent-default-model/README.md @@ -7,7 +7,7 @@ kind: "package-reference" English | [中文](README.zh.md) -`initializeSelection()` serializes the first setup choice with user writes and preserves an explicit profile selection, including unavailable models. +`initializeSelection()` serializes the first setup choice with user writes and checks the persisted profile override before writing. It preserves explicit selections, including unavailable models. ## Summary diff --git a/packages/core/agent-default-model/README.zh.md b/packages/core/agent-default-model/README.zh.md index b24b092550..7283a44f5f 100644 --- a/packages/core/agent-default-model/README.zh.md +++ b/packages/core/agent-default-model/README.zh.md @@ -7,7 +7,7 @@ kind: "package-reference" [English](README.md) | 中文 -`initializeSelection()` 将首次配置选择与用户写入串行处理,并保留显式的 profile 选择,包括暂不可用的模型。 +`initializeSelection()` 将首次配置选择与用户写入串行处理,并在写入前检查持久化的 profile override。它保留显式选择,包括暂不可用的模型。 ## 概述 diff --git a/packages/core/agent-default-model/src/index.ts b/packages/core/agent-default-model/src/index.ts index 0100c5baf5..7947f70110 100644 --- a/packages/core/agent-default-model/src/index.ts +++ b/packages/core/agent-default-model/src/index.ts @@ -52,7 +52,6 @@ export class AgentDefaultModelConfig extends Service { reasoningEffort: z.string().volatile(), }) - private saved = false private writes: Promise = Promise.resolve() constructor(private readonly ownerContext: Context, private config: Config) { @@ -98,12 +97,11 @@ export class AgentDefaultModelConfig extends Service { const editor = this.ctx.get('configEditor') if (entry === undefined || editor === undefined) return const override = editor.configuration().find(row => row.entry === entry)?.override - if (initialize && (this.saved || override !== undefined && ('provider' in override || 'model' in override))) return + if (initialize && override !== undefined && ('provider' in override || 'model' in override)) return await editor.edit(entry, () => ({ provider: next.provider, model: next.model, ...next.reasoningEffort === undefined ? {} : { reasoningEffort: String(next.reasoningEffort) }, })) - this.saved = true }) this.writes = operation.catch(() => { /* A refused write does not block the next user choice. */ }) return operation diff --git a/packages/core/agent-loop/README.i18n.yaml b/packages/core/agent-loop/README.i18n.yaml index 9e33b0b770..406ad5af53 100644 --- a/packages/core/agent-loop/README.i18n.yaml +++ b/packages/core/agent-loop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-loop/README.md -README.md: c83a0ee287297efba4bc20b2fb8e158e57d87e27 -README.zh.md: 55fbc69270fb4bccc6c54b3738c1e5d94db8f059 +README.md: 07033fb3204e827c5227a99e7211e5e648c389c6 +README.zh.md: 0fce6147b37d704add8266deaf185ea83ae84b73 diff --git a/packages/core/agent-loop/README.md b/packages/core/agent-loop/README.md index c83a0ee287..07033fb320 100644 --- a/packages/core/agent-loop/README.md +++ b/packages/core/agent-loop/README.md @@ -25,7 +25,6 @@ English | [中文](README.zh.md) ## Use this package -The running phase retains the final prepared provider through tool execution and retry preparation, resets it before publishing `turn/end`, and exposes it through `Agent.activeProvider`. Plugins can cancel matching live agents without consulting mutable settings or historical request headers. Mount `dsh-agent-loop` in any composition that should run agents. It supplies the driver behind `ctx.agents` and starts any agents you declare in its config; both [`dsh-base`](../../bundle/base/README.md) and [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.md) mount it as an explicit row. diff --git a/packages/core/agent-loop/README.zh.md b/packages/core/agent-loop/README.zh.md index 55fbc69270..0fce6147b3 100644 --- a/packages/core/agent-loop/README.zh.md +++ b/packages/core/agent-loop/README.zh.md @@ -25,7 +25,6 @@ kind: "package-reference" ## 使用本包 -运行阶段在工具执行及重试准备期间保留最终准备完成的提供方,在发布 `turn/end` 前重置,并通过 `Agent.activeProvider` 暴露。插件可以取消匹配的运行中代理,无须读取可变设置或历史请求头。 在任何应运行 agent 的组合中挂载 `dsh-agent-loop`。它提供 `ctx.agents` 背后的驱动器,并启动你在配置中声明的 agent;[`dsh-base`](../../bundle/base/README.zh.md) 与 [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.zh.md) 都将它作为显式配置行挂载。 diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index ddfb2645ac..ce45582bd6 100644 --- a/packages/core/agent-loop/package.json +++ b/packages/core/agent-loop/package.json @@ -49,6 +49,7 @@ "zod": "^4.4.3" }, "devDependencies": { + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/core/agent-loop/src/agent.ts b/packages/core/agent-loop/src/agent.ts index aeff7b783b..98114f53cd 100644 --- a/packages/core/agent-loop/src/agent.ts +++ b/packages/core/agent-loop/src/agent.ts @@ -46,7 +46,7 @@ type Phase = lastTurn: number wakeRequested: boolean } - | { kind: 'running'; abort: AbortController; turn: number; step: number; wakeRequested: boolean; activeProvider?: string } + | { kind: 'running'; abort: AbortController; turn: number; step: number; wakeRequested: boolean } type StepEndReason = Extract @@ -140,10 +140,6 @@ export class ReactLoopAgent implements Agent { return this.phase.kind === 'idle' || this.phase.kind === 'maintenance' ? 'idle' : 'running' } - get activeProvider(): string | undefined { - return this.phase.kind === 'running' ? this.phase.activeProvider : undefined - } - /** Commit a phase and publish its externally visible status transition. */ private setPhase(next: Phase): void { const previousStatus = this.status @@ -367,7 +363,6 @@ export class ReactLoopAgent implements Agent { this.throwError(error) } finally { try { - delete phase.activeProvider // oxlint-disable-next-line typescript/no-non-null-assertion -- every exit assigns a turn ending this.session.append('turn/end', { turn, reason: turnEnds! }) } catch (error: unknown) { @@ -579,7 +574,6 @@ export class ReactLoopAgent implements Agent { config = proposedConfig } signal.throwIfAborted() - if (this.phase.kind === 'running') this.phase.activeProvider = config.provider return { config, ...preparedCall === undefined ? {} : { preparedCall } } } diff --git a/packages/core/agent-loop/tests/inbox.spec.ts b/packages/core/agent-loop/tests/inbox.spec.ts index f4a9eeb387..739d18b990 100644 --- a/packages/core/agent-loop/tests/inbox.spec.ts +++ b/packages/core/agent-loop/tests/inbox.spec.ts @@ -26,7 +26,6 @@ function stubAgent(rawId: string, overrides: Partial = {}): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx, send: () => {}, diff --git a/packages/core/agent-loop/tests/request-cache.e2e.ts b/packages/core/agent-loop/tests/request-cache.e2e.ts index ceaa2b0b6d..e36281607d 100644 --- a/packages/core/agent-loop/tests/request-cache.e2e.ts +++ b/packages/core/agent-loop/tests/request-cache.e2e.ts @@ -9,7 +9,7 @@ import AgentRegistry, { type Agent } from '@deepseek-ai/dsh-agent' import AgentLoop from '@deepseek-ai/dsh-agent-loop' import SessionProjectionRegistry from '@deepseek-ai/dsh-session-projection' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' /** * With-key proof that log-derived requests translate into real provider cache hits: a diff --git a/packages/core/agent/README.i18n.yaml b/packages/core/agent/README.i18n.yaml index b943742f3d..a5d18afec9 100644 --- a/packages/core/agent/README.i18n.yaml +++ b/packages/core/agent/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent/README.md -README.md: 3d88527a3fed66e2a7bc90ba11ad9c52df0fedec -README.zh.md: cb603d265d9a430f063fcab8024e61f2a8ef7389 +README.md: 17ee5fd723f5322c0ccdfd7cc8443dbb842cf674 +README.zh.md: 94424a5e9bc5a30fbbb5e775658c7b90a37f24f7 diff --git a/packages/core/agent/README.md b/packages/core/agent/README.md index 3d88527a3f..17ee5fd723 100644 --- a/packages/core/agent/README.md +++ b/packages/core/agent/README.md @@ -25,7 +25,6 @@ Use `dsh-agent` to create or resume live agents, send follow-up or steering inpu ## Use this package -The read-only `Agent.activeProvider` identifies the current turn’s latest prepared request. It is absent before the first request is prepared and between turns; tools and retries retain the last provider until another request finishes preparation. Configuration changes alone do not reclassify in-flight work. Mount `dsh-agent` wherever live agents exist: it provides `ctx.agents` and the `Agent` handle that plugins, UI, hooks, and orchestrators work against. The service is inert until a driver registers a factory — the shipped driver is `dsh-agent-loop`, so the smallest useful composition loads both. diff --git a/packages/core/agent/README.zh.md b/packages/core/agent/README.zh.md index cb603d265d..94424a5e9b 100644 --- a/packages/core/agent/README.zh.md +++ b/packages/core/agent/README.zh.md @@ -25,7 +25,6 @@ kind: "package-reference" ## 使用本包 -只读 `Agent.activeProvider` 标识当前轮次最近一次完成准备的请求提供方。首请求准备完成前及轮次之间没有该值;工具执行和重试期间保留上一提供方,直到另一请求完成准备。仅改变配置不会改变在途任务的归属。 在存在实时 agent 的任何地方挂载 `dsh-agent`:它提供 `ctx.agents` 以及插件、UI、钩子和编排器所面向编程的 `Agent` 句柄。在没有驱动器注册工厂之前,该服务保持惰性——随附驱动器是 `dsh-agent-loop`,因此最小的可用组合需要同时加载两者。 diff --git a/packages/core/agent/src/runtime-types.ts b/packages/core/agent/src/runtime-types.ts index bb87e7986e..2118507b8c 100644 --- a/packages/core/agent/src/runtime-types.ts +++ b/packages/core/agent/src/runtime-types.ts @@ -170,8 +170,6 @@ declare module './types.ts' { readonly inbox: Inbox /** The current lifecycle state, mirrored on every `agent/status` transition. */ readonly status: AgentStatus - /** Latest prepared provider in this turn; retained through tools and retries, absent before preparation and between turns. */ - readonly activeProvider: string | undefined /** Agent-scoped context; its contributions are agent-local, unwind on disposal, and reject registration afterward. */ readonly ctx: Context diff --git a/packages/core/agent/tests/agent.spec.ts b/packages/core/agent/tests/agent.spec.ts index 99f20f2419..c31acf5c66 100644 --- a/packages/core/agent/tests/agent.spec.ts +++ b/packages/core/agent/tests/agent.spec.ts @@ -24,7 +24,6 @@ function stubAgent(rawId: string, overrides: Partial = {}): Agent { inbox: { nextTurn: [], nextStep: [], } as never, - activeProvider: undefined, status: 'idle', ctx, send: () => {}, diff --git a/packages/core/agent/tests/archive-admission.spec.ts b/packages/core/agent/tests/archive-admission.spec.ts index 0969baa21a..0f84de4fe0 100644 --- a/packages/core/agent/tests/archive-admission.spec.ts +++ b/packages/core/agent/tests/archive-admission.spec.ts @@ -15,7 +15,6 @@ async function liveAgent(ctx: Context, rawId: string, initial: AgentStatus): Pro const cancels: CancelCall[] = [] let status = initial const agent: LiveAgent = { - activeProvider: undefined, id, options: {}, session: Session.create(id), diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index 3909be12e5..0c882a5bab 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -7,7 +7,7 @@ import { finished } from 'node:stream/promises' import { Context, Service } from '@deepseek-ai/cordis' import Schema from '@deepseek-ai/schemastery' import { z } from 'zod' -import { DeepSeekAccount, desktopClientHeaders, mergePlatformCookies, type PlatformSession, type AccountDetails, type AccountView, type SignInAttemptId, type SignInAttemptView } from '@deepseek-ai/dsh-deepseek-account' +import { DeepSeekAccount, installAccountTaskCancellation, desktopClientHeaders, mergePlatformCookies, type PlatformSession, type AccountDetails, type AccountView, type SignInAttemptId, type SignInAttemptView } from '@deepseek-ai/dsh-deepseek-account' import { credentialKey } from '@deepseek-ai/dsh-credentials' import type { AuthorizationSession } from '@deepseek-ai/dsh-authorization' import { profile, readAccountDetail } from './details.ts' @@ -103,6 +103,7 @@ export class PlatformAccount extends DeepSeekAccount { /** @param ctx - Host with authorization and credentials services. @param config - deployment options. */ constructor(ctx: Context, config: Config = {}) { super(ctx) + installAccountTaskCancellation(ctx) const resolved = Config(config) this.embeddedPageDist = resolved.embeddedPageDist this.origin = platformOrigin(resolved.platformOrigin, resolved.allowLoopbackHttp) diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index 04ef86deeb..586afa4831 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account/README.md -README.md: eabed7ba74cc9995a46e42eb13eb238a06ec0359 -README.zh.md: 0f48d6286e8eec9d375439e052272e10f2871806 +README.md: 804b929fe27ecdc82569f002dbbc595ae9b0219b +README.zh.md: 8403eb004e33b9cc3e08dca5f1e96c18d1abaee4 diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md index eabed7ba74..804b929fe2 100644 --- a/packages/credentials/deepseek-account/README.md +++ b/packages/credentials/deepseek-account/README.md @@ -30,10 +30,12 @@ Account consumers read stored login state, start or cancel a browser login, and `AccountProfile.avatarUrl` is an optional profile image URL; null or absence means no avatar. -Successful local sign-out emits `deepseek-account/signed-out`. Consumers own any cancellation policy; the account service does not track agents or model providers. +Successful local sign-out emits `deepseek-account/signed-out`. The platform provider installs the account-owned cancellation listener, which checks running Agents against `session.requestContext().provider` and cancels account tasks while retaining inboxes. The account controller uses the same predicate for its confirmation dialog. No additional Agent state is maintained. Before a new turn binds its first request, this predicate still sees the previous turn’s provider. The service defines account operations and reconnectable state snapshots. The platform provider owns the protocol and stored grant. Credentials are Host-only; the API controller exports state and commands without resolveToken. +Account model failures with `ACCOUNT_SIGN_IN_REQUIRED` emit `deepseek-account/model-sign-in-required`; the Client receives this live event for sign-in guidance. Other request errors do not emit it. + ## Understand the implementation diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md index 0f48d6286e..8403eb004e 100644 --- a/packages/credentials/deepseek-account/README.zh.md +++ b/packages/credentials/deepseek-account/README.zh.md @@ -28,12 +28,14 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token ## 使用此包 -本地成功退出登录后发出 `deepseek-account/signed-out`。消费方负责取消策略;账号服务不跟踪 agent 或模型提供方。 +本地成功退出登录后发出 `deepseek-account/signed-out`。Platform 提供方安装账号模块的取消监听器,根据运行中 Agent 的 `session.requestContext().provider` 判断账号任务,取消时保留收件箱。账号控制器的确认弹窗复用同一判断,不维护额外 Agent 状态。新轮次绑定首请求前,该判断仍读取上一轮的提供方。 `AccountProfile.avatarUrl` 是可选的账号头像 URL;为空或缺失时表示没有头像。 该服务定义账号操作和可重连的状态快照。平台提供者负责协议和授权记录。凭证仅限 Host;API 控制器只导出状态与操作,不导出 resolveToken。 +账号模型请求以 `ACCOUNT_SIGN_IN_REQUIRED` 失败时,发出 `deepseek-account/model-sign-in-required`,Client 接收该实时事件以提示登录。其他请求错误不触发此事件。 + ## 理解实现 diff --git a/packages/credentials/deepseek-account/package.json b/packages/credentials/deepseek-account/package.json index b0f00e6a7c..c2ed2bcbbc 100644 --- a/packages/credentials/deepseek-account/package.json +++ b/packages/credentials/deepseek-account/package.json @@ -33,10 +33,19 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:~", - "@deepseek-ai/dsh-brand": "workspace:*" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:~", - "@deepseek-ai/dsh-brand": "workspace:*" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-agent": { + "optional": true + } } } diff --git a/packages/credentials/deepseek-account/src/account-tasks.ts b/packages/credentials/deepseek-account/src/account-tasks.ts new file mode 100644 index 0000000000..6325571dd5 --- /dev/null +++ b/packages/credentials/deepseek-account/src/account-tasks.ts @@ -0,0 +1,35 @@ +/** Account sign-out policy over the latest logged request route. */ +import type { Context } from '@deepseek-ai/cordis' +import { LlmError } from '@deepseek-ai/dsh-llm' +import type { Agent } from '@deepseek-ai/dsh-agent' +import type {} from './index.ts' + +/** + * Identify running work whose latest bound request used the account route. + * @param agent - live Agent with its durable request context. + * @returns whether account sign-out should interrupt this task. + */ +export function isRunningAccountTask(agent: Pick): boolean { + return agent.status === 'running' && agent.session.requestContext()?.provider === 'deepseek-account' +} + +/** + * Cancel signed-out account tasks and publish sign-in guidance for rejected requests. + * @param ctx - account provider lifetime; Agents may attach later. + */ +export function installAccountTaskCancellation(ctx: Context): void { + ctx.inject(['agents'], (scope) => { + scope.on('agent/error', ({ error }) => { + if (error instanceof LlmError && error.code === 'ACCOUNT_SIGN_IN_REQUIRED') { + scope.emit('deepseek-account/model-sign-in-required') + } + }) + scope.on('deepseek-account/signed-out', () => { + for (const agent of scope.agents.list()) { + if (isRunningAccountTask(agent)) { + agent.cancel({ kind: 'hook', reason: 'deepseek-account/signed-out' }, { keepInbox: true }) + } + } + }) + }) +} diff --git a/packages/credentials/deepseek-account/src/index.ts b/packages/credentials/deepseek-account/src/index.ts index f876c749c8..8197127979 100644 --- a/packages/credentials/deepseek-account/src/index.ts +++ b/packages/credentials/deepseek-account/src/index.ts @@ -1,6 +1,7 @@ /** Account Service Definition shared by platform, API, and model consumers. */ import { Context, Service } from '@deepseek-ai/cordis' import type { AccountDetails, AccountView, SignInAttemptId } from './types.ts' +export { isRunningAccountTask, installAccountTaskCancellation } from './account-tasks.ts' export type { AccountDetails, AccountProfile, AccountWallet, AccountLinks, AccountView, SignInAttemptId, SignInAttemptView, SignInErrorCode } from './types.ts' declare module '@deepseek-ai/cordis' { diff --git a/packages/credentials/deepseek-account/src/types.ts b/packages/credentials/deepseek-account/src/types.ts index ea994d53eb..c88550d101 100644 --- a/packages/credentials/deepseek-account/src/types.ts +++ b/packages/credentials/deepseek-account/src/types.ts @@ -1,4 +1,5 @@ /** Client-safe account state; credentials never cross this projection. */ +import type {} from '@deepseek-ai/cordis' import type { Branded } from '@deepseek-ai/dsh-brand' /** Identity of one local login attempt, unrelated to the platform request ID. */ @@ -47,3 +48,12 @@ export interface AccountDetails { readonly profile: { readonly status: 'ready'; readonly value: AccountProfile } | { readonly status: 'failed' } readonly balance: { readonly status: 'ready'; readonly value: readonly AccountWallet[]; readonly bonusWallets: readonly AccountWallet[] } | { readonly status: 'failed' } } + +declare module '@deepseek-ai/cordis' { + interface Events { + /** An account model request requires the user to sign in. + * @mode emit + */ + 'deepseek-account/model-sign-in-required'(): void + } +} diff --git a/packages/credentials/deepseek-account/tests/account-tasks.spec.ts b/packages/credentials/deepseek-account/tests/account-tasks.spec.ts new file mode 100644 index 0000000000..c2e0ddc9d9 --- /dev/null +++ b/packages/credentials/deepseek-account/tests/account-tasks.spec.ts @@ -0,0 +1,42 @@ +/** Account cancellation follows logged routes and the owning plugin lifetime. */ +import { Context } from '@deepseek-ai/cordis' +import { LlmError } from '@deepseek-ai/dsh-llm' +import { expect, it, vi } from 'vitest' +import { installAccountTaskCancellation } from '../src/account-tasks.ts' + +it('cancels running account tasks with their inboxes retained and detaches with its owner', async () => { + const ctx = new Context() + const cancelAccount = vi.fn() + const cancelOther = vi.fn() + const cancelIdle = vi.fn() + const tasks = [ + { status: 'running', session: { requestContext: () => ({ provider: 'deepseek-account' }) }, cancel: cancelAccount }, + { status: 'running', session: { requestContext: () => ({ provider: 'deepseek-official' }) }, cancel: cancelOther }, + { status: 'idle', session: { requestContext: () => ({ provider: 'deepseek-account' }) }, cancel: cancelIdle }, + { status: 'running', session: { requestContext: () => undefined }, cancel: cancelOther }, + ] + ctx.provide('agents', { list: () => tasks } as never) + const owner = ctx.plugin((scope) => { installAccountTaskCancellation(scope) }) + try { + await owner.await() + ctx.emit('deepseek-account/signed-out') + expect(cancelAccount).toHaveBeenCalledExactlyOnceWith( + { kind: 'hook', reason: 'deepseek-account/signed-out' }, { keepInbox: true }, + ) + expect(cancelOther).not.toHaveBeenCalled() + expect(cancelIdle).not.toHaveBeenCalled() + const notice = vi.fn() + ctx.on('deepseek-account/model-sign-in-required', notice) + const report = (error: unknown) => { ctx.emit('agent/error', { agent: {} as never, turn: 0, step: 0, error }) } + report(new Error('offline')) + report(new LlmError('API key invalid', 'INVALID_API_KEY')) + expect(notice).not.toHaveBeenCalled() + report(new LlmError('Sign in required', 'ACCOUNT_SIGN_IN_REQUIRED')) + expect(notice).toHaveBeenCalledTimes(1) + await owner.dispose() + report(new LlmError('Sign in required', 'ACCOUNT_SIGN_IN_REQUIRED')) + expect(notice).toHaveBeenCalledTimes(1) + ctx.emit('deepseek-account/signed-out') + expect(cancelAccount).toHaveBeenCalledTimes(1) + } finally { await ctx.fiber.dispose() } +}) diff --git a/packages/credentials/deepseek-account/tsconfig.json b/packages/credentials/deepseek-account/tsconfig.json index 342f636170..a0da11ddaa 100644 --- a/packages/credentials/deepseek-account/tsconfig.json +++ b/packages/credentials/deepseek-account/tsconfig.json @@ -16,6 +16,12 @@ }, { "path": "../../util/brand" + }, + { + "path": "../../core/agent" + }, + { + "path": "../../llm/llm" } ] } diff --git a/packages/deliverables/tool-present/tests/present.spec.ts b/packages/deliverables/tool-present/tests/present.spec.ts index 947d5acedc..6a603163bd 100644 --- a/packages/deliverables/tool-present/tests/present.spec.ts +++ b/packages/deliverables/tool-present/tests/present.spec.ts @@ -35,7 +35,6 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', get ctx() { return scope.ctx }, send: () => {}, diff --git a/packages/experimental/auto-review/package.json b/packages/experimental/auto-review/package.json index c6cbbd994a..dd718bc693 100644 --- a/packages/experimental/auto-review/package.json +++ b/packages/experimental/auto-review/package.json @@ -51,6 +51,7 @@ "@deepseek-ai/dsh-fs-sandbox": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-permission-presets": "workspace:*", "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", diff --git a/packages/experimental/auto-review/tests/auto-review.e2e.ts b/packages/experimental/auto-review/tests/auto-review.e2e.ts index 69de19fa97..55ad0f4a82 100644 --- a/packages/experimental/auto-review/tests/auto-review.e2e.ts +++ b/packages/experimental/auto-review/tests/auto-review.e2e.ts @@ -14,7 +14,7 @@ import { createUserMessage, isAgentLoopRequest, ToolCallId, type StreamChunk, } from '@deepseek-ai/dsh-llm' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import PermissionPresetService, { AUTO_PRESET } from '@deepseek-ai/dsh-permission-presets' import SandboxProvider, { type ConfinedArgv, type SandboxPolicy } from '@deepseek-ai/dsh-sandbox' import SandboxPolicyService from '@deepseek-ai/dsh-sandbox-policy' diff --git a/packages/experimental/browser-use-runtime/tests/resources.spec.ts b/packages/experimental/browser-use-runtime/tests/resources.spec.ts index 104489f420..f838191d44 100644 --- a/packages/experimental/browser-use-runtime/tests/resources.spec.ts +++ b/packages/experimental/browser-use-runtime/tests/resources.spec.ts @@ -16,7 +16,7 @@ async function fixture() { const fiber = ctx.plugin(() => {}) const session = Session.create(SessionId(id)) const agent: Agent = { - id: session.id, session, ctx: fiber.ctx, options: {}, activeProvider: undefined, status: 'idle', + id: session.id, session, ctx: fiber.ctx, options: {}, status: 'idle', inbox: unsupportedInbox(), send() {}, followup() {}, inject() {}, cancel() {}, steer: () => ({ outcome: Promise.resolve({ status: 'rejected' as const }) }), runMaintenance: task => task(new AbortController().signal), diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 2439bb3b89..804a0f362e 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -1833,9 +1833,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ }, { signature: '@Remote async initializeDefaultModel(provider: string): Promise', - description: 'Initialize the default after the user first configures a provider credential.', + description: 'Initialize a provider default; account login replaces it only when no provider API key is configured.', parameters: [{ name: 'provider', description: 'the provider whose credential was configured.' }], - returns: 'after saving the initial available model; existing user choices are retained.', + returns: 'after saving the first available model or retaining the existing default.', }, { signature: '@Remote(\'modelCatalog\') modelCatalog(): Promise', @@ -3883,6 +3883,14 @@ export const EVENT_API: readonly EventApiEntry[] = [ description: 'Committed change to a provider-managed credential source: a `set`, an `unset`, or an external edit observed in storage. Ambient process-environment changes are not observable and never emit. Listener failures are contained and logged — a sync throw and an async rejection alike — without changing the committed operation\'s outcome, except `INVARIANT`-coded failures, which rethrow after every listener ran; that rethrow reaches the emitter only from synchronous listeners, so invariant checks on this event must not be async functions.', parameters: [{ name: 'ref', description: 'the reference whose stored value changed.' }], }, + { + name: 'deepseek-account/model-sign-in-required', + mode: 'emit', + signature: '\'deepseek-account/model-sign-in-required\'(): void', + summary: 'An account model request requires the user to sign in.', + description: 'An account model request requires the user to sign in.', + parameters: [], + }, { name: 'deepseek-account/signed-out', mode: 'emit', diff --git a/packages/feedback/command-feedback/tests/command-feedback.spec.ts b/packages/feedback/command-feedback/tests/command-feedback.spec.ts index 7db9617a08..4e5401c09e 100644 --- a/packages/feedback/command-feedback/tests/command-feedback.spec.ts +++ b/packages/feedback/command-feedback/tests/command-feedback.spec.ts @@ -38,7 +38,6 @@ function stubAgent(ctx: Context, id: string): { agent: Agent; session: Session } session, inbox: unsupportedInbox(), ctx: new Context(), - activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/feedback/command-feedback/tests/loader-composition.spec.ts b/packages/feedback/command-feedback/tests/loader-composition.spec.ts index ee442e64f0..273657e579 100644 --- a/packages/feedback/command-feedback/tests/loader-composition.spec.ts +++ b/packages/feedback/command-feedback/tests/loader-composition.spec.ts @@ -37,7 +37,6 @@ async function agent(ctx: Context): Promise { session, inbox: unsupportedInbox(), ctx: scope.ctx, - activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/fs/tool-fs/package.json b/packages/fs/tool-fs/package.json index bce844f3ee..08acfab775 100644 --- a/packages/fs/tool-fs/package.json +++ b/packages/fs/tool-fs/package.json @@ -52,6 +52,7 @@ "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/fs/tool-fs/tests/harness.ts b/packages/fs/tool-fs/tests/harness.ts index b556ec9270..80ff83d148 100644 --- a/packages/fs/tool-fs/tests/harness.ts +++ b/packages/fs/tool-fs/tests/harness.ts @@ -5,7 +5,7 @@ import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-test import LocalFileSystem from '@deepseek-ai/dsh-fs-local' import * as FsPolicy from '@deepseek-ai/dsh-fs-observation-policy' import * as ToolFs from '@deepseek-ai/dsh-tool-fs' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' /** * Build the real fs-tool stack for with-key e2e tests. Agents have no session diff --git a/packages/fs/tool-str-replace-editor/tests/tools.spec.ts b/packages/fs/tool-str-replace-editor/tests/tools.spec.ts index 6abb17030f..1f893f37fe 100644 --- a/packages/fs/tool-str-replace-editor/tests/tools.spec.ts +++ b/packages/fs/tool-str-replace-editor/tests/tools.spec.ts @@ -38,7 +38,6 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/goal/command-goal/tests/command-goal.spec.ts b/packages/goal/command-goal/tests/command-goal.spec.ts index 3ad29e5b3b..1e4e65c7a1 100644 --- a/packages/goal/command-goal/tests/command-goal.spec.ts +++ b/packages/goal/command-goal/tests/command-goal.spec.ts @@ -30,7 +30,6 @@ function stubAgent(ctx: Context, id: string): { agent: Agent; session: Session } session, inbox, ctx: new Context(), - activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/goal/goal/tests/goal.spec.ts b/packages/goal/goal/tests/goal.spec.ts index 68f71918ab..06e31d7196 100644 --- a/packages/goal/goal/tests/goal.spec.ts +++ b/packages/goal/goal/tests/goal.spec.ts @@ -59,7 +59,6 @@ function stubAgentForSession(session: Session, suppliedCtx?: Context): StubAgent session, inbox, ctx: agentCtx, - activeProvider: undefined, status: 'idle', send: () => {}, followup: () => {}, diff --git a/packages/goal/goal/tests/projection.spec.ts b/packages/goal/goal/tests/projection.spec.ts index 9bc7ae6693..227da38ad8 100644 --- a/packages/goal/goal/tests/projection.spec.ts +++ b/packages/goal/goal/tests/projection.spec.ts @@ -44,7 +44,6 @@ async function liveAgent(ctx: Context, session: Session): Promise { session, inbox: unsupportedInbox(), ctx, - activeProvider: undefined, get status() { return status }, send: () => {}, followup: () => {}, diff --git a/packages/goal/tool-goal/tests/tool-goal.spec.ts b/packages/goal/tool-goal/tests/tool-goal.spec.ts index 9e606e4bb1..ecc7822bce 100644 --- a/packages/goal/tool-goal/tests/tool-goal.spec.ts +++ b/packages/goal/tool-goal/tests/tool-goal.spec.ts @@ -58,7 +58,6 @@ function stubAgent(rawId: string, supplied?: Session, suppliedCtx?: Context): St options: {}, session, inbox, - activeProvider: undefined, get status() { return status }, ctx: agentCtx, send: () => {}, diff --git a/packages/jobs/jobs-local/tests/events.spec.ts b/packages/jobs/jobs-local/tests/events.spec.ts index 9ab76bef5a..5a653569b9 100644 --- a/packages/jobs/jobs-local/tests/events.spec.ts +++ b/packages/jobs/jobs-local/tests/events.spec.ts @@ -19,7 +19,6 @@ function agentIn(ctx: Context, rawId: string, presetScope?: ScopeKey): Agent { } const session = Session.create(id) return { - activeProvider: undefined, id, options: {}, session, diff --git a/packages/jobs/jobs-local/tests/jobs.spec.ts b/packages/jobs/jobs-local/tests/jobs.spec.ts index da768539fb..8687f18ef9 100644 --- a/packages/jobs/jobs-local/tests/jobs.spec.ts +++ b/packages/jobs/jobs-local/tests/jobs.spec.ts @@ -38,7 +38,6 @@ function stubAgent(ctx: Context, rawId: string, presetScope?: ScopeKey): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle' as const, ctx: agentCtx, send: () => {}, diff --git a/packages/llm/README.i18n.yaml b/packages/llm/README.i18n.yaml index 8b480a856c..c65d056b93 100644 --- a/packages/llm/README.i18n.yaml +++ b/packages/llm/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/README.md -README.md: cbd9e386f0f219eea4f41470bd5da076db00ebe0 -README.zh.md: a3a31dfddd38a07ac95aae037f157ac12763974e +README.md: 6b90e917ebb8dc08b8cd74755fa8d93099d5ebcb +README.zh.md: 9afa16f63825a158ae23badc3b8de3b3d7c7b486 diff --git a/packages/llm/README.md b/packages/llm/README.md index cbd9e386f0..6b90e917eb 100644 --- a/packages/llm/README.md +++ b/packages/llm/README.md @@ -25,7 +25,9 @@ The llm group provides the harness's model-call capability: one provider-neutral | Package | Role | ctx key | |---|---|---| | [`llm/`](llm/README.md) | Streams one model call through a registered provider adapter and shares the harness message, block, and chunk vocabulary | `ctx.llm` | -| [`llm-deepseek/`](llm-deepseek/README.md) | Serves the `deepseek-official` route through DeepSeek Messages with thinking and image input | registers on `ctx.llm` | +| [`llm-deepseek/`](llm-deepseek/README.md) | Shared Messages protocol, request configuration, and model capabilities | — | +| [`llm-deepseek-api-key/`](llm-deepseek-api-key/README.md) | API-key authentication and discovery for the official route | `ctx.llm` | +| [`llm-deepseek-account/`](llm-deepseek-account/README.md) | Account-token authentication, invalidation, and discovery | `ctx.llm` | | [`llm-pi-ai/`](llm-pi-ai/README.md) | Serves configured provider routes through pi-ai catalogs and wire protocols, including hand-declared gateways | registers on `ctx.llm` | | [`deepseek-llm-api-extensions/`](deepseek-llm-api-extensions/README.md) | Registers lifecycle-owned top-level fields on official DeepSeek requests | `ctx.deepseekLlmApiExtensions` | | [`plugin-package-inventory-deepseek/`](plugin-package-inventory-deepseek/README.md) | Contributes the active Loader package inventory to official DeepSeek requests | contributes `dsh_plugin_packages` | diff --git a/packages/llm/README.zh.md b/packages/llm/README.zh.md index a3a31dfddd..9afa16f638 100644 --- a/packages/llm/README.zh.md +++ b/packages/llm/README.zh.md @@ -25,7 +25,9 @@ llm 组提供 harness 的模型调用能力:一个提供方无关的服务, | 包 | 职责 | ctx key | |---|---|---| | [`llm/`](llm/README.zh.md) | 通过已注册的提供方适配器流式发起一次模型调用,并共享 harness 的消息、块与分片词汇 | `ctx.llm` | -| [`llm-deepseek/`](llm-deepseek/README.zh.md) | 通过 DeepSeek Messages 为 `deepseek-official` 路由提供思考与图片输入 | 注册到 `ctx.llm` | +| [`llm-deepseek/`](llm-deepseek/README.zh.md) | 共享 Messages 协议、请求配置与模型能力 | — | +| [`llm-deepseek-api-key/`](llm-deepseek-api-key/README.zh.md) | API key 鉴权与 official 模型发现 | `ctx.llm` | +| [`llm-deepseek-account/`](llm-deepseek-account/README.zh.md) | 账号 token 鉴权、失效处理与模型发现 | `ctx.llm` | | [`llm-pi-ai/`](llm-pi-ai/README.zh.md) | 通过 pi-ai 目录与协议格式服务配置的提供方路由,包括手工声明的网关 | 注册到 `ctx.llm` | | [`deepseek-llm-api-extensions/`](deepseek-llm-api-extensions/README.zh.md) | 在官方 DeepSeek 请求上注册具有生命周期归属的顶层字段 | `ctx.deepseekLlmApiExtensions` | | [`plugin-package-inventory-deepseek/`](plugin-package-inventory-deepseek/README.zh.md) | 为官方 DeepSeek 请求贡献当前启用的 Loader 包清单 | 贡献 `dsh_plugin_packages` | diff --git a/packages/llm/llm-deepseek-account/README.i18n.yaml b/packages/llm/llm-deepseek-account/README.i18n.yaml new file mode 100644 index 0000000000..29356a8844 --- /dev/null +++ b/packages/llm/llm-deepseek-account/README.i18n.yaml @@ -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 packages/llm/llm-deepseek-account/README.md +README.md: 1186a81f51ff9b9595100fb04d4eb5fb20af6dbc +README.zh.md: fec40b144f55d369e0ef0e6b6d69a6e45fe28f9b diff --git a/packages/llm/llm-deepseek-account/README.md b/packages/llm/llm-deepseek-account/README.md new file mode 100644 index 0000000000..1186a81f51 --- /dev/null +++ b/packages/llm/llm-deepseek-account/README.md @@ -0,0 +1,75 @@ +--- +description: "DeepSeek account authentication and model discovery." +kind: "package-reference" +--- + +# @deepseek-ai/dsh-llm-deepseek-account + +English | [中文](README.zh.md) + +## Summary + +Register authentication and model discovery for `deepseek-account`. This plugin shares the [Messages transport](../llm-deepseek/README.md) and owns credential resolution and catalog availability. + +## Table of Contents + +- [Use this package](#use-this-package) +- [Understand the implementation](#understand-the-implementation) +- [Further Exploration](#further-exploration) +- [Model Experience](#model-experience) +- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work) +- [Dev Note](#dev-note) + + +## Use this package + +Only `deepseekAccount.resolveToken(baseURL)` supplies the token; the account service validates the destination. Signed-out or ineligible requests fail with `ACCOUNT_SIGN_IN_REQUIRED` and discovery returns an empty catalog. The route never falls back to an API key. Other credential lookup errors propagate. + +```yaml +- id: llm-deepseek-account + name: '@deepseek-ai/dsh-llm-deepseek-account' + config: + reasoningEffort: high +``` + +An account request HTTP 401 maps to `ACCOUNT_TOKEN_INVALID` independently of the response body. The account service removes the credential only if it still matches the request token. HTTP 403 and other failures do not clear the login. The account module owns task cancellation after sign-out; this plugin does not inspect Agents. + +`models` is an independently configurable catalog for this provider; defaults and protocol capabilities come from the shared transport. Discovery does not probe inference endpoints. The settings namespace is the Cordis entry id, or the plugin name without an entry. Product profiles retain the official entry id `llm-deepseek` and use `llm-deepseek-account` for the account route. + + +## Understand the implementation + +Registrations and listeners dispose with the plugin. Shared Host wiring supplies attachments, request extensions, anonymous identity, and atomic retry-policy updates; this plugin registers only its own route. No invariant companion is published: discovery derives directly from configuration and credentials without an independent copy. + + +## Further Exploration + +[LLM streaming](../../../docs/subsystems/llm-streaming.md) · [Messages](../llm-deepseek/README.md) + + +## Model Experience + +### Authenticated model requests + +#### What the model sees + +Requests on `deepseek-account` add no model-visible text from this plugin; the shared Messages transport serializes requests. + +#### Token effect + +Authentication and discovery add no input tokens; the selected model and request content determine actual usage. + +#### KV Cache effect + +Credentials and catalog availability do not enter model input; the protocol transport owns request-prefix serialization. + +## Known Limitations and Deferred Work + + + +- The catalog is configuration metadata, not remote validation that a model is accepted; actual calls can still fail. + + +### Dev Note + +Registration and authentication tests also cover the Loader composition in the shared transport package. diff --git a/packages/llm/llm-deepseek-account/README.zh.md b/packages/llm/llm-deepseek-account/README.zh.md new file mode 100644 index 0000000000..fec40b144f --- /dev/null +++ b/packages/llm/llm-deepseek-account/README.zh.md @@ -0,0 +1,75 @@ +--- +description: "DeepSeek 账号 authentication and model discovery." +kind: "package-reference" +--- + +# @deepseek-ai/dsh-llm-deepseek-account + +[English](README.md) | 中文 + +## 概述 + +为 `deepseek-account` 注册独立的鉴权和模型发现插件。通过 [llm-deepseek](../llm-deepseek/README.zh.md) 共用 Messages 请求实现;本包拥有凭据解析和目录可用性判断。 + +## 目录 + +- [使用此包](#use-this-package) +- [理解实现](#understand-the-implementation) +- [进一步探索](#further-exploration) +- [模型体验](#model-experience) +- [已知限制与后续工作](#known-limitations-and-deferred-work) +- [开发备注](#dev-note) + + +## 使用此包 + +账号 token 仅由 `deepseekAccount.resolveToken(baseURL)` 提供,目标地址必须满足账号服务的来源校验。未登录或目标不允许账号鉴权时,请求以 `ACCOUNT_SIGN_IN_REQUIRED` 失败,目录为空;不会回退到 API key。其他凭据查询错误继续向调用者报告。 + +```yaml +- id: llm-deepseek-account + name: '@deepseek-ai/dsh-llm-deepseek-account' + config: + reasoningEffort: high +``` + +账号请求的 HTTP 401 与响应正文无关:映射为 `ACCOUNT_TOKEN_INVALID`,并要求账号服务仅在当前 token 仍与请求所用 token 相同时清除凭据。403 和其他错误不会触发清除。账号模块负责退登后打断任务,本插件不遍历 Agent。 + +`models` 是该 provider 独立的可配置目录;默认值和协议能力来自共享传输包。目录判断不探测推理端点。设置命名空间采用 Cordis entry id,没有 entry 时采用插件名。产品保留 official 的 `llm-deepseek` entry id,账号使用 `llm-deepseek-account`。 + + +## 理解实现 + +注册和监听随插件生命周期释放。共享 Host 绑定提供附件访问、请求扩展、匿名标识和重试策略的原子更新;本包只注册自己的路由。无需 invariant companion:目录直接由同一次配置和凭据读取派生,不维护独立副本。 + + +## 进一步探索 + +[LLM streaming](../../../docs/subsystems/llm-streaming.zh.md) · [Messages](../llm-deepseek/README.zh.md) + + +## 模型体验 + +### 已鉴权的模型请求 + +#### What the model sees + +`deepseek-account` 请求不包含本插件添加的模型可见文本;请求由共享 Messages 传输序列化。 + +#### Token effect + +鉴权和目录过滤不增加输入 token;实际调用的 token 由所选模型与请求内容决定。 + +#### KV Cache effect + +凭据与目录可用性不进入模型输入;协议传输拥有请求前缀的序列化。 + +## 已知限制与后续工作 + + + +- 目录是配置元数据,不验证远端是否接受模型;实际调用仍可能失败。 + + +### 开发备注 + +注册与鉴权的测试也覆盖共享传输包中的 Loader 组合场景。 diff --git a/packages/llm/llm-deepseek-account/package.json b/packages/llm/llm-deepseek-account/package.json new file mode 100644 index 0000000000..f96077c86e --- /dev/null +++ b/packages/llm/llm-deepseek-account/package.json @@ -0,0 +1,54 @@ +{ + "name": "@deepseek-ai/dsh-llm-deepseek-account", + "description": "DeepSeek account provider authentication and discovery", + "version": "0.1.7-alpha.2", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", + "directory": "packages/llm/llm-deepseek-account" + }, + "type": "module", + "main": "lib/index.js", + "types": "lib/types/index.d.ts", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "default": "./lib/index.js" + }, + "./src/*": "./src/*", + "./package.json": "./package.json" + }, + "files": [ + "lib/index.js", + "lib/types/**/*.d.ts" + ], + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/cordis-plugin-loader": "workspace:~" + }, + "devDependencies": { + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-deepseek-account": { + "optional": true + }, + "@deepseek-ai/cordis-plugin-loader": { + "optional": true + } + } +} diff --git a/packages/llm/llm-deepseek-account/src/config.ts b/packages/llm/llm-deepseek-account/src/config.ts new file mode 100644 index 0000000000..08c14bdf19 --- /dev/null +++ b/packages/llm/llm-deepseek-account/src/config.ts @@ -0,0 +1,6 @@ +/** Account providers expose protocol settings without an API-key reference. */ +import { Config as ProtocolConfig } from '@deepseek-ai/dsh-llm-deepseek' + +/** Account route configuration; authentication comes exclusively from the account service. */ +export type Config = ProtocolConfig +export const Config = ProtocolConfig diff --git a/packages/llm/llm-deepseek-account/src/index.ts b/packages/llm/llm-deepseek-account/src/index.ts new file mode 100644 index 0000000000..17cf773315 --- /dev/null +++ b/packages/llm/llm-deepseek-account/src/index.ts @@ -0,0 +1,47 @@ +/** Account-token authentication and discovery for the DeepSeek account route. */ +import type {} from '@deepseek-ai/cordis-plugin-loader' +import type { Context } from '@deepseek-ai/cordis' +import { LlmError } from '@deepseek-ai/dsh-llm' +import type {} from '@deepseek-ai/dsh-deepseek-account' +import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment' +import { plainOptions, resolveAdapterOptions, registerDeepSeekProvider, catalogModelInfo } from '@deepseek-ai/dsh-llm-deepseek' +import type { ResolvedDeepSeekOptions } from '@deepseek-ai/dsh-llm-deepseek' + +import { Config } from './config.ts' +export { Config } from './config.ts' +export const name = 'llm-deepseek-account' +export const inject = ['llm'] + +const PROVIDER = 'deepseek-account' + +export function apply(ctx: Context, config: Config): void { + const options = () => resolveAdapterOptions(plainOptions(config), launchEnvironmentOf(ctx)) + options() + const resolveApiKey = async (connection: ResolvedDeepSeekOptions): Promise => { + const token = await ctx.get('deepseekAccount')?.resolveToken(connection.baseURL) + if (token === undefined) throw new LlmError('Sign in to DeepSeek to use the account provider. The request destination must allow account authentication.', 'ACCOUNT_SIGN_IN_REQUIRED') + return token + } + ctx.llm.registerConfigurableProviders([ + { provider: PROVIDER, displayName: 'DeepSeek Account', settingsNs: ctx.fiber.entry?.options.id ?? name, settingsPath: [] }, + ]) + registerDeepSeekProvider(ctx, PROVIDER, { + options, resolveApiKey, providerName: 'DeepSeek Account', accountCredential: true, + onRequestError: async (error, token) => { + if (!(error instanceof LlmError) || error.failure.status !== 401) return error + const rejected = new LlmError(error.message, 'ACCOUNT_TOKEN_INVALID', { ...error.failure, cause: error }) + try { await ctx.get('deepseekAccount')?.rejectToken(token) } + catch (_credentialRemovalFailed) { /* Storage failure cannot replace the inference failure. */ } + return rejected + }, + discoverModels: async (provider) => { + const connection = options() + try { await resolveApiKey(connection) } + catch (error) { + if (error instanceof LlmError && error.code === 'ACCOUNT_SIGN_IN_REQUIRED') return [] + throw error + } + return connection.models.map(model => catalogModelInfo(provider, model)) + }, + }) +} diff --git a/packages/llm/llm-deepseek-account/tests/provider.spec.ts b/packages/llm/llm-deepseek-account/tests/provider.spec.ts new file mode 100644 index 0000000000..1ac9db623d --- /dev/null +++ b/packages/llm/llm-deepseek-account/tests/provider.spec.ts @@ -0,0 +1,44 @@ +/** Account and API-key plugins own independent route registrations and catalogs. */ +import { Context } from '@deepseek-ai/cordis' +import LlmRuntime from '@deepseek-ai/dsh-llm' +import type { DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' +import * as ApiKey from '@deepseek-ai/dsh-llm-deepseek-api-key' +import { afterEach, expect, it, vi } from 'vitest' +import * as Account from '../src/index.ts' + +const contexts: Context[] = [] +afterEach(async () => { + for (const ctx of contexts.splice(0)) await ctx.fiber.dispose() + vi.unstubAllEnvs() +}) + +it('keeps discovery and disposal independent across the two credential routes', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', 'fixture-api-key') + const ctx = new Context() + contexts.push(ctx) + await ctx.plugin(LlmRuntime) + let token: string | undefined = 'fixture-account-token' + ctx.provide('deepseekAccount', { resolveToken: async (_baseURL: string): Promise => token } as DeepSeekAccount) + const account = ctx.plugin(Account, { models: [{ id: 'account-model', name: 'Account model' }] }) + await account + expect(ctx.llm.listProviders().map(row => row.id)).toEqual(['deepseek-account']) + const official = ctx.plugin(ApiKey, { models: [{ id: 'api-key-model', name: 'API-key model' }] }) + await official + expect((await ctx.llm.listModels('deepseek-account')).map(row => row.id)).toEqual(['account-model']) + expect((await ctx.llm.listModels('deepseek-official')).map(row => row.id)).toEqual(['api-key-model']) + expect(ctx.llm.listConfigurableProviders().map(row => [row.provider, row.settingsNs])).toEqual([ + ['deepseek-account', 'llm-deepseek-account'], ['deepseek-official', 'llm-deepseek-api-key'], + ]) + expect(Account.Config({})).not.toHaveProperty('apiKeyEnv') + token = undefined + expect(await ctx.llm.listModels('deepseek-account')).toEqual([]) + expect(await ctx.llm.listModels('deepseek-official')).toHaveLength(1) + token = 'new-account-token' + expect(await ctx.llm.listModels('deepseek-account')).toHaveLength(1) + await account.dispose() + expect(ctx.llm.listProviders().map(row => row.id)).toEqual(['deepseek-official']) + expect(ctx.llm.listConfigurableProviders().map(row => row.provider)).toEqual(['deepseek-official']) + await official.dispose() + expect(ctx.llm.listProviders()).toEqual([]) + expect(ctx.llm.listConfigurableProviders()).toEqual([]) +}) diff --git a/packages/llm/llm-deepseek-account/tsconfig.json b/packages/llm/llm-deepseek-account/tsconfig.json new file mode 100644 index 0000000000..1f3eb5770a --- /dev/null +++ b/packages/llm/llm-deepseek-account/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib/types" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../../../vendor/cordis" + }, + { + "path": "../llm" + }, + { + "path": "../llm-deepseek" + }, + { + "path": "../../util/launch-environment" + }, + { + "path": "../../credentials/deepseek-account" + }, + { + "path": "../../../vendor/loader" + } + ] +} diff --git a/packages/llm/llm-deepseek-api-key/README.i18n.yaml b/packages/llm/llm-deepseek-api-key/README.i18n.yaml new file mode 100644 index 0000000000..90a5acc362 --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/README.i18n.yaml @@ -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 packages/llm/llm-deepseek-api-key/README.md +README.md: 751e041f7aeba7c5969e54fc9a9e45c0417a9c61 +README.zh.md: 7caeaaaad0a9c8b0e93c27244e61fd7f8a6daaed diff --git a/packages/llm/llm-deepseek-api-key/README.md b/packages/llm/llm-deepseek-api-key/README.md new file mode 100644 index 0000000000..751e041f7a --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/README.md @@ -0,0 +1,76 @@ +--- +description: "DeepSeek api-key authentication and model discovery." +kind: "package-reference" +--- + +# @deepseek-ai/dsh-llm-deepseek-api-key + +English | [中文](README.zh.md) + +## Summary + +Register authentication and model discovery for `deepseek-official`. This plugin shares the [Messages transport](../llm-deepseek/README.md) and owns credential resolution and catalog availability. + +## Table of Contents + +- [Use this package](#use-this-package) +- [Understand the implementation](#understand-the-implementation) +- [Further Exploration](#further-exploration) +- [Model Experience](#model-experience) +- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work) +- [Dev Note](#dev-note) + + +## Use this package + +`apiKeyEnv` defaults to `DEEPSEEK_API_KEY` and resolves per request. When the credentials service exists, its precedence applies; only compositions without that service read the launch environment directly. Missing credentials fail with `MISSING_CREDENTIAL` and yield an empty catalog; malformed credentials fail with `INVALID_CREDENTIAL`. + +```yaml +- id: llm-deepseek + name: '@deepseek-ai/dsh-llm-deepseek-api-key' + config: + reasoningEffort: high + apiKeyEnv: DEEPSEEK_API_KEY +``` + +The endpoint and credential reference come from one configuration resolution. In-flight requests retain that snapshot; subsequent updates affect subsequent calls. Account login state cannot change this route’s credential. + +`models` is an independently configurable catalog for this provider; defaults and protocol capabilities come from the shared transport. Discovery does not probe inference endpoints. The settings namespace is the Cordis entry id, or the plugin name without an entry. Product profiles retain the official entry id `llm-deepseek` and use `llm-deepseek-account` for the account route. + + +## Understand the implementation + +Registrations and listeners dispose with the plugin. Shared Host wiring supplies attachments, request extensions, anonymous identity, and atomic retry-policy updates; this plugin registers only its own route. No invariant companion is published: discovery derives directly from configuration and credentials without an independent copy. + + +## Further Exploration + +[LLM streaming](../../../docs/subsystems/llm-streaming.md) · [Messages](../llm-deepseek/README.md) + + +## Model Experience + +### Authenticated model requests + +#### What the model sees + +Requests on `deepseek-official` add no model-visible text from this plugin; the shared Messages transport serializes requests. + +#### Token effect + +Authentication and discovery add no input tokens; the selected model and request content determine actual usage. + +#### KV Cache effect + +Credentials and catalog availability do not enter model input; the protocol transport owns request-prefix serialization. + +## Known Limitations and Deferred Work + + + +- The catalog is configuration metadata, not remote validation that a model is accepted; actual calls can still fail. + + +### Dev Note + +Registration and authentication tests also cover the Loader composition in the shared transport package. diff --git a/packages/llm/llm-deepseek-api-key/README.zh.md b/packages/llm/llm-deepseek-api-key/README.zh.md new file mode 100644 index 0000000000..7caeaaaad0 --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/README.zh.md @@ -0,0 +1,76 @@ +--- +description: "DeepSeek API key authentication and model discovery." +kind: "package-reference" +--- + +# @deepseek-ai/dsh-llm-deepseek-api-key + +[English](README.md) | 中文 + +## 概述 + +为 `deepseek-official` 注册独立的鉴权和模型发现插件。通过 [llm-deepseek](../llm-deepseek/README.zh.md) 共用 Messages 请求实现;本包拥有凭据解析和目录可用性判断。 + +## 目录 + +- [使用此包](#use-this-package) +- [理解实现](#understand-the-implementation) +- [进一步探索](#further-exploration) +- [模型体验](#model-experience) +- [已知限制与后续工作](#known-limitations-and-deferred-work) +- [开发备注](#dev-note) + + +## 使用此包 + +`apiKeyEnv` 默认为 `DEEPSEEK_API_KEY`,在每次请求时解析凭据。已组合 credentials 服务时,按其优先级解析;只有未组合该服务时才直接读取启动环境。凭据缺失以 `MISSING_CREDENTIAL` 失败,模型目录为空;格式错误以 `INVALID_CREDENTIAL` 失败。 + +```yaml +- id: llm-deepseek + name: '@deepseek-ai/dsh-llm-deepseek-api-key' + config: + reasoningEffort: high + apiKeyEnv: DEEPSEEK_API_KEY +``` + +端点和凭据引用来自同一次配置解析;进行中的请求保留该快照,后续配置更新仅影响后续请求。账号登录态不影响该路由使用的凭据。 + +`models` 是该 provider 独立的可配置目录;默认值和协议能力来自共享传输包。目录判断不探测推理端点。设置命名空间采用 Cordis entry id,没有 entry 时采用插件名。产品保留 official 的 `llm-deepseek` entry id,账号使用 `llm-deepseek-account`。 + + +## 理解实现 + +注册和监听随插件生命周期释放。共享 Host 绑定提供附件访问、请求扩展、匿名标识和重试策略的原子更新;本包只注册自己的路由。无需 invariant companion:目录直接由同一次配置和凭据读取派生,不维护独立副本。 + + +## 进一步探索 + +[LLM streaming](../../../docs/subsystems/llm-streaming.zh.md) · [Messages](../llm-deepseek/README.zh.md) + + +## 模型体验 + +### 已鉴权的模型请求 + +#### What the model sees + +`deepseek-official` 请求不包含本插件添加的模型可见文本;请求由共享 Messages 传输序列化。 + +#### Token effect + +鉴权和目录过滤不增加输入 token;实际调用的 token 由所选模型与请求内容决定。 + +#### KV Cache effect + +凭据与目录可用性不进入模型输入;协议传输拥有请求前缀的序列化。 + +## 已知限制与后续工作 + + + +- 目录是配置元数据,不验证远端是否接受模型;实际调用仍可能失败。 + + +### 开发备注 + +注册与鉴权的测试也覆盖共享传输包中的 Loader 组合场景。 diff --git a/packages/llm/llm-deepseek-api-key/package.json b/packages/llm/llm-deepseek-api-key/package.json new file mode 100644 index 0000000000..c0bce4980c --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/package.json @@ -0,0 +1,53 @@ +{ + "name": "@deepseek-ai/dsh-llm-deepseek-api-key", + "description": "DeepSeek api-key provider authentication and discovery", + "version": "0.1.7-alpha.2", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", + "directory": "packages/llm/llm-deepseek-api-key" + }, + "type": "module", + "main": "lib/index.js", + "types": "lib/types/index.d.ts", + "exports": { + ".": { + "types": "./lib/types/index.d.ts", + "default": "./lib/index.js" + }, + "./src/*": "./src/*", + "./package.json": "./package.json" + }, + "files": [ + "lib/index.js", + "lib/types/**/*.d.ts" + ], + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/cordis-plugin-loader": "workspace:~" + }, + "devDependencies": { + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/cordis-plugin-loader": "workspace:~" + }, + "peerDependenciesMeta": { + "@deepseek-ai/cordis-plugin-loader": { + "optional": true + } + }, + "dependencies": { + "@deepseek-ai/schemastery": "workspace:~" + } +} diff --git a/packages/llm/llm-deepseek-api-key/src/config.ts b/packages/llm/llm-deepseek-api-key/src/config.ts new file mode 100644 index 0000000000..4046483cd7 --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/src/config.ts @@ -0,0 +1,39 @@ +/** API-key configuration resolved together with one Messages endpoint generation. */ +import type { Volatile } from '@deepseek-ai/cordis' +import z from '@deepseek-ai/schemastery' +import { credentialRef, type CredentialRef } from '@deepseek-ai/dsh-credentials' +import type { LaunchEnvironmentSnapshot } from '@deepseek-ai/dsh-launch-environment' +import { deepSeekConfigFields, type Config as ProtocolConfig, plainOptions as protocolOptions, resolveAdapterOptions as resolveProtocolOptions } from '@deepseek-ai/dsh-llm-deepseek' +import type { Options as ProtocolOptions, DeepSeekConnectionOptions } from '@deepseek-ai/dsh-llm-deepseek' + +/** Messages configuration with a per-request API-key reference. */ +export interface Config extends ProtocolConfig { + /** Credential reference resolved per request; defaults to DEEPSEEK_API_KEY. */ + apiKeyEnv: Volatile +} +export const Config = z.object({ + ...deepSeekConfigFields, + apiKeyEnv: z.string().role('credential-ref').default('DEEPSEEK_API_KEY').volatile(), +}) +/** Plain deployment inputs for the API-key provider. */ +export type Options = ProtocolOptions & { apiKeyEnv?: string } +/** Endpoint and credential reference captured from the same configuration generation. */ +export interface ResolvedDeepSeekOptions extends DeepSeekConnectionOptions { + /** Credential reference used only for this connection snapshot. */ + apiKeyEnv: CredentialRef +} +/** Read one validated provider configuration. + * @param config - live plugin configuration. + * @returns detached resolver inputs. + */ +export function plainOptions(config: Config): Options { + return { ...protocolOptions(config), apiKeyEnv: config.apiKeyEnv.get() } +} +/** Resolve API-key and protocol settings together. + * @param config - raw deployment settings. + * @param environment - application launch environment. + * @returns validated endpoint facts and the matching credential reference. + */ +export function resolveAdapterOptions(config: Options, environment?: LaunchEnvironmentSnapshot): ResolvedDeepSeekOptions { + return { ...resolveProtocolOptions(config, environment), apiKeyEnv: credentialRef(config.apiKeyEnv ?? 'DEEPSEEK_API_KEY') } +} diff --git a/packages/llm/llm-deepseek-api-key/src/index.ts b/packages/llm/llm-deepseek-api-key/src/index.ts new file mode 100644 index 0000000000..ebcba71b54 --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/src/index.ts @@ -0,0 +1,51 @@ +/** API-key authentication and discovery for the official DeepSeek route. */ +import type { Context } from '@deepseek-ai/cordis' +import { assertUsableApiKey, LlmError } from '@deepseek-ai/dsh-llm' +import type {} from '@deepseek-ai/cordis-plugin-loader' +import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment' +import { registerDeepSeekProvider, catalogModelInfo } from '@deepseek-ai/dsh-llm-deepseek' +import { Config, plainOptions, resolveAdapterOptions } from './config.ts' +import type { ResolvedDeepSeekOptions } from './config.ts' + +export { Config, plainOptions, resolveAdapterOptions } from './config.ts' +export type { Options, ResolvedDeepSeekOptions } from './config.ts' +export const name = 'llm-deepseek-api-key' +export const inject = ['llm'] + +const PROVIDER = 'deepseek-official' + +export function apply(ctx: Context, config: Config): void { + const options = () => resolveAdapterOptions(plainOptions(config), launchEnvironmentOf(ctx)) + options() + const resolveApiKey = async (connection: ResolvedDeepSeekOptions): Promise => { + const ref = connection.apiKeyEnv + const credentials = ctx.get('credentials') + if (credentials !== undefined) { + const hit = await credentials.resolve(ref) + if (hit !== undefined) return assertUsableApiKey(hit.value, 'llm-deepseek', ref) + } else { + const ambient = launchEnvironmentOf(ctx).get(ref) + if (ambient !== undefined && ambient.value.length > 0) return assertUsableApiKey(ambient.value, 'llm-deepseek', ref) + } + throw new LlmError( + `llm-deepseek: no API key for provider route "${PROVIDER}"; store ${ref} through the credentials` + + ` service (the web Models page writes it), or export ${ref} in the launching environment`, + 'MISSING_CREDENTIAL', + ) + } + ctx.llm.registerConfigurableProviders([ + { provider: PROVIDER, displayName: 'DeepSeek', settingsNs: ctx.fiber.entry?.options.id ?? name, settingsPath: [] }, + ]) + registerDeepSeekProvider(ctx, PROVIDER, { + options, resolveApiKey, providerName: 'DeepSeek', + discoverModels: async (provider) => { + const connection = options() + try { await resolveApiKey(connection) } + catch (error) { + if (error instanceof LlmError && error.code === 'MISSING_CREDENTIAL') return [] + throw error + } + return connection.models.map(model => catalogModelInfo(provider, model)) + }, + }) +} diff --git a/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts b/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts new file mode 100644 index 0000000000..1a55ded9d5 --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts @@ -0,0 +1,18 @@ +/** Discovery preserves actionable credential failures. */ +import { Context } from '@deepseek-ai/cordis' +import LlmRuntime from '@deepseek-ai/dsh-llm' +import { expect, it, vi } from 'vitest' +import * as ApiKey from '../src/index.ts' + +it('reports malformed API keys instead of advertising an empty catalog', async () => { + vi.stubEnv('DEEPSEEK_API_KEY', 'invalid\nheader') + const ctx = new Context() + try { + await ctx.plugin(LlmRuntime) + await ctx.plugin(ApiKey, {}) + await expect(ctx.llm.listModels('deepseek-official')).rejects.toMatchObject({ code: 'INVALID_CREDENTIAL' }) + } finally { + await ctx.fiber.dispose() + vi.unstubAllEnvs() + } +}) diff --git a/packages/llm/llm-deepseek-api-key/tsconfig.json b/packages/llm/llm-deepseek-api-key/tsconfig.json new file mode 100644 index 0000000000..7556e5085a --- /dev/null +++ b/packages/llm/llm-deepseek-api-key/tsconfig.json @@ -0,0 +1,33 @@ +{ + "extends": "../../../tsconfig.base.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib/types" + }, + "include": [ + "src" + ], + "references": [ + { + "path": "../../../vendor/cordis" + }, + { + "path": "../llm" + }, + { + "path": "../llm-deepseek" + }, + { + "path": "../../util/launch-environment" + }, + { + "path": "../../credentials/credentials" + }, + { + "path": "../../../vendor/loader" + }, + { + "path": "../../../vendor/schemastery" + } + ] +} diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 7381689090..0d8cde2270 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 8d8e28faddf91026c249dbbfb0cfc183c815ae9d -README.zh.md: cee5d30a17a39d9e0613747db4b1a0035bef9c53 +README.md: 96fe78a4375cef56814923011c8b7589fe23cf7e +README.zh.md: b63660c30ba1f13a54fd5da2e8360b318bea05c7 diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 8d8e28fadd..96fe78a437 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -9,7 +9,7 @@ English | [中文](README.zh.md) ## Summary -Stream DeepSeek models through `deepseek-official` using the Messages API. Configure the endpoint, credentials, reasoning, and image handling from Cordis YAML or Web settings. Valid settings changes affect subsequent calls while in-flight calls retain their configuration. This package can run beside the [pi-ai adapter](../llm-pi-ai/README.md). +Provide the shared DeepSeek Messages transport, request configuration, and model capabilities. Compose [API-key](../llm-deepseek-api-key/README.md) or [account](../llm-deepseek-account/README.md) plugins for authentication, model discovery, and provider registration. Valid settings changes affect subsequent calls while in-flight calls retain their configuration. This package can run beside the [pi-ai adapter](../llm-pi-ai/README.md). ## Table of Contents @@ -25,7 +25,7 @@ Stream DeepSeek models through `deepseek-official` using the Messages API. Confi ## Use this package -Mount this plugin with the harness LLM service to serve `deepseek-official`. It captures connection options from Config references once per operation. +This package exports the transport library; the provider plugins register routes with the harness LLM service. It captures connection options from Config references once per operation. The adapter accepts the LLM service's [request-only user inputs](../llm/README.md#use-this-package) alongside durable history; omitting request-only identity and attribution does not alter provider content. @@ -36,7 +36,7 @@ Choose this adapter for DeepSeek's official API or a Messages-compatible gateway ### Minimal configuration ```yaml -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY # credential reference, resolved per request reasoningEffort: high # optional; off | low | high | max @@ -47,11 +47,10 @@ Choose this adapter for DeepSeek's official API or a Messages-compatible gateway filesApiTimeoutMs: 60000 ``` -A request selects the route with `provider: deepseek-official`; the model id passes through to the wire, so new DeepSeek models need no re-registration. Omitted `models` advertises the text- and image-capable `deepseek-flash` alongside the text-only `deepseek-v4-pro`, each with a 1,000,000-token context window. An explicit list replaces those defaults, and core calls still pass unlisted model ids through as text-only routes. GUI selection and submission require a catalog entry. Clients, including model discovery tools, can read the advisory entries through `ctx.llm.listModels('deepseek-official')`. Image-capable entries may set `imagePixelBudget` to a positive integer or `low`, and may set `imageMaxBytes`. An entry may declare `systemPromptUpdate: in-history` when its endpoint reads the latest `system` message at any position of `messages` as the complete effective system prompt; the adapter reports the mode on the resolved model and the prepared call, and the agent loop then appends a changed prompt after the cached history instead of rewriting the leading system message ([decision rule](../../core/agent-loop/README.md#understand-the-implementation)). The default `deepseek-flash` entry declares this mode; other models require an explicit `models` declaration, and any value other than `in-history` fails at load with `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present`. +A request selects the route with `provider: deepseek-official`; the model id passes through to the wire, so new DeepSeek models need no re-registration. Omitted `models` advertises the text- and image-capable `deepseek-flash` alongside the text-only `deepseek-v4-pro`, each with a 1,000,000-token context window. An explicit list replaces those defaults, and core calls still pass unlisted model ids through as text-only routes. GUI selection requires a catalog entry; a saved selection can still submit requests after its catalog entry disappears. Clients, including model discovery tools, can read the advisory entries through `ctx.llm.listModels('deepseek-official')`. Image-capable entries may set `imagePixelBudget` to a positive integer or `low`, and may set `imageMaxBytes`. An entry may declare `systemPromptUpdate: in-history` when its endpoint reads the latest `system` message at any position of `messages` as the complete effective system prompt; the adapter reports the mode on the resolved model and the prepared call, and the agent loop then appends a changed prompt after the cached history instead of rewriting the leading system message ([decision rule](../../core/agent-loop/README.md#understand-the-implementation)). The default `deepseek-flash` entry declares this mode; other models require an explicit `models` declaration, and any value other than `in-history` fails at load with `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present`. | Field | Default | Meaning | |---|---|---| -| `apiKeyEnv` | `DEEPSEEK_API_KEY` | Credential reference resolved per request through the credentials seam, then the environment | | `baseURL` | `https://api.deepseek.com/anthropic` | Explicit value, then `$DEEPSEEK_BASE_URL`, then the official root | | `thinking` | `enabled` | Deployment policy; `disabled` locks every request to `off` | | `reasoningEffort` | `high` | Default effort: `off`, `low`, `high`, or `max` | @@ -71,7 +70,7 @@ A request selects the route with `provider: deepseek-official`; the model id pas | `fileQuotaCleanupBatch` | `100` | Oldest harness-owned files removed before one quota retry | | `retryPolicy` | normal, 5 retries | Provider-owned retry policy executed by `dsh-llm-retry` | -The generated [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-llm-deepseek) is the exhaustive source for every accepted field and its JSDoc. +The generated [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-llm-deepseek-api-key) is the exhaustive source for every accepted field and its JSDoc. When [proactive compaction](../../compaction/compaction-basic/README.md#use-this-package) is enabled, `models[].contextWindow` (or `defaultContextWindow` when absent) must exceed the effective request `maxTokens` plus the compaction policy’s `headroomTokens`. Requests without an explicit output cap use the model’s `maxTokens` or the adapter default. For small-window deployments, configure headroom within that capacity; lower `thresholdRatio` to compact earlier. @@ -86,7 +85,7 @@ Messages sends text, thinking, tool calls, and tool results as content blocks, r `deepseek-official` resolves only its configured API-key reference. `deepseek-account` resolves only the stored grant from the [account provider](../../credentials/deepseek-account-platform/README.md), whose allowed `inferenceOrigin` defaults to `https://api.deepseek.com`. Neither route falls back to the other. Signing out removes the account grant and preserves API keys. -Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. HTTP 401 on a request authenticated with an account token becomes `ACCOUNT_TOKEN_INVALID`, regardless of the response body. It removes that request token only if it still matches the stored login, then publishes account expiry and UI sign-out. API-key routes and other HTTP statuses do not remove account credentials. +Messages and Files requests send account tokens as `x-dsh-auth-token` without a Bearer prefix; API keys use `x-api-key`. Neither credential mode follows redirects. The account provider owns HTTP 401 classification and credential invalidation; the transport passes failures to its callback. ### Streaming with thinking and images @@ -116,7 +115,7 @@ Successful Files responses must contain valid JSON. JSON decoding failures from Non-2xx responses fail with stable codes: `AUTH` (401/403), `QUOTA`, `RATE_LIMIT`, `CONTEXT_WINDOW_EXCEEDED`, `INVALID_REQUEST`, `SERVER`, and `HTTP_` otherwise; pre-response transport failures throw `TRANSPORT`, caller aborts throw `ABORTED`, and stream-idle expiry throws `TIMEOUT`. Request-extension preparation, field collision, or post-2xx acceptance fails with `REQUEST_EXTENSION`. A normalized-image rejection names every plausible attachment and its durable position when the provider does not identify a file id. Stale-file rejection invalidates the named mappings (or every mapping used by the attempt) and permits one replacement model request. Protocol violations throw `STREAM_CLOSED` or `MALFORMED_RESPONSE`, and a terminal `stop` with no content blocks becomes `EMPTY_RESPONSE`, which the default retry policy retries. A request on the official route without an API key fails with `MISSING_CREDENTIAL`, and a malformed credential fails with `INVALID_CREDENTIAL` naming the reference to fix — never any part of the key. -Each route advertises models only while its own credential resolves. Missing API keys and missing or ineligible account grants yield an empty catalog; other credential errors remain visible. This check does not probe the inference endpoint. Both configurable provider entries share the same model catalog. +Provider plugins own credential-gated discovery. Their catalogs are configured independently; the transport supplies shared default model metadata and capability resolution. ----- @@ -134,7 +133,7 @@ The plugin is built on one explicit resolve step and one registration fact. `res ### Source map -[`src/index.ts`](src/index.ts) registers the provider and resolves settings and credentials. [`src/adapter.ts`](src/adapter.ts) owns the request lifecycle; [`src/serialize.ts`](src/serialize.ts) and [`src/translate.ts`](src/translate.ts) map model input and streamed output. [`src/file-store.ts`](src/file-store.ts) owns upload reuse and recovery through [`src/files-api.ts`](src/files-api.ts). +[`src/index.ts`](src/index.ts) exports the protocol library; [`src/host.ts`](src/host.ts) binds shared Host services for provider plugins. [`src/adapter.ts`](src/adapter.ts) owns the request lifecycle; [`src/serialize.ts`](src/serialize.ts) and [`src/translate.ts`](src/translate.ts) map model input and streamed output. [`src/file-store.ts`](src/file-store.ts) owns upload reuse and recovery through [`src/files-api.ts`](src/files-api.ts). ### Wire flow @@ -215,4 +214,4 @@ None. **Runtime invariant:** No companion is published. This package exposes no independent event sequence or mutable data relation beyond contracts enforced at its owning seam. -`deepseek-official` uses only its configured API-key reference; `deepseek-account` uses only the stored DSH grant for the account provider’s allowed inference origin. Both routes share Messages transport, model, and file settings. Missing or ineligible account credentials reject the request with a sign-in prompt; neither route falls back to the other. Chat and Files requests reject redirects. Successful sign-out cancels live agents whose current prepared provider is `deepseek-account`, including tool execution, while preserving pending inbox messages and independent API-key tasks. +`deepseek-official` uses only its configured API-key reference; `deepseek-account` uses only the stored DSH grant for the account provider’s allowed inference origin. Both routes share the Messages transport with independently configured model and file settings. Missing or ineligible account credentials reject the request with a sign-in prompt; neither route falls back to the other. Chat and Files requests reject redirects. The account provider owns sign-out cancellation using running Agents’ logged request contexts, including tool execution; the transport receives the existing request abort signal. diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index cee5d30a17..b63660c30b 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -9,7 +9,7 @@ kind: "package-reference" ## 概述 -通过 `deepseek-official` 使用 Messages API 流式调用 DeepSeek 模型。在 Cordis YAML 或 Web 设置中配置端点、凭据、推理与图片处理。有效的设置更改在后续请求生效,进行中的请求保留原配置。本包可与 [pi-ai 适配器](../llm-pi-ai/README.zh.md)并用。 +提供共享的 DeepSeek Messages 传输、请求配置和模型能力。组合 [API key](../llm-deepseek-api-key/README.zh.md) 或[账号](../llm-deepseek-account/README.zh.md)插件以提供鉴权、模型发现与 provider 注册。有效的设置更改在后续请求生效,进行中的请求保留原配置。本包可与 [pi-ai 适配器](../llm-pi-ai/README.zh.md)并用。 ## 目录 @@ -25,7 +25,7 @@ kind: "package-reference" ## 使用本包 -将此插件与 harness LLM 服务一起挂载以提供 `deepseek-official`。它在每次操作开始时从 Config 引用捕获连接选项。 +本包导出传输库;provider 插件向 harness LLM 服务注册路由。它在每次操作开始时从 Config 引用捕获连接选项。 适配器接受 LLM 服务的[仅供请求使用的 user 输入](../llm/README.zh.md#use-this-package),并可将其与持久历史混用;省略请求输入的身份与来源不会改变提供方内容。 @@ -36,7 +36,7 @@ kind: "package-reference" ### 最小配置 ```yaml -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY # credential reference, resolved per request reasoningEffort: high # optional; off | low | high | max @@ -47,11 +47,10 @@ kind: "package-reference" filesApiTimeoutMs: 60000 ``` -请求用 `provider: deepseek-official` 选择路由;模型 id 原样传到协议,因此新增 DeepSeek 模型无需重新注册。省略 `models` 时公布支持文本和图像的 `deepseek-flash`,以及仅支持文本的 `deepseek-v4-pro`,各自的上下文窗口均为 1,000,000 token。显式列表会替换这些默认值,核心调用中未列出的模型 id 仍作为纯文本路由原样通过。GUI 选择与提交要求模型具有目录条目。包括模型发现工具在内的客户端可通过 `ctx.llm.listModels('deepseek-official')` 读取这些建议性条目。支持图片的条目可把 `imagePixelBudget` 设置为正整数或 `low`,也可以设置 `imageMaxBytes`。当端点把 `messages` 中任意位置最新的 `system` 消息读作完整的有效系统提示词时,条目可以声明 `systemPromptUpdate: in-history`;适配器会在已解析模型与已准备调用上报告该模式,agent loop(智能体循环)随后把变化后的提示词追加到已缓存历史之后,而不是改写开头的 system 消息([决策规则](../../core/agent-loop/README.zh.md#understand-the-implementation))。默认的 `deepseek-flash` 条目声明该模式;其他模型需通过 `models` 显式声明,`in-history` 以外的任何值都会在加载时以 `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present` 失败。 +请求用 `provider: deepseek-official` 选择路由;模型 id 原样传到协议,因此新增 DeepSeek 模型无需重新注册。省略 `models` 时公布支持文本和图像的 `deepseek-flash`,以及仅支持文本的 `deepseek-v4-pro`,各自的上下文窗口均为 1,000,000 token。显式列表会替换这些默认值,核心调用中未列出的模型 id 仍作为纯文本路由原样通过。GUI 选择要求模型具有目录条目;条目消失后,已保存的选择仍可提交请求。包括模型发现工具在内的客户端可通过 `ctx.llm.listModels('deepseek-official')` 读取这些建议性条目。支持图片的条目可把 `imagePixelBudget` 设置为正整数或 `low`,也可以设置 `imageMaxBytes`。当端点把 `messages` 中任意位置最新的 `system` 消息读作完整的有效系统提示词时,条目可以声明 `systemPromptUpdate: in-history`;适配器会在已解析模型与已准备调用上报告该模式,agent loop(智能体循环)随后把变化后的提示词追加到已缓存历史之后,而不是改写开头的 system 消息([决策规则](../../core/agent-loop/README.zh.md#understand-the-implementation))。默认的 `deepseek-flash` 条目声明该模式;其他模型需通过 `models` 显式声明,`in-history` 以外的任何值都会在加载时以 `llm-deepseek: catalog model "" systemPromptUpdate must be "in-history" when present` 失败。 | 字段 | 默认值 | 含义 | |---|---|---| -| `apiKeyEnv` | `DEEPSEEK_API_KEY` | 按请求解析的凭据引用:先经凭据 seam,再到环境变量 | | `baseURL` | `https://api.deepseek.com/anthropic` | 显式值优先,其次为 `$DEEPSEEK_BASE_URL`,最后为官方根地址 | | `thinking` | `enabled` | 部署策略;`disabled` 把所有请求锁定为 `off` | | `reasoningEffort` | `high` | 默认强度:`off`、`low`、`high` 或 `max` | @@ -71,7 +70,7 @@ kind: "package-reference" | `fileQuotaCleanupBatch` | `100` | 配额重试前删除的、归 harness 所有的最旧文件数 | | `retryPolicy` | normal,5 次重试 | 由 `dsh-llm-retry` 执行的提供方自有重试策略 | -生成的[配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-llm-deepseek)是每个受支持字段及其 JSDoc 的穷尽式真源。 +生成的[配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-llm-deepseek-api-key)是每个受支持字段及其 JSDoc 的穷尽式真源。 启用[主动压缩](../../compaction/compaction-basic/README.zh.md#use-this-package)时,`models[].contextWindow`(未声明时使用 `defaultContextWindow`)必须大于生效请求的 `maxTokens` 与压缩策略 `headroomTokens` 之和。请求未覆盖输出上限时,使用模型的 `maxTokens` 或适配器默认值。小窗口部署应在容量范围内配置余量;降低 `thresholdRatio` 可以提早压缩。 @@ -86,7 +85,7 @@ Messages 以内容块发送文本、思考、工具调用和工具结果,以 ` `deepseek-official` 仅解析配置的 API Key 引用。`deepseek-account` 仅解析[账号提供者](../../credentials/deepseek-account-platform/README.zh.md)保存的授权,其允许的 `inferenceOrigin` 默认为 `https://api.deepseek.com`。两条路由均不回退到另一凭证。退出登录删除账号授权,保留 API Key。 -Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。使用账号 token 鉴权的请求返回 HTTP 401 时归类为 `ACCOUNT_TOKEN_INVALID`,不依赖响应体内容。仅当该请求的 token 仍匹配已存登录凭据时才删除它,并发布账号过期状态和 UI 退登通知。API Key 路由和其他 HTTP 状态码不会删除账号凭据。 +Messages 和 Files 请求通过 `x-dsh-auth-token` 发送账号 token,不加 Bearer 前缀;API Key 使用 `x-api-key`。两种凭据模式均拒绝重定向。账号 provider 负责 HTTP 401 分类和凭据失效处理;传输层将错误交给其回调。 ### 带 thinking 与图片的流式调用 @@ -116,7 +115,7 @@ Files 模式通过 `maxRequestFilesBytes` 与 `maxImagesPerRequest` 限制保留 非 2xx 响应以稳定 code 失败:`AUTH`(401/403)、`QUOTA`、`RATE_LIMIT`、`CONTEXT_WINDOW_EXCEEDED`、`INVALID_REQUEST`、`SERVER` 以及其他情况的 `HTTP_`;响应前传输失败抛出 `TRANSPORT`,调用方中止抛出 `ABORTED`,流空闲超时抛出 `TIMEOUT`。请求扩展准备、字段冲突或 2xx 后接受失败使用 `REQUEST_EXTENSION`。当提供方未指出 file id 时,规范化图片拒绝会列出所有可能附件及其持久位置。陈旧文件拒绝会使点名映射(或该次尝试使用的全部映射)失效,并允许一次替换模型请求。协议违规抛出 `STREAM_CLOSED` 或 `MALFORMED_RESPONSE`;不带内容块的终止 `stop` 变成 `EMPTY_RESPONSE`,默认重试策略会重试它。官方路由缺少 API Key 的请求以 `MISSING_CREDENTIAL` 失败;格式错误的凭据以 `INVALID_CREDENTIAL` 失败,并点名需要修复的引用——绝不包含密钥的任何部分。 -每条路由仅在其自身凭据可解析时公布模型。缺少 API Key 或账号授权缺失、不适用时返回空目录;其他凭据错误仍会暴露。此检查不会探测推理端点。两个可配置提供方条目共用同一份模型目录。 +provider 插件拥有按凭据可用性过滤的模型发现。两者的目录独立配置;传输层提供共享的默认模型元数据和能力解析。 ----- @@ -134,7 +133,7 @@ Files 模式通过 `maxRequestFilesBytes` 与 `maxImagesPerRequest` 限制保留 ### 源码导航 -[`src/index.ts`](src/index.ts) 注册提供方并解析设置与凭据。[`src/adapter.ts`](src/adapter.ts) 管理请求生命周期;[`src/serialize.ts`](src/serialize.ts) 和 [`src/translate.ts`](src/translate.ts) 映射模型输入与流式输出。[`src/file-store.ts`](src/file-store.ts) 通过 [`src/files-api.ts`](src/files-api.ts) 管理上传复用与恢复。 +[`src/index.ts`](src/index.ts) 导出协议库;[`src/host.ts`](src/host.ts) 为 provider 插件绑定共享 Host 服务。[`src/adapter.ts`](src/adapter.ts) 管理请求生命周期;[`src/serialize.ts`](src/serialize.ts) 和 [`src/translate.ts`](src/translate.ts) 映射模型输入与流式输出。[`src/file-store.ts`](src/file-store.ts) 通过 [`src/files-api.ts`](src/files-api.ts) 管理上传复用与恢复。 ### 协议流程 @@ -215,4 +214,4 @@ loop 保留的响应块会追加到下一个请求,并保留其更早的可复 **运行时不变式:** 不发布伴生入口。本包没有独立事件序列或可变数据关系,相关约定在所属 seam 强制执行。 -`deepseek-official` 仅使用配置的 API Key 引用;`deepseek-account` 仅在账号提供方允许的推理来源使用已保存的 DSH 授权。两条路由共享 Messages 传输、模型和文件设置。账号凭证缺失或不适用于目标时拒绝请求并提示登录;两条路由均不回退到另一凭证。Chat 和 Files 请求拒绝重定向。退登成功会取消当前已准备提供方为 `deepseek-account` 的运行代理,包括工具执行阶段,同时保留待处理消息和独立的 API Key 任务。 +`deepseek-official` 仅使用配置的 API Key 引用;`deepseek-account` 仅在账号提供方允许的推理来源使用已保存的 DSH 授权。两条路由共享 Messages 传输,模型与文件设置独立配置。账号凭证缺失或不适用于目标时拒绝请求并提示登录;两条路由均不回退到另一凭证。Chat 和 Files 请求拒绝重定向。账号提供方根据运行中 Agent 已记录的请求上下文负责退登取消,包括工具执行阶段;传输层接收现有请求的中止信号。 diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index 2b66ce0197..249de218ec 100644 --- a/packages/llm/llm-deepseek/package.json +++ b/packages/llm/llm-deepseek/package.json @@ -31,16 +31,13 @@ "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", - "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:~", - "@deepseek-ai/dsh-deepseek-account": "workspace:*", - "@deepseek-ai/dsh-agent": "workspace:*" + "@deepseek-ai/cordis-plugin-loader": "workspace:~" }, "dependencies": { "@deepseek-ai/cosmokit": "workspace:~", @@ -50,6 +47,8 @@ "eventsource-parser": "^3.1.0" }, "devDependencies": { + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-account": "workspace:*", "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", @@ -80,12 +79,6 @@ "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-loader": { "optional": true - }, - "@deepseek-ai/dsh-deepseek-account": { - "optional": true - }, - "@deepseek-ai/dsh-agent": { - "optional": true } } } diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 2010a72dcf..2092e1227a 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -4,7 +4,7 @@ import { attributionHeaders, LlmAdapter, LlmError } from '@deepseek-ai/dsh-llm' import type { GenerateOptions, ImageAttachmentAccessResolver, PreparedAdapterCall, StreamChunk } from '@deepseek-ai/dsh-llm' import type { DeepSeekLlmApiJson } from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import { idleWatchdog, timeoutOf } from '@deepseek-ai/dsh-timeout' -import { catalogModelInfo, modelInfo } from './model-info.ts' +import { modelInfo } from './model-info.ts' import type { DeepSeekAdapterOptions, DeepSeekConnectionOptions as Connection } from './types.ts' import { DeepSeekFileStore } from './file-store.ts' import { MESSAGES_FILES_BETA, messagesApiRoot } from './messages-api.ts' @@ -17,28 +17,22 @@ import { translate } from './translate.ts' import { providerError, providerErrorDetail } from './transport.ts' /** DeepSeek provider using Messages content and native thinking replay. */ -export class DeepSeekAdapter extends LlmAdapter { +export class DeepSeekAdapter extends LlmAdapter { private readonly files: DeepSeekFileStore private readonly imageAccess: ImageAttachmentAccessResolver = (ref) => { const attachments = this.dependencies.resolveAttachments?.() return attachments === undefined ? undefined : this.dependencies.resolveImageAccess?.(attachments, ref) } - constructor(private readonly dependencies: DeepSeekAdapterOptions) { + constructor(private readonly dependencies: DeepSeekAdapterOptions) { super() this.files = dependencies.resolveFiles?.() ?? new DeepSeekFileStore() } - override providerInfo(provider: string) { return { id: provider, name: provider === 'deepseek-account' ? 'DeepSeek Account' : 'DeepSeek' } } + override providerInfo(provider: string) { return { id: provider, name: this.dependencies.providerName ?? 'DeepSeek' } } override providerRetryPolicy(_provider: string) { return this.dependencies.options().retryPolicy } override async listModels(provider: string) { - const connection = this.dependencies.options() - try { await this.dependencies.resolveApiKey(connection) } - catch (error) { - if (error instanceof LlmError && ['MISSING_CREDENTIAL', 'ACCOUNT_SIGN_IN_REQUIRED'].includes(error.code)) return [] - throw error - } - return connection.models.map(model => catalogModelInfo(provider, model)) + return this.dependencies.discoverModels?.(provider) ?? [] } override resolveModel(provider: string, model: string, _signal?: AbortSignal) { return Promise.resolve(modelInfo(this.dependencies.options(), provider, model)) @@ -54,7 +48,7 @@ export class DeepSeekAdapter extends LlmAdapter { return this.generate(options, this.dependencies.options()) } - private async * generate(options: GenerateOptions, connection: Connection): AsyncGenerator { + private async * generate(options: GenerateOptions, connection: C): AsyncGenerator { const consumer = new AbortController() const signal = options.signal === undefined ? consumer.signal : AbortSignal.any([consumer.signal, options.signal]) using watchdog = idleWatchdog(signal, connection.streamIdleTimeoutMs, 'MESSAGES_IDLE') @@ -79,7 +73,7 @@ export class DeepSeekAdapter extends LlmAdapter { } private async * request( - options: GenerateOptions, connection: Connection, signal: AbortSignal, activity: () => void, + options: GenerateOptions, connection: C, signal: AbortSignal, activity: () => void, ): AsyncGenerator { signal.throwIfAborted() const { messages, versions } = await prepareImages( @@ -139,8 +133,7 @@ export class DeepSeekAdapter extends LlmAdapter { if (await files.retry(detail)) continue const failure = providerError(raw, response.status, response.headers) const message = files.errorMessage(response.status, failure.message, detail) - const code = accountToken !== undefined && response.status === 401 ? 'ACCOUNT_TOKEN_INVALID' : failure.code - throw new LlmError(message, code, { ...failure.failure, cause: new Error(text) }) + throw new LlmError(message, failure.code, { ...failure.failure, cause: new Error(text) }) } await extensions.accept() if (response.body === null) throw new LlmError('DeepSeek Messages returned no response body', 'EMPTY_RESPONSE') @@ -148,10 +141,11 @@ export class DeepSeekAdapter extends LlmAdapter { return } } catch (error) { - if (accountToken !== undefined && error instanceof LlmError && error.code === 'ACCOUNT_TOKEN_INVALID') { - try { await this.dependencies.onInvalidAccountToken?.(accountToken) } catch (_credentialRemovalFailed) { - // Credential storage failure cannot replace the inference failure. - } + if (this.dependencies.onRequestError !== undefined) { + let mapped: unknown + try { mapped = await this.dependencies.onRequestError(error, key) } + catch (_credentialUpdateFailed) { throw error } + throw mapped } throw error } diff --git a/packages/llm/llm-deepseek/src/config.ts b/packages/llm/llm-deepseek/src/config.ts index f2ba3bd23a..fa9d385b87 100644 --- a/packages/llm/llm-deepseek/src/config.ts +++ b/packages/llm/llm-deepseek/src/config.ts @@ -5,7 +5,6 @@ import z from '@deepseek-ai/schemastery' import { isVolatile } from '@deepseek-ai/cosmokit' import { resolveRetryPolicy, RetryPolicySchema } from '@deepseek-ai/dsh-llm' import type { ModelModality, RetryPolicyConfig } from '@deepseek-ai/dsh-llm' -import { credentialRef } from '@deepseek-ai/dsh-credentials' import type { LaunchEnvironmentSnapshot } from '@deepseek-ai/dsh-launch-environment' import { MAX_TIMER_DELAY_MS } from '@deepseek-ai/dsh-timeout' import type { DeepSeekCatalogModel, DeepSeekConnectionOptions } from './types.ts' @@ -13,21 +12,10 @@ import { DEFAULT_MODELS } from './models.ts' import { DEFAULT_STREAM_IDLE_TIMEOUT_MS, DEFAULT_CONTEXT_WINDOW, DEFAULT_MAX_TOKENS, DEFAULT_MAX_INLINE_REQUEST_IMAGE_BYTES, DEFAULT_IMAGE_OFFLOAD_BYTE_QUANTUM, DEFAULT_INLINE_IMAGE_OFFLOAD_BYTE_QUANTUM, DEFAULT_IMAGE_OFFLOAD_COUNT_QUANTUM, DEFAULT_FILE_EXPIRY_SECONDS, DEFAULT_FILE_REFRESH_MARGIN_SECONDS, DEFAULT_FILE_QUOTA_CLEANUP_BATCH, DEFAULT_FILES_API_TIMEOUT_MS } from './defaults.ts' import { DEFAULT_MAX_IMAGES_PER_REQUEST, DEFAULT_MAX_REQUEST_FILES_BYTES, DEFAULT_REQUEST_IMAGE_MAX_BYTES } from './request-pricing.ts' -const DEFAULT_API_KEY_ENV = 'DEEPSEEK_API_KEY' - const MODEL_MODALITIES = ['text', 'image'] as const satisfies readonly ModelModality[] -/** - * Plugin config, validated by the same-named schemastery schema and doubling - * as the `llm-deepseek` settings-section shape. Every field is optional in - * yml: a missing API key resolves through {@link Config.apiKeyEnv} at each - * request (a request without any key fails with `MISSING_CREDENTIAL`, not at - * plugin load), omitted thinking mode uses the provider default, and omitted - * reasoning effort resolves to `high`. - */ +/** Shared Messages request configuration, without provider credential selection. */ export interface Config { - /** Credential reference (environment-variable name) resolved per request; defaults to `DEEPSEEK_API_KEY`. */ - apiKeyEnv: Volatile /** Endpoint base; falls back to $DEEPSEEK_BASE_URL from a trusted environment layer, then the public API. */ baseURL: Volatile /** Deployment thinking policy; `disabled` limits every conversation request to `off`. */ @@ -89,8 +77,8 @@ const catalogModel: z = z.object({ systemPromptUpdate: z.const('in-history'), }) -export const Config = z.object({ - apiKeyEnv: z.string().role('credential-ref').default(DEFAULT_API_KEY_ENV).volatile(), +/** Shared schema fields for Messages protocol options. */ +export const deepSeekConfigFields = { baseURL: z.string().volatile(), thinking: z.union(['enabled', 'disabled']).volatile(), reasoningEffort: z.union(['off', 'low', 'high', 'max']).volatile(), @@ -109,7 +97,9 @@ export const Config = z.object({ fileRefreshMarginSeconds: z.number().step(1).min(0).default(DEFAULT_FILE_REFRESH_MARGIN_SECONDS).volatile(), fileQuotaCleanupBatch: z.number().step(1).min(1).max(1_000).default(DEFAULT_FILE_QUOTA_CLEANUP_BATCH).volatile(), retryPolicy: RetryPolicySchema.volatile(), -}) +} + +export const Config = z.object(deepSeekConfigFields) /** Public API default; the internal endpoint comes from $DEEPSEEK_BASE_URL. */ export const PUBLIC_BASE_URL = 'https://api.deepseek.com/anthropic' @@ -117,12 +107,7 @@ export const PUBLIC_BASE_URL = 'https://api.deepseek.com/anthropic' /** Environment variable naming this provider's endpoint, honored only from trusted layers. */ const BASE_URL_ENV = 'DEEPSEEK_BASE_URL' -/** - * One resolution's complete request facts. Connection and credential facts - * are one value on purpose: a snapshot the resolver rejects keeps the whole - * previous generation, so a request can never pair a stale endpoint with a - * newer key. - */ +/** Complete protocol settings captured for one request operation. */ export type ResolvedDeepSeekOptions = DeepSeekConnectionOptions /** Resolve, validate, and detach the advisory model catalog. */ @@ -199,8 +184,8 @@ function resolveModels(models: readonly DeepSeekCatalogModel[] | undefined): Dee } /** - * The one explicit resolve step from raw config to validated connection - * facts. Programmatic construction may bypass Schemastery normalization, so + * The one explicit resolve step from raw config to validated protocol + * settings. Programmatic construction may bypass Schemastery normalization, so * every default and bound is re-judged here — for the composition entry at * load (fail loud) and for each settings snapshot at its first use. * @param config - raw plugin config or resolved settings snapshot. @@ -208,7 +193,7 @@ function resolveModels(models: readonly DeepSeekCatalogModel[] | undefined): Dee * the product CLI. Every layer may supply an endpoint: the product trusts the * project it is launched in, so a checkout can point its own agent at the * gateway that checkout is meant to use. - * @returns validated connection facts plus the credential reference. + * @returns validated protocol settings. */ export function resolveAdapterOptions(config: Options, environment?: LaunchEnvironmentSnapshot): ResolvedDeepSeekOptions { // Settings updates can reach this resolver without schema validation. @@ -302,7 +287,6 @@ export function resolveAdapterOptions(config: Options, environment?: LaunchEnvir throw new Error('llm-deepseek: Messages baseURL must be an HTTP(S) root without credentials, query, or fragment') } return { - apiKeyEnv: credentialRef(config.apiKeyEnv ?? DEFAULT_API_KEY_ENV), baseURL, defaults: { thinking: config.thinking, diff --git a/packages/llm/llm-deepseek/src/host.ts b/packages/llm/llm-deepseek/src/host.ts new file mode 100644 index 0000000000..2149472ba8 --- /dev/null +++ b/packages/llm/llm-deepseek/src/host.ts @@ -0,0 +1,46 @@ +/** Shared Host wiring for the DeepSeek protocol adapter. */ +import type { Context } from '@deepseek-ai/cordis' +import type {} from '@deepseek-ai/dsh-settings' +import type {} from '@deepseek-ai/cordis-plugin-loader' +import type {} from '@deepseek-ai/dsh-fs' +import { resolveImageAttachmentAccess } from '@deepseek-ai/dsh-llm' +import { getOrCreateAnonymousUserId, type AnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' +import { deepEqualJson } from '@deepseek-ai/dsh-util-values' +import { DeepSeekAdapter } from './adapter.ts' +import type { DeepSeekAdapterOptions, DeepSeekConnectionOptions } from './types.ts' + +/** + * Register one provider with request-local transport services and live retry policy. + * @param ctx - provider plugin lifetime with the LLM registry injected. + * @param provider - exact route owned by this plugin. + * @param dependencies - provider-owned discovery, credential, and configuration callbacks. + */ +export function registerDeepSeekProvider( + ctx: Context, provider: string, dependencies: Pick, + 'options' | 'resolveApiKey' | 'accountCredential' | 'onRequestError' | 'providerName' | 'discoverModels'>): void { + ctx.inject(['settings'], (child) => { child.effect(() => child.settings.configure({ auto: false }, ctx.fiber)) }) + let userId: AnonymousUserId | undefined + const adapter = new DeepSeekAdapter({ + ...dependencies, + resolveUserId: () => userId ??= getOrCreateAnonymousUserId(), + onReplayDegrade: ({ provider, model, reason }) => { + ctx.logger.warn(`llm-deepseek: unusable Messages replay state on assistant history for route "${provider}/${model}"; sending provider-neutral content (${reason})`) + }, + resolveAttachments: () => ctx.get('attachments'), + resolveImageAccess: (attachments, ref) => resolveImageAttachmentAccess( + attachments, hostPath => ctx.get('fs')?.processPathFromHostPath(hostPath), ref, + ), + prepareExtensions: request => ctx.get('deepseekLlmApiExtensions')?.prepare(request) + ?? Promise.resolve({ fields: {}, accept: () => Promise.resolve() }), + }) + const registration = ctx.llm.registerAdapter([provider], adapter) + let registeredPolicy = dependencies.options().retryPolicy + ctx.on('loader/volatile-update', () => { + let policy: typeof registeredPolicy + try { policy = dependencies.options().retryPolicy } + catch (error) { ctx.logger.warn(error); return } + if (deepEqualJson(policy, registeredPolicy)) return + registration.replace([provider]) + registeredPolicy = policy + }) +} diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index 34a2581ece..89a1cce2ca 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -1,19 +1,5 @@ -/** Register DeepSeek Messages with live configuration and request-local credentials. */ -import type {} from '@deepseek-ai/dsh-settings' -import type {} from '@deepseek-ai/dsh-deepseek-account' -import type {} from '@deepseek-ai/dsh-agent' -import type {} from '@deepseek-ai/cordis-plugin-loader' -import type { Context } from '@deepseek-ai/cordis' -import { assertUsableApiKey, LlmError, resolveImageAttachmentAccess } from '@deepseek-ai/dsh-llm' -import type {} from '@deepseek-ai/dsh-fs' -import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment' -import { deepEqualJson } from '@deepseek-ai/dsh-util-values' -import { getOrCreateAnonymousUserId, type AnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' -import { DeepSeekAdapter } from './adapter.ts' -import { Config, plainOptions, resolveAdapterOptions } from './config.ts' -import type { ResolvedDeepSeekOptions } from './config.ts' - -export { Config, plainOptions, resolveAdapterOptions, PUBLIC_BASE_URL } from './config.ts' +/** DeepSeek Messages transport, request configuration, and model capabilities. */ +export { deepSeekConfigFields, Config, plainOptions, resolveAdapterOptions, PUBLIC_BASE_URL } from './config.ts' export type { Options, ResolvedDeepSeekOptions } from './config.ts' export { DEFAULT_CONTEXT_WINDOW, @@ -51,104 +37,5 @@ export { DeepSeekUploadIndex, deepSeekFileScope } from './upload-index.ts' export type { DeepSeekUploadRecord } from './upload-index.ts' export type { RequestDefaults } from './types.ts' -export const name = 'llm-deepseek' -export const inject = ['llm'] - -const NS = 'llm-deepseek' -const PROVIDER = 'deepseek-official' - -export function apply(ctx: Context, config: Config): void { - ctx.inject(['settings'], (child) => { child.effect(() => child.settings.configure({ auto: false }, ctx.fiber)) }) - const options = (): ResolvedDeepSeekOptions => resolveAdapterOptions(plainOptions(config), launchEnvironmentOf(ctx)) - options() - - const resolveApiKey = async (connection: ResolvedDeepSeekOptions): Promise => { - // Every credential fact comes from the caller's snapshot, so a rejected - // settings generation cannot leak its key onto the previous endpoint. - const ref = connection.apiKeyEnv - const credentials = ctx.get('credentials') - if (credentials !== undefined) { - const hit = await credentials.resolve(ref) - if (hit !== undefined) return assertUsableApiKey(hit.value, 'llm-deepseek', ref) - } else { - // Without the seam there is no managed store to rank against, so the - // environment is the whole credential plane. - const ambient = launchEnvironmentOf(ctx).get(ref) - if (ambient !== undefined && ambient.value.length > 0) { - return assertUsableApiKey(ambient.value, 'llm-deepseek', ref) - } - } - throw new LlmError( - `llm-deepseek: no API key for provider route "${PROVIDER}"; store ${ref} through the credentials` - + ` service (the web Models page writes it), or export ${ref} in the launching environment`, - 'MISSING_CREDENTIAL', - ) - } - - let userId: AnonymousUserId | undefined - const resolveUserId = (): AnonymousUserId => userId ??= getOrCreateAnonymousUserId() - const adapter = (accountCredential: boolean): DeepSeekAdapter => new DeepSeekAdapter({ - accountCredential, - ...accountCredential ? { onInvalidAccountToken: async (token: string) => { await ctx.get('deepseekAccount')?.rejectToken(token) } } : {}, - options, - onReplayDegrade: ({ provider, model, reason }) => { - ctx.logger.warn(`llm-deepseek: unusable Messages replay state on assistant history for route "${provider}/${model}"; sending provider-neutral content (${reason})`) - }, - resolveApiKey: accountCredential ? async (connection) => { - const token = await ctx.get('deepseekAccount')?.resolveToken(connection.baseURL) - if (token === undefined) throw new LlmError('Sign in to DeepSeek to use the account provider. The request destination must allow account authentication.', 'ACCOUNT_SIGN_IN_REQUIRED') - return token - } : resolveApiKey, - resolveUserId, - resolveAttachments: () => ctx.get('attachments'), - resolveImageAccess: (attachments, ref) => resolveImageAttachmentAccess( - attachments, - hostPath => ctx.get('fs')?.processPathFromHostPath(hostPath), - ref, - ), - prepareExtensions: (request) => { - const extensions = ctx.get('deepseekLlmApiExtensions') - return extensions?.prepare(request) - ?? Promise.resolve({ fields: {}, accept: () => Promise.resolve() }) - }, - }) - ctx.llm.registerConfigurableProviders([ - { provider: PROVIDER, displayName: 'DeepSeek', settingsNs: ctx.fiber.entry?.options.id ?? NS, settingsPath: [] }, - { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: ctx.fiber.entry?.options.id ?? NS, settingsPath: [] }, - ]) - // Route effects bind to this apply fiber via the stable `ctx` reference, - // even when a swap runs inside the scoped settings callback below. - const registration = ctx.llm.registerAdapter([PROVIDER], adapter(false)) - const accountRegistration = ctx.llm.registerAdapter(['deepseek-account'], adapter(true)) - ctx.inject(['agents'], (agentCtx) => { - agentCtx.on('deepseek-account/signed-out', () => { - for (const agent of agentCtx.agents.list()) { - if (agent.activeProvider === 'deepseek-account') { - agent.cancel({ kind: 'hook', reason: 'deepseek-account/signed-out' }, { keepInbox: true }) - } - } - }) - }) - let registeredPolicy = options().retryPolicy - const ensureRegistrationFacts = (): void => { - let policy: ResolvedDeepSeekOptions['retryPolicy'] - try { - policy = options().retryPolicy - } catch (error) { - // A stored config the resolver refuses keeps the current registration; each request fails on its own resolve. - ctx.logger.warn(error) - return - } - if (deepEqualJson(policy, registeredPolicy)) return - // The registry captures the retry policy at registration, so it is the one - // fact per-request resolution cannot refresh. `replace` re-reads it in one - // synchronous registry section: disposing and re-registering instead would - // publish an empty route set between the two, and an observer that reacted - // to it would see this provider disappear and come back. - registration.replace([PROVIDER]) - accountRegistration.replace(['deepseek-account']) - registeredPolicy = policy - } - - ctx.on('loader/volatile-update', ensureRegistrationFacts) -} +export { catalogModelInfo } from './model-info.ts' +export { registerDeepSeekProvider } from './host.ts' diff --git a/packages/llm/llm-deepseek/src/types.ts b/packages/llm/llm-deepseek/src/types.ts index 8beb5030d5..4257db1c45 100644 --- a/packages/llm/llm-deepseek/src/types.ts +++ b/packages/llm/llm-deepseek/src/types.ts @@ -1,7 +1,6 @@ /** Model catalog and request-local dependencies for DeepSeek Messages. */ -import type { ModelModality, SystemPromptUpdate, ResolvedRetryPolicy, ImageAttachmentAccess } from '@deepseek-ai/dsh-llm' +import type { LlmModelInfo, ModelModality, SystemPromptUpdate, ResolvedRetryPolicy, ImageAttachmentAccess } from '@deepseek-ai/dsh-llm' import type { AttachmentStore, ImageAttachmentRef } from '@deepseek-ai/dsh-attachment' -import type { CredentialRef } from '@deepseek-ai/dsh-credentials' import type { AnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' import type { DeepSeekLlmApiExtensionRequest, PreparedDeepSeekLlmApiExtensions } from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import type { DeepSeekFileStore, DeepSeekFilePolicy } from './file-store.ts' @@ -45,13 +44,6 @@ export interface DeepSeekCatalogModel { export interface DeepSeekConnectionOptions { /** Messages API root; custom paths remain unchanged. */ baseURL: string - /** - * Credential reference of this same resolution, resolved per request. - * Travelling with the endpoint is the point: a request can never pair one - * generation's URL with another generation's secret. Configuration carries - * only this name — a literal key is not a configuration value. - */ - apiKeyEnv: CredentialRef /** Request defaults applied to every call (thinking mode, effort). */ defaults: RequestDefaults /** Default per-request output cap; explicit request values win. */ @@ -83,20 +75,24 @@ export interface DeepSeekConnectionOptions { } /** Constructor options for {@link DeepSeekAdapter}: the operation-local resolution hooks the plugin owns. */ -export interface DeepSeekAdapterOptions { +export interface DeepSeekAdapterOptions { /** Report unusable native Messages replay metadata without exposing content or signatures. */ onReplayDegrade?: (detail: { provider: string; model: string; reason: string }) => void - /** Remove a server-rejected account token if it still matches the current login; failures preserve the inference error. */ - onInvalidAccountToken?: (token: string) => Promise + /** Provider label for selectors; omission uses the protocol family name. */ + providerName?: string + /** Provider-owned catalog availability; omission exposes no discovery entries. */ + discoverModels?: (provider: string) => Promise + /** Classify a request failure and update credential state; callback failure preserves the original error. */ + onRequestError?: (error: unknown, credential: string) => Promise /** Current validated connection facts; called once per operation. */ - options: () => DeepSeekConnectionOptions + options: () => Connection /** * Resolve this adapter’s credential for the connection facts of one request. The * snapshot is passed in — never re-read — so the key can only ever come * from the same resolution as the endpoint it is sent to. Throws `LlmError` * `MISSING_CREDENTIAL` for a missing API key; account routes reject unavailable grants. */ - resolveApiKey: (connection: DeepSeekConnectionOptions) => Promise + resolveApiKey: (connection: Connection) => Promise /** Send the resolved credential as a bare DSH account token; never fall back to an API key. */ accountCredential?: boolean /** Resolve the harness-home anonymous id shared with telemetry and feedback. */ diff --git a/packages/llm/llm-deepseek/tests/account-routing.spec.ts b/packages/llm/llm-deepseek/tests/account-routing.spec.ts index d5dfc1e7fa..9c53e02a08 100644 --- a/packages/llm/llm-deepseek/tests/account-routing.spec.ts +++ b/packages/llm/llm-deepseek/tests/account-routing.spec.ts @@ -1,6 +1,6 @@ /** Account route cancellation uses the real loop, registry, and tool lifecycle. */ import { afterEach, expect, it, vi } from 'vitest' -import type { DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' +import { installAccountTaskCancellation, type DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' import { Context } from '@deepseek-ai/cordis' import LlmRuntime, { createUserMessage, LlmAdapter, type GenerateOptions, type StreamChunk, ToolCallId } from '@deepseek-ai/dsh-llm' import AgentRegistry, { type Agent } from '@deepseek-ai/dsh-agent' @@ -9,7 +9,8 @@ import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import SessionProjectionRegistry from '@deepseek-ai/dsh-session-projection' import SystemPrompt from '@deepseek-ai/dsh-system-prompt' import ToolRuntime, { defineContentToolFixture } from '@deepseek-ai/dsh-tools' -import * as DeepSeek from '../src/index.ts' +import * as DeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' +import * as AccountProvider from '@deepseek-ai/dsh-llm-deepseek-account' import { assemble } from './assemble.ts' const contexts: Context[] = [] @@ -22,11 +23,13 @@ afterEach(async () => { async function harness() { const ctx = new Context() contexts.push(ctx) + installAccountTaskCancellation(ctx) for (const plugin of [LlmRuntime, SessionStore, SessionProjectionRegistry, SystemPrompt, ToolRuntime, AgentRegistry]) { await ctx.plugin(plugin) } await ctx.plugin(AgentLoop, { agents: [] }) await ctx.plugin(DeepSeek, {}) + await ctx.plugin(AccountProvider, {}) return ctx } @@ -45,6 +48,7 @@ it('never falls back to an API key while signed out', async () => { contexts.push(ctx) await ctx.plugin(LlmRuntime) await ctx.plugin(DeepSeek, {}) + await ctx.plugin(AccountProvider, {}) const fetch = vi.spyOn(globalThis, 'fetch') const result = await assemble(ctx, { provider: 'deepseek-account', model: 'deepseek-v4-flash', messages: [] }) expect(result.finish).toMatchObject({ kind: 'error', failure: { code: 'ACCOUNT_SIGN_IN_REQUIRED' } }) @@ -69,16 +73,16 @@ it.each(['deepseek-account', 'deepseek-official'])('cancels only the active acco } })) send(agent) await toolEntered.promise - expect(agent.activeProvider).toBe(provider) + expect(agent.session.requestContext()?.provider).toBe(provider) agent.inbox.splice('next-turn', Infinity, 0, [createUserMessage({ content: [{ type: 'text', text: 'queued' }], source: { kind: 'user' } })]) ctx.emit('deepseek-account/signed-out') // Changing settings cannot reclassify the already running tool call. - expect(agent.activeProvider).toBe(provider) + expect(agent.session.requestContext()?.provider).toBe(provider) expect(agent.inbox.nextTurn).toHaveLength(1) if (provider === 'deepseek-official') agent.cancel({ kind: 'user' }, { keepInbox: true }) release.resolve(undefined) await agent.whenIdle() - expect(agent.activeProvider).toBeUndefined() + expect(agent.status).toBe('idle') expect(agent.inbox.nextTurn).toHaveLength(1) expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ reason: { kind: 'aborted', reason: provider === 'deepseek-account' ? { kind: 'hook', reason: 'deepseek-account/signed-out' } : { kind: 'user' } } }) @@ -116,18 +120,18 @@ it.each(['tool', 'retry'])('replaces the active provider only after the next req }) ctx.tools.register(defineContentToolFixture({ name: 'continue', description: '', parameters: {}, execute: async () => [{ type: 'text', text: 'done' }] })) const agent = await ctx.agentLoop.create(SessionId('switch-provider'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) - expect(agent.activeProvider).toBeUndefined() + expect(agent.session.requestContext()?.provider).toBeUndefined() send(agent) await preparing.promise - expect(agent.activeProvider).toBe('deepseek-account') + expect(agent.session.requestContext()?.provider).toBe('deepseek-account') proceed.resolve(undefined) const signal = await streaming.promise - expect(agent.activeProvider).toBe('deepseek-official') + expect(agent.session.requestContext()?.provider).toBe('deepseek-official') ctx.emit('deepseek-account/signed-out') expect(signal.aborted).toBe(false) agent.cancel({ kind: 'user' }) await agent.whenIdle() - expect(agent.activeProvider).toBeUndefined() + expect(agent.status).toBe('idle') }) it('does not infer a provider while the first request is still being prepared', async () => { @@ -143,7 +147,7 @@ it('does not infer a provider while the first request is still being prepared', const agent = await ctx.agentLoop.create(SessionId('first-preparation'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) send(agent) await preparing.promise - expect(agent.activeProvider).toBeUndefined() + expect(agent.session.requestContext()?.provider).toBeUndefined() ctx.emit('deepseek-account/signed-out') proceed.resolve(undefined) await agent.whenIdle() @@ -159,6 +163,7 @@ it('never borrows an account token for a missing API key', async () => { ctx.provide('deepseekAccount', { resolveToken: (url: string): Promise => resolveToken(url) } as DeepSeekAccount) await ctx.plugin(LlmRuntime) await ctx.plugin(DeepSeek, {}) + await ctx.plugin(AccountProvider, {}) const fetch = vi.spyOn(globalThis, 'fetch') const result = await assemble(ctx, { provider: 'deepseek-official', model: 'deepseek-v4-flash', messages: [] }) expect(result.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) @@ -237,3 +242,48 @@ it('surfaces credential storage failures during catalog discovery', async () => ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => { throw new Error('storage unavailable') } } as DeepSeekAccount) await expect(ctx.llm.listModels('deepseek-account')).rejects.toThrow('storage unavailable') }) + +it('ignores idle account history but uses the last bound route during a new turn preparation', async () => { + const ctx = await harness() + ctx.on('llm/stream', async function* () { + yield { type: 'finish', reason: { kind: 'stop' } } + }) + const agent = await ctx.agentLoop.create(SessionId('previous-account-turn'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + send(agent) + await agent.whenIdle() + const cancel = vi.spyOn(agent, 'cancel') + ctx.emit('deepseek-account/signed-out') + expect(cancel).not.toHaveBeenCalled() + const preparing = Promise.withResolvers() + const proceed = Promise.withResolvers() + ctx.on('agent/request', async (_event, next) => { + const config = await next() + preparing.resolve(undefined) + await proceed.promise + return { ...config, provider: 'deepseek-official' } + }) + try { + send(agent) + await preparing.promise + ctx.emit('deepseek-account/signed-out') + expect(cancel).toHaveBeenCalledExactlyOnceWith( + { kind: 'hook', reason: 'deepseek-account/signed-out' }, { keepInbox: true }, + ) + } finally { + proceed.resolve(undefined) + await agent.whenIdle() + } +}) + +it('records a signed-out request failure and publishes sign-in guidance', async () => { + const ctx = await harness() + const guidance = vi.fn() + ctx.on('deepseek-account/model-sign-in-required', guidance) + const agent = await ctx.agentLoop.create(SessionId('signed-out-send'), { provider: 'deepseek-account', model: 'deepseek-v4-flash' }) + send(agent) + await agent.whenIdle() + expect(agent.session.snapshotEvents().at(-1)?.data).toMatchObject({ + reason: { kind: 'error', error: { code: 'ACCOUNT_SIGN_IN_REQUIRED' } }, + }) + expect(guidance).toHaveBeenCalledOnce() +}) diff --git a/packages/llm/llm-deepseek/tests/adapter.e2e.ts b/packages/llm/llm-deepseek/tests/adapter.e2e.ts index 205279dc13..0a5dd3f8f9 100644 --- a/packages/llm/llm-deepseek/tests/adapter.e2e.ts +++ b/packages/llm/llm-deepseek/tests/adapter.e2e.ts @@ -1,3 +1,4 @@ +import * as Protocol from '@deepseek-ai/dsh-llm-deepseek' /** * Real Messages round trips use the official root and require credentials. * System-update checks additionally require DEEPSEEK_IN_HISTORY_MODEL. @@ -18,7 +19,7 @@ import type { Message } from '@deepseek-ai/dsh-llm' import * as PluginPackageInventoryDeepSeek from '@deepseek-ai/dsh-plugin-package-inventory-deepseek' import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import * as SessionLogDeepSeek from '@deepseek-ai/dsh-session-log-deepseek' -import * as Messages from '../src/index.ts' +import * as Messages from '@deepseek-ai/dsh-llm-deepseek-api-key' import { DeepSeekFilesClient } from '../src/files-api.ts' import { MESSAGES_FILES_BETA } from '../src/messages-api.ts' import { assemble, options, user, sourceModuleLoader } from './helpers.ts' @@ -38,7 +39,7 @@ async function boot(models?: Messages.Options['models']) { cleanups.push(() => ctx.fiber.dispose()) await ctx.plugin(LlmRuntime) await ctx.plugin(Messages, { - baseURL: Messages.PUBLIC_BASE_URL, + baseURL: Protocol.PUBLIC_BASE_URL, maxTokens: 4096, ...models === undefined ? {} : { models }, }) @@ -75,21 +76,21 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('DeepSeek Messages real API', () const uploads: string[] = [] const bodies: string[] = [] const files = new DeepSeekFilesClient({ - baseURL: Messages.PUBLIC_BASE_URL, apiKey: process.env.DEEPSEEK_API_KEY as string, fetch: fetchImpl, + baseURL: Protocol.PUBLIC_BASE_URL, apiKey: process.env.DEEPSEEK_API_KEY as string, fetch: fetchImpl, }) - const ownedFiles = new Set>() + const ownedFiles = new Set>() cleanups.push(async () => { for (const id of ownedFiles) await files.delete(id) }) vi.stubGlobal('fetch', async (input: string | URL | Request, init?: RequestInit) => { const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url const response = await fetchImpl(input, init) - if (url === `${Messages.PUBLIC_BASE_URL}/v1/files` && init?.method === 'POST' && response.ok) { + if (url === `${Protocol.PUBLIC_BASE_URL}/v1/files` && init?.method === 'POST' && response.ok) { const file = await response.clone().json() as { id: string } uploads.push(file.id) - ownedFiles.add(Messages.DeepSeekFileId(file.id)) + ownedFiles.add(Protocol.DeepSeekFileId(file.id)) } - if (url === `${Messages.PUBLIC_BASE_URL}/v1/messages`) { + if (url === `${Protocol.PUBLIC_BASE_URL}/v1/messages`) { expect(new Headers(init?.headers).get('anthropic-beta')).toBe(MESSAGES_FILES_BETA) if (typeof init?.body !== 'string') throw new Error('expected a JSON Messages request') bodies.push(init.body) @@ -110,7 +111,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('DeepSeek Messages real API', () expect(uploads).toHaveLength(1) expect(bodies).toHaveLength(2) expect(bodies.every(body => body.includes(`"file_id":"${uploads[0]}"`) && !body.includes('"type":"base64"'))).toBe(true) - const fileId = Messages.DeepSeekFileId(uploads[0]!) + const fileId = Protocol.DeepSeekFileId(uploads[0]!) const retrieved = await files.retrieve(fileId) expect(retrieved).toMatchObject({ id: fileId, bytes: attachment.bytes }) expect(retrieved.expiresAt).toBeUndefined() @@ -162,7 +163,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('DeepSeek Messages real API', () let requests = 0 vi.stubGlobal('fetch', async (input: string | URL | Request, init?: RequestInit) => { const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url - if (url !== `${Messages.PUBLIC_BASE_URL}/v1/messages`) return fetchImpl(input, init) + if (url !== `${Protocol.PUBLIC_BASE_URL}/v1/messages`) return fetchImpl(input, init) if (typeof init?.body !== 'string') throw new Error('expected a JSON Messages request') const body = JSON.parse(init.body) as Record expect(body).toMatchObject({ dsh_plugin_packages: { diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 76ef776b8e..96b323587e 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -1,5 +1,5 @@ /** HTTP lifecycle, routing and optional Cordis services under real composition. */ -import type { DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' +import { installAccountTaskCancellation, type DeepSeekAccount } from '@deepseek-ai/dsh-deepseek-account' import type { AnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' @@ -26,7 +26,8 @@ import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import { DeepSeekAdapter } from '../src/adapter.ts' import { object } from '../src/replay.ts' import { DeepSeekFileStore } from '../src/file-store.ts' -import * as Messages from '../src/index.ts' +import * as Messages from '@deepseek-ai/dsh-llm-deepseek-api-key' +import * as AccountProvider from '@deepseek-ai/dsh-llm-deepseek-account' import { adapter, assemble, chunks, MODEL, options, prepareExtensions, server, sse, textEvents, user, sourceModuleLoader } from './helpers.ts' const cleanup: (() => Promise)[] = [] @@ -122,9 +123,7 @@ describe('direct Messages HTTP', () => { 'x-deepseek-harness-session-id': 'session-test', 'x-deepseek-harness-compact': '1', }, body: { thinking: { type: 'enabled' }, output_config: { effort: 'high' } } }) expect(llm.providerInfo('deepseek-official')).toEqual({ id: 'deepseek-official', name: 'DeepSeek' }) - expect((await llm.listModels('deepseek-official')).map(model => model.id)).toEqual([ - 'deepseek-flash', 'deepseek-v4-pro', - ]) + expect(await llm.listModels('deepseek-official')).toEqual([]) expect(await llm.resolveModel('deepseek-official', 'deepseek-flash')).toMatchObject({ name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'], systemPromptUpdate: 'in-history', }) @@ -240,6 +239,18 @@ describe('direct Messages HTTP', () => { await expect(chunks(adapter().stream(options()))).rejects.toMatchObject({ code: 'TRANSPORT' }) }) + it('preserves the transport failure when a provider error callback rejects', async () => { + vi.stubGlobal('fetch', async () => new Response('Unauthorized', { status: 401 })) + const llm = new DeepSeekAdapter({ + options: () => Messages.resolveAdapterOptions({}), + resolveApiKey: () => Promise.resolve('fixture-key'), + resolveUserId: () => 'fixture-user' as import('@deepseek-ai/dsh-anonymous-user-id').AnonymousUserId, + prepareExtensions, + onRequestError: async () => { throw new Error('credential storage unavailable') }, + }) + await expect(chunks(llm.stream(options()))).rejects.toMatchObject({ code: 'AUTH', failure: { status: 401 } }) + }) + it('rejects a successful response with no readable body', async () => { vi.stubGlobal('fetch', async () => new Response(null, { status: 200 })) await expect(chunks(adapter().stream(options()))).rejects.toMatchObject({ code: 'EMPTY_RESPONSE' }) @@ -282,7 +293,7 @@ describe('Cordis provider composition', () => { await ctx.plugin(Loader) ctx.loader.builtins.include = Include const modules = new Map([ - ['@deepseek-ai/dsh-llm', LlmRuntime], ['@deepseek-ai/dsh-llm-deepseek', Messages], + ['@deepseek-ai/dsh-llm', LlmRuntime], ['@deepseek-ai/dsh-llm-deepseek-api-key', Messages], ['@deepseek-ai/dsh-llm-deepseek-account', AccountProvider], ['@deepseek-ai/dsh-credentials-local', LocalCredentials], ['@deepseek-ai/dsh-agent', AgentRegistry], ['@deepseek-ai/dsh-agent-loop', AgentLoop], ['@deepseek-ai/dsh-session', SessionStore], ['@deepseek-ai/dsh-session-projection', SessionProjectionRegistry], @@ -328,6 +339,7 @@ describe('Cordis provider composition', () => { }) ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => 'fixture-token', rejectToken: async (_token: string): Promise => { ctx.emit('deepseek-account/signed-out') } } as DeepSeekAccount) + installAccountTaskCancellation(ctx) const agent = await ctx.agentLoop.create(SessionId('inference-account-expiry'), { provider: 'deepseek-account', model: MODEL }) agent.followup(user('hello')) await agent.whenIdle() @@ -405,7 +417,7 @@ describe('Cordis provider composition', () => { it.each([false, true])('continues and resumes sessions after a model capability change, in-history=%s', async (inHistory) => { const { ctx, http } = await boot() - await ctx.settings.update('llm-deepseek', { baseURL: http.url, models: [{ id: MODEL, systemPromptUpdate: 'in-history' }] }) + await ctx.settings.update(Messages.name, { baseURL: http.url, models: [{ id: MODEL, systemPromptUpdate: 'in-history' }] }) let prompt = 'old prompt' ctx.on('system-prompt/assemble', async (_assembly, _context, next) => ({ ...await next(), sections: [{ name: 'test', text: prompt, order: 0 }], @@ -548,7 +560,7 @@ it.each([ resolveToken: (url: string) => Promise.resolve(url === 'https://api.deepseek.com' ? 'account-token' : undefined), } as DeepSeekAccount) await ctx.plugin(LlmRuntime) - await ctx.plugin(Messages, { baseURL }) + await ctx.plugin(expected === 'account-token' ? AccountProvider : Messages, { baseURL }) const request = vi.fn((_input, init) => { const headers = new Headers(init?.headers) expect(headers.has('authorization')).toBe(false) @@ -558,6 +570,6 @@ it.each([ return Promise.resolve(new Response(sse(textEvents), { status: 200 })) }) vi.stubGlobal('fetch', request) - await assemble(ctx.llm.stream(options())) + await assemble(ctx.llm.stream(options({ provider: expected === 'account-token' ? 'deepseek-account' : 'deepseek-official' }))) expect(request).toHaveBeenCalledOnce() }) diff --git a/packages/llm/llm-deepseek/tests/dynamic-config.spec.ts b/packages/llm/llm-deepseek/tests/dynamic-config.spec.ts index b05969240b..28c3c45f3f 100644 --- a/packages/llm/llm-deepseek/tests/dynamic-config.spec.ts +++ b/packages/llm/llm-deepseek/tests/dynamic-config.spec.ts @@ -16,7 +16,7 @@ import type { import { credentialRef } from '@deepseek-ai/dsh-credentials' import { LocalCredentialProvider } from '@deepseek-ai/dsh-credentials-local' import { liveConfig } from '../../../settings/settings/tests/live-config.ts' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import type { ContextFormed } from '@deepseek-ai/dsh-llm' import { assemble } from './assemble.ts' import { closeMockServers, mockServer, textEvents } from './mock-server.ts' @@ -270,8 +270,8 @@ describe('request-level dynamic configuration', () => { maxDelayMs: 100, jitterRatio: 0.2, }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) - expect(observed).toEqual([['deepseek-account', 'deepseek-official'], ['deepseek-official', 'deepseek-account']]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) + expect(observed).toEqual([['deepseek-official']]) }) it('fails catalog reads while a stored snapshot fails beyond-schema validation, and recovers on repair', async () => { diff --git a/packages/llm/llm-deepseek/tests/egress.spec.ts b/packages/llm/llm-deepseek/tests/egress.spec.ts index 3a74a50cb8..03b04f8550 100644 --- a/packages/llm/llm-deepseek/tests/egress.spec.ts +++ b/packages/llm/llm-deepseek/tests/egress.spec.ts @@ -38,7 +38,7 @@ import { vi } from 'vitest' import { Context } from '@deepseek-ai/cordis' import LlmRuntime from '@deepseek-ai/dsh-llm' import DeepSeekLlmApiExtensionRegistry from '@deepseek-ai/dsh-deepseek-llm-api-extensions' -import * as LlmDeepSeek from '../src/index.ts' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' let home: string beforeAll(() => { diff --git a/packages/llm/llm-deepseek/tests/extensions.spec.ts b/packages/llm/llm-deepseek/tests/extensions.spec.ts index 66256ce5df..9d4a1fc17b 100644 --- a/packages/llm/llm-deepseek/tests/extensions.spec.ts +++ b/packages/llm/llm-deepseek/tests/extensions.spec.ts @@ -8,7 +8,7 @@ import LlmRuntime from '@deepseek-ai/dsh-llm' import DeepSeekLlmApiExtensionRegistry from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import type { DeepSeekLlmApiExtensionRequest } from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import { SessionId } from '@deepseek-ai/dsh-session' -import * as DeepSeek from '../src/index.ts' +import * as DeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import { assemble, options, sse, textEvents } from './helpers.ts' declare module '@deepseek-ai/dsh-deepseek-llm-api-extensions' { diff --git a/packages/llm/llm-deepseek/tests/fixtures/cordis.yml b/packages/llm/llm-deepseek/tests/fixtures/cordis.yml index a64d7c046c..0d95d810dd 100644 --- a/packages/llm/llm-deepseek/tests/fixtures/cordis.yml +++ b/packages/llm/llm-deepseek/tests/fixtures/cordis.yml @@ -11,7 +11,7 @@ config: path: {{credentials}} watch: false -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY baseURL: {{endpoint}} @@ -19,3 +19,6 @@ reasoningEffort: high maxTokens: 256000 streamIdleTimeoutMs: 300000 +- name: '@deepseek-ai/dsh-llm-deepseek-account' + config: + baseURL: {{endpoint}} diff --git a/packages/llm/llm-deepseek/tests/loader-composition.spec.ts b/packages/llm/llm-deepseek/tests/loader-composition.spec.ts index 141e53a406..a5e4b213a6 100644 --- a/packages/llm/llm-deepseek/tests/loader-composition.spec.ts +++ b/packages/llm/llm-deepseek/tests/loader-composition.spec.ts @@ -18,7 +18,7 @@ import { getOrCreateAnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' import DeepSeekLlmApiExtensionRegistry from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import * as SessionLogDeepSeek from '@deepseek-ai/dsh-session-log-deepseek' import * as DeepSeekPluginPackageInventory from '@deepseek-ai/dsh-plugin-package-inventory-deepseek' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import { assemble } from './assemble.ts' import { closeMockServers, mockServer, textEvents } from './mock-server.ts' import { sourceModuleLoader } from './helpers.ts' @@ -79,7 +79,7 @@ async function loadComposition( ] : [], '- id: llm-deepseek', - " name: '@deepseek-ai/dsh-llm-deepseek'", + " name: '@deepseek-ai/dsh-llm-deepseek-api-key'", ' config:', ` baseURL: ${JSON.stringify(options.baseURL)}`, '', @@ -98,7 +98,7 @@ async function loadComposition( ['@deepseek-ai/dsh-session-log-deepseek', SessionLogDeepSeek], ['@deepseek-ai/dsh-plugin-package-inventory-deepseek', DeepSeekPluginPackageInventory], ['@deepseek-ai/dsh-credentials-local', LocalCredentialProvider], - ['@deepseek-ai/dsh-llm-deepseek', LlmDeepSeek], + ['@deepseek-ai/dsh-llm-deepseek-api-key', LlmDeepSeek], ]) // The custom importer bypasses Node resolution; mirror the package manifests // a deployed cordis.yml has beside its declared dependencies. @@ -137,7 +137,7 @@ describe('llm-deepseek real dynamic composition', () => { expect(request).not.toHaveProperty('dsh_session_log') expect(request.dsh_plugin_packages.packages).toEqual(expect.arrayContaining([ { name: '@deepseek-ai/dsh-deepseek-llm-api-extensions', version: '0.1.0-rc.8' }, - { name: '@deepseek-ai/dsh-llm-deepseek', version: '0.1.0-rc.8' }, + { name: '@deepseek-ai/dsh-llm-deepseek-api-key', version: '0.1.0-rc.8' }, { name: '@deepseek-ai/dsh-session-log-deepseek', version: '0.1.0-rc.8' }, ])) expect(request.dsh_plugin_packages.version).toBe(1) diff --git a/packages/llm/llm-deepseek/tests/model-info.spec.ts b/packages/llm/llm-deepseek/tests/model-info.spec.ts new file mode 100644 index 0000000000..ab05326db4 --- /dev/null +++ b/packages/llm/llm-deepseek/tests/model-info.spec.ts @@ -0,0 +1,9 @@ +/** Catalog metadata supports embedding callers without deployment normalization. */ +import { expect, it } from 'vitest' +import { catalogModelInfo } from '../src/model-info.ts' + +it('advertises a minimal model declaration as text input with its ID as the label', () => { + expect(catalogModelInfo('deepseek-official', { id: 'embedded-model' })).toEqual({ + provider: 'deepseek-official', id: 'embedded-model', name: 'embedded-model', inputModalities: ['text'], + }) +}) diff --git a/packages/llm/llm-deepseek/tests/prepared-call.spec.ts b/packages/llm/llm-deepseek/tests/prepared-call.spec.ts index e35f4a7a7f..965b50929d 100644 --- a/packages/llm/llm-deepseek/tests/prepared-call.spec.ts +++ b/packages/llm/llm-deepseek/tests/prepared-call.spec.ts @@ -1,8 +1,9 @@ /** Prepared calls retain their endpoint and credential generation. */ import { afterEach, expect, it } from 'vitest' import type { AnonymousUserId } from '@deepseek-ai/dsh-anonymous-user-id' -import { Config, DeepSeekAdapter, plainOptions, resolveAdapterOptions } from '../src/index.ts' -import type { DeepSeekConnectionOptions } from '../src/index.ts' +import { DeepSeekAdapter } from '../src/index.ts' +import { Config, plainOptions, resolveAdapterOptions } from '@deepseek-ai/dsh-llm-deepseek-api-key' +import type { ResolvedDeepSeekOptions as DeepSeekConnectionOptions } from '@deepseek-ai/dsh-llm-deepseek-api-key' import { assemble, chunks, MODEL, options, server } from './helpers.ts' const close: (() => Promise)[] = [] diff --git a/packages/llm/llm-deepseek/tests/runtime.e2e.ts b/packages/llm/llm-deepseek/tests/runtime.e2e.ts index 7e9c0e2832..af46352638 100644 --- a/packages/llm/llm-deepseek/tests/runtime.e2e.ts +++ b/packages/llm/llm-deepseek/tests/runtime.e2e.ts @@ -1,3 +1,4 @@ +import * as Protocol from '@deepseek-ai/dsh-llm-deepseek' import { readFileSync } from 'node:fs' import { mkdtemp, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' @@ -24,7 +25,7 @@ import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import DeepSeekLlmApiExtensionRegistry from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import * as PluginPackageInventoryDeepSeek from '@deepseek-ai/dsh-plugin-package-inventory-deepseek' import * as SessionLogDeepSeek from '@deepseek-ai/dsh-session-log-deepseek' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import type { Options as Config } from '@deepseek-ai/dsh-llm-deepseek' import type { WireRequest } from '../src/wire-types.ts' import { assemble, type AssembledResult } from './assemble.ts' @@ -110,7 +111,7 @@ async function harness(model: string, config: Partial = {}) { await ctx.plugin(LlmRuntime) await ctx.plugin(E2eAttachmentStore) await ctx.plugin(LlmDeepSeek, { - baseURL: LlmDeepSeek.PUBLIC_BASE_URL, + baseURL: Protocol.PUBLIC_BASE_URL, ...model === VISION ? { models: [{ id: VISION, inputModalities: ['text', 'image'] }] } : {}, ...config, }) @@ -154,7 +155,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () contexts.push(ctx) await ctx.plugin(LlmRuntime) await ctx.plugin(LocalAttachments) - await ctx.plugin(LlmDeepSeek, { baseURL: LlmDeepSeek.PUBLIC_BASE_URL, maxTokens: 4096 }) + await ctx.plugin(LlmDeepSeek, { baseURL: Protocol.PUBLIC_BASE_URL, maxTokens: 4096 }) const model = 'deepseek-flash' await expect(ctx.llm.resolveModelInfo('deepseek-official', model)).resolves.toMatchObject({ inputModalities: ['text', 'image'], systemPromptUpdate: 'in-history', @@ -181,11 +182,11 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () it.skipIf(!VISION_E2E_ENABLED)('uses the built-in official route to upload, reference, and delete one image', async () => { const key = process.env.DEEPSEEK_API_KEY if (key === undefined) throw new Error('e2e ran without DEEPSEEK_API_KEY') - const baseURL = LlmDeepSeek.PUBLIC_BASE_URL + const baseURL = Protocol.PUBLIC_BASE_URL const ctx = await harness(VISION, { baseURL }) await ctx.plugin(E2eAttachmentStore) const attachments = ctx.attachments as E2eAttachmentStore - let uploadedFile: LlmDeepSeek.DeepSeekFileIdType | undefined + let uploadedFile: Protocol.DeepSeekFileIdType | undefined const nativeFetch = globalThis.fetch const observedFetch: typeof fetch = async (input, init) => { const response = await nativeFetch(input, init) @@ -193,12 +194,12 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () const method = init?.method ?? (input instanceof Request ? input.method : 'GET') if (method === 'POST' && url.pathname.endsWith('/files') && response.ok) { const value = await response.clone().json() as { id?: unknown } - if (typeof value.id === 'string') uploadedFile = LlmDeepSeek.DeepSeekFileId(value.id) + if (typeof value.id === 'string') uploadedFile = Protocol.DeepSeekFileId(value.id) } return response } vi.stubGlobal('fetch', observedFetch) - const files = new LlmDeepSeek.DeepSeekFilesClient({ baseURL, apiKey: key }) + const files = new Protocol.DeepSeekFilesClient({ baseURL, apiKey: key }) try { const result = await assemble(ctx, { @@ -233,7 +234,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () await ctx.plugin(DeepSeekLlmApiExtensionRegistry) await ctx.plugin(SessionLogDeepSeek, { enabled: true }) await ctx.plugin(PluginPackageInventoryDeepSeek) - await ctx.plugin(LlmDeepSeek, { baseURL: LlmDeepSeek.PUBLIC_BASE_URL, thinking: 'disabled' }) + await ctx.plugin(LlmDeepSeek, { baseURL: Protocol.PUBLIC_BASE_URL, thinking: 'disabled' }) const session = ctx.sessions.create(SessionId('real-extension-fields')) session.append('turn/start', { turn: 1 }) @@ -263,7 +264,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () contexts.push(ctx) await ctx.plugin(LlmRuntime) await ctx.plugin(LocalCredentialProvider, { path: join(dir, '.credentials.yaml'), watch: false }) - await ctx.plugin(LlmDeepSeek, { baseURL: LlmDeepSeek.PUBLIC_BASE_URL }) + await ctx.plugin(LlmDeepSeek, { baseURL: Protocol.PUBLIC_BASE_URL }) const result = await assemble(ctx, { model: FLASH, diff --git a/packages/llm/llm-deepseek/tests/runtime.spec.ts b/packages/llm/llm-deepseek/tests/runtime.spec.ts index df6b4a5457..2710895838 100644 --- a/packages/llm/llm-deepseek/tests/runtime.spec.ts +++ b/packages/llm/llm-deepseek/tests/runtime.spec.ts @@ -1,3 +1,4 @@ +import * as Protocol from '@deepseek-ai/dsh-llm-deepseek' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { mkdtempSync, rmSync } from 'node:fs' import { tmpdir } from 'node:os' @@ -21,7 +22,7 @@ import { getOrCreateAnonymousUserId, type AnonymousUserId } from '@deepseek-ai/d import { SessionId } from '@deepseek-ai/dsh-session' import DeepSeekLlmApiExtensionRegistry from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import type { PreparedDeepSeekLlmApiExtensions } from '@deepseek-ai/dsh-deepseek-llm-api-extensions' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import { DeepSeekAdapter, resolveAdapterOptions } from '@deepseek-ai/dsh-llm-deepseek' import type { ContextFormed } from '@deepseek-ai/dsh-llm' import { providerError } from '../src/transport.ts' @@ -72,7 +73,7 @@ function noExtensions(): Promise { function adapterOf( config: Partial & { apiKey?: string } = {}, attachments?: AttachmentStore, - files?: LlmDeepSeek.DeepSeekFileStore, + files?: Protocol.DeepSeekFileStore, ): DeepSeekAdapter { const { apiKey, ...rest } = config return new DeepSeekAdapter({ @@ -126,22 +127,22 @@ function attachmentStoreOf( } function fileStoreOf( - implementation: (...args: Parameters) => ReturnType, + implementation: (...args: Parameters) => ReturnType, ) { const ensureUploaded = vi.fn(implementation) const invalidate = vi.fn(() => Promise.resolve()) return { - store: Object.assign(new LlmDeepSeek.DeepSeekFileStore(), { ensureUploaded, invalidate }), + store: Object.assign(new Protocol.DeepSeekFileStore(), { ensureUploaded, invalidate }), ensureUploaded, invalidate, } } -function fileReference(fileId: string): Awaited> { +function fileReference(fileId: string): Awaited> { return { - record: { fileId: LlmDeepSeek.DeepSeekFileId(fileId) }, + record: { fileId: Protocol.DeepSeekFileId(fileId) }, uploaded: true, - } as Awaited> + } as Awaited> } function successfulSseResponse(): Response { @@ -1698,13 +1699,13 @@ describe('plugin registration and config', () => { const fiber = await ctx.plugin(LlmDeepSeek, { baseURL: server.url, }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) expect(ctx.llm.listConfigurableProviders()).toEqual([{ provider: 'deepseek-official', displayName: 'DeepSeek', - settingsNs: 'llm-deepseek', + settingsNs: 'llm-deepseek-api-key', settingsPath: [], - }, { provider: 'deepseek-account', displayName: 'DeepSeek Account', settingsNs: 'llm-deepseek', settingsPath: [] }]) + }]) await fiber.dispose() expect(ctx.llm.listProviders()).toEqual([]) expect(ctx.llm.listConfigurableProviders()).toEqual([]) @@ -1734,7 +1735,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { baseURL: 'http://127.0.0.1:1' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([ { provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] }, { @@ -1875,21 +1876,6 @@ describe('plugin registration and config', () => { ]) }) - it('defaults an adapter-supplied catalog entry to text input', async () => { - const connection = resolveAdapterOptions({ models: [] }) - const adapter = new DeepSeekAdapter({ - options: () => ({ ...connection, models: [{ id: 'adapter-model' }] }), - resolveApiKey: () => Promise.resolve('k'), - resolveUserId: () => TEST_USER_ID, - prepareExtensions: noExtensions, - }) - await expect(adapter.listModels('deepseek-official')).resolves.toEqual([{ - provider: 'deepseek-official', - id: 'adapter-model', - name: 'adapter-model', - inputModalities: ['text'], - }]) - }) it('advertises configured models without restricting arbitrary request ids', async () => { vi.stubEnv('DEEPSEEK_API_KEY', 'catalog-fixture-key') @@ -2175,7 +2161,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, {}) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) }) it('loads keyless with an empty catalog and fails requests actionably', async () => { @@ -2183,7 +2169,7 @@ describe('plugin registration and config', () => { const ctx = new Context() await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { baseURL: 'http://127.0.0.1:1' }) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(0) const first = await assemble(ctx, { model: 'deepseek-flash', messages: [] }) expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) @@ -2264,15 +2250,14 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) // Registration succeeds; no call is made (would hit api.deepseek.com). await ctx.plugin(LlmDeepSeek, {}) - expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }, { id: 'deepseek-account', name: 'DeepSeek Account' }]) + expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) }) it('adapter is constructible directly for embedding over the shared resolver', async () => { const adapter = adapterOf() expect(adapter).toBeInstanceOf(DeepSeekAdapter) - // Direct embedding shares the plugin's one resolve step, so it advertises - // the same default catalog instead of a divergent empty one. - await expect(adapter.listModels('deepseek-official')).resolves.toHaveLength(2) + await expect(adapter.listModels('deepseek-official')).resolves.toEqual([]) + await expect(adapter.resolveModel('deepseek-official', 'deepseek-flash')).resolves.toMatchObject({ name: 'DeepSeek-V41-Flash' }) }) it('resolves connection facts and the credential exactly once per stream call', async () => { diff --git a/packages/llm/llm-deepseek/tsconfig.json b/packages/llm/llm-deepseek/tsconfig.json index 036468aebb..d7b5af77a3 100644 --- a/packages/llm/llm-deepseek/tsconfig.json +++ b/packages/llm/llm-deepseek/tsconfig.json @@ -35,9 +35,6 @@ { "path": "../../util/home-paths" }, - { - "path": "../../credentials/credentials" - }, { "path": "../deepseek-llm-api-extensions" }, @@ -58,12 +55,6 @@ }, { "path": "../../settings/settings" - }, - { - "path": "../../credentials/deepseek-account" - }, - { - "path": "../../core/agent" } ] } diff --git a/packages/llm/llm-pi-ai/package.json b/packages/llm/llm-pi-ai/package.json index d582217754..f637aa6406 100644 --- a/packages/llm/llm-pi-ai/package.json +++ b/packages/llm/llm-pi-ai/package.json @@ -52,6 +52,7 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:~", diff --git a/packages/llm/llm-pi-ai/tests/adapter.e2e.ts b/packages/llm/llm-pi-ai/tests/adapter.e2e.ts index 2787a1ab7d..b9152f00aa 100644 --- a/packages/llm/llm-pi-ai/tests/adapter.e2e.ts +++ b/packages/llm/llm-pi-ai/tests/adapter.e2e.ts @@ -4,7 +4,7 @@ import LlmRuntime, { createToolResultMessage, createUserMessage, ToolCallId, Rea import type { Message, ToolSchema } from '@deepseek-ai/dsh-llm' import * as LlmPiAi from '@deepseek-ai/dsh-llm-pi-ai' import type { PiAiProviderProfile } from '@deepseek-ai/dsh-llm-pi-ai' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import { assemble, type AssembledResult } from './assemble.ts' /** diff --git a/packages/llm/llm-retry/README.i18n.yaml b/packages/llm/llm-retry/README.i18n.yaml index f55a318c50..19949ab02d 100644 --- a/packages/llm/llm-retry/README.i18n.yaml +++ b/packages/llm/llm-retry/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-retry/README.md -README.md: ca8018e1fbfcda7b091c30370a195bfe40c5f1b2 -README.zh.md: ec3ee877ef5ddbee29bc6df6c395ed96d1c2f8da +README.md: f923140df30faa11c419ea34a7d2ba71f4102555 +README.zh.md: f8cc3f21f4ddfe54e070c2d79764000925c4d240 diff --git a/packages/llm/llm-retry/README.md b/packages/llm/llm-retry/README.md index ca8018e1fb..f923140df3 100644 --- a/packages/llm/llm-retry/README.md +++ b/packages/llm/llm-retry/README.md @@ -34,7 +34,7 @@ Choose it when a composition runs the agent loop and wants durable request recov ### Minimal configuration ```yaml -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY retryPolicy: diff --git a/packages/llm/llm-retry/README.zh.md b/packages/llm/llm-retry/README.zh.md index ec3ee877ef..f8cc3f21f4 100644 --- a/packages/llm/llm-retry/README.zh.md +++ b/packages/llm/llm-retry/README.zh.md @@ -34,7 +34,7 @@ kind: "package-reference" ### 最小配置 ```yaml -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY retryPolicy: diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 5f66b839e6..02906fb6c0 100644 --- a/packages/llm/llm-retry/package.json +++ b/packages/llm/llm-retry/package.json @@ -59,6 +59,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-llm-mock-server": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", diff --git a/packages/llm/llm-retry/tests/transport-recovery.spec.ts b/packages/llm/llm-retry/tests/transport-recovery.spec.ts index 1f2a3262e4..062f6ad300 100644 --- a/packages/llm/llm-retry/tests/transport-recovery.spec.ts +++ b/packages/llm/llm-retry/tests/transport-recovery.spec.ts @@ -6,7 +6,7 @@ import { Context } from '@deepseek-ai/cordis' import type { Agent } from '@deepseek-ai/dsh-agent' import AgentLoop from '@deepseek-ai/dsh-agent-loop' import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import type { MockLlmBehavior, MockLlmServer } from '@deepseek-ai/dsh-llm-mock-server' import { startMockLlmServer } from '@deepseek-ai/dsh-llm-mock-server' import { SessionId } from '@deepseek-ai/dsh-session' diff --git a/packages/llm/llm/README.i18n.yaml b/packages/llm/llm/README.i18n.yaml index ae22496f7c..9b050e6c47 100644 --- a/packages/llm/llm/README.i18n.yaml +++ b/packages/llm/llm/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm/README.md -README.md: e12ae09bdbd5b651339c7282fd4c6e3c314b7d68 -README.zh.md: 6a901902026a86beb778fdc28be9b8f6a7de3dd8 +README.md: c6697f5570c1af2077585d586e38f024a7b14f16 +README.zh.md: c288c924ffbb15d590f4f2b25c97409ccf80a4bd diff --git a/packages/llm/llm/README.md b/packages/llm/llm/README.md index e12ae09bdb..c6697f5570 100644 --- a/packages/llm/llm/README.md +++ b/packages/llm/llm/README.md @@ -39,7 +39,7 @@ Mount the service and at least one adapter, then select the provider by name in ```yaml - name: '@deepseek-ai/dsh-llm' -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY ``` diff --git a/packages/llm/llm/README.zh.md b/packages/llm/llm/README.zh.md index 6a90190202..c288c924ff 100644 --- a/packages/llm/llm/README.zh.md +++ b/packages/llm/llm/README.zh.md @@ -39,7 +39,7 @@ kind: "package-reference" ```yaml - name: '@deepseek-ai/dsh-llm' -- name: '@deepseek-ai/dsh-llm-deepseek' +- name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY ``` diff --git a/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md b/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md index 8c611bac10..ea68782273 100644 --- a/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md +++ b/packages/preset/agent-preset/skills/cordis-composition-reference/references/packages.md @@ -276,7 +276,8 @@ Every package below exports a Cordis plugin that a bundle patch can name in a Lo |---|---|---| | `@deepseek-ai/dsh-deepseek-llm-api-extensions` | no | Additive request-field registry for the official DeepSeek LLM API adapter | | `@deepseek-ai/dsh-llm` | no | Provider-neutral LLM service interface for the DeepSeek Harness | -| `@deepseek-ai/dsh-llm-deepseek` | yes | DeepSeek Messages adapter | +| `@deepseek-ai/dsh-llm-deepseek-account` | yes | DeepSeek account provider authentication and discovery | +| `@deepseek-ai/dsh-llm-deepseek-api-key` | yes | DeepSeek api-key provider authentication and discovery | | `@deepseek-ai/dsh-llm-pi-ai` | yes | pi-ai-backed DeepSeek adapter for the DeepSeek Harness LLM seam (design-verification twin of dsh-llm-deepseek) | | `@deepseek-ai/dsh-llm-retry` | yes | Provider-routed LLM request retry policy for the DeepSeek Harness | | `@deepseek-ai/dsh-plugin-package-inventory-deepseek` | yes | Active Loader-backed plugin package inventory for official DeepSeek LLM API requests | diff --git a/packages/schedule/schedule/tests/runtime.spec.ts b/packages/schedule/schedule/tests/runtime.spec.ts index ce4b998862..7909fd93e7 100644 --- a/packages/schedule/schedule/tests/runtime.spec.ts +++ b/packages/schedule/schedule/tests/runtime.spec.ts @@ -63,7 +63,6 @@ async function harness(): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: new Context(), send(_message: UserMessage, _target: InboxTarget, _wakeup: boolean) {}, diff --git a/packages/schedule/schedule/tests/tools.spec.ts b/packages/schedule/schedule/tests/tools.spec.ts index c7775725ba..a34281c1b5 100644 --- a/packages/schedule/schedule/tests/tools.spec.ts +++ b/packages/schedule/schedule/tests/tools.spec.ts @@ -30,7 +30,6 @@ function stubAgent(ctx: Context, id: string): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: new Context(), send(_message: UserMessage, _target: InboxTarget, _wakeup: boolean) {}, diff --git a/packages/sdk/server/package.json b/packages/sdk/server/package.json index dd9581f36b..96d6ebadca 100644 --- a/packages/sdk/server/package.json +++ b/packages/sdk/server/package.json @@ -35,7 +35,7 @@ "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -49,7 +49,7 @@ "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/sdk/server/src/server.ts b/packages/sdk/server/src/server.ts index ba0fbe1055..50567c32e7 100644 --- a/packages/sdk/server/src/server.ts +++ b/packages/sdk/server/src/server.ts @@ -15,7 +15,7 @@ import { carrierKeyOf, type Scoped } from '@deepseek-ai/dsh-scope' import type { SessionId } from '@deepseek-ai/dsh-session' import type SubagentRuntime from '@deepseek-ai/dsh-subagent' import type { SubagentRunEndInfo } from '@deepseek-ai/dsh-subagent' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import type { InitializeParams, InitializeResult, diff --git a/packages/sdk/server/tests/server.spec.ts b/packages/sdk/server/tests/server.spec.ts index eb74c12243..20a16c741f 100644 --- a/packages/sdk/server/tests/server.spec.ts +++ b/packages/sdk/server/tests/server.spec.ts @@ -14,7 +14,7 @@ import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-test import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import JsonlSessionPersistence from '@deepseek-ai/dsh-session-persistence-jsonl' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import SubagentRuntime, { type SubagentResult, type SubagentRunEndInfo } from '@deepseek-ai/dsh-subagent' import type { JsonRpcTransportPeer } from '@deepseek-ai/dsh-sdk-protocol' import { HarnessSdkJsonRpcServer } from '../src/index.ts' @@ -924,7 +924,6 @@ describe('HarnessSdkJsonRpcServer', () => { expect(ctx.get('llm')?.listProviders()).toEqual([ { id: 'deepseek-official', name: 'DeepSeek' }, - { id: 'deepseek-account', name: 'DeepSeek Account' }, ]) await server.shutdown() } finally { diff --git a/packages/sdk/server/tsconfig.json b/packages/sdk/server/tsconfig.json index 8bef96bf44..6257024121 100644 --- a/packages/sdk/server/tsconfig.json +++ b/packages/sdk/server/tsconfig.json @@ -18,7 +18,7 @@ "path": "../../llm/llm" }, { - "path": "../../llm/llm-deepseek" + "path": "../../llm/llm-deepseek-api-key" }, { "path": "../../core/agent" diff --git a/packages/session/session-log-deepseek/package.json b/packages/session/session-log-deepseek/package.json index 45ac212aa5..94bb35e865 100644 --- a/packages/session/session-log-deepseek/package.json +++ b/packages/session/session-log-deepseek/package.json @@ -56,6 +56,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-llm-mock-server": "workspace:*", "@deepseek-ai/dsh-message-feedback": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/session/session-log-deepseek/tests/feedback-composition.spec.ts b/packages/session/session-log-deepseek/tests/feedback-composition.spec.ts index 2a91b33f33..b858bf1259 100644 --- a/packages/session/session-log-deepseek/tests/feedback-composition.spec.ts +++ b/packages/session/session-log-deepseek/tests/feedback-composition.spec.ts @@ -11,7 +11,7 @@ import JsonlSessionPersistence from '@deepseek-ai/dsh-session-persistence-jsonl' import MessageFeedback from '@deepseek-ai/dsh-message-feedback' import { recordFeedback } from '@deepseek-ai/dsh-command-feedback' import LlmRuntime, { createAssistantMessage, createUserMessage } from '@deepseek-ai/dsh-llm' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import DeepSeekLlmApiExtensions from '@deepseek-ai/dsh-deepseek-llm-api-extensions' import { startMockLlmServer, type MockLlmServer } from '@deepseek-ai/dsh-llm-mock-server' import * as SessionLogDeepSeek from '../src/index.ts' @@ -41,7 +41,7 @@ it('uploads freeform feedback and message put/edit/delete through the unchanged ['@deepseek-ai/dsh-session-persistence-jsonl', JsonlSessionPersistence], ['@deepseek-ai/dsh-message-feedback', MessageFeedback], ['@deepseek-ai/dsh-llm', LlmRuntime], - ['@deepseek-ai/dsh-llm-deepseek', LlmDeepSeek], + ['@deepseek-ai/dsh-llm-deepseek-api-key', LlmDeepSeek], ['@deepseek-ai/dsh-deepseek-llm-api-extensions', DeepSeekLlmApiExtensions], ['@deepseek-ai/dsh-session-log-deepseek', SessionLogDeepSeek], ]) @@ -52,7 +52,7 @@ it('uploads freeform feedback and message put/edit/delete through the unchanged ? { config: { root: join(root!, 'sessions'), compression: 'none' } } : name === '@deepseek-ai/dsh-message-feedback' ? { config: { maxNoteBytes: 1024 } } - : name === '@deepseek-ai/dsh-llm-deepseek' + : name === '@deepseek-ai/dsh-llm-deepseek-api-key' ? { config: { baseURL: server!.baseURL } } : name === '@deepseek-ai/dsh-session-log-deepseek' ? { config: { enabled: true } } diff --git a/packages/session/session-title-first-prompt-llm/package.json b/packages/session/session-title-first-prompt-llm/package.json index 9867aef734..713990cf78 100644 --- a/packages/session/session-title-first-prompt-llm/package.json +++ b/packages/session/session-title-first-prompt-llm/package.json @@ -37,6 +37,7 @@ "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", "@deepseek-ai/dsh-session-title-llm": "workspace:*", diff --git a/packages/session/session-title-first-prompt-llm/tests/provider.e2e.ts b/packages/session/session-title-first-prompt-llm/tests/provider.e2e.ts index 3b16d7349b..b76e25a67a 100644 --- a/packages/session/session-title-first-prompt-llm/tests/provider.e2e.ts +++ b/packages/session/session-title-first-prompt-llm/tests/provider.e2e.ts @@ -2,7 +2,7 @@ import { createUserMessage } from '@deepseek-ai/dsh-llm' import { afterEach, describe, expect, it } from 'vitest' import { Context } from '@deepseek-ai/cordis' import LlmRuntime from '@deepseek-ai/dsh-llm' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import SessionStore, { SessionId } from '@deepseek-ai/dsh-session' import SessionTitleService from '@deepseek-ai/dsh-session-title' import SessionProjectionRegistry from '@deepseek-ai/dsh-session-projection' diff --git a/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts b/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts index a520878b48..ea3688fefb 100644 --- a/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts +++ b/packages/shell/tool-bash-persistent/tests/loader-composition.spec.ts @@ -49,7 +49,6 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-bash-persistent/tests/tools.spec.ts b/packages/shell/tool-bash-persistent/tests/tools.spec.ts index 5c114c1c81..a79d116556 100644 --- a/packages/shell/tool-bash-persistent/tests/tools.spec.ts +++ b/packages/shell/tool-bash-persistent/tests/tools.spec.ts @@ -43,7 +43,6 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-bash/tests/background.spec.ts b/packages/shell/tool-bash/tests/background.spec.ts index ed9e4b1e43..eaa02db989 100644 --- a/packages/shell/tool-bash/tests/background.spec.ts +++ b/packages/shell/tool-bash/tests/background.spec.ts @@ -351,7 +351,6 @@ describe('foreground commands as jobs', () => { const ctx = await setup() const ownerId = SessionId('promote-owner') const owner: Agent = { - activeProvider: undefined, id: ownerId, options: {}, session: Session.create(ownerId, undefined, { @@ -468,7 +467,6 @@ describe('owned background output', () => { const ctx = await setup() const ownerId = SessionId('background-owner') const owner: Agent = { - activeProvider: undefined, id: ownerId, options: {}, session: Session.create(ownerId, undefined, { diff --git a/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts b/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts index d4b1b57168..8641952fb4 100644 --- a/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts +++ b/packages/shell/tool-pwsh-persistent/tests/loader-composition.spec.ts @@ -57,7 +57,6 @@ async function agent(ctx: Context, cwd: string): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts b/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts index ceea6bdda9..2957c34b54 100644 --- a/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts +++ b/packages/shell/tool-pwsh-persistent/tests/tools.spec.ts @@ -43,7 +43,6 @@ async function agent(ctx: Context, cwd: string | undefined): Promise { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/shell/tool-pwsh/tests/background.spec.ts b/packages/shell/tool-pwsh/tests/background.spec.ts index 5095a8be3b..eb96f032e1 100644 --- a/packages/shell/tool-pwsh/tests/background.spec.ts +++ b/packages/shell/tool-pwsh/tests/background.spec.ts @@ -203,7 +203,6 @@ describe('owned background output (pwsh)', () => { const { ctx, pwsh } = await setup() const ownerId = SessionId('pwsh-background-owner') const owner: Agent = { - activeProvider: undefined, id: ownerId, options: {}, session: Session.create(ownerId, undefined, { @@ -404,7 +403,6 @@ describe('foreground commands as jobs (pwsh)', () => { const { ctx, pwsh } = await setup() const ownerId = SessionId('pwsh-promote-owner') const owner: Agent = { - activeProvider: undefined, id: ownerId, options: {}, session: Session.create(ownerId, undefined, { diff --git a/packages/skill/tool-skill/tests/tool-skill.spec.ts b/packages/skill/tool-skill/tests/tool-skill.spec.ts index 15528c1074..7d9fb0d2f0 100644 --- a/packages/skill/tool-skill/tests/tool-skill.spec.ts +++ b/packages/skill/tool-skill/tests/tool-skill.spec.ts @@ -73,7 +73,6 @@ function agentForCwd(cwd: string): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', send: () => {}, followup: () => {}, @@ -91,7 +90,6 @@ function sessionAgent(session: Session, id = 'tool-skill-agent'): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'running', ctx: new Context(), send: () => {}, diff --git a/packages/subagent/subagent-dsh-sdk/package.json b/packages/subagent/subagent-dsh-sdk/package.json index ebb7f50ce7..448bfaadc0 100644 --- a/packages/subagent/subagent-dsh-sdk/package.json +++ b/packages/subagent/subagent-dsh-sdk/package.json @@ -47,6 +47,7 @@ "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-loader-smoke": "workspace:*", "@deepseek-ai/dsh-sdk-client": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", diff --git a/packages/subagent/subagent-dsh-sdk/tests/fixtures/loader/child.patch.yml b/packages/subagent/subagent-dsh-sdk/tests/fixtures/loader/child.patch.yml index bef7a64fc5..4313ac6736 100644 --- a/packages/subagent/subagent-dsh-sdk/tests/fixtures/loader/child.patch.yml +++ b/packages/subagent/subagent-dsh-sdk/tests/fixtures/loader/child.patch.yml @@ -1,7 +1,7 @@ # SDK-profile patch for the child runtime in the cwd-inheritance proof. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: system-prompt diff --git a/packages/subagent/subagent-spawn-in-process/package.json b/packages/subagent/subagent-spawn-in-process/package.json index 744fb203c6..9b0f2f99ad 100644 --- a/packages/subagent/subagent-spawn-in-process/package.json +++ b/packages/subagent/subagent-spawn-in-process/package.json @@ -44,6 +44,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", diff --git a/packages/subagent/subagent-spawn-in-process/tests/harness.ts b/packages/subagent/subagent-spawn-in-process/tests/harness.ts index 03442bfb11..5575a616b9 100644 --- a/packages/subagent/subagent-spawn-in-process/tests/harness.ts +++ b/packages/subagent/subagent-spawn-in-process/tests/harness.ts @@ -6,7 +6,7 @@ import { LocalBashExecutor } from '@deepseek-ai/dsh-bash-local' import * as BashEnvPlugin from '@deepseek-ai/dsh-shell-env' import LocalSubprocessRuntime from '@deepseek-ai/dsh-subprocess-local' import * as ToolBash from '@deepseek-ai/dsh-tool-bash' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import SubagentRuntime from '@deepseek-ai/dsh-subagent' import * as Spawn from '../src/index.ts' import * as ToolSubagent from '@deepseek-ai/dsh-tool-subagent' diff --git a/packages/subagent/subagent/tests/archive-admission.spec.ts b/packages/subagent/subagent/tests/archive-admission.spec.ts index 4380f7ef72..c279884a67 100644 --- a/packages/subagent/subagent/tests/archive-admission.spec.ts +++ b/packages/subagent/subagent/tests/archive-admission.spec.ts @@ -29,7 +29,6 @@ async function liveAgent(ctx: Context, session: Session, initial: AgentStatus): const cancels: CancelCall[] = [] let status = initial const agent: LiveAgent = { - activeProvider: undefined, id: session.id, options: {}, session, diff --git a/packages/terminal/terminal-bash/tests/index.spec.ts b/packages/terminal/terminal-bash/tests/index.spec.ts index 9904d11c8e..16b7f9ffce 100644 --- a/packages/terminal/terminal-bash/tests/index.spec.ts +++ b/packages/terminal/terminal-bash/tests/index.spec.ts @@ -56,7 +56,6 @@ function agent(ctx: Context, cwd?: string): Agent { }) return { id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx, send: () => {}, @@ -659,7 +658,6 @@ describe('terminal-bash plugin shape', () => { const ownerFiber = await ctx.plugin(() => {}) const owner: Agent = { id: session.id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: ownerFiber.ctx, send: () => {}, @@ -710,7 +708,6 @@ describe('terminal-bash plugin shape', () => { const ownerFiber = await ctx.plugin(() => {}) const owner: Agent = { id: session.id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: ownerFiber.ctx, send: () => {}, diff --git a/packages/terminal/terminal-bash/tests/local.spec.ts b/packages/terminal/terminal-bash/tests/local.spec.ts index 2053ad89cf..962421ce9c 100644 --- a/packages/terminal/terminal-bash/tests/local.spec.ts +++ b/packages/terminal/terminal-bash/tests/local.spec.ts @@ -41,7 +41,6 @@ function stubAgent(ctx: Context, rawId: string): Agent { const session = Session.create(id) const agent: Agent = { id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/terminal/terminal/tests/service.spec.ts b/packages/terminal/terminal/tests/service.spec.ts index d43654b997..11da341945 100644 --- a/packages/terminal/terminal/tests/service.spec.ts +++ b/packages/terminal/terminal/tests/service.spec.ts @@ -28,7 +28,6 @@ function stubAgent(ctx: Context, rawId: string): Agent { options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scopeFiber.ctx, send: () => {}, diff --git a/packages/terminal/tool-terminal/tests/loader-composition.spec.ts b/packages/terminal/tool-terminal/tests/loader-composition.spec.ts index 8279699981..b983872934 100644 --- a/packages/terminal/tool-terminal/tests/loader-composition.spec.ts +++ b/packages/terminal/tool-terminal/tests/loader-composition.spec.ts @@ -44,7 +44,6 @@ async function agent(ctx: Context): Promise { const session = Session.create(id) const value: Agent = { id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/terminal/tool-terminal/tests/tools.spec.ts b/packages/terminal/tool-terminal/tests/tools.spec.ts index 4595eebd44..e110562551 100644 --- a/packages/terminal/tool-terminal/tests/tools.spec.ts +++ b/packages/terminal/tool-terminal/tests/tools.spec.ts @@ -21,7 +21,6 @@ async function fakeAgent(ctx: Context, rawId: string): Promise { const session = Session.create(id) const agent: Agent = { id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, send: () => {}, diff --git a/packages/todo/tool-todo/tests/loader-composition.spec.ts b/packages/todo/tool-todo/tests/loader-composition.spec.ts index 5ec74013fe..a1e76b01b3 100644 --- a/packages/todo/tool-todo/tests/loader-composition.spec.ts +++ b/packages/todo/tool-todo/tests/loader-composition.spec.ts @@ -35,7 +35,6 @@ async function agent(ctx: Context): Promise { const session = Session.create(id) const value: Agent = { id, options: {}, session, inbox: unsupportedInbox(), - activeProvider: undefined, status: 'idle', ctx: scope.ctx, followup: () => {}, steer: () => {}, inject: () => {}, send: () => {}, cancel() {}, runMaintenance: task => task(new AbortController().signal), diff --git a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts index 848af4a2d5..5620914346 100644 --- a/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts +++ b/packages/workflow/tool-workflow/tests/tool-workflow.spec.ts @@ -455,7 +455,6 @@ describe('dsh-tool-workflow', () => { const engine = ctx.workflowEngine as StubEngine const session = Session.create(SessionId('caller')) const parent: Agent = { - activeProvider: undefined, id: session.id, options: {}, session, inbox: unsupportedInbox(), status: 'idle', ctx, send: () => {}, followup: () => {}, steer: () => {}, inject: () => {}, cancel: () => {}, runMaintenance: task => task(new AbortController().signal), whenIdle: () => Promise.resolve(), @@ -669,7 +668,6 @@ describe('dsh-tool-workflow', () => { await ctx.plugin(toolWorkflow, {}) const session = Session.create(SessionId('caller')) const parent: Agent = { - activeProvider: undefined, id: session.id, options: {}, session, inbox: unsupportedInbox(), status: 'idle', ctx, send: () => {}, followup: () => {}, steer: () => {}, inject: () => {}, cancel: () => {}, runMaintenance: task => task(new AbortController().signal), whenIdle: () => Promise.resolve(), diff --git a/packages/workflow/workflow-ptc/package.json b/packages/workflow/workflow-ptc/package.json index fe776b7bb7..a38efafc0a 100644 --- a/packages/workflow/workflow-ptc/package.json +++ b/packages/workflow/workflow-ptc/package.json @@ -44,6 +44,7 @@ "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", diff --git a/packages/workflow/workflow-ptc/tests/workflow-ptc.e2e.ts b/packages/workflow/workflow-ptc/tests/workflow-ptc.e2e.ts index a887dc8fc3..9b8e741f1d 100644 --- a/packages/workflow/workflow-ptc/tests/workflow-ptc.e2e.ts +++ b/packages/workflow/workflow-ptc/tests/workflow-ptc.e2e.ts @@ -4,7 +4,7 @@ import { SessionId } from '@deepseek-ai/dsh-session' import AgentLoop from '@deepseek-ai/dsh-agent-loop' import { mountAgentLoopTestDependencies } from '@deepseek-ai/dsh-agent-loop-testkit' -import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek' +import * as LlmDeepSeek from '@deepseek-ai/dsh-llm-deepseek-api-key' import SubagentRuntime from '@deepseek-ai/dsh-subagent' import * as Spawn from '@deepseek-ai/dsh-subagent-spawn-in-process' import PtcWorkflowEngine from '../src/index.ts' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 28e9409c53..9730ffa74f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -479,6 +479,12 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../packages/llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-account': + specifier: workspace:* + version: link:../../packages/llm/llm-deepseek-account + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../packages/llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-mock-server': specifier: workspace:* version: link:../../packages/test-support/llm-mock-server @@ -1165,6 +1171,9 @@ importers: '@deepseek-ai/dsh-credentials': specifier: workspace:* version: link:../../credentials/credentials + '@deepseek-ai/dsh-deepseek-account': + specifier: workspace:* + version: link:../../credentials/deepseek-account '@deepseek-ai/dsh-file-reference': specifier: workspace:* version: link:../../context/file-reference @@ -1271,6 +1280,9 @@ importers: '@deepseek-ai/dsh-commands': specifier: workspace:* version: link:../../interaction/commands + '@deepseek-ai/dsh-credentials': + specifier: workspace:* + version: link:../../credentials/credentials '@deepseek-ai/dsh-file-reference': specifier: workspace:* version: link:../../context/file-reference @@ -1313,6 +1325,9 @@ importers: '@deepseek-ai/dsh-session-title': specifier: workspace:* version: link:../../session/session-title + '@deepseek-ai/dsh-settings': + specifier: workspace:* + version: link:../../settings/settings '@deepseek-ai/dsh-skill': specifier: workspace:* version: link:../../skill/skill @@ -1914,9 +1929,12 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../../llm/llm - '@deepseek-ai/dsh-llm-deepseek': + '@deepseek-ai/dsh-llm-deepseek-account': specifier: workspace:* - version: link:../../llm/llm-deepseek + version: link:../../llm/llm-deepseek-account + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-pi-ai': specifier: workspace:* version: link:../../llm/llm-pi-ai @@ -2208,9 +2226,9 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../../llm/llm - '@deepseek-ai/dsh-llm-deepseek': + '@deepseek-ai/dsh-llm-deepseek-api-key': specifier: workspace:* - version: link:../../llm/llm-deepseek + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-retry': specifier: workspace:* version: link:../../llm/llm-retry @@ -6149,6 +6167,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-session': specifier: workspace:* version: link:../../core/session @@ -6455,6 +6476,9 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../../llm/llm + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-pi-ai': specifier: workspace:* version: link:../../llm/llm-pi-ai @@ -6674,9 +6698,15 @@ importers: '@deepseek-ai/cordis': specifier: workspace:~ version: link:../../../vendor/cordis + '@deepseek-ai/dsh-agent': + specifier: workspace:* + version: link:../../core/agent '@deepseek-ai/dsh-brand': specifier: workspace:* version: link:../../util/brand + '@deepseek-ai/dsh-llm': + specifier: workspace:* + version: link:../../llm/llm packages/credentials/deepseek-account-platform: dependencies: @@ -6961,6 +6991,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-permission-presets': specifier: workspace:* version: link:../../interaction/permission-presets @@ -8123,6 +8156,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-ptc-runtime': specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime @@ -9141,6 +9177,12 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../llm + '@deepseek-ai/dsh-llm-deepseek-account': + specifier: workspace:* + version: link:../llm-deepseek-account + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../llm-deepseek-api-key '@deepseek-ai/dsh-plugin-package-inventory-deepseek': specifier: workspace:* version: link:../plugin-package-inventory-deepseek @@ -9166,6 +9208,55 @@ importers: specifier: workspace:* version: link:../../core/tools + packages/llm/llm-deepseek-account: + devDependencies: + '@deepseek-ai/cordis': + specifier: workspace:~ + version: link:../../../vendor/cordis + '@deepseek-ai/cordis-plugin-loader': + specifier: workspace:~ + version: link:../../../vendor/loader + '@deepseek-ai/dsh-deepseek-account': + specifier: workspace:* + version: link:../../credentials/deepseek-account + '@deepseek-ai/dsh-launch-environment': + specifier: workspace:* + version: link:../../util/launch-environment + '@deepseek-ai/dsh-llm': + specifier: workspace:* + version: link:../llm + '@deepseek-ai/dsh-llm-deepseek': + specifier: workspace:* + version: link:../llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../llm-deepseek-api-key + + packages/llm/llm-deepseek-api-key: + dependencies: + '@deepseek-ai/schemastery': + specifier: link:../../../vendor/schemastery + version: link:../../../vendor/schemastery + devDependencies: + '@deepseek-ai/cordis': + specifier: workspace:~ + version: link:../../../vendor/cordis + '@deepseek-ai/cordis-plugin-loader': + specifier: workspace:~ + version: link:../../../vendor/loader + '@deepseek-ai/dsh-credentials': + specifier: workspace:* + version: link:../../credentials/credentials + '@deepseek-ai/dsh-launch-environment': + specifier: workspace:* + version: link:../../util/launch-environment + '@deepseek-ai/dsh-llm': + specifier: workspace:* + version: link:../llm + '@deepseek-ai/dsh-llm-deepseek': + specifier: workspace:* + version: link:../llm-deepseek + packages/llm/llm-pi-ai: dependencies: '@deepseek-ai/dsh-brand': @@ -9211,6 +9302,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../llm-deepseek-api-key '@deepseek-ai/dsh-settings': specifier: workspace:* version: link:../../settings/settings @@ -9257,6 +9351,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../llm-deepseek-api-key '@deepseek-ai/dsh-llm-mock-server': specifier: workspace:* version: link:../../test-support/llm-mock-server @@ -9996,9 +10093,9 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../../llm/llm - '@deepseek-ai/dsh-llm-deepseek': + '@deepseek-ai/dsh-llm-deepseek-api-key': specifier: workspace:* - version: link:../../llm/llm-deepseek + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-scope': specifier: workspace:* version: link:../../core/scope @@ -10391,6 +10488,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-mock-server': specifier: workspace:* version: link:../../test-support/llm-mock-server @@ -10709,6 +10809,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-session': specifier: workspace:* version: link:../../core/session @@ -11965,6 +12068,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-loader-smoke': specifier: workspace:* version: link:../../test-support/loader-smoke @@ -12139,6 +12245,9 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-session': specifier: workspace:* version: link:../../core/session @@ -13377,6 +13486,9 @@ importers: '@deepseek-ai/dsh-llm': specifier: workspace:* version: link:../../llm/llm + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../llm/llm-deepseek-api-key '@deepseek-ai/dsh-ptc-runtime': specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime @@ -13618,6 +13730,12 @@ importers: '@deepseek-ai/dsh-llm-deepseek': specifier: workspace:* version: link:../../packages/llm/llm-deepseek + '@deepseek-ai/dsh-llm-deepseek-account': + specifier: workspace:* + version: link:../../packages/llm/llm-deepseek-account + '@deepseek-ai/dsh-llm-deepseek-api-key': + specifier: workspace:* + version: link:../../packages/llm/llm-deepseek-api-key '@deepseek-ai/dsh-llm-pi-ai': specifier: workspace:* version: link:../../packages/llm/llm-pi-ai diff --git a/python/sdk-runtime/package.json b/python/sdk-runtime/package.json index dc564d0e78..3083c4ad9f 100644 --- a/python/sdk-runtime/package.json +++ b/python/sdk-runtime/package.json @@ -63,6 +63,8 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-api-key": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek-account": "workspace:*", "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", "@deepseek-ai/dsh-llm-retry": "workspace:*", "@deepseek-ai/dsh-mcp-client": "workspace:*", diff --git a/snapshots/acp/escalation-approved/cordis.snapshot.yml b/snapshots/acp/escalation-approved/cordis.snapshot.yml index 20f54d6390..8089a404a4 100644 --- a/snapshots/acp/escalation-approved/cordis.snapshot.yml +++ b/snapshots/acp/escalation-approved/cordis.snapshot.yml @@ -3,7 +3,7 @@ # raw for fixture harvesting. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: acp diff --git a/snapshots/acp/escalation-approved/cordis.yml b/snapshots/acp/escalation-approved/cordis.yml index 07aa7f1760..dc59913c0f 100644 --- a/snapshots/acp/escalation-approved/cordis.yml +++ b/snapshots/acp/escalation-approved/cordis.yml @@ -3,7 +3,7 @@ # stdout remains reserved for ACP JSON-RPC. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/acp/image-compaction/cordis.snapshot.yml b/snapshots/acp/image-compaction/cordis.snapshot.yml index 10b4dcb91e..7588dbbf64 100644 --- a/snapshots/acp/image-compaction/cordis.snapshot.yml +++ b/snapshots/acp/image-compaction/cordis.snapshot.yml @@ -3,7 +3,7 @@ # so the strict read_image gate accepts the route and the tool result carries # the durable image block. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: acp diff --git a/snapshots/sdk/account-provider-signout/account-signout.mjs b/snapshots/sdk/account-provider-signout/account-signout.mjs index c468f6022b..7da825a7be 100644 --- a/snapshots/sdk/account-provider-signout/account-signout.mjs +++ b/snapshots/sdk/account-provider-signout/account-signout.mjs @@ -1,4 +1,4 @@ -/** Deterministic transport boundary; cancellation belongs to the shipped DeepSeek plugin. */ +/** Deterministic transport boundary; cancellation belongs to the shipped account provider. */ export const inject = ['llm', 'agents'] export function apply(ctx) { ctx.on('llm/stream', async function* (request, next) { diff --git a/snapshots/sdk/account-provider-signout/cordis.yml b/snapshots/sdk/account-provider-signout/cordis.yml index dc92a814c0..647a6529ea 100644 --- a/snapshots/sdk/account-provider-signout/cordis.yml +++ b/snapshots/sdk/account-provider-signout/cordis.yml @@ -7,8 +7,8 @@ config: includeDefaultRoots: false -- id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' +- id: llm-deepseek-account + name: '@deepseek-ai/dsh-llm-deepseek-account' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/sdk/bash-tool/cordis.snapshot.yml b/snapshots/sdk/bash-tool/cordis.snapshot.yml index ed8a7c245d..deb245a752 100644 --- a/snapshots/sdk/bash-tool/cordis.snapshot.yml +++ b/snapshots/sdk/bash-tool/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay layer for the ordinary SDK snapshot composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/sdk/bash-tool/cordis.yml b/snapshots/sdk/bash-tool/cordis.yml index 20cade7db1..91fab782dc 100644 --- a/snapshots/sdk/bash-tool/cordis.yml +++ b/snapshots/sdk/bash-tool/cordis.yml @@ -6,7 +6,7 @@ includeDefaultRoots: false - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/sdk/persistent-tools/cordis.snapshot.yml b/snapshots/sdk/persistent-tools/cordis.snapshot.yml index 2578e9565a..af19f49e17 100644 --- a/snapshots/sdk/persistent-tools/cordis.snapshot.yml +++ b/snapshots/sdk/persistent-tools/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Replay layer for the TypeScript SDK minimal customization patch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/sdk/persistent-tools/cordis.yml b/snapshots/sdk/persistent-tools/cordis.yml index a8b572904f..e28f49f0e6 100644 --- a/snapshots/sdk/persistent-tools/cordis.yml +++ b/snapshots/sdk/persistent-tools/cordis.yml @@ -9,7 +9,7 @@ maxOutputChars: 16000 - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: apiKeyEnv: DEEPSEEK_API_KEY streamIdleTimeoutMs: 172800000 diff --git a/snapshots/sdk/serial-created/cordis.snapshot.yml b/snapshots/sdk/serial-created/cordis.snapshot.yml index c5741704cc..8db307073e 100644 --- a/snapshots/sdk/serial-created/cordis.snapshot.yml +++ b/snapshots/sdk/serial-created/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless TypeScript SDK replay patch over the live profile patch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/sdk/serial-created/cordis.yml b/snapshots/sdk/serial-created/cordis.yml index 1065247b4b..07a010a37d 100644 --- a/snapshots/sdk/serial-created/cordis.yml +++ b/snapshots/sdk/serial-created/cordis.yml @@ -8,7 +8,7 @@ includeDefaultRoots: false - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/sdk/session-title-after-turn/cordis.snapshot.yml b/snapshots/sdk/session-title-after-turn/cordis.snapshot.yml index e823e2de4f..3005765561 100644 --- a/snapshots/sdk/session-title-after-turn/cordis.snapshot.yml +++ b/snapshots/sdk/session-title-after-turn/cordis.snapshot.yml @@ -2,7 +2,7 @@ # the auxiliary route consumes replay.override.json with pacing so its accepted # title commits only after the main turn has closed. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/sdk/subagent-activation-limit/cordis.snapshot.yml b/snapshots/sdk/subagent-activation-limit/cordis.snapshot.yml index 571a3f2e07..5651076b9b 100644 --- a/snapshots/sdk/subagent-activation-limit/cordis.snapshot.yml +++ b/snapshots/sdk/subagent-activation-limit/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Keyless activation-capacity overlay holds the first child until the parent finishes. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/sdk/subagent-continuable-inheritance/cordis.snapshot.yml b/snapshots/sdk/subagent-continuable-inheritance/cordis.snapshot.yml index 4aa8d9f021..a4adae4330 100644 --- a/snapshots/sdk/subagent-continuable-inheritance/cordis.snapshot.yml +++ b/snapshots/sdk/subagent-continuable-inheritance/cordis.snapshot.yml @@ -2,7 +2,7 @@ # the live adapter with replay and switch the root session to read-only at # creation. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/sdk/subagent-dsh-sdk-diagnostic/child.cordis.yml b/snapshots/sdk/subagent-dsh-sdk-diagnostic/child.cordis.yml index c0960cf480..c9ece5531b 100644 --- a/snapshots/sdk/subagent-dsh-sdk-diagnostic/child.cordis.yml +++ b/snapshots/sdk/subagent-dsh-sdk-diagnostic/child.cordis.yml @@ -1,7 +1,7 @@ # SDK-profile patch for the deterministic diagnostic child runtime. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-instructions diff --git a/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.snapshot.yml b/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.snapshot.yml index 26c1761ffb..c0cdad0aee 100644 --- a/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.snapshot.yml +++ b/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless parent-model overlay for the DSH SDK diagnostic snapshot. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.yml b/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.yml index 63ea30da95..b0bbb64ccf 100644 --- a/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.yml +++ b/snapshots/sdk/subagent-dsh-sdk-diagnostic/cordis.yml @@ -6,7 +6,7 @@ includeDefaultRoots: false - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/cordis.yml b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/cordis.yml index a58d08433d..495fcac746 100644 --- a/snapshots/sdk/subagent-dsh-sdk-dynamic-route/cordis.yml +++ b/snapshots/sdk/subagent-dsh-sdk-dynamic-route/cordis.yml @@ -2,7 +2,7 @@ # a separate SDK child runtime. Both runtimes persist their request headers. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: tool-subagent diff --git a/snapshots/sdk/subagent-send-message/cordis.snapshot.yml b/snapshots/sdk/subagent-send-message/cordis.snapshot.yml index bf528971cf..27de74efd3 100644 --- a/snapshots/sdk/subagent-send-message/cordis.snapshot.yml +++ b/snapshots/sdk/subagent-send-message/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless counterpart to subagent-send-message/cordis.yml: replace the live adapter # with replay and preserve its child and parent scheduling fence. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/sdk/text-turn/cordis.snapshot.yml b/snapshots/sdk/text-turn/cordis.snapshot.yml index 5cda6a0976..f1ad2e5e04 100644 --- a/snapshots/sdk/text-turn/cordis.snapshot.yml +++ b/snapshots/sdk/text-turn/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless TypeScript SDK replay patch over the live profile patch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/sdk/text-turn/cordis.yml b/snapshots/sdk/text-turn/cordis.yml index c40d286c07..e6f94c1241 100644 --- a/snapshots/sdk/text-turn/cordis.yml +++ b/snapshots/sdk/text-turn/cordis.yml @@ -8,7 +8,7 @@ includeDefaultRoots: false - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/session/agent-instructions/cordis.snapshot.yml b/snapshots/session/agent-instructions/cordis.snapshot.yml index 128ff6f0bd..b302c539cd 100644 --- a/snapshots/session/agent-instructions/cordis.snapshot.yml +++ b/snapshots/session/agent-instructions/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart of agent-instructions.cordis.yml: apply the # scenario values and model swap to the ACP profile. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/background-confinement-failure/cordis.snapshot.yml b/snapshots/session/background-confinement-failure/cordis.snapshot.yml index cb0b8879f9..c21bbfc4ed 100644 --- a/snapshots/session/background-confinement-failure/cordis.snapshot.yml +++ b/snapshots/session/background-confinement-failure/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/background-job-admission/cordis.snapshot.yml b/snapshots/session/background-job-admission/cordis.snapshot.yml index 0d74b0a43a..e305bcd58c 100644 --- a/snapshots/session/background-job-admission/cordis.snapshot.yml +++ b/snapshots/session/background-job-admission/cordis.snapshot.yml @@ -2,7 +2,7 @@ # DeepSeek adapter with replay while preserving the app's one-task admission # config and the recorded flash route. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/both-mode-turn/cordis.snapshot.yml b/snapshots/session/both-mode-turn/cordis.snapshot.yml index 689dd60c6c..c738034f2c 100644 --- a/snapshots/session/both-mode-turn/cordis.snapshot.yml +++ b/snapshots/session/both-mode-turn/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless both mode combines the runtime/registry changes with the # DeepSeek-to-replay swap in one profile patch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/browser-use-chrome-devtools-mcp/cordis.snapshot.yml b/snapshots/session/browser-use-chrome-devtools-mcp/cordis.snapshot.yml index 4b781bd2e3..9fa277104d 100644 --- a/snapshots/session/browser-use-chrome-devtools-mcp/cordis.snapshot.yml +++ b/snapshots/session/browser-use-chrome-devtools-mcp/cordis.snapshot.yml @@ -1,5 +1,5 @@ - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/browser-use-playwright-mcp/cordis.snapshot.yml b/snapshots/session/browser-use-playwright-mcp/cordis.snapshot.yml index 4b781bd2e3..9fa277104d 100644 --- a/snapshots/session/browser-use-playwright-mcp/cordis.snapshot.yml +++ b/snapshots/session/browser-use-playwright-mcp/cordis.snapshot.yml @@ -1,5 +1,5 @@ - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/browser-use-stagehand-native/cordis.snapshot.yml b/snapshots/session/browser-use-stagehand-native/cordis.snapshot.yml index 3c9fe0fced..aa8bc30928 100644 --- a/snapshots/session/browser-use-stagehand-native/cordis.snapshot.yml +++ b/snapshots/session/browser-use-stagehand-native/cordis.snapshot.yml @@ -1,5 +1,5 @@ - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/compaction-output-reserve/cordis.snapshot.yml b/snapshots/session/compaction-output-reserve/cordis.snapshot.yml index 26184d5b99..7144fa48e7 100644 --- a/snapshots/session/compaction-output-reserve/cordis.snapshot.yml +++ b/snapshots/session/compaction-output-reserve/cordis.snapshot.yml @@ -2,7 +2,7 @@ # trigger from 8,240 to 7,500, between the history and its condensed replacement. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: session-persistence-jsonl diff --git a/snapshots/session/compaction-recovery/cordis.snapshot.yml b/snapshots/session/compaction-recovery/cordis.snapshot.yml index 40ca292f22..f389be6b5e 100644 --- a/snapshots/session/compaction-recovery/cordis.snapshot.yml +++ b/snapshots/session/compaction-recovery/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless context-overflow replay composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: session-persistence-jsonl diff --git a/snapshots/session/compaction-summary-headroom/cordis.snapshot.yml b/snapshots/session/compaction-summary-headroom/cordis.snapshot.yml index cce5f15fad..ede4392dd0 100644 --- a/snapshots/session/compaction-summary-headroom/cordis.snapshot.yml +++ b/snapshots/session/compaction-summary-headroom/cordis.snapshot.yml @@ -2,7 +2,7 @@ # request output reservation lowers the proactive trigger to 7,500 tokens. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: session-persistence-jsonl diff --git a/snapshots/session/computer-use-cua-driver-mcp/cordis.snapshot.yml b/snapshots/session/computer-use-cua-driver-mcp/cordis.snapshot.yml index e0a9ab915d..625341f473 100644 --- a/snapshots/session/computer-use-cua-driver-mcp/cordis.snapshot.yml +++ b/snapshots/session/computer-use-cua-driver-mcp/cordis.snapshot.yml @@ -1,5 +1,5 @@ - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/computer-use-cua-driver-native/cordis.snapshot.yml b/snapshots/session/computer-use-cua-driver-native/cordis.snapshot.yml index f79df74a92..38bc6ee4d0 100644 --- a/snapshots/session/computer-use-cua-driver-native/cordis.snapshot.yml +++ b/snapshots/session/computer-use-cua-driver-native/cordis.snapshot.yml @@ -1,5 +1,5 @@ - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/cordis-inspect-jsdoc/cordis.snapshot.yml b/snapshots/session/cordis-inspect-jsdoc/cordis.snapshot.yml index 1119ac8f98..c0d0aaf209 100644 --- a/snapshots/session/cordis-inspect-jsdoc/cordis.snapshot.yml +++ b/snapshots/session/cordis-inspect-jsdoc/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Replay counterpart to advanced.cordis.yml; only the live model is replaced. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/deepseek-messages-input-history/cordis.snapshot.yml b/snapshots/session/deepseek-messages-input-history/cordis.snapshot.yml index 23c2d736c9..90dfa863ed 100644 --- a/snapshots/session/deepseek-messages-input-history/cordis.snapshot.yml +++ b/snapshots/session/deepseek-messages-input-history/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/deepseek-messages-invalid-tool-history/cordis.snapshot.yml b/snapshots/session/deepseek-messages-invalid-tool-history/cordis.snapshot.yml index 0ae3966b64..a1725dcedf 100644 --- a/snapshots/session/deepseek-messages-invalid-tool-history/cordis.snapshot.yml +++ b/snapshots/session/deepseek-messages-invalid-tool-history/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/empty-response-retry/cordis.snapshot.yml b/snapshots/session/empty-response-retry/cordis.snapshot.yml index 148d845b70..d35b9ed225 100644 --- a/snapshots/session/empty-response-retry/cordis.snapshot.yml +++ b/snapshots/session/empty-response-retry/cordis.snapshot.yml @@ -3,7 +3,7 @@ # 1 ms zero-jitter retry policy as the live sibling. The app patch still # restates its whole config for raw JSONL persistence and the recorded model. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/empty-response-retry/cordis.yml b/snapshots/session/empty-response-retry/cordis.yml index 91031aca5d..3fb1775446 100644 --- a/snapshots/session/empty-response-retry/cordis.yml +++ b/snapshots/session/empty-response-retry/cordis.yml @@ -6,7 +6,7 @@ # adapter fields around `retryPolicy`, while the app patch re-pins the recorded # flash model and restates its base fields. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/session/foreground-confinement-timeout/cordis.snapshot.yml b/snapshots/session/foreground-confinement-timeout/cordis.snapshot.yml index 6e43f8a519..34b510348f 100644 --- a/snapshots/session/foreground-confinement-timeout/cordis.snapshot.yml +++ b/snapshots/session/foreground-confinement-timeout/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/fs-glob-sampling/cordis.snapshot.yml b/snapshots/session/fs-glob-sampling/cordis.snapshot.yml index 2a1eacf554..6847eac60a 100644 --- a/snapshots/session/fs-glob-sampling/cordis.snapshot.yml +++ b/snapshots/session/fs-glob-sampling/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Minimal keyless composition: real app, bash, and search tool; replayed model. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/fs-glob-sampling/cordis.yml b/snapshots/session/fs-glob-sampling/cordis.yml index 42151991b5..2148acb322 100644 --- a/snapshots/session/fs-glob-sampling/cordis.yml +++ b/snapshots/session/fs-glob-sampling/cordis.yml @@ -1,6 +1,6 @@ # Minimal live counterpart for the glob-sampling snapshot composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: models: - id: deepseek-v4-pro diff --git a/snapshots/session/fs-write-overwrite-bounded/cordis.snapshot.yml b/snapshots/session/fs-write-overwrite-bounded/cordis.snapshot.yml index 7562b53466..968ba42a9b 100644 --- a/snapshots/session/fs-write-overwrite-bounded/cordis.snapshot.yml +++ b/snapshots/session/fs-write-overwrite-bounded/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart to fs-diff-bound.cordis.yml. The ACP and # persistence rows keep the recorded flash model and raw JSONL harvest. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/lsp-definition/cordis.snapshot.yml b/snapshots/session/lsp-definition/cordis.snapshot.yml index 637a92379b..869fbf1856 100644 --- a/snapshots/session/lsp-definition/cordis.snapshot.yml +++ b/snapshots/session/lsp-definition/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Keyless replay keeps the LSP composition intact and replaces only the model adapter. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/model-switch-notice/cordis.snapshot.yml b/snapshots/session/model-switch-notice/cordis.snapshot.yml index 6224aaff4d..d14c711984 100644 --- a/snapshots/session/model-switch-notice/cordis.snapshot.yml +++ b/snapshots/session/model-switch-notice/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay keeps both recorded model routes in the replay catalog and # applies the same second-assembly selection change as the live composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/multimodal-spill-ends/cordis.snapshot.yml b/snapshots/session/multimodal-spill-ends/cordis.snapshot.yml index d23a0a1996..2e425a0ac3 100644 --- a/snapshots/session/multimodal-spill-ends/cordis.snapshot.yml +++ b/snapshots/session/multimodal-spill-ends/cordis.snapshot.yml @@ -3,7 +3,7 @@ # so the strict read_image gate accepts the route and the tool result carries # the durable image block. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/office-skills/cordis.snapshot.yml b/snapshots/session/office-skills/cordis.snapshot.yml index fe31218bff..c05428acd3 100644 --- a/snapshots/session/office-skills/cordis.snapshot.yml +++ b/snapshots/session/office-skills/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/parallel-tool-calls/cordis.snapshot.yml b/snapshots/session/parallel-tool-calls/cordis.snapshot.yml index 7554fbdbcd..c08688e52f 100644 --- a/snapshots/session/parallel-tool-calls/cordis.snapshot.yml +++ b/snapshots/session/parallel-tool-calls/cordis.snapshot.yml @@ -2,7 +2,7 @@ # sandboxed filesystem stack already lives in `dsh-base`; the ACP row re-pins # `deepseek-v4-flash` for the recorded corpus. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/partial-landlock-child-failure/cordis.snapshot.yml b/snapshots/session/partial-landlock-child-failure/cordis.snapshot.yml index a0fc75d166..deaae60cef 100644 --- a/snapshots/session/partial-landlock-child-failure/cordis.snapshot.yml +++ b/snapshots/session/partial-landlock-child-failure/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless runner-classification composition: replay authored model turns and # replace the shipping provider with a deterministic process-launch stand-in. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: sandbox diff --git a/snapshots/session/persistent-pwsh-tool-turn/cordis.snapshot.yml b/snapshots/session/persistent-pwsh-tool-turn/cordis.snapshot.yml index d7860768a4..39f14d585c 100644 --- a/snapshots/session/persistent-pwsh-tool-turn/cordis.snapshot.yml +++ b/snapshots/session/persistent-pwsh-tool-turn/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Keyless replay counterpart to persistent-pwsh.cordis.yml. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/persistent-pwsh-tool-turn/cordis.yml b/snapshots/session/persistent-pwsh-tool-turn/cordis.yml index 857a5cac9e..42e4ba61b7 100644 --- a/snapshots/session/persistent-pwsh-tool-turn/cordis.yml +++ b/snapshots/session/persistent-pwsh-tool-turn/cordis.yml @@ -1,6 +1,6 @@ # Minimal live counterpart for the persistent-pwsh-tool-turn snapshot composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: models: - id: deepseek-v4-pro diff --git a/snapshots/session/plugin-manager-mcp/cordis.snapshot.yml b/snapshots/session/plugin-manager-mcp/cordis.snapshot.yml index 611f5be77f..1d007659bf 100644 --- a/snapshots/session/plugin-manager-mcp/cordis.snapshot.yml +++ b/snapshots/session/plugin-manager-mcp/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/plugin-manager/cordis.snapshot.yml b/snapshots/session/plugin-manager/cordis.snapshot.yml index 77a0d1d340..906e59afd2 100644 --- a/snapshots/session/plugin-manager/cordis.snapshot.yml +++ b/snapshots/session/plugin-manager/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/product-subagent-both/cordis.snapshot.yml b/snapshots/session/product-subagent-both/cordis.snapshot.yml index 09f3309a66..e637af6adb 100644 --- a/snapshots/session/product-subagent-both/cordis.snapshot.yml +++ b/snapshots/session/product-subagent-both/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless twin of product-subagent-both.cordis.yml: preserve all four named # product tools while replacing only the external model adapter. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/product-subagent-codex/cordis.snapshot.yml b/snapshots/session/product-subagent-codex/cordis.snapshot.yml index 13eeadf634..7af611d3a2 100644 --- a/snapshots/session/product-subagent-codex/cordis.snapshot.yml +++ b/snapshots/session/product-subagent-codex/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless twin of product-subagent-codex.cordis.yml: keep both named product # providers and tools while replacing only the external model adapter. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/product-subagent-result-diagnostic/cordis.snapshot.yml b/snapshots/session/product-subagent-result-diagnostic/cordis.snapshot.yml index cfef4aeb19..c76b9ffabd 100644 --- a/snapshots/session/product-subagent-result-diagnostic/cordis.snapshot.yml +++ b/snapshots/session/product-subagent-result-diagnostic/cordis.snapshot.yml @@ -21,5 +21,5 @@ maxDepth: provider-managed - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true diff --git a/snapshots/session/provider-cwd/cordis.snapshot.yml b/snapshots/session/provider-cwd/cordis.snapshot.yml index bcddddccf5..49f137c42a 100644 --- a/snapshots/session/provider-cwd/cordis.snapshot.yml +++ b/snapshots/session/provider-cwd/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-node-read-only/cordis.snapshot.yml b/snapshots/session/ptc-node-read-only/cordis.snapshot.yml index 72ac169e3c..3507d8f17d 100644 --- a/snapshots/session/ptc-node-read-only/cordis.snapshot.yml +++ b/snapshots/session/ptc-node-read-only/cordis.snapshot.yml @@ -5,7 +5,7 @@ name: '../../../packages/core/tools/tests/fixtures/literal-sdk.ts' - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-node-workspace/cordis.snapshot.yml b/snapshots/session/ptc-node-workspace/cordis.snapshot.yml index 72ac169e3c..3507d8f17d 100644 --- a/snapshots/session/ptc-node-workspace/cordis.snapshot.yml +++ b/snapshots/session/ptc-node-workspace/cordis.snapshot.yml @@ -5,7 +5,7 @@ name: '../../../packages/core/tools/tests/fixtures/literal-sdk.ts' - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-python-turn/cordis.snapshot.yml b/snapshots/session/ptc-python-turn/cordis.snapshot.yml index 6056786bfb..c85aebb13d 100644 --- a/snapshots/session/ptc-python-turn/cordis.snapshot.yml +++ b/snapshots/session/ptc-python-turn/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Keyless Python PTC composition through the real headless Loader. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-read-image/cordis.snapshot.yml b/snapshots/session/ptc-read-image/cordis.snapshot.yml index 0eb8095e77..c45744da10 100644 --- a/snapshots/session/ptc-read-image/cordis.snapshot.yml +++ b/snapshots/session/ptc-read-image/cordis.snapshot.yml @@ -2,7 +2,7 @@ # image-capable replay route. The scenario generates its tiny PNG inside the # run_code program, then exercises read_image as a nested dispatch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-turn/cordis.snapshot.yml b/snapshots/session/ptc-turn/cordis.snapshot.yml index 72ac169e3c..3507d8f17d 100644 --- a/snapshots/session/ptc-turn/cordis.snapshot.yml +++ b/snapshots/session/ptc-turn/cordis.snapshot.yml @@ -5,7 +5,7 @@ name: '../../../packages/core/tools/tests/fixtures/literal-sdk.ts' - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/ptc-workspace-context/cordis.snapshot.yml b/snapshots/session/ptc-workspace-context/cordis.snapshot.yml index f8e5fa3228..13552430ca 100644 --- a/snapshots/session/ptc-workspace-context/cordis.snapshot.yml +++ b/snapshots/session/ptc-workspace-context/cordis.snapshot.yml @@ -5,7 +5,7 @@ name: '../../../packages/core/tools/tests/fixtures/literal-sdk.ts' - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/pty-tools-sandbox-backend/cordis.snapshot.yml b/snapshots/session/pty-tools-sandbox-backend/cordis.snapshot.yml index bc1250dc13..a912d7ffbd 100644 --- a/snapshots/session/pty-tools-sandbox-backend/cordis.snapshot.yml +++ b/snapshots/session/pty-tools-sandbox-backend/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Keyless replay counterpart to pty.cordis.yml. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/pwsh-tool-turn/cordis.snapshot.yml b/snapshots/session/pwsh-tool-turn/cordis.snapshot.yml index 953fb73924..4751299a1a 100644 --- a/snapshots/session/pwsh-tool-turn/cordis.snapshot.yml +++ b/snapshots/session/pwsh-tool-turn/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Minimal keyless composition: real app, pwsh executor, and pwsh tool; replayed model. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/pwsh-tool-turn/cordis.yml b/snapshots/session/pwsh-tool-turn/cordis.yml index 3fbcae1aa4..a0651bcbc7 100644 --- a/snapshots/session/pwsh-tool-turn/cordis.yml +++ b/snapshots/session/pwsh-tool-turn/cordis.yml @@ -1,6 +1,6 @@ # Minimal live counterpart for the pwsh-tool-turn snapshot composition. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: models: - id: deepseek-v4-pro diff --git a/snapshots/session/ralph-loop/cordis.snapshot.yml b/snapshots/session/ralph-loop/cordis.snapshot.yml index e404d8cc99..b06824b579 100644 --- a/snapshots/session/ralph-loop/cordis.snapshot.yml +++ b/snapshots/session/ralph-loop/cordis.snapshot.yml @@ -2,7 +2,7 @@ # `text-turn/cordis.snapshot.yml` applies only to the `default` composition, so # a sibling composition restates those swaps and adds its own rows. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/read-image-text-route/cordis.snapshot.yml b/snapshots/session/read-image-text-route/cordis.snapshot.yml index 019ab3ea82..0952a7d8fa 100644 --- a/snapshots/session/read-image-text-route/cordis.snapshot.yml +++ b/snapshots/session/read-image-text-route/cordis.snapshot.yml @@ -3,7 +3,7 @@ # text-only, so the strict read_image gate refuses and no image ever enters # the durable log. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/read-image/cordis.snapshot.yml b/snapshots/session/read-image/cordis.snapshot.yml index cebeb8b017..0d7618f868 100644 --- a/snapshots/session/read-image/cordis.snapshot.yml +++ b/snapshots/session/read-image/cordis.snapshot.yml @@ -3,7 +3,7 @@ # so the strict read_image gate accepts the route and the tool result carries # the durable image block. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/session-query-spill/cordis.snapshot.yml b/snapshots/session/session-query-spill/cordis.snapshot.yml index 44de6494df..26ec8dfae1 100644 --- a/snapshots/session/session-query-spill/cordis.snapshot.yml +++ b/snapshots/session/session-query-spill/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless session-query snapshot patch: replay plus the filesystem spill # settings inherited by this scenario. The ACP row re-pins the recorded flash model. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/session-reference-spill/cordis.snapshot.yml b/snapshots/session/session-reference-spill/cordis.snapshot.yml index 3a57fbac17..8fc3614dde 100644 --- a/snapshots/session/session-reference-spill/cordis.snapshot.yml +++ b/snapshots/session/session-reference-spill/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/session-sandbox-root/cordis.snapshot.yml b/snapshots/session/session-sandbox-root/cordis.snapshot.yml index b478805d00..7137e28bf0 100644 --- a/snapshots/session/session-sandbox-root/cordis.snapshot.yml +++ b/snapshots/session/session-sandbox-root/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart of session-sandbox-root.cordis.yml: the replay # swap, recorded model pin, and distinct sandbox fallback form one profile patch. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/subagent-acp-diagnostic/cordis.snapshot.yml b/snapshots/session/subagent-acp-diagnostic/cordis.snapshot.yml index 27db50f97b..6436289dec 100644 --- a/snapshots/session/subagent-acp-diagnostic/cordis.snapshot.yml +++ b/snapshots/session/subagent-acp-diagnostic/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless twin of subagent-acp-diagnostic.cordis.yml: keep the real ACP child # permission-denial path and replace only the external parent model adapter. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/subagent-child-question-rejection/cordis.snapshot.yml b/snapshots/session/subagent-child-question-rejection/cordis.snapshot.yml index df623b9b67..d9f970fc20 100644 --- a/snapshots/session/subagent-child-question-rejection/cordis.snapshot.yml +++ b/snapshots/session/subagent-child-question-rejection/cordis.snapshot.yml @@ -2,7 +2,7 @@ # seam, model-facing tool, and tripwire provider while replacing DeepSeek with # per-session replay. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: sandbox diff --git a/snapshots/session/subagent-depth-two-rejection/cordis.snapshot.yml b/snapshots/session/subagent-depth-two-rejection/cordis.snapshot.yml index 29adfe77c7..739df0ac6a 100644 --- a/snapshots/session/subagent-depth-two-rejection/cordis.snapshot.yml +++ b/snapshots/session/subagent-depth-two-rejection/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless counterpart to depth-two.cordis.yml: apply the depth patch and replace # the live adapter with per-session replay. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: sandbox diff --git a/snapshots/session/subagent-published-run-failure/cordis.snapshot.yml b/snapshots/session/subagent-published-run-failure/cordis.snapshot.yml index 66ae0ec826..8b6169554c 100644 --- a/snapshots/session/subagent-published-run-failure/cordis.snapshot.yml +++ b/snapshots/session/subagent-published-run-failure/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless counterpart to subagent-durability-failure.cordis.yml: replace the # live adapter with replay and fail the provider-owned final child checkpoint. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/subagent-tool-filter/cordis.snapshot.yml b/snapshots/session/subagent-tool-filter/cordis.snapshot.yml index b3ed0b1910..47eb5d850b 100644 --- a/snapshots/session/subagent-tool-filter/cordis.snapshot.yml +++ b/snapshots/session/subagent-tool-filter/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/system-prompt-in-history/cordis.snapshot.yml b/snapshots/session/system-prompt-in-history/cordis.snapshot.yml index 34c9f21ad3..c2a04ad1dd 100644 --- a/snapshots/session/system-prompt-in-history/cordis.snapshot.yml +++ b/snapshots/session/system-prompt-in-history/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart of system-prompt-in-history/cordis.yml: the # replay route declares the same in-history capability. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: agent-default-model diff --git a/snapshots/session/system-prompt-in-history/cordis.yml b/snapshots/session/system-prompt-in-history/cordis.yml index 51196acfd0..7d0ae94bd1 100644 --- a/snapshots/session/system-prompt-in-history/cordis.yml +++ b/snapshots/session/system-prompt-in-history/cordis.yml @@ -3,7 +3,7 @@ # first read, so the second step appends a `system/message` after the cached # history instead of replacing node 0. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/session/team-targets/cordis.snapshot.yml b/snapshots/session/team-targets/cordis.snapshot.yml index ea5b5dc348..577ac1976c 100644 --- a/snapshots/session/team-targets/cordis.snapshot.yml +++ b/snapshots/session/team-targets/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/text-turn/cordis.snapshot.yml b/snapshots/session/text-turn/cordis.snapshot.yml index 537bc37e4e..4853be171a 100644 --- a/snapshots/session/text-turn/cordis.snapshot.yml +++ b/snapshots/session/text-turn/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/text-turn/cordis.yml b/snapshots/session/text-turn/cordis.yml index 01637104ad..eb2846f1e9 100644 --- a/snapshots/session/text-turn/cordis.yml +++ b/snapshots/session/text-turn/cordis.yml @@ -3,7 +3,7 @@ # deterministic test composition and raw persistence needed for recording. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' config: thinking: enabled reasoningEffort: max diff --git a/snapshots/session/web-fetch/cordis.snapshot.yml b/snapshots/session/web-fetch/cordis.snapshot.yml index 38768d27a5..59a393d9e0 100644 --- a/snapshots/session/web-fetch/cordis.snapshot.yml +++ b/snapshots/session/web-fetch/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart: deterministic HTTP remains real; only the model # adapter is replaced by replay. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - insert: diff --git a/snapshots/session/web-search-endpoint-guidance/cordis.snapshot.yml b/snapshots/session/web-search-endpoint-guidance/cordis.snapshot.yml index 6062521ff8..c4add94e32 100644 --- a/snapshots/session/web-search-endpoint-guidance/cordis.snapshot.yml +++ b/snapshots/session/web-search-endpoint-guidance/cordis.snapshot.yml @@ -1,7 +1,7 @@ # Keyless replay counterpart: the failed search remains real; only the # conversation model adapter is replaced by replay. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/workflow-confinement/cordis.snapshot.yml b/snapshots/session/workflow-confinement/cordis.snapshot.yml index 568415bf16..90a125674d 100644 --- a/snapshots/session/workflow-confinement/cordis.snapshot.yml +++ b/snapshots/session/workflow-confinement/cordis.snapshot.yml @@ -1,6 +1,6 @@ # Replay the authored model turns through the shipped OS sandbox. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/snapshots/session/workspace-dependencies/cordis.snapshot.yml b/snapshots/session/workspace-dependencies/cordis.snapshot.yml index 6b88b3b3fe..cdaa33eef3 100644 --- a/snapshots/session/workspace-dependencies/cordis.snapshot.yml +++ b/snapshots/session/workspace-dependencies/cordis.snapshot.yml @@ -2,7 +2,7 @@ # script comes from the scenario's committed session JSONL. - id: llm-deepseek - name: '@deepseek-ai/dsh-llm-deepseek' + name: '@deepseek-ai/dsh-llm-deepseek-api-key' disabled: true - id: plugin-package-inventory-deepseek diff --git a/tsconfig.base.json b/tsconfig.base.json index 8b15b0bb7c..b2078b19cb 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -393,6 +393,8 @@ "@deepseek-ai/dsh-llm": ["./packages/llm/llm/src"], "@deepseek-ai/dsh-llm/invariant": ["./packages/llm/llm/src/invariant.ts"], "@deepseek-ai/dsh-llm-deepseek": ["./packages/llm/llm-deepseek/src"], + "@deepseek-ai/dsh-llm-deepseek-account": ["./packages/llm/llm-deepseek-account/src"], + "@deepseek-ai/dsh-llm-deepseek-api-key": ["./packages/llm/llm-deepseek-api-key/src"], "@deepseek-ai/dsh-llm-mock-server": ["./packages/test-support/llm-mock-server/src"], "@deepseek-ai/dsh-llm-pi-ai": ["./packages/llm/llm-pi-ai/src"], "@deepseek-ai/dsh-llm-replay": ["./packages/test-support/llm-replay/src"], diff --git a/tsconfig.host.json b/tsconfig.host.json index c551469419..67e86a3115 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -343,6 +343,8 @@ { "path": "./packages/experimental/ptc-runtime-python" }, { "path": "./packages/ptc-runtime/ptc-runtime-node" }, { "path": "./packages/llm/llm-deepseek" }, + { "path": "./packages/llm/llm-deepseek-api-key" }, + { "path": "./packages/llm/llm-deepseek-account" }, { "path": "./packages/llm/llm-pi-ai" }, { "path": "./packages/shell/bash-local" }, { "path": "./packages/shell/shell-env" }, From 9e19ca3e452c31cf404aafcda7294f89c3fa1e17 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:06:00 +0800 Subject: [PATCH 24/60] fix(account): limit automatic model selection to account login --- docs/subsystems/core.i18n.yaml | 4 +- docs/subsystems/core.md | 7 ---- docs/subsystems/core.zh.md | 7 ---- docs/subsystems/session.i18n.yaml | 4 +- docs/subsystems/session.md | 5 +-- docs/subsystems/session.zh.md | 5 +-- .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 2 +- packages/api/session-controller/README.zh.md | 2 +- packages/api/session-controller/src/index.ts | 11 +++--- .../tests/session-models.host.spec.ts | 37 ++++++------------- .../ui-settings-account/src/client/index.ts | 2 +- .../tests/initialization.client.spec.ts | 2 +- .../ui-settings-models/README.i18n.yaml | 4 +- packages/client/ui-settings-models/README.md | 4 +- .../client/ui-settings-models/README.zh.md | 4 +- .../src/client/CustomProviderCard.tsx | 1 - .../src/client/ProviderEditor.tsx | 1 - .../src/client/operations.ts | 13 ------- .../tests/components.client.spec.tsx | 25 +++---------- .../tests/model-list-catalog.client.spec.tsx | 1 - .../tests/provider-form.client.spec.tsx | 31 ++++++---------- .../core/agent-default-model/README.i18n.yaml | 4 +- packages/core/agent-default-model/README.md | 2 - .../core/agent-default-model/README.zh.md | 2 - .../core/agent-default-model/src/index.ts | 34 +++-------------- .../tests/agent-default-model.spec.ts | 32 ---------------- packages/core/agent-loop/README.i18n.yaml | 4 +- packages/core/agent-loop/README.md | 1 - packages/core/agent-loop/README.zh.md | 1 - packages/core/agent/README.i18n.yaml | 4 +- packages/core/agent/README.md | 1 - packages/core/agent/README.zh.md | 1 - .../extensions/tool-cordis/src/api-catalog.ts | 12 ++---- 34 files changed, 68 insertions(+), 206 deletions(-) diff --git a/docs/subsystems/core.i18n.yaml b/docs/subsystems/core.i18n.yaml index 28bbc0d975..29fbf9d0ae 100644 --- a/docs/subsystems/core.i18n.yaml +++ b/docs/subsystems/core.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/core.md -core.md: 36fee2dfea5e38229f16ddbca2da567eeca0f2c5 -core.zh.md: c807828249fde64df291ca098922829107515d1d +core.md: aa9af309c03ebedae353139c4017d19f2607dd7d +core.zh.md: b18ff5bba1c0309e9b9dcdf1f3e97adb5895caf6 diff --git a/docs/subsystems/core.md b/docs/subsystems/core.md index 36fee2dfea..aa9af309c0 100644 --- a/docs/subsystems/core.md +++ b/docs/subsystems/core.md @@ -437,13 +437,6 @@ currentSelection(): ModelSelection * @returns fulfillment after the optional profile write settles. */ async saveSelection(next: ModelSelection): Promise - -/** - * Store the initial setup choice only before an explicit profile selection exists. - * @param next - available model belonging to the initialized provider. - * @returns after the initial choice is saved or an existing choice is retained. - */ -async initializeSelection(next: ModelSelection): Promise ``` Source: [`packages/core/agent-default-model/src/index.ts`](../../packages/core/agent-default-model/src/index.ts) diff --git a/docs/subsystems/core.zh.md b/docs/subsystems/core.zh.md index c807828249..b18ff5bba1 100644 --- a/docs/subsystems/core.zh.md +++ b/docs/subsystems/core.zh.md @@ -447,13 +447,6 @@ currentSelection(): ModelSelection * @returns fulfillment after the optional profile write settles. */ async saveSelection(next: ModelSelection): Promise - -/** - * Store the initial setup choice only before an explicit profile selection exists. - * @param next - available model belonging to the initialized provider. - * @returns after the initial choice is saved or an existing choice is retained. - */ -async initializeSelection(next: ModelSelection): Promise ``` Source: [`packages/core/agent-default-model/src/index.ts`](../../packages/core/agent-default-model/src/index.ts) diff --git a/docs/subsystems/session.i18n.yaml b/docs/subsystems/session.i18n.yaml index 40802fb4a8..6f335e3f14 100644 --- a/docs/subsystems/session.i18n.yaml +++ b/docs/subsystems/session.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/session.md -session.md: 8c060b1a34f9f16ebf0ececd28ecdf24e77f497b -session.zh.md: dc26e5a5dc15251bef1fb93cc53ceff2fee55ab6 +session.md: e55ebf703c5bd256198687b868831f1741c30906 +session.zh.md: 4143f2366c3b69395b72e70afa1552245337f8de diff --git a/docs/subsystems/session.md b/docs/subsystems/session.md index 8c060b1a34..e55ebf703c 100644 --- a/docs/subsystems/session.md +++ b/docs/subsystems/session.md @@ -821,11 +821,10 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise /** - * Initialize a provider default; account login replaces it only when no provider API key is configured. - * @param provider - the provider whose credential was configured. + * Select the first available account model after login when no provider API key is configured. * @returns after saving the first available model or retaining the existing default. */ -@Remote async initializeDefaultModel(provider: string): Promise +@Remote async initializeDefaultModel(): Promise /** * Describe every currently routable model for Host-generation selectors. diff --git a/docs/subsystems/session.zh.md b/docs/subsystems/session.zh.md index dc26e5a5dc..4143f2366c 100644 --- a/docs/subsystems/session.zh.md +++ b/docs/subsystems/session.zh.md @@ -825,11 +825,10 @@ inspect( sessionId: SessionId, signal?: AbortSignal, ): Promise /** - * Initialize a provider default; account login replaces it only when no provider API key is configured. - * @param provider - the provider whose credential was configured. + * Select the first available account model after login when no provider API key is configured. * @returns after saving the first available model or retaining the existing default. */ -@Remote async initializeDefaultModel(provider: string): Promise +@Remote async initializeDefaultModel(): Promise /** * Describe every currently routable model for Host-generation selectors. diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index ac8eca4d71..74b7d3d75a 100644 --- a/packages/api/session-controller/README.i18n.yaml +++ b/packages/api/session-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/session-controller/README.md -README.md: abe79ff7b2b4be6f2b0ba626c77ad9af22fa2f33 -README.zh.md: 7468ed80cb741574a8ab79422ee363af2bbad3e4 +README.md: b3307ce9d6eaab4f5247214531f354228b640172 +README.zh.md: 4479d3f60046f0bd724a9b6cf42bcace63da20c5 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index abe79ff7b2..b3307ce9d6 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -78,7 +78,7 @@ References keep local Session data, scoped Contexts, and history streams alive, `SessionMediaReferences` mounts `GET|HEAD /api/file?path=` on the authenticated `connection.fetch` channel when `connection`, `fs`, and `attachments` are composed. It reads ordinary files through `ctx.fs`, including temporary paths outside registered workspaces and files in remote providers. Neither directory containment nor MIME categories restrict access; `mime-types` supplies the response type, with `application/octet-stream` for unknown extensions. GET reuses `readBytes` for preflight and ongoing byte limits; HEAD reads metadata only. All files use `ctx.attachments.imageLimits.maxImageBytes` (normally 20 MiB); exceeding this limit returns 413. Responses contain the complete file, ignore Range, and carry `private, no-store`, `nosniff`, and a sandbox CSP so directly opened HTML/SVG cannot execute with the API origin. The Client rewrite lives in `ui-chat` (`AssistantMarkdown`); audio/video responses are available, while Markdown audio/video player nodes remain separate work. -GUI model selection requires the exact provider/model pair in the available catalog; unavailable choices reject with `session/model-unavailable`. Prompt admission retains the saved route without a catalog availability gate, so request execution reports missing credentials or unavailable models. `initializeDefaultModel(provider)` saves the first available model of an API-key provider only before any user choice exists. Account login instead replaces the default when no other provider has a configured API key; credential checks use configured references independently of model availability. A provider with no available models rejects initialization with `session/provider-models-unavailable`. Availability never substitutes another model or rewrites a Session selection. +GUI model selection requires the exact provider/model pair in the available catalog; unavailable choices reject with `session/model-unavailable`. Prompt admission retains the saved route without a catalog availability gate, so request execution reports missing credentials or unavailable models. `initializeDefaultModel()` saves the first available account model after login when no other provider has a configured API key; credential checks use configured references independently of model availability. A provider with no available models rejects initialization with `session/provider-models-unavailable`. Availability never substitutes another model or rewrites a Session selection. ----- diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index 7468ed80cb..4479d3f600 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -78,7 +78,7 @@ Client 的首次 `follow`、重连首屏与 `loadOlder()` 至少请求 50 条以 当 `connection`、`fs` 与 `attachments` 均被组合时,`SessionMediaReferences` 在鉴权 `connection.fetch` 通道上挂载 `GET|HEAD /api/file?path=<绝对路径>`。它通过 `ctx.fs` 读取普通文件,包括已注册工作区之外的临时路径与远程提供方中的文件。目录包含关系与 MIME 类别均不限制访问;`mime-types` 提供响应类型,未知扩展名使用 `application/octet-stream`。GET 复用 `readBytes` 执行读取前及读取中的字节限制;HEAD 只读取元数据。所有文件均使用 `ctx.attachments.imageLimits.maxImageBytes`(通常为 20 MiB);超过此上限返回 413。响应包含完整文件,忽略 Range,并携带 `private, no-store`、`nosniff` 与沙箱 CSP,使直接打开的 HTML/SVG 无法以 API 源身份执行脚本。客户端重写位于 `ui-chat`(`AssistantMarkdown`);音视频文件响应已可用,Markdown 音视频播放器节点仍是独立工作。 -GUI 模型选择要求确切提供方/模型对出现在可用目录中;不可用的选择以 `session/model-unavailable` 拒绝。提示词准入保留已保存的路由,不按目录可用性阻断发送,由请求执行报告凭据缺失或模型不可用。`initializeDefaultModel(provider)` 仅在用户尚未选择时,保存 API key 提供方的第一个可用模型。账号登录则在其他提供方均未配置 API key 时替换默认模型;凭据检查使用已配置的引用,不依赖模型是否可用。提供方没有可用模型时,初始化以 `session/provider-models-unavailable` 拒绝。可用性变化不会替换模型或改写会话选择。 +GUI 模型选择要求确切提供方/模型对出现在可用目录中;不可用的选择以 `session/model-unavailable` 拒绝。提示词准入保留已保存的路由,不按目录可用性阻断发送,由请求执行报告凭据缺失或模型不可用。`initializeDefaultModel()` 在账号登录后、其他提供方均未配置 API key 时,将第一个可用账号模型保存为默认模型;凭据检查使用已配置的引用,不依赖模型是否可用。提供方没有可用模型时,初始化以 `session/provider-models-unavailable` 拒绝。可用性变化不会替换模型或改写会话选择。 ----- diff --git a/packages/api/session-controller/src/index.ts b/packages/api/session-controller/src/index.ts index b5725bd715..86907feb76 100644 --- a/packages/api/session-controller/src/index.ts +++ b/packages/api/session-controller/src/index.ts @@ -285,13 +285,13 @@ export class SessionController extends TypertRemoteService { } /** - * Initialize a provider default; account login replaces it only when no provider API key is configured. - * @param provider - the provider whose credential was configured. + * Select the first available account model after login when no provider API key is configured. * @returns after saving the first available model or retaining the existing default. */ @Remote - async initializeDefaultModel(provider: string): Promise { - if (provider === 'deepseek-account' && await hasProviderApiKey(this.ctx)) return + async initializeDefaultModel(): Promise { + const provider = 'deepseek-account' + if (await hasProviderApiKey(this.ctx)) return const catalog = await buildModelCatalog(this.ctx) const model = catalog.groups.find(group => group.id === provider)?.models[0] if (model === undefined) throw new RemoteError('session/provider-models-unavailable', @@ -299,8 +299,7 @@ export class SessionController extends TypertRemoteService { const selection = { provider, model: model.id, ...model.reasoning?.defaultEffort === undefined ? {} : { reasoningEffort: ReasoningEffortId(model.reasoning.defaultEffort) }, } - if (provider === 'deepseek-account') await this.ctx.agentDefaultModel.saveSelection(selection) - else await this.ctx.agentDefaultModel.initializeSelection(selection) + await this.ctx.agentDefaultModel.saveSelection(selection) } /** diff --git a/packages/api/session-controller/tests/session-models.host.spec.ts b/packages/api/session-controller/tests/session-models.host.spec.ts index 89f087e71f..b0fbf788a1 100644 --- a/packages/api/session-controller/tests/session-models.host.spec.ts +++ b/packages/api/session-controller/tests/session-models.host.spec.ts @@ -345,26 +345,6 @@ describe('Web session model selection', () => { expect(readImage).toHaveBeenCalledOnce() await ctx.fiber.dispose() }) - it('initializes only the first explicitly configured provider and retains later user choices', async () => { - const { configurationFixture } = await import('../../../settings/settings/tests/configuration-fixture.ts') - const configured = await configurationFixture({ hmr: false }) - const { ctx } = await harness(undefined, configured.ctx) - const controller = createSessionTestController(ctx, { - defaultModelSelection: () => ctx.agentDefaultModel.currentSelection(), cwd: '/tmp', - }) - await controller.initializeDefaultModel('deepseek-official') - expect(ctx.agentDefaultModel.currentSelection()).toEqual({ - provider: 'deepseek-official', model: 'deepseek-chat', reasoningEffort: 'high', - }) - await ctx.agentDefaultModel.saveSelection({ provider: 'removed', model: 'removed' }) - await controller.initializeDefaultModel('deepseek-official') - expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'removed', model: 'removed' }) - await expect(controller.initializeDefaultModel('empty')).rejects.toMatchObject({ - code: 'session/provider-models-unavailable', details: { provider: 'empty' }, - }) - await ctx.fiber.dispose() - }) - it('checks configured key references even for empty catalogs and skips profiles without keys', async () => { const ctx = new Context() await ctx.plugin(LlmRuntime) @@ -417,7 +397,7 @@ describe('Web session model selection', () => { const controller = createSessionTestController(ctx, { defaultModelSelection: () => ctx.agentDefaultModel.currentSelection(), cwd: '/tmp', }) - await controller.initializeDefaultModel('deepseek-account') + await controller.initializeDefaultModel() expect(describe).toHaveBeenCalledWith('CUSTOM_API_KEY') expect(ctx.agentDefaultModel.currentSelection()).toEqual(configuredKey ? { provider: 'removed', model: 'saved' } @@ -864,18 +844,23 @@ describe('Web session model selection', () => { }) }) -it('initializes a provider without reasoning metadata', async () => { +it('initializes the account model without reasoning metadata and rejects an empty account catalog', async () => { const { configurationFixture } = await import('../../../settings/settings/tests/configuration-fixture.ts') const configured = await configurationFixture({ hmr: false }) const { ctx } = await harness(undefined, configured.ctx) - ctx.llm.registerAdapter(['simple'], new CatalogAdapter('Simple', [ - { provider: 'simple', id: 'basic', name: 'Basic' }, + ctx.provide('credentials', { describe: vi.fn() } as never) + const dispose = ctx.llm.registerAdapter(['deepseek-account'], new CatalogAdapter('Account', [ + { provider: 'deepseek-account', id: 'basic', name: 'Basic' }, ])) const controller = createSessionTestController(ctx, { defaultModelSelection: () => ctx.agentDefaultModel.currentSelection(), cwd: '/tmp', }) - await controller.initializeDefaultModel('simple') - expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'simple', model: 'basic' }) + await controller.initializeDefaultModel() + expect(ctx.agentDefaultModel.currentSelection()).toEqual({ provider: 'deepseek-account', model: 'basic' }) + dispose() + await expect(controller.initializeDefaultModel()).rejects.toMatchObject({ + code: 'session/provider-models-unavailable', details: { provider: 'deepseek-account' }, + }) }) it('reports a non-Error catalog rejection as an unavailable selection', async () => { diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index 58d68827d1..006a82bca0 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -78,7 +78,7 @@ export function apply(ctx: Context): void { frame.accept() if (initialize) void (async () => { try { - const initialized = await ctx.remote.session.initializeDefaultModel('deepseek-account') + const initialized = await ctx.remote.session.initializeDefaultModel() if (!initialized.ok) console.info('[deepseek-account] default model initialization failed', { reason: 'refused' }) } catch (_error) { console.info('[deepseek-account] default model initialization failed', { reason: 'disconnected' }) diff --git a/packages/client/ui-settings-account/tests/initialization.client.spec.ts b/packages/client/ui-settings-account/tests/initialization.client.spec.ts index c4897b80ce..4f3c287799 100644 --- a/packages/client/ui-settings-account/tests/initialization.client.spec.ts +++ b/packages/client/ui-settings-account/tests/initialization.client.spec.ts @@ -58,7 +58,7 @@ it.each(['accepted', 'refused', 'disconnected', 'pending'] as const)('initialize try { apply(ctx as never) await done.promise - expect(initializeDefaultModel).toHaveBeenCalledExactlyOnceWith('deepseek-account') + expect(initializeDefaultModel).toHaveBeenCalledExactlyOnceWith() expect(observed).toEqual([ { status: 'credential-stored', failed: false }, { status: 'credential-stored', failed: false }, diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index c0cbc1fb05..190e7d9017 100644 --- a/packages/client/ui-settings-models/README.i18n.yaml +++ b/packages/client/ui-settings-models/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-models/README.md -README.md: 52d07e1cdaa766910dcc2e5f72c989ee20cae860 -README.zh.md: 552ce06ab93c847bd49abe836786521461a2e41a +README.md: aac5663813d831ae8484e2592306e1a7eda5eff6 +README.zh.md: 26fde64f97560c526b35df62161d521193df3a0e diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index 52d07e1cda..aac5663813 100644 --- a/packages/client/ui-settings-models/README.md +++ b/packages/client/ui-settings-models/README.md @@ -25,7 +25,7 @@ English | [中文](README.zh.md) ## Use this package -Saving credentials or a custom provider completes independently of default-model initialization. Initialization failures are logged; they do not report a successful save as failed or prevent closing the editor. The user can select an available model from the composer. +Saving credentials or a custom provider preserves the selected model. The user can select an available model from the composer. DeepSeek Account appears first and DeepSeek second in the provider list; third-party providers retain their directory order. @@ -59,7 +59,7 @@ After the versioned notice step completes, the DeepSeek step projects first-run The section declares two seats for plugins distributed outside this repository, typed in [`src/client/slot-contract.ts`](src/client/slot-contract.ts) and exported from `./client`. `settings.models.provider-card` (keyed) renders inside every card that shows a directory row — a saved row's card, its first-run setup posture, and the add-provider draft — dispatched with `entryKey = settingsNs` and owner props carrying the row's `ConfigurableProviderView`, its configured state, and its confirmed api-key credential state, so one registration under an adapter family's namespace receives every card of that family, hand-declared routes included; the hand-declared draft card has no directory row yet and dispatches nothing until saved. `settings.models.footer` (list) renders after the rows and the add controls. A registrant activates through `ctx.slots.inject` with a type-only import of this package's `/client` entry; without registrants both seats render nothing. -The Models page includes **DeepSeek Account** (`deepseek-account`, **DeepSeek 账号** in Chinese). Its editor exposes the shared DeepSeek model catalog without API-key or base-URL inputs. The account row is hidden when its available model catalog is empty, including before sign-in and after sign-out; it returns when account models become available. The first successful API-key setup initializes the default from its own provider; later setup preserves the user’s saved model choice. +The Models page includes **DeepSeek Account** (`deepseek-account`, **DeepSeek 账号** in Chinese). Its editor exposes the shared DeepSeek model catalog without API-key or base-URL inputs. The account row is hidden when its available model catalog is empty, including before sign-in and after sign-out; it returns when account models become available. ----- diff --git a/packages/client/ui-settings-models/README.zh.md b/packages/client/ui-settings-models/README.zh.md index 552ce06ab9..26fde64f97 100644 --- a/packages/client/ui-settings-models/README.zh.md +++ b/packages/client/ui-settings-models/README.zh.md @@ -25,7 +25,7 @@ kind: "package-reference" ## 使用本包 -凭据或自定义提供方保存成功后,不等待默认模型初始化即可完成操作。初始化失败记录日志,不会将已成功的保存报告为失败,也不会阻止编辑器关闭。用户可在 composer 中选择可用模型。 +保存凭据或自定义提供方时保留已选模型。用户可在 composer 中选择可用模型。 提供方列表中 DeepSeek 账号排第一,DeepSeek 排第二;第三方提供方保留目录中的相对顺序。 @@ -59,7 +59,7 @@ Host 配置 `credentialOnboarding` 默认为 `true`。Electron preload 标记会 本分区为仓库外分发的插件声明两个席位,类型定义在 [`src/client/slot-contract.ts`](src/client/slot-contract.ts) 并从 `./client` 导出。`settings.models.provider-card`(keyed)渲染在每张展示目录行的卡片内部——已保存行的卡片、其首次运行 setup 形态、以及「添加提供商」草稿卡——以 `entryKey = settingsNs` 分发,owner props 携带该行的 `ConfigurableProviderView`、其 configured 状态与已确认的 api-key 凭据状态,因此以某适配器家族的 namespace 注册一次即可收到该家族的全部卡片,含手工声明的路由;手工声明的草稿卡尚无目录行,保存之前不分发。`settings.models.footer`(list)渲染在行列表与新增控件之后。注册方通过 `ctx.slots.inject` 激活,并以 type-only import 引入本包 `/client` 入口;没有注册方时两个席位均不渲染任何内容。 -Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepSeek Account**)。其编辑器展示共享的 DeepSeek 模型目录,不提供 API Key 或 Base URL 输入框。账号可用模型目录为空时隐藏账号行,包括登录前和退登后;账号模型恢复可用时重新显示。首次成功配置 API Key 时,从对应提供方初始化默认模型;后续配置保留用户已保存的模型选择。 +Models 页面包含 **DeepSeek 账号**(`deepseek-account`,英文为 **DeepSeek Account**)。其编辑器展示共享的 DeepSeek 模型目录,不提供 API Key 或 Base URL 输入框。账号可用模型目录为空时隐藏账号行,包括登录前和退登后;账号模型恢复可用时重新显示。 ----- diff --git a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx index 06bd564bc5..f568ba0103 100644 --- a/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx +++ b/packages/client/ui-settings-models/src/client/CustomProviderCard.tsx @@ -189,7 +189,6 @@ export function CustomProviderCard(props: CustomProviderCardProps): ReactNode { // and the retry above now goes straight back to this write. if (stored !== undefined) return stored } - void operations.initializeModel(route.trim()) return undefined } diff --git a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx index 24bc8bc79d..3ed7b42d87 100644 --- a/packages/client/ui-settings-models/src/client/ProviderEditor.tsx +++ b/packages/client/ui-settings-models/src/client/ProviderEditor.tsx @@ -298,7 +298,6 @@ export function ProviderEditor(props: ProviderEditorProps): ReactNode { if (keyValue.length > 0) { const stored = await operations.storeCredential(keyRef, keyValue) if (stored !== undefined) return stored - void operations.initializeModel(props.provider) } setKeyDraft('') return undefined diff --git a/packages/client/ui-settings-models/src/client/operations.ts b/packages/client/ui-settings-models/src/client/operations.ts index 071ab72454..8ca6beb798 100644 --- a/packages/client/ui-settings-models/src/client/operations.ts +++ b/packages/client/ui-settings-models/src/client/operations.ts @@ -32,11 +32,6 @@ export type ModelDiscoveryOutcome = /** The Host operations the Models page and its cards invoke. */ export interface ModelsOperations { - /** - * @param provider - newly configured provider. - * @returns after optional initialization; failures are logged without changing the save outcome. - */ - initializeModel(provider: string): Promise /** * Read one credential reference's state. * @param ref - credential reference name. @@ -86,14 +81,6 @@ export interface ModelsOperations { */ export function createModelsOperations(ctx: ClientContext): ModelsOperations { return { - initializeModel: async (provider) => { - try { - const response = await ctx.remote.session.initializeDefaultModel(provider) - if (!response.ok) console.info('[models] default model initialization failed', { provider, reason: 'refused' }) - } catch (_error) { - console.info('[models] default model initialization failed', { provider, reason: 'disconnected' }) - } - }, describeCredential: async (ref) => { const response = await ctx.remote.credentials.describe([ref]) return response.ok ? response.value[ref] : undefined diff --git a/packages/client/ui-settings-models/tests/components.client.spec.tsx b/packages/client/ui-settings-models/tests/components.client.spec.tsx index 115d9e88f7..1a2398bd2a 100644 --- a/packages/client/ui-settings-models/tests/components.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/components.client.spec.tsx @@ -1114,27 +1114,14 @@ describe('ModelsSection', () => { expect(baseURL.value).toBe('') }) - it.each(['refused', 'disconnected', 'pending'] as const)('finishes credential saving when default initialization is %s', async (outcome) => { - const log = vi.spyOn(console, 'info').mockImplementation(() => {}) - const pending = Promise.withResolvers() + it('saves credentials without changing the default model', async () => { const { ctx, set } = await mountDeepSeekCard() const initialize = vi.spyOn(ctx.remote.session, 'initializeDefaultModel') - if (outcome === 'pending') initialize.mockReturnValue(pending.promise) - else if (outcome === 'disconnected') initialize.mockRejectedValue(new Error('offline')) - else initialize.mockResolvedValue({ ok: false, - error: new RemoteError('session/provider-models-unavailable', 'empty catalog', { provider: 'deepseek-official' }) }) - try { - fireEvent.change(await screen.findByLabelText(en.keyInput), { target: { value: 'test-key' } }) - fireEvent.click(screen.getByText(en.apply)) - await waitFor(() => { expect(screen.queryByText(en.apply)).toBeNull() }) - expect(set).toHaveBeenCalledOnce() - expect(initialize).toHaveBeenCalledExactlyOnceWith('deepseek-official') - expect(screen.queryByText('empty catalog')).toBeNull() - } finally { - if (outcome === 'pending') { pending.reject(new Error('closed')); await Promise.resolve() } - initialize.mockRestore() - log.mockRestore() - } + fireEvent.change(await screen.findByLabelText(en.keyInput), { target: { value: 'test-key' } }) + fireEvent.click(screen.getByText(en.apply)) + await waitFor(() => { expect(screen.queryByText(en.apply)).toBeNull() }) + expect(set).toHaveBeenCalledOnce() + expect(initialize).not.toHaveBeenCalled() }) it('rejects an invalid draft before writing', async () => { diff --git a/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx b/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx index bf08517f87..a0034f2f7c 100644 --- a/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/model-list-catalog.client.spec.tsx @@ -12,7 +12,6 @@ function operations(discoverModels: ModelsOperations['discoverModels']): ModelsO return { discoverModels, describeCredential: vi.fn(), - initializeModel: vi.fn(), storeCredential: vi.fn(), removeCredential: vi.fn(), writeSettings: vi.fn(), diff --git a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx index 43590083ae..259114d03a 100644 --- a/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx +++ b/packages/client/ui-settings-models/tests/provider-form.client.spec.tsx @@ -861,28 +861,19 @@ describe('hand-declared providers', () => { return { ...scripted, onClose } } - it('closes a saved custom provider when default initialization is refused', async () => { - const log = vi.spyOn(console, 'info').mockImplementation(() => {}) + it('creates a custom provider without changing the default model', async () => { const { face, mutate, set, onClose } = mountCard() const initialize = vi.spyOn(ctxWith(face).remote.session, 'initializeDefaultModel') - .mockResolvedValue({ ok: false, error: new RemoteError('session/provider-models-unavailable', - 'empty catalog', { provider: 'acme-gateway' }) }) - try { - fireEvent.change(screen.getByLabelText(en.customRoute), { target: { value: 'acme-gateway' } }) - fireEvent.change(screen.getByLabelText(en.baseUrl), { target: { value: 'https://gateway.example/v1' } }) - fireEvent.change(screen.getByLabelText(en.keyInput), { target: { value: 'test-key' } }) - fireEvent.click(screen.getByRole('button', { name: en.addModel })) - fireEvent.change(screen.getByLabelText(`${en.modelId} 1`), { target: { value: 'model' } }) - fireEvent.click(screen.getByText(en.create)) - await waitFor(() => { expect(onClose).toHaveBeenCalledWith(true) }) - expect(mutate).toHaveBeenCalledOnce() - expect(set).toHaveBeenCalledOnce() - expect(initialize).toHaveBeenCalledExactlyOnceWith('acme-gateway') - expect(screen.queryByText('empty catalog')).toBeNull() - } finally { - initialize.mockRestore() - log.mockRestore() - } + fireEvent.change(screen.getByLabelText(en.customRoute), { target: { value: 'acme-gateway' } }) + fireEvent.change(screen.getByLabelText(en.baseUrl), { target: { value: 'https://gateway.example/v1' } }) + fireEvent.change(screen.getByLabelText(en.keyInput), { target: { value: 'test-key' } }) + fireEvent.click(screen.getByRole('button', { name: en.addModel })) + fireEvent.change(screen.getByLabelText(`${en.modelId} 1`), { target: { value: 'model' } }) + fireEvent.click(screen.getByText(en.create)) + await waitFor(() => { expect(onClose).toHaveBeenCalledWith(true) }) + expect(mutate).toHaveBeenCalledOnce() + expect(set).toHaveBeenCalledOnce() + expect(initialize).not.toHaveBeenCalled() }) it('writes the whole profile and the key under the derived reference', async () => { diff --git a/packages/core/agent-default-model/README.i18n.yaml b/packages/core/agent-default-model/README.i18n.yaml index eac56801bf..7f2f5c10e8 100644 --- a/packages/core/agent-default-model/README.i18n.yaml +++ b/packages/core/agent-default-model/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-default-model/README.md -README.md: 2aa3d8ed4e4f36286226f76df4c21dd5cb87be0d -README.zh.md: 7283a44f5f491c1fd51d4c33b6df3f65cb8e76bf +README.md: d98747c457a1065453f88779a8bb75f3219c8e2d +README.zh.md: 9765b1aab7b7d9075ce8e9d94cef27934bf8a1e7 diff --git a/packages/core/agent-default-model/README.md b/packages/core/agent-default-model/README.md index 2aa3d8ed4e..d98747c457 100644 --- a/packages/core/agent-default-model/README.md +++ b/packages/core/agent-default-model/README.md @@ -7,8 +7,6 @@ kind: "package-reference" English | [中文](README.zh.md) -`initializeSelection()` serializes the first setup choice with user writes and checks the persisted profile override before writing. It preserves explicit selections, including unavailable models. - ## Summary Give newly created agents a shared default provider and model when their sessions do not specify one. Provider, model, and reasoning effort are live Config fields. Saved selections update the active profile patch and apply to subsequent reads; per-session selection remains owned by the entry point. diff --git a/packages/core/agent-default-model/README.zh.md b/packages/core/agent-default-model/README.zh.md index 7283a44f5f..9765b1aab7 100644 --- a/packages/core/agent-default-model/README.zh.md +++ b/packages/core/agent-default-model/README.zh.md @@ -7,8 +7,6 @@ kind: "package-reference" [English](README.md) | 中文 -`initializeSelection()` 将首次配置选择与用户写入串行处理,并在写入前检查持久化的 profile override。它保留显式选择,包括暂不可用的模型。 - ## 概述 为会话未指定模型的新 agent 提供共享默认 provider 和模型。Provider、模型和推理强度都是即时 Config 字段。保存的选择更新当前 profile patch,并用于后续读取;会话级选择仍由入口负责。 diff --git a/packages/core/agent-default-model/src/index.ts b/packages/core/agent-default-model/src/index.ts index 7947f70110..5c6481a85b 100644 --- a/packages/core/agent-default-model/src/index.ts +++ b/packages/core/agent-default-model/src/index.ts @@ -52,8 +52,6 @@ export class AgentDefaultModelConfig extends Service { reasoningEffort: z.string().volatile(), }) - private writes: Promise = Promise.resolve() - constructor(private readonly ownerContext: Context, private config: Config) { super(ownerContext, 'agentDefaultModel') @@ -79,32 +77,12 @@ export class AgentDefaultModelConfig extends Service { * @returns fulfillment after the optional profile write settles. */ async saveSelection(next: ModelSelection): Promise { - return this.writeSelection(next, false) - } - - /** - * Store the initial setup choice only before an explicit profile selection exists. - * @param next - available model belonging to the initialized provider. - * @returns after the initial choice is saved or an existing choice is retained. - */ - async initializeSelection(next: ModelSelection): Promise { - return this.writeSelection(next, true) - } - - private writeSelection(next: ModelSelection, initialize: boolean): Promise { - const operation = this.writes.then(async () => { - const entry = this.ownerContext.fiber.entry - const editor = this.ctx.get('configEditor') - if (entry === undefined || editor === undefined) return - const override = editor.configuration().find(row => row.entry === entry)?.override - if (initialize && override !== undefined && ('provider' in override || 'model' in override)) return - await editor.edit(entry, () => ({ - provider: next.provider, model: next.model, - ...next.reasoningEffort === undefined ? {} : { reasoningEffort: String(next.reasoningEffort) }, - })) - }) - this.writes = operation.catch(() => { /* A refused write does not block the next user choice. */ }) - return operation + const entry = this.ownerContext.fiber.entry + if (entry === undefined) return + await this.ctx.get('configEditor')?.edit(entry, () => ({ + provider: next.provider, model: next.model, + ...next.reasoningEffort === undefined ? {} : { reasoningEffort: String(next.reasoningEffort) }, + })) } } diff --git a/packages/core/agent-default-model/tests/agent-default-model.spec.ts b/packages/core/agent-default-model/tests/agent-default-model.spec.ts index 8543e903c9..256b77b6cc 100644 --- a/packages/core/agent-default-model/tests/agent-default-model.spec.ts +++ b/packages/core/agent-default-model/tests/agent-default-model.spec.ts @@ -31,35 +31,3 @@ it('persists complete selections through its owning profile entry', async () => await standalone.agentDefaultModel.saveSelection({ provider: 'test', model: 'ignored' }) expect(standalone.agentDefaultModel.currentSelection().model).toBe('original') }) - -it('initializes once and retains explicit profile choices after restart', async () => { - const { configurationFixture } = await import('../../../settings/settings/tests/configuration-fixture.ts') - const { ctx, start } = await configurationFixture({ hmr: false }) - const defaults = ctx.agentDefaultModel - await Promise.all([ - defaults.initializeSelection({ provider: 'deepseek-account', model: 'deepseek-flash' }), - defaults.initializeSelection({ provider: 'third-party', model: 'other' }), - ]) - expect(defaults.currentSelection()).toEqual({ provider: 'deepseek-account', model: 'deepseek-flash' }) - await defaults.saveSelection({ provider: 'third-party', model: 'chosen' }) - const restarted = await start() - await restarted.agentDefaultModel.initializeSelection({ provider: 'deepseek-account', model: 'deepseek-flash' }) - expect(restarted.agentDefaultModel.currentSelection()).toEqual({ provider: 'third-party', model: 'chosen' }) -}) - -it('allows initialization after a refused write and retains a model-only override', async () => { - const { configurationFixture } = await import('../../../settings/settings/tests/configuration-fixture.ts') - const { vi } = await import('vitest') - const { ctx, start } = await configurationFixture({ hmr: false }) - const edit = vi.spyOn(ctx.configEditor, 'edit').mockRejectedValueOnce(new Error('write failed')) - onTestFinished(() => { edit.mockRestore() }) - await expect(ctx.agentDefaultModel.saveSelection({ provider: 'test', model: 'refused' })).rejects.toThrow('write failed') - await ctx.agentDefaultModel.initializeSelection({ provider: 'test', model: 'initialized' }) - expect(ctx.agentDefaultModel.currentSelection().model).toBe('initialized') - const restarted = await start() - const rows = restarted.configEditor.configuration().map(row => ({ ...row, override: { model: 'initialized' } })) - const source = vi.spyOn(restarted.configEditor, 'configuration').mockReturnValue(rows) - onTestFinished(() => { source.mockRestore() }) - await restarted.agentDefaultModel.initializeSelection({ provider: 'test', model: 'ignored' }) - expect(restarted.agentDefaultModel.currentSelection().model).toBe('initialized') -}) diff --git a/packages/core/agent-loop/README.i18n.yaml b/packages/core/agent-loop/README.i18n.yaml index 406ad5af53..28340b515a 100644 --- a/packages/core/agent-loop/README.i18n.yaml +++ b/packages/core/agent-loop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent-loop/README.md -README.md: 07033fb3204e827c5227a99e7211e5e648c389c6 -README.zh.md: 0fce6147b37d704add8266deaf185ea83ae84b73 +README.md: 4c6d3df10cc9ab22a9c00232c9181a96d1829031 +README.zh.md: a3c34e153ea38a4392ba0a272499f59d5492ecaa diff --git a/packages/core/agent-loop/README.md b/packages/core/agent-loop/README.md index 07033fb320..4c6d3df10c 100644 --- a/packages/core/agent-loop/README.md +++ b/packages/core/agent-loop/README.md @@ -25,7 +25,6 @@ English | [中文](README.zh.md) ## Use this package - Mount `dsh-agent-loop` in any composition that should run agents. It supplies the driver behind `ctx.agents` and starts any agents you declare in its config; both [`dsh-base`](../../bundle/base/README.md) and [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.md) mount it as an explicit row. ### Configure declarative agents diff --git a/packages/core/agent-loop/README.zh.md b/packages/core/agent-loop/README.zh.md index 0fce6147b3..a3c34e153e 100644 --- a/packages/core/agent-loop/README.zh.md +++ b/packages/core/agent-loop/README.zh.md @@ -25,7 +25,6 @@ kind: "package-reference" ## 使用本包 - 在任何应运行 agent 的组合中挂载 `dsh-agent-loop`。它提供 `ctx.agents` 背后的驱动器,并启动你在配置中声明的 agent;[`dsh-base`](../../bundle/base/README.zh.md) 与 [`dsh-sdk-minimal`](../../bundle/sdk-minimal/README.zh.md) 都将它作为显式配置行挂载。 ### 配置声明式 agent diff --git a/packages/core/agent/README.i18n.yaml b/packages/core/agent/README.i18n.yaml index a5d18afec9..d950c427ea 100644 --- a/packages/core/agent/README.i18n.yaml +++ b/packages/core/agent/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/core/agent/README.md -README.md: 17ee5fd723f5322c0ccdfd7cc8443dbb842cf674 -README.zh.md: 94424a5e9bc5a30fbbb5e775658c7b90a37f24f7 +README.md: be003d7b899306b58c4ddc88e720c18dde9ce33b +README.zh.md: e360ba975dddc381e25b69766b1df82f6e45b3b4 diff --git a/packages/core/agent/README.md b/packages/core/agent/README.md index 17ee5fd723..be003d7b89 100644 --- a/packages/core/agent/README.md +++ b/packages/core/agent/README.md @@ -25,7 +25,6 @@ Use `dsh-agent` to create or resume live agents, send follow-up or steering inpu ## Use this package - Mount `dsh-agent` wherever live agents exist: it provides `ctx.agents` and the `Agent` handle that plugins, UI, hooks, and orchestrators work against. The service is inert until a driver registers a factory — the shipped driver is `dsh-agent-loop`, so the smallest useful composition loads both. ### Create or resume an agent diff --git a/packages/core/agent/README.zh.md b/packages/core/agent/README.zh.md index 94424a5e9b..e360ba975d 100644 --- a/packages/core/agent/README.zh.md +++ b/packages/core/agent/README.zh.md @@ -25,7 +25,6 @@ kind: "package-reference" ## 使用本包 - 在存在实时 agent 的任何地方挂载 `dsh-agent`:它提供 `ctx.agents` 以及插件、UI、钩子和编排器所面向编程的 `Agent` 句柄。在没有驱动器注册工厂之前,该服务保持惰性——随附驱动器是 `dsh-agent-loop`,因此最小的可用组合需要同时加载两者。 ### 创建或恢复 agent diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 804a0f362e..e5f05e60be 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -98,12 +98,6 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ parameters: [{ name: 'next', description: 'resolved selection accepted by an entry point.' }], returns: 'fulfillment after the optional profile write settles.', }, - { - signature: 'async initializeSelection(next: ModelSelection): Promise', - description: 'Store the initial setup choice only before an explicit profile selection exists.', - parameters: [{ name: 'next', description: 'available model belonging to the initialized provider.' }], - returns: 'after the initial choice is saved or an existing choice is retained.', - }, ], }, { @@ -1832,9 +1826,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ returns: 'the normalized selection installed for the Session.', }, { - signature: '@Remote async initializeDefaultModel(provider: string): Promise', - description: 'Initialize a provider default; account login replaces it only when no provider API key is configured.', - parameters: [{ name: 'provider', description: 'the provider whose credential was configured.' }], + signature: '@Remote async initializeDefaultModel(): Promise', + description: 'Select the first available account model after login when no provider API key is configured.', + parameters: [], returns: 'after saving the first available model or retaining the existing default.', }, { From b8df537f0726db0d255b631424f1cbf2f59b7ba1 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 15:28:12 +0800 Subject: [PATCH 25/60] fix(desktop): return to initial welcome page after sign-out --- apps/desktop/src/client/WelcomePage.tsx | 3 ++- apps/desktop/src/main.ts | 2 +- .../tests/welcome-renderer.client.spec.tsx | 14 ++++++++++ .../deepseek-account-platform/src/index.ts | 5 +++- .../tests/account.spec.ts | 26 +++++++++++++++++++ 5 files changed, 47 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/client/WelcomePage.tsx b/apps/desktop/src/client/WelcomePage.tsx index b24618a0da..b7f4069bcb 100644 --- a/apps/desktop/src/client/WelcomePage.tsx +++ b/apps/desktop/src/client/WelcomePage.tsx @@ -10,6 +10,7 @@ type Page = 'entry' | 'key' | 'account' /** * Render the standalone welcome flow using shell-owned operations and localized copy. + * Clearing the account attempt returns the sign-in status page to the initial choices. * @param props.api - isolated preload API; no account credentials reach the renderer. * @returns welcome pages with fixed bottom actions. */ @@ -44,7 +45,7 @@ export function Welcome({ api }: { api: WelcomeApi }) { setAttempt(state.attempt) setStarting(false) setCopyFeedback({ status: 'idle' }) - navigate(state.attempt?.phase === 'cancelled' ? 'entry' : 'account') + navigate(state.attempt === null || state.attempt.phase === 'cancelled' ? 'entry' : 'account') } useEffect(() => { diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index ca2ed4b204..660241dc79 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -395,7 +395,7 @@ async function main(): Promise { returnedAttempt = attempt.id focusPrimaryWindow() } - if (attempt?.phase === 'succeeded' && welcomeWindow !== undefined) void enterWorkspace({ activate: false }).catch(() => undefined) + if (state.status === 'credential-stored' && attempt?.phase === 'succeeded' && welcomeWindow !== undefined) void enterWorkspace({ activate: false }).catch(() => undefined) if (previousAccountStatus === 'credential-stored' && state.status === 'signed-out') { void readWelcomeState().then(async (value) => { if (needsWelcome(value) && !quitting) { diff --git a/apps/desktop/tests/welcome-renderer.client.spec.tsx b/apps/desktop/tests/welcome-renderer.client.spec.tsx index 0d3586ecfe..1a39123d19 100644 --- a/apps/desktop/tests/welcome-renderer.client.spec.tsx +++ b/apps/desktop/tests/welcome-renderer.client.spec.tsx @@ -312,3 +312,17 @@ it('ignores a notification received after its renderer unmounts', async () => { await act(async () => { pending.resolve('session-expired') }) expect(screen.queryByRole('alert')).toBeNull() }) + + +it.each(['zh-CN', 'en'])('returns from completed sign-in to the initial page after sign-out: %s', async (language) => { + const view = mount(language) + const publish = view.api.onAccountState.mock.calls[0]![0] + const links = { usageUrl: 'https://example.test/usage', topUpUrl: 'https://example.test/top_up' } + act(() => { publish({ status: 'credential-stored', links, + attempt: { id: 'completed' as NonNullable['id'], phase: 'succeeded' } }) }) + expect(view.document.querySelector('#auth-page')!.hidden).toBe(false) + act(() => { publish({ status: 'signed-out', links, attempt: null }) }) + expect(view.button('#sign-in').closest('[hidden]')).toBeNull() + expect(view.document.querySelector('#auth-page')!.hidden).toBe(true) + await expect(view.copy()).toMatchFileSnapshot(`./expected/welcome/${language}.expected.txt`) +}) diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index 0c882a5bab..0a731ff8d6 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -171,9 +171,12 @@ export class PlatformAccount extends DeepSeekAccount { if (record !== undefined && (record.kind !== 'grant' || !grant.safeParse(record.payload).success)) { throw new PlatformAuthError('storage') } + const attempt = this.attempt?.view ?? null return { ...(record === undefined && this.signOutReason !== undefined ? { signOutReason: this.signOutReason } : {}), - status: record === undefined ? 'signed-out' : 'credential-stored', attempt: this.attempt?.view ?? null, + status: record === undefined ? 'signed-out' : 'credential-stored', + // Credential removal can notify watchers before sign-out finishes clearing the attempt. + attempt: record === undefined && attempt?.phase === 'succeeded' ? null : attempt, links: { usageUrl: new URL('/usage', this.origin).href, topUpUrl: new URL('/top_up', this.origin).href }, } } diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index 690195ae0f..c4c6278d1f 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -1389,3 +1389,29 @@ it('ignores an inference rejection while already signed out', async () => { expect(await f.account.getState()).toMatchObject({ status: 'signed-out' }) expect((await f.account.getState()).signOutReason).toBeUndefined() }) + + +it('clears a completed login from snapshots while credential deletion is still settling', async () => { + const f = await fixture() + await f.account.startSignIn('en', f.callbackOrigin, 'desktop') + await f.wait('waiting-browser') + await fetch(f.callback(), { redirect: 'manual' }) + await f.wait('succeeded') + const original = f.ctx.credentials.deleteRecord.bind(f.ctx.credentials) + const removed = Promise.withResolvers() + const release = Promise.withResolvers() + const deletion = vi.spyOn(f.ctx.credentials, 'deleteRecord').mockImplementation(async (key) => { + await original(key) + removed.resolve(undefined) + await release.promise + }) + const signingOut = f.account.signOut() + try { + await removed.promise + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', attempt: null }) + } finally { + release.resolve(undefined) + await signingOut + deletion.mockRestore() + } +}) From 5590fbee7c2f22e8c1bc568d10d616f70685017c Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 17:22:45 +0800 Subject: [PATCH 26/60] fix(account): update sign-in dialog copy --- packages/client/ui-settings-account/src/client/locales.ts | 4 ++-- .../client/ui-settings-account/tests/expected/login-en.txt | 2 +- .../client/ui-settings-account/tests/expected/login-zh.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/client/ui-settings-account/src/client/locales.ts b/packages/client/ui-settings-account/src/client/locales.ts index 1c8a62192b..2893f9a842 100644 --- a/packages/client/ui-settings-account/src/client/locales.ts +++ b/packages/client/ui-settings-account/src/client/locales.ts @@ -3,7 +3,7 @@ export const en = { modelSignInRequired: 'Model unavailable. Please sign in and try again.', sessionExpired: 'You have signed out of your account, please log in again.', close: 'Close', addApiKey: 'Add API Key', retry: 'Sign in again', - loginTitle: 'Start creating', loginDescription: 'Sign in to create, edit, and share your design projects. Everything is saved locally.', + loginTitle: 'Get started', loginDescription: 'Sign in to your DeepSeek account or add an API Key to get started. Your projects and files are stored locally.', browserTitle: 'Waiting for sign in', browserPrompt: 'Page did not open automatically? ', copyLink: 'Copy sign-in link', copiedLink: 'Link copied', copyFailed: 'Copy failed', browserDescription: ', then open it in your browser to finish signing in.', timeoutTitle: 'Sign in timed out', timeoutDescription: 'Sign in again to continue.', @@ -33,7 +33,7 @@ export const zh: Record = { modelSignInRequired: '当前模型暂不可用,请登录后再试', sessionExpired: '登录信息已失效,请重新登录', close: '关闭', addApiKey: '添加 API Key', retry: '重新登录', - loginTitle: '开始你的创作', loginDescription: '登录后即可创建、编辑和分享你的设计项目,所有内容在本地保存。', + loginTitle: '开始使用', loginDescription: '登录 DeepSeek 账号,或添加 API Key,即可开始使用。你的项目和文件保存在本地。', browserTitle: '等待登录', browserPrompt: '没有自动打开新页面?', copyLink: '复制登录链接', copiedLink: '链接已复制', copyFailed: '复制失败', browserDescription: ',手动打开登录页完成登录。', timeoutTitle: '登录已超时', timeoutDescription: '请重新登录后继续操作。', diff --git a/packages/client/ui-settings-account/tests/expected/login-en.txt b/packages/client/ui-settings-account/tests/expected/login-en.txt index 342e89587c..ce50b4cb46 100644 --- a/packages/client/ui-settings-account/tests/expected/login-en.txt +++ b/packages/client/ui-settings-account/tests/expected/login-en.txt @@ -1 +1 @@ -Start creatingSign in to create, edit, and share your design projects. Everything is saved locally.Add API KeySign in +Get startedSign in to your DeepSeek account or add an API Key to get started. Your projects and files are stored locally.Add API KeySign in diff --git a/packages/client/ui-settings-account/tests/expected/login-zh.txt b/packages/client/ui-settings-account/tests/expected/login-zh.txt index 5cea375430..f06257b241 100644 --- a/packages/client/ui-settings-account/tests/expected/login-zh.txt +++ b/packages/client/ui-settings-account/tests/expected/login-zh.txt @@ -1 +1 @@ -开始你的创作登录后即可创建、编辑和分享你的设计项目,所有内容在本地保存。添加 API Key登录 +开始使用登录 DeepSeek 账号,或添加 API Key,即可开始使用。你的项目和文件保存在本地。添加 API Key登录 From 8e5866e7b06b3a9e7fe4ac3c7ad22a28fc937a62 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 17:23:39 +0800 Subject: [PATCH 27/60] fix(models): retain API-key provider catalogs without credentials --- packages/llm/llm-deepseek-api-key/README.i18n.yaml | 4 ++-- packages/llm/llm-deepseek-api-key/README.md | 4 ++-- packages/llm/llm-deepseek-api-key/README.zh.md | 4 ++-- packages/llm/llm-deepseek-api-key/src/index.ts | 5 ----- .../llm/llm-deepseek-api-key/tests/discovery.spec.ts | 10 ++++++---- packages/llm/llm-deepseek/README.i18n.yaml | 4 ++-- packages/llm/llm-deepseek/README.md | 2 +- packages/llm/llm-deepseek/README.zh.md | 2 +- .../llm/llm-deepseek/tests/account-routing.spec.ts | 6 +++--- packages/llm/llm-deepseek/tests/runtime.spec.ts | 2 +- packages/llm/llm-pi-ai/README.i18n.yaml | 4 ++-- packages/llm/llm-pi-ai/README.md | 2 -- packages/llm/llm-pi-ai/README.zh.md | 2 -- packages/llm/llm-pi-ai/src/adapter.ts | 9 ++------- packages/llm/llm-pi-ai/tests/adapter.spec.ts | 6 ++---- packages/llm/llm-pi-ai/tests/catalog.spec.ts | 2 +- 16 files changed, 27 insertions(+), 41 deletions(-) diff --git a/packages/llm/llm-deepseek-api-key/README.i18n.yaml b/packages/llm/llm-deepseek-api-key/README.i18n.yaml index 90a5acc362..8a9a98f3b0 100644 --- a/packages/llm/llm-deepseek-api-key/README.i18n.yaml +++ b/packages/llm/llm-deepseek-api-key/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek-api-key/README.md -README.md: 751e041f7aeba7c5969e54fc9a9e45c0417a9c61 -README.zh.md: 7caeaaaad0a9c8b0e93c27244e61fd7f8a6daaed +README.md: 728747d18b0128c94a1e708eae193def55a5df6e +README.zh.md: 5fb38c82ea7e563e1dea41170384f6f52ea756ee diff --git a/packages/llm/llm-deepseek-api-key/README.md b/packages/llm/llm-deepseek-api-key/README.md index 751e041f7a..728747d18b 100644 --- a/packages/llm/llm-deepseek-api-key/README.md +++ b/packages/llm/llm-deepseek-api-key/README.md @@ -23,7 +23,7 @@ Register authentication and model discovery for `deepseek-official`. This plugin ## Use this package -`apiKeyEnv` defaults to `DEEPSEEK_API_KEY` and resolves per request. When the credentials service exists, its precedence applies; only compositions without that service read the launch environment directly. Missing credentials fail with `MISSING_CREDENTIAL` and yield an empty catalog; malformed credentials fail with `INVALID_CREDENTIAL`. +`apiKeyEnv` defaults to `DEEPSEEK_API_KEY` and resolves per request. When the credentials service exists, its precedence applies; only compositions without that service read the launch environment directly. Requests with missing credentials fail with `MISSING_CREDENTIAL`; malformed credentials fail with `INVALID_CREDENTIAL`. Model discovery returns the configured catalog regardless of credentials. ```yaml - id: llm-deepseek @@ -40,7 +40,7 @@ The endpoint and credential reference come from one configuration resolution. In ## Understand the implementation -Registrations and listeners dispose with the plugin. Shared Host wiring supplies attachments, request extensions, anonymous identity, and atomic retry-policy updates; this plugin registers only its own route. No invariant companion is published: discovery derives directly from configuration and credentials without an independent copy. +Registrations and listeners dispose with the plugin. Shared Host wiring supplies attachments, request extensions, anonymous identity, and atomic retry-policy updates; this plugin registers only its own route. No invariant companion is published: discovery derives directly from configuration without an independent copy. ## Further Exploration diff --git a/packages/llm/llm-deepseek-api-key/README.zh.md b/packages/llm/llm-deepseek-api-key/README.zh.md index 7caeaaaad0..5fb38c82ea 100644 --- a/packages/llm/llm-deepseek-api-key/README.zh.md +++ b/packages/llm/llm-deepseek-api-key/README.zh.md @@ -23,7 +23,7 @@ kind: "package-reference" ## 使用此包 -`apiKeyEnv` 默认为 `DEEPSEEK_API_KEY`,在每次请求时解析凭据。已组合 credentials 服务时,按其优先级解析;只有未组合该服务时才直接读取启动环境。凭据缺失以 `MISSING_CREDENTIAL` 失败,模型目录为空;格式错误以 `INVALID_CREDENTIAL` 失败。 +`apiKeyEnv` 默认为 `DEEPSEEK_API_KEY`,在每次请求时解析凭据。已组合 credentials 服务时,按其优先级解析;只有未组合该服务时才直接读取启动环境。请求时凭据缺失以 `MISSING_CREDENTIAL` 失败;格式错误以 `INVALID_CREDENTIAL` 失败。模型发现始终返回配置的目录,不依赖凭据。 ```yaml - id: llm-deepseek @@ -40,7 +40,7 @@ kind: "package-reference" ## 理解实现 -注册和监听随插件生命周期释放。共享 Host 绑定提供附件访问、请求扩展、匿名标识和重试策略的原子更新;本包只注册自己的路由。无需 invariant companion:目录直接由同一次配置和凭据读取派生,不维护独立副本。 +注册和监听随插件生命周期释放。共享 Host 绑定提供附件访问、请求扩展、匿名标识和重试策略的原子更新;本包只注册自己的路由。无需 invariant companion:目录直接由配置派生,不维护独立副本。 ## 进一步探索 diff --git a/packages/llm/llm-deepseek-api-key/src/index.ts b/packages/llm/llm-deepseek-api-key/src/index.ts index ebcba71b54..128ede2b6f 100644 --- a/packages/llm/llm-deepseek-api-key/src/index.ts +++ b/packages/llm/llm-deepseek-api-key/src/index.ts @@ -40,11 +40,6 @@ export function apply(ctx: Context, config: Config): void { options, resolveApiKey, providerName: 'DeepSeek', discoverModels: async (provider) => { const connection = options() - try { await resolveApiKey(connection) } - catch (error) { - if (error instanceof LlmError && error.code === 'MISSING_CREDENTIAL') return [] - throw error - } return connection.models.map(model => catalogModelInfo(provider, model)) }, }) diff --git a/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts b/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts index 1a55ded9d5..bac1caa441 100644 --- a/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts +++ b/packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts @@ -1,16 +1,18 @@ -/** Discovery preserves actionable credential failures. */ +/** The configured model catalog is independent of request credentials. */ import { Context } from '@deepseek-ai/cordis' import LlmRuntime from '@deepseek-ai/dsh-llm' import { expect, it, vi } from 'vitest' import * as ApiKey from '../src/index.ts' -it('reports malformed API keys instead of advertising an empty catalog', async () => { - vi.stubEnv('DEEPSEEK_API_KEY', 'invalid\nheader') +it.each(['', 'invalid\nheader'])('advertises configured models without a usable API key: %j', async (key) => { + vi.stubEnv('DEEPSEEK_API_KEY', key) const ctx = new Context() try { await ctx.plugin(LlmRuntime) await ctx.plugin(ApiKey, {}) - await expect(ctx.llm.listModels('deepseek-official')).rejects.toMatchObject({ code: 'INVALID_CREDENTIAL' }) + expect(await ctx.llm.listModels('deepseek-official')).toEqual(expect.arrayContaining([ + expect.objectContaining({ provider: 'deepseek-official', id: 'deepseek-flash' }), + ])) } finally { await ctx.fiber.dispose() vi.unstubAllEnvs() diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 0d8cde2270..6aaafef79d 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 96fe78a4375cef56814923011c8b7589fe23cf7e -README.zh.md: b63660c30ba1f13a54fd5da2e8360b318bea05c7 +README.md: 5e569f3bf63e0280112861843d00d48516d5e23c +README.zh.md: 9df5b417e33a229ced1fdc059e957204841de01b diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 96fe78a437..5e569f3bf6 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -115,7 +115,7 @@ Successful Files responses must contain valid JSON. JSON decoding failures from Non-2xx responses fail with stable codes: `AUTH` (401/403), `QUOTA`, `RATE_LIMIT`, `CONTEXT_WINDOW_EXCEEDED`, `INVALID_REQUEST`, `SERVER`, and `HTTP_` otherwise; pre-response transport failures throw `TRANSPORT`, caller aborts throw `ABORTED`, and stream-idle expiry throws `TIMEOUT`. Request-extension preparation, field collision, or post-2xx acceptance fails with `REQUEST_EXTENSION`. A normalized-image rejection names every plausible attachment and its durable position when the provider does not identify a file id. Stale-file rejection invalidates the named mappings (or every mapping used by the attempt) and permits one replacement model request. Protocol violations throw `STREAM_CLOSED` or `MALFORMED_RESPONSE`, and a terminal `stop` with no content blocks becomes `EMPTY_RESPONSE`, which the default retry policy retries. A request on the official route without an API key fails with `MISSING_CREDENTIAL`, and a malformed credential fails with `INVALID_CREDENTIAL` naming the reference to fix — never any part of the key. -Provider plugins own credential-gated discovery. Their catalogs are configured independently; the transport supplies shared default model metadata and capability resolution. +Provider plugins own catalog availability; only the account route requires a stored grant for discovery. Their catalogs are configured independently; the transport supplies shared default model metadata and capability resolution. ----- diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index b63660c30b..9df5b417e3 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -115,7 +115,7 @@ Files 模式通过 `maxRequestFilesBytes` 与 `maxImagesPerRequest` 限制保留 非 2xx 响应以稳定 code 失败:`AUTH`(401/403)、`QUOTA`、`RATE_LIMIT`、`CONTEXT_WINDOW_EXCEEDED`、`INVALID_REQUEST`、`SERVER` 以及其他情况的 `HTTP_`;响应前传输失败抛出 `TRANSPORT`,调用方中止抛出 `ABORTED`,流空闲超时抛出 `TIMEOUT`。请求扩展准备、字段冲突或 2xx 后接受失败使用 `REQUEST_EXTENSION`。当提供方未指出 file id 时,规范化图片拒绝会列出所有可能附件及其持久位置。陈旧文件拒绝会使点名映射(或该次尝试使用的全部映射)失效,并允许一次替换模型请求。协议违规抛出 `STREAM_CLOSED` 或 `MALFORMED_RESPONSE`;不带内容块的终止 `stop` 变成 `EMPTY_RESPONSE`,默认重试策略会重试它。官方路由缺少 API Key 的请求以 `MISSING_CREDENTIAL` 失败;格式错误的凭据以 `INVALID_CREDENTIAL` 失败,并点名需要修复的引用——绝不包含密钥的任何部分。 -provider 插件拥有按凭据可用性过滤的模型发现。两者的目录独立配置;传输层提供共享的默认模型元数据和能力解析。 +提供方插件负责目录可用性;仅账号路由要求存有凭据才能发现模型。两者的目录独立配置;传输层提供共享的默认模型元数据和能力解析。 ----- diff --git a/packages/llm/llm-deepseek/tests/account-routing.spec.ts b/packages/llm/llm-deepseek/tests/account-routing.spec.ts index 9c53e02a08..74c0996d50 100644 --- a/packages/llm/llm-deepseek/tests/account-routing.spec.ts +++ b/packages/llm/llm-deepseek/tests/account-routing.spec.ts @@ -220,16 +220,16 @@ it('cancels an account child without stopping its API-key parent', async () => { await parent.whenIdle() }) -it('advertises account and API-key models only while their own credential is available', async () => { +it('hides signed-out account models while retaining the official catalog without an API key', async () => { vi.stubEnv('DEEPSEEK_API_KEY', '') const ctx = await harness() let token: string | undefined ctx.provide('deepseekAccount', { resolveToken: async (url: string) => new URL(url).origin === 'https://api.deepseek.com' ? token : undefined } as DeepSeekAccount) expect(await ctx.llm.listModels('deepseek-account')).toEqual([]) - expect(await ctx.llm.listModels('deepseek-official')).toEqual([]) + expect(await ctx.llm.listModels('deepseek-official')).not.toHaveLength(0) token = 'fixture-account-token' expect(await ctx.llm.listModels('deepseek-account')).not.toHaveLength(0) - expect(await ctx.llm.listModels('deepseek-official')).toEqual([]) + expect(await ctx.llm.listModels('deepseek-official')).not.toHaveLength(0) vi.stubEnv('DEEPSEEK_API_KEY', 'fixture-key') expect(await ctx.llm.listModels('deepseek-official')).not.toHaveLength(0) token = undefined diff --git a/packages/llm/llm-deepseek/tests/runtime.spec.ts b/packages/llm/llm-deepseek/tests/runtime.spec.ts index 2710895838..447ceabd3e 100644 --- a/packages/llm/llm-deepseek/tests/runtime.spec.ts +++ b/packages/llm/llm-deepseek/tests/runtime.spec.ts @@ -2170,7 +2170,7 @@ describe('plugin registration and config', () => { await ctx.plugin(LlmRuntime) await ctx.plugin(LlmDeepSeek, { baseURL: 'http://127.0.0.1:1' }) expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }]) - await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(0) + await expect(ctx.llm.listModels('deepseek-official')).resolves.toHaveLength(2) const first = await assemble(ctx, { model: 'deepseek-flash', messages: [] }) expect(first.finish).toMatchObject({ kind: 'error', failure: { code: 'MISSING_CREDENTIAL' } }) // The guidance leads with the managed credential store. diff --git a/packages/llm/llm-pi-ai/README.i18n.yaml b/packages/llm/llm-pi-ai/README.i18n.yaml index 2ad742a6dd..c5fbc218d7 100644 --- a/packages/llm/llm-pi-ai/README.i18n.yaml +++ b/packages/llm/llm-pi-ai/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-pi-ai/README.md -README.md: c69dc0ca52c27973d7bf157e56b8f18bf39bec00 -README.zh.md: 41b8b7a3e12baba065ed119777382110e5bd05a6 +README.md: 7b1708b957202369382d8a93b2bbcefd31565f67 +README.zh.md: ed780ad235b1d8df2b821be6a0595ecd8b8e951b diff --git a/packages/llm/llm-pi-ai/README.md b/packages/llm/llm-pi-ai/README.md index c69dc0ca52..7b1708b957 100644 --- a/packages/llm/llm-pi-ai/README.md +++ b/packages/llm/llm-pi-ai/README.md @@ -120,8 +120,6 @@ Config updates strictly validate changed providers. Initial loading retains stor Changing `displayName`, `apiKeyEnv`, or `baseURL` without resolving the provider's model errors still rejects the save. For example, renaming an OpenRouter route whose model `111` needs an `api` cannot be saved on its own: repair or remove that model in the same editor draft, then save the complete provider configuration. Intermediate repairs remain in the draft until the whole provider validates; other providers can be saved independently. -Model discovery resolves each route’s credential configuration. A missing required credential yields an empty catalog; other resolution errors propagate. Routes with native authentication or no required key retain their configured catalog. This check does not probe the inference endpoint. - ----- diff --git a/packages/llm/llm-pi-ai/README.zh.md b/packages/llm/llm-pi-ai/README.zh.md index 41b8b7a3e1..ed780ad235 100644 --- a/packages/llm/llm-pi-ai/README.zh.md +++ b/packages/llm/llm-pi-ai/README.zh.md @@ -120,8 +120,6 @@ Config 更新严格验证发生变化的 provider。初始加载将已存储的 只修改 `displayName`、`apiKeyEnv` 或 `baseURL` 而未解决提供方的模型配置错误时,保存仍会被拒绝。例如,OpenRouter 路由的模型 `111` 缺少 `api` 时,不能单独保存路由名称的修改:需要在同一份编辑草稿中修复或删除该模型,再保存完整的提供方配置。中间修复状态保留在草稿中,直到整条提供方配置通过校验;其他提供方可以独立保存。 -模型发现会解析各路由的凭据配置。缺少必需凭据时返回空目录;其他解析错误继续抛出。使用原生认证或无需密钥的路由保留其配置的目录。此检查不会探测推理端点。 - ----- diff --git a/packages/llm/llm-pi-ai/src/adapter.ts b/packages/llm/llm-pi-ai/src/adapter.ts index 3370e1ffcc..de9f3e0e42 100644 --- a/packages/llm/llm-pi-ai/src/adapter.ts +++ b/packages/llm/llm-pi-ai/src/adapter.ts @@ -274,14 +274,9 @@ export class PiAiAdapter extends LlmAdapter { } override listModels(provider: string): Promise { - return Promise.resolve().then(async () => { + return Promise.resolve().then(() => { const snapshot = this.current() - const profile = this.profileOf(snapshot, provider) - try { await this.config.resolveApiKey(provider, profile) } - catch (error) { - if (error instanceof LlmError && error.code === 'MISSING_CREDENTIAL') return [] - throw error - } + this.profileOf(snapshot, provider) return snapshot.models.getModels(provider).map(model => ({ provider, id: model.id, diff --git a/packages/llm/llm-pi-ai/tests/adapter.spec.ts b/packages/llm/llm-pi-ai/tests/adapter.spec.ts index 0fe90c4e58..58b8d6afec 100644 --- a/packages/llm/llm-pi-ai/tests/adapter.spec.ts +++ b/packages/llm/llm-pi-ai/tests/adapter.spec.ts @@ -1039,13 +1039,11 @@ it.each([ new LlmError('missing credential', 'MISSING_CREDENTIAL'), new LlmError('invalid credential', 'INVALID_CREDENTIAL'), new Error('credential storage failed'), -])('distinguishes missing credentials from catalog failures: $message', async (error) => { +])('retains its configured catalog independently of credential failures: $message', async (error) => { const adapter = new PiAiAdapter({ profiles: () => resolveProfiles({ deepseek: { apiKeyEnv: 'PI_TEST_KEY' } }), resolveApiKey: () => Promise.reject(error), auth: memoryAuth(), }) - if (error instanceof LlmError && error.code === 'MISSING_CREDENTIAL') { - expect(await adapter.listModels('deepseek')).toEqual([]) - } else await expect(adapter.listModels('deepseek')).rejects.toBe(error) + expect(await adapter.listModels('deepseek')).not.toHaveLength(0) }) diff --git a/packages/llm/llm-pi-ai/tests/catalog.spec.ts b/packages/llm/llm-pi-ai/tests/catalog.spec.ts index 155291f594..e574461018 100644 --- a/packages/llm/llm-pi-ai/tests/catalog.spec.ts +++ b/packages/llm/llm-pi-ai/tests/catalog.spec.ts @@ -1126,7 +1126,7 @@ describe('resolution snapshots', () => { profiles: () => current, // Credential resolution is the real await inside a stream call, and the // window a configuration change has to land in. - resolveApiKey: async (provider) => { if (provider === 'deepseek') await held; return 'k' }, + resolveApiKey: async () => { await held; return 'k' }, auth: memoryAuth(), }) From 8f180cf45f6c9f686958dcb67afd4d3d8847f20f Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 17:26:01 +0800 Subject: [PATCH 28/60] fix(account): deliver credential expiry notices without replay --- apps/desktop/src/account-backend.ts | 22 +++++---- apps/desktop/src/main.ts | 13 ++++- apps/desktop/tests/account-backend.spec.ts | 47 +++++++++++++++++-- .../tests/welcome-renderer.client.spec.tsx | 4 +- apps/desktop/tests/welcome-startup.spec.ts | 15 ++++-- docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 3 +- docs/event-producer-consumer.zh.md | 3 +- docs/subsystems/credentials.i18n.yaml | 4 +- docs/subsystems/credentials.md | 17 ++++++- docs/subsystems/credentials.zh.md | 17 ++++++- .../api/account-controller/README.i18n.yaml | 4 +- packages/api/account-controller/README.md | 2 + packages/api/account-controller/README.zh.md | 2 + packages/api/account-controller/src/index.ts | 22 +++++++++ .../tests/controller.spec.ts | 19 +++++++- packages/api/remotes/src/remote-events.ts | 1 + .../ui-settings-account/README.i18n.yaml | 4 +- packages/client/ui-settings-account/README.md | 2 +- .../client/ui-settings-account/README.zh.md | 2 +- .../src/client/AccountMenu.tsx | 6 +-- .../src/client/AccountSection.tsx | 5 ++ .../ui-settings-account/src/client/index.ts | 1 + .../tests/account.client.spec.tsx | 16 +++++-- .../README.i18n.yaml | 4 +- .../deepseek-account-platform/README.md | 2 +- .../deepseek-account-platform/README.zh.md | 2 +- .../deepseek-account-platform/src/index.ts | 9 +--- .../tests/account.spec.ts | 29 ++++++++---- .../deepseek-account/README.i18n.yaml | 4 +- .../credentials/deepseek-account/README.md | 2 +- .../credentials/deepseek-account/README.zh.md | 2 +- .../credentials/deepseek-account/src/index.ts | 2 +- .../credentials/deepseek-account/src/types.ts | 6 ++- .../extensions/tool-cordis/src/api-catalog.ts | 12 ++++- 35 files changed, 238 insertions(+), 71 deletions(-) diff --git a/apps/desktop/src/account-backend.ts b/apps/desktop/src/account-backend.ts index 7b60e55db7..d816de55fc 100644 --- a/apps/desktop/src/account-backend.ts +++ b/apps/desktop/src/account-backend.ts @@ -20,9 +20,6 @@ export function accountView(value: unknown): AccountView { } validateBrowserDestination(value.links.usageUrl) validateBrowserDestination(value.links.topUpUrl) - if ('signOutReason' in value && value.signOutReason !== 'expired') { - throw new Error('desktop account: invalid sign-out reason') - } const attempt = value.attempt if (attempt !== null && (typeof attempt !== 'object' || !('id' in attempt) || typeof attempt.id !== 'string' || !('phase' in attempt) || !['initializing', 'waiting-browser', 'exchanging', 'committing', 'succeeded', 'cancelled', 'expired', 'failed'].includes(String(attempt.phase)) @@ -37,7 +34,6 @@ export function accountView(value: unknown): AccountView { const parsed = value as AccountView return { status: parsed.status, - ...parsed.signOutReason === undefined ? {} : { signOutReason: parsed.signOutReason }, links: { usageUrl: parsed.links.usageUrl, topUpUrl: parsed.links.topUpUrl }, attempt: parsed.attempt === null ? null : { id: parsed.attempt.id, phase: parsed.attempt.phase, @@ -67,8 +63,13 @@ export interface DesktopAccountBackend { cancel(id: SignInAttemptId): Promise /** @returns state after local sign-out. */ signOut(): Promise - /** @param listener - state recipient. @param failed - stream failure recipient. @returns stream disposer. */ - watch(listener: (state: AccountView) => void, failed: () => void): () => void + /** + * @param listener - state recipient. + * @param failed - stream failure recipient. + * @param expired - live credential-expiry recipient. + * @returns stream disposer. + */ + watch(listener: (state: AccountView) => void, failed: () => void, expired: () => void): () => void } /** @@ -84,22 +85,27 @@ export function desktopAccountBackend(origin: string, invoke: AccountInvoke, coo return { state: () => call('getState'), start: locale => call('startSignIn', { locale, callbackOrigin: new URL(origin).origin, loginSource: 'desktop' }), cancel: attemptId => call('cancelSignIn', { attemptId }), signOut: () => call('signOut'), - watch(listener, failed) { + watch(listener, failed, expired) { let closed = false let socket: WebSocket | undefined let retry: ReturnType | undefined const connect = (): void => { const streamId = randomUUID() + const expiryStreamId = randomUUID() void cookies().then((cookie) => { if (closed) return const url = new URL(REMOTE_STREAM_MUX_PATH, origin) url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:' socket = new WebSocket(url, { headers: { cookie, origin }, maxPayload: 65_536 }) - socket.on('open', () => socket?.send(JSON.stringify({ type: 'open', streamId, endpoint: 'account/watch', payload: { args: {} } }))) + socket.on('open', () => { + socket?.send(JSON.stringify({ type: 'open', streamId: expiryStreamId, endpoint: 'account/watchExpiry', payload: { args: {} } })) + socket?.send(JSON.stringify({ type: 'open', streamId, endpoint: 'account/watch', payload: { args: {} } })) + }) socket.on('message', (data) => { try { const bytes = Array.isArray(data) ? Buffer.concat(data) : Buffer.isBuffer(data) ? data : Buffer.from(data) const frame = parseRemoteStreamServerMessage(bytes.toString('utf8')) + if (frame.streamId === expiryStreamId && frame.type === 'item' && frame.value === 'session-expired') { expired(); return } if (frame.streamId !== streamId) throw new Error('desktop account: unexpected stream') if (frame.type === 'item') listener(accountView(frame.value)) else socket?.close() diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 660241dc79..2cc70495a3 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -383,7 +383,8 @@ async function main(): Promise { injections = ready.injections welcomeBackend = await connectDesktopWelcome(ready.url, (input, init) => net.fetch(input, init), async () => (await session.defaultSession.cookies.get({ url: ready.url })).map(cookie => `${cookie.name}=${cookie.value}`).join('; ')) stopAccount?.() - stopAccount = welcomeBackend.account.watch((state) => { + const accountBackend = welcomeBackend.account + stopAccount = accountBackend.watch((state) => { if (quitting) return if (welcomeWindow !== undefined && !welcomeWindow.isDestroyed()) welcomeWindow.webContents.send(WELCOME_IPC.state, state) const attempt = state.attempt @@ -399,7 +400,6 @@ async function main(): Promise { if (previousAccountStatus === 'credential-stored' && state.status === 'signed-out') { void readWelcomeState().then(async (value) => { if (needsWelcome(value) && !quitting) { - if (state.signOutReason === 'expired') pendingWelcomeNotice = 'session-expired' enteredWorkspace = false await showWelcome() if (welcomeWindow !== undefined && !welcomeWindow.isDestroyed()) welcomeWindow.webContents.send(WELCOME_IPC.state, state) @@ -410,6 +410,15 @@ async function main(): Promise { previousAccountStatus = state.status }, () => { // The stream reconnects; a transport failure does not change account state. + }, () => { + void readWelcomeState().then(async (value) => { + if (!needsWelcome(value) || quitting) return + pendingWelcomeNotice = 'session-expired' + enteredWorkspace = false + await showWelcome() + const state = await accountBackend.state() + if (welcomeWindow !== undefined && !welcomeWindow.isDestroyed()) welcomeWindow.webContents.send(WELCOME_IPC.state, state) + }).catch(() => undefined) }) }, stop: async () => { diff --git a/apps/desktop/tests/account-backend.spec.ts b/apps/desktop/tests/account-backend.spec.ts index 11217454ac..48dd4e3133 100644 --- a/apps/desktop/tests/account-backend.spec.ts +++ b/apps/desktop/tests/account-backend.spec.ts @@ -1,4 +1,6 @@ -import { expect, it } from 'vitest' +import { once } from 'node:events' +import { WebSocketServer } from 'ws' +import { expect, it, onTestFinished, vi } from 'vitest' import { accountView, desktopAccountBackend } from '../src/account-backend.ts' it('projects only safe account fields and refuses non-browser authorization schemes', () => { @@ -25,9 +27,44 @@ it('uses account Remote commands without returning additional wire fields', asyn expect(requests).toEqual([{ namespace: 'account', method: 'startSignIn', args: { locale: 'en', callbackOrigin: 'http://127.0.0.1:1234', loginSource: 'desktop' } }]) }) -it('preserves the safe expiration reason and rejects unknown reasons', () => { - const state = { status: 'signed-out', attempt: null, signOutReason: 'expired', +it('does not replay an expiry reason from an account snapshot', () => { + const state = { status: 'signed-out', attempt: null, links: { usageUrl: 'https://platform.deepseek.com/usage', topUpUrl: 'https://platform.deepseek.com/top_up' } } - expect(accountView(state)).toEqual(state) - expect(() => accountView({ ...state, signOutReason: 'unexpected' })).toThrow('invalid sign-out reason') + expect(accountView({ ...state, signOutReason: 'expired' })).toEqual(state) +}) + +it('receives live expiry separately from account snapshots', async () => { + const server = new WebSocketServer({ host: '127.0.0.1', port: 0 }) + await once(server, 'listening') + onTestFinished(async () => { + for (const client of server.clients) client.terminate() + await new Promise((resolve, reject) => { server.close(error => error ? reject(error) : resolve()) }) + }) + const address = server.address() + if (typeof address === 'string' || address === null) throw new Error('missing server address') + const connected = once(server, 'connection') + const expired = vi.fn() + const snapshot = { status: 'signed-out', attempt: null, + links: { usageUrl: 'https://platform.deepseek.com/usage', topUpUrl: 'https://platform.deepseek.com/top_up' } } + const received = Promise.withResolvers() + const backend = desktopAccountBackend(`http://127.0.0.1:${address.port}`, () => Promise.resolve(snapshot), () => Promise.resolve('')) + const stop = backend.watch((value) => { expect(value).toEqual(snapshot); received.resolve(undefined) }, vi.fn(), expired) + onTestFinished(stop) + await connected + // Both logical streams share the socket; observe their opening frames before sending data. + const streams = new Map() + const opened = Promise.withResolvers() + const socket = [...server.clients][0]! + socket.on('message', (data) => { + const frame = JSON.parse(data.toString()) as { endpoint: string; streamId: string } + streams.set(frame.endpoint, frame.streamId) + if (streams.size === 2) opened.resolve(undefined) + }) + await opened.promise + socket.send(JSON.stringify({ type: 'item', streamId: streams.get('account/watch'), value: snapshot })) + await received.promise + expect(expired).not.toHaveBeenCalled() + socket.send(JSON.stringify({ type: 'item', streamId: streams.get('account/watchExpiry'), value: 'session-expired' })) + await vi.waitFor(() => { expect(expired).toHaveBeenCalledOnce() }) + stop() }) diff --git a/apps/desktop/tests/welcome-renderer.client.spec.tsx b/apps/desktop/tests/welcome-renderer.client.spec.tsx index 1a39123d19..ee0f06fb09 100644 --- a/apps/desktop/tests/welcome-renderer.client.spec.tsx +++ b/apps/desktop/tests/welcome-renderer.client.spec.tsx @@ -269,7 +269,7 @@ it.each(['zh-CN', 'en'])('keeps the expiry notice visible after returning to Wel const view = mount(language, takeNotice) await act(async () => {}) const publish = view.api.onAccountState.mock.calls[0]![0] - const expired: AccountView = { status: 'signed-out', signOutReason: 'expired', attempt: null, + const expired: AccountView = { status: 'signed-out', attempt: null, links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' } } await act(async () => { publish(expired) }) const notice = screen.getByRole('alert') @@ -290,7 +290,7 @@ it.each(['zh-CN', 'en'])('keeps the expiry notice visible after returning to Wel it('does not infer a notification from a retained expired account snapshot', async () => { const view = mount() await act(async () => { - view.api.onAccountState.mock.calls[0]![0]({ status: 'signed-out', signOutReason: 'expired', attempt: null, + view.api.onAccountState.mock.calls[0]![0]({ status: 'signed-out', attempt: null, links: { usageUrl: 'http://localhost/usage', topUpUrl: 'http://localhost/top_up' } }) }) expect(screen.queryByRole('alert')).toBeNull() diff --git a/apps/desktop/tests/welcome-startup.spec.ts b/apps/desktop/tests/welcome-startup.spec.ts index 0d19f78585..b2d18224d4 100644 --- a/apps/desktop/tests/welcome-startup.spec.ts +++ b/apps/desktop/tests/welcome-startup.spec.ts @@ -14,6 +14,7 @@ const state = vi.hoisted(() => ({ beforeRead: vi.fn(async () => {}), beforeWelcome: vi.fn(async () => {}), copy: vi.fn(), + expiryListener: undefined as (() => void) | undefined, accountListener: undefined as ((value: AccountView) => void) | undefined, accountState: vi.fn<() => Promise>().mockResolvedValue({ status: 'signed-out', attempt: null, links: { usageUrl: '', topUpUrl: '' }, @@ -120,7 +121,11 @@ vi.mock('../src/welcome-backend.ts', () => ({ }, save: async () => ({ ok: true }), account: { - watch: (listener: (value: AccountView) => void) => { state.accountListener = listener; return () => {} }, + watch: (listener: (value: AccountView) => void, _failed: () => void, expired: () => void) => { + state.accountListener = listener + state.expiryListener = expired + return () => {} + }, state: state.accountState, }, }), @@ -239,17 +244,19 @@ it('starts the Host for welcome onboarding and opens the workspace on skip witho const welcomeCount = state.beforeWelcome.mock.calls.length state.hasApiKey = true state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) - state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null }) + state.expiryListener!() await vi.advanceTimersByTimeAsync(0) expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount) expect(await state.operations!.takeNotice()).toBeUndefined() state.hasApiKey = false state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) - state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null }) + state.expiryListener!() await vi.waitFor(() => { expect(state.beforeWelcome).toHaveBeenCalledTimes(welcomeCount + 1) }) expect(await state.operations!.takeNotice()).toBe('session-expired') expect(await state.operations!.takeNotice()).toBeUndefined() - state.accountListener!({ ...account, status: 'signed-out', attempt: null, signOutReason: 'expired' }) + state.accountListener!({ ...account, status: 'signed-out', attempt: null }) await vi.advanceTimersByTimeAsync(0) expect(await state.operations!.takeNotice()).toBeUndefined() state.accountListener!({ ...account, status: 'credential-stored', attempt: null }) diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index 081eff2e79..7b80ba2548 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/event-producer-consumer.md -event-producer-consumer.md: 9db87ff7725beda6d0aa22c7fea301bab3fd9a5c -event-producer-consumer.zh.md: 6d45f01d4cc79d4b746d2f757d05a32d0a2a79ce +event-producer-consumer.md: 0b9d154a8c3eb56b6a0334b66eee2314ea0b1c41 +event-producer-consumer.zh.md: 1662f00f62af1898f4ed431b62f9402341d836e3 diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 9db87ff772..0b9d154a8c 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -40,7 +40,8 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | -| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:57`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:59`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/session-expired` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:55`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | `account-controller`, `remotes` | | `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:12`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`deepseek-account`](../packages/credentials/deepseek-account) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | | `feedback/committed` | `parallel` | [`packages/feedback/message-feedback/src/index.ts:58`](../packages/feedback/message-feedback/src/index.ts) | [`message-feedback`](../packages/feedback/message-feedback) (`parallel`) | [`session-telemetry-otel`](../packages/session/session-telemetry-otel) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index 6d45f01d4c..1662f00f62 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -42,7 +42,8 @@ | `cordis/request-run-resolved` | `emit` | [`packages/extensions/cordis-host-runner/src/types.ts:374`](../packages/extensions/cordis-host-runner/src/types.ts) | [`cordis-host-runner`](../packages/extensions/cordis-host-runner) (`emit`) | `remotes` | | `credentials/record-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:102`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`authorization`](../packages/credentials/authorization), [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform), `remotes` | | `credentials/reference-updated` | `emit` | [`packages/credentials/credentials/src/types.ts:90`](../packages/credentials/credentials/src/types.ts) | [`credentials`](../packages/credentials/credentials) (`events.dispatch`) | [`credentials`](../packages/credentials/credentials), `remotes` | -| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:57`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/model-sign-in-required` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:59`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account`](../packages/credentials/deepseek-account) (`emit`) | `remotes` | +| `deepseek-account/session-expired` | `emit` | [`packages/credentials/deepseek-account/src/types.ts:55`](../packages/credentials/deepseek-account/src/types.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | `account-controller`, `remotes` | | `deepseek-account/signed-out` | `emit` | [`packages/credentials/deepseek-account/src/index.ts:12`](../packages/credentials/deepseek-account/src/index.ts) | [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) (`emit`) | [`deepseek-account`](../packages/credentials/deepseek-account) | | `domain/changed` | `emit` | [`packages/storage/storage-domain/src/events.ts:46`](../packages/storage/storage-domain/src/events.ts) | [`storage-domain`](../packages/storage/storage-domain) (`emit`) | [`storage-domain`](../packages/storage/storage-domain), [`workspace`](../packages/workspace/workspace), `workspace-controller` | | `feedback/committed` | `parallel` | [`packages/feedback/message-feedback/src/index.ts:58`](../packages/feedback/message-feedback/src/index.ts) | [`message-feedback`](../packages/feedback/message-feedback) (`parallel`) | [`session-telemetry-otel`](../packages/session/session-telemetry-otel) | diff --git a/docs/subsystems/credentials.i18n.yaml b/docs/subsystems/credentials.i18n.yaml index 12c977de99..39b3981c62 100644 --- a/docs/subsystems/credentials.i18n.yaml +++ b/docs/subsystems/credentials.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/subsystems/credentials.md -credentials.md: 46427bd45c50a9ecee173ba05528339692abbb7f -credentials.zh.md: 1c3e6f3d16e08fe06376f77ff79df3ffcc208cde +credentials.md: 341c554f3a59fa87a6a783edc379aeb1f9c1c985 +credentials.zh.md: 33994d405fda20aae2bd5785e2a7a408cc40b370 diff --git a/docs/subsystems/credentials.md b/docs/subsystems/credentials.md index 46427bd45c..341c554f3a 100644 --- a/docs/subsystems/credentials.md +++ b/docs/subsystems/credentials.md @@ -323,7 +323,7 @@ abstract resolveToken(url: string): Promise /** * Remove an inference-rejected token only while it still matches the stored login. * @param token - token captured by the rejected inference request. - * @returns after matching credentials are removed and expiry state is published. + * @returns after matching credentials are removed and the expiry notification is emitted. */ abstract rejectToken(token: string): Promise @@ -429,6 +429,21 @@ An account model request requires the user to sign in. Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + + +#### `deepseek-account/session-expired` — emit + +Server rejection removed the current account credential; this notification is not replayed. + +```ts cordis-catalog +/** Server rejection removed the current account credential; this notification is not replayed. + * @mode emit + */ +'deepseek-account/session-expired'(): void +``` + +Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + #### `deepseek-account/signed-out` — emit diff --git a/docs/subsystems/credentials.zh.md b/docs/subsystems/credentials.zh.md index 1c3e6f3d16..33994d405f 100644 --- a/docs/subsystems/credentials.zh.md +++ b/docs/subsystems/credentials.zh.md @@ -323,7 +323,7 @@ abstract resolveToken(url: string): Promise /** * Remove an inference-rejected token only while it still matches the stored login. * @param token - token captured by the rejected inference request. - * @returns after matching credentials are removed and expiry state is published. + * @returns after matching credentials are removed and the expiry notification is emitted. */ abstract rejectToken(token: string): Promise @@ -429,6 +429,21 @@ An account model request requires the user to sign in. Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + + +#### `deepseek-account/session-expired` — emit + +Server rejection removed the current account credential; this notification is not replayed. + +```ts cordis-catalog +/** Server rejection removed the current account credential; this notification is not replayed. + * @mode emit + */ +'deepseek-account/session-expired'(): void +``` + +Source: [`packages/credentials/deepseek-account/src/types.ts`](../../packages/credentials/deepseek-account/src/types.ts) + #### `deepseek-account/signed-out` — emit diff --git a/packages/api/account-controller/README.i18n.yaml b/packages/api/account-controller/README.i18n.yaml index 8cd04c057c..ba715931d6 100644 --- a/packages/api/account-controller/README.i18n.yaml +++ b/packages/api/account-controller/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/api/account-controller/README.md -README.md: a5d3405353245335a45a26eedc4e4281cf045ecb -README.zh.md: 353d79fac4ab0a01a659d9f1ad9d2944fe01f735 +README.md: 3cc6a7d9bb090868189cb0901ecdeb7045808394 +README.zh.md: 3656b38149188924e7d71abceb52166a47033717 diff --git a/packages/api/account-controller/README.md b/packages/api/account-controller/README.md index a5d3405353..3cc6a7d9bb 100644 --- a/packages/api/account-controller/README.md +++ b/packages/api/account-controller/README.md @@ -22,6 +22,8 @@ Account screens use authenticated Remote commands and a snapshot stream. The con The account namespace exposes getState, getProfile / getBalance, startSignIn, cancelSignIn, signOut, and watch. watch emits an initial complete state and subsequent complete states; disconnecting stops observation, not the login attempt. Cancellation names the attempt ID so a stale screen cannot cancel a newer login. +`watchExpiry` delivers live credential-expiry notifications without an initial item or replay. Desktop uses this stream to hand off a one-shot toast when switching to Welcome. + `hasRunningAccountTasks` checks running Agents through the account-owned predicate over their latest logged request context, including tools and retries. Idle Agents and API-key contexts are excluded. The account provider independently cancels matching tasks when credentials are removed. diff --git a/packages/api/account-controller/README.zh.md b/packages/api/account-controller/README.zh.md index 353d79fac4..3656b38149 100644 --- a/packages/api/account-controller/README.zh.md +++ b/packages/api/account-controller/README.zh.md @@ -22,6 +22,8 @@ kind: "package-reference" account 命名空间提供 getState、getProfile / getBalance、startSignIn、cancelSignIn、signOut 和 watch。watch 先发送完整初始状态,随后发送完整状态变化;断开连接只停止观察,不取消登录。取消操作必须指定尝试 ID,防止旧页面取消新登录。 +`watchExpiry` 仅发送实时凭据失效通知,不发送初始值,也不重放历史通知。桌面端通过该流,在切换到 Welcome 时交接一次性 toast。 + `hasRunningAccountTasks` 通过账号模块的判断函数,检查运行中 Agent 最近记录的请求上下文,包括工具和重试阶段。空闲 Agent 及 API key 上下文不计入。移除凭据时,账号提供方独立取消匹配任务。 diff --git a/packages/api/account-controller/src/index.ts b/packages/api/account-controller/src/index.ts index d713673499..f42e2f752a 100644 --- a/packages/api/account-controller/src/index.ts +++ b/packages/api/account-controller/src/index.ts @@ -59,6 +59,28 @@ export class AccountController extends TypertRemoteService { */ @Remote signOut(): Promise { return this.ctx.deepseekAccount.signOut() } + /** + * Subscribe to credential expiry without replaying prior notifications. + * @param signal - stream lifetime. + * @returns notifications emitted while subscribed. + */ + @Remote({ mode: 'stream' }) + async *watchExpiry(signal: AbortSignal): AsyncIterable<'session-expired'> { + let pending = 0 + let wake: (() => void) | undefined + const stop = this.ctx.on('deepseek-account/session-expired', () => { pending++; wake?.() }) + const abort = (): void => { wake?.() } + signal.addEventListener('abort', abort, { once: true }) + try { + while (!signal.aborted) { + if (pending > 0) { pending--; yield 'session-expired'; continue } + await new Promise((resolve) => { wake = resolve }) + } + } finally { + stop() + signal.removeEventListener('abort', abort) + } + } /** * Stream the safe account projection. * @param signal - stream lifetime. diff --git a/packages/api/account-controller/tests/controller.spec.ts b/packages/api/account-controller/tests/controller.spec.ts index 32d943ca46..d814e93ff7 100644 --- a/packages/api/account-controller/tests/controller.spec.ts +++ b/packages/api/account-controller/tests/controller.spec.ts @@ -22,7 +22,7 @@ function fixture() { watch: vi.fn(), } ctx.provide('deepseekAccount', provider as never) - return { provider, controller: new AccountController(ctx) } + return { ctx, provider, controller: new AccountController(ctx) } } it('delegates account operations without coupling profile and balance queries', async () => { @@ -54,3 +54,20 @@ it('passes the subscriber lifetime to the provider and returns its state stream' for await (const value of stream) received.push(value) expect(received).toEqual([state]) }) + +it('delivers expiry only to current subscribers and stops on disconnect', async () => { + const { ctx, controller } = fixture() + ctx.emit('deepseek-account/session-expired') + const lifetime = new AbortController() + const iterator = controller.watchExpiry(lifetime.signal)[Symbol.asyncIterator]() + const first = iterator.next() + ctx.emit('deepseek-account/session-expired') + expect(await first).toEqual({ done: false, value: 'session-expired' }) + const next = iterator.next() + lifetime.abort() + expect(await next).toEqual({ done: true, value: undefined }) + const reconnect = new AbortController() + const reopened = controller.watchExpiry(reconnect.signal)[Symbol.asyncIterator]().next() + reconnect.abort() + expect(await reopened).toEqual({ done: true, value: undefined }) +}) diff --git a/packages/api/remotes/src/remote-events.ts b/packages/api/remotes/src/remote-events.ts index f52859acb9..daee61cfe8 100644 --- a/packages/api/remotes/src/remote-events.ts +++ b/packages/api/remotes/src/remote-events.ts @@ -25,6 +25,7 @@ export const API_REMOTE_FORWARDED_EVENTS = [ { event: 'api-session/removed', mode: 'emit' }, { event: 'api-session/status', mode: 'emit' }, { event: 'commands/change', mode: 'emit' }, + { event: 'deepseek-account/session-expired', mode: 'emit' }, { event: 'deepseek-account/model-sign-in-required', mode: 'emit' }, { event: 'credentials/record-updated', mode: 'emit' }, { event: 'credentials/reference-updated', mode: 'emit' }, diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index 6ea849db43..6600cbedad 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-account/README.md -README.md: 376862c89e99d821ff750804cf724cf4aac85e6b -README.zh.md: e7f75dd5d05e7acea2450452ce6ec5185373d12a +README.md: d15feec9850b7c3d1faf6a97bdc811278dc4d1a1 +README.zh.md: 113c67bc007240ea3afe4df2e94e73879872d44d diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 376862c89e..d15feec985 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -7,7 +7,7 @@ kind: "package-reference" English | [中文](README.zh.md) -Server-expired account credentials show a localized sign-in reminder toast and clear the displayed account details. +Server-expired account credentials clear the displayed account details and emit a localized sign-in reminder toast once; account snapshot replay does not repeat it. ## Summary diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index e7f75dd5d0..113c67bc00 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -7,7 +7,7 @@ kind: "package-reference" [English](README.md) | 中文 -账号凭据被服务端判定失效后,显示本地化的重新登录提示 toast,并清空显示的账号详情。 +账号凭据被服务端判定失效后,清空显示的账号详情,并弹出一次本地化的重新登录提示 toast;账号快照重放不会重复提示。 ## 概述 diff --git a/packages/client/ui-settings-account/src/client/AccountMenu.tsx b/packages/client/ui-settings-account/src/client/AccountMenu.tsx index a8fab33a82..83a94ba581 100644 --- a/packages/client/ui-settings-account/src/client/AccountMenu.tsx +++ b/packages/client/ui-settings-account/src/client/AccountMenu.tsx @@ -19,17 +19,17 @@ export type AccountMenuProps = PropsRuntime<'settings.launcher'> & PropsLocale<' * @returns account menu launcher. */ export function AccountMenu({ - subscribeModelSignInRequired, wide, openSettings, openOnboarding, useAccount, useTheme, signOut, hasRunningAccountTasks, + subscribeSessionExpired, subscribeModelSignInRequired, wide, openSettings, openOnboarding, useAccount, useTheme, + signOut, hasRunningAccountTasks, contactUs, showLogin, start, cancel, t, }: AccountMenuProps) { const account = useAccount(state => state) const colorScheme = useTheme(snapshot => snapshot.active.colorScheme) const signedIn = account.view?.status === 'credential-stored' - const expired = account.view?.status === 'signed-out' && account.view.signOutReason === 'expired' const [signInNotice, setSignInNotice] = useState(0) useEffect(() => subscribeModelSignInRequired?.(() => { setSignInNotice(value => value + 1) }), [subscribeModelSignInRequired]) const [expiryNotice, setExpiryNotice] = useState(false) - useEffect(() => { setExpiryNotice(expired) }, [expired]) + useEffect(() => subscribeSessionExpired?.(() => { setExpiryNotice(true) }), [subscribeSessionExpired]) const profile = account.details?.profile const label = profile === undefined ? null : profile.status === 'ready' ? profile.value.name ?? profile.value.contact ?? t('signedIn') : t('signedIn') diff --git a/packages/client/ui-settings-account/src/client/AccountSection.tsx b/packages/client/ui-settings-account/src/client/AccountSection.tsx index 597adef18c..b8482330fe 100644 --- a/packages/client/ui-settings-account/src/client/AccountSection.tsx +++ b/packages/client/ui-settings-account/src/client/AccountSection.tsx @@ -29,6 +29,11 @@ export interface AccountSnapshot { /** Host operations injected into the Cordis-free account component. */ export interface AccountSectionInjected { + /** Subscribe to live credential-expiry notifications. + * @param listener - callback after the current credential is removed. + * @returns listener cleanup. + */ + subscribeSessionExpired?: (listener: () => void) => () => void /** Subscribe to live model sign-in guidance; the returned function removes the listener. * @param listener - callback for one rejected account-model request. * @returns listener cleanup. diff --git a/packages/client/ui-settings-account/src/client/index.ts b/packages/client/ui-settings-account/src/client/index.ts index 006a82bca0..5817b0d461 100644 --- a/packages/client/ui-settings-account/src/client/index.ts +++ b/packages/client/ui-settings-account/src/client/index.ts @@ -89,6 +89,7 @@ export function apply(ctx: Context): void { })().catch(() => { if (!disposed) publish({ ...snapshot, failed: true }) }) const nativePlatform = (globalThis as typeof globalThis & { dshPlatform?: PlatformBridge }).dshPlatform const operations: AccountSectionInjected = { + subscribeSessionExpired: listener => ctx.remote.$on('deepseek-account/session-expired', listener), subscribeModelSignInRequired: listener => ctx.remote.$on('deepseek-account/model-sign-in-required', listener), ...nativePlatform === undefined ? {} : { platform: nativePlatform }, refresh, diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index 8905710af7..3a8eb98383 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -373,17 +373,27 @@ it('opens more account information externally without invoking the embedded Plat it.each([en, zh])('shows a localized toast when the account credential expires', async (copy) => { vi.useFakeTimers() onTestFinished(() => { vi.useRealTimers() }) - const operations = mount({ status: 'signed-out', attempt: null, signOutReason: 'expired' }, copy) + const operations = mount({ status: 'signed-out', attempt: null }, copy) cleanup() const { AccountMenu } = await import('../src/client/AccountMenu.tsx') - render( void) | undefined + const unsubscribe = vi.fn() + const element = { expire = listener; return unsubscribe }} useAccount={selector => selector(operations.hooks.account.getSnapshot())} useTheme={selector => selector(operations.hooks.theme.getSnapshot())} wide openOnboarding={() => {}} openSettings={() => {}} - t={key => key in copy ? copy[key as AccountKey] : key} />) + t={key => key in copy ? copy[key as AccountKey] : key} /> + const view = render(element) + expect(screen.queryByRole('alert')).toBeNull() + act(() => { expire!() }) expect(screen.getByRole('alert').textContent).toContain(copy.sessionExpired) await expect(`${screen.getByRole('alert').textContent}\n`).toMatchFileSnapshot(`./expected/expired-${copy === en ? 'en' : 'zh'}.txt`) await act(async () => { await vi.advanceTimersByTimeAsync(4000) }) expect(screen.queryByRole('alert')).toBeNull() + view.unmount() + expect(unsubscribe).toHaveBeenCalledOnce() + render(element) + expect(screen.queryByRole('alert')).toBeNull() }) it.each(['initializing', 'waiting-browser', 'exchanging'] as const)('shows %s and lets the user cancel the active attempt', async (phase) => { diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index 69ffd59af5..812ac5e789 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account-platform/README.md -README.md: ecb4f9616bc9da0d25d5d8f70690efa983b35279 -README.zh.md: e384b982def75b07bb7290ca1bf70b1b4d144c70 +README.md: 8db7824fee19d70fd895ee9012e2a933f28a53c9 +README.zh.md: b4525f135f772623ed0f9e6241b11390dad82b85 diff --git a/packages/credentials/deepseek-account-platform/README.md b/packages/credentials/deepseek-account-platform/README.md index ecb4f9616b..8db7824fee 100644 --- a/packages/credentials/deepseek-account-platform/README.md +++ b/packages/credentials/deepseek-account-platform/README.md @@ -13,7 +13,7 @@ getPlatformSession exports the stored grant only when its issuer matches platfor `desktopPlatform` defaults to `null`. Every profile then sends `x-client-platform: web` on Host authorization, profile, balance, and logout requests; the Desktop profile supplies `darwin` or `win32`, replacing it with `x-client-platform: desktop-mac` or `desktop-win`. The provider owns that header, so deployment configuration cannot override it. Embedded Platform document and API requests receive the same platform header alongside their deployment headers, only at the configured origin. -Profile and balance HTTP 401 responses or top-level response code `40003` (invalid authorization) clear the rejected local grant and publish `signOutReason: expired`. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. Host inference consumers can report a rejected request token through `rejectToken`; removal requires that it still matches the stored login. +Profile and balance HTTP 401 responses or top-level response code `40003` (invalid authorization) clear the rejected local grant and emit the live `deepseek-account/session-expired` notification. Concurrent responses share one removal; responses from an invalidated credential generation cannot clear its replacement. Other HTTP failures retain the grant. Host inference consumers can report a rejected request token through `rejectToken`; removal requires that it still matches the stored login. ## Summary diff --git a/packages/credentials/deepseek-account-platform/README.zh.md b/packages/credentials/deepseek-account-platform/README.zh.md index e384b982de..b4525f135f 100644 --- a/packages/credentials/deepseek-account-platform/README.zh.md +++ b/packages/credentials/deepseek-account-platform/README.zh.md @@ -13,7 +13,7 @@ getPlatformSession 仅在已存授权的 issuer 与 platformOrigin 一致时导 `desktopPlatform` 默认为 `null`。此时所有 profile 的 Host 授权、资料、余额和退登请求都携带 `x-client-platform: web`;Desktop profile 提供 `darwin` 或 `win32`,改为携带 `x-client-platform: desktop-mac` 或 `desktop-win`。该请求头由 provider 拥有,部署配置无法覆盖。内嵌 Platform 的文档与 API 请求仅向配置来源发送相同的平台请求头,同时保留其他部署请求头。 -资料和余额接口返回 HTTP 401 或顶层响应码 `40003`(鉴权失效)时清除被拒绝的本地凭据,并发布 `signOutReason: expired`。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。Host 推理调用方可以通过 `rejectToken` 报告被拒绝的请求 token;仅当它仍匹配当前登录凭据时才执行清除。 +资料和余额接口返回 HTTP 401 或顶层响应码 `40003`(鉴权失效)时清除被拒绝的本地凭据,并发送实时 `deepseek-account/session-expired` 通知。并发响应共用一次清除操作;已失效凭据代次的响应不能清除替换后的凭据。其他 HTTP 错误保留凭据。Host 推理调用方可以通过 `rejectToken` 报告被拒绝的请求 token;仅当它仍匹配当前登录凭据时才执行清除。 ## 概述 diff --git a/packages/credentials/deepseek-account-platform/src/index.ts b/packages/credentials/deepseek-account-platform/src/index.ts index 0a731ff8d6..811e9ef3d0 100644 --- a/packages/credentials/deepseek-account-platform/src/index.ts +++ b/packages/credentials/deepseek-account-platform/src/index.ts @@ -98,7 +98,6 @@ export class PlatformAccount extends DeepSeekAccount { private detailsLifetime = new AbortController() private closed = false private removing: Promise | undefined - private signOutReason: 'expired' | undefined /** @param ctx - Host with authorization and credentials services. @param config - deployment options. */ constructor(ctx: Context, config: Config = {}) { @@ -173,7 +172,6 @@ export class PlatformAccount extends DeepSeekAccount { } const attempt = this.attempt?.view ?? null return { - ...(record === undefined && this.signOutReason !== undefined ? { signOutReason: this.signOutReason } : {}), status: record === undefined ? 'signed-out' : 'credential-stored', // Credential removal can notify watchers before sign-out finishes clearing the attempt. attempt: record === undefined && attempt?.phase === 'succeeded' ? null : attempt, @@ -227,9 +225,8 @@ export class PlatformAccount extends DeepSeekAccount { if (this.closed || this.detailsLifetime !== lifetime || record?.kind !== 'grant') return this.getState() const current = grant.parse(record.payload) if (current.token !== token || current.issuer !== this.origin) return this.getState() - this.signOutReason = 'expired' - try { await this.ctx.credentials.deleteRecord(KEY) } - catch (error) { this.signOutReason = undefined; throw error } + await this.ctx.credentials.deleteRecord(KEY) + this.ctx.emit('deepseek-account/session-expired') this.attempt = undefined this.ctx.emit('deepseek-account/signed-out') this.changed() @@ -281,7 +278,6 @@ export class PlatformAccount extends DeepSeekAccount { override async startSignIn(locale: string, callbackOrigin: string, loginSource: 'web' | 'desktop'): Promise { if (this.removing !== undefined) await this.removing - this.signOutReason = undefined const origin = loginOrigin(callbackOrigin) if (this.closed) throw new PlatformAuthError('protocol') if (this.attempt !== undefined && ['initializing', 'waiting-browser', 'exchanging', 'committing'].includes(this.attempt.view.phase)) { @@ -340,7 +336,6 @@ export class PlatformAccount extends DeepSeekAccount { } override signOut(): Promise { - this.signOutReason = undefined this.removing ??= (async () => { if (this.closed) throw new PlatformAuthError('protocol') if (this.attempt !== undefined) await this.cancelSignIn(this.attempt.view.id) diff --git a/packages/credentials/deepseek-account-platform/tests/account.spec.ts b/packages/credentials/deepseek-account-platform/tests/account.spec.ts index c4c6278d1f..0b8d0d27ce 100644 --- a/packages/credentials/deepseek-account-platform/tests/account.spec.ts +++ b/packages/credentials/deepseek-account-platform/tests/account.spec.ts @@ -886,11 +886,14 @@ it.each(['profile', 'balance'] as const)('clears the rejected account grant afte await storeAccount(f) let signedOut = 0 f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + const expired = vi.fn() + f.ctx.on('deepseek-account/session-expired', expired) f.detailStatus(401) expect(await (field === 'profile' ? f.account.getProfile() : f.account.getBalance())).toBeNull() - expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired', attempt: null }) + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', attempt: null }) expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))).toBeUndefined() expect(signedOut).toBe(1) + expect(expired).toHaveBeenCalledOnce() }) it.each(['profile', 'balance'] as const)('clears the rejected account grant after a %s HTTP 200 with code 40003', async (field) => { @@ -898,11 +901,14 @@ it.each(['profile', 'balance'] as const)('clears the rejected account grant afte await storeAccount(f) let signedOut = 0 f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + const expired = vi.fn() + f.ctx.on('deepseek-account/session-expired', expired) f.detailCode(40003) expect(await (field === 'profile' ? f.account.getProfile() : f.account.getBalance())).toBeNull() - expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired', attempt: null }) + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', attempt: null }) expect(await f.ctx.credentials.readRecord(credentialKey('deepseek-account-platform', 'default'))).toBeUndefined() expect(signedOut).toBe(1) + expect(expired).toHaveBeenCalledOnce() }) it('coalesces simultaneous unauthorized profile and balance responses', async () => { @@ -910,10 +916,13 @@ it('coalesces simultaneous unauthorized profile and balance responses', async () await storeAccount(f) let signedOut = 0 f.ctx.on('deepseek-account/signed-out', () => { signedOut++ }) + const expired = vi.fn() + f.ctx.on('deepseek-account/session-expired', expired) f.detailStatus(401) await Promise.all([f.account.getProfile(), f.account.getBalance()]) expect(signedOut).toBe(1) - expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired' }) + expect(expired).toHaveBeenCalledOnce() + expect(await f.account.getState()).toMatchObject({ status: 'signed-out' }) }) it.each([403, 500])('retains the account grant after HTTP %s', async (status) => { @@ -1289,7 +1298,7 @@ it('cancels a pending sign-in when the current stored grant expires', async () = await f.wait('waiting-browser') f.detailStatus(401) expect(await f.account.getBalance()).toBeNull() - expect(await f.account.getState()).toMatchObject({ status: 'signed-out', attempt: null, signOutReason: 'expired' }) + expect(await f.account.getState()).toMatchObject({ status: 'signed-out', attempt: null }) }) it('retains the grant when local expiry removal fails and permits a later retry', async () => { @@ -1300,9 +1309,9 @@ it('retains the grant when local expiry removal fails and permits a later retry' try { await expect(f.account.getBalance()).rejects.toThrow('storage failed') expect(await f.account.getState()).toMatchObject({ status: 'credential-stored' }) - expect((await f.account.getState()).signOutReason).toBeUndefined() + expect(await f.account.getState()).not.toHaveProperty('signOutReason') expect(await f.account.getBalance()).toBeNull() - expect(await f.account.getState()).toMatchObject({ status: 'signed-out', signOutReason: 'expired' }) + expect(await f.account.getState()).toMatchObject({ status: 'signed-out' }) } finally { remove.mockRestore() } }) @@ -1359,16 +1368,18 @@ it('expires an inference-rejected token without another Platform request', async await storeAccount(f) const published: string[] = [] f.ctx.on('deepseek-account/signed-out', () => { published.push('signed-out') }) + f.ctx.on('deepseek-account/session-expired', () => { published.push('session-expired') }) + await f.account.rejectToken('test-platform-grant') await f.account.rejectToken('test-platform-grant') const state = await f.account.getState() - expect({ status: state.status, reason: state.signOutReason, published, detailRequests: f.detailRequests }) + expect({ status: state.status, published, detailRequests: f.detailRequests }) .toMatchInlineSnapshot(` { "detailRequests": [], "published": [ + "session-expired", "signed-out", ], - "reason": "expired", "status": "signed-out", } `) @@ -1387,7 +1398,7 @@ it('ignores an inference rejection while already signed out', async () => { const f = await fixture() await f.account.rejectToken('previous-platform-grant') expect(await f.account.getState()).toMatchObject({ status: 'signed-out' }) - expect((await f.account.getState()).signOutReason).toBeUndefined() + expect(await f.account.getState()).not.toHaveProperty('signOutReason') }) diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index 586afa4831..f59e08d93b 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/credentials/deepseek-account/README.md -README.md: 804b929fe27ecdc82569f002dbbc595ae9b0219b -README.zh.md: 8403eb004e33b9cc3e08dca5f1e96c18d1abaee4 +README.md: f82cdcfec18d913cec1dba5ca0a2a1a0f0a1404c +README.zh.md: 94efac994da792e3bdb4a819a860c4bb9a2d0419 diff --git a/packages/credentials/deepseek-account/README.md b/packages/credentials/deepseek-account/README.md index 804b929fe2..f82cdcfec1 100644 --- a/packages/credentials/deepseek-account/README.md +++ b/packages/credentials/deepseek-account/README.md @@ -13,7 +13,7 @@ getPlatformSession returns a Host-only origin/token snapshot for native Platform `rejectToken` accepts a Host inference request’s rejected token and removes only the matching current login; a late rejection cannot clear a replacement credential. -`AccountView.signOutReason` identifies a server-expired credential separately from explicit sign-out; it is absent while signed in. +`deepseek-account/session-expired` notifies current subscribers once after a rejected credential is removed. Account snapshots carry no expiry notice, so reconnecting does not repeat the toast. ## Summary diff --git a/packages/credentials/deepseek-account/README.zh.md b/packages/credentials/deepseek-account/README.zh.md index 8403eb004e..94efac994d 100644 --- a/packages/credentials/deepseek-account/README.zh.md +++ b/packages/credentials/deepseek-account/README.zh.md @@ -13,7 +13,7 @@ getPlatformSession 为原生 Platform 内嵌提供仅限 Host 的 origin/token `rejectToken` 接收 Host 推理请求被拒绝的 token,仅删除与它匹配的当前登录凭据;延迟返回的拒绝不能清除替换后的凭据。 -`AccountView.signOutReason` 区分服务端判定凭据失效和主动退登;登录状态下不携带该字段。 +`deepseek-account/session-expired` 在移除被拒绝的凭据后,向当前订阅方通知一次。账号快照不携带失效提示,因此重新连接不会重复弹出 toast。 ## 概述 diff --git a/packages/credentials/deepseek-account/src/index.ts b/packages/credentials/deepseek-account/src/index.ts index 8197127979..9a40ecf712 100644 --- a/packages/credentials/deepseek-account/src/index.ts +++ b/packages/credentials/deepseek-account/src/index.ts @@ -79,7 +79,7 @@ export abstract class DeepSeekAccount extends Service { /** * Remove an inference-rejected token only while it still matches the stored login. * @param token - token captured by the rejected inference request. - * @returns after matching credentials are removed and expiry state is published. + * @returns after matching credentials are removed and the expiry notification is emitted. */ abstract rejectToken(token: string): Promise /** diff --git a/packages/credentials/deepseek-account/src/types.ts b/packages/credentials/deepseek-account/src/types.ts index c88550d101..a7cbe846ab 100644 --- a/packages/credentials/deepseek-account/src/types.ts +++ b/packages/credentials/deepseek-account/src/types.ts @@ -22,8 +22,6 @@ export interface AccountLinks { /** Stored-account presence is not a claim that the server has validated its token. */ export interface AccountView { readonly status: 'signed-out' | 'credential-stored' - /** Server rejection cleared the local credential. */ - readonly signOutReason?: 'expired' readonly links: AccountLinks readonly attempt: SignInAttemptView | null } @@ -51,6 +49,10 @@ export interface AccountDetails { declare module '@deepseek-ai/cordis' { interface Events { + /** Server rejection removed the current account credential; this notification is not replayed. + * @mode emit + */ + 'deepseek-account/session-expired'(): void /** An account model request requires the user to sign in. * @mode emit */ diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 4362b7b9f2..6b2531b561 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -893,7 +893,7 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ signature: 'abstract rejectToken(token: string): Promise', description: 'Remove an inference-rejected token only while it still matches the stored login.', parameters: [{ name: 'token', description: 'token captured by the rejected inference request.' }], - returns: 'after matching credentials are removed and expiry state is published.', + returns: 'after matching credentials are removed and the expiry notification is emitted.', }, { signature: 'abstract getPlatformSession(): Promise', @@ -3879,6 +3879,14 @@ export const EVENT_API: readonly EventApiEntry[] = [ description: 'An account model request requires the user to sign in.', parameters: [], }, + { + name: 'deepseek-account/session-expired', + mode: 'emit', + signature: '\'deepseek-account/session-expired\'(): void', + summary: 'Server rejection removed the current account credential; this notification is not replayed.', + description: 'Server rejection removed the current account credential; this notification is not replayed.', + parameters: [], + }, { name: 'deepseek-account/signed-out', mode: 'emit', @@ -4261,7 +4269,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'AccountView', - declaration: 'export interface AccountView {\n readonly status: \'signed-out\' | \'credential-stored\';\n readonly signOutReason?: \'expired\';\n readonly links: AccountLinks;\n readonly attempt: SignInAttemptView | null;\n}', + declaration: 'export interface AccountView {\n readonly status: \'signed-out\' | \'credential-stored\';\n readonly links: AccountLinks;\n readonly attempt: SignInAttemptView | null;\n}', }, { name: 'AccountWallet', From e310916e59375d7e5d70ad3461bf441b51724b7a Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 17:26:32 +0800 Subject: [PATCH 29/60] refactor(llm): let providers resolve request authentication --- .../llm/llm-deepseek-account/README.i18n.yaml | 4 +- packages/llm/llm-deepseek-account/README.md | 2 + .../llm/llm-deepseek-account/README.zh.md | 2 + .../llm/llm-deepseek-account/src/index.ts | 29 ++++++------ .../llm/llm-deepseek-api-key/README.i18n.yaml | 4 +- packages/llm/llm-deepseek-api-key/README.md | 2 + .../llm/llm-deepseek-api-key/README.zh.md | 2 + .../llm/llm-deepseek-api-key/src/index.ts | 3 +- packages/llm/llm-deepseek/README.i18n.yaml | 4 +- packages/llm/llm-deepseek/README.md | 2 + packages/llm/llm-deepseek/README.zh.md | 2 + packages/llm/llm-deepseek/src/adapter.ts | 11 ++--- packages/llm/llm-deepseek/src/file-store.ts | 10 ++-- packages/llm/llm-deepseek/src/files-api.ts | 15 +++--- packages/llm/llm-deepseek/src/host.ts | 2 +- packages/llm/llm-deepseek/src/index.ts | 2 +- packages/llm/llm-deepseek/src/types.ts | 21 ++++----- packages/llm/llm-deepseek/src/upload-index.ts | 8 ++-- .../llm/llm-deepseek/tests/adapter.e2e.ts | 2 +- .../llm/llm-deepseek/tests/adapter.spec.ts | 24 ++++++++-- .../llm/llm-deepseek/tests/file-store.spec.ts | 19 ++++++-- .../llm/llm-deepseek/tests/files-api.spec.ts | 46 +++++++++---------- packages/llm/llm-deepseek/tests/files.spec.ts | 4 +- packages/llm/llm-deepseek/tests/helpers.ts | 2 +- .../llm-deepseek/tests/prepared-call.spec.ts | 2 +- .../llm/llm-deepseek/tests/runtime.e2e.ts | 2 +- .../llm/llm-deepseek/tests/runtime.spec.ts | 32 ++++++------- .../continuation-messages-adapter.spec.ts | 2 +- 28 files changed, 149 insertions(+), 111 deletions(-) diff --git a/packages/llm/llm-deepseek-account/README.i18n.yaml b/packages/llm/llm-deepseek-account/README.i18n.yaml index 29356a8844..c55756b190 100644 --- a/packages/llm/llm-deepseek-account/README.i18n.yaml +++ b/packages/llm/llm-deepseek-account/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek-account/README.md -README.md: 1186a81f51ff9b9595100fb04d4eb5fb20af6dbc -README.zh.md: fec40b144f55d369e0ef0e6b6d69a6e45fe28f9b +README.md: 13b6df830e7ef16a0b75ff46678c507822f543b7 +README.zh.md: f2ca9fe281a9a10f1e75b9a941ad67da21d86b63 diff --git a/packages/llm/llm-deepseek-account/README.md b/packages/llm/llm-deepseek-account/README.md index 1186a81f51..13b6df830e 100644 --- a/packages/llm/llm-deepseek-account/README.md +++ b/packages/llm/llm-deepseek-account/README.md @@ -11,6 +11,8 @@ English | [中文](README.zh.md) Register authentication and model discovery for `deepseek-account`. This plugin shares the [Messages transport](../llm-deepseek/README.md) and owns credential resolution and catalog availability. +Authentication resolution returns `x-dsh-auth-token` and a failure callback capturing the same token. HTTP 401 classification and rejection stay in this provider; a rejected older request cannot clear a replacement login. + ## Table of Contents - [Use this package](#use-this-package) diff --git a/packages/llm/llm-deepseek-account/README.zh.md b/packages/llm/llm-deepseek-account/README.zh.md index fec40b144f..f2ca9fe281 100644 --- a/packages/llm/llm-deepseek-account/README.zh.md +++ b/packages/llm/llm-deepseek-account/README.zh.md @@ -11,6 +11,8 @@ kind: "package-reference" 为 `deepseek-account` 注册独立的鉴权和模型发现插件。通过 [llm-deepseek](../llm-deepseek/README.zh.md) 共用 Messages 请求实现;本包拥有凭据解析和目录可用性判断。 +鉴权解析返回 `x-dsh-auth-token` 和捕获同一 token 的失败回调。HTTP 401 的分类和凭据失效处理由此提供方负责;被拒绝的旧请求不能清除替换后的登录。 + ## 目录 - [使用此包](#use-this-package) diff --git a/packages/llm/llm-deepseek-account/src/index.ts b/packages/llm/llm-deepseek-account/src/index.ts index 17cf773315..847a792cd2 100644 --- a/packages/llm/llm-deepseek-account/src/index.ts +++ b/packages/llm/llm-deepseek-account/src/index.ts @@ -5,7 +5,7 @@ import { LlmError } from '@deepseek-ai/dsh-llm' import type {} from '@deepseek-ai/dsh-deepseek-account' import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment' import { plainOptions, resolveAdapterOptions, registerDeepSeekProvider, catalogModelInfo } from '@deepseek-ai/dsh-llm-deepseek' -import type { ResolvedDeepSeekOptions } from '@deepseek-ai/dsh-llm-deepseek' +import type { DeepSeekRequestAuth, ResolvedDeepSeekOptions } from '@deepseek-ai/dsh-llm-deepseek' import { Config } from './config.ts' export { Config } from './config.ts' @@ -17,26 +17,29 @@ const PROVIDER = 'deepseek-account' export function apply(ctx: Context, config: Config): void { const options = () => resolveAdapterOptions(plainOptions(config), launchEnvironmentOf(ctx)) options() - const resolveApiKey = async (connection: ResolvedDeepSeekOptions): Promise => { - const token = await ctx.get('deepseekAccount')?.resolveToken(connection.baseURL) + const resolveAuth = async (connection: ResolvedDeepSeekOptions): Promise => { + const account = ctx.get('deepseekAccount') + const token = await account?.resolveToken(connection.baseURL) if (token === undefined) throw new LlmError('Sign in to DeepSeek to use the account provider. The request destination must allow account authentication.', 'ACCOUNT_SIGN_IN_REQUIRED') - return token + return { + headers: { 'x-dsh-auth-token': token }, + onRequestError: async (error) => { + if (!(error instanceof LlmError) || error.failure.status !== 401) return error + const rejected = new LlmError(error.message, 'ACCOUNT_TOKEN_INVALID', { ...error.failure, cause: error }) + try { await account?.rejectToken(token) } + catch (_credentialRemovalFailed) { /* Storage failure cannot replace the inference failure. */ } + return rejected + }, + } } ctx.llm.registerConfigurableProviders([ { provider: PROVIDER, displayName: 'DeepSeek Account', settingsNs: ctx.fiber.entry?.options.id ?? name, settingsPath: [] }, ]) registerDeepSeekProvider(ctx, PROVIDER, { - options, resolveApiKey, providerName: 'DeepSeek Account', accountCredential: true, - onRequestError: async (error, token) => { - if (!(error instanceof LlmError) || error.failure.status !== 401) return error - const rejected = new LlmError(error.message, 'ACCOUNT_TOKEN_INVALID', { ...error.failure, cause: error }) - try { await ctx.get('deepseekAccount')?.rejectToken(token) } - catch (_credentialRemovalFailed) { /* Storage failure cannot replace the inference failure. */ } - return rejected - }, + options, resolveAuth, providerName: 'DeepSeek Account', discoverModels: async (provider) => { const connection = options() - try { await resolveApiKey(connection) } + try { await resolveAuth(connection) } catch (error) { if (error instanceof LlmError && error.code === 'ACCOUNT_SIGN_IN_REQUIRED') return [] throw error diff --git a/packages/llm/llm-deepseek-api-key/README.i18n.yaml b/packages/llm/llm-deepseek-api-key/README.i18n.yaml index 8a9a98f3b0..4a24a98eb7 100644 --- a/packages/llm/llm-deepseek-api-key/README.i18n.yaml +++ b/packages/llm/llm-deepseek-api-key/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek-api-key/README.md -README.md: 728747d18b0128c94a1e708eae193def55a5df6e -README.zh.md: 5fb38c82ea7e563e1dea41170384f6f52ea756ee +README.md: 4b22ef2ae97c46ab888714ad436f67f9df1ade3f +README.zh.md: df6baea12344db8873fc870027f92e0d5ae882a7 diff --git a/packages/llm/llm-deepseek-api-key/README.md b/packages/llm/llm-deepseek-api-key/README.md index 728747d18b..4b22ef2ae9 100644 --- a/packages/llm/llm-deepseek-api-key/README.md +++ b/packages/llm/llm-deepseek-api-key/README.md @@ -11,6 +11,8 @@ English | [中文](README.zh.md) Register authentication and model discovery for `deepseek-official`. This plugin shares the [Messages transport](../llm-deepseek/README.md) and owns credential resolution and catalog availability. +Authentication resolution returns the validated API key in `x-api-key` for both Messages and Files requests. + ## Table of Contents - [Use this package](#use-this-package) diff --git a/packages/llm/llm-deepseek-api-key/README.zh.md b/packages/llm/llm-deepseek-api-key/README.zh.md index 5fb38c82ea..df6baea123 100644 --- a/packages/llm/llm-deepseek-api-key/README.zh.md +++ b/packages/llm/llm-deepseek-api-key/README.zh.md @@ -11,6 +11,8 @@ kind: "package-reference" 为 `deepseek-official` 注册独立的鉴权和模型发现插件。通过 [llm-deepseek](../llm-deepseek/README.zh.md) 共用 Messages 请求实现;本包拥有凭据解析和目录可用性判断。 +鉴权解析将验证后的 API key 放入 `x-api-key`,供 Messages 和 Files 请求共同使用。 + ## 目录 - [使用此包](#use-this-package) diff --git a/packages/llm/llm-deepseek-api-key/src/index.ts b/packages/llm/llm-deepseek-api-key/src/index.ts index 128ede2b6f..94280483e0 100644 --- a/packages/llm/llm-deepseek-api-key/src/index.ts +++ b/packages/llm/llm-deepseek-api-key/src/index.ts @@ -37,7 +37,8 @@ export function apply(ctx: Context, config: Config): void { { provider: PROVIDER, displayName: 'DeepSeek', settingsNs: ctx.fiber.entry?.options.id ?? name, settingsPath: [] }, ]) registerDeepSeekProvider(ctx, PROVIDER, { - options, resolveApiKey, providerName: 'DeepSeek', + options, providerName: 'DeepSeek', + resolveAuth: async connection => ({ headers: { 'x-api-key': await resolveApiKey(connection) } }), discoverModels: async (provider) => { const connection = options() return connection.models.map(model => catalogModelInfo(provider, model)) diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 6aaafef79d..8fc2c2ab8d 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/llm/llm-deepseek/README.md -README.md: 5e569f3bf63e0280112861843d00d48516d5e23c -README.zh.md: 9df5b417e33a229ced1fdc059e957204841de01b +README.md: f877eb53db82e76b23509a20f39de66d72bc9386 +README.zh.md: cd2da99286705913c07bed9e9ded8a9c198e3d6b diff --git a/packages/llm/llm-deepseek/README.md b/packages/llm/llm-deepseek/README.md index 5e569f3bf6..f877eb53db 100644 --- a/packages/llm/llm-deepseek/README.md +++ b/packages/llm/llm-deepseek/README.md @@ -11,6 +11,8 @@ English | [中文](README.zh.md) Provide the shared DeepSeek Messages transport, request configuration, and model capabilities. Compose [API-key](../llm-deepseek-api-key/README.md) or [account](../llm-deepseek-account/README.md) plugins for authentication, model discovery, and provider registration. Valid settings changes affect subsequent calls while in-flight calls retain their configuration. This package can run beside the [pi-ai adapter](../llm-pi-ai/README.md). +`resolveAuth(connection)` returns the provider-owned authentication headers and an optional failure callback bound to that request’s credential. Messages and Files send those headers without selecting a credential mode. Upload reuse is isolated by endpoint and a hash of the authentication headers; raw credentials are not persisted. + ## Table of Contents - [Use this package](#use-this-package) diff --git a/packages/llm/llm-deepseek/README.zh.md b/packages/llm/llm-deepseek/README.zh.md index 9df5b417e3..cd2da99286 100644 --- a/packages/llm/llm-deepseek/README.zh.md +++ b/packages/llm/llm-deepseek/README.zh.md @@ -11,6 +11,8 @@ kind: "package-reference" 提供共享的 DeepSeek Messages 传输、请求配置和模型能力。组合 [API key](../llm-deepseek-api-key/README.zh.md) 或[账号](../llm-deepseek-account/README.zh.md)插件以提供鉴权、模型发现与 provider 注册。有效的设置更改在后续请求生效,进行中的请求保留原配置。本包可与 [pi-ai 适配器](../llm-pi-ai/README.zh.md)并用。 +`resolveAuth(connection)` 返回提供方持有的鉴权请求头,以及绑定本次请求凭据的可选失败回调。Messages 和 Files 直接使用这些请求头,不判断凭据类型。上传复用按端点和鉴权请求头的哈希隔离,不持久化原始凭据。 + ## 目录 - [使用本包](#use-this-package) diff --git a/packages/llm/llm-deepseek/src/adapter.ts b/packages/llm/llm-deepseek/src/adapter.ts index 2092e1227a..67f9890047 100644 --- a/packages/llm/llm-deepseek/src/adapter.ts +++ b/packages/llm/llm-deepseek/src/adapter.ts @@ -79,11 +79,10 @@ export class DeepSeekAdapter extends LlmAdapt const { messages, versions } = await prepareImages( options.messages, connection, options.model, this.dependencies.resolveAttachments?.(), this.imageAccess, signal, ) - const key = await this.dependencies.resolveApiKey(connection) - const accountToken = this.dependencies.accountCredential === true ? key : undefined + const auth = await this.dependencies.resolveAuth(connection) try { const files = new RequestFiles(this.files, { - baseURL: connection.baseURL, apiKey: key, accountCredential: accountToken !== undefined, + baseURL: connection.baseURL, headers: auth.headers, }, connection.filePolicy, connection.filesApiTimeoutMs, signal, activity) let inline = false @@ -115,7 +114,7 @@ export class DeepSeekAdapter extends LlmAdapt headers: { ...attributionHeaders(), 'content-type': 'application/json', 'accept': 'text/event-stream', - ...accountToken === undefined ? { 'x-api-key': key } : { 'x-dsh-auth-token': accountToken }, + ...auth.headers, 'anthropic-version': '2023-06-01', ...fileIds === undefined || fileIds.size === 0 ? {} : { 'anthropic-beta': MESSAGES_FILES_BETA }, 'x-deepseek-harness-user-id': this.dependencies.resolveUserId(), @@ -141,9 +140,9 @@ export class DeepSeekAdapter extends LlmAdapt return } } catch (error) { - if (this.dependencies.onRequestError !== undefined) { + if (auth.onRequestError !== undefined) { let mapped: unknown - try { mapped = await this.dependencies.onRequestError(error, key) } + try { mapped = await auth.onRequestError(error) } catch (_credentialUpdateFailed) { throw error } throw mapped } diff --git a/packages/llm/llm-deepseek/src/file-store.ts b/packages/llm/llm-deepseek/src/file-store.ts index 7d5bf4e8d1..cebff0809b 100644 --- a/packages/llm/llm-deepseek/src/file-store.ts +++ b/packages/llm/llm-deepseek/src/file-store.ts @@ -22,9 +22,8 @@ export interface DeepSeekFilePolicy { /** Connection facts needed by file operations. */ export interface DeepSeekFileConnection { baseURL: string - apiKey: string - /** Use the DSH account header; omitted for ordinary API keys. */ - accountCredential?: boolean + /** Provider-resolved authentication headers for this endpoint. */ + headers: Readonly> } /** Result of one file-id resolution. */ @@ -50,7 +49,7 @@ interface SharedUpload { function fileScope(connection: DeepSeekFileConnection) { return deepSeekFileScope( messagesApiRoot(connection.baseURL), - connection.apiKey, + JSON.stringify(Object.entries(connection.headers).sort(([left], [right]) => left.localeCompare(right))), ) } @@ -137,8 +136,7 @@ export class DeepSeekFileStore { private client(connection: DeepSeekFileConnection): DeepSeekFilesClient { return new DeepSeekFilesClient({ baseURL: connection.baseURL, - apiKey: connection.apiKey, - ...connection.accountCredential === undefined ? {} : { accountCredential: connection.accountCredential }, + headers: connection.headers, ...this.fetchImpl === undefined ? {} : { fetch: this.fetchImpl }, }) } diff --git a/packages/llm/llm-deepseek/src/files-api.ts b/packages/llm/llm-deepseek/src/files-api.ts index 181580ce6f..9aa1f005d7 100644 --- a/packages/llm/llm-deepseek/src/files-api.ts +++ b/packages/llm/llm-deepseek/src/files-api.ts @@ -70,9 +70,8 @@ export function isFilesQuotaError(error: unknown): error is DeepSeekFilesError { interface FilesApiOptions { baseURL: string - apiKey: string - /** Use the DSH account header; omitted for ordinary API keys. */ - accountCredential?: boolean + /** Provider-resolved authentication headers for this endpoint. */ + headers: Readonly> fetch?: typeof fetch } @@ -131,16 +130,14 @@ function providerErrorDetail(value: unknown): { message?: string; detail: string /** Direct Files client retaining the configured URL root and refusing redirects before credentials can leave its origin. */ export class DeepSeekFilesClient { private readonly baseURL: string - private readonly accountCredential: boolean - private readonly apiKey: string + private readonly authHeaders: Readonly> private readonly fetchImpl: typeof fetch /** - * @param options - endpoint, API-key snapshot, and optional test transport. + * @param options - endpoint, authentication headers, and optional test transport. */ constructor(options: FilesApiOptions) { - this.apiKey = options.apiKey - this.accountCredential = options.accountCredential === true + this.authHeaders = options.headers this.fetchImpl = options.fetch ?? globalThis.fetch this.baseURL = messagesApiRoot(options.baseURL) } @@ -149,7 +146,7 @@ export class DeepSeekFilesClient { let response: Response try { const headers = new Headers(attributionHeaders()) - headers.set(this.accountCredential ? 'x-dsh-auth-token' : 'x-api-key', this.apiKey) + for (const [name, value] of Object.entries(this.authHeaders)) headers.set(name, value) headers.set('anthropic-version', '2023-06-01') headers.set('anthropic-beta', MESSAGES_FILES_BETA) response = await this.fetchImpl(`${this.baseURL}${path}`, { diff --git a/packages/llm/llm-deepseek/src/host.ts b/packages/llm/llm-deepseek/src/host.ts index 2149472ba8..a98fecbec5 100644 --- a/packages/llm/llm-deepseek/src/host.ts +++ b/packages/llm/llm-deepseek/src/host.ts @@ -17,7 +17,7 @@ import type { DeepSeekAdapterOptions, DeepSeekConnectionOptions } from './types. */ export function registerDeepSeekProvider( ctx: Context, provider: string, dependencies: Pick, - 'options' | 'resolveApiKey' | 'accountCredential' | 'onRequestError' | 'providerName' | 'discoverModels'>): void { + 'options' | 'resolveAuth' | 'providerName' | 'discoverModels'>): void { ctx.inject(['settings'], (child) => { child.effect(() => child.settings.configure({ auto: false }, ctx.fiber)) }) let userId: AnonymousUserId | undefined const adapter = new DeepSeekAdapter({ diff --git a/packages/llm/llm-deepseek/src/index.ts b/packages/llm/llm-deepseek/src/index.ts index 89a1cce2ca..623dbea335 100644 --- a/packages/llm/llm-deepseek/src/index.ts +++ b/packages/llm/llm-deepseek/src/index.ts @@ -15,7 +15,7 @@ export { DEFAULT_STREAM_IDLE_TIMEOUT_MS, } from './defaults.ts' export { DeepSeekAdapter } from './adapter.ts' -export type { DeepSeekAdapterOptions, DeepSeekCatalogModel, DeepSeekConnectionOptions } from './types.ts' +export type { DeepSeekRequestAuth, DeepSeekAdapterOptions, DeepSeekCatalogModel, DeepSeekConnectionOptions } from './types.ts' export { DEFAULT_LOW_DETAIL_IMAGE_PIXEL_BUDGET, DEFAULT_MAX_IMAGES_PER_REQUEST, diff --git a/packages/llm/llm-deepseek/src/types.ts b/packages/llm/llm-deepseek/src/types.ts index 4257db1c45..60c6411696 100644 --- a/packages/llm/llm-deepseek/src/types.ts +++ b/packages/llm/llm-deepseek/src/types.ts @@ -74,6 +74,14 @@ export interface DeepSeekConnectionOptions { retryPolicy: ResolvedRetryPolicy } +/** Authentication captured by the provider for one request and its file operations. */ +export interface DeepSeekRequestAuth { + /** Credential headers sent unchanged to the resolved endpoint. */ + headers: Readonly> + /** Classify a failure using the captured credential; callback failure preserves the original error. */ + onRequestError?: (error: unknown) => Promise +} + /** Constructor options for {@link DeepSeekAdapter}: the operation-local resolution hooks the plugin owns. */ export interface DeepSeekAdapterOptions { /** Report unusable native Messages replay metadata without exposing content or signatures. */ @@ -82,19 +90,10 @@ export interface DeepSeekAdapterOptions Promise - /** Classify a request failure and update credential state; callback failure preserves the original error. */ - onRequestError?: (error: unknown, credential: string) => Promise /** Current validated connection facts; called once per operation. */ options: () => Connection - /** - * Resolve this adapter’s credential for the connection facts of one request. The - * snapshot is passed in — never re-read — so the key can only ever come - * from the same resolution as the endpoint it is sent to. Throws `LlmError` - * `MISSING_CREDENTIAL` for a missing API key; account routes reject unavailable grants. - */ - resolveApiKey: (connection: Connection) => Promise - /** Send the resolved credential as a bare DSH account token; never fall back to an API key. */ - accountCredential?: boolean + /** Resolve authentication from this request's connection snapshot; never re-read the endpoint. */ + resolveAuth: (connection: Connection) => Promise /** Resolve the harness-home anonymous id shared with telemetry and feedback. */ resolveUserId: () => AnonymousUserId /** Resolve the current durable attachment service; absence rejects image input. */ diff --git a/packages/llm/llm-deepseek/src/upload-index.ts b/packages/llm/llm-deepseek/src/upload-index.ts index d442bb55fe..1467e7d93a 100644 --- a/packages/llm/llm-deepseek/src/upload-index.ts +++ b/packages/llm/llm-deepseek/src/upload-index.ts @@ -37,16 +37,16 @@ export interface UploadIndexCommit { } /** - * Derive a non-secret stable index namespace without persisting or logging the API key. + * Derive a non-secret stable index namespace without persisting or logging authentication headers. * @param baseURL - normalized provider endpoint namespace. - * @param apiKey - resolved credential used only as hash input. + * @param credentials - serialized authentication headers used only as hash input. * @returns branded SHA-256 namespace digest. */ -export function deepSeekFileScope(baseURL: string, apiKey: string): DeepSeekFileScopeType { +export function deepSeekFileScope(baseURL: string, credentials: string): DeepSeekFileScopeType { const digest = createHash('sha256') .update(baseURL.replace(/\/+$/u, '')) .update('\0') - .update(apiKey) + .update(credentials) .digest('hex') return DeepSeekFileScope(digest) } diff --git a/packages/llm/llm-deepseek/tests/adapter.e2e.ts b/packages/llm/llm-deepseek/tests/adapter.e2e.ts index 0a5dd3f8f9..4bf5cd2050 100644 --- a/packages/llm/llm-deepseek/tests/adapter.e2e.ts +++ b/packages/llm/llm-deepseek/tests/adapter.e2e.ts @@ -76,7 +76,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('DeepSeek Messages real API', () const uploads: string[] = [] const bodies: string[] = [] const files = new DeepSeekFilesClient({ - baseURL: Protocol.PUBLIC_BASE_URL, apiKey: process.env.DEEPSEEK_API_KEY as string, fetch: fetchImpl, + baseURL: Protocol.PUBLIC_BASE_URL, headers: { 'x-api-key': process.env.DEEPSEEK_API_KEY as string }, fetch: fetchImpl, }) const ownedFiles = new Set>() cleanups.push(async () => { diff --git a/packages/llm/llm-deepseek/tests/adapter.spec.ts b/packages/llm/llm-deepseek/tests/adapter.spec.ts index 96b323587e..919800f696 100644 --- a/packages/llm/llm-deepseek/tests/adapter.spec.ts +++ b/packages/llm/llm-deepseek/tests/adapter.spec.ts @@ -165,7 +165,7 @@ describe('direct Messages HTTP', () => { const files = new DeepSeekFileStore() const llm = new DeepSeekAdapter({ options: () => Messages.resolveAdapterOptions({ baseURL: source.url }), - resolveApiKey: () => Promise.resolve('test-key'), resolveUserId: () => 'test-user' as AnonymousUserId, + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'test-key' } }), resolveUserId: () => 'test-user' as AnonymousUserId, resolveAttachments: () => undefined, resolveImageAccess: () => undefined, resolveFiles: () => files, prepareExtensions: prepare, }) @@ -182,7 +182,7 @@ describe('direct Messages HTTP', () => { const first = await endpoint(), second = await endpoint() let config = Messages.resolveAdapterOptions({ baseURL: first.url, maxTokens: 10, models: [{ id: MODEL, systemPromptUpdate: 'in-history' }] }) const files = new DeepSeekFileStore() - const llm = new DeepSeekAdapter({ options: () => config, resolveApiKey: snapshot => Promise.resolve(snapshot.maxTokens === 10 ? 'first' : 'second'), resolveUserId: () => 'user' as AnonymousUserId, resolveAttachments: () => undefined, resolveImageAccess: () => undefined, resolveFiles: () => files, prepareExtensions }) + const llm = new DeepSeekAdapter({ options: () => config, resolveAuth: snapshot => Promise.resolve({ headers: { 'x-api-key': snapshot.maxTokens === 10 ? 'first' : 'second' } }), resolveUserId: () => 'user' as AnonymousUserId, resolveAttachments: () => undefined, resolveImageAccess: () => undefined, resolveFiles: () => files, prepareExtensions }) const prepared = await llm.prepareCall('deepseek-official', MODEL) config = Messages.resolveAdapterOptions({ baseURL: second.url, maxTokens: 20 }) expect(prepared.model.systemPromptUpdate).toBe('in-history') @@ -243,10 +243,11 @@ describe('direct Messages HTTP', () => { vi.stubGlobal('fetch', async () => new Response('Unauthorized', { status: 401 })) const llm = new DeepSeekAdapter({ options: () => Messages.resolveAdapterOptions({}), - resolveApiKey: () => Promise.resolve('fixture-key'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'fixture-key' }, + onRequestError: async () => { throw new Error('credential storage unavailable') }, + }), resolveUserId: () => 'fixture-user' as import('@deepseek-ai/dsh-anonymous-user-id').AnonymousUserId, prepareExtensions, - onRequestError: async () => { throw new Error('credential storage unavailable') }, }) await expect(chunks(llm.stream(options()))).rejects.toMatchObject({ code: 'AUTH', failure: { status: 401 } }) }) @@ -332,6 +333,21 @@ describe('Cordis provider composition', () => { expect(rejectToken.mock.calls).toEqual(provider === 'deepseek-account' ? [['fixture-token']] : []) }) + it('reports the request token when credentials change before a 401 response', async () => { + let token = 'first-login' + const { ctx } = await boot((response) => { + token = 'replacement-login' + response.writeHead(401) + response.end('Unauthorized') + }) + const rejectToken = vi.fn(async (_token: string) => {}) + ctx.provide('deepseekAccount', { resolveToken: async (_url: string): Promise => token, + rejectToken: (value: string): Promise => rejectToken(value) } as DeepSeekAccount) + await chunks(ctx.llm.stream(options({ provider: 'deepseek-account' }))) + expect(token).toBe('replacement-login') + expect(rejectToken).toHaveBeenCalledExactlyOnceWith('first-login') + }) + it('finishes the active account turn when rejected credentials publish sign-out', async () => { const { ctx } = await boot((response) => { response.writeHead(401) diff --git a/packages/llm/llm-deepseek/tests/file-store.spec.ts b/packages/llm/llm-deepseek/tests/file-store.spec.ts index a671607788..b3fbef8613 100644 --- a/packages/llm/llm-deepseek/tests/file-store.spec.ts +++ b/packages/llm/llm-deepseek/tests/file-store.spec.ts @@ -27,7 +27,7 @@ const VERSION: RequestImageAttachment = { space: 'srgb', hasAlpha: true, } -const CONNECTION = { baseURL: 'https://api.deepseek.com', apiKey: 'key' } +const CONNECTION = { baseURL: 'https://api.deepseek.com', headers: { 'x-api-key': 'key' } } const POLICY = { expiresAfterSeconds: 604_800, refreshMarginSeconds: 3_600, quotaCleanupBatch: 100 } const NOW = 1_700_000_000_000 @@ -67,6 +67,19 @@ function uploadFetch(now: () => number = () => NOW) { } describe('DeepSeekFileStore', () => { + it('isolates credential values and header kinds while reusing reordered headers', async () => { + const remote = uploadFetch(() => NOW) + const store = new DeepSeekFileStore({ fetch: remote.fetchImpl, now: () => NOW }) + const first = await store.ensureUploaded(VERSION, CONNECTION, POLICY) + const account = await store.ensureUploaded(VERSION, { ...CONNECTION, headers: { 'x-dsh-auth-token': 'key' } }, POLICY) + const replacement = await store.ensureUploaded(VERSION, { ...CONNECTION, headers: { 'x-api-key': 'new-key' } }, POLICY) + expect(new Set([first.record.scope, account.record.scope, replacement.record.scope]).size).toBe(3) + const combined = await store.ensureUploaded(VERSION, { ...CONNECTION, headers: { a: 'one', b: 'two' } }, POLICY) + const reordered = await store.ensureUploaded(VERSION, { ...CONNECTION, headers: { b: 'two', a: 'one' } }, POLICY) + expect(reordered.record).toEqual(combined.record) + expect(remote.uploads()).toBe(4) + }) + it('reuses equivalent API roots and isolates other endpoints across invalidation and expiry', async () => { const dir = await mkdtemp(join(tmpdir(), 'dsh-file-scope-')) roots.push(dir) @@ -77,7 +90,7 @@ describe('DeepSeekFileStore', () => { const alternate = { ...CONNECTION, baseURL: 'https://other.example' } const other = await store.ensureUploaded(VERSION, alternate, POLICY) const first = await store.ensureUploaded(VERSION, CONNECTION, POLICY) - expect(first.record.scope).toBe(deepSeekFileScope(`${CONNECTION.baseURL}/v1`, CONNECTION.apiKey)) + expect(first.record.scope).toBe(deepSeekFileScope(`${CONNECTION.baseURL}/v1`, JSON.stringify(Object.entries(CONNECTION.headers)))) expect(first.record.scope).not.toBe(other.record.scope) expect((await store.ensureUploaded(VERSION, { ...CONNECTION, baseURL: `${CONNECTION.baseURL}/v1/` }, POLICY)).record).toEqual(first.record) const reopened = new DeepSeekFileStore({ index, fetch: remote.fetchImpl, now: () => now }) @@ -406,7 +419,7 @@ describe('DeepSeekFileStore', () => { vi.spyOn(index, 'commit').mockResolvedValue({ accepted: false, record: { - scope: deepSeekFileScope(`${CONNECTION.baseURL}/v1`, CONNECTION.apiKey), + scope: deepSeekFileScope(`${CONNECTION.baseURL}/v1`, JSON.stringify(Object.entries(CONNECTION.headers))), attachmentId: VERSION.attachment.attachmentId, variantId: VERSION.variantId, fileId: DeepSeekFileId('file-api-winner'), diff --git a/packages/llm/llm-deepseek/tests/files-api.spec.ts b/packages/llm/llm-deepseek/tests/files-api.spec.ts index e0d44d2625..48126befb6 100644 --- a/packages/llm/llm-deepseek/tests/files-api.spec.ts +++ b/packages/llm/llm-deepseek/tests/files-api.spec.ts @@ -29,7 +29,7 @@ describe('DeepSeekFilesClient', () => { ['', '{"id":'].map(body => ({ operation, body })), ))('rejects malformed JSON with operation and HTTP status: %j', async ({ operation, body }) => { const fetchImpl = vi.fn(async () => new Response(body, { status: 200 })) - const client = new DeepSeekFilesClient({ baseURL: 'https://files.example', apiKey: 'test-key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://files.example', headers: { 'x-api-key': 'test-key' }, fetch: fetchImpl }) const operations = { upload: () => client.upload({ data: Uint8Array.of(1), mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds: 3_600 }), list: () => client.list(), @@ -50,7 +50,7 @@ describe('DeepSeekFilesClient', () => { it.each([new TypeError('body transport failed'), new DOMException('body aborted', 'AbortError')])( 'preserves a non-JSON body-read failure: %s', async (failure) => { - const client = new DeepSeekFilesClient({ baseURL: 'https://files.example', apiKey: 'test-key', + const client = new DeepSeekFilesClient({ baseURL: 'https://files.example', headers: { 'x-api-key': 'test-key' }, fetch: async () => new Response(new ReadableStream({ start(controller) { controller.error(failure) } })), }) await expect(client.retrieve(DeepSeekFileId('file-api-one'))).rejects.toBe(failure) @@ -72,7 +72,7 @@ describe('DeepSeekFilesClient', () => { expect(form.get('expires_after[seconds]')).toBe('3600') return new Response(JSON.stringify(file())) }) as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example/custom/route///', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example/custom/route///', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) const uploaded = await client.upload({ data: Uint8Array.of(1, 2, 3), mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds: 3_600 }) const createdAt = Math.floor(Date.parse('2023-11-14T22:13:20.000Z') / 1_000) expect(uploaded).toEqual({ id: 'file-api-one', bytes: 3, createdAt, filename: 'image.png', expiresAt: createdAt + 3_600 }) @@ -83,7 +83,7 @@ describe('DeepSeekFilesClient', () => { ['https://provider.example/v1beta/', 'https://provider.example/v1beta/v1/files'], ])('resolves the Messages Files endpoint from %s', async (baseURL, expected) => { const fetchImpl = vi.fn(async () => new Response(JSON.stringify(file()))) - const client = new DeepSeekFilesClient({ baseURL, apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL, headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) await client.upload({ data: Uint8Array.of(1, 2, 3), mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds: 3_600, @@ -103,21 +103,21 @@ describe('DeepSeekFilesClient', () => { expect(url.pathname).toBe('/anthropic/v1/files/file-api-one') return new Response(JSON.stringify(init?.method === 'DELETE' ? { id: 'file-api-one', type: 'file_deleted' } : file())) }) as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com/anthropic', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com/anthropic', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) await expect(client.list({ after: DeepSeekFileId('file-before'), limit: 1_000 })).resolves.toMatchObject({ data: [{ bytes: 3 }], hasMore: false }) await expect(client.retrieve(DeepSeekFileId('file-api-one'))).resolves.toMatchObject({ id: 'file-api-one', bytes: 3 }) await expect(client.delete(DeepSeekFileId('file-api-one'))).resolves.toBeUndefined() }) it('accepts an empty Messages list with null cursors', async () => { - const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', apiKey: 'key', + const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', headers: { 'x-api-key': 'key' }, fetch: async () => new Response(JSON.stringify({ data: [], first_id: null, last_id: null, has_more: false })), }) await expect(client.list()).resolves.toEqual({ data: [], hasMore: false }) }) it.each(['first_id', 'last_id'])('rejects a Messages list with a numeric %s', async (cursor) => { - const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', apiKey: 'key', + const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', headers: { 'x-api-key': 'key' }, fetch: async () => new Response(JSON.stringify({ data: [], first_id: null, last_id: null, has_more: false, [cursor]: 1 })), }) await expect(client.list()).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) @@ -150,21 +150,21 @@ describe('DeepSeekFilesClient', () => { if (address === null || typeof address === 'string') throw new Error('expected a TCP server address') origins.push(`http://127.0.0.1:${address.port}`) } - const client = new DeepSeekFilesClient({ baseURL: origins[1]!, apiKey: 'redirect-test-key' }) + const client = new DeepSeekFilesClient({ baseURL: origins[1]!, headers: { 'x-api-key': 'redirect-test-key' } }) const error = await client.retrieve(DeepSeekFileId('file-api-one')).catch((cause: unknown) => cause) expect(forwarded).toEqual([]) expect(error).toMatchObject({ code: 'TRANSPORT' }) }) it.each([null, [], { type: 'wrong' }, { mime_type: null }, { created_at: 'invalid' }, { created_at: 123 }, { size_bytes: -1 }])('rejects malformed Messages file metadata %#', async (value) => { - const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', apiKey: 'key', + const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', headers: { 'x-api-key': 'key' }, fetch: async () => new Response(JSON.stringify(value === null || Array.isArray(value) ? value : file(value))), }) await expect(client.retrieve(DeepSeekFileId('file-api-one'))).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) }) it('rejects a Messages deletion that returns a different file identity', async () => { - const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', apiKey: 'key', + const client = new DeepSeekFilesClient({ baseURL: 'https://gateway.example', headers: { 'x-api-key': 'key' }, fetch: async () => new Response(JSON.stringify({ id: 'wrong', type: 'file_deleted' })), }) await expect(client.delete(DeepSeekFileId('file-api-one'))).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) @@ -189,7 +189,7 @@ describe('DeepSeekFilesClient', () => { expect((blob as Blob).size).toBe(3) return new Response(JSON.stringify(file()), { status: 200 }) }) as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com/', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com/', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) await expect(client.upload({ data: Uint8Array.of(1, 2, 3), @@ -218,7 +218,7 @@ describe('DeepSeekFilesClient', () => { } return new Response(JSON.stringify(file()), { status: 200 }) }) as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) await expect(client.list({ after: DeepSeekFileId('file-api-before'), limit: 20 })).resolves.toMatchObject({ data: [{ id: 'file-api-one' }], firstId: 'file-api-one', lastId: 'file-api-one', hasMore: false, @@ -231,7 +231,7 @@ describe('DeepSeekFilesClient', () => { const fetchImpl = vi.fn(() => Promise.resolve(new Response(JSON.stringify({ error: { message: 'user storage quota exceeded', type: 'invalid_request_error', code: 'file_quota' }, }), { status: 400 }))) as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) const error = await client.upload({ data: Uint8Array.of(1), mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds: 3_600, @@ -249,7 +249,7 @@ describe('DeepSeekFilesClient', () => { ] as const)('classifies HTTP %i Files failures as %s', async (status, code) => { const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.resolve(new Response('not-json', { status }))), }) await expect(client.retrieve(DeepSeekFileId('missing'))).rejects.toMatchObject({ @@ -269,7 +269,7 @@ describe('DeepSeekFilesClient', () => { ])('falls back to the HTTP status for an unstructured provider error %#', async (body) => { const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.resolve(new Response(JSON.stringify(body), { status: 400 }))), }) const error = await client.retrieve(DeepSeekFileId('missing')).catch((caught: unknown) => caught) @@ -281,7 +281,7 @@ describe('DeepSeekFilesClient', () => { const transport = new Error('socket closed') const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.reject(transport)), }) await expect(client.retrieve(DeepSeekFileId('one'))).rejects.toMatchObject({ @@ -310,7 +310,7 @@ describe('DeepSeekFilesClient', () => { ])('rejects an invalid file object %#', async (body) => { const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.resolve(new Response(JSON.stringify(body), { status: 200 }))), }) await expect(client.retrieve(DeepSeekFileId('one'))).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) @@ -322,7 +322,7 @@ describe('DeepSeekFilesClient', () => { 3_600.5, ])('refuses invalid file expiry %s before transport', async (expiresAfterSeconds) => { const fetchImpl = vi.fn() as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) await expect(client.upload({ data: Uint8Array.of(1), mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds, })).rejects.toMatchObject({ code: 'INVALID_REQUEST' }) @@ -331,7 +331,7 @@ describe('DeepSeekFilesClient', () => { it('refuses a file larger than the upload limit before transport', async () => { const fetchImpl = vi.fn() as typeof fetch - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', apiKey: 'key', fetch: fetchImpl }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', headers: { 'x-api-key': 'key' }, fetch: fetchImpl }) const data = { byteLength: MAX_FILE_UPLOAD_BYTES + 1 } as Uint8Array await expect(client.upload({ data, mediaType: 'image/png', filename: 'image.png', expiresAfterSeconds: 3_600, @@ -350,7 +350,7 @@ describe('DeepSeekFilesClient', () => { ])('rejects an invalid list response %#', async (body) => { const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.resolve(new Response(JSON.stringify(body), { status: 200 }))), }) await expect(client.list()).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) @@ -362,7 +362,7 @@ describe('DeepSeekFilesClient', () => { }), { status: 200 }))) vi.stubGlobal('fetch', fetchImpl) try { - const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com///', apiKey: 'key' }) + const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com///', headers: { 'x-api-key': 'key' } }) await expect(client.list()).resolves.toEqual({ data: [], hasMore: false }) } finally { vi.unstubAllGlobals() @@ -378,7 +378,7 @@ describe('DeepSeekFilesClient', () => { ])('rejects an invalid delete response %#', async (body) => { const client = new DeepSeekFilesClient({ baseURL: 'https://api.deepseek.com', - apiKey: 'key', + headers: { 'x-api-key': 'key' }, fetch: vi.fn(() => Promise.resolve(new Response(JSON.stringify(body), { status: 200 }))), }) await expect(client.delete(DeepSeekFileId('file-api-one'))).rejects.toMatchObject({ code: 'INVALID_RESPONSE' }) @@ -387,7 +387,7 @@ describe('DeepSeekFilesClient', () => { it('authenticates Files with the raw DSH token', async () => { const client = new DeepSeekFilesClient({ - baseURL: 'https://api.deepseek.com', apiKey: 'account-token', accountCredential: true, + baseURL: 'https://api.deepseek.com', headers: { 'x-dsh-auth-token': 'account-token' }, fetch: (_url, init) => { const headers = new Headers(init?.headers) expect(headers.get('x-dsh-auth-token')).toBe('account-token') diff --git a/packages/llm/llm-deepseek/tests/files.spec.ts b/packages/llm/llm-deepseek/tests/files.spec.ts index 4e28f1a1c8..7ec3129e1c 100644 --- a/packages/llm/llm-deepseek/tests/files.spec.ts +++ b/packages/llm/llm-deepseek/tests/files.spec.ts @@ -39,7 +39,7 @@ function harness(config: Config = {}) { const prepare = vi.fn(prepareExtensions) const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions(Object.assign({ baseURL: 'https://gateway.example/custom' }, config)), - resolveApiKey: async () => 'test-key', resolveUserId: () => 'test-user' as AnonymousUserId, resolveAttachments: () => attachments, + resolveAuth: async () => ({ headers: { 'x-api-key': 'test-key' } }), resolveUserId: () => 'test-user' as AnonymousUserId, resolveAttachments: () => attachments, resolveImageAccess: () => ({ readonlyPath: '/workspace/image.png' }), resolveFiles: () => files, prepareExtensions: prepare, }) return { adapter, ensureUploaded, invalidate, readImageRequest, prepare } @@ -56,7 +56,7 @@ describe('Messages Files requests', () => { createToolResultMessage({ callId, isError: false, content: [{ type: 'image', attachment: ref }, { type: 'image', attachment: ref }] })] await chunks(h.adapter.stream(options({ model, messages }))) expect(h.readImageRequest).toHaveBeenCalledTimes(1) - expect(h.ensureUploaded).toHaveBeenCalledWith(expect.anything(), { baseURL: 'https://gateway.example/custom', apiKey: 'test-key', accountCredential: false }, expect.anything(), expect.any(AbortSignal)) + expect(h.ensureUploaded).toHaveBeenCalledWith(expect.anything(), { baseURL: 'https://gateway.example/custom', headers: { 'x-api-key': 'test-key' } }, expect.anything(), expect.any(AbortSignal)) const [url, init] = fetchImpl.mock.calls[0]! expect(url).toBe('https://gateway.example/custom/v1/messages') expect(new Headers(init?.headers).get('anthropic-beta')).toBe('files-api-2025-04-14') diff --git a/packages/llm/llm-deepseek/tests/helpers.ts b/packages/llm/llm-deepseek/tests/helpers.ts index 3ddfcac7a0..606dfcfb13 100644 --- a/packages/llm/llm-deepseek/tests/helpers.ts +++ b/packages/llm/llm-deepseek/tests/helpers.ts @@ -44,7 +44,7 @@ export async function assemble(stream: AsyncIterable, model = MODEL } export function adapter(config: Config = {}) { const files = new DeepSeekFileStore() - return new DeepSeekAdapter({ options: () => resolveAdapterOptions(config), resolveApiKey: () => Promise.resolve('test-key'), resolveUserId: () => 'test-user' as AnonymousUserId, resolveAttachments: () => undefined, resolveImageAccess: () => undefined, resolveFiles: () => files, prepareExtensions }) + return new DeepSeekAdapter({ options: () => resolveAdapterOptions(config), resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'test-key' } }), resolveUserId: () => 'test-user' as AnonymousUserId, resolveAttachments: () => undefined, resolveImageAccess: () => undefined, resolveFiles: () => files, prepareExtensions }) } export async function server(reply: (response: ServerResponse, count: number) => void = response => response.end(sse(textEvents))) { const requests: { path: string; headers: IncomingHttpHeaders; body: Record }[] = [] diff --git a/packages/llm/llm-deepseek/tests/prepared-call.spec.ts b/packages/llm/llm-deepseek/tests/prepared-call.spec.ts index 965b50929d..a54647ef7e 100644 --- a/packages/llm/llm-deepseek/tests/prepared-call.spec.ts +++ b/packages/llm/llm-deepseek/tests/prepared-call.spec.ts @@ -18,7 +18,7 @@ async function endpoint(...args: Parameters) { function adapter(connection: () => DeepSeekConnectionOptions) { return new DeepSeekAdapter({ options: connection, - resolveApiKey: snapshot => Promise.resolve(`key-for-${snapshot.apiKeyEnv}`), + resolveAuth: snapshot => Promise.resolve({ headers: { 'x-api-key': `key-for-${snapshot.apiKeyEnv}` } }), resolveUserId: () => '00000000-0000-4000-8000-000000000001' as AnonymousUserId, prepareExtensions: () => Promise.resolve({ fields: {}, accept: () => Promise.resolve() }), }) diff --git a/packages/llm/llm-deepseek/tests/runtime.e2e.ts b/packages/llm/llm-deepseek/tests/runtime.e2e.ts index af46352638..4738fe9b6a 100644 --- a/packages/llm/llm-deepseek/tests/runtime.e2e.ts +++ b/packages/llm/llm-deepseek/tests/runtime.e2e.ts @@ -199,7 +199,7 @@ describe.skipIf(!process.env.DEEPSEEK_API_KEY)('llm-deepseek e2e (real API)', () return response } vi.stubGlobal('fetch', observedFetch) - const files = new Protocol.DeepSeekFilesClient({ baseURL, apiKey: key }) + const files = new Protocol.DeepSeekFilesClient({ baseURL, headers: { 'x-api-key': key } }) try { const result = await assemble(ctx, { diff --git a/packages/llm/llm-deepseek/tests/runtime.spec.ts b/packages/llm/llm-deepseek/tests/runtime.spec.ts index 447ceabd3e..4c505e1fe2 100644 --- a/packages/llm/llm-deepseek/tests/runtime.spec.ts +++ b/packages/llm/llm-deepseek/tests/runtime.spec.ts @@ -78,7 +78,7 @@ function adapterOf( const { apiKey, ...rest } = config return new DeepSeekAdapter({ options: () => resolveAdapterOptions({ ...rest }), - resolveApiKey: () => Promise.resolve(apiKey ?? 'k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': apiKey ?? 'k' } }), resolveUserId: () => TEST_USER_ID, resolveAttachments: () => attachments, ...files === undefined ? {} : { resolveFiles: () => files }, @@ -192,7 +192,7 @@ describe('request image target', () => { const attachments = {} as AttachmentStore const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ models: [{ id: 'vision', inputModalities: ['text', 'image'] }] }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, resolveAttachments: () => attachments, resolveImageAccess: (store, ref) => (store === attachments && ref === imageRef @@ -215,7 +215,7 @@ describe('DeepSeekAdapter against a mock server', () => { })) const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, prepareExtensions: prepareExtensions as never, }) @@ -230,7 +230,7 @@ describe('DeepSeekAdapter against a mock server', () => { const server = await mockServer([]) const base = { options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, } const failed = new DeepSeekAdapter({ @@ -256,7 +256,7 @@ describe('DeepSeekAdapter against a mock server', () => { let signalSeen: AbortSignal | undefined const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, prepareExtensions: ((request: { signal: AbortSignal }) => { signalSeen = request.signal @@ -321,7 +321,7 @@ describe('DeepSeekAdapter against a mock server', () => { const accept = vi.fn() const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, prepareExtensions: () => Promise.resolve({ fields: { dsh_test: 1 }, accept: async () => { accept() } }) as never, }) @@ -338,7 +338,7 @@ describe('DeepSeekAdapter against a mock server', () => { const failure = new Error('watermark append failed') const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey: () => Promise.resolve('k'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'k' } }), resolveUserId: () => TEST_USER_ID, prepareExtensions: () => Promise.resolve({ fields: { dsh_test: 1 }, @@ -1085,12 +1085,12 @@ describe('DeepSeekAdapter against a mock server', () => { 'rejects image input for text-only model %s before credentials, image reads, or fetch', async (model) => { const server = await mockServer([]) - const resolveApiKey = vi.fn(() => Promise.resolve('k')) + const resolveAuth = vi.fn(() => Promise.resolve({ headers: { 'x-api-key': 'k' } })) const attachments = attachmentStoreOf(ref => Promise.resolve(requestImage(ref))) const resolveAttachments = vi.fn(() => attachments.store) const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url }), - resolveApiKey, + resolveAuth, resolveUserId: () => TEST_USER_ID, resolveAttachments, prepareExtensions: noExtensions, @@ -1104,7 +1104,7 @@ describe('DeepSeekAdapter against a mock server', () => { source: { kind: 'model', provider: 'deepseek-official', model: 'deepseek-v4-flash' }, })], }))).rejects.toMatchObject({ code: 'UNSUPPORTED_CONTENT' }) - expect(resolveApiKey).not.toHaveBeenCalled() + expect(resolveAuth).not.toHaveBeenCalled() expect(attachments.readImageRequest).not.toHaveBeenCalled() expect(server.requests).toHaveLength(0) }, @@ -1112,13 +1112,13 @@ describe('DeepSeekAdapter against a mock server', () => { it('rejects vision input without an attachment provider before credentials or fetch', async () => { const server = await mockServer([]) - const resolveApiKey = vi.fn(() => Promise.resolve('k')) + const resolveAuth = vi.fn(() => Promise.resolve({ headers: { 'x-api-key': 'k' } })) const adapter = new DeepSeekAdapter({ options: () => resolveAdapterOptions({ baseURL: server.url, models: [{ id: 'deepseek-v4-flash-vision-exp', inputModalities: ['text', 'image'] }], }), - resolveApiKey, + resolveAuth, resolveUserId: () => TEST_USER_ID, prepareExtensions: noExtensions, }) @@ -1131,7 +1131,7 @@ describe('DeepSeekAdapter against a mock server', () => { source: { kind: 'model', provider: 'deepseek-official', model: 'deepseek-v4-flash' }, })], }))).rejects.toMatchObject({ code: 'UNSUPPORTED_CONTENT' }) - expect(resolveApiKey).not.toHaveBeenCalled() + expect(resolveAuth).not.toHaveBeenCalled() expect(server.requests).toHaveLength(0) }) @@ -2263,14 +2263,14 @@ describe('plugin registration and config', () => { it('resolves connection facts and the credential exactly once per stream call', async () => { const server = await mockServer([{ kind: 'sse', events: textEvents }]) const options = vi.fn(() => resolveAdapterOptions({ baseURL: server.url })) - const resolveApiKey = vi.fn(() => Promise.resolve('per-request-key')) + const resolveAuth = vi.fn(() => Promise.resolve({ headers: { 'x-api-key': 'per-request-key' } })) const resolveUserId = vi.fn(() => TEST_USER_ID) - const adapter = new DeepSeekAdapter({ options, resolveApiKey, resolveUserId, prepareExtensions: noExtensions }) + const adapter = new DeepSeekAdapter({ options, resolveAuth, resolveUserId, prepareExtensions: noExtensions }) for await (const _chunk of adapter.stream({ provider: 'deepseek-official', model: 'm', messages: [] })) { /* drain */ } expect(options).toHaveBeenCalledTimes(1) - expect(resolveApiKey).toHaveBeenCalledTimes(1) + expect(resolveAuth).toHaveBeenCalledTimes(1) expect(resolveUserId).toHaveBeenCalledTimes(1) expect(server.headers[0]?.['x-api-key']).toBe('per-request-key') }) diff --git a/packages/subagent/subagent/tests/continuation-messages-adapter.spec.ts b/packages/subagent/subagent/tests/continuation-messages-adapter.spec.ts index 380a47fbda..cd26a3153e 100644 --- a/packages/subagent/subagent/tests/continuation-messages-adapter.spec.ts +++ b/packages/subagent/subagent/tests/continuation-messages-adapter.spec.ts @@ -37,7 +37,7 @@ it('continues the parent through default Messages after a reasoning-bearing cont const connection = resolveAdapterOptions({ baseURL: http.url }) const adapter = new DeepSeekAdapter({ options: () => connection, - resolveApiKey: () => Promise.resolve('test-key'), + resolveAuth: () => Promise.resolve({ headers: { 'x-api-key': 'test-key' } }), resolveUserId: () => '00000000-0000-4000-8000-000000000001' as AnonymousUserId, prepareExtensions: () => Promise.resolve({ fields: {}, accept: () => Promise.resolve() }), }) From 9987cae3eabec862d1c54b796470087a19e78dbf Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 17:27:10 +0800 Subject: [PATCH 30/60] fix(desktop): apply shared toast theme in welcome --- apps/desktop/README.i18n.yaml | 4 ++-- apps/desktop/README.md | 2 ++ apps/desktop/README.zh.md | 2 ++ apps/desktop/renderer/welcome.css | 6 ++++-- apps/desktop/renderer/welcome.html | 2 +- apps/desktop/src/client/styles.d.ts | 2 ++ apps/desktop/src/client/welcome.tsx | 8 ++++++++ 7 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 apps/desktop/src/client/styles.d.ts diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index d414b6d5c3..6972af5326 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 apps/desktop/README.md -README.md: f00608919c1a44441bffa57d2b601c12b47724a8 -README.zh.md: 76862075461d651a4d25235d57eb1855602ea90e +README.md: 9bed6eb21646a4021e45320281f82f93c5c22179 +README.zh.md: 67a6204ffb62b8e509a301c966a0bccfa25f8465 diff --git a/apps/desktop/README.md b/apps/desktop/README.md index f00608919c..9bed6eb216 100644 --- a/apps/desktop/README.md +++ b/apps/desktop/README.md @@ -52,6 +52,8 @@ Node prepares the bundled interpreters and Python libraries without a system Pyt The [thin-wrapper decision](../../.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.md) owns shared Web behavior and Desktop adapters. The [Electron packaging and update decision](../../.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.md) owns release identity, signing, and update qualification. +Welcome loads the shared Toast palette and shadow tokens, with system typography for body-mounted notifications. + ## Installation ownership Electron owns `$DSH_HOME/profiles/desktop`. Its `dependencies` contains packages installed by pnpm; `dsh.profile.bundles` contains the built-in bundles followed by enabled plugins. The signed application supplies dsh, the private Desktop Host, and their production packages from `resources/app.asar/dsh`. Packaged applications select runtime profile resolution without creating package links; development profiles use filesystem links. Both host and plugins execute in the same Electron Node-mode process; Desktop does not enable `--preserve-symlinks`. The CLI cannot boot or mutate this profile. diff --git a/apps/desktop/README.zh.md b/apps/desktop/README.zh.md index 7686207546..67a6204ffb 100644 --- a/apps/desktop/README.zh.md +++ b/apps/desktop/README.zh.md @@ -52,6 +52,8 @@ Node 准备内置解释器和 Python 库,无需系统 Python 或 pip。[下载 [薄壳决策](../../.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.zh.md)负责共享 Web 行为与 Desktop 适配。[Electron 打包与更新决策](../../.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.zh.md)负责发布身份、签名及更新验收。 +Welcome 加载共享 Toast 的配色和阴影变量,挂载在 body 下的通知使用系统字体。 + ## 安装归属 Electron 拥有 `$DSH_HOME/profiles/desktop`。其 `dependencies` 包含 pnpm 安装的包;`dsh.profile.bundles` 包含内置 bundle,后接已启用插件。签名应用从 `resources/app.asar/dsh` 提供 dsh、私有 Desktop Host 及其生产依赖。打包应用选择 runtime profile 解析,不创建包链接;开发 profile 使用文件系统链接。宿主与插件在同一个 Electron Node 模式进程中执行;Desktop 不启用 `--preserve-symlinks`。CLI 不能启动或修改此 profile。 diff --git a/apps/desktop/renderer/welcome.css b/apps/desktop/renderer/welcome.css index 1e043dcee4..3b4da2defb 100644 --- a/apps/desktop/renderer/welcome.css +++ b/apps/desktop/renderer/welcome.css @@ -1,7 +1,7 @@ @import url('./assets/window-material.css'); /* Figma 2121:39336 / 2138:44626, Platform modes. Native material supplies the blur. */ -:root { +body { color-scheme: light dark; --dsw-alias-label-primary: #0f1115; --dsw-alias-label-secondary: #61666b; @@ -23,7 +23,7 @@ } @media (prefers-color-scheme: dark) { - :root { + body { --dsw-alias-label-primary: #f9fafb; --dsw-alias-label-secondary: #cfd3d6; --dsw-alias-label-tertiary: #adb2b8; @@ -52,6 +52,8 @@ body { margin: 0; overflow: hidden; background: transparent; + font-family: var(--dsw-font-family); + font-weight: 400; } #root { diff --git a/apps/desktop/renderer/welcome.html b/apps/desktop/renderer/welcome.html index 0731e3be96..f8cbeb8e15 100644 --- a/apps/desktop/renderer/welcome.html +++ b/apps/desktop/renderer/welcome.html @@ -6,8 +6,8 @@ - + diff --git a/apps/desktop/src/client/styles.d.ts b/apps/desktop/src/client/styles.d.ts new file mode 100644 index 0000000000..551c120efb --- /dev/null +++ b/apps/desktop/src/client/styles.d.ts @@ -0,0 +1,2 @@ +/** Stylesheets bundled by the standalone Welcome renderer. */ +declare module '*.css' diff --git a/apps/desktop/src/client/welcome.tsx b/apps/desktop/src/client/welcome.tsx index e60896a782..c72eec3887 100644 --- a/apps/desktop/src/client/welcome.tsx +++ b/apps/desktop/src/client/welcome.tsx @@ -1,4 +1,6 @@ /** Mount the local React renderer before Electron reveals the welcome window. */ +import '@deepseek-ai/dsh-client-ui-theme/src/styles/design-platform.css' +import '@deepseek-ai/dsh-client-ui-theme/src/styles/gradient-shadow-text.css' import { createRoot } from 'react-dom/client' import { flushSync } from 'react-dom' import { Welcome } from './WelcomePage.tsx' @@ -10,6 +12,12 @@ declare global { } } +const palette = window.matchMedia('(prefers-color-scheme: dark)') +const syncPalette = (): void => { document.body.toggleAttribute('data-ds-dark-theme', palette.matches) } +syncPalette() +palette.addEventListener('change', syncPalette) +window.addEventListener('pagehide', () => { palette.removeEventListener('change', syncPalette) }, { once: true }) + const container = document.getElementById('root') if (container === null) throw new Error('desktop welcome: missing React root') const root = createRoot(container) From 68e826a42f894b95b4520dad36ec9a4c86ba6a6d Mon Sep 17 00:00:00 2001 From: mektpoy Date: Wed, 23 Sep 2026 17:54:28 +0800 Subject: [PATCH 31/60] 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. --- packages/client/ui-settings-general/README.i18n.yaml | 4 ++-- packages/client/ui-settings-general/README.md | 2 +- packages/client/ui-settings-general/README.zh.md | 2 +- packages/client/ui-settings-general/package.json | 4 ++-- packages/client/web/README.i18n.yaml | 4 ++-- packages/client/web/README.md | 4 +++- packages/client/web/README.zh.md | 4 +++- 7 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/client/ui-settings-general/README.i18n.yaml b/packages/client/ui-settings-general/README.i18n.yaml index d0491ebef3..5d07365901 100644 --- a/packages/client/ui-settings-general/README.i18n.yaml +++ b/packages/client/ui-settings-general/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-settings-general/README.md -README.md: 36d3fd7b260f95cffb67977e5a6f37852bf195aa -README.zh.md: 9df8fe8bc3a39fceeccfc8b08a8e18cc5eeaf752 +README.md: 22fa9c364b83e1923bb5a23ab06ca0f76d9aaefa +README.zh.md: 732b85a0f477b5c0891bdab5a0622f583ae8c1d9 diff --git a/packages/client/ui-settings-general/README.md b/packages/client/ui-settings-general/README.md index 36d3fd7b26..22fa9c364b 100644 --- a/packages/client/ui-settings-general/README.md +++ b/packages/client/ui-settings-general/README.md @@ -22,7 +22,7 @@ Use this package to give the dsh web client a Settings panel, connection-recover ----- -The Settings panel uses a shared 760 × 500 layout, bounded by the viewport. Longer sections scroll inside the content column; the Account entry uses the account icon. +The Settings panel uses a shared 760 × 500 layout, bounded by the viewport. Longer sections scroll inside the content column; the Account entry uses the account icon. The panel portals beside `#root` rather than inside it, so a macOS window drag region a chrome row declares later in document order cannot swallow its controls. ## Use this package diff --git a/packages/client/ui-settings-general/README.zh.md b/packages/client/ui-settings-general/README.zh.md index 9df8fe8bc3..732b85a0f4 100644 --- a/packages/client/ui-settings-general/README.zh.md +++ b/packages/client/ui-settings-general/README.zh.md @@ -22,7 +22,7 @@ kind: "package-reference" ----- -设置面板采用各页面共享的 760 × 500 布局,并受视口大小约束。较长的页面在内容栏内部滚动;账号入口使用账号图标。 +设置面板采用各页面共享的 760 × 500 布局,并受视口大小约束。较长的页面在内容栏内部滚动;账号入口使用账号图标。面板挂载在 `#root` 之外而不是其内部,这样在文档序上更靠后的 chrome 行所声明的 macOS 窗口拖拽区不会吞掉它的控件。 ## 使用本包 diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index 007825c2de..99edc524f0 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -65,12 +65,12 @@ "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", "@deepseek-ai/dsh-client-ui-slots": "workspace:^", "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "clsx": "^2.0.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "@deepseek-ai/dsh-settings": "workspace:^" }, "files": [ "lib/index.js", diff --git a/packages/client/web/README.i18n.yaml b/packages/client/web/README.i18n.yaml index 494856fa2d..54a3292d36 100644 --- a/packages/client/web/README.i18n.yaml +++ b/packages/client/web/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/web/README.md -README.md: 2cedd1748973e13ad1b9a3b0ef89c0101d4ffb09 -README.zh.md: 882c338339b725f82aae4d931ab85a6d14650b42 +README.md: cefb0f638b4a287d7fb92e2a4de624f2cba2481a +README.zh.md: 534c4d9d7ab0103ed6fbb84ee2399dc37cf02d4c diff --git a/packages/client/web/README.md b/packages/client/web/README.md index 2cedd17489..cefb0f638b 100644 --- a/packages/client/web/README.md +++ b/packages/client/web/README.md @@ -76,12 +76,14 @@ The boot kernel delegates manifest entry creation to Client Modules so live grap | File | Role | |---|---| | [`src/index.ts`](src/index.ts) | Library entry: `AppWebEntry`, `getStaticModules`, platform tables | -| [`src/boot.ts`](src/boot.ts) | `AppWebEntry`: module stage, boot page, immediate-tier prefetch, then `bootClient` + `mountClient` | +| [`src/boot.ts`](src/boot.ts) | `AppWebEntry`: module stage, boot page, immediate-tier prefetch, window drag-rect watcher install, then `bootClient` + `mountClient` | | [`src/boot-client.ts`](src/boot-client.ts) | `bootClient` / `assertEntriesActive`: Loader mount, one entry per manifest row, activation audit | | [`src/mount.ts`](src/mount.ts) | `mountClient`: renderer handoff through a `uiRenderer` dependency fiber | | [`src/boot-page.ts`](src/boot-page.ts) | Framework-free boot page: spinner, per-entry status, failure rendering | | [`src/platform.ts`](src/platform.ts) | `PLATFORM_MODULES` / `PRELOADED_CLIENT_EXTERNALS`: the implicit external baseline | | [`src/seed.ts`](src/seed.ts) | Static module table handed to the loader at boot | +| [`src/window-drag/regions.ts`](src/window-drag/regions.ts) | The darwin app-region composition model, and the interactive selector `base.css` subtracts | +| [`src/window-drag/recall.ts`](src/window-drag/recall.ts) | The shell's one window drag-rect watcher (electron/electron#32341): measure the marked rows per frame and pulse the recall mark while they move | diff --git a/packages/client/web/README.zh.md b/packages/client/web/README.zh.md index 882c338339..534c4d9d7a 100644 --- a/packages/client/web/README.zh.md +++ b/packages/client/web/README.zh.md @@ -76,12 +76,14 @@ kind: "package-library" | 文件 | 职责 | |---|---| | [`src/index.ts`](src/index.ts) | 库入口:`AppWebEntry`、`getStaticModules`、平台表 | -| [`src/boot.ts`](src/boot.ts) | `AppWebEntry`:模块阶段、启动页、immediately 层级预取,随后调用 `bootClient` + `mountClient` | +| [`src/boot.ts`](src/boot.ts) | `AppWebEntry`:模块阶段、启动页、immediately 层级预取、安装窗口拖拽矩形 watcher,随后调用 `bootClient` + `mountClient` | | [`src/boot-client.ts`](src/boot-client.ts) | `bootClient` / `assertEntriesActive`:挂载 Loader、每个 manifest 行一个 entry、激活审计 | | [`src/mount.ts`](src/mount.ts) | `mountClient`:经 `uiRenderer` 依赖 fiber 完成渲染器交接 | | [`src/boot-page.ts`](src/boot-page.ts) | 无框架启动页:spinner、逐 entry 状态、失败渲染 | | [`src/platform.ts`](src/platform.ts) | `PLATFORM_MODULES` / `PRELOADED_CLIENT_EXTERNALS`:隐式 external 基座 | | [`src/seed.ts`](src/seed.ts) | 启动时交给 loader 的静态模块表 | +| [`src/window-drag/regions.ts`](src/window-drag/regions.ts) | darwin app-region 组合模型,以及 `base.css` 减除的交互元素选择器 | +| [`src/window-drag/recall.ts`](src/window-drag/recall.ts) | 外壳唯一的窗口拖拽矩形 watcher(electron/electron#32341):逐帧测量被打标行,并在它们移动期间脉冲 recall 标记 | From c5e0a407ca63192f1fc690c652cde6312ca80141 Mon Sep 17 00:00:00 2001 From: mektpoy Date: Wed, 23 Sep 2026 18:05:08 +0800 Subject: [PATCH 32/60] 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. --- apps/web/tests/document-preview.e2e.ts | 40 +++++++++++++++++-- .../applications-no-default.expected.md | 2 + 2 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 snapshots/web/document-preview/applications-no-default.expected.md diff --git a/apps/web/tests/document-preview.e2e.ts b/apps/web/tests/document-preview.e2e.ts index af48f48e2c..9f5a3d0c1a 100644 --- a/apps/web/tests/document-preview.e2e.ts +++ b/apps/web/tests/document-preview.e2e.ts @@ -164,8 +164,13 @@ describe.skipIf(MODE === 'record')('web e2e: document preview through Files', () let outsideRoot: string | undefined let nativeRoot: string | undefined let openLog = '' + let launchLog = '' + let appsCatalog = '' const opened = async (): Promise> => (await readFile(openLog, 'utf8')).split('\n').filter(Boolean).map(line => JSON.parse(line) as { path: string; action: 'open' | 'reveal' | 'application' }) + /** The application each `open -a` gesture named; the opened log keeps only the file path. */ + const launched = async (): Promise> => + (await readFile(launchLog, 'utf8')).split('\n').filter(Boolean).map(line => JSON.parse(line) as { app: string; path: string }) beforeAll(async () => { outsideRoot = await mkdtemp(join(tmpdir(), 'dsh-preview-outside-')) @@ -173,20 +178,24 @@ describe.skipIf(MODE === 'record')('web e2e: document preview through Files', () // Exercise the built Host through its actual OS command, replacing only the desktop application. nativeRoot = await mkdtemp(join(tmpdir(), 'dsh-preview-native-')) openLog = join(nativeRoot, 'opened.jsonl') + launchLog = join(nativeRoot, 'launched.jsonl') + appsCatalog = join(nativeRoot, 'applications.json') await writeFile(openLog, '') + await writeFile(launchLog, '') const command = process.platform === 'darwin' ? 'open' : 'xdg-open' await writeFile(join(nativeRoot, command), `#!/usr/bin/env node const fs = require('node:fs'); const path = process.argv[2] === '-a' ? process.argv[4] : process.argv[2] === '-R' ? process.argv[3] : process.argv[2]; const action = process.argv[2] === '-a' ? 'application' : process.argv[2] === '-R' || fs.statSync(path).isDirectory() ? 'reveal' : 'open'; fs.appendFileSync(${JSON.stringify(openLog)}, JSON.stringify({ path, action }) + '\\n'); +if (process.argv[2] === '-a') fs.appendFileSync(${JSON.stringify(launchLog)}, JSON.stringify({ app: process.argv[3], path: process.argv[4] }) + '\\n'); `, { mode: 0o700 }) if (process.platform === 'darwin') { - const apps = [ + await writeFile(appsCatalog, JSON.stringify([ { id: '/Applications/Test Player.app', name: 'Test Player', default: true, icon: `data:image/png;base64,${TINY_PNG.toString('base64')}` }, { id: '/Applications/Other Player.app', name: 'Other Player', default: false, icon: null }, - ] - await writeFile(join(nativeRoot, 'osascript'), `#!/usr/bin/env node\nprocess.stdout.write(${JSON.stringify(JSON.stringify(apps))});\n`, { mode: 0o700 }) + ])) + await writeFile(join(nativeRoot, 'osascript'), `#!/usr/bin/env node\nprocess.stdout.write(require('node:fs').readFileSync(${JSON.stringify(appsCatalog)}, 'utf8'));\n`, { mode: 0o700 }) } if (process.platform === 'linux') { const data = join(nativeRoot, 'data') @@ -1075,6 +1084,29 @@ else process.exit(1); await headerOpen.click() await expect.poll(async () => (await opened()).length).toBe(4) expect((await opened())[3]).toEqual({ path: clip, action: 'open' }) + // The reported defect: the Shell lists applications but marks none as the OS default. + await writeFile(appsCatalog, JSON.stringify([ + { id: '/Applications/Test Player.app', name: 'Test Player', default: false, icon: `data:image/png;base64,${TINY_PNG.toString('base64')}` }, + { id: '/Applications/Other Player.app', name: 'Other Player', default: false, icon: null }, + ])) + await prominent.getByRole('button', { name: 'More ways to open' }).click() + await page.getByRole('menuitem', { name: 'Test Player (default)', exact: true }).waitFor() + await page.keyboard.press('Escape') + expect(await emptyOpen.innerText()).toBe('Open') + expect(await headerOpen.getAttribute('aria-label')).toBe('Open in Test Player') + await compareOrRefreshGolden(join(SNAPSHOT_DIR, 'applications-no-default.expected.md'), await prominent.ariaSnapshot(), MODE) + const gesturesBefore = (await opened()).length + await emptyOpen.click() + await expect.poll(async () => (await opened()).length).toBe(gesturesBefore + 1) + // Without an OS-marked default the main action still opens the file instead of revealing it. + expect((await opened()).at(-1)).toEqual({ path: clip, action: 'open' }) + const launchesBefore = (await launched()).length + await prominent.getByRole('button', { name: 'More ways to open' }).click() + await page.getByRole('menuitem', { name: 'Test Player (default)', exact: true }).click() + await expect.poll(async () => (await launched()).length).toBe(launchesBefore + 1) + expect((await launched()).at(-1)?.app).toBe('/Applications/Test Player.app') + await expect.poll(async () => (await opened()).length).toBe(gesturesBefore + 2) + expect((await opened()).at(-1)).toEqual({ path: clip, action: 'application' }) } // Gesture facts stay out of the golden: the stub does not run on Windows. expect(await page.getByRole('alert').count()).toBe(0) @@ -1082,7 +1114,7 @@ else process.exit(1); expect(tripwire.pageErrors).toEqual([]) expect(tripwire.warnings).toEqual([]) await compareOrRefreshGolden(EXPECTED, sections.join('\n\n'), MODE) - await assertFixtureInventory(SNAPSHOT_DIR, ['document.expected.md', 'applications.expected.md', 'paging.patch.yml']) + await assertFixtureInventory(SNAPSHOT_DIR, ['document.expected.md', 'applications.expected.md', 'applications-no-default.expected.md', 'paging.patch.yml']) }) }) diff --git a/snapshots/web/document-preview/applications-no-default.expected.md b/snapshots/web/document-preview/applications-no-default.expected.md new file mode 100644 index 0000000000..bfe4d5331c --- /dev/null +++ b/snapshots/web/document-preview/applications-no-default.expected.md @@ -0,0 +1,2 @@ +- button "Open" +- button "More ways to open" From e0e8327992b0a73ee6aa4ffd12f8f488e99fe5ea Mon Sep 17 00:00:00 2001 From: yudshj Date: Wed, 23 Sep 2026 18:12:21 +0800 Subject: [PATCH 33/60] fix(preview): redraw PDF pages after settled zoom --- apps/web/tests/document-preview.e2e.ts | 46 ++++++++- apps/web/tests/expected/office-font-notice.md | 2 + .../README.i18n.yaml | 4 +- .../ui-sidebar-documentpreview/README.md | 4 +- .../ui-sidebar-documentpreview/README.zh.md | 4 +- .../src/client/pdf/document.ts | 2 +- .../src/client/pdf/pdf.tsx | 77 ++++++++++----- .../src/client/zoom/ZoomViewport.tsx | 5 +- .../tests/pdf-body.client.spec.tsx | 96 ++++++++++++++++++- .../tests/zoom-viewport.client.spec.tsx | 6 +- .../web/document-preview/document.expected.md | 1 + 11 files changed, 213 insertions(+), 34 deletions(-) diff --git a/apps/web/tests/document-preview.e2e.ts b/apps/web/tests/document-preview.e2e.ts index 14c2728288..d8b0957d8e 100644 --- a/apps/web/tests/document-preview.e2e.ts +++ b/apps/web/tests/document-preview.e2e.ts @@ -77,6 +77,18 @@ async function canvasColor(canvas: Locator): Promise { }) } +/** Wait for device resolution, subject to the page bitmap allocation limit. */ +async function expectPdfResolution(canvas: Locator): Promise { + await expect.poll(() => canvas.evaluate((node) => { + const bitmap = node as HTMLCanvasElement + const width = Number.parseFloat(bitmap.style.getPropertyValue('--pdf-page-width')) + const height = Number.parseFloat(bitmap.style.getPropertyValue('--pdf-page-height')) + const expected = Math.min(bitmap.getBoundingClientRect().width * window.devicePixelRatio, + Math.sqrt(16_777_216 * width / height)) + return Math.abs(bitmap.width - expected) + })).toBeLessThanOrEqual(1) +} + /** Select a workspace file through the Files tab and wait for its preview identity. */ async function openPreviewFile(column: Locator, filesTab: Locator, preview: Locator, name: string): Promise { await filesTab.click() @@ -808,10 +820,12 @@ else process.exit(1); await pdfZoom.click() await page.getByRole('menuitem', { name: '150%', exact: true }).click() await expect.poll(async () => (await canvas.boundingBox())!.width / pdfIntrinsicWidth).toBeCloseTo(1.5, 1) + await expectPdfResolution(canvas) pdfZoom = await revealDocumentZoom(page, preview) await pdfZoom.click() await page.getByRole('menuitem', { name: 'Fit width', exact: true }).click() await expect.poll(async () => (await canvas.boundingBox())!.width).toBeCloseTo(pdfWidth, 0) + await expectPdfResolution(canvas) expect(await preview.locator('[data-pdf-page]').count()).toBe(2) await expect.poll(() => canvasColor(canvas), { timeout: 30_000 }).toBe('red') const firstColor = await canvasColor(canvas) @@ -846,6 +860,7 @@ else process.exit(1); `- Continuous pages: ${await preview.locator('[data-pdf-page]').count()}`, '- Zoom reveal: hidden -> bottom hover -> delayed hidden', '- Zoom modes: fit width -> 100% -> 150% -> fit width', + '- Settled zoom redraws the page at device resolution', `- Horizontal overflow: ${String(await body.evaluate(node => node.scrollWidth > node.clientWidth))}`, `- Canvas fills: ${[firstColor, secondColor, restoredColor].join(' -> ')}`, `- Same tab: ${String(await pdfTab.getAttribute('data-dockkit-tab') === pdfTabId)}`, @@ -1354,7 +1369,8 @@ describe.skipIf(MODE === 'record')('web e2e: Host Office preview', () => { ], }) browser = await chromium.launch() - page = await newEnglishPage(browser) + page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, deviceScaleFactor: 2, + locale: 'en-US', timezoneId: 'Asia/Shanghai' }) const tripwire = watchConsole(page) await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) await connectFreshWorkspace(page, scaffold.workspaceCwd) @@ -1430,6 +1446,7 @@ describe.skipIf(MODE === 'record')('web e2e: Host Office preview', () => { await page.getByRole('menuitem', { name: '150%', exact: true }).click() await expect.poll(() => zoomMenu.innerText()).toBe('150%') await expect.poll(async () => (await canvas.boundingBox())!.width / intrinsicWidth).toBeCloseTo(1.5, 1) + await expectPdfResolution(canvas) const zoomScrollport = preview.locator('[data-document-zoom-scrollport]') await zoomScrollport.evaluate((node) => { const bounds = node.getBoundingClientRect() @@ -1438,10 +1455,31 @@ describe.skipIf(MODE === 'record')('web e2e: Host Office preview', () => { }) await expect.poll(() => zoomMenu.innerText()).toBe('166%') await expect.poll(async () => (await canvas.boundingBox())!.width / intrinsicWidth).toBeCloseTo(1.66, 1) + await expectPdfResolution(canvas) + await zoomScrollport.evaluate((node) => { node.scrollTop = 0; node.scrollLeft = 0 }) + await copyPdfText(page, preview, '中文文档') + await successShot(page, 'office-zoom-redrawn') await zoomMenu.click() await page.getByRole('menuitem', { name: 'Fit width', exact: true }).click() await expect.poll(() => zoomMenu.innerText()).toBe(fitPercent) + await expectPdfResolution(canvas) await zoomScrollport.evaluate((node) => { node.scrollTop = 0; node.scrollLeft = 0 }) + await zoomScrollport.evaluate(async (node) => { + const bounds = node.getBoundingClientRect() + for (let step = 0; step < 8; step++) { + node.dispatchEvent(new WheelEvent('wheel', { bubbles: true, cancelable: true, ctrlKey: true, + deltaY: -40, clientX: bounds.left + bounds.width / 2, clientY: bounds.top + bounds.height / 2 })) + await new Promise(resolve => requestAnimationFrame(() => { resolve() })) + } + }) + await expect.poll(() => zoomMenu.innerText()).toBe('400%') + expect(await zoomScrollport.evaluate(node => node.scrollLeft > node.clientWidth)).toBe(true) + await expectPdfResolution(canvas) + await zoomScrollport.evaluate((node) => { node.scrollTop = 0; node.scrollLeft = 0 }) + await successShot(page, 'office-pinch-400') + await zoomMenu.click() + await page.getByRole('menuitem', { name: 'Fit width', exact: true }).click() + await expectPdfResolution(canvas) expect(convert).toHaveBeenCalledTimes(1) await preview.getByRole('button', { name: 'Read the file again', exact: true }).click() await canvas.waitFor({ state: 'visible' }) @@ -1494,6 +1532,8 @@ describe.skipIf(MODE === 'record')('web e2e: Host Office preview', () => { '- Escape restores focus to the warning: true', '- Closing details preserves the warning and document position: true', '- Fit width, presets, and pinch resize the Office PDF continuously: true', + '- Settled zoom redraws the Office PDF at device resolution: true', + '- Continuous pinch to 400% redraws the page after horizontal panning: true', '- Pinch updates the displayed percentage during the gesture: 166%', `- Document top inset: ${topInset}px`, ].join('\n'), MODE) @@ -1502,6 +1542,10 @@ describe.skipIf(MODE === 'record')('web e2e: Host Office preview', () => { await openPreviewFile(column, filesTab, preview, `chinese.${extension}`) await preview.getByRole('img', { name: 'PDF page 1', exact: true }).waitFor({ state: 'visible', timeout: 60_000 }) await expect.poll(async () => (await preview.locator('[data-pdf-text]').allTextContents()).join(''), { timeout: 30_000 }).toContain('中文文档') + const officeZoom = await revealDocumentZoom(page, preview) + await officeZoom.click() + await page.getByRole('menuitem', { name: '150%', exact: true }).click() + await expectPdfResolution(canvas) if (['doc', 'ppt'].includes(extension)) expect(await warning.count()).toBe(0) await successShot(page, `office-${extension}`) } diff --git a/apps/web/tests/expected/office-font-notice.md b/apps/web/tests/expected/office-font-notice.md index 7e2deb69b1..6d9ba31361 100644 --- a/apps/web/tests/expected/office-font-notice.md +++ b/apps/web/tests/expected/office-font-notice.md @@ -7,5 +7,7 @@ - Escape restores focus to the warning: true - Closing details preserves the warning and document position: true - Fit width, presets, and pinch resize the Office PDF continuously: true +- Settled zoom redraws the Office PDF at device resolution: true +- Continuous pinch to 400% redraws the page after horizontal panning: true - Pinch updates the displayed percentage during the gesture: 166% - Document top inset: 0px diff --git a/packages/client/ui-sidebar-documentpreview/README.i18n.yaml b/packages/client/ui-sidebar-documentpreview/README.i18n.yaml index 946ec07ffb..17afc4e007 100644 --- a/packages/client/ui-sidebar-documentpreview/README.i18n.yaml +++ b/packages/client/ui-sidebar-documentpreview/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-sidebar-documentpreview/README.md -README.md: 0571c4537f5ff98d8ec1713c297397da1941780b -README.zh.md: 949e66546b8a4f25a388178dea47f90a8d6d324c +README.md: 5249bb4cbbc0360e8afac96cd86cdac339addfc5 +README.zh.md: 1b15e805a285770befb5c59e602fdd2aed6fbca5 diff --git a/packages/client/ui-sidebar-documentpreview/README.md b/packages/client/ui-sidebar-documentpreview/README.md index 0571c4537f..5249bb4cbb 100644 --- a/packages/client/ui-sidebar-documentpreview/README.md +++ b/packages/client/ui-sidebar-documentpreview/README.md @@ -59,7 +59,7 @@ When Developer tools is enabled, HTML fills the body edge to edge in a Blob ifra PNG, JPEG, GIF, WebP, BMP, ICO, and SVG render through Blob URLs in an `` static-image context, rounded inside a 12px inset. Images default to fit width without enlarging content smaller than the pane; 100% uses the image's intrinsic CSS-pixel width. The shared zoom controls can produce horizontal and vertical scrolling, but do not provide drag-to-pan. Zoom changes retain the same `` and Blob URL, so animated images continue playing. Raster formats can soften above their intrinsic size, while SVG remains on the browser's vector rendering path. SVG markup never enters the application DOM or an iframe, so its scripts cannot execute or reach the parent page. Replacing or unmounting the image revokes its Blob URL. -Shared copy comes from `sidebarDocumentPreview`; each builtin renderer owns its localized labels. PDF and converted Office previews use a graphite background in light mode and a matte-black background in dark mode, with subtle page shadows and original document colors. PDF and image previews share a floating control with **Fit width**, 25%, 50%, 100%, 150%, and 200% choices plus 25% incremental zoom across the 25%–400% fixed range. Fit width is the default and tracks pane resizing; 100% means the PDF's 96-DPI page size or the image's intrinsic CSS-pixel size. On fine pointers, the control starts hidden, slides up when the pointer enters the bottom 72 CSS pixels, and slides down after a 420 ms leave delay; hover, keyboard focus, an open menu, and an active gesture keep it visible, while devices without hover keep it visible continuously. Chromium maps a macOS trackpad pinch to the same live, pointer-anchored path as Ctrl+wheel; the control displays the gesture percentage, and the settled value survives body remounts until the tab closes. HTML previews do not expose zoom controls. +Shared copy comes from `sidebarDocumentPreview`; each builtin renderer owns its localized labels. PDF and converted Office previews use a graphite background in light mode and a matte-black background in dark mode, with subtle page shadows and original document colors. PDF and image previews share a floating control with **Fit width**, 25%, 50%, 100%, 150%, and 200% choices plus 25% incremental zoom across the 25%–400% fixed range. Fit width is the default and tracks pane resizing; 100% means the PDF's 96-DPI page size or the image's intrinsic CSS-pixel size. On fine pointers, the control starts hidden, slides up when the pointer enters the bottom 72 CSS pixels, and slides down after a 420 ms leave delay; hover, keyboard focus, an open menu, and an active gesture keep it visible, while devices without hover keep it visible continuously. Chromium maps a macOS trackpad pinch to the same live, pointer-anchored path as Ctrl+wheel; the control displays the gesture percentage, and the settled value survives body remounts until the tab closes. HTML previews do not expose zoom controls. After zoom settles or fit width changes, nearby PDF pages redraw at the resolved scale multiplied by the device pixel ratio. The previous bitmap and selectable text stay visible until the replacement bitmap is ready; offscreen pages refresh when they approach the viewport. Initial reads, additional pages, and HTML/PDF/image preparation share the ongoing `StateDot` loader, which exposes its label to assistive technology and respects reduced-motion preferences; every wait before content exists centres the loader in the pane, so opening a file shows one indicator in one position until the body appears. Loaded pages stay visible while another page loads. The PDF body loads its package-local `client.pdf.js` chunk only when a PDF preview mounts; PDF.js, its Worker source, and embedded support data stay out of the startup `client.js`. PDF pages fill the pane's width edge to edge as one vertical sequence and render lazily near the viewport; an unrendered page holds its place as a quiet 3:4 placeholder block. PDF.js’s official TextLayerBuilder manages selection boundaries and normalized copying over an aligned text layer. Its companion styles keep blank line breaks unhighlighted; alignment accounts for PDF page units, page rotation, and viewport resizing, and page disposal cancels both layers. Image-only PDFs contain no selectable text. Code previews show a tertiary-colored language label and a copy icon with a tooltip; wrapping remains in the document toolbar. They show source line numbers by default without including them in copied text; plain text uses the same font size and line height as code. Code sits on the pane's own background rather than the chat card's fill; its banner is adjacent to a full-height inner scrollport, so both scrollbars begin below the copy control. @@ -134,7 +134,7 @@ No direct effect; what the user reads here never enters a model request. - **Preview, not editing.** The viewers provide no file editing or shared search interface; a directory address fails with `not-regular-file`. Unknown extensions use the plain-text reader and remain subject to its UTF-8/NUL checks. - **Office conversion limits.** The preview does not launch native Office editors or download an engine. Binary `.doc` and `.ppt` files return no missing-font diagnostics. Conversion fidelity and resource limits belong to the [LibreOffice provider](../../document/office-to-pdf/README.md). - **Sequential text and bounded complete files.** Deep source lines require the preceding pages; PDF, HTML, and images require a complete result within the Host's `maxFileBytes` cap. -- **PDF zoom does not increase raster resolution.** PDF pages render at 96 DPI times the device pixel ratio, subject to the existing 16-million-pixel canvas limit, and fixed zoom enlarges that bitmap. High percentages can therefore soften page text; viewport-near rerendering at the settled zoom remains deferred. +- **PDF raster allocation is bounded.** Each page bitmap is capped at 16,777,216 pixels; very large pages or high zoom on high-density displays can still render below device resolution. - **Byte-view scroll state is not restored.** PDF, HTML, and images can return to the top when their renderer remounts or reloads; fixed PDF and image zoom can overflow horizontally, and HTML iframe scrolling belongs to its opaque browsing context. - **Finite local HTML dependencies.** Only direct classic `.js` and stylesheet `.css` references are packed. Browser-resolved resources retain browser origin and network restrictions; no runtime file-read bridge is exposed to the iframe. - **Scroll writes are unthrottled.** Every scroll event records its offset in the store; the line blocks are memoized so the resulting re-render hands React the same elements back. diff --git a/packages/client/ui-sidebar-documentpreview/README.zh.md b/packages/client/ui-sidebar-documentpreview/README.zh.md index 949e66546b..1b15e805a2 100644 --- a/packages/client/ui-sidebar-documentpreview/README.zh.md +++ b/packages/client/ui-sidebar-documentpreview/README.zh.md @@ -59,7 +59,7 @@ Web 和桌面端均通过开发者工具选择 HTML 预览策略。渲染器从 PNG、JPEG、GIF、WebP、BMP、ICO 和 SVG 通过 Blob URL 在 `` 静态图片上下文中渲染,带 12px 内边距和圆角。图片默认适应宽度,但不会放大小于面板的内容;100% 使用图片的固有 CSS 像素宽度。共享缩放控件可产生横向和纵向滚动,但不提供拖拽平移。缩放不会替换 `` 或 Blob URL,因此动画图片会继续播放。位图超过固有尺寸后可能变虚,SVG 则继续使用浏览器的矢量渲染路径。SVG 标记绝不进入应用 DOM 或 iframe,因此其中的脚本无法执行,也无法访问父页面。替换或卸载图片会撤销其 Blob URL。 -共享文案来自 `sidebarDocumentPreview`;各内置渲染器拥有自己的本地化标签。PDF 与转换后的 Office 预览在浅色模式下使用石墨灰底色,在深色模式下使用哑黑底色,页面带有轻微阴影并保留文档原色。PDF 与图片预览共用浮动控件,提供**适应宽度**、25%、50%、100%、150% 和 200% 选项,并在 25%–400% 固定范围内按 25% 逐级缩放。适应宽度是默认模式并跟随面板尺寸;100% 表示 PDF 的 96 DPI 页面尺寸或图片的固有 CSS 像素尺寸。在精细指针设备上,控件初始隐藏;指针进入底部 72 个 CSS 像素时向上滑入,离开 420 ms 后向下退出;控件悬停、键盘焦点、菜单展开和手势进行期间保持显示,无 hover 的设备则始终显示。Chromium 将 macOS 触控板捏合映射到与 Ctrl+滚轮相同的实时指针锚定路径;控件同步显示手势比例,静止后的值在正文重新挂载后继续保留,直至 tab 关闭。HTML 预览不显示缩放控件。 +共享文案来自 `sidebarDocumentPreview`;各内置渲染器拥有自己的本地化标签。PDF 与转换后的 Office 预览在浅色模式下使用石墨灰底色,在深色模式下使用哑黑底色,页面带有轻微阴影并保留文档原色。PDF 与图片预览共用浮动控件,提供**适应宽度**、25%、50%、100%、150% 和 200% 选项,并在 25%–400% 固定范围内按 25% 逐级缩放。适应宽度是默认模式并跟随面板尺寸;100% 表示 PDF 的 96 DPI 页面尺寸或图片的固有 CSS 像素尺寸。在精细指针设备上,控件初始隐藏;指针进入底部 72 个 CSS 像素时向上滑入,离开 420 ms 后向下退出;控件悬停、键盘焦点、菜单展开和手势进行期间保持显示,无 hover 的设备则始终显示。Chromium 将 macOS 触控板捏合映射到与 Ctrl+滚轮相同的实时指针锚定路径;控件同步显示手势比例,静止后的值在正文重新挂载后继续保留,直至 tab 关闭。HTML 预览不显示缩放控件。缩放稳定或适应宽度发生变化后,视口附近的 PDF 页面按最终缩放比例乘以设备像素比重绘。新位图完成前保留原有画面和可选文字层;屏幕外的页面在接近视口时更新。 首次读取、追加页及 HTML/PDF/图片准备共用 ongoing `StateDot` loading,其标签暴露给辅助技术,并遵循减少动态效果偏好;内容出现前的每个等待都把 loading 居中在面板中,打开文件到正文出现始终是同一位置的一个标记。下一页加载期间保留已显示的内容。PDF 正文仅在 PDF 预览挂载时加载包内 `client.pdf.js` chunk;PDF.js、Worker 源码和内嵌支持数据不会进入启动 `client.js`。PDF 页面贴边占满面板宽度,组成一个纵向连续序列并在接近视口时惰性渲染;未渲染的页以安静的 3:4 占位块保持位置。PDF.js 官方 TextLayerBuilder 在与画面重合的文字层上管理选区边界和复制文本规范化。配套样式不高亮空白换行;对齐同时考虑 PDF 页面单位、页面旋转与视口宽度变化,页面释放时取消两层渲染。纯图片 PDF 不包含可选取的文字。代码预览使用 tertiary 色的语言名称和带提示的复制图标;换行仍由文档工具栏控制。默认显示源码行号,但复制文本不包含行号;纯文本与代码使用相同字号和行高。代码直接坐在分栏自身的背景上,而不是会话卡片的填充色;复制条与占满剩余高度的内部滚动区相邻,因此横纵滚动条都从复制控件下方开始。 @@ -134,7 +134,7 @@ Office Remote 通过 Connection 的 multipart 二进制传输返回原生 `Uint8 - **预览而非编辑。** 查看器不提供文件编辑或共享搜索接口;目录地址以 `not-regular-file` 失败。未知扩展名使用纯文本读取,仍受其 UTF-8/NUL 检查限制。 - **Office 转换限制。** 预览不启动原生 Office 编辑器,也不下载引擎。二进制 `.doc` 和 `.ppt` 文件不返回缺失字体诊断。转换保真度与资源限制由 [LibreOffice 提供方](../../document/office-to-pdf/README.zh.md)负责。 - **文本顺序分页,完整文件受限。** 定位到较深处的源码行需要先加载此前各页;PDF、HTML 和图片必须取得 Host `maxFileBytes` 上限内的完整结果。 -- **PDF 缩放不会提高栅格分辨率。** PDF 页面按 96 DPI 乘以设备像素比绘制,并受现有 1600 万像素 Canvas 上限约束;固定缩放会放大这张位图,因此高比例下页面文字可能变虚。按稳定缩放比例重绘视口附近页面仍属于延期工作。 +- **PDF 栅格分配有上限。** 每页位图最多为 16,777,216 像素;超大页面或高像素密度屏幕上的高比例缩放仍可能低于设备分辨率。 - **字节视图不恢复滚动位置。** PDF、HTML 与图片的渲染器重新挂载或重新载入时可能回到顶部;固定 PDF 与图片缩放可产生横向滚动,HTML iframe 的滚动属于其不透明浏览上下文。 - **本地 HTML 依赖集合有限。** 只打包直接引用的经典 `.js` 脚本和 `.css` 样式表。浏览器解析的资源仍受浏览器源与网络规则限制;iframe 不获得运行时文件读取桥接。 - **滚动写入未节流。** 每次滚动事件都把偏移记进 store;行块已 memo 化,于是由此引发的重渲染交还给 React 的是同一批元素。 diff --git a/packages/client/ui-sidebar-documentpreview/src/client/pdf/document.ts b/packages/client/ui-sidebar-documentpreview/src/client/pdf/document.ts index 460bac419d..4415793c21 100644 --- a/packages/client/ui-sidebar-documentpreview/src/client/pdf/document.ts +++ b/packages/client/ui-sidebar-documentpreview/src/client/pdf/document.ts @@ -35,7 +35,7 @@ export type RenderPdfText = (page: PDFPageProxy, viewport: PageViewport) => { * @param pageNumber - 1-based selected page. * @param canvas - canvas owned by this render only. * @param signal - render lifetime. - * @param pixelRatio - display pixel ratio. + * @param pixelRatio - device pixel ratio multiplied by the settled document zoom. * @param renderText - optional selectable text layer sharing this page and viewport. * @returns the page's CSS dimensions after rendering completes. */ diff --git a/packages/client/ui-sidebar-documentpreview/src/client/pdf/pdf.tsx b/packages/client/ui-sidebar-documentpreview/src/client/pdf/pdf.tsx index fc11b38254..34c43074bb 100644 --- a/packages/client/ui-sidebar-documentpreview/src/client/pdf/pdf.tsx +++ b/packages/client/ui-sidebar-documentpreview/src/client/pdf/pdf.tsx @@ -49,6 +49,7 @@ export function PdfBody(props: PdfBodyProps): ReactNode { const [load, setLoad] = useState() const [attempt, setAttempt] = useState(0) const [pageWidth, setPageWidth] = useState() + const [renderZoom, setRenderZoom] = useState(1) const { retainTab, actions, t, ZoomViewport, zoomSurfaceClass } = props const preference = view.zoom ?? FIT_WIDTH const labels: ZoomLabels = { @@ -97,22 +98,23 @@ export function PdfBody(props: PdfBodyProps): ReactNode { {Array.from({ length: load.document.numPages }, (_, index) => ( + onWidth={index === 0 ? setPageWidth : undefined} zoom={renderZoom} zoomSurfaceClass={zoomSurfaceClass} t={t} /> ))}
return + signal={tab.signal} scrollportRef={props.scrollportRef} onPreference={setPreference} onRenderZoom={setRenderZoom}> {pages} } -function PdfPage({ document, page, requested: initiallyRequested, onVisible, signal, onWidth, zoomSurfaceClass, t }: { +function PdfPage({ document, page, requested: initiallyRequested, onVisible, signal, onWidth, zoom, zoomSurfaceClass, t }: { readonly document: PdfDocument readonly page: number readonly requested: boolean readonly onVisible: (page: number) => void readonly signal: AbortSignal readonly onWidth: ((width: number) => void) | undefined + readonly zoom: number readonly zoomSurfaceClass: string } & PropsLocale<'sidebarPdf'>): ReactNode { const host = useRef(null) @@ -120,47 +122,78 @@ function PdfPage({ document, page, requested: initiallyRequested, onVisible, sig const text = useRef(null) const [width, setWidth] = useState() const [requested, setRequested] = useState(initiallyRequested) + const [visible, setVisible] = useState(initiallyRequested) + const renderedZoom = useRef() + const pendingRender = useRef(Promise.resolve()) + const textTask = useRef>>() const [state, setState] = useState<'loading' | 'ready'>('loading') const [failure, setFailure] = useState<{ readonly error: unknown }>() const [attempt, setAttempt] = useState(0) useEffect(() => { - const node = host.current as HTMLDivElement + // A zoomed canvas can remain visible after its narrower page wrapper has + // scrolled out horizontally. Observe the displayed page once it is ready. + const node = state === 'ready' ? canvas.current as HTMLCanvasElement : host.current as HTMLDivElement if (typeof IntersectionObserver === 'undefined') { setRequested(true) + setVisible(true) return } let disposed = false const observer = new IntersectionObserver((entries) => { - if (disposed || !entries.some(entry => entry.isIntersecting)) return + if (disposed) return + const intersects = entries.some(entry => entry.isIntersecting) + setVisible(intersects) + if (!intersects) return setRequested(true) onVisible(page) - observer.disconnect() }, { rootMargin: '100% 0px' }) observer.observe(node) return () => { disposed = true observer.disconnect() } - }, [page, onVisible]) + }, [page, onVisible, state]) + useEffect(() => () => { textTask.current?.cancel() }, []) useEffect(() => { if (!requested) return - // The canvas is unconditional; this effect runs after its ref is committed. + setFailure(undefined) + if (renderedZoom.current !== undefined && (!visible || renderedZoom.current === zoom)) return const node = canvas.current as HTMLCanvasElement const lifetime = new AbortController() const renderSignal = AbortSignal.any([lifetime.signal, signal]) - setState('loading') - setFailure(undefined) - const createText = pdfTextRenderer(text.current as HTMLDivElement) - let textTask: ReturnType | undefined - void renderPdfPage(document, page, node, renderSignal, window.devicePixelRatio, (pdfPage, viewport) => { - textTask = createText(pdfPage, viewport) - return textTask - }).then( - (size) => { if (!renderSignal.aborted) { setWidth(size.width); onWidth?.(size.width); setState('ready') } }, - (error: unknown) => { if (!renderSignal.aborted) setFailure({ error }) }, - ) - return () => { lifetime.abort(); textTask?.cancel() } - }, [document, page, requested, signal, attempt, onWidth]) + let newText: typeof textTask.current + // PDF.js shares a page proxy across renders; its cancelled task must finish + // cleanup before another render starts. The displayed bitmap stays intact. + pendingRender.current = pendingRender.current.then(async () => { + renderSignal.throwIfAborted() + const buffer = node.ownerDocument.createElement('canvas') + try { + const size = await renderPdfPage(document, page, buffer, renderSignal, window.devicePixelRatio * zoom, + textTask.current === undefined ? (pdfPage, viewport) => { + newText = pdfTextRenderer(text.current as HTMLDivElement)(pdfPage, viewport) + return newText + } : undefined) + renderSignal.throwIfAborted() + const context = node.getContext('2d') + if (context === null) throw new Error('PDF canvas has no 2D context') + node.width = buffer.width + node.height = buffer.height + node.style.setProperty('--pdf-page-width', `${size.width}px`) + node.style.setProperty('--pdf-page-height', `${size.height}px`) + context.drawImage(buffer, 0, 0) + textTask.current ??= newText + newText = undefined + renderedZoom.current = zoom + setWidth(size.width) + onWidth?.(size.width) + setState('ready') + } finally { + buffer.width = buffer.height = 0 + newText?.cancel() + } + }).catch((error: unknown) => { if (!renderSignal.aborted) setFailure({ error }) }) + return () => { lifetime.abort(); newText?.cancel() } + }, [document, page, requested, visible, zoom, signal, attempt, onWidth]) return
{failure === undefined && state !== 'ready' && (requested ?
@@ -171,7 +204,7 @@ function PdfPage({ document, page, requested: initiallyRequested, onVisible, sig
} return @@ -116,6 +118,7 @@ function StartedSkillRow({ block, inspect, t }: Exclude { setExpanded(value => !value) @@ -140,16 +143,18 @@ function StartedSkillRow({ block, inspect, t }: Exclude - {leading} {status !== null ? {status} : null} - {t('row.title')} - - - {summary} - + {leading} + + {t('row.title')} + + + {summary} + +
{open ? (
diff --git a/packages/client/ui-skill/tests/skill-row.client.spec.tsx b/packages/client/ui-skill/tests/skill-row.client.spec.tsx index a34b8ff4e9..34b143d0ef 100644 --- a/packages/client/ui-skill/tests/skill-row.client.spec.tsx +++ b/packages/client/ui-skill/tests/skill-row.client.spec.tsx @@ -110,7 +110,7 @@ describe('SkillRow', () => { }))} />) const row = screen.getByRole('button', { name: 'skill 加载失败加载技能SkillError: missing resource' }) expect(view.container.querySelector('[data-tool="skill"]')?.getAttribute('data-state')).toBe('error') - expect(view.container.querySelector('[data-tool="skill"] > div > span:first-child svg')).not.toBeNull() + expect(view.container.querySelector('[data-tool="skill"] [role="button"] svg')).not.toBeNull() expect(view.container.querySelector('[data-tool="skill"] [data-state]')).toBeNull() expect(row.textContent).not.toContain('Check SKILL.md.') fireEvent.click(row) @@ -124,8 +124,8 @@ describe('SkillRow', () => { error: { name: 'InterruptedError', code: 'interrupted' }, }))} />) const stoppedSummary = stoppedView.getByText('skill 加载已中止') - expect(stoppedSummary.className).toContain('stoppedSummary') - expect(stoppedView.container.querySelector('[data-tool="skill"] > div > span:first-child svg')).not.toBeNull() + expect(stoppedSummary.parentElement?.className).toContain('stoppedSummary') + expect(stoppedView.container.querySelector('[data-tool="skill"] [role="button"] svg')).not.toBeNull() expect(stoppedView.container.querySelector('[data-tool="skill"] [data-state]')).toBeNull() cleanup() diff --git a/packages/client/ui-theme/README.i18n.yaml b/packages/client/ui-theme/README.i18n.yaml index 046b137c88..6361eb4b7b 100644 --- a/packages/client/ui-theme/README.i18n.yaml +++ b/packages/client/ui-theme/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-theme/README.md -README.md: 7248b7230afa28f817bec7c0eb26fd9512fff405 -README.zh.md: 6dc1db064dd9a6754f6c6475dde18ccf1a17841e +README.md: a2938f0c03d7f6b2c0202e67be1b66dff08516f3 +README.zh.md: d19649e26722f506c3142a095eb82b0a08235626 diff --git a/packages/client/ui-theme/README.md b/packages/client/ui-theme/README.md index 7248b7230a..a2938f0c03 100644 --- a/packages/client/ui-theme/README.md +++ b/packages/client/ui-theme/README.md @@ -9,7 +9,7 @@ English | [中文](README.zh.md) ## Summary -`dsh-client-ui-theme` lets Web GUI users choose `light`, `dark`, or `system` and set conversation content text from 12 to 17 px in Settings. A loopback client stores both values in the `ui-theme` settings namespace, which the local provider persists in `$DSH_HOME/cordis.patch.yml` by default. The plugin resolves `system` through `prefers-color-scheme` and publishes immutable `ThemeSnapshot`s; ui-layout applies each snapshot to the document. The package also ships the `--dsw-*` token stylesheets and injects a synchronous bootstrap so the selected palette and font size apply before the shell loads. Third-party themes can register alias-token overrides through `ctx.theme`. +`dsh-client-ui-theme` lets Web GUI users choose `light`, `dark`, or `system` and set conversation content text from 12 to 24 px in Settings. A loopback client stores both values in the `ui-theme` settings namespace, which the local provider persists in `$DSH_HOME/cordis.patch.yml` by default. The plugin resolves `system` through `prefers-color-scheme` and publishes immutable `ThemeSnapshot`s; ui-layout applies each snapshot to the document. The package also ships the `--dsw-*` token stylesheets and injects a synchronous bootstrap so the selected palette and font size apply before the shell loads. Third-party themes can register alias-token overrides through `ctx.theme`. ## Table of Contents @@ -29,7 +29,7 @@ Users switch the color scheme and content font size from two rows in Settings (G ### Appearance and font size -The plugin registers Appearance preference cubes and a font-size stepper in the General section. The stepper accepts integer values from 12 through 17 px and defaults to 14 px. It changes conversation headings and base text by the same increment, including the user bubble and composer draft; flow-row titles, summaries, and tables follow one step under the body size, while small text and code keep fixed sizes. Each accepted change writes through the Host settings API. Rapid changes serialize in gesture order with namespace revisions, and a rejected latest write reloads the durable values. Non-loopback pages keep both choices process-local. +The plugin registers Appearance preference cubes and a font-size stepper in the General section. The stepper accepts integer values from 12 through 24 px and defaults to 14 px. It changes conversation headings and base text by the same increment, including the user bubble and composer draft; flow-row titles, summaries, and tables follow one step under the body size, while small text and code keep fixed sizes. Each accepted change writes through the Host settings API. Rapid changes serialize in gesture order with namespace revisions, and a rejected latest write reloads the durable values. Non-loopback pages keep both choices process-local. ### Registering a theme @@ -51,7 +51,9 @@ The service owns theme and font-size state and publishes snapshots. The ui-layou ### Stylesheets -`src/styles/` holds six sheets imported in order by ui-theme's dynamic client entry: `base.css`, `corner-shape.css`, `design-platform.css`, `scrollbar.css`, `gradient-shadow-text.css`, and `shiki.css`. The client bundle compiles and injects them as plugin-owned global styles, so unload and HMR remove them with ui-theme. `scrollbar.css` consumes the `--dsw-alias-scrollbar-*` tokens and must follow `design-platform.css`, which declares them. Status marks use their own semantic state tokens. `design-platform.css` also owns the code-diff fill aliases and their static alpha palette entries, plus the `--dsw-alias-file-diff-*` code, gutter, and marker palette for file comparisons; `shiki.css` owns syntax colors. +`src/styles/` holds six sheets imported in order by ui-theme's dynamic client entry: `base.css`, `corner-shape.css`, `design-platform.css`, `scrollbar.css`, `gradient-shadow-text.css`, and `shiki.css`. The client bundle compiles and injects them as plugin-owned global styles, so unload and HMR remove them with ui-theme. `scrollbar.css` consumes the `--dsw-alias-scrollbar-*` tokens and must follow `design-platform.css`, which declares them. Status marks use their own semantic state tokens. `design-platform.css` also owns the code-diff fill aliases and their static alpha palette entries, plus the `--dsw-alias-file-diff-*` code, gutter, and marker palette for file comparisons; `shiki.css` owns syntax colors. `--dsw-alias-label-shimmer` supplies an overlay for the shared text shimmer: black at 40% alpha in the light palette and white at 45% alpha in the dark palette. `--dsw-alias-label-deep-diving` and `--dsw-alias-label-deep-diving-shimmer` supply the blue activity label and sweep; the dark palette uses a lighter, less saturated label with a brighter blue sweep. + +The `--dsw-alias-turn-trigger-*` tokens provide separate resting and hover backgrounds for Turn-trigger notices in each palette. `brand-font.css` exports the local Montserrat Light, Regular and Medium faces (normal style, weights 300, 400 and 500), with `montserrat-light.woff2`, `montserrat-regular.woff2`, `montserrat-medium.woff2` and its SIL Open Font License in `lib/styles/`. Desktop bundles the same stylesheet, font and license for offline welcome brand text; ordinary UI keeps its system font stack. diff --git a/packages/client/ui-theme/README.zh.md b/packages/client/ui-theme/README.zh.md index 6dc1db064d..d19649e267 100644 --- a/packages/client/ui-theme/README.zh.md +++ b/packages/client/ui-theme/README.zh.md @@ -9,7 +9,7 @@ kind: "package-reference" ## 概述 -`dsh-client-ui-theme` 让 Web GUI 用户在设置中选择 `light`、`dark` 或 `system`,并把会话正文字号设为 12 至 17 px。回环客户端把两个值存入 `ui-theme` 设置命名空间,本地提供方默认将其持久化到 `$DSH_HOME/cordis.patch.yml`。插件通过 `prefers-color-scheme` 解析 `system` 并发布不可变的 `ThemeSnapshot`;ui-layout 把每份快照应用到文档。本包还提供 `--dsw-*` token 样式表,并注入同步引导,使所选调色板与字号在外壳加载前生效。第三方主题可通过 `ctx.theme` 注册别名 token 覆盖。 +`dsh-client-ui-theme` 让 Web GUI 用户在设置中选择 `light`、`dark` 或 `system`,并把会话正文字号设为 12 至 24 px。回环客户端把两个值存入 `ui-theme` 设置命名空间,本地提供方默认将其持久化到 `$DSH_HOME/cordis.patch.yml`。插件通过 `prefers-color-scheme` 解析 `system` 并发布不可变的 `ThemeSnapshot`;ui-layout 把每份快照应用到文档。本包还提供 `--dsw-*` token 样式表,并注入同步引导,使所选调色板与字号在外壳加载前生效。第三方主题可通过 `ctx.theme` 注册别名 token 覆盖。 ## 目录 @@ -29,7 +29,7 @@ kind: "package-reference" ### 外观与字号 -插件在「通用」分区注册外观偏好方块与字号步进器。步进器接受 12 至 17 px 的整数,默认值为 14 px。它以相同增量调整会话标题与基础文本,包括用户气泡与 composer 草稿;流内行的标题、摘要与表格跟随比正文低一档的字号,小号文本和代码保持固定字号。每次通过的变更都经 Host settings API 写入。连续快速变更按操作顺序携带命名空间 revision 串行写入,最新写入被拒时重新加载持久值。非 loopback 页面把两个选择都保留在进程内。 +插件在「通用」分区注册外观偏好方块与字号步进器。步进器接受 12 至 24 px 的整数,默认值为 14 px。它以相同增量调整会话标题与基础文本,包括用户气泡与 composer 草稿;流内行的标题、摘要与表格跟随比正文低一档的字号,小号文本和代码保持固定字号。每次通过的变更都经 Host settings API 写入。连续快速变更按操作顺序携带命名空间 revision 串行写入,最新写入被拒时重新加载持久值。非 loopback 页面把两个选择都保留在进程内。 ### 注册主题 @@ -51,7 +51,9 @@ kind: "package-reference" ### 样式表 -`src/styles/` 下有六张样式表,由 ui-theme 的动态客户端 entry 依次导入:`base.css`、`corner-shape.css`、`design-platform.css`、`scrollbar.css`、`gradient-shadow-text.css` 与 `shiki.css`。客户端 bundle 将其编译并注入为插件持有的全局样式,因此卸载与 HMR(热模块替换)会随 ui-theme 一同移除。`scrollbar.css` 消费 `--dsw-alias-scrollbar-*` token,必须排在声明这些 token 的 `design-platform.css` 之后。状态标记使用各自的语义状态 token。`design-platform.css` 还负责代码差异底色的别名及其静态透明度色阶,以及文件对比所用的 `--dsw-alias-file-diff-*` 代码区、行号区和标记配色;`shiki.css` 负责语法颜色。 +`src/styles/` 下有六张样式表,由 ui-theme 的动态客户端 entry 依次导入:`base.css`、`corner-shape.css`、`design-platform.css`、`scrollbar.css`、`gradient-shadow-text.css` 与 `shiki.css`。客户端 bundle 将其编译并注入为插件持有的全局样式,因此卸载与 HMR(热模块替换)会随 ui-theme 一同移除。`scrollbar.css` 消费 `--dsw-alias-scrollbar-*` token,必须排在声明这些 token 的 `design-platform.css` 之后。状态标记使用各自的语义状态 token。`design-platform.css` 还负责代码差异底色的别名及其静态透明度色阶,以及文件对比所用的 `--dsw-alias-file-diff-*` 代码区、行号区和标记配色;`shiki.css` 负责语法颜色。`--dsw-alias-label-shimmer` 为共享文字扫光提供叠加色:浅色配色使用 40% alpha 的黑色,深色配色使用 45% alpha 的白色。 `--dsw-alias-label-deep-diving` 和 `--dsw-alias-label-deep-diving-shimmer` 提供蓝色活动文本和扫光颜色;深色主题使用更亮、饱和度更低的文字,并以更亮的蓝色扫光。 + +`--dsw-alias-turn-trigger-*` token 分别定义深浅主题下轮次触发通知的常态和悬停底色。 `brand-font.css` 导出本地 Montserrat Light、Regular 和 Medium 字体(正体、字重 300、400 和 500),`lib/styles/` 同时提供 `montserrat-light.woff2`、`montserrat-regular.woff2`、`montserrat-medium.woff2` 及其 SIL Open Font License。Desktop 将同一份样式表、字体和许可证打包,用于欢迎页品牌文字的离线显示;普通界面保留系统字体栈。 diff --git a/packages/client/ui-theme/src/styles/design-platform.css b/packages/client/ui-theme/src/styles/design-platform.css index 8f447398fc..a6510f2951 100644 --- a/packages/client/ui-theme/src/styles/design-platform.css +++ b/packages/client/ui-theme/src/styles/design-platform.css @@ -211,6 +211,8 @@ body { --dsw-alias-interactive-bg-hover-solid: var(--dsw-static-neutral-bluish-75); --dsw-alias-interactive-bg-hover: rgba(38, 49, 72, 0.06); --dsw-alias-label-caption: var(--dsw-static-neutral-bluish-400); + --dsw-alias-label-deep-diving: color-mix(in srgb, var(--dsw-static-deepseek-500) 70%, var(--dsw-static-blue-950)); + --dsw-alias-label-deep-diving-shimmer: color-mix(in srgb, var(--dsw-static-deepseek-500) 35%, var(--dsw-static-blue-950)); --dsw-alias-label-dimmed: var(--dsw-static-neutral-bluish-200); --dsw-alias-label-primary-bluish: var(--dsw-static-blue-900); --dsw-alias-label-primary-dimmed: var(--dsw-static-neutral-bluish-950); @@ -218,6 +220,7 @@ body { --dsw-alias-label-primary-inverted: var(--dsw-static-neutral-bluish-00); --dsw-alias-label-primary: var(--dsw-static-neutral-bluish-1000); --dsw-alias-label-secondary: var(--dsw-static-neutral-bluish-700); + --dsw-alias-label-shimmer: color-mix(in srgb, var(--dsw-static-neutral-1000) 40%, transparent); --dsw-alias-label-tertiary: var(--dsw-static-neutral-bluish-600); --dsw-alias-link: var(--dsw-static-deepseek-500); --dsw-alias-markdown-citation: var(--dsw-static-neutral-bluish-100); @@ -254,6 +257,8 @@ body { --dsw-alias-state-warn-tertiary: var(--dsw-static-amber-100); --dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-800); --dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-850); + --dsw-alias-turn-trigger-bg: var(--dsw-alias-markdown-code-block); + --dsw-alias-turn-trigger-bg-hover: var(--dsw-alias-interactive-bg-hover); --dsw-specific-bubble-highlight: var(--dsw-static-deepseek-200); --dsw-specific-bubble: var(--dsw-static-deepseek-50); --dsw-specific-input-major: var(--dsw-static-neutral-bluish-00); @@ -317,6 +322,8 @@ body[data-ds-dark-theme] { --dsw-alias-interactive-bg-hover-solid: var(--dsw-static-neutral-bluish-800); --dsw-alias-interactive-bg-hover: rgba(255, 255, 255, 0.08); --dsw-alias-label-caption: var(--dsw-static-neutral-bluish-600); + --dsw-alias-label-deep-diving: color-mix(in srgb, var(--dsw-static-deepseek-450) 55%, var(--dsw-static-neutral-bluish-400)); + --dsw-alias-label-deep-diving-shimmer: color-mix(in srgb, var(--dsw-static-blue-300) 65%, var(--dsw-static-deepseek-400)); --dsw-alias-label-dimmed: var(--dsw-static-neutral-bluish-750); --dsw-alias-label-primary-bluish: var(--dsw-static-neutral-bluish-50); --dsw-alias-label-primary-dimmed: var(--dsw-static-neutral-bluish-100); @@ -324,6 +331,7 @@ body[data-ds-dark-theme] { --dsw-alias-label-primary-inverted: var(--dsw-static-neutral-bluish-800); --dsw-alias-label-primary: var(--dsw-static-neutral-bluish-50); --dsw-alias-label-secondary: var(--dsw-static-neutral-bluish-300); + --dsw-alias-label-shimmer: color-mix(in srgb, var(--dsw-static-neutral-00) 45%, transparent); --dsw-alias-label-tertiary: var(--dsw-static-neutral-bluish-400); --dsw-alias-link: var(--dsw-static-deepseek-400); --dsw-alias-markdown-citation: var(--dsw-static-neutral-bluish-800); @@ -359,6 +367,8 @@ body[data-ds-dark-theme] { --dsw-alias-state-warn-secondary: var(--dsw-static-amber-400); --dsw-alias-state-warn-tertiary: var(--dsw-static-amber-900); --dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-750); + --dsw-alias-turn-trigger-bg: var(--dsw-alias-interactive-bg-hover); + --dsw-alias-turn-trigger-bg-hover: var(--dsw-alias-interactive-bg-active); --dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-750); --dsw-specific-bubble-highlight: var(--dsw-static-neutral-bluish-750); --dsw-specific-bubble: var(--dsw-static-neutral-bluish-850); diff --git a/packages/client/ui-theme/src/styles/gradient-shadow-text.css b/packages/client/ui-theme/src/styles/gradient-shadow-text.css index b6dc4db464..ae57254ad6 100644 --- a/packages/client/ui-theme/src/styles/gradient-shadow-text.css +++ b/packages/client/ui-theme/src/styles/gradient-shadow-text.css @@ -45,11 +45,11 @@ body[data-ds-dark-theme] { /* Markdown 阶梯整体按 0.875(正文 16 → 14)等比缩放,四舍五入到整数像素; 重新从 Figma 导出时需要保留这一缩放。 */ /* 正文字号调节:--dsh-content-font-size 由主题 bootstrap 与 ThemePresenter - 写在 body 上(整数 px,12–17,默认 14)。标题与正文变体按同一像素增量 + 写在 body 上(整数 px,12–24,默认 14)。标题与正文变体按同一像素增量 (--dsh-content-font-delta)随动,保持层级。低一档文本(think、工具/bash 行的标题与摘要、markdown 表格、流内次级说明等)统一读 --dsh-content-font-size-secondary:设置 ≤14 时为设置值 −1,>14 时为 - 设置值 −2(12→11、13→12、14→13、15→13、16→14、17→15)。式中 + 设置值 −2(12→11、13→12、14→13、15→13、16→14、17→15、24→22)。式中 max(13px,·) 的作用是让低设置取 −1 而非 −2,不是结果下限——12 设置下 层级触底 11px。small、code 属于密集次级文本,保持固定。 */ body { diff --git a/packages/client/ui-theme/src/theme-settings.ts b/packages/client/ui-theme/src/theme-settings.ts index 11f8789d6c..a9202ffa1b 100644 --- a/packages/client/ui-theme/src/theme-settings.ts +++ b/packages/client/ui-theme/src/theme-settings.ts @@ -24,7 +24,7 @@ export const DEFAULT_PREFERENCE: ThemePreference = 'system' export const FONT_SIZE_MIN = 12 /** Largest accepted content font size (px). */ -export const FONT_SIZE_MAX = 17 +export const FONT_SIZE_MAX = 24 /** Content font size when the user-settings document has no override (px). */ export const DEFAULT_FONT_SIZE = 14 diff --git a/packages/client/ui-theme/tests/boot-theme.client.spec.ts b/packages/client/ui-theme/tests/boot-theme.client.spec.ts index 6a0141ea87..574a54dd13 100644 --- a/packages/client/ui-theme/tests/boot-theme.client.spec.ts +++ b/packages/client/ui-theme/tests/boot-theme.client.spec.ts @@ -77,8 +77,8 @@ describe('theme bootstrap row', () => { it('writes the durable content font size and defaults it to 14px', () => { mockSystemDark(false) - executeBootstrap('light', 17) - expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('17px') + executeBootstrap('light', 24) + expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('24px') executeBootstrap('light') expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('14px') }) diff --git a/packages/client/ui-theme/tests/config.host.spec.ts b/packages/client/ui-theme/tests/config.host.spec.ts index a3309b9887..8123a71b31 100644 --- a/packages/client/ui-theme/tests/config.host.spec.ts +++ b/packages/client/ui-theme/tests/config.host.spec.ts @@ -28,11 +28,11 @@ describe('ui-theme host', () => { const configuration = await liveConfig(ctx, { Config, apply }) const { fiber } = configuration expect(plainConfig(configuration.fiber.config)).toEqual({ preference: DEFAULT_PREFERENCE, fontSize: 14 }) - await configuration.update({ preference: 'dark', fontSize: 16 }) - expect(plainConfig(configuration.fiber.config)).toEqual({ preference: 'dark', fontSize: 16 }) + await configuration.update({ preference: 'dark', fontSize: 24 }) + expect(plainConfig(configuration.fiber.config)).toEqual({ preference: 'dark', fontSize: 24 }) await expect(configuration.update({ preference: 'sepia' })).rejects.toThrow() await expect(configuration.update({ fontSize: 11 })).rejects.toThrow() - await expect(configuration.update({ fontSize: 18 })).rejects.toThrow() + await expect(configuration.update({ fontSize: 25 })).rejects.toThrow() await fiber.dispose() }) @@ -51,10 +51,10 @@ describe('ui-theme host', () => { expect(rowText(rows[0])).toContain('@media(prefers-color-scheme:dark)') expect(rowText(rows[1])).toContain('const preference = "system"') expect(rowText(rows[1])).toContain('"14px"') - await configuration.update({ preference: 'dark', fontSize: 17 }) + await configuration.update({ preference: 'dark', fontSize: 24 }) expect(rowText(collect(ctx)[0])).toContain('color-scheme:dark') expect(rowText(collect(ctx)[1])).toContain('const preference = "dark"') - expect(rowText(collect(ctx)[1])).toContain('"17px"') + expect(rowText(collect(ctx)[1])).toContain('"24px"') await fiber.dispose() expect(collect(ctx)).toEqual([{ kind: 'script', placement: 'head', text: 'window.afterTheme=true' }]) }) diff --git a/packages/client/ui-theme/tests/font-size-row.client.spec.tsx b/packages/client/ui-theme/tests/font-size-row.client.spec.tsx index f75138b44a..bc8f33062e 100644 --- a/packages/client/ui-theme/tests/font-size-row.client.spec.tsx +++ b/packages/client/ui-theme/tests/font-size-row.client.spec.tsx @@ -87,7 +87,11 @@ describe('FontSizeRow', () => { }) it('disables the outward arrow at each bound', () => { - mount(17) + const b = mount(23) + fireEvent.click(arrow('Increase font size')) + expect(b.setFontSize).toHaveBeenCalledWith(24) + act(() => { b.store.actions.sync(24, 1) }) + expect(screen.getByText('24')).toBeDefined() expect(arrow('Increase font size').disabled).toBe(true) expect(arrow('Decrease font size').disabled).toBe(false) cleanup() diff --git a/packages/client/ui-theme/tests/theme.client.spec.ts b/packages/client/ui-theme/tests/theme.client.spec.ts index a50ed3e7e2..d00b1d5b66 100644 --- a/packages/client/ui-theme/tests/theme.client.spec.ts +++ b/packages/client/ui-theme/tests/theme.client.spec.ts @@ -36,10 +36,10 @@ describe('ThemeRuntime', () => { it('seeds the initial font size from the boot-script body variable, ignoring junk', () => { // The Host boot script writes the durable size on body before any plugin // runs; the first snapshot must match it so activation never flashes 14. - document.body.style.setProperty('--dsh-content-font-size', '16px') + document.body.style.setProperty('--dsh-content-font-size', '24px') try { - expect(make().theme.getTheme().fontSize).toBe(16) - document.body.style.setProperty('--dsh-content-font-size', '99px') + expect(make().theme.getTheme().fontSize).toBe(24) + document.body.style.setProperty('--dsh-content-font-size', '25px') expect(make().theme.getTheme().fontSize).toBe(14) } finally { document.body.style.removeProperty('--dsh-content-font-size') @@ -48,19 +48,19 @@ describe('ThemeRuntime', () => { it('setFontSize switches, writes through the scope, and republishes; same value is a no-op', () => { const { theme, events, host } = make() - theme.setFontSize(17) - expect(theme.getTheme().fontSize).toBe(17) - expect(host.set).toHaveBeenCalledWith('fontSize', 17) + theme.setFontSize(24) + expect(theme.getTheme().fontSize).toBe(24) + expect(host.set).toHaveBeenCalledWith('fontSize', 24) expect(events).toHaveLength(1) - theme.setFontSize(17) + theme.setFontSize(24) expect(events).toHaveLength(1) expect(host.set).toHaveBeenCalledOnce() }) it('rejects out-of-range and fractional font sizes', () => { const { theme, events, host } = make() - for (const px of [11, 18, 14.5, Number.NaN]) { - expect(() => { theme.setFontSize(px) }).toThrow('outside 12..17') + for (const px of [11, 25, 14.5, Number.NaN]) { + expect(() => { theme.setFontSize(px) }).toThrow('outside 12..24') } expect(events).toHaveLength(0) expect(host.set).not.toHaveBeenCalled() diff --git a/packages/client/ui-tool/README.i18n.yaml b/packages/client/ui-tool/README.i18n.yaml index af3b5ca741..358fa4458f 100644 --- a/packages/client/ui-tool/README.i18n.yaml +++ b/packages/client/ui-tool/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-tool/README.md -README.md: a00ed8e8c78dce29144a3ff89d2eb671b5f209fb -README.zh.md: c4a6f6183be082d8c21877b0c1c7052652bc7e2e +README.md: 1fcfa9ffda84b5e0bf76a46accbe486cfb9e9d04 +README.zh.md: 2806fa47ae4d8e48215bce9ca178984839633421 diff --git a/packages/client/ui-tool/README.md b/packages/client/ui-tool/README.md index a00ed8e8c7..1fcfa9ffda 100644 --- a/packages/client/ui-tool/README.md +++ b/packages/client/ui-tool/README.md @@ -49,7 +49,7 @@ The owner payload is `ToolCallOwnerProps`: `callId`, `toolName`, the `phase` dis Every registered view receives the explicit `preparing`, `start`, and `result` props declared in [the Tool slot types](src/client/contract/slots.ts). Shared rows use the same `ToolRow` in all stages. Their row model selects the title and combines any generic tool-name prefix with the available argument summary independently of lifecycle state. Tool-owned titles omit the English name. Preparation has no argument summary, and the shared argument parser returns no call without parsing JSON. Custom renderers such as Bash, Skill, and Cordis handle preparation separately; their argument-dependent components accept `StartedToolCallViewProps`. -This package owns the generic fallback and the built-in shell/pwsh, read, read_image, write/edit, running `str_replace_editor` `create`/`str_replace`, grep/glob, web, todo, question, and PTC dispatch presentations. Structured cards derive directly from first-party raw event fields; Host `presentCall` and `presentResult` values never enter the Client. Running and settled foreground standard `bash`/`pwsh` and `terminal_send` calls use terminal cards at the root and in PTC dispatch children, subject to the same argument, result, and error checks. Persistent `bash`/`pwsh` calls use terminal cards only while running. Shell output ending in a recognized spill-policy notice uses expandable generic output in shell rows and generic output in Details; a displaced or omitted exit marker cannot establish success. Settled persistent-shell results stay generic because reset and partial-output diagnostics do not always describe one process exit status; root persistent results are expandable, while background acknowledgements remain collapsed. A native or PTC dispatch failure carrying `AUTO_REVIEW_DENIED` shows the Auto review verdict in its collapsed row and one normalized not-executed reason when expanded; a missing or whitespace-only reason uses localized fallback text. A successful question row pairs call questions with result answers by their stable ids and shows readable question/answer lines when expanded. A cancelled or interrupted row shows its verdict and original questions without inventing answers. Unsupported, malformed, or ambiguous inputs fall back to flattened Tool input/result text. `ui-skill` demonstrates a business-owned registration for `skill`. +This package owns the generic fallback and the built-in shell/pwsh, read, read_image, write/edit, running `str_replace_editor` `create`/`str_replace`, grep/glob, web, todo, question, and PTC dispatch presentations. Structured cards derive directly from first-party raw event fields; Host `presentCall` and `presentResult` values never enter the Client. Tool headers follow the shared [process-row colors](../ui-primitives/README.md#component-catalog) for names, summaries, file paths, ordinary counts, glyphs, and chevrons in every Work details mode, whether details are collapsed, expanded, or unavailable; error and warning summaries keep their semantic colors on hover. Running atomic rows share one left-to-right shimmer across their titles, separators, summaries, and suffixes, while settled rows stay static. Running and settled foreground standard `bash`/`pwsh` and `terminal_send` calls use terminal cards at the root and in PTC dispatch children, subject to the same argument, result, and error checks. Persistent `bash`/`pwsh` calls use terminal cards only while running. Shell output ending in a recognized spill-policy notice uses expandable generic output in shell rows and generic output in Details; a displaced or omitted exit marker cannot establish success. Settled persistent-shell results stay generic because reset and partial-output diagnostics do not always describe one process exit status; root persistent results are expandable, while background acknowledgements remain collapsed. A native or PTC dispatch failure carrying `AUTO_REVIEW_DENIED` shows the Auto review verdict in its collapsed row and one normalized not-executed reason when expanded; a missing or whitespace-only reason uses localized fallback text. A successful question row pairs call questions with result answers by their stable ids and shows readable question/answer lines when expanded. A cancelled or interrupted row shows its verdict and original questions without inventing answers. Unsupported, malformed, or ambiguous inputs fall back to flattened Tool input/result text. `ui-skill` demonstrates a business-owned registration for `skill`. ----- @@ -72,7 +72,7 @@ Tool owner props forward Chat's stable `useDisclosure` Hook through root and nes Every card is read in place in the call tree; there is no second, full-height presentation of a selected call. Row renderers share one pure card model for each terminal, read, diff, search, and web card, and the image card's gallery renders through the tool-owned `tool.call.images` slot. These models validate raw call arguments, result content, failure state, persisted metadata, PTC dispatch `parentCallId`, and Session path facts. Unsupported or malformed inputs use flattened Tool result text. A file-path summary opens the file through the owner's `openFile`, which the chat view routes to the right Sidebar's text preview; `inspect` opens the trajectory view and is absent when that View is unavailable; cards then omit Inspect. Card-specific limits and fallback rules for the terminal, diff, read, search, and web cards remain in [the ui-primitives README](../ui-primitives/README.md); the image card's model in this package carries its own fallback rules. -Chat diff cards keep nine rows before folding, enough for a file header, one removed/added pair, and three context lines on either side. The tool row shows the primitive's exact or coarse-replacement counts; the expanded card contains the diff body without a totals footer. +Chat diff cards keep nine rows before folding, enough for a file header, one removed/added pair, and three context lines on either side. The tool row shows the primitive's exact or coarse-replacement counts; the expanded card contains the diff body without a totals footer. Hovering the tool header colors its added count green and removed count red; both retain those colors while the card is expanded. An Auto denial takes precedence over keyed specialized views. Its generic row preserves the call identity, omits raw arguments, and normalizes the stored reason only for display: trim surrounding whitespace and collapse line separators to spaces, with localized fallback for an empty result. Session and SDK error details keep the original reason. diff --git a/packages/client/ui-tool/README.zh.md b/packages/client/ui-tool/README.zh.md index c4a6f6183b..2806fa47ae 100644 --- a/packages/client/ui-tool/README.zh.md +++ b/packages/client/ui-tool/README.zh.md @@ -49,7 +49,7 @@ owner 载荷为 `ToolCallOwnerProps`:`callId`、`toolName`、`phase` 判别字 每个注册视图都接收[工具 slot 类型](src/client/contract/slots.ts)声明的显式 `preparing`、`start` 和 `result` props。通用行在三个阶段使用同一个 `ToolRow`。行模型统一选择标题,并组合通用工具名前缀与已有参数摘要,不按生命周期阶段改变前缀;专用标题不附带英文名。准备阶段没有参数摘要,共享参数解析入口直接返回无调用,不解析 JSON。Bash、Skill、Cordis 等自定义 renderer 分别处理准备态,其依赖参数的组件接收 `StartedToolCallViewProps`。 -本包拥有 generic fallback,以及 shell/pwsh、read、read_image、write/edit、运行中的 `str_replace_editor` `create`/`str_replace`、grep/glob、web、todo、question 与 PTC dispatch 的内置展示。结构化卡片直接从第一方原始 event 字段派生;Host `presentCall` 与 `presentResult` 值不会进入 Client。运行中与已完成的前台标准 `bash`/`pwsh` 和 `terminal_send` 调用,无论位于根还是 PTC dispatch 子调用中,都在通过相同的参数、结果和错误检查后使用 terminal 卡片。持久 `bash`/`pwsh` 调用仅在运行中使用 terminal 卡片。以已识别的 spill 策略提示结尾的 shell 输出,在 shell 行中使用可展开的 generic 输出,在 Details 中使用 generic 输出;位置被改变或被省略的退出标记无法证明成功。已完成的持久 shell 结果保持 generic 展示,因为 reset 与部分输出诊断不一定描述单个进程的退出状态;根调用的持久 shell 结果可展开,后台启动回执则保持折叠。带有 `AUTO_REVIEW_DENIED` 的原生或 PTC dispatch 失败会在折叠行显示 Auto review 裁决,展开时显示一行归一化后的“未执行”原因;原因缺失或只有空白时使用本地化 fallback 文案。成功的问题行按稳定 id 配对调用中的问题与结果中的回答,展开后显示可读的问答行。已取消或已中断的问题行显示其裁决与原始问题,不虚构回答。不受支持、格式错误或含糊的输入回退为压平的工具输入/结果文本。`ui-skill` 展示了业务包自行拥有的 `skill` 注册项。 +本包拥有 generic fallback,以及 shell/pwsh、read、read_image、write/edit、运行中的 `str_replace_editor` `create`/`str_replace`、grep/glob、web、todo、question 与 PTC dispatch 的内置展示。结构化卡片直接从第一方原始事件字段派生;Host `presentCall` 与 `presentResult` 值不会进入 Client。工具标题行的名称、摘要、文件路径、普通数量、图标与箭头在所有工作过程展示模式下均遵循共享的[过程行颜色](../ui-primitives/README.zh.md#component-catalog),无论详情是收起、展开还是不可展开;错误和警告摘要在悬停时保留语义色。运行中的原子工具行以同一道高光从左到右扫过标题、分隔符、摘要与后缀;已完成行保持静态。运行中与已完成的前台标准 `bash`/`pwsh` 和 `terminal_send` 调用,无论位于根还是 PTC dispatch 子调用中,都在通过相同的参数、结果和错误检查后使用 terminal 卡片。持久 `bash`/`pwsh` 调用仅在运行中使用 terminal 卡片。以已识别的 spill 策略提示结尾的 shell 输出,在 shell 行中使用可展开的 generic 输出,在 Details 中使用 generic 输出;位置被改变或被省略的退出标记无法证明成功。已完成的持久 shell 结果保持 generic 展示,因为 reset 与部分输出诊断不一定描述单个进程的退出状态;根调用的持久 shell 结果可展开,后台启动回执则保持折叠。带有 `AUTO_REVIEW_DENIED` 的原生或 PTC dispatch 失败会在折叠行显示 Auto review 裁决,展开时显示一行归一化后的“未执行”原因;原因缺失或只有空白时使用本地化 fallback 文案。成功的问题行按稳定 id 配对调用中的问题与结果中的回答,展开后显示可读的问答行。已取消或已中断的问题行显示其裁决与原始问题,不虚构回答。不受支持、格式错误或含糊的输入回退为压平的工具输入/结果文本。`ui-skill` 展示了业务包自行拥有的 `skill` 注册项。 ----- @@ -72,7 +72,7 @@ Tool 所有者属性将 Chat 注入的稳定 `useDisclosure` 钩子传给根调 每张卡片都直接在调用树中查看;选中调用后不会再显示第二个全高视图。行 renderer 为 terminal、read、diff、search 和 web 卡片各复用同一个纯 card model,image 卡片的图库经由工具自有 `tool.call.images` slot 渲染。这些 model 校验原始调用参数、结果内容、失败状态、持久 metadata、PTC dispatch 的 `parentCallId` 与会话路径信息。不受支持或格式错误的输入使用压平的工具结果文本。文件路径摘要经属主的 `openFile` 打开文件,chat 视图把它路由到右侧 Sidebar 的文本预览;`inspect` 打开轨迹视图;该视图不可用时不提供此回调,卡片随之隐藏 Inspect。terminal、diff、read、search 与 web 卡片的上限与 fallback 规则仍由 [ui-primitives README](../ui-primitives/README.zh.md) 负责;image 卡片的 fallback 规则由本包内的 card model 自行承载。 -Chat diff 卡片在折叠前保留九行,足以容纳文件标题、一对删除与新增行及两侧各三行上下文。工具行显示原语提供的精确或粗粒度替换统计;展开卡片包含差异正文,不显示底部统计。 +Chat diff 卡片在折叠前保留九行,足以容纳文件标题、一对删除与新增行及两侧各三行上下文。工具行显示原语提供的精确或粗粒度替换统计;展开卡片包含差异正文,不显示底部统计。悬停工具标题行时,新增数量显示绿色、删除数量显示红色;卡片展开期间保留这两种颜色。 Auto 拒绝优先于按工具名选择的专门视图。其通用行保留调用身份、省略原始参数,并且只在显示时归一化存储的理由:去除首尾空白,把行分隔符折叠为空格,结果为空时使用本地化通用理由。Session 与 SDK 错误详情保留原始理由。 diff --git a/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css b/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css index 5e54eeb7e5..a33507500d 100644 --- a/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css +++ b/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css @@ -15,28 +15,12 @@ flex-shrink: 0; } -/* Cordis lifecycle tools retain their generic row mechanics while carrying a - shared product accent and tool-owned action title. */ -.root[data-tool^='cordis_'] .leading, -.root[data-tool^='cordis_'] .title { - color: var(--dsw-alias-state-business-primary); -} - .root[data-tool^='cordis_'] .title { font-weight: 500; } -.root[data-tool^='cordis_'] .sep { - background: var(--dsw-alias-state-business-primary); -} - -.chevron { - color: var(--dsw-alias-label-secondary); -} - .title { font-weight: 400; - transition: color 100ms ease; } .sep { @@ -56,8 +40,6 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: var(--dsw-alias-label-tertiary); - transition: color 100ms ease; } /* Trailing summary fragment kept out of .summary's ellipsis, for a count whose @@ -71,31 +53,29 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: var(--dsw-alias-label-tertiary); - transition: color 100ms ease; -} - -.row:hover .title, -.row:hover .summary:not(.errorSummary):not(.stoppedSummary), -.row:hover .summarySuffix { - color: var(--dsw-alias-label-primary); } /* Diff-row +/- totals: the code font, matching the diff body the numbers summarize; a wider gap keeps the digits from reading as part of the path. Two px under the secondary tier (still riding the axis): mono digits read - optically larger than the sans path at the same size. Caption, one step - dimmer than the suffix's tertiary, so the digits stay behind the path. The + optically larger than the sans path at the same size. The half-pixel nudge closes the baseline gap the size difference leaves under the row's box-centering (a transform, so flex layout is untouched). */ .diffStat { margin-left: 10px; font-family: var(--ds-font-family-code); font-size: calc(var(--dsh-content-font-size-secondary, 13px) - 2px); - color: var(--dsw-alias-label-caption); transform: translateY(0.5px); } +.row:is(:hover, [aria-expanded='true']) .diffAdded { + color: var(--dsw-alias-state-success-primary); +} + +.row:is(:hover, [aria-expanded='true']) .diffRemoved { + color: var(--dsw-alias-state-error-primary); +} + /* File-tool path: same type as .summary, with a persistent link affordance. Dotted dimmed underline: visible enough to say "clickable", light enough that a long path doesn't read as one heavy rule under the row. Shrink-to-fit @@ -115,19 +95,12 @@ text-align: left; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: var(--dsw-alias-label-secondary); + color: inherit; text-decoration: underline dotted; - text-decoration-color: var(--dsw-alias-label-tertiary); + text-decoration-color: currentColor; text-decoration-thickness: 1px; text-underline-offset: 3px; cursor: pointer; - transition: color 100ms ease; -} - -.row:hover .fileLink, -.fileLink:hover { - color: var(--dsw-alias-label-primary); - text-decoration-color: currentColor; } /* Error row's collapsed summary: the failure's first line in the error color. */ diff --git a/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx b/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx index 618344b4c7..8855a32105 100644 --- a/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx +++ b/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx @@ -2,7 +2,7 @@ import { memo, useCallback, useMemo, type KeyboardEvent, type MouseEvent, type R import clsx from 'clsx' import { CodeBlock, DiffBlock, DisclosureRow, IconInspectOutlineRegular, ReadBlock, SearchBlock, - TerminalBlock, TextShimmer, WebBlock, + TerminalBlock, ShimmerText, WebBlock, diffTotals, } from '@deepseek-ai/dsh-client-ui-primitives' import type { PropsRenderSlots, TranslateNS } from '@deepseek-ai/dsh-client-ui-slots' @@ -55,6 +55,7 @@ export interface ToolRowProps { errorSummary?: string | null | undefined /** Terminal card; card fields are mutually exclusive and replace text sections. */ terminal?: TerminalCardModel | null | undefined + /** Diff card with inline totals colored on header hover and while expanded. */ diff?: DiffCardModel | null | undefined read?: ReadCardModel | null | undefined /** @@ -175,11 +176,7 @@ export const ToolRow = memo(function ToolRow({ const summaryText = failureLine ?? normalSummary // The tool row keeps the diff's +/- totals visible while its body is collapsed. // An explicit summarySuffix overrides the diff totals. - const diffStat = useMemo(() => { - if (diffBody === null) return null - const { added, removed } = diffTotals(diffBody.card.diffs) - return `+${added} -${removed}` - }, [diffBody]) + const diffStat = useMemo(() => diffBody === null ? null : diffTotals(diffBody.card.diffs), [diffBody]) const settledWithCue = state === 'error' || state === 'stopped' const suffix = settledWithCue ? null : summarySuffix ?? diffStat const openFile = useMemo(() => filePath !== undefined && onOpenFile !== undefined && !settledWithCue @@ -203,7 +200,7 @@ export const ToolRow = memo(function ToolRow({ /* An empty summary drops the separator with it (a row that is only its title shows no trailing dot). */ <> - + {openFile !== undefined ? ( ) : ( - {summaryText} + {summaryText} )} - {suffix !== null && ( - {suffix} - )} + {suffix !== null && (typeof suffix === 'string' + ? {suffix} + : ( + + {`+${suffix.added}`} + {' '} + {`-${suffix.removed}`} + + ))} - ), [diffStat, fileLinkKeyDown, openFile, running, state, suffix, summaryText]) + ), [fileLinkKeyDown, openFile, state, suffix, summaryText]) const expandedContent = useMemo(() => open ? (
{askQuestionBody !== null @@ -340,7 +343,6 @@ export const ToolRow = memo(function ToolRow({ rowClassName={css.row} leadingClassName={css.leading} titleClassName={css.title} - chevronClassName={css.chevron} icon={icon} title={title} running={running} diff --git a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css index 9ef5b4b829..007219766c 100644 --- a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css +++ b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css @@ -89,6 +89,18 @@ align-items: center; height: calc(24px + var(--dsh-content-font-delta, 0px)); min-width: 0; + color: var(--dsw-alias-label-tertiary); + transition: color 100ms ease; +} + +.root:hover { + color: var(--dsw-alias-label-secondary); +} + +@media (prefers-reduced-motion: reduce) { + .root { + transition: none; + } } .leading { @@ -100,7 +112,7 @@ align-items: center; justify-content: center; margin-right: 6px; - color: var(--dsw-alias-label-tertiary); + color: inherit; } /* Same glyph-scaling rule as DisclosureRow's leading: the CSS edge overrides @@ -115,7 +127,7 @@ } .chevron { - color: var(--dsw-alias-label-secondary); + color: inherit; } /* Hover preview on the expandable row: the idle icon crossfades (100ms) into @@ -146,8 +158,6 @@ flex: none; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: var(--dsw-alias-label-secondary); - transition: color 100ms ease; } .sep { @@ -167,13 +177,6 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: var(--dsw-alias-label-tertiary); - transition: color 100ms ease; -} - -.root:hover .title, -.root:hover .summary:not(.errorSummary):not(.stoppedSummary) { - color: var(--dsw-alias-label-primary); } /* Error row's collapsed summary: the failure's first line in the error color. */ diff --git a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx index 47ae2d1b6d..68e18b8aee 100644 --- a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx +++ b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx @@ -3,7 +3,7 @@ import type { Context } from '@deepseek-ai/cordis' import clsx from 'clsx' import { IconApiOutlineRegular, IconChevronDownOutlineRegular, IconChevronUpOutlineRegular, IconInspectOutlineRegular, - TerminalBlock, TextShimmer, + TerminalBlock, Shimmer, ShimmerText, } from '@deepseek-ai/dsh-client-ui-primitives' import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots' import type { ToolCallViewProps } from '../../contract/slots.ts' @@ -107,17 +107,19 @@ const StartedBashRow = memo(function StartedBashRow({ toolName, block, sessionId onClick={expandable ? toggleExpand : undefined} onKeyDown={expandable ? toggleFromKeyboard : undefined} > - {leading} {status !== null && {status}} - {t(model.titleKey)} - - - {settlementLine ?? normalSummary} - + {leading} + + {t(model.titleKey)} + + + {settlementLine ?? normalSummary} + +
{open && (
diff --git a/packages/client/ui-tool/tests/diff-card.client.spec.tsx b/packages/client/ui-tool/tests/diff-card.client.spec.tsx index 3f9282b29f..7ebc5265a3 100644 --- a/packages/client/ui-tool/tests/diff-card.client.spec.tsx +++ b/packages/client/ui-tool/tests/diff-card.client.spec.tsx @@ -245,9 +245,10 @@ describe('FileMutationRow diff card', () => { meta: { diffs: [] }, }), 'write')} />) // The collapsed row already carries the card's +/- totals beside the path. - expect(view.getByText('+1 -0')).toBeTruthy() + expect(view.container.querySelector('[data-disclosure-row]')?.textContent).toContain('+1 -0') toggleRow(view) - expect(view.getAllByText('+1 -0')).toHaveLength(1) + expect(view.getAllByText('+1')).toHaveLength(1) + expect(view.getAllByText('-0')).toHaveLength(1) expect(view.getByText('hello fixture')).toBeTruthy() }) diff --git a/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts b/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts index db05c7f769..399c588713 100644 --- a/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts +++ b/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts @@ -25,9 +25,15 @@ describe('ToolRow.module.css summary line', () => { it.each([ ['ToolRow', '../src/client/tool/components/ToolRow.module.css'], ['BashRow', '../src/client/tool/toolviews/bash-sample.module.css'], - ] as const)('%s keeps stopped and error summaries outside hover darkening', (_name, path) => { + ] as const)('%s leaves row text color to the shared disclosure header', (_name, path) => { + // The header supplies tertiary at rest and secondary on hover; a tool sheet + // that restates a row text color, or brightens the row text on hover, would + // pin one state against the shared process-row colors. The Inspect button + // keeps its own solid hover fill and is not row text. const sheet = readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8') - expect(sheet).toContain('.summary:not(.errorSummary):not(.stoppedSummary)') + .replace(/\/\*[\s\S]*?\*\//g, ' ') + expect(sheet).not.toMatch(/\.(title|summary|summarySuffix)\s*\{[^{}]*\bcolor:/) + expect(sheet).not.toMatch(/:hover\s+\.(title|summary|summarySuffix)\b/) }) it('keeps the summary suffix on one line and unshrunk', () => { diff --git a/packages/client/ui-tool/tests/tool-row.client.spec.tsx b/packages/client/ui-tool/tests/tool-row.client.spec.tsx index f9338cac00..5f9c210e69 100644 --- a/packages/client/ui-tool/tests/tool-row.client.spec.tsx +++ b/packages/client/ui-tool/tests/tool-row.client.spec.tsx @@ -309,10 +309,11 @@ describe('ToolRow', () => { newText: 'start\nsecond\nthird\nnew\nfourth\nfifth\nend', }] }, }} />) - expect(view.getByText('+1 -1')).toBeTruthy() + expect(view.container.querySelector('[data-disclosure-row]')?.textContent).toContain('+1 -1') expect(view.container.querySelector('[data-diff]')).toBeNull() fireEvent.click(view.getByRole('button')) - expect(view.getAllByText('+1 -1')).toHaveLength(1) + expect(view.getAllByText('+1')).toHaveLength(1) + expect(view.getAllByText('-1')).toHaveLength(1) expect(view.getAllByText('start')).toHaveLength(1) expect(view.getAllByText('end')).toHaveLength(1) expect(view.getByText('old', { exact: true })).toBeTruthy() @@ -344,7 +345,7 @@ describe('ToolRow', () => { it('keeps the business icon across running and error states', () => { const runningView = render() - expect(runningView.queryByTestId('tool-icon')).not.toBeNull() + expect(runningView.container.querySelector('[data-testid="tool-icon"]:not([inert] *)')).not.toBeNull() expect(runningView.container.querySelector('[data-state="running"]')).not.toBeNull() const errorView = render() expect(errorView.container.querySelector('[data-testid="tool-icon"]')).not.toBeNull() diff --git a/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css b/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css index 190f136f70..270efc6c24 100644 --- a/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css +++ b/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css @@ -29,14 +29,14 @@ align-items: center; justify-content: center; margin-right: 0; - color: var(--dsw-alias-label-tertiary); + color: inherit; } .runTitle { overflow: hidden; flex: none; max-width: 42%; - color: var(--dsw-alias-label-secondary); + color: inherit; font-size: var(--dsh-content-font-size-secondary, 13px); font-weight: 510; line-height: calc(24px + var(--dsh-content-font-delta, 0px)); @@ -48,7 +48,7 @@ overflow: hidden; flex: 1; min-width: 0; - color: var(--dsw-alias-label-tertiary); + color: inherit; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(18px + var(--dsh-content-font-delta-secondary, 0px)); text-overflow: ellipsis; @@ -65,7 +65,7 @@ font-size: 11px; font-weight: 510; line-height: 16px; - color: var(--dsw-alias-label-secondary); + color: inherit; white-space: nowrap; } @@ -93,7 +93,7 @@ align-items: center; justify-content: center; margin-right: 0; - color: var(--dsw-alias-label-tertiary); + color: inherit; } .phaseTitle { @@ -101,7 +101,7 @@ flex: 0 1 auto; min-width: 0; max-width: 42%; - color: var(--dsw-alias-label-secondary); + color: inherit; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); text-overflow: ellipsis; @@ -112,7 +112,7 @@ overflow: hidden; flex: 1; min-width: 0; - color: var(--dsw-alias-label-tertiary); + color: inherit; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(20px + var(--dsh-content-font-delta-secondary, 0px)); text-overflow: ellipsis; @@ -125,7 +125,7 @@ /* Column width scales with the text (~132/13 ≈ 10px per font-size px) so larger sizes keep the same status text visible instead of truncating. */ width: calc(132px + var(--dsh-content-font-delta-secondary, 0px) * 10); - color: var(--dsw-alias-label-secondary); + color: inherit; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(20px + var(--dsh-content-font-delta-secondary, 0px)); text-align: right; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9d834a613b..0e7d7b3a45 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3193,6 +3193,9 @@ importers: '@types/react-dom': specifier: ~18.3.0 version: 18.3.7(@types/react@18.3.31) + lottie-web: + specifier: ^5.13.0 + version: 5.13.0 react: specifier: ^18.2.0 version: 18.3.1 @@ -9182,7 +9185,7 @@ importers: version: link:../../../vendor/schemastery '@earendil-works/pi-ai': specifier: ^0.85.1 - version: 0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) + version: 0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(supports-color@9.4.0)(ws@8.21.0)(zod@4.4.3) devDependencies: '@deepseek-ai/cordis': specifier: workspace:~ @@ -19363,6 +19366,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + lottie-web@5.13.0: + resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} + lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -22058,14 +22064,14 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@earendil-works/pi-ai@0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': + '@earendil-works/pi-ai@0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(supports-color@9.4.0)(ws@8.21.0)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.123.0(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1048.0 '@earendil-works/pi-telemetry': 0.85.1 '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) '@smithy/node-http-handler': 4.7.3 - http-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2(supports-color@9.4.0) https-proxy-agent: 7.0.6 openai: 6.40.0(ws@8.21.0)(zod@4.4.3) partial-json: 0.1.7 @@ -24807,7 +24813,7 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.3(supports-color@9.4.0) fs-extra: 10.1.0 - http-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2(supports-color@9.4.0) https-proxy-agent: 7.0.6 js-yaml: 4.3.1 sanitize-filename: 1.6.4 @@ -26237,7 +26243,7 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@9.4.0): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@9.4.0) @@ -26747,6 +26753,8 @@ snapshots: dependencies: js-tokens: 4.0.0 + lottie-web@5.13.0: {} + lowercase-keys@2.0.0: {} lru-cache@10.4.3: {} diff --git a/scripts/rescope-vendor.ts b/scripts/rescope-vendor.ts index 2f724032d1..793df0ad81 100644 --- a/scripts/rescope-vendor.ts +++ b/scripts/rescope-vendor.ts @@ -135,6 +135,7 @@ const GENERIC_SKIPS: readonly GenericSkip[] = [ { file: 'packages/extensions/ui-cordis/src/client/CordisActionRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisDefineRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisPanel.tsx', upstream: ['cordis'] }, + { file: 'packages/extensions/ui-cordis/src/client/CordisPreparingRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisRunRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/locales.ts', upstream: ['cordis'] }, ] diff --git a/scripts/test-dom-environment.ts b/scripts/test-dom-environment.ts index 12c8895735..6991a6854e 100644 --- a/scripts/test-dom-environment.ts +++ b/scripts/test-dom-environment.ts @@ -1,8 +1,23 @@ /** Initial resize delivery from jsdom's modeled offsets; geometry/timing suites supply their own observers. */ import { afterAll, beforeEach } from 'vitest' +// The SVG animation player initializes a transparent 1px Canvas placeholder at import time. +const canvasPrototype = typeof HTMLCanvasElement === 'undefined' ? undefined : HTMLCanvasElement.prototype +const originalCanvasContext = canvasPrototype === undefined ? undefined : Object.getOwnPropertyDescriptor(canvasPrototype, 'getContext') +if (canvasPrototype !== undefined) { + Object.defineProperty(canvasPrototype, 'getContext', { + configurable: true, + value: (contextId: string) => { + if (contextId !== '2d') throw new Error(`test DOM: unsupported Canvas context ${contextId}`) + return { fillStyle: '', fillRect: () => {} } + }, + }) +} + const original = Object.getOwnPropertyDescriptor(globalThis, 'ResizeObserver') let installed = false +const originalMatchMedia = typeof window === 'undefined' ? undefined : Object.getOwnPropertyDescriptor(window, 'matchMedia') +let installedMatchMedia = false class TestResizeObserver implements ResizeObserver { private readonly targets = new Set() @@ -27,6 +42,13 @@ class TestResizeObserver implements ResizeObserver { } beforeEach(() => { + if (typeof window !== 'undefined' && typeof window.matchMedia !== 'function') { + const matchMedia: Window['matchMedia'] = media => Object.assign(new EventTarget(), { + media, matches: false, onchange: null, addListener: () => {}, removeListener: () => {}, + }) + Object.defineProperty(window, 'matchMedia', { configurable: true, writable: true, value: matchMedia }) + installedMatchMedia = true + } if (typeof document !== 'undefined' && typeof ResizeObserver === 'undefined') { // Establish the per-environment default, so vi.unstubAllGlobals restores it. Object.defineProperty(globalThis, 'ResizeObserver', { configurable: true, writable: true, value: TestResizeObserver }) @@ -35,7 +57,16 @@ beforeEach(() => { }) afterAll(() => { - if (!installed) return - if (original === undefined) Reflect.deleteProperty(globalThis, 'ResizeObserver') - else Object.defineProperty(globalThis, 'ResizeObserver', original) + if (canvasPrototype !== undefined) { + if (originalCanvasContext === undefined) Reflect.deleteProperty(canvasPrototype, 'getContext') + else Object.defineProperty(canvasPrototype, 'getContext', originalCanvasContext) + } + if (installed) { + if (original === undefined) Reflect.deleteProperty(globalThis, 'ResizeObserver') + else Object.defineProperty(globalThis, 'ResizeObserver', original) + } + if (installedMatchMedia) { + if (originalMatchMedia === undefined) Reflect.deleteProperty(window, 'matchMedia') + else Object.defineProperty(window, 'matchMedia', originalMatchMedia) + } }) diff --git a/snapshots/web/auto-review-denial/ui.expected.md b/snapshots/web/auto-review-denial/ui.expected.md index 1ceeeb4f1e..d3172476e3 100644 --- a/snapshots/web/auto-review-denial/ui.expected.md +++ b/snapshots/web/auto-review-denial/ui.expected.md @@ -9,8 +9,8 @@ - tab "Trajectory" - text: Inspect the protected operation, but do not run it unless authorized. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - text: Failed - button "Tool call Rejected by Auto review" @@ -37,8 +37,8 @@ - tab "Trajectory" - text: Inspect the protected operation, but do not run it unless authorized. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - text: Failed - button "Tool call Rejected by Auto review" [expanded] diff --git a/snapshots/web/bash-abort-row/ui.expected.md b/snapshots/web/bash-abort-row/ui.expected.md index c74b1b8193..e7f584b73c 100644 --- a/snapshots/web/bash-abort-row/ui.expected.md +++ b/snapshots/web/bash-abort-row/ui.expected.md @@ -8,7 +8,7 @@ - text: "Run two shell commands: wait for cancellation, then write skipped.txt. {{clock}}" - button "Copy" - status: Stopped -- button "Stopped" [disabled] [expanded] +- button "Stopped" [expanded] - button "Ran commands" [expanded] - 'button "Failed Bash Error: tool call aborted" [expanded]' - text: "IN { \"command\": \"node -e \\\"const fs=require('node:fs'); fs.writeFileSync('started.tmp', 'started'); fs.renameSync('started.tmp', 'started.txt'); setInterval(() => {}, 1000)\\\"\", \"description\": \"Wait until cancellation\" } OUT Error: tool call aborted" diff --git a/snapshots/web/changed-files-turn/ui.expected.md b/snapshots/web/changed-files-turn/ui.expected.md index 7500599d2e..2f1d34dc98 100644 --- a/snapshots/web/changed-files-turn/ui.expected.md +++ b/snapshots/web/changed-files-turn/ui.expected.md @@ -1,7 +1,7 @@ - text: 不用先查看目录,直接做四件事:把 intro.md 里的标题「示例项目」改成「项目说明」,新建 src/util.ts 导出一个两数相加的 add 函数,新建 app.local 写一行 mode=demo,最后用 bash 在 notes.txt 末尾追加一行 done。 {{clock}} - button "复制" -- status: 已完成工作 -- button "用时 {{duration}}" [expanded] +- status: 已完成 +- button "已完成,用时 {{duration}}" [expanded] - button "执行了命令,已写入文件,已读取文件等" [expanded] - button "思考" - button "读取 intro.md": diff --git a/snapshots/web/deepseek-messages-chat/ui.expected.md b/snapshots/web/deepseek-messages-chat/ui.expected.md index 021809ac0c..56f27b62ba 100644 --- a/snapshots/web/deepseek-messages-chat/ui.expected.md +++ b/snapshots/web/deepseek-messages-chat/ui.expected.md @@ -8,8 +8,8 @@ - tab "轨迹" - text: 只回复 MESSAGES_WEB_READY,不调用工具。 {{clock}} - button "复制" -- status: 已完成工作 -- button "用时 {{duration}}" [disabled] +- status: 已完成 +- button "已完成,用时 {{duration}}" [disabled] - paragraph: MESSAGES_WEB_READY - button "复制" - button "好的回答" diff --git a/snapshots/web/default-workspace/ui.expected.md b/snapshots/web/default-workspace/ui.expected.md index 27cdaa5150..9f26daff62 100644 --- a/snapshots/web/default-workspace/ui.expected.md +++ b/snapshots/web/default-workspace/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/feedback-command/ack-expanded.expected.md b/snapshots/web/feedback-command/ack-expanded.expected.md index f9d619e382..102788fbbe 100644 --- a/snapshots/web/feedback-command/ack-expanded.expected.md +++ b/snapshots/web/feedback-command/ack-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/feedback-command/ack.expected.md b/snapshots/web/feedback-command/ack.expected.md index 716f3bd304..4f55e3e95f 100644 --- a/snapshots/web/feedback-command/ack.expected.md +++ b/snapshots/web/feedback-command/ack.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/feedback-release/ack-expanded.expected.md b/snapshots/web/feedback-release/ack-expanded.expected.md index f9d619e382..102788fbbe 100644 --- a/snapshots/web/feedback-release/ack-expanded.expected.md +++ b/snapshots/web/feedback-release/ack-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/feedback-release/ack.expected.md b/snapshots/web/feedback-release/ack.expected.md index 716f3bd304..4f55e3e95f 100644 --- a/snapshots/web/feedback-release/ack.expected.md +++ b/snapshots/web/feedback-release/ack.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/file-upload-round/ui.expected.md b/snapshots/web/file-upload-round/ui.expected.md index 0c60a10a69..ff7effe13d 100644 --- a/snapshots/web/file-upload-round/ui.expected.md +++ b/snapshots/web/file-upload-round/ui.expected.md @@ -11,8 +11,8 @@ - img "reference-1.png" - text: Read the attached file with the read tool, reply with exactly the single word it contains, and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: UPLOAD_ROUND_OK - button "Copy" - button "Good response" diff --git a/snapshots/web/fresh-round-trip/ui-expanded.expected.md b/snapshots/web/fresh-round-trip/ui-expanded.expected.md index 0c4d334df3..de867a8745 100644 --- a/snapshots/web/fresh-round-trip/ui-expanded.expected.md +++ b/snapshots/web/fresh-round-trip/ui-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Think" - button "Bash Echo the test string" diff --git a/snapshots/web/fresh-round-trip/ui.expected.md b/snapshots/web/fresh-round-trip/ui.expected.md index 27cdaa5150..9f26daff62 100644 --- a/snapshots/web/fresh-round-trip/ui.expected.md +++ b/snapshots/web/fresh-round-trip/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md b/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md index 067f2ece45..00385a4c9b 100644 --- a/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md +++ b/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md @@ -14,8 +14,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Ran commands and updated the plan" [expanded] - button "Think" - button "Bash List package directories deterministically" @@ -51,8 +51,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Think" - button "Bash Randomly select another package with Python" diff --git a/snapshots/web/goal-multi-turn-actions/ui.expected.md b/snapshots/web/goal-multi-turn-actions/ui.expected.md index d7d9ad4839..505a067cbb 100644 --- a/snapshots/web/goal-multi-turn-actions/ui.expected.md +++ b/snapshots/web/goal-multi-turn-actions/ui.expected.md @@ -14,8 +14,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: - strong: Turn 1 / 2 - text: — 随机选中的包: @@ -38,8 +38,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: 两个 turn 都完成了 ✅ - paragraph: - strong: 总结: @@ -94,7 +94,6 @@ - button "Good response" - button "Bad response" - button "Branch into a new conversation" -- tooltip "Branch into a new conversation" - text: {{clock}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" diff --git a/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md b/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md index 761eb41613..8bf5e6fb79 100644 --- a/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md +++ b/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/lifecycle-chrome/reloaded.expected.md b/snapshots/web/lifecycle-chrome/reloaded.expected.md index f6a61355d8..6f51412377 100644 --- a/snapshots/web/lifecycle-chrome/reloaded.expected.md +++ b/snapshots/web/lifecycle-chrome/reloaded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/live-interactions/loading.expected.md b/snapshots/web/live-interactions/loading.expected.md index 7976fcca1c..5e83a173bc 100644 --- a/snapshots/web/live-interactions/loading.expected.md +++ b/snapshots/web/live-interactions/loading.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/live-interactions/retry-expanded.expected.md b/snapshots/web/live-interactions/retry-expanded.expected.md index ad8e9f8f2b..1fc7f0416b 100644 --- a/snapshots/web/live-interactions/retry-expanded.expected.md +++ b/snapshots/web/live-interactions/retry-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - group: - status: Retried model request (1/5) · {{duration}} - button "Analysis completed" [expanded] diff --git a/snapshots/web/live-interactions/retry.expected.md b/snapshots/web/live-interactions/retry.expected.md index 33c058c865..abc388a29c 100644 --- a/snapshots/web/live-interactions/retry.expected.md +++ b/snapshots/web/live-interactions/retry.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/live-interactions/running-draft.expected.md b/snapshots/web/live-interactions/running-draft.expected.md index 1bdf81ba91..9e5231c18f 100644 --- a/snapshots/web/live-interactions/running-draft.expected.md +++ b/snapshots/web/live-interactions/running-draft.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions": - paragraph: Queue this follow-up while the current turn is running. - button "Add files or run commands" diff --git a/snapshots/web/message-actions/ui.expected.md b/snapshots/web/message-actions/ui.expected.md index ed11835a6c..0eee19f56e 100644 --- a/snapshots/web/message-actions/ui.expected.md +++ b/snapshots/web/message-actions/ui.expected.md @@ -13,18 +13,15 @@ - button "Copy" - tooltip "Copy" - status: Stopped -- button "Stopped" [disabled] [expanded] -- button "Analysis completed" -- paragraph: I will read both files before answering. -- button "Read files" +- button "Stopped" - button "Copy" - button "Good response" - button "Bad response" - button "Branch into a new conversation" [disabled] - text: Available only on the last message of a completed turn {{clock}} Now give the final answer. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - paragraph: DONE - button "Copy" - button "Good response" @@ -32,8 +29,8 @@ - button "Branch into a new conversation" - text: {{clock}} Keep this later input in the original conversation. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - paragraph: ORIGINAL ONLY - button "Copy" - button "Good response" diff --git a/snapshots/web/minimal-preset/ui.expected.md b/snapshots/web/minimal-preset/ui.expected.md index e489e916e6..0469ba0e75 100644 --- a/snapshots/web/minimal-preset/ui.expected.md +++ b/snapshots/web/minimal-preset/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: printf 'MINIMAL_BASH_CARD_OK\\n'. Then reply exactly MINIMAL_PRESET_REQUEST_OK and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Bash printf 'MINIMAL_BASH_CARD_OK\\n'" [expanded] - text: "IN { \"command\": \"printf 'MINIMAL_BASH_CARD_OK\\\\n'\" } OUT MINIMAL_BASH_CARD_OK [Command finished with exit code 0]" diff --git a/snapshots/web/plan-review/approved-expanded.expected.md b/snapshots/web/plan-review/approved-expanded.expected.md index 6f978228c7..1bfe52e4e6 100644 --- a/snapshots/web/plan-review/approved-expanded.expected.md +++ b/snapshots/web/plan-review/approved-expanded.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "plan Plan mode on. Use /plan off to leave. Plan a small change: add a --greeting flag to a CLI. Do not read or write any files. Call exit_plan_mode with a short plan of at most five bullet points. Once the plan is approved, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: diff --git a/snapshots/web/plan-review/approved.expected.md b/snapshots/web/plan-review/approved.expected.md index 279843a249..bab8040ae6 100644 --- a/snapshots/web/plan-review/approved.expected.md +++ b/snapshots/web/plan-review/approved.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "plan Plan mode on. Use /plan off to leave. Plan a small change: add a --greeting flag to a CLI. Do not read or write any files. Call exit_plan_mode with a short plan of at most five bullet points. Once the plan is approved, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - 'button "Open plan: Add `--greeting` flag to CLI"': "Add `--greeting` flag to CLI Plan · Markdown Open" - button "Copy" diff --git a/snapshots/web/present-svg/ui.expected.md b/snapshots/web/present-svg/ui.expected.md index 08f503ab05..7aeef09f49 100644 --- a/snapshots/web/present-svg/ui.expected.md +++ b/snapshots/web/present-svg/ui.expected.md @@ -1,7 +1,7 @@ - text: 简单画一个 SVG 表示冯诺依曼架构, 保存为 von-neumann.svg {{clock}} - button "复制" -- status: 已完成工作 -- button "用时 {{duration}}" [expanded] +- status: 已完成 +- button "已完成,用时 {{duration}}" [expanded] - button "已完成分析" [expanded] - button "思考" - paragraph: 我来创建一个冯诺依曼架构的 SVG 示意图。 diff --git a/snapshots/web/present/ui.expected.md b/snapshots/web/present/ui.expected.md index 34a2a77047..41d4680b7a 100644 --- a/snapshots/web/present/ui.expected.md +++ b/snapshots/web/present/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use one run_code program to do the following in order. Call present for missing.txt and catch its error without creating that file. Use bash to run exactly `printf \"DELIVERED_REPORT\\n\" > report.txt; printf \"DELIVERED_NOTE\\n\" > 说明.txt`. Call present for report.txt and 说明.txt. After present succeeds, deliberately throw the string \"AFTER_PRESENT\" (not an Error object) from that same run_code program. Do not retry the program or create any other files. Finish by mentioning `report.txt` and `说明.txt` in inline code, and put PRESENT_DONE in a separate paragraph. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - button "Think" - text: Failed diff --git a/snapshots/web/ptc-round/ui.expected.md b/snapshots/web/ptc-round/ui.expected.md index 986dcf439c..3dbcb5d3ec 100644 --- a/snapshots/web/ptc-round/ui.expected.md +++ b/snapshots/web/ptc-round/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Using ONE run_code program: run bash `echo CODE_ROUND_OK`, then read the file missing.txt catching its error in the program. Return an object with both outcomes. Then reply DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Ran code, ran commands, read files" [expanded] - button "Think" - button "Code Run bash echo and catch missing file read" diff --git a/snapshots/web/question-composer/answered-expanded.expected.md b/snapshots/web/question-composer/answered-expanded.expected.md index 346b77ff8d..b8f6cce9a0 100644 --- a/snapshots/web/question-composer/answered-expanded.expected.md +++ b/snapshots/web/question-composer/answered-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Asked questions" [expanded] - button "Think" - button "Ask question 1/1 answered" [expanded] diff --git a/snapshots/web/question-composer/answered.expected.md b/snapshots/web/question-composer/answered.expected.md index be7b65aa37..6b62b305cb 100644 --- a/snapshots/web/question-composer/answered.expected.md +++ b/snapshots/web/question-composer/answered.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/question-composer/cancelled.expected.md b/snapshots/web/question-composer/cancelled.expected.md index 7d5d89a078..647e99e6f5 100644 --- a/snapshots/web/question-composer/cancelled.expected.md +++ b/snapshots/web/question-composer/cancelled.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Asked questions" [expanded] - button "Think" - button "Ask question cancelled" [expanded] diff --git a/snapshots/web/queue-actions/collapsed.expected.md b/snapshots/web/queue-actions/collapsed.expected.md index 64738a0101..9c17d3c73c 100644 --- a/snapshots/web/queue-actions/collapsed.expected.md +++ b/snapshots/web/queue-actions/collapsed.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - button "2 queued messages" - textbox "Cmd/Ctrl+Enter steers all queued messages" - button "Add files or run commands" diff --git a/snapshots/web/queue-actions/editing.expected.md b/snapshots/web/queue-actions/editing.expected.md index d375969b1e..dbd34d30b8 100644 --- a/snapshots/web/queue-actions/editing.expected.md +++ b/snapshots/web/queue-actions/editing.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - button "2 queued messages" [disabled] [expanded] - list: - listitem: diff --git a/snapshots/web/queue-actions/layout.expected.md b/snapshots/web/queue-actions/layout.expected.md index 2455bfb385..6d1d9a2f93 100644 --- a/snapshots/web/queue-actions/layout.expected.md +++ b/snapshots/web/queue-actions/layout.expected.md @@ -11,9 +11,9 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - region "To-dos": - button "To-dos 1 completed · 1 in progress" - text: Ongoing Goal Keep the composer context panels aligned diff --git a/snapshots/web/queue-actions/sending.expected.md b/snapshots/web/queue-actions/sending.expected.md index 594d0053e8..1ec3f95c7b 100644 --- a/snapshots/web/queue-actions/sending.expected.md +++ b/snapshots/web/queue-actions/sending.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - list: - listitem: - text: Queue item to remove diff --git a/snapshots/web/queue-actions/ui.expected.md b/snapshots/web/queue-actions/ui.expected.md index 6dc03fa797..2de2ae656f 100644 --- a/snapshots/web/queue-actions/ui.expected.md +++ b/snapshots/web/queue-actions/ui.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - list: - listitem: - text: Edited queue item diff --git a/snapshots/web/queued-image/delivered.expected.md b/snapshots/web/queued-image/delivered.expected.md index d014db4b09..7d06bd0b91 100644 --- a/snapshots/web/queued-image/delivered.expected.md +++ b/snapshots/web/queued-image/delivered.expected.md @@ -25,8 +25,8 @@ - img "queued.png" - text: Compare with this screenshot {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" @@ -34,8 +34,8 @@ - button "Branch into a new conversation" - text: {{clock}} Continue with the queued comparison {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/queued-image/queued.expected.md b/snapshots/web/queued-image/queued.expected.md index 6496bb83f5..7ef1375487 100644 --- a/snapshots/web/queued-image/queued.expected.md +++ b/snapshots/web/queued-image/queued.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - list: - listitem: - img "Queued message image" diff --git a/snapshots/web/seeded-history/command-row.expected.md b/snapshots/web/seeded-history/command-row.expected.md index 86f3b1a9cc..1bf37d80f4 100644 --- a/snapshots/web/seeded-history/command-row.expected.md +++ b/snapshots/web/seeded-history/command-row.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Read Only"': Read Only diff --git a/snapshots/web/seeded-history/feedback-row.expected.md b/snapshots/web/seeded-history/feedback-row.expected.md index 769c31023f..a0d3f44eed 100644 --- a/snapshots/web/seeded-history/feedback-row.expected.md +++ b/snapshots/web/seeded-history/feedback-row.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - 'button "feedback Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}." [expanded]' - text: "Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}." - textbox "Message or run a task, / commands, @ files or sessions" diff --git a/snapshots/web/seeded-history/ui-expanded.expected.md b/snapshots/web/seeded-history/ui-expanded.expected.md index 6cbe989134..9c3baf29a6 100644 --- a/snapshots/web/seeded-history/ui-expanded.expected.md +++ b/snapshots/web/seeded-history/ui-expanded.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/seeded-history/ui.expected.md b/snapshots/web/seeded-history/ui.expected.md index b1842edc41..d2c53e99b2 100644 --- a/snapshots/web/seeded-history/ui.expected.md +++ b/snapshots/web/seeded-history/ui.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" @@ -19,8 +19,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/skill-tool-row/ui.expected.md b/snapshots/web/skill-tool-row/ui.expected.md index 6e08ccbd47..7dde4db16f 100644 --- a/snapshots/web/skill-tool-row/ui.expected.md +++ b/snapshots/web/skill-tool-row/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Load the editing-cordis-compositions skill with the skill tool, then reply DONE. {{date}} {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Called tools" [expanded] - button "Think" - button "Skill editing-cordis-compositions" [expanded] diff --git a/snapshots/web/steering/mid-steer.expected.md b/snapshots/web/steering/mid-steer.expected.md index 0a731c2f3e..29ee449f59 100644 --- a/snapshots/web/steering/mid-steer.expected.md +++ b/snapshots/web/steering/mid-steer.expected.md @@ -8,11 +8,11 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - button "Waiting for your action" - text: "Interjection: include the word BANANA in your final reply." - button "Copy" +- status: Deep diving +- text: Deep diving for {{duration}} - region "Ready to continue?": - text: Checkpoint - heading "Ready to continue?" [level=2] diff --git a/snapshots/web/steering/settled-expanded.expected.md b/snapshots/web/steering/settled-expanded.expected.md index b04beec4bb..6ccbadfd62 100644 --- a/snapshots/web/steering/settled-expanded.expected.md +++ b/snapshots/web/steering/settled-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - button "Asked questions" [expanded] - button "Ask question 1/1 answered" - text: "Interjection: include the word BANANA in your final reply. {{clock}}" diff --git a/snapshots/web/steering/settled.expected.md b/snapshots/web/steering/settled.expected.md index 030841b7e4..b13cb9a2f9 100644 --- a/snapshots/web/steering/settled.expected.md +++ b/snapshots/web/steering/settled.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - button "Asked questions" - text: "Interjection: include the word BANANA in your final reply. {{clock}}" - button "Copy" diff --git a/snapshots/web/subagent-conversation/nested.expected.md b/snapshots/web/subagent-conversation/nested.expected.md index c04320b0b6..01e95cd04d 100644 --- a/snapshots/web/subagent-conversation/nested.expected.md +++ b/snapshots/web/subagent-conversation/nested.expected.md @@ -12,8 +12,8 @@ - tab "Trajectory" - text: Give one concrete event sourcing example. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [disabled] +- status: Completed +- button "Completed in {{duration}}" [disabled] - status: - strong: This subagent is read-only for now - text: The parent session is offline; reopen it to continue sending messages. diff --git a/snapshots/web/subagent-conversation/sidebar-chat.expected.md b/snapshots/web/subagent-conversation/sidebar-chat.expected.md index 607e142b62..748cd0db25 100644 --- a/snapshots/web/subagent-conversation/sidebar-chat.expected.md +++ b/snapshots/web/subagent-conversation/sidebar-chat.expected.md @@ -1,7 +1,7 @@ - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/subagent-conversation/ui-expanded.expected.md b/snapshots/web/subagent-conversation/ui-expanded.expected.md index 625180666b..56cb24ea87 100644 --- a/snapshots/web/subagent-conversation/ui-expanded.expected.md +++ b/snapshots/web/subagent-conversation/ui-expanded.expected.md @@ -15,8 +15,8 @@ - button "Jump to turn 2" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. @@ -26,8 +26,8 @@ - button "Branch into a new conversation" - text: {{clock}} Now give the same explanation to a human reader. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. diff --git a/snapshots/web/subagent-conversation/ui.expected.md b/snapshots/web/subagent-conversation/ui.expected.md index 6e67c79557..fd6280355e 100644 --- a/snapshots/web/subagent-conversation/ui.expected.md +++ b/snapshots/web/subagent-conversation/ui.expected.md @@ -15,8 +15,8 @@ - button "Jump to turn 2" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" @@ -24,8 +24,8 @@ - button "Branch into a new conversation" - text: {{clock}} Now give the same explanation to a human reader. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/subagent-interrupt/offline-composer.expected.md b/snapshots/web/subagent-interrupt/offline-composer.expected.md index c6e866c5e2..9b0d6b0309 100644 --- a/snapshots/web/subagent-interrupt/offline-composer.expected.md +++ b/snapshots/web/subagent-interrupt/offline-composer.expected.md @@ -11,9 +11,9 @@ - tab "Trajectory" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - list: - listitem: - text: Keep working until I stop you again. diff --git a/snapshots/web/turn-tail-actions/completed.expected.md b/snapshots/web/turn-tail-actions/completed.expected.md index 75ee221050..5d309edf46 100644 --- a/snapshots/web/turn-tail-actions/completed.expected.md +++ b/snapshots/web/turn-tail-actions/completed.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/turn-tail-actions/focused.expected.md b/snapshots/web/turn-tail-actions/focused.expected.md index a31f0d0c79..353f648456 100644 --- a/snapshots/web/turn-tail-actions/focused.expected.md +++ b/snapshots/web/turn-tail-actions/focused.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Analysis completed" - paragraph: Reading the workspace now. - button "Ran commands" [expanded] diff --git a/snapshots/web/turn-tail-actions/running.expected.md b/snapshots/web/turn-tail-actions/running.expected.md index 8a9f36aee9..e8cd6fbf1d 100644 --- a/snapshots/web/turn-tail-actions/running.expected.md +++ b/snapshots/web/turn-tail-actions/running.expected.md @@ -9,12 +9,12 @@ - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" - tooltip "Copy" -- status: Deep diving... -- button "Deep diving for {{duration}}" [disabled] [expanded] - button "Analysis completed" - paragraph: Reading the workspace now. - button "Ran commands" - paragraph: partial +- status: Deep diving +- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/turn-tail-actions/settled.expected.md b/snapshots/web/turn-tail-actions/settled.expected.md index cbe5273748..a626148bfa 100644 --- a/snapshots/web/turn-tail-actions/settled.expected.md +++ b/snapshots/web/turn-tail-actions/settled.expected.md @@ -9,10 +9,7 @@ - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" - status: Stopped -- button "Stopped" [disabled] [expanded] -- button "Analysis completed" -- paragraph: Reading the workspace now. -- button "Ran commands" +- button "Stopped" - paragraph: partial - text: Stopped - button "Copy" diff --git a/snapshots/web/turn-tail-actions/usage-expanded.expected.md b/snapshots/web/turn-tail-actions/usage-expanded.expected.md index 8ced72edd1..791695b15c 100644 --- a/snapshots/web/turn-tail-actions/usage-expanded.expected.md +++ b/snapshots/web/turn-tail-actions/usage-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" +- status: Completed +- button "Completed in {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/web-search-round/ui.expected.md b/snapshots/web/web-search-round/ui.expected.md index f229309b8c..92cc1ce25e 100644 --- a/snapshots/web/web-search-round/ui.expected.md +++ b/snapshots/web/web-search-round/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use web_search once with queries ["DeepSeek Harness snapshot search","DeepSeek Harness multi-query search"]. Then reply exactly SEARCH_DONE and stop. {{clock}} - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Searched the web" [expanded] - button "Search DeepSeek Harness snapshot search, DeepSeek Harness multi-query search" - paragraph: SEARCH_DONE diff --git a/snapshots/web/workflow-run/ui.expected.md b/snapshots/web/workflow-run/ui.expected.md index 12ffccb420..c760b4962d 100644 --- a/snapshots/web/workflow-run/ui.expected.md +++ b/snapshots/web/workflow-run/ui.expected.md @@ -1,7 +1,7 @@ - text: "Use the workflow tool exactly once, with args omitted, meta set to { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }, and this EXACT script body (copy it verbatim): phase('Run') const reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.') return { reply } After the workflow returns, reply with the single word WORKFLOW_DONE and stop. Do not use any other tool. {{clock}}" - button "Copy" -- status: Worked -- button "Took {{duration}}" [expanded] +- status: Completed +- button "Completed in {{duration}}" [expanded] - button "Called tools" [expanded] - button "Think" - button "Run workflow snapshot-flow" diff --git a/tsconfig.host.json b/tsconfig.host.json index 2d31d0df31..08de88abdc 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -29,6 +29,7 @@ "apps/web/tests/streaming-fence-highlight.e2e.ts", "apps/web/tests/declared-reasoning.e2e.ts", "apps/web/tests/support.ts", + "apps/web/tests/shimmer.ts", "apps/web/tests/model-input-layout.ts", "apps/web/tests/scaffold-hermetic.e2e.ts", "apps/web/tests/startup-rpc-budget.e2e.ts", From 7c8a44ac314556dc0eb730cf507a80ac60c486eb Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:21:46 +0800 Subject: [PATCH 53/60] Revert "feat(web): restore the process-row polish on the grouped work details" This reverts commit 036d53fb612c785a17d9e6068f58b155d87120c1. --- THIRD_PARTY_NOTICES.md | 1 - apps/web/tests/assembled-boot.ts | 15 --- apps/web/tests/built-boot.expected.e2e.ts | 6 +- .../clickable-links-gallery/ui.expected.md | 4 +- .../expected/cordis-history/ui.expected.md | 12 +- .../expected/fork-mid-turn/ui.expected.md | 8 +- .../conversation-expanded.expected.md | 4 +- .../conversation.expected.md | 4 +- .../markdown-cjk-strong/ui.expected.md | 4 +- .../expected/markdown-images/ui.expected.md | 4 +- .../markdown-inline-code-links/ui.expected.md | 4 +- .../expected/math-rendering/ui.expected.md | 4 +- .../reference-composer/order.expected.md | 4 +- .../skill-user-invoke/ui-expanded.expected.md | 4 +- .../expected/skill-user-invoke/ui.expected.md | 4 +- .../stats-paged-history/ui.expected.md | 112 +++++++++--------- .../expected/steer-all/mid-steer.expected.md | 4 +- .../steer-all/settled-expanded.expected.md | 4 +- .../expected/steer-all/settled.expected.md | 4 +- apps/web/tests/goal-multi-turn-actions.e2e.ts | 29 ----- apps/web/tests/idle-submission-handoff.e2e.ts | 12 +- apps/web/tests/lifecycle-chrome.e2e.ts | 2 +- apps/web/tests/live-interactions.e2e.ts | 2 +- apps/web/tests/reasoning-preview.e2e.ts | 47 +------- apps/web/tests/seeded-history.e2e.ts | 1 + apps/web/tests/shimmer.ts | 66 ----------- .../mid-stream.expected.md | 4 +- apps/web/tests/support.ts | 8 +- apps/web/tests/turn-tail-actions.e2e.ts | 92 +------------- apps/web/tests/workflow-run.e2e.ts | 8 +- packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 4 +- packages/client/ui-chat/README.zh.md | 4 +- packages/client/ui-chat/package.json | 7 +- .../src/client/chat/ChatGroupSeat.module.css | 25 ++-- .../ui-chat/src/client/chat/ChatGroupSeat.tsx | 8 +- .../ui-chat/src/client/chat/ChatNodeSeat.tsx | 1 - .../src/client/chat/ChatView.module.css | 71 +---------- .../ui-chat/src/client/chat/ChatView.tsx | 2 - .../client/chat/GenericCommandCard.module.css | 12 ++ .../src/client/chat/GenericCommandCard.tsx | 10 +- .../src/client/chat/MessageItem.module.css | 64 +++++++--- .../ui-chat/src/client/chat/MessageItem.tsx | 7 +- .../src/client/chat/ReasoningRow.module.css | 33 ++++++ .../ui-chat/src/client/chat/ReasoningRow.tsx | 10 +- .../ui-chat/src/client/chat/RunningStatus.tsx | 82 ------------- .../chat/TurnProcessNodeView.module.css | 14 ++- .../src/client/chat/TurnProcessNodeView.tsx | 40 ++++--- .../chat/TurnTriggerNodeView.module.css | 18 ++- .../src/client/chat/lottie-player.d.ts | 6 - .../src/client/chat/whale-tail.lottie.json | 1 - .../src/client/contract/turn-process.ts | 4 +- .../conversation-nodes/README.i18n.yaml | 4 +- .../src/client/conversation-nodes/README.md | 8 +- .../client/conversation-nodes/README.zh.md | 8 +- packages/client/ui-chat/src/client/locale.ts | 14 +-- .../ui-chat/tests/chat-view.client.spec.tsx | 87 ++++++-------- .../tests/reasoning-row.client.spec.tsx | 6 +- .../tests/turn-tail-spacing.client.spec.ts | 4 +- packages/client/ui-chat/tsconfig.client.json | 4 +- .../src/client/PresentRow.module.css | 2 +- .../client/ui-primitives/README.i18n.yaml | 4 +- packages/client/ui-primitives/README.md | 5 +- packages/client/ui-primitives/README.zh.md | 5 +- .../src/DisclosureRow.module.css | 26 +--- .../ui-primitives/src/DisclosureRow.tsx | 12 +- .../ui-primitives/src/Shimmer.module.css | 88 -------------- packages/client/ui-primitives/src/Shimmer.tsx | 66 ----------- .../ui-primitives/src/TextShimmer.module.css | 27 +++++ .../client/ui-primitives/src/TextShimmer.tsx | 23 ++++ .../client/ui-primitives/src/icons/index.tsx | 6 +- packages/client/ui-primitives/src/index.ts | 4 +- .../tests/shimmer.client.spec.tsx | 41 ------- .../tests/text-shimmer-styles.client.spec.ts | 16 +++ .../tests/text-shimmer.client.spec.tsx | 29 +++++ packages/client/ui-skill/README.i18n.yaml | 4 +- packages/client/ui-skill/README.md | 2 +- packages/client/ui-skill/README.zh.md | 2 +- .../ui-skill/src/client/SkillRow.module.css | 39 ++++-- .../client/ui-skill/src/client/SkillRow.tsx | 31 ++--- .../ui-skill/tests/skill-row.client.spec.tsx | 6 +- packages/client/ui-theme/README.i18n.yaml | 4 +- packages/client/ui-theme/README.md | 8 +- packages/client/ui-theme/README.zh.md | 8 +- .../ui-theme/src/styles/design-platform.css | 10 -- .../src/styles/gradient-shadow-text.css | 4 +- .../client/ui-theme/src/theme-settings.ts | 2 +- .../ui-theme/tests/boot-theme.client.spec.ts | 4 +- .../client/ui-theme/tests/config.host.spec.ts | 10 +- .../tests/font-size-row.client.spec.tsx | 6 +- .../ui-theme/tests/theme.client.spec.ts | 18 +-- packages/client/ui-tool/README.i18n.yaml | 4 +- packages/client/ui-tool/README.md | 4 +- packages/client/ui-tool/README.zh.md | 4 +- .../client/tool/components/ToolRow.module.css | 49 ++++++-- .../src/client/tool/components/ToolRow.tsx | 30 +++-- .../tool/toolviews/bash-sample.module.css | 25 ++-- .../src/client/tool/toolviews/bash-sample.tsx | 24 ++-- .../ui-tool/tests/diff-card.client.spec.tsx | 5 +- .../tests/tool-row-styles.client.spec.ts | 10 +- .../ui-tool/tests/tool-row.client.spec.tsx | 7 +- .../src/client/WorkflowRunPanel.module.css | 16 +-- pnpm-lock.yaml | 18 +-- scripts/rescope-vendor.ts | 1 - scripts/test-dom-environment.ts | 37 +----- .../web/auto-review-denial/ui.expected.md | 8 +- snapshots/web/bash-abort-row/ui.expected.md | 2 +- .../web/changed-files-turn/ui.expected.md | 4 +- .../web/deepseek-messages-chat/ui.expected.md | 4 +- .../web/default-workspace/ui.expected.md | 4 +- .../feedback-command/ack-expanded.expected.md | 4 +- .../web/feedback-command/ack.expected.md | 4 +- .../feedback-release/ack-expanded.expected.md | 4 +- .../web/feedback-release/ack.expected.md | 4 +- .../web/file-upload-round/ui.expected.md | 4 +- .../fresh-round-trip/ui-expanded.expected.md | 4 +- snapshots/web/fresh-round-trip/ui.expected.md | 4 +- .../ui-expanded.expected.md | 8 +- .../goal-multi-turn-actions/ui.expected.md | 9 +- .../reloaded-expanded.expected.md | 4 +- .../web/lifecycle-chrome/reloaded.expected.md | 4 +- .../web/live-interactions/loading.expected.md | 4 +- .../retry-expanded.expected.md | 4 +- .../web/live-interactions/retry.expected.md | 4 +- .../running-draft.expected.md | 4 +- snapshots/web/message-actions/ui.expected.md | 13 +- snapshots/web/minimal-preset/ui.expected.md | 4 +- .../plan-review/approved-expanded.expected.md | 4 +- .../web/plan-review/approved.expected.md | 4 +- snapshots/web/present-svg/ui.expected.md | 4 +- snapshots/web/present/ui.expected.md | 4 +- snapshots/web/ptc-round/ui.expected.md | 4 +- .../answered-expanded.expected.md | 4 +- .../question-composer/answered.expected.md | 4 +- .../question-composer/cancelled.expected.md | 4 +- .../web/queue-actions/collapsed.expected.md | 4 +- .../web/queue-actions/editing.expected.md | 4 +- .../web/queue-actions/layout.expected.md | 4 +- .../web/queue-actions/sending.expected.md | 4 +- snapshots/web/queue-actions/ui.expected.md | 4 +- .../web/queued-image/delivered.expected.md | 8 +- snapshots/web/queued-image/queued.expected.md | 4 +- .../seeded-history/command-row.expected.md | 8 +- .../seeded-history/feedback-row.expected.md | 8 +- .../seeded-history/ui-expanded.expected.md | 8 +- snapshots/web/seeded-history/ui.expected.md | 8 +- snapshots/web/skill-tool-row/ui.expected.md | 4 +- snapshots/web/steering/mid-steer.expected.md | 4 +- .../web/steering/settled-expanded.expected.md | 4 +- snapshots/web/steering/settled.expected.md | 4 +- .../subagent-conversation/nested.expected.md | 4 +- .../sidebar-chat.expected.md | 4 +- .../ui-expanded.expected.md | 8 +- .../web/subagent-conversation/ui.expected.md | 8 +- .../offline-composer.expected.md | 4 +- .../turn-tail-actions/completed.expected.md | 4 +- .../web/turn-tail-actions/focused.expected.md | 4 +- .../web/turn-tail-actions/running.expected.md | 4 +- .../web/turn-tail-actions/settled.expected.md | 5 +- .../usage-expanded.expected.md | 4 +- snapshots/web/web-search-round/ui.expected.md | 4 +- snapshots/web/workflow-run/ui.expected.md | 4 +- tsconfig.host.json | 1 - 163 files changed, 783 insertions(+), 1280 deletions(-) delete mode 100644 apps/web/tests/shimmer.ts delete mode 100644 packages/client/ui-chat/src/client/chat/RunningStatus.tsx delete mode 100644 packages/client/ui-chat/src/client/chat/lottie-player.d.ts delete mode 100644 packages/client/ui-chat/src/client/chat/whale-tail.lottie.json delete mode 100644 packages/client/ui-primitives/src/Shimmer.module.css delete mode 100644 packages/client/ui-primitives/src/Shimmer.tsx create mode 100644 packages/client/ui-primitives/src/TextShimmer.module.css create mode 100644 packages/client/ui-primitives/src/TextShimmer.tsx delete mode 100644 packages/client/ui-primitives/tests/shimmer.client.spec.tsx create mode 100644 packages/client/ui-primitives/tests/text-shimmer-styles.client.spec.ts create mode 100644 packages/client/ui-primitives/tests/text-shimmer.client.spec.tsx diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 3edabbb639..862299b9a2 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -96,7 +96,6 @@ External packages installed for runtime use or distributed inside the prebuilt b | [`katex`](https://github.com/KaTeX/KaTeX) | MIT | | [`koffi`](https://github.com/Koromix/koffi) | MIT | | [`lexical`](https://github.com/facebook/lexical) | MIT | -| [`lottie-web`](https://github.com/airbnb/lottie-web) | MIT | | [`mdast-util-from-markdown`](https://github.com/syntax-tree/mdast-util-from-markdown) | MIT | | [`mdast-util-gfm`](https://github.com/syntax-tree/mdast-util-gfm) | MIT | | [`mdast-util-math`](https://github.com/syntax-tree/mdast-util-math) | MIT | diff --git a/apps/web/tests/assembled-boot.ts b/apps/web/tests/assembled-boot.ts index 34f67f4a2c..b7ab90a8e2 100644 --- a/apps/web/tests/assembled-boot.ts +++ b/apps/web/tests/assembled-boot.ts @@ -218,7 +218,6 @@ export function installAssembledBootEnv(): void { }) } let fontsDescriptor: PropertyDescriptor | undefined - let canvasContextDescriptor: PropertyDescriptor | undefined beforeEach(() => { fontsDescriptor = Object.getOwnPropertyDescriptor(document, 'fonts') Object.defineProperty(document, 'fonts', { configurable: true, value: new EventTarget() }) @@ -234,18 +233,6 @@ export function installAssembledBootEnv(): void { vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => setTimeout(() => { callback(0) }, 0) as unknown as number) vi.stubGlobal('cancelAnimationFrame', (id: number) => { clearTimeout(id) }) - vi.stubGlobal('matchMedia', (media: string) => Object.assign(new EventTarget(), { - media, matches: false, onchange: null, addListener: () => {}, removeListener: () => {}, - })) - // Lottie's SVG player creates one transparent Canvas placeholder while importing. - canvasContextDescriptor = Object.getOwnPropertyDescriptor(HTMLCanvasElement.prototype, 'getContext') - Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', { - configurable: true, - value: (contextId: string) => { - if (contextId !== '2d') throw new Error(`assembled boot: unsupported Canvas context ${contextId}`) - return { fillStyle: '', fillRect: () => {} } - }, - }) }) afterEach(async () => { @@ -276,8 +263,6 @@ export function installAssembledBootEnv(): void { delete ownNavigator.languages delete ownNavigator.language vi.unstubAllGlobals() - if (canvasContextDescriptor === undefined) Reflect.deleteProperty(HTMLCanvasElement.prototype, 'getContext') - else Object.defineProperty(HTMLCanvasElement.prototype, 'getContext', canvasContextDescriptor) if (fontsDescriptor === undefined) Reflect.deleteProperty(document, 'fonts') else Object.defineProperty(document, 'fonts', fontsDescriptor) if (failures.length > 0) throw new AggregateError(failures, 'assembled boot teardown failed') diff --git a/apps/web/tests/built-boot.expected.e2e.ts b/apps/web/tests/built-boot.expected.e2e.ts index f645214133..7ab01184fc 100644 --- a/apps/web/tests/built-boot.expected.e2e.ts +++ b/apps/web/tests/built-boot.expected.e2e.ts @@ -129,8 +129,7 @@ it('boots the built plugin graph and renders a fixture session end to end', asyn const writeRow = mutationRows.find(row => row.getAttribute('data-variant') === 'write' && row.textContent?.includes('new-demo.txt')) if (writeRow === undefined) throw new Error('fixture write row missing') - expect(within(writeRow).getAllByText('+1', { exact: true })).toHaveLength(1) - expect(within(writeRow).getAllByText('-0', { exact: true })).toHaveLength(1) + expect(within(writeRow).getAllByText('+1 -0', { exact: true })).toHaveLength(1) expect(writeRow.querySelector('[data-diff]')).toBeNull() for (const row of mutationRows) { const toggle = row.querySelector('[data-expandable]') @@ -141,8 +140,7 @@ it('boots the built plugin graph and renders a fixture session end to end', asyn const writeDiff = writeRow.querySelector('[data-diff]') if (writeDiff === null) throw new Error('expanded fixture write diff missing') within(writeDiff).getByText('hello fixture', { exact: true }) - expect(within(writeRow).getAllByText('+1', { exact: true })).toHaveLength(1) - expect(within(writeRow).getAllByText('-0', { exact: true })).toHaveLength(1) + expect(within(writeRow).getAllByText('+1 -0', { exact: true })).toHaveLength(1) expect(writeDiff.textContent).not.toContain('+1 -0') // The web render intent reaches the assembled boot graph: the fixture's diff --git a/apps/web/tests/expected/clickable-links-gallery/ui.expected.md b/apps/web/tests/expected/clickable-links-gallery/ui.expected.md index a3494849d0..25c6502dad 100644 --- a/apps/web/tests/expected/clickable-links-gallery/ui.expected.md +++ b/apps/web/tests/expected/clickable-links-gallery/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "Assemble the link gallery: write the report and styles, inspect the sources, and summarize. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Wrote files, called tools, searched code, etc." [expanded] - button "Write site/report.html +1 -0": - text: Write diff --git a/apps/web/tests/expected/cordis-history/ui.expected.md b/apps/web/tests/expected/cordis-history/ui.expected.md index 3de6c560dd..45381454fa 100644 --- a/apps/web/tests/expected/cordis-history/ui.expected.md +++ b/apps/web/tests/expected/cordis-history/ui.expected.md @@ -11,8 +11,8 @@ - button "Jump to turn 3" - text: "Use only Cordis tools. First call cordis_inspect_self with no arguments. Then call cordis_define with plugin kind \"new\", idPrefix \"snap\", name \"snapshot noop\", purpose \"does nothing, for the snapshot\", code.host exactly \"return { name: \\\"snapshot-noop\\\", apply(ctx) {} }\" and code.client exactly \"return { inject: [\\\"slots\\\"], apply(ctx) { ctx.slots.register({ name: \\\"shell.overlay\\\", id: \\\"snapshot-probe\\\" }, () => React.createElement(\\\"div\\\", { \\\"data-snapshot-probe\\\": \\\"loaded\\\" })) } }\". Read its returned pluginId and packageId, then call cordis_run with those exact IDs and mode \"run\". After the run request returns, reply exactly CORDIS_UI_READY and stop. 9/1 {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools" [expanded] - button "Think" - button "Inspect plugins 0 dynamic plugins" @@ -42,8 +42,8 @@ - button "Plugin status updated 9/1 {{clock}}": - text: Plugin status updated - time: 9/1 {{clock}} -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: The Cordis Plugin is running. - button "Copy" - button "Good response" @@ -51,8 +51,8 @@ - button "Branch into a new conversation" - text: 9/1 {{clock}} Use only Cordis tools. Call cordis_stop with pluginId "snap-1". After it succeeds, reply exactly CORDIS_UI_DONE and stop. 9/1 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools" [expanded] - text: Stop Cordis Plugin snap-1 - button "Inspect" diff --git a/apps/web/tests/expected/fork-mid-turn/ui.expected.md b/apps/web/tests/expected/fork-mid-turn/ui.expected.md index 4cecf35241..98f72fecb8 100644 --- a/apps/web/tests/expected/fork-mid-turn/ui.expected.md +++ b/apps/web/tests/expected/fork-mid-turn/ui.expected.md @@ -1,11 +1,11 @@ - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - text: FORK_BRANCH_USER Summarize what this branch knows about the reads. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: FORK_BRANCH_FIRST this branch has no read results, so I would check what the parent completed before retrying. FORK_BRANCH_DONE. - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md b/apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md index 4abdc53e16..5f580db1a6 100644 --- a/apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md +++ b/apps/web/tests/expected/github-ready-review/conversation-expanded.expected.md @@ -19,8 +19,8 @@ - button "GitHub event received {{clock}}": - text: GitHub event received - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: "Review complete: no actionable findings." - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/github-ready-review/conversation.expected.md b/apps/web/tests/expected/github-ready-review/conversation.expected.md index 4abdc53e16..5f580db1a6 100644 --- a/apps/web/tests/expected/github-ready-review/conversation.expected.md +++ b/apps/web/tests/expected/github-ready-review/conversation.expected.md @@ -19,8 +19,8 @@ - button "GitHub event received {{clock}}": - text: GitHub event received - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: "Review complete: no actionable findings." - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/markdown-cjk-strong/ui.expected.md b/apps/web/tests/expected/markdown-cjk-strong/ui.expected.md index 2eda5d3afb..e113cb6b3d 100644 --- a/apps/web/tests/expected/markdown-cjk-strong/ui.expected.md +++ b/apps/web/tests/expected/markdown-cjk-strong/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Render adjacent CJK strong emphasis. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - heading "CJK strong emphasis" [level=2] - paragraph: - strong: 注意: diff --git a/apps/web/tests/expected/markdown-images/ui.expected.md b/apps/web/tests/expected/markdown-images/ui.expected.md index d6bea9a4f8..31dee5c21a 100644 --- a/apps/web/tests/expected/markdown-images/ui.expected.md +++ b/apps/web/tests/expected/markdown-images/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Show the Markdown image policy. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - heading "Markdown images" [level=2] - paragraph: - 'button "View full image: Remote test image"': diff --git a/apps/web/tests/expected/markdown-inline-code-links/ui.expected.md b/apps/web/tests/expected/markdown-inline-code-links/ui.expected.md index c9d932b478..bf25c8d4ae 100644 --- a/apps/web/tests/expected/markdown-inline-code-links/ui.expected.md +++ b/apps/web/tests/expected/markdown-inline-code-links/ui.expected.md @@ -6,8 +6,8 @@ - tab "Trajectory" - text: Show the local preview URL. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - heading "Inline code links" [level=2] - paragraph: - text: "Preview:" diff --git a/apps/web/tests/expected/math-rendering/ui.expected.md b/apps/web/tests/expected/math-rendering/ui.expected.md index 3d4b08ccd1..3fb277318a 100644 --- a/apps/web/tests/expected/math-rendering/ui.expected.md +++ b/apps/web/tests/expected/math-rendering/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Render this mathematical proof. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - heading "Math rendering" [level=2] - paragraph: - text: Inline dollar diff --git a/apps/web/tests/expected/reference-composer/order.expected.md b/apps/web/tests/expected/reference-composer/order.expected.md index 779c3e1f20..589d2954d1 100644 --- a/apps/web/tests/expected/reference-composer/order.expected.md +++ b/apps/web/tests/expected/reference-composer/order.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Research notes what changed? Referenced session · Research notes {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md b/apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md index 09a6526be6..930e9eb385 100644 --- a/apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md +++ b/apps/web/tests/expected/skill-user-invoke/ui-expanded.expected.md @@ -10,8 +10,8 @@ - button "meeting notes-this-is-a-very-long-filename-for-testing-user-message-file-references-and-preview-layout.md" - text: and confirm the fixture wiring {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: USER_INVOKE_REPLY acknowledged; following the injected skill. - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/skill-user-invoke/ui.expected.md b/apps/web/tests/expected/skill-user-invoke/ui.expected.md index 09a6526be6..930e9eb385 100644 --- a/apps/web/tests/expected/skill-user-invoke/ui.expected.md +++ b/apps/web/tests/expected/skill-user-invoke/ui.expected.md @@ -10,8 +10,8 @@ - button "meeting notes-this-is-a-very-long-filename-for-testing-user-message-file-references-and-preview-layout.md" - text: and confirm the fixture wiring {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: USER_INVOKE_REPLY acknowledged; following the injected skill. - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/stats-paged-history/ui.expected.md b/apps/web/tests/expected/stats-paged-history/ui.expected.md index e6a96742a4..5af4333df1 100644 --- a/apps/web/tests/expected/stats-paged-history/ui.expected.md +++ b/apps/web/tests/expected/stats-paged-history/ui.expected.md @@ -36,8 +36,8 @@ - button "Jump to turn 28" - text: m1 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r1 - button "Copy" - button "Good response" @@ -45,8 +45,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m2 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r2 - button "Copy" - button "Good response" @@ -54,8 +54,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m3 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r3 - button "Copy" - button "Good response" @@ -63,8 +63,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m4 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r4 - button "Copy" - button "Good response" @@ -72,8 +72,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m5 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r5 - button "Copy" - button "Good response" @@ -81,8 +81,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m6 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r6 - button "Copy" - button "Good response" @@ -90,8 +90,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m7 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r7 - button "Copy" - button "Good response" @@ -99,8 +99,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m8 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r8 - button "Copy" - button "Good response" @@ -108,8 +108,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m9 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r9 - button "Copy" - button "Good response" @@ -117,8 +117,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m10 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r10 - button "Copy" - button "Good response" @@ -126,8 +126,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m11 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r11 - button "Copy" - button "Good response" @@ -135,8 +135,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m12 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r12 - button "Copy" - button "Good response" @@ -144,8 +144,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m13 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r13 - button "Copy" - button "Good response" @@ -153,8 +153,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m14 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r14 - button "Copy" - button "Good response" @@ -162,8 +162,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m15 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r15 - button "Copy" - button "Good response" @@ -171,8 +171,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m16 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r16 - button "Copy" - button "Good response" @@ -180,8 +180,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m17 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r17 - button "Copy" - button "Good response" @@ -189,8 +189,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m18 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r18 - button "Copy" - button "Good response" @@ -198,8 +198,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m19 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r19 - button "Copy" - button "Good response" @@ -207,8 +207,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m20 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r20 - button "Copy" - button "Good response" @@ -216,8 +216,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m21 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r21 - button "Copy" - button "Good response" @@ -225,8 +225,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m22 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r22 - button "Copy" - button "Good response" @@ -234,8 +234,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m23 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r23 - button "Copy" - button "Good response" @@ -243,8 +243,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m24 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r24 - button "Copy" - button "Good response" @@ -252,8 +252,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m25 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r25 - button "Copy" - button "Good response" @@ -261,8 +261,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m26 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r26 - button "Copy" - button "Good response" @@ -270,8 +270,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m27 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r27 - button "Copy" - button "Good response" @@ -279,8 +279,8 @@ - button "Branch into a new conversation" - text: 7/25 {{clock}} m28 7/25 {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: r28 - button "Copy" - button "Good response" diff --git a/apps/web/tests/expected/steer-all/mid-steer.expected.md b/apps/web/tests/expected/steer-all/mid-steer.expected.md index 55222e9624..6a14e1ea0f 100644 --- a/apps/web/tests/expected/steer-all/mid-steer.expected.md +++ b/apps/web/tests/expected/steer-all/mid-steer.expected.md @@ -8,13 +8,13 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - button "Analyzing the request" - text: "Interjection: include the word BANANA in your final reply." - button "Copy" - text: "Interjection: include the word ORANGE in your final reply." - button "Copy" -- status: Deep diving -- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/apps/web/tests/expected/steer-all/settled-expanded.expected.md b/apps/web/tests/expected/steer-all/settled-expanded.expected.md index 5282565384..3e00422aa2 100644 --- a/apps/web/tests/expected/steer-all/settled-expanded.expected.md +++ b/apps/web/tests/expected/steer-all/settled-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - button "Asked questions" [expanded] - button "Think" - button "Ask question 1/1 answered" diff --git a/apps/web/tests/expected/steer-all/settled.expected.md b/apps/web/tests/expected/steer-all/settled.expected.md index c92baa21e1..f419491430 100644 --- a/apps/web/tests/expected/steer-all/settled.expected.md +++ b/apps/web/tests/expected/steer-all/settled.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - button "Asked questions" - text: "Interjection: include the word BANANA in your final reply. {{clock}}" - button "Copy" diff --git a/apps/web/tests/goal-multi-turn-actions.e2e.ts b/apps/web/tests/goal-multi-turn-actions.e2e.ts index be9e5fc341..1361a476d3 100644 --- a/apps/web/tests/goal-multi-turn-actions.e2e.ts +++ b/apps/web/tests/goal-multi-turn-actions.e2e.ts @@ -155,32 +155,6 @@ describe('web e2e: Goal keeps one assistant action row per completed turn', () = expect(sessionEvents.flatMap(event => event.type === 'request/header' ? [event.data.reason] : [])).toEqual(['initial', 'series']) await expect.poll(() => page.locator('[data-turn-process]').count(), { timeout: 15_000 }).toBe(2) - const trigger = page.locator('[data-turn-trigger]').first() - const process = page.locator('[data-turn-process]').first() - const originalFontSize = await page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size')) - await process.click() - try { - for (const fontSize of [14, 17, 24]) { - await scaffold!.ctx.settings.update('ui-theme', { fontSize }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))) - .toBe(`${String(fontSize)}px`) - const group = page.locator('[data-process-activity]:visible').first() - const groupFontSize = await group.evaluate(element => getComputedStyle(element).fontSize) - expect(groupFontSize).toBe(`${String(fontSize)}px`) - expect(await process.evaluate(element => getComputedStyle(element).fontSize)).toBe(groupFontSize) - expect(await trigger.getByText('Continuing goal', { exact: true }) - .evaluate(element => getComputedStyle(element).fontSize)).toBe(groupFontSize) - expect(await process.evaluate(element => element.getBoundingClientRect().top)) - .toBe(await trigger.evaluate(element => element.getBoundingClientRect().bottom) + 16) - expect(await group.evaluate(element => element.getBoundingClientRect().top)) - .toBe(await process.evaluate(element => element.getBoundingClientRect().bottom) + 16) - } - } finally { - await scaffold!.ctx.settings.update('ui-theme', { fontSize: Number.parseFloat(originalFontSize) }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))) - .toBe(originalFontSize) - await process.click() - } expect(await page.getByRole('button', { name: 'System prompt' }).count()).toBe(0) expect(await page.locator( '[data-chat-flow-kind="system-prompt"]', @@ -189,10 +163,7 @@ describe('web e2e: Goal keeps one assistant action row per completed turn', () = await expect.poll(() => branchButtons.count(), { timeout: 15_000 }).toBe(2) expect(await branchButtons.evaluateAll(buttons => buttons.map(button => button.getAttribute('aria-disabled')))) .toEqual([null, null]) - await page.mouse.move(0, 0) await branchButtons.last().focus() - await page.locator('[data-composer-input]').first().focus() - await expect.poll(() => page.getByRole('tooltip').count()).toBe(0) const snapshot = await captureStableAria(page, '[class*="centerCol"]', scaffold!.workspaceCwd) await compareOrRefreshGolden(UI_EXPECTED, snapshot, MODE) const expanded = await captureExpandedTurnProcessAria( diff --git a/apps/web/tests/idle-submission-handoff.e2e.ts b/apps/web/tests/idle-submission-handoff.e2e.ts index 2fb9930fcb..9d27909d4d 100644 --- a/apps/web/tests/idle-submission-handoff.e2e.ts +++ b/apps/web/tests/idle-submission-handoff.e2e.ts @@ -144,10 +144,8 @@ it.skipIf(webSnapshotMode() === 'record').each(['inbox-first', 'transcript-first if (order === 'transcript-first') { await expect.poll(() => gate.turnStartDelivery()).toBeDefined() - const start = gate.turnStartDelivery()! - if (start.event?.type !== 'turn/start') throw new Error('expected a buffered turn/start') - gate.releaseThrough(start) - await page.locator(`[data-chat-flow-kind="turn-process"][data-chat-turn="${String(start.event.data.turn)}"]`).waitFor({ state: 'attached' }) + gate.releaseThrough(gate.turnStartDelivery()!) + await page.locator('[data-turn-process]').last().filter({ hasText: 'Deep diving' }).waitFor() await expect.poll(() => placement(page)).toMatchObject({ echo: 1, dock: 0, durable: 0 }) trace.push({ phase: 'turn-start', ...await placement(page) }) await expect.poll(() => gate.admissionDelivery()).toBeDefined() @@ -168,10 +166,8 @@ it.skipIf(webSnapshotMode() === 'record').each(['inbox-first', 'transcript-first if (order === 'inbox-first') { await expect.poll(() => gate.turnStartDelivery()).toBeDefined() - const start = gate.turnStartDelivery()! - if (start.event?.type !== 'turn/start') throw new Error('expected a buffered turn/start') - gate.releaseThrough(start) - await page.locator(`[data-chat-flow-kind="turn-process"][data-chat-turn="${String(start.event.data.turn)}"]`).waitFor({ state: 'attached' }) + gate.releaseThrough(gate.turnStartDelivery()!) + await page.locator('[data-turn-process]').last().filter({ hasText: 'Deep diving' }).waitFor() await expect.poll(() => placement(page)).toMatchObject({ echo: 1, dock: 0, durable: 0 }) trace.push({ phase: 'turn-start', ...await placement(page) }) } diff --git a/apps/web/tests/lifecycle-chrome.e2e.ts b/apps/web/tests/lifecycle-chrome.e2e.ts index f06f73ffea..ecedf4ed73 100644 --- a/apps/web/tests/lifecycle-chrome.e2e.ts +++ b/apps/web/tests/lifecycle-chrome.e2e.ts @@ -344,7 +344,7 @@ describe('web e2e: lifecycle & chrome (workspace flow / reload / dark mode)', () await reasoningComplete.promise expect(await thinking.getAttribute('data-preview')).toBeNull() expect(await thinking.getByRole('button').getAttribute('aria-expanded')).toBe('false') - expect(await thinking.locator('[data-streaming]:not([inert] *)').isVisible()).toBe(false) + expect(await thinking.locator('[data-streaming]').isVisible()).toBe(false) } observedReasoning.resolve(undefined) return await settled diff --git a/apps/web/tests/live-interactions.e2e.ts b/apps/web/tests/live-interactions.e2e.ts index ef9667049a..6592322148 100644 --- a/apps/web/tests/live-interactions.e2e.ts +++ b/apps/web/tests/live-interactions.e2e.ts @@ -158,7 +158,7 @@ describe('web e2e: live-turn interactions (cancel / error / retry)', () => { // hang (prefix chunks delivered to the loop) before the stop click. await expect.poll(() => existsSync(marker), { timeout: 15_000 }).toBe(true) await expect.poll( - () => page.getByRole('status').filter({ hasText: 'Deep diving' }).isVisible(), + () => page.getByRole('status').filter({ hasText: 'Deep diving...' }).isVisible(), { timeout: 10_000 }, ).toBe(true) await page.locator('[data-streaming="true"]') diff --git a/apps/web/tests/reasoning-preview.e2e.ts b/apps/web/tests/reasoning-preview.e2e.ts index 7820173e55..9571b51d1c 100644 --- a/apps/web/tests/reasoning-preview.e2e.ts +++ b/apps/web/tests/reasoning-preview.e2e.ts @@ -8,7 +8,6 @@ import { captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, } from './scaffold.ts' import { connectFreshWorkspace, expandOwningTurnProcess, newEnglishPage, writeComposerDraft } from './support.ts' -import { expectSharedShimmer } from './shimmer.ts' const SUMMARY = `Next paragraph: ${'inspect the loaded context and pending tools '.repeat(8).trim()}` const DELTAS = ['First paragraph', `\nDetails\n\n\n${SUMMARY}`, '\nMore detail'] @@ -50,7 +49,7 @@ it('shows completed paragraph first lines across blank lines with a right-edge f const browser = await chromium.launch() try { const page = await newEnglishPage(browser) - const pageConsole = watchConsole(page) + const console = watchConsole(page) await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) await connectFreshWorkspace(page, scaffold.workspaceCwd) await page.setViewportSize({ width: 480, height: 1000 }) @@ -69,32 +68,9 @@ it('shows completed paragraph first lines across blank lines with a right-edge f first.proceed.resolve(undefined) await second.arrived.promise - const preview = reasoning.locator('[data-streaming]:not([inert] *)') + const preview = reasoning.locator('[data-streaming]') await expect.poll(() => preview.textContent()).toBe('First paragraph') expect(await preview.isVisible()).toBe(true) - for (const fontSize of [14, 24]) { - await scaffold.ctx.settings.update('ui-theme', { fontSize }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))) - .toBe(`${String(fontSize)}px`) - const geometry = await preview.evaluate((element) => { - const text = element.firstElementChild - const header = element.closest('[data-disclosure-row]')! - const range = document.createRange() - range.selectNodeContents(text!) - return { - fadeStart: element.getBoundingClientRect().right - 48, - textRight: range.getBoundingClientRect().right, - previewRight: element.getBoundingClientRect().right, - headerRight: header.getBoundingClientRect().right, - headerHeight: header.getBoundingClientRect().height, - } - }) - expect(geometry.textRight).toBeLessThanOrEqual(geometry.fadeStart) - expect(geometry.previewRight).toBe(geometry.headerRight) - expect(geometry.headerHeight).toBe(24 + fontSize - 14) - } - await scaffold.ctx.settings.update('ui-theme', { fontSize: 14 }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))).toBe('14px') await preview.evaluate((element) => { element.setAttribute('data-retained-preview', 'true') }) second.proceed.resolve(undefined) @@ -103,30 +79,15 @@ it('shows completed paragraph first lines across blank lines with a right-edge f expect(await preview.getAttribute('data-retained-preview')).toBe('true') expect(await preview.evaluate(element => getComputedStyle(element).maskImage)).toContain('linear-gradient') expect(await preview.evaluate(element => element.scrollWidth > element.clientWidth)).toBe(true) - await expectSharedShimmer(reasoning) - const group = page.locator('[data-process-activity]').filter({ has: page.locator('[data-shimmer="true"]') }) - await expectSharedShimmer(group) - await group.hover() - await expectSharedShimmer(group) expect(await reasoning.getByRole('button').getAttribute('aria-expanded')).toBe('false') await compareOrRefreshGolden(UI_EXPECTED, await captureStableAria(page, '[data-variant="think"]', scaffold.workspaceCwd), webSnapshotMode()) - await group.click() - expect(await group.getAttribute('aria-expanded')).toBe('false') - await expectSharedShimmer(group) - await page.emulateMedia({ reducedMotion: 'reduce' }) - try { - expect(await group.locator('[inert]').evaluate(element => getComputedStyle(element).display)).toBe('none') - expect(await group.innerText()).toBe('Analyzing the request') - } finally { - await page.emulateMedia({ reducedMotion: null }) - } third.proceed.resolve(undefined) await settled await page.getByText('Done', { exact: true }).waitFor() - expect(pageConsole.pageErrors).toEqual([]) - expect(pageConsole.warnings).toEqual([]) + expect(console.pageErrors).toEqual([]) + expect(console.warnings).toEqual([]) } finally { adapter.release() await browser.close() diff --git a/apps/web/tests/seeded-history.e2e.ts b/apps/web/tests/seeded-history.e2e.ts index 5c24765398..8419aae826 100644 --- a/apps/web/tests/seeded-history.e2e.ts +++ b/apps/web/tests/seeded-history.e2e.ts @@ -372,6 +372,7 @@ describe('web e2e: seeded history renders through cold resume', () => { const processBottom = await process.evaluate(element => element.getBoundingClientRect().bottom) const answerTop = await page.getByText('DONE', { exact: true }).evaluate(element => element.getBoundingClientRect().top) + // Collapsed control row keeps its own 8px margin plus the 8px flow gap. expect(answerTop).toBe(processBottom + 16) expect(await page.getByText('Context compacted', { exact: true }).count()).toBe(0) // Tool cards render from logged tool/call + tool/result alone (views are diff --git a/apps/web/tests/shimmer.ts b/apps/web/tests/shimmer.ts deleted file mode 100644 index 660b811125..0000000000 --- a/apps/web/tests/shimmer.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** Browser geometry for one moving mask over text beside retained row icons. */ -import type { Locator } from 'playwright' -import { expect } from 'vitest' - -/** - * Check glyph alignment and scroll overflow across a running row's shared sweep. - * @param row - visible row containing exactly one active shimmer. - * @returns after restoring the row's animation playback. - */ -export async function expectSharedShimmer(row: Locator): Promise { - const shimmer = row.locator('[data-shimmer="true"]') - expect(await shimmer.count()).toBe(1) - const frames = await shimmer.evaluate((root) => { - const base = root.firstElementChild! - const decoration = root.querySelector(':scope > [inert]')! - const mask = decoration.firstElementChild! - const highlight = mask.firstElementChild! - const animations = root.getAnimations({ subtree: true }) - .filter(animation => animation instanceof CSSAnimation && animation.animationName.includes('dsh-row-shimmer-')) - const original = animations.map(animation => ({ animation, time: animation.currentTime, state: animation.playState })) - try { - return [400, 800, 1200, 1301, 1799, 1801].map((time) => { - for (const animation of animations) { - animation.pause() - animation.currentTime = time - } - const originals = [...base.querySelectorAll('svg, span, button')] - const copies = [...highlight.querySelectorAll('svg, span, button')] - return { - animations: animations.length, - mask: getComputedStyle(mask).maskImage, - hidden: decoration.getAttribute('aria-hidden'), - maskLeft: mask.getBoundingClientRect().left, - width: root.getBoundingClientRect().width, - clientWidth: root.clientWidth, - scrollWidth: root.scrollWidth, - icons: base.querySelectorAll('svg').length, - copyCount: copies.length, - baseCount: originals.length, - glyphOffsets: originals.map((element, index) => { - const a = element.getBoundingClientRect() - const b = copies[index]!.getBoundingClientRect() - return [a.left - b.left, a.top - b.top, a.width - b.width, a.height - b.height] - }).flat(), - } - }) - } finally { - for (const { animation, time, state } of original) { - animation.currentTime = time - if (state === 'running') animation.play() - } - } - }) - for (const frame of frames) { - expect(frame.animations).toBe(2) - expect(frame.mask).toContain('linear-gradient') - expect(frame.hidden).toBe('true') - expect(frame.width).toBeGreaterThan(0) - expect(frame.scrollWidth).toBe(frame.clientWidth) - expect(frame.icons).toBe(0) - expect(frame.copyCount).toBe(frame.baseCount) - expect(frame.glyphOffsets.every(offset => Math.abs(offset) < 0.1)).toBe(true) - } - expect(frames[0]!.maskLeft).toBeLessThan(frames[1]!.maskLeft) - expect(frames[1]!.maskLeft).toBeLessThan(frames[2]!.maskLeft) -} diff --git a/apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md b/apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md index 743e96c4f8..a2443a2e47 100644 --- a/apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md +++ b/apps/web/tests/snapshots/streaming-fence-highlight/mid-stream.expected.md @@ -8,12 +8,12 @@ - tab "Trajectory" - text: Stream one TypeScript fence for the highlighting snapshot. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - text: ts - button "Wrap lines" [pressed] - button "Copy" - code: "const first: number = 1 const second = \"two\" let tail" -- status: Deep diving -- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/apps/web/tests/support.ts b/apps/web/tests/support.ts index 0918814111..884f160418 100644 --- a/apps/web/tests/support.ts +++ b/apps/web/tests/support.ts @@ -85,7 +85,7 @@ export async function expandTurnProcesses(page: Page): Promise { } /** - * Expand the settled Turn process and secondary group containing a hidden descendant. + * Expand the Turn process and secondary group containing a hidden descendant. * @param page - page containing the Chat view. * @param target - descendant whose outer process disclosures should open. */ @@ -94,10 +94,8 @@ export async function expandOwningTurnProcess(page: Page, target: Locator): Prom const turn = await target.evaluate(element => element.closest('[data-chat-turn]')?.dataset.chatTurn) if (turn !== undefined) { const control = page.locator(`[data-turn-process="${turn}"]`) - if (await control.count() > 0) { - await control.waitFor({ state: 'visible', timeout: 10_000 }) - if (await control.getAttribute('aria-expanded') === 'false') await control.click() - } + await control.waitFor({ state: 'visible', timeout: 10_000 }) + if (await control.getAttribute('aria-expanded') === 'false') await control.click() } const group = target.locator('xpath=ancestor::*[@data-chat-group-key][1]') const header = group.locator('[data-process-activity]').first() diff --git a/apps/web/tests/turn-tail-actions.e2e.ts b/apps/web/tests/turn-tail-actions.e2e.ts index d4bbccbc65..7a7bfe9293 100644 --- a/apps/web/tests/turn-tail-actions.e2e.ts +++ b/apps/web/tests/turn-tail-actions.e2e.ts @@ -13,7 +13,6 @@ import { fileURLToPath } from 'node:url' import { join } from 'node:path' import type { Browser, Page } from 'playwright' import { chromium } from 'playwright' -import { expectSharedShimmer } from './shimmer.ts' import { afterEach, describe, expect, it, onTestFailed, vi } from 'vitest' import type { ReplayOverrideDoc } from '@deepseek-ai/dsh-llm-replay' import type { SessionEvent } from '@deepseek-ai/dsh-session' @@ -145,84 +144,16 @@ describe('web e2e: assistant IconActions wait for the turn to end', () => { // so the first step's message and tool result are already durable. await expect.poll(() => existsSync(marker), { timeout: 20_000 }).toBe(true) const runningProcess = page.locator('[data-turn-process]') - expect(await runningProcess.count()).toBe(0) + expect(await runningProcess.count()).toBe(1) + expect(await runningProcess.isDisabled()).toBe(true) + expect(await runningProcess.getAttribute('aria-expanded')).toBe('true') await expect.poll( - () => page.getByRole('status').filter({ hasText: 'Deep diving' }).isVisible(), + () => page.getByRole('status').filter({ hasText: 'Deep diving...' }).isVisible(), { timeout: 10_000 }, ).toBe(true) await page.locator('[data-streaming="true"]') .getByText('partial', { exact: true }) .waitFor({ timeout: 10_000 }) - const runningStatus = page.locator('[data-chat-running]') - expect(await runningStatus.innerText()).toMatch(/Deep diving for \d+s/) - await expectSharedShimmer(runningStatus) - expect(await runningStatus.evaluate(element => getComputedStyle(element).fontSize)).toBe('12px') - const contentBottom = await page.locator('[data-streaming="true"]').evaluate(element => - element.closest('[data-chat-flow-kind="assistant-step"]')!.getBoundingClientRect().bottom) - expect(await runningStatus.evaluate(element => element.getBoundingClientRect().top)).toBe(contentBottom + 32) - const originalFontSize = await page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size')) - try { - for (const fontSize of [14, 17, 24]) { - await scaffold!.ctx.settings.update('ui-theme', { fontSize }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))) - .toBe(`${String(fontSize)}px`) - const layout = await runningStatus.evaluate((status) => { - const icon = status.querySelector('svg')! - const label = status.querySelector('[data-shimmer] > span > span')! - const group = document.querySelector('[data-process-activity]')! - const groupIcon = group.querySelector('[data-step-process-icon]')! - return { - iconSize: icon.getBoundingClientRect().width, - groupIconSize: groupIcon.getBoundingClientRect().width, - gap: label.getBoundingClientRect().left - icon.getBoundingClientRect().right, - iconColor: getComputedStyle(icon).color, - textColor: getComputedStyle(label).color, - } - }) - expect(layout.iconSize).toBe(layout.groupIconSize - 2) - expect(layout.gap).toBe(6) - expect(layout.iconColor).toBe(layout.textColor) - } - } finally { - await scaffold!.ctx.settings.update('ui-theme', { fontSize: Number.parseFloat(originalFontSize) }) - await expect.poll(() => page.evaluate(() => document.body.style.getPropertyValue('--dsh-content-font-size'))) - .toBe(originalFontSize) - } - const originalDarkTheme = await page.locator('body').getAttribute('data-ds-dark-theme') - try { - await page.evaluate(() => { document.body.setAttribute('data-ds-dark-theme', '') }) - const colors = await runningStatus.evaluate((element) => { - const context = document.createElement('canvas').getContext('2d', { willReadFrequently: true })! - const rgb = (color: string) => { - context.fillStyle = color - context.fillRect(0, 0, 1, 1) - return [...context.getImageData(0, 0, 1, 1).data].slice(0, 3).map(channel => channel / 255) - } - const luminance = (channels: number[]) => channels - .map(channel => channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4) - .reduce((sum, channel, index) => sum + channel * [0.2126, 0.7152, 0.0722][index]!, 0) - const base = rgb(getComputedStyle(element).color) - const sweep = rgb(getComputedStyle(element.querySelector('[data-shimmer] > [inert] > span')!).color) - const max = Math.max(...base) - const min = Math.min(...base) - return { - baseLight: luminance(base), - sweepLight: luminance(sweep), - saturation: (max - min) / (1 - Math.abs(max + min - 1)), - blueSweep: sweep[2]! > sweep[1]! && sweep[1]! > sweep[0]!, - } - }) - expect(colors.saturation).toBeLessThan(0.7) - expect(colors.baseLight).toBeGreaterThan(0.25) - expect(colors.sweepLight).toBeGreaterThan(colors.baseLight * 1.3) - expect(colors.blueSweep).toBe(true) - await expectSharedShimmer(runningStatus) - } finally { - await page.evaluate((value) => { - if (value === null) document.body.removeAttribute('data-ds-dark-theme') - else document.body.setAttribute('data-ds-dark-theme', value) - }, originalDarkTheme) - } // Only the user bubble owns a footer (clock + copy; user bubbles carry no // branch action): the narration is not the answer yet. const copyButtons = page.getByRole('button', { name: 'Copy' }) @@ -239,19 +170,6 @@ describe('web e2e: assistant IconActions wait for the turn to end', () => { await settled expect(sessionEvents.filter(e => e.type === 'turn/end').map(e => e.data.reason.kind)).toEqual(['aborted']) await page.locator('[data-turn-process]').waitFor({ timeout: 10_000 }) - const stopped = page.getByRole('button', { name: 'Stopped', exact: true }) - expect(await stopped.isEnabled()).toBe(true) - expect(await stopped.evaluate(element => getComputedStyle(element).fontSize)).toBe('14px') - expect(await stopped.getAttribute('aria-expanded')).toBe('false') - expect(await runningStatus.count()).toBe(0) - const processGroup = page.locator('[data-process-activity]').first() - expect(await processGroup.isVisible()).toBe(false) - await stopped.click() - expect(await stopped.getAttribute('aria-expanded')).toBe('true') - expect(await processGroup.isVisible()).toBe(true) - await stopped.click() - expect(await stopped.getAttribute('aria-expanded')).toBe('false') - expect(await processGroup.isVisible()).toBe(false) await expect.poll(() => copyButtons.count(), { timeout: 10_000 }).toBe(2) await expect.poll(() => page.locator('[data-streaming="true"]').count(), { timeout: 10_000 }).toBe(0) await copyButtons.last().focus() @@ -317,7 +235,7 @@ describe('web e2e: assistant IconActions wait for the turn to end', () => { element.closest('[data-chat-flow-kind="turn-process"]')?.getBoundingClientRect().bottom) const answerTop = await page.getByText('DONE', { exact: true }).evaluate(element => element.closest('[data-chat-flow-kind="assistant-step"]')?.getBoundingClientRect().top) - expect(answerTop).toBe((processBottom ?? 0) + 16) + expect(answerTop).toBe((processBottom ?? 0) + 8) await process.focus() const completed = await captureStableAria(page, '[class*="centerCol"]', scaffold!.workspaceCwd) await compareOrRefreshGolden(COMPLETED_EXPECTED, completed, MODE) diff --git a/apps/web/tests/workflow-run.e2e.ts b/apps/web/tests/workflow-run.e2e.ts index 8c497e0db7..42c5b1d8fc 100644 --- a/apps/web/tests/workflow-run.e2e.ts +++ b/apps/web/tests/workflow-run.e2e.ts @@ -134,7 +134,7 @@ describe.skipIf(MODE === 'record')('web e2e: durable workflow run in Chat', () = const disclosures = element.querySelectorAll('[data-disclosure-row]') const runHeader = disclosures[0] const phaseHeader = disclosures[1] - const phaseTitle = phaseHeader?.querySelector('[data-shimmer] > span > span') ?? null + const phaseTitle = phaseHeader?.children.item(1) as HTMLElement | null const phaseStatus = element.querySelector('[data-phase-status-text]') const originalPhaseTitle = phaseTitle?.textContent ?? '' if (phaseTitle !== null) phaseTitle.textContent = 'A phase name long enough to require ellipsis in the narrow layout' @@ -153,10 +153,6 @@ describe.skipIf(MODE === 'record')('web e2e: durable workflow run in Chat', () = phaseHeight: phaseHeader?.getBoundingClientRect().height ?? 0, phaseTitleRight, phaseStatusLeft, - phaseStatusRight: phaseStatus?.getBoundingClientRect().right ?? 0, - phaseHeaderRight: phaseHeader?.getBoundingClientRect().right ?? 0, - contentGap: phaseTitle?.parentElement === null || phaseTitle?.parentElement === undefined - ? '' : getComputedStyle(phaseTitle.parentElement).columnGap, } }) expect(darkNarrow.clientWidth).toBe(356) @@ -169,8 +165,6 @@ describe.skipIf(MODE === 'record')('web e2e: durable workflow run in Chat', () = expect(darkNarrow.runHeight).toBe(32) expect(darkNarrow.phaseHeight).toBe(32) expect(darkNarrow.phaseTitleRight).toBeLessThanOrEqual(darkNarrow.phaseStatusLeft) - expect(darkNarrow.phaseStatusRight).toBe(darkNarrow.phaseHeaderRight) - expect(darkNarrow.contentGap).toBe('6px') await page.locator('[data-workflow-run]').evaluate((element) => { (element as HTMLElement).style.removeProperty('width') document.body.removeAttribute('data-ds-dark-theme') diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 693a7fed3d..01fae81ea8 100644 --- a/packages/client/ui-chat/README.i18n.yaml +++ b/packages/client/ui-chat/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-chat/README.md -README.md: 463fd1d0ea3ad97623eabf1c4d57371fd7310927 -README.zh.md: 8e3d4455e74f55c872ec5011f0b8ac59935d3b3b +README.md: cca209016220560b7f39831e11ebb677da515ea9 +README.zh.md: 0b97e490f5a535c3b871ec7c6344d4299976b683 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 463fd1d0ea..cca2090162 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -40,7 +40,7 @@ Settings → General → Open chat links in selects the destination for ordinary ## Hidden Chat rows -Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent, bordered notices with a contrasting neutral background; other command rows remain in Chat. +Chat omits system-prompt, ordinary Context injection, and `permission` command rows in every work-details mode. The filter changes neither recorded Session events nor Trajectory inspection. Non-human Turn triggers remain independent notices; other command rows remain in Chat. When an Assistant attempt retires without a visible message, Chat hides its already-published Node instead of removing its key. A retry in the same Step reuses that key when visible content returns. This also applies when the loaded window lacks the Step start. @@ -99,8 +99,6 @@ Each group owns local `useDisclosure` state that survives mode changes while its The Chat-node slot injects a reset-bound `useDisclosure` Hook for reasoning and tools. Intermediate renderers forward it without subscribing; each invocation owns independent open state. Source callbacks retain their receiver and stable identity. When an enclosing Turn actually hides a process member, its seat resets those disclosures without replacing component keys or changing the Hook reference. Display-mode changes preserve their open state. -Process rows share one text and icon color in every Work details mode: tertiary at rest and secondary on hover, while error and warning text keeps its semantic color. Running group titles, reasoning previews, tool and command rows, the active retry line, and the bottom running status use the shared [Shimmer](../ui-primitives/README.md#component-catalog). Each row’s text shares one left-to-right highlight, including collapsed group titles; icons and hover chevrons retain their base appearance. Non-response rows sit 8px apart; anything beside an Assistant response is 16px away, and a closed Turn control keeps its answer 16px below the summary. Leading icons, disclosure chevrons, and their boxes scale with the content font-size delta. - ----- diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 8e3d4455e7..0b97e490f5 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -40,7 +40,7 @@ Chat 在节点列表外通过一个 `MarkdownDelegateProvider` 提供文件及 H ## Chat 隐藏的行 -Chat 在所有工作过程展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示,使用细边框和与周围有区分度的中性底色,其他命令行仍保留在 Chat 中。 +Chat 在所有工作过程展示模式下都不显示系统提示词行、普通上下文注入和 `permission` 命令行。该过滤不改变已记录的 Session 事件或 Trajectory 查看能力。非人工轮次触发仍作为独立通知显示,其他命令行仍保留在 Chat 中。 Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node,不移除其 key。同一 Step 的重试再次产生可见内容时,复用该 key。已加载窗口缺少 Step 起点时也遵循此规则。 @@ -99,8 +99,6 @@ Chat 通过 `uiConversation.groups` 注册过程 Group Definition。React 通过 Chat 节点 slot 为推理与工具注入绑定重置来源的 `useDisclosure` 钩子。中间 renderer 只透传、不订阅,每次调用拥有独立展开状态。来源回调保留接收对象及稳定引用。外层轮次实际隐藏过程成员时,所在节点重置这些开合状态,不替换组件 key,也不改变钩子引用。展示模式切换保留展开状态。 -过程行的文字与图标在所有工作过程展示模式下共用一种颜色:默认 tertiary、悬停 secondary,错误与警告文字保留语义色。运行中的分组标题、思考预览、工具与命令行、当前重试行以及底部运行状态使用共享的 [Shimmer](../ui-primitives/README.zh.md#component-catalog)。每行的文字共用一道从左到右的高光,包括折叠的分组标题;图标和悬停箭头保留底色。非回复条目之间相隔 8px;与 Assistant 回复相邻的条目相隔 16px,收起的整轮控件与其回答之间保持 16px。前置图标、折叠箭头及其容器随正文字号增量缩放。 - ----- diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index ca98b7dc89..61174be32d 100644 --- a/packages/client/ui-chat/package.json +++ b/packages/client/ui-chat/package.json @@ -82,18 +82,17 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-stats": "workspace:*", "@deepseek-ai/dsh-session-turn-outline": "workspace:*", - "@deepseek-ai/dsh-settings": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-token-meter": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/dsh-util-workspace-path": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@tanstack/react-virtual": "^3.14.9", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "lottie-web": "^5.13.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "@deepseek-ai/dsh-settings": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:~" diff --git a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.module.css b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.module.css index ad2e0379d2..56687cd84e 100644 --- a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.module.css +++ b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.module.css @@ -10,7 +10,7 @@ padding: 0; border: 0; background: none; - color: var(--dsw-alias-label-tertiary); + color: var(--dsw-alias-label-secondary); font: inherit; font-size: var(--dsh-content-font-size, 14px); text-align: left; @@ -19,30 +19,18 @@ } .title:hover { - color: var(--dsw-alias-label-secondary); + color: var(--dsw-alias-label-primary); } -/* The leading box and its glyph ride the body font-size delta so the icon - keeps its optical share of the row at every Settings size. */ .leading { position: relative; flex: none; display: inline-flex; align-items: center; justify-content: center; - width: calc(16px + var(--dsh-content-font-delta, 0px)); - height: calc(16px + var(--dsh-content-font-delta, 0px)); - color: inherit; -} - -.leading svg { - width: calc(14px + var(--dsh-content-font-delta, 0px)); - height: calc(14px + var(--dsh-content-font-delta, 0px)); -} - -.leading svg[width="16"] { - width: calc(16px + var(--dsh-content-font-delta, 0px)); - height: calc(16px + var(--dsh-content-font-delta, 0px)); + width: 16px; + height: 16px; + color: var(--dsw-alias-label-tertiary); } .activityIcon, @@ -80,7 +68,7 @@ } .title[aria-expanded="true"] { - padding-bottom: 8px; + padding-bottom: 16px; } .body { @@ -133,6 +121,7 @@ margin-top: var(--dsh-chat-flow-gap, 8px); } .expandedBody { + --dsh-chat-flow-gap: 16px; max-height: none; overflow: visible; scrollbar-gutter: auto; diff --git a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx index 2ca89d0ef2..2944f85c38 100644 --- a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx @@ -4,7 +4,7 @@ import { IconAgentPresetOutlineRegular, IconApiOutlineRegular, IconBrowseOutlineRegular, IconChevronDownOutlineRegular, IconChevronUpOutlineRegular, IconCodeOutlineRegular, IconEditOutlineRegular, IconGlobeOutlineRegular, IconPlanOutlineRegular, IconQuestionOutlineRegular, IconSearchOutlineRegular, IconSparkleRegular, - IconThinkOutlineRegular, Shimmer, ShimmerText, + IconThinkOutlineRegular, TextShimmer, } from '@deepseek-ai/dsh-client-ui-primitives' import type { GroupKey, NodeReference } from '@deepseek-ai/dsh-client-ui-conversation/client' import type { ProcessActivity } from '../contract/process-groups.ts' @@ -120,9 +120,7 @@ const ProcessGroupHeader = memo(function ProcessGroupHeader({ groupKey, useChatG {open ? : } - - {title} - + {title} ) }) @@ -143,7 +141,7 @@ export const ChatGroupSeat = memo(function ChatGroupSeat({ groupKey, useChatGrou const grouped = props.usePresentation(policy => turnLocation?.status !== 'open' || policy.stepGrouping !== 'none') const reason = turnLocation?.end?.data.reason.kind const alwaysOpen = presentation?.turnClosed === false || presentation?.hasInterleavedInput === true - || reason === 'error' + || reason === 'aborted' || reason === 'error' const spec = presentation?.spec const selectStored = useCallback((state: Readonly) => turn === undefined ? undefined : storedTurnProcessEntry(state, turn), [turn]) diff --git a/packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx b/packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx index 5051844c96..5bb003bdfa 100644 --- a/packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx @@ -153,7 +153,6 @@ export const ChatNodeSeat = memo(function ChatNodeSeat({ data-chat-node-key={routedNode.key} data-chat-group-part={groupPart} data-chat-flow-kind={routedNode.kind} - data-chat-flow-response={groupPart === 'response' || undefined} data-chat-turn={turn} data-turn-process-member={processMember || undefined} data-turn-process-hidden={processHidden || undefined} diff --git a/packages/client/ui-chat/src/client/chat/ChatView.module.css b/packages/client/ui-chat/src/client/chat/ChatView.module.css index d652100e90..a6b3955f8c 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.module.css +++ b/packages/client/ui-chat/src/client/chat/ChatView.module.css @@ -67,17 +67,7 @@ hidden and empty Seats do not contribute spacing. */ .column > :not([hidden]):not(.flowItem:empty) ~ :not([hidden]):not(.flowItem:empty) { - margin-top: var(--dsh-chat-flow-gap, 8px); -} - -/* Assistant responses have 16px clearance from adjacent flow items. */ -.flowItem[data-chat-flow-response] { - --dsh-chat-flow-gap: 16px; -} - -.column > [data-chat-flow-response]:not([hidden]):not(:empty) - + :not([hidden]):not(.flowItem:empty):not(.running) { - --dsh-chat-flow-gap: 16px; + margin-top: var(--dsh-chat-flow-gap, 16px); } /* Settled-flow identity boundary. It is neutral until it becomes the natural @@ -86,11 +76,10 @@ min-width: 0; } -/* The Turn header has 16px clearance from its input and following content. */ -.flowItem[data-chat-flow-kind="turn-process"], -.flowItem[data-turn-process-answer], -.column > [data-chat-flow-kind="turn-process"] + :not([hidden]):not(.flowItem:empty):not(.running) { - --dsh-chat-flow-gap: 16px; +/* A closed process reads as one summary immediately followed by its answer. + Expanded process rows return to the ordinary 16px rhythm. */ +.flowItem[data-turn-process-answer] { + --dsh-chat-flow-gap: 8px; } /* Empty Seats retain ordered layout positions for Turn lookup without @@ -112,56 +101,6 @@ line-height: calc(18px + var(--dsh-content-font-delta-secondary, 0px)); } -.running { - display: flex; - align-items: center; - justify-content: center; - column-gap: 16px; - --dsh-chat-flow-gap: 32px; - --dsw-alias-label-shimmer: var(--dsw-alias-label-deep-diving-shimmer); - color: var(--dsw-alias-label-deep-diving); - font-size: calc(var(--dsh-content-font-size, 14px) - 2px); - line-height: calc(22px + var(--dsh-content-font-delta, 0px)); -} - -.running::before, -.running::after { - content: ''; - flex: 0 0 32px; - border-top: 0.5px solid var(--dsw-alias-border-l3); -} - -.scroll:has(.running) { - padding-bottom: 24px; -} - -.runningContent { - display: inline-flex; - align-items: center; - min-width: 0; - gap: 6px; -} - -.runningText { - min-width: 0; -} - -.runningNumber { - font-family: var(--ds-font-family-code); - font-variant-numeric: tabular-nums; -} - -.runningIcon { - display: inline-flex; - flex: none; - width: calc(14px + var(--dsh-content-font-delta, 0px)); - height: calc(14px + var(--dsh-content-font-delta, 0px)); -} - -.runningIcon path[stroke] { - stroke: currentColor; -} - .openError { color: var(--dsw-alias-state-error-primary); font-size: var(--dsh-content-font-size-secondary, 13px); diff --git a/packages/client/ui-chat/src/client/chat/ChatView.tsx b/packages/client/ui-chat/src/client/chat/ChatView.tsx index 49d69a729e..0514068aed 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatView.tsx @@ -18,7 +18,6 @@ import { ChatGroupSeat } from './ChatGroupSeat.tsx' import { chatRenderKey } from './render-entry.ts' import { assertNever } from '@deepseek-ai/dsh-util-values' import { TurnNavigator } from './TurnNavigator.tsx' -import { RunningStatus } from './RunningStatus.tsx' import { mergeTurnRailItems } from './turn-rail-items.ts' import { useChatScroll } from './use-chat-scroll.ts' import { fileMediaUrl, resolveWorkspacePath } from '@deepseek-ai/dsh-util-workspace-path' @@ -270,7 +269,6 @@ export function ChatView({ t={t} /> - {running && } {/* No pending placeholders: questions (ui-user-questions) and approvals (ApprovalPanel) both take over the composer, so a flow card would double-render the same wait. */} diff --git a/packages/client/ui-chat/src/client/chat/GenericCommandCard.module.css b/packages/client/ui-chat/src/client/chat/GenericCommandCard.module.css index e05c9ff13c..a4bb6ef0cc 100644 --- a/packages/client/ui-chat/src/client/chat/GenericCommandCard.module.css +++ b/packages/client/ui-chat/src/client/chat/GenericCommandCard.module.css @@ -7,8 +7,13 @@ flex-shrink: 0; } +.chevron { + color: var(--dsw-alias-label-secondary); +} + .title { font-weight: 400; + transition: color 100ms ease; } .separator { @@ -24,10 +29,17 @@ min-width: 0; overflow: hidden; flex: 1 1 auto; + color: var(--dsw-alias-label-tertiary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); text-overflow: ellipsis; white-space: nowrap; + transition: color 100ms ease; +} + +.row:hover .title, +.row:hover .summary:not([data-error]) { + color: var(--dsw-alias-label-primary); } .summary[data-error], diff --git a/packages/client/ui-chat/src/client/chat/GenericCommandCard.tsx b/packages/client/ui-chat/src/client/chat/GenericCommandCard.tsx index 769e4977f4..0b0749881b 100644 --- a/packages/client/ui-chat/src/client/chat/GenericCommandCard.tsx +++ b/packages/client/ui-chat/src/client/chat/GenericCommandCard.tsx @@ -1,6 +1,6 @@ import { memo, useCallback, useMemo, useState } from 'react' import type { ChatViewSlotProps, CommandRowOwnerProps } from '../contract/slots.ts' -import { DisclosureRow, IconApiOutlineRegular, ShimmerText } from '@deepseek-ai/dsh-client-ui-primitives' +import { DisclosureRow, IconApiOutlineRegular, TextShimmer } from '@deepseek-ai/dsh-client-ui-primitives' import a11yCss from './accessibility.module.css' import css from './GenericCommandCard.module.css' @@ -42,12 +42,12 @@ export const GenericCommandCard = memo(function GenericCommandCard({ node, t, ru const toggle = useCallback(() => { setExpanded(value => !value) }, []) const collapsedContent = useMemo(() => ( <> - + - {summary} + {summary} - ), [state, summary]) + ), [running, state, summary]) const content = useMemo(() => open ?
{body}
: undefined, [body, open, state]) @@ -56,8 +56,10 @@ export const GenericCommandCard = memo(function GenericCommandCard({ node, t, ru {state === 'running' && {t('row.running')}} {state === 'error' && {t('row.failed')}} - - {status} + + {t('message.retry.status', { label, retry: node.retry, maximum, seconds })}
diff --git a/packages/client/ui-chat/src/client/chat/ReasoningRow.module.css b/packages/client/ui-chat/src/client/chat/ReasoningRow.module.css index 402a9effc1..f59c04e404 100644 --- a/packages/client/ui-chat/src/client/chat/ReasoningRow.module.css +++ b/packages/client/ui-chat/src/client/chat/ReasoningRow.module.css @@ -9,6 +9,7 @@ } .row { + position: relative; overflow: hidden; } @@ -21,10 +22,35 @@ background: var(--dsw-alias-bg-base); } +.root[data-state='running'] .row::after { + content: ''; + position: absolute; + inset-block: 0; + left: 0; + width: 300px; + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, + transparent 100% + ); + animation: dsh-reasoning-row-sweep 2.6s ease-out infinite; + pointer-events: none; +} + +@keyframes dsh-reasoning-row-sweep { + 0% { left: -300px; } + 90%, 100% { left: 100%; } +} + .leading { flex-shrink: 0; } +.chevron { + color: var(--dsw-alias-label-secondary); +} + .title { font-weight: 400; } @@ -45,6 +71,7 @@ min-width: 0; overflow: hidden; flex: 1 1 auto; + color: var(--dsw-alias-label-tertiary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(20px + var(--dsh-content-font-delta-secondary, 0px)); white-space: nowrap; @@ -75,3 +102,9 @@ padding: 4px 0 4px calc(22px + var(--dsh-content-font-delta, 0px)); min-width: 0; } + +@media (prefers-reduced-motion: reduce) { + .root[data-state='running'] .row::after { + animation: none; + } +} diff --git a/packages/client/ui-chat/src/client/chat/ReasoningRow.tsx b/packages/client/ui-chat/src/client/chat/ReasoningRow.tsx index dd27a47b5c..74a801d6dd 100644 --- a/packages/client/ui-chat/src/client/chat/ReasoningRow.tsx +++ b/packages/client/ui-chat/src/client/chat/ReasoningRow.tsx @@ -1,6 +1,6 @@ /** Assistant reasoning disclosure, independent of Tool-call presentation. */ import { memo, useMemo } from 'react' -import { DisclosureRow, IconThinkOutlineRegular, MarkdownText, ShimmerText } from '@deepseek-ai/dsh-client-ui-primitives' +import { DisclosureRow, IconThinkOutlineRegular, MarkdownText } from '@deepseek-ai/dsh-client-ui-primitives' import type { ChatViewSlotProps, UseDisclosure, UsePresentation } from '../contract/slots.ts' import { markdownLabels } from '../markdown-labels.ts' import a11yCss from './accessibility.module.css' @@ -59,11 +59,9 @@ export const ReasoningRow = memo(function ReasoningRow({ text, running, usePrese && (running || policy.settledReasoningPreview)) const collapsedContent = useMemo(() => ( <> - + - - {summary} - + {summary} ), [running, summary]) @@ -86,9 +84,9 @@ export const ReasoningRow = memo(function ReasoningRow({ text, running, usePrese rowClassName={css.row} leadingClassName={css.leading} titleClassName={css.title} + chevronClassName={css.chevron} icon={THINK_ICON} title={t('message.think')} - running={running} open={expanded} expandable expandOnRowClick diff --git a/packages/client/ui-chat/src/client/chat/RunningStatus.tsx b/packages/client/ui-chat/src/client/chat/RunningStatus.tsx deleted file mode 100644 index a76c7210b3..0000000000 --- a/packages/client/ui-chat/src/client/chat/RunningStatus.tsx +++ /dev/null @@ -1,82 +0,0 @@ -/** Running Turn clock isolated from the transcript's render cycle. */ -import { memo, useEffect, useRef, useState } from 'react' -import { Shimmer, ShimmerText } from '@deepseek-ai/dsh-client-ui-primitives' -import lottie from 'lottie-web/build/player/lottie_light.js' -import type { ChatViewSlotProps } from '../contract/slots.ts' -import { formatLiveRunDuration, LIVE_RUN_CLOCK_INTERVAL_MS } from './message-chrome.ts' -import whaleTail from './whale-tail.lottie.json' with { type: 'json' } -import a11yCss from './accessibility.module.css' -import css from './ChatView.module.css' - -/** - * Show live elapsed time after the current Turn's content without announcing ticks. - * @param props - Chat timeline selector and localized copy. - * @returns the blue running indicator; mount only while the Session is running. - */ -export const RunningStatus = memo(function RunningStatus({ useChat, t }: Pick) { - const startTime = useChat(({ timeline }) => { - const latest = timeline.turnOrder.at(-1) - const turn = latest === undefined ? undefined : timeline.turns.get(latest) - return turn?.status === 'open' ? turn.start?.time : undefined - }) - const [now, setNow] = useState(Date.now) - useEffect(() => { - if (startTime === undefined) return - setNow(Date.now()) - const timer = setInterval(() => { setNow(Date.now()) }, LIVE_RUN_CLOCK_INTERVAL_MS) - return () => { clearInterval(timer) } - }, [startTime]) - const label = startTime === undefined ? t('chat.deepDiving') : t('chat.deepDivingFor', { - duration: formatLiveRunDuration(Math.max(1000, now - startTime), t), - }) - return ( -
- {t('chat.deepDiving')} - - - - - {label.split(/(\d+)/).map((part, index) => ( - {part} - ))} - - - -
- ) -}) - -/** Loop once per two text sweeps (3s), with a 0.3s delay; hold the initial pose for reduced motion. */ -function RunningWhaleTail() { - const container = useRef(null) - useEffect(() => { - if (container.current === null) return - const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)') - const animation = lottie.loadAnimation({ - container: container.current, - renderer: 'svg', - loop: true, - autoplay: false, - animationData: structuredClone(whaleTail), - rendererSettings: { focusable: false }, - }) - let playTimer: number | undefined - const syncPlayback = () => { - window.clearTimeout(playTimer) - animation.goToAndStop(0, true) - if (!reducedMotion.matches) { - playTimer = window.setTimeout(() => { animation.play() }, 300) - } - } - animation.addEventListener('DOMLoaded', syncPlayback) - reducedMotion.addEventListener('change', syncPlayback) - syncPlayback() - return () => { - window.clearTimeout(playTimer) - reducedMotion.removeEventListener('change', syncPlayback) - animation.removeEventListener('DOMLoaded', syncPlayback) - animation.destroy() - } - }, []) - return )} - - {title} - {(keepContentWhenOpen || !open) && collapsedContent} - + {title} + {(keepContentWhenOpen || !open) && collapsedContent}
{open && children}
diff --git a/packages/client/ui-primitives/src/Shimmer.module.css b/packages/client/ui-primitives/src/Shimmer.module.css deleted file mode 100644 index 5131ecd653..0000000000 --- a/packages/client/ui-primitives/src/Shimmer.module.css +++ /dev/null @@ -1,88 +0,0 @@ -.root { - position: relative; - display: inline-grid; - width: max-content; - max-width: 100%; - min-width: 0; - vertical-align: top; - color: inherit; -} - -.content { - display: flex; - align-items: center; - min-width: 0; -} - -.text { - color: inherit; -} - -.text[data-shimmer-text]::after { - content: attr(data-shimmer-text); -} - -.decoration { - position: absolute; - inset: 0; - /* The moving mask must not enlarge any ancestor's scrollable area. */ - overflow: clip; - pointer-events: none; - user-select: none; -} - -.sweep { - position: absolute; - inset: 0; - overflow: hidden; - color: var(--dsw-alias-label-shimmer); - mask-image: linear-gradient(105deg, transparent 0%, black 40% 60%, transparent 100%); - transform: translateX(-100%); - animation-name: dsh-row-shimmer-sweep; -} - -/* Semantic base colors stay on the real content; the overlay supplies one tint. */ -.sweep * { - color: inherit !important; -} - -.sweep [data-shimmer-decoration] { - background: currentColor; -} - -/* Opposite transforms keep every glyph aligned while their shared mask moves. */ -.highlight { - width: 100%; - height: 100%; - transform: translateX(100%); - animation-name: dsh-row-shimmer-highlight; -} - -.sweep, -.highlight { - animation-duration: 1.5s; - animation-delay: 0.3s; - animation-timing-function: steps(48, end); - animation-iteration-count: infinite; -} - -@keyframes dsh-row-shimmer-sweep { - 0% { transform: translateX(-100%); } - 66.6667%, 100% { transform: translateX(100%); } -} - -@keyframes dsh-row-shimmer-highlight { - 0% { transform: translateX(100%); } - 66.6667%, 100% { transform: translateX(-100%); } -} - -@media (prefers-reduced-motion: reduce) { - .decoration { - display: none; - } - - .sweep, - .highlight { - animation: none; - } -} diff --git a/packages/client/ui-primitives/src/Shimmer.tsx b/packages/client/ui-primitives/src/Shimmer.tsx deleted file mode 100644 index 3c6e02b40d..0000000000 --- a/packages/client/ui-primitives/src/Shimmer.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/** One activity highlight across a row's text and separators. */ -import { createContext, memo, useContext, type ReactNode } from 'react' -import clsx from 'clsx' -import css from './Shimmer.module.css' - -const DecorativeCopy = createContext(false) - -/** Presentational content shared by the visible row and its inert highlight. */ -export interface ShimmerProps { - /** Text and layout elements; keep icons outside and use ShimmerText for text. No effects or element ids. */ - children: ReactNode - /** Whether the row's owning operation is running. */ - active: boolean - /** Additional class applied to the retained wrapper. */ - className?: string | undefined - /** Layout class applied equally to the base and decorative content. */ - contentClassName?: string | undefined -} - -/** - * Sweep one highlight across the visible width of a row's text; place icons outside. - * Children also render in an inert, aria-hidden decoration while active; keep - * state and subscriptions above this component and supply presentational nodes. - * The decoration is clipped to the row without extending its scrollable area. - * @param props - row content, activity, and layout classes. - * @returns the stable base row and optional masked decoration. - */ -export const Shimmer = memo(function Shimmer({ children, active, className, contentClassName }: ShimmerProps) { - return ( - - {children} - {/* React 18 emits inert as a string attribute; React 19 requires boolean true. */} - {active && ( - - )} - - ) -}) - -/** Text rendered once for selection and accessibility, with generated decoration. */ -export interface ShimmerTextProps { - /** Visible, already-localized text. */ - children: string - /** Typography and truncation class applied to both copies. */ - className?: string | undefined -} - -/** - * Render row text without duplicating its selectable or accessible content. - * @param props - text and owner styling. - * @returns text in the base row or generated text in its decoration. - */ -export const ShimmerText = memo(function ShimmerText({ children, className }: ShimmerTextProps) { - const decorative = useContext(DecorativeCopy) - return ( - - {decorative ? null : children} - - ) -}) diff --git a/packages/client/ui-primitives/src/TextShimmer.module.css b/packages/client/ui-primitives/src/TextShimmer.module.css new file mode 100644 index 0000000000..bdc2de9a44 --- /dev/null +++ b/packages/client/ui-primitives/src/TextShimmer.module.css @@ -0,0 +1,27 @@ +.root[data-text-shimmer] { + background-image: linear-gradient( + 90deg, + currentColor calc(50% - var(--dsh-text-shimmer-spread)), + color-mix(in oklab, currentColor 50%, transparent), + currentColor calc(50% + var(--dsh-text-shimmer-spread)) + ); + background-position: 100% center; + background-repeat: no-repeat; + background-size: 250% 100%; + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: dsh-text-shimmer 1.5s cubic-bezier(0.33, 0, 0.67, 1) infinite; +} + +@keyframes dsh-text-shimmer { + 66.6667%, 100% { background-position: 0% center; } +} + +@media (prefers-reduced-motion: reduce) { + .root[data-text-shimmer] { + background-image: none; + -webkit-text-fill-color: currentColor; + animation: none; + } +} diff --git a/packages/client/ui-primitives/src/TextShimmer.tsx b/packages/client/ui-primitives/src/TextShimmer.tsx new file mode 100644 index 0000000000..8249626435 --- /dev/null +++ b/packages/client/ui-primitives/src/TextShimmer.tsx @@ -0,0 +1,23 @@ +/** Text-only activity animation with a stable span across lifecycle changes. */ +import { memo, useMemo, type CSSProperties } from 'react' +import clsx from 'clsx' +import css from './TextShimmer.module.css' + +/** Text and activity supplied by the owning row. */ +export interface TextShimmerProps { + children: string + active: boolean + className?: string | undefined +} + +/** + * Render text with an optional moving highlight; inactive text keeps the same node. + * @param props - localized text, running state, and owner styling. + * @returns the retained text span. + */ +export const TextShimmer = memo(function TextShimmer({ children, active, className }: TextShimmerProps) { + const style = useMemo(() => ({ + '--dsh-text-shimmer-spread': `${children.length * 8}px`, + } as CSSProperties), [children.length]) + return {children} +}) diff --git a/packages/client/ui-primitives/src/icons/index.tsx b/packages/client/ui-primitives/src/icons/index.tsx index cf7a39c381..1629d28a35 100644 --- a/packages/client/ui-primitives/src/icons/index.tsx +++ b/packages/client/ui-primitives/src/icons/index.tsx @@ -449,9 +449,9 @@ export const IconEditOutlineMedium = (props: IconProps) => ( const IconThinkOutlineArtwork = ({ size = 16, className, strokeWidth }: WeightedIconProps) => ( ) diff --git a/packages/client/ui-primitives/src/index.ts b/packages/client/ui-primitives/src/index.ts index d8f4e1928f..ab82a9f6a5 100644 --- a/packages/client/ui-primitives/src/index.ts +++ b/packages/client/ui-primitives/src/index.ts @@ -7,8 +7,8 @@ export { StateDot } from './StateDot.tsx' export type { StateDotState } from './StateDot.tsx' export { DisclosureRow } from './DisclosureRow.tsx' export type { DisclosureRowProps } from './DisclosureRow.tsx' -export { Shimmer, ShimmerText } from './Shimmer.tsx' -export type { ShimmerProps, ShimmerTextProps } from './Shimmer.tsx' +export { TextShimmer } from './TextShimmer.tsx' +export type { TextShimmerProps } from './TextShimmer.tsx' export { Button } from './Button.tsx' export type { ButtonVariant } from './Button.tsx' export { Pill } from './Pill.tsx' diff --git a/packages/client/ui-primitives/tests/shimmer.client.spec.tsx b/packages/client/ui-primitives/tests/shimmer.client.spec.tsx deleted file mode 100644 index d2afcf0e71..0000000000 --- a/packages/client/ui-primitives/tests/shimmer.client.spec.tsx +++ /dev/null @@ -1,41 +0,0 @@ -// @vitest-environment jsdom -import { cleanup, fireEvent, render } from '@testing-library/react' -import { afterEach, describe, expect, it, vi } from 'vitest' -import { Shimmer, ShimmerText } from '../src/Shimmer.tsx' - -afterEach(cleanup) - -describe('Shimmer', () => { - it('retains real text and controls while one inert decoration covers icons and text', () => { - const open = vi.fn() - const row = (active: boolean, title: string) => ( - - - {title} - - - ) - const view = render(row(true, 'Read')) - const title = view.getByText('Read') - const button = view.getByRole('button', { name: 'file.ts' }) - const decoration = view.container.querySelector('[inert]')! - expect(decoration.getAttribute('aria-hidden')).toBe('true') - expect(decoration.querySelector('svg')).not.toBeNull() - expect([...decoration.querySelectorAll('[data-shimmer-text]')].map(node => node.getAttribute('data-shimmer-text'))) - .toEqual(['Read', 'file.ts']) - expect(view.container.textContent).toBe('Readfile.ts') - fireEvent.click(button) - expect(open).toHaveBeenCalledOnce() - - view.rerender(row(true, 'Reading')) - expect(view.getByText('Reading')).toBe(title) - expect(view.getByRole('button', { name: 'file.ts' })).toBe(button) - expect(view.container.querySelector('[inert]')).toBe(decoration) - - view.rerender(row(false, 'Read')) - expect(view.getByText('Read')).toBe(title) - expect(view.getByRole('button', { name: 'file.ts' })).toBe(button) - expect(view.container.querySelector('[inert]')).toBeNull() - expect(view.container.querySelectorAll('svg')).toHaveLength(1) - }) -}) diff --git a/packages/client/ui-primitives/tests/text-shimmer-styles.client.spec.ts b/packages/client/ui-primitives/tests/text-shimmer-styles.client.spec.ts new file mode 100644 index 0000000000..b416a1705f --- /dev/null +++ b/packages/client/ui-primitives/tests/text-shimmer-styles.client.spec.ts @@ -0,0 +1,16 @@ +/** CSS activity and reduced-motion rules that jsdom does not execute. */ +import { readFileSync } from 'node:fs' +import { describe, expect, it } from 'vitest' + +const css = readFileSync(new URL('../src/TextShimmer.module.css', import.meta.url), 'utf8') + +describe('TextShimmer styles', () => { + it('animates active text and disables motion and transparent fill for reduced motion', () => { + expect(css).toMatch(/\.root\[data-text-shimmer\]\s*\{[^}]*animation: dsh-text-shimmer/s) + expect(css).toMatch(/@keyframes dsh-text-shimmer\s*\{[^}]*background-position: 0% center/s) + const reduced = /@media \(prefers-reduced-motion: reduce\)\s*\{\s*\.root\[data-text-shimmer\]\s*\{([^}]+)\}/.exec(css)?.[1] + expect(reduced).toContain('background-image: none;') + expect(reduced).toContain('-webkit-text-fill-color: currentColor;') + expect(reduced).toContain('animation: none;') + }) +}) diff --git a/packages/client/ui-primitives/tests/text-shimmer.client.spec.tsx b/packages/client/ui-primitives/tests/text-shimmer.client.spec.tsx new file mode 100644 index 0000000000..5f6efdf805 --- /dev/null +++ b/packages/client/ui-primitives/tests/text-shimmer.client.spec.tsx @@ -0,0 +1,29 @@ +// @vitest-environment jsdom +import { cleanup, render } from '@testing-library/react' +import { afterEach, describe, expect, it } from 'vitest' +import { TextShimmer } from '../src/TextShimmer.tsx' + +afterEach(cleanup) + +describe('TextShimmer', () => { + it('retains its text span across activity, text, and owner-class changes', () => { + const view = render(Run) + const span = view.getByText('Run') + expect(span.tagName).toBe('SPAN') + expect(span.dataset.textShimmer).toBe('true') + expect(span.classList.contains('title')).toBe(true) + expect(span.style.getPropertyValue('--dsh-text-shimmer-spread')).toBe('24px') + + view.rerender(End) + expect(view.getByText('End')).toBe(span) + expect(span.hasAttribute('data-text-shimmer')).toBe(false) + expect(span.classList.contains('title')).toBe(false) + expect(span.style.getPropertyValue('--dsh-text-shimmer-spread')).toBe('24px') + + view.rerender(Running) + expect(view.getByText('Running')).toBe(span) + expect(span.dataset.textShimmer).toBe('true') + expect(span.style.getPropertyValue('--dsh-text-shimmer-spread')).toBe('56px') + }) + +}) diff --git a/packages/client/ui-skill/README.i18n.yaml b/packages/client/ui-skill/README.i18n.yaml index 784ab58cab..c0203ad861 100644 --- a/packages/client/ui-skill/README.i18n.yaml +++ b/packages/client/ui-skill/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-skill/README.md -README.md: 9e9bc11f76bce8159e9f63a011c686c62db39776 -README.zh.md: 93d0f1ce318c404fcff512168d6092b21b91743e +README.md: 0234ce8fb6c2737ea242ac5590e471c3e4c91834 +README.zh.md: 5b039ec1c5bea818e6396f4896c05b8175beb08a diff --git a/packages/client/ui-skill/README.md b/packages/client/ui-skill/README.md index 9e9bc11f76..0234ce8fb6 100644 --- a/packages/client/ui-skill/README.md +++ b/packages/client/ui-skill/README.md @@ -35,7 +35,7 @@ Ordinary-session candidates come from the `skills/list` Remote; the host serves The `preparing` stage shows only the skill icon and title, with no requested skill name or expansion. The `start` and `result` stages use the recorded arguments and output described below; preparation does not consult the installed catalog. -A collapsed row renders the skill glyph, `Skill` title, and requested skill name on the same secondary font-size axis, line height, row height, and glyph scaling as ordinary Tool rows. The header follows the shared [process-row text and icon colors](../ui-primitives/README.md#component-catalog). Every lifecycle state retains the ordinary skill glyph; running calls share one left-to-right shimmer across the title, separator, and skill name, while failures replace the name with the first error line and interruptions retain their explicit status text. A settled row expands into a bounded `Instructions` card containing the exact durable tool output, with the standard trajectory `Inspect` affordance when available; this expanded card keeps its own typography. The row derives its name, lifecycle, and body only from the frozen call/result slice supplied by ui-tool, never from the current catalog, so replay stays stable when installed skills or their descriptions change. +A collapsed row renders the skill glyph, `Skill` title, and requested skill name on the same secondary font-size axis, line height, row height, and glyph scaling as ordinary Tool rows. Every lifecycle state retains the ordinary skill glyph; running calls carry the transcript shimmer, while failures replace the name with the first error line and interruptions retain their explicit status text. A settled row expands into a bounded `Instructions` card containing the exact durable tool output, with the standard trajectory `Inspect` affordance when available; this expanded card keeps its own typography. The row derives its name, lifecycle, and body only from the frozen call/result slice supplied by ui-tool, never from the current catalog, so replay stays stable when installed skills or their descriptions change. Hovering over `/name` highlights the entire reference. Clicking a known skill opens its provider-supplied `SKILL.md` path in the right Sidebar while keeping the token editable. An uncached click shares the per-Session catalog fetch and opens when it completes, retaining the clicked Session address. Preset changes, connection resets, and plugin disposal cancel pending previews; a later click fetches the current catalog again. Skills without a file path remain invocable but have no file preview. diff --git a/packages/client/ui-skill/README.zh.md b/packages/client/ui-skill/README.zh.md index 93d0f1ce31..5b039ec1c5 100644 --- a/packages/client/ui-skill/README.zh.md +++ b/packages/client/ui-skill/README.zh.md @@ -35,7 +35,7 @@ kind: "package-reference" `preparing` 阶段只显示技能图标与标题,不显示请求加载的技能名称,也不能展开。`start` 和 `result` 阶段使用下述记录参数与输出;准备阶段不查询已安装目录。 -收起的行显示 skill 图标、`Skill` 标题与请求加载的 skill 名称,并与普通工具行使用相同的 secondary 字号轴、行高、行高度和图标缩放。标题行遵循共享的[过程行文字与图标颜色](../ui-primitives/README.zh.md#component-catalog)。所有生命周期状态都保留普通 skill 图标;运行中的调用以同一道高光从左到右扫过标题、分隔符与 skill 名称,失败时以错误首行替换名称,中断则保留明确状态文本。已结算的行展开为一个尺寸受限的 `Instructions` 卡片,其中原样呈现持久化的工具输出;可用时还会提供标准轨迹的 `Inspect` 入口,展开卡片保留自身排版。该行的名称、生命周期与正文只派生自 ui-tool 提供的冻结调用/结果切片,绝不读取当前目录,因此即使已安装的 skill 或其描述发生变化,回放仍保持稳定。 +收起的行显示 skill 图标、`Skill` 标题与请求加载的 skill 名称,并与普通工具行使用相同的 secondary 字号轴、行高、行高度和图标缩放。所有生命周期状态都保留普通 skill 图标;运行中的调用带有 transcript(文本记录)的扫光效果,失败时以错误首行替换名称,中断则保留明确状态文本。已结算的行展开为一个尺寸受限的 `Instructions` 卡片,其中原样呈现持久化的工具输出;可用时还会提供标准轨迹的 `Inspect` 入口,展开卡片保留自身排版。该行的名称、生命周期与正文只派生自 ui-tool 提供的冻结调用/结果切片,绝不读取当前目录,因此即使已安装的 skill 或其描述发生变化,回放仍保持稳定。 鼠标移入 `/name` 时,背景覆盖整个引用。点击已知 skill 会在右侧栏打开提供方给出的 `SKILL.md` 路径,同时保留文本的可编辑性。缓存未就绪时,点击复用该 Session 的目录请求,在完成后按点击时的 Session 地址打开预览。切换预设、重置连接和插件释放会取消待处理的预览;后续点击重新获取当前目录。没有文件路径的 skill 仍可调用,但没有文件预览。 diff --git a/packages/client/ui-skill/src/client/SkillRow.module.css b/packages/client/ui-skill/src/client/SkillRow.module.css index 39a73a614c..9fad40a2d0 100644 --- a/packages/client/ui-skill/src/client/SkillRow.module.css +++ b/packages/client/ui-skill/src/client/SkillRow.module.css @@ -12,18 +12,33 @@ align-items: center; height: calc(24px + var(--dsh-content-font-delta, 0px)); min-width: 0; - color: var(--dsw-alias-label-tertiary); - transition: color 100ms ease; -} - -.row:hover { - color: var(--dsw-alias-label-secondary); } .row[data-expandable] { cursor: pointer; } +.card[data-state='running'] .row::after, +.card[data-state='preparing'] .row::after { + content: ''; + position: absolute; + inset: 0 auto 0 0; + width: 300px; + background: linear-gradient( + 90deg, + transparent 0%, + color-mix(in srgb, var(--dsw-alias-bg-base) 60%, transparent) 55%, + transparent 100% + ); + animation: dsh-skill-row-sweep 2.6s ease-out infinite; + pointer-events: none; +} + +@keyframes dsh-skill-row-sweep { + 0% { left: -300px; } + 90%, 100% { left: 100%; } +} + .leading { position: relative; flex: none; @@ -33,7 +48,7 @@ align-items: center; justify-content: center; margin-right: 6px; - color: inherit; + color: var(--dsw-alias-label-tertiary); } .leading svg { @@ -42,7 +57,7 @@ } .chevron { - color: inherit; + color: var(--dsw-alias-label-secondary); } .iconIdle { @@ -71,6 +86,7 @@ flex: none; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-secondary); } .separator { @@ -90,6 +106,7 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-tertiary); } .errorSummary { @@ -193,7 +210,11 @@ } @media (prefers-reduced-motion: reduce) { - .row, + .card[data-state='running'] .row::after { + animation: none; + display: none; + } + .iconIdle, .chevronHover, .inspectButton { diff --git a/packages/client/ui-skill/src/client/SkillRow.tsx b/packages/client/ui-skill/src/client/SkillRow.tsx index 1deb1b64b2..0800bc7812 100644 --- a/packages/client/ui-skill/src/client/SkillRow.tsx +++ b/packages/client/ui-skill/src/client/SkillRow.tsx @@ -1,6 +1,6 @@ import { useState, type KeyboardEvent, type ReactNode } from 'react' import { - IconChevronDownOutlineRegular, IconInspectOutlineRegular, IconSkillOutlineRegular, Shimmer, ShimmerText, + IconChevronDownOutlineRegular, IconInspectOutlineRegular, IconSkillOutlineRegular, } from '@deepseek-ai/dsh-client-ui-primitives' import type { StartedToolCallViewProps, ToolCallViewProps } from '@deepseek-ai/dsh-client-ui-tool/client' import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots' @@ -85,7 +85,7 @@ function disclosureLeading(open: boolean, expandable: boolean): ReactNode { ) } -/** Accessible running and failure status. */ +/** Visually hidden state copy for the color-only running sweep and error tone. */ function stateStatus(state: SkillRowState, t: SkillRowProps['t']): string | null { switch (state) { case 'running': return t('row.running') @@ -95,7 +95,7 @@ function stateStatus(state: SkillRowState, t: SkillRowProps['t']): string | null } /** - * Render one `skill` tool call as a process row and instructions disclosure. + * Render one `skill` tool call as an accent summary and instructions disclosure. * @param props - keyed toolview payload plus the skill locale seat. * @returns the dedicated skill row. */ @@ -104,9 +104,7 @@ export function SkillRow(props: SkillRowProps) {
{props.t('row.preparing')} - - {props.t('row.title')} - + {props.t('row.title')}
return @@ -118,7 +116,6 @@ function StartedSkillRow({ block, inspect, t }: Exclude { setExpanded(value => !value) @@ -143,18 +140,16 @@ function StartedSkillRow({ block, inspect, t }: Exclude - {status !== null ? {status} : null} {leading} - - {t('row.title')} - - - {summary} - - + {status !== null ? {status} : null} + {t('row.title')} + + + {summary} + {open ? (
diff --git a/packages/client/ui-skill/tests/skill-row.client.spec.tsx b/packages/client/ui-skill/tests/skill-row.client.spec.tsx index 34b143d0ef..a34b8ff4e9 100644 --- a/packages/client/ui-skill/tests/skill-row.client.spec.tsx +++ b/packages/client/ui-skill/tests/skill-row.client.spec.tsx @@ -110,7 +110,7 @@ describe('SkillRow', () => { }))} />) const row = screen.getByRole('button', { name: 'skill 加载失败加载技能SkillError: missing resource' }) expect(view.container.querySelector('[data-tool="skill"]')?.getAttribute('data-state')).toBe('error') - expect(view.container.querySelector('[data-tool="skill"] [role="button"] svg')).not.toBeNull() + expect(view.container.querySelector('[data-tool="skill"] > div > span:first-child svg')).not.toBeNull() expect(view.container.querySelector('[data-tool="skill"] [data-state]')).toBeNull() expect(row.textContent).not.toContain('Check SKILL.md.') fireEvent.click(row) @@ -124,8 +124,8 @@ describe('SkillRow', () => { error: { name: 'InterruptedError', code: 'interrupted' }, }))} />) const stoppedSummary = stoppedView.getByText('skill 加载已中止') - expect(stoppedSummary.parentElement?.className).toContain('stoppedSummary') - expect(stoppedView.container.querySelector('[data-tool="skill"] [role="button"] svg')).not.toBeNull() + expect(stoppedSummary.className).toContain('stoppedSummary') + expect(stoppedView.container.querySelector('[data-tool="skill"] > div > span:first-child svg')).not.toBeNull() expect(stoppedView.container.querySelector('[data-tool="skill"] [data-state]')).toBeNull() cleanup() diff --git a/packages/client/ui-theme/README.i18n.yaml b/packages/client/ui-theme/README.i18n.yaml index 6361eb4b7b..046b137c88 100644 --- a/packages/client/ui-theme/README.i18n.yaml +++ b/packages/client/ui-theme/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-theme/README.md -README.md: a2938f0c03d7f6b2c0202e67be1b66dff08516f3 -README.zh.md: d19649e26722f506c3142a095eb82b0a08235626 +README.md: 7248b7230afa28f817bec7c0eb26fd9512fff405 +README.zh.md: 6dc1db064dd9a6754f6c6475dde18ccf1a17841e diff --git a/packages/client/ui-theme/README.md b/packages/client/ui-theme/README.md index a2938f0c03..7248b7230a 100644 --- a/packages/client/ui-theme/README.md +++ b/packages/client/ui-theme/README.md @@ -9,7 +9,7 @@ English | [中文](README.zh.md) ## Summary -`dsh-client-ui-theme` lets Web GUI users choose `light`, `dark`, or `system` and set conversation content text from 12 to 24 px in Settings. A loopback client stores both values in the `ui-theme` settings namespace, which the local provider persists in `$DSH_HOME/cordis.patch.yml` by default. The plugin resolves `system` through `prefers-color-scheme` and publishes immutable `ThemeSnapshot`s; ui-layout applies each snapshot to the document. The package also ships the `--dsw-*` token stylesheets and injects a synchronous bootstrap so the selected palette and font size apply before the shell loads. Third-party themes can register alias-token overrides through `ctx.theme`. +`dsh-client-ui-theme` lets Web GUI users choose `light`, `dark`, or `system` and set conversation content text from 12 to 17 px in Settings. A loopback client stores both values in the `ui-theme` settings namespace, which the local provider persists in `$DSH_HOME/cordis.patch.yml` by default. The plugin resolves `system` through `prefers-color-scheme` and publishes immutable `ThemeSnapshot`s; ui-layout applies each snapshot to the document. The package also ships the `--dsw-*` token stylesheets and injects a synchronous bootstrap so the selected palette and font size apply before the shell loads. Third-party themes can register alias-token overrides through `ctx.theme`. ## Table of Contents @@ -29,7 +29,7 @@ Users switch the color scheme and content font size from two rows in Settings (G ### Appearance and font size -The plugin registers Appearance preference cubes and a font-size stepper in the General section. The stepper accepts integer values from 12 through 24 px and defaults to 14 px. It changes conversation headings and base text by the same increment, including the user bubble and composer draft; flow-row titles, summaries, and tables follow one step under the body size, while small text and code keep fixed sizes. Each accepted change writes through the Host settings API. Rapid changes serialize in gesture order with namespace revisions, and a rejected latest write reloads the durable values. Non-loopback pages keep both choices process-local. +The plugin registers Appearance preference cubes and a font-size stepper in the General section. The stepper accepts integer values from 12 through 17 px and defaults to 14 px. It changes conversation headings and base text by the same increment, including the user bubble and composer draft; flow-row titles, summaries, and tables follow one step under the body size, while small text and code keep fixed sizes. Each accepted change writes through the Host settings API. Rapid changes serialize in gesture order with namespace revisions, and a rejected latest write reloads the durable values. Non-loopback pages keep both choices process-local. ### Registering a theme @@ -51,9 +51,7 @@ The service owns theme and font-size state and publishes snapshots. The ui-layou ### Stylesheets -`src/styles/` holds six sheets imported in order by ui-theme's dynamic client entry: `base.css`, `corner-shape.css`, `design-platform.css`, `scrollbar.css`, `gradient-shadow-text.css`, and `shiki.css`. The client bundle compiles and injects them as plugin-owned global styles, so unload and HMR remove them with ui-theme. `scrollbar.css` consumes the `--dsw-alias-scrollbar-*` tokens and must follow `design-platform.css`, which declares them. Status marks use their own semantic state tokens. `design-platform.css` also owns the code-diff fill aliases and their static alpha palette entries, plus the `--dsw-alias-file-diff-*` code, gutter, and marker palette for file comparisons; `shiki.css` owns syntax colors. `--dsw-alias-label-shimmer` supplies an overlay for the shared text shimmer: black at 40% alpha in the light palette and white at 45% alpha in the dark palette. `--dsw-alias-label-deep-diving` and `--dsw-alias-label-deep-diving-shimmer` supply the blue activity label and sweep; the dark palette uses a lighter, less saturated label with a brighter blue sweep. - -The `--dsw-alias-turn-trigger-*` tokens provide separate resting and hover backgrounds for Turn-trigger notices in each palette. +`src/styles/` holds six sheets imported in order by ui-theme's dynamic client entry: `base.css`, `corner-shape.css`, `design-platform.css`, `scrollbar.css`, `gradient-shadow-text.css`, and `shiki.css`. The client bundle compiles and injects them as plugin-owned global styles, so unload and HMR remove them with ui-theme. `scrollbar.css` consumes the `--dsw-alias-scrollbar-*` tokens and must follow `design-platform.css`, which declares them. Status marks use their own semantic state tokens. `design-platform.css` also owns the code-diff fill aliases and their static alpha palette entries, plus the `--dsw-alias-file-diff-*` code, gutter, and marker palette for file comparisons; `shiki.css` owns syntax colors. `brand-font.css` exports the local Montserrat Light, Regular and Medium faces (normal style, weights 300, 400 and 500), with `montserrat-light.woff2`, `montserrat-regular.woff2`, `montserrat-medium.woff2` and its SIL Open Font License in `lib/styles/`. Desktop bundles the same stylesheet, font and license for offline welcome brand text; ordinary UI keeps its system font stack. diff --git a/packages/client/ui-theme/README.zh.md b/packages/client/ui-theme/README.zh.md index d19649e267..6dc1db064d 100644 --- a/packages/client/ui-theme/README.zh.md +++ b/packages/client/ui-theme/README.zh.md @@ -9,7 +9,7 @@ kind: "package-reference" ## 概述 -`dsh-client-ui-theme` 让 Web GUI 用户在设置中选择 `light`、`dark` 或 `system`,并把会话正文字号设为 12 至 24 px。回环客户端把两个值存入 `ui-theme` 设置命名空间,本地提供方默认将其持久化到 `$DSH_HOME/cordis.patch.yml`。插件通过 `prefers-color-scheme` 解析 `system` 并发布不可变的 `ThemeSnapshot`;ui-layout 把每份快照应用到文档。本包还提供 `--dsw-*` token 样式表,并注入同步引导,使所选调色板与字号在外壳加载前生效。第三方主题可通过 `ctx.theme` 注册别名 token 覆盖。 +`dsh-client-ui-theme` 让 Web GUI 用户在设置中选择 `light`、`dark` 或 `system`,并把会话正文字号设为 12 至 17 px。回环客户端把两个值存入 `ui-theme` 设置命名空间,本地提供方默认将其持久化到 `$DSH_HOME/cordis.patch.yml`。插件通过 `prefers-color-scheme` 解析 `system` 并发布不可变的 `ThemeSnapshot`;ui-layout 把每份快照应用到文档。本包还提供 `--dsw-*` token 样式表,并注入同步引导,使所选调色板与字号在外壳加载前生效。第三方主题可通过 `ctx.theme` 注册别名 token 覆盖。 ## 目录 @@ -29,7 +29,7 @@ kind: "package-reference" ### 外观与字号 -插件在「通用」分区注册外观偏好方块与字号步进器。步进器接受 12 至 24 px 的整数,默认值为 14 px。它以相同增量调整会话标题与基础文本,包括用户气泡与 composer 草稿;流内行的标题、摘要与表格跟随比正文低一档的字号,小号文本和代码保持固定字号。每次通过的变更都经 Host settings API 写入。连续快速变更按操作顺序携带命名空间 revision 串行写入,最新写入被拒时重新加载持久值。非 loopback 页面把两个选择都保留在进程内。 +插件在「通用」分区注册外观偏好方块与字号步进器。步进器接受 12 至 17 px 的整数,默认值为 14 px。它以相同增量调整会话标题与基础文本,包括用户气泡与 composer 草稿;流内行的标题、摘要与表格跟随比正文低一档的字号,小号文本和代码保持固定字号。每次通过的变更都经 Host settings API 写入。连续快速变更按操作顺序携带命名空间 revision 串行写入,最新写入被拒时重新加载持久值。非 loopback 页面把两个选择都保留在进程内。 ### 注册主题 @@ -51,9 +51,7 @@ kind: "package-reference" ### 样式表 -`src/styles/` 下有六张样式表,由 ui-theme 的动态客户端 entry 依次导入:`base.css`、`corner-shape.css`、`design-platform.css`、`scrollbar.css`、`gradient-shadow-text.css` 与 `shiki.css`。客户端 bundle 将其编译并注入为插件持有的全局样式,因此卸载与 HMR(热模块替换)会随 ui-theme 一同移除。`scrollbar.css` 消费 `--dsw-alias-scrollbar-*` token,必须排在声明这些 token 的 `design-platform.css` 之后。状态标记使用各自的语义状态 token。`design-platform.css` 还负责代码差异底色的别名及其静态透明度色阶,以及文件对比所用的 `--dsw-alias-file-diff-*` 代码区、行号区和标记配色;`shiki.css` 负责语法颜色。`--dsw-alias-label-shimmer` 为共享文字扫光提供叠加色:浅色配色使用 40% alpha 的黑色,深色配色使用 45% alpha 的白色。 `--dsw-alias-label-deep-diving` 和 `--dsw-alias-label-deep-diving-shimmer` 提供蓝色活动文本和扫光颜色;深色主题使用更亮、饱和度更低的文字,并以更亮的蓝色扫光。 - -`--dsw-alias-turn-trigger-*` token 分别定义深浅主题下轮次触发通知的常态和悬停底色。 +`src/styles/` 下有六张样式表,由 ui-theme 的动态客户端 entry 依次导入:`base.css`、`corner-shape.css`、`design-platform.css`、`scrollbar.css`、`gradient-shadow-text.css` 与 `shiki.css`。客户端 bundle 将其编译并注入为插件持有的全局样式,因此卸载与 HMR(热模块替换)会随 ui-theme 一同移除。`scrollbar.css` 消费 `--dsw-alias-scrollbar-*` token,必须排在声明这些 token 的 `design-platform.css` 之后。状态标记使用各自的语义状态 token。`design-platform.css` 还负责代码差异底色的别名及其静态透明度色阶,以及文件对比所用的 `--dsw-alias-file-diff-*` 代码区、行号区和标记配色;`shiki.css` 负责语法颜色。 `brand-font.css` 导出本地 Montserrat Light、Regular 和 Medium 字体(正体、字重 300、400 和 500),`lib/styles/` 同时提供 `montserrat-light.woff2`、`montserrat-regular.woff2`、`montserrat-medium.woff2` 及其 SIL Open Font License。Desktop 将同一份样式表、字体和许可证打包,用于欢迎页品牌文字的离线显示;普通界面保留系统字体栈。 diff --git a/packages/client/ui-theme/src/styles/design-platform.css b/packages/client/ui-theme/src/styles/design-platform.css index a6510f2951..8f447398fc 100644 --- a/packages/client/ui-theme/src/styles/design-platform.css +++ b/packages/client/ui-theme/src/styles/design-platform.css @@ -211,8 +211,6 @@ body { --dsw-alias-interactive-bg-hover-solid: var(--dsw-static-neutral-bluish-75); --dsw-alias-interactive-bg-hover: rgba(38, 49, 72, 0.06); --dsw-alias-label-caption: var(--dsw-static-neutral-bluish-400); - --dsw-alias-label-deep-diving: color-mix(in srgb, var(--dsw-static-deepseek-500) 70%, var(--dsw-static-blue-950)); - --dsw-alias-label-deep-diving-shimmer: color-mix(in srgb, var(--dsw-static-deepseek-500) 35%, var(--dsw-static-blue-950)); --dsw-alias-label-dimmed: var(--dsw-static-neutral-bluish-200); --dsw-alias-label-primary-bluish: var(--dsw-static-blue-900); --dsw-alias-label-primary-dimmed: var(--dsw-static-neutral-bluish-950); @@ -220,7 +218,6 @@ body { --dsw-alias-label-primary-inverted: var(--dsw-static-neutral-bluish-00); --dsw-alias-label-primary: var(--dsw-static-neutral-bluish-1000); --dsw-alias-label-secondary: var(--dsw-static-neutral-bluish-700); - --dsw-alias-label-shimmer: color-mix(in srgb, var(--dsw-static-neutral-1000) 40%, transparent); --dsw-alias-label-tertiary: var(--dsw-static-neutral-bluish-600); --dsw-alias-link: var(--dsw-static-deepseek-500); --dsw-alias-markdown-citation: var(--dsw-static-neutral-bluish-100); @@ -257,8 +254,6 @@ body { --dsw-alias-state-warn-tertiary: var(--dsw-static-amber-100); --dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-800); --dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-850); - --dsw-alias-turn-trigger-bg: var(--dsw-alias-markdown-code-block); - --dsw-alias-turn-trigger-bg-hover: var(--dsw-alias-interactive-bg-hover); --dsw-specific-bubble-highlight: var(--dsw-static-deepseek-200); --dsw-specific-bubble: var(--dsw-static-deepseek-50); --dsw-specific-input-major: var(--dsw-static-neutral-bluish-00); @@ -322,8 +317,6 @@ body[data-ds-dark-theme] { --dsw-alias-interactive-bg-hover-solid: var(--dsw-static-neutral-bluish-800); --dsw-alias-interactive-bg-hover: rgba(255, 255, 255, 0.08); --dsw-alias-label-caption: var(--dsw-static-neutral-bluish-600); - --dsw-alias-label-deep-diving: color-mix(in srgb, var(--dsw-static-deepseek-450) 55%, var(--dsw-static-neutral-bluish-400)); - --dsw-alias-label-deep-diving-shimmer: color-mix(in srgb, var(--dsw-static-blue-300) 65%, var(--dsw-static-deepseek-400)); --dsw-alias-label-dimmed: var(--dsw-static-neutral-bluish-750); --dsw-alias-label-primary-bluish: var(--dsw-static-neutral-bluish-50); --dsw-alias-label-primary-dimmed: var(--dsw-static-neutral-bluish-100); @@ -331,7 +324,6 @@ body[data-ds-dark-theme] { --dsw-alias-label-primary-inverted: var(--dsw-static-neutral-bluish-800); --dsw-alias-label-primary: var(--dsw-static-neutral-bluish-50); --dsw-alias-label-secondary: var(--dsw-static-neutral-bluish-300); - --dsw-alias-label-shimmer: color-mix(in srgb, var(--dsw-static-neutral-00) 45%, transparent); --dsw-alias-label-tertiary: var(--dsw-static-neutral-bluish-400); --dsw-alias-link: var(--dsw-static-deepseek-400); --dsw-alias-markdown-citation: var(--dsw-static-neutral-bluish-800); @@ -367,8 +359,6 @@ body[data-ds-dark-theme] { --dsw-alias-state-warn-secondary: var(--dsw-static-amber-400); --dsw-alias-state-warn-tertiary: var(--dsw-static-amber-900); --dsw-alias-toast-bg: var(--dsw-static-neutral-bluish-750); - --dsw-alias-turn-trigger-bg: var(--dsw-alias-interactive-bg-hover); - --dsw-alias-turn-trigger-bg-hover: var(--dsw-alias-interactive-bg-active); --dsw-alias-tooltip-bg: var(--dsw-static-neutral-bluish-750); --dsw-specific-bubble-highlight: var(--dsw-static-neutral-bluish-750); --dsw-specific-bubble: var(--dsw-static-neutral-bluish-850); diff --git a/packages/client/ui-theme/src/styles/gradient-shadow-text.css b/packages/client/ui-theme/src/styles/gradient-shadow-text.css index ae57254ad6..b6dc4db464 100644 --- a/packages/client/ui-theme/src/styles/gradient-shadow-text.css +++ b/packages/client/ui-theme/src/styles/gradient-shadow-text.css @@ -45,11 +45,11 @@ body[data-ds-dark-theme] { /* Markdown 阶梯整体按 0.875(正文 16 → 14)等比缩放,四舍五入到整数像素; 重新从 Figma 导出时需要保留这一缩放。 */ /* 正文字号调节:--dsh-content-font-size 由主题 bootstrap 与 ThemePresenter - 写在 body 上(整数 px,12–24,默认 14)。标题与正文变体按同一像素增量 + 写在 body 上(整数 px,12–17,默认 14)。标题与正文变体按同一像素增量 (--dsh-content-font-delta)随动,保持层级。低一档文本(think、工具/bash 行的标题与摘要、markdown 表格、流内次级说明等)统一读 --dsh-content-font-size-secondary:设置 ≤14 时为设置值 −1,>14 时为 - 设置值 −2(12→11、13→12、14→13、15→13、16→14、17→15、24→22)。式中 + 设置值 −2(12→11、13→12、14→13、15→13、16→14、17→15)。式中 max(13px,·) 的作用是让低设置取 −1 而非 −2,不是结果下限——12 设置下 层级触底 11px。small、code 属于密集次级文本,保持固定。 */ body { diff --git a/packages/client/ui-theme/src/theme-settings.ts b/packages/client/ui-theme/src/theme-settings.ts index a9202ffa1b..11f8789d6c 100644 --- a/packages/client/ui-theme/src/theme-settings.ts +++ b/packages/client/ui-theme/src/theme-settings.ts @@ -24,7 +24,7 @@ export const DEFAULT_PREFERENCE: ThemePreference = 'system' export const FONT_SIZE_MIN = 12 /** Largest accepted content font size (px). */ -export const FONT_SIZE_MAX = 24 +export const FONT_SIZE_MAX = 17 /** Content font size when the user-settings document has no override (px). */ export const DEFAULT_FONT_SIZE = 14 diff --git a/packages/client/ui-theme/tests/boot-theme.client.spec.ts b/packages/client/ui-theme/tests/boot-theme.client.spec.ts index 574a54dd13..6a0141ea87 100644 --- a/packages/client/ui-theme/tests/boot-theme.client.spec.ts +++ b/packages/client/ui-theme/tests/boot-theme.client.spec.ts @@ -77,8 +77,8 @@ describe('theme bootstrap row', () => { it('writes the durable content font size and defaults it to 14px', () => { mockSystemDark(false) - executeBootstrap('light', 24) - expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('24px') + executeBootstrap('light', 17) + expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('17px') executeBootstrap('light') expect(document.body.style.getPropertyValue('--dsh-content-font-size')).toBe('14px') }) diff --git a/packages/client/ui-theme/tests/config.host.spec.ts b/packages/client/ui-theme/tests/config.host.spec.ts index 8123a71b31..a3309b9887 100644 --- a/packages/client/ui-theme/tests/config.host.spec.ts +++ b/packages/client/ui-theme/tests/config.host.spec.ts @@ -28,11 +28,11 @@ describe('ui-theme host', () => { const configuration = await liveConfig(ctx, { Config, apply }) const { fiber } = configuration expect(plainConfig(configuration.fiber.config)).toEqual({ preference: DEFAULT_PREFERENCE, fontSize: 14 }) - await configuration.update({ preference: 'dark', fontSize: 24 }) - expect(plainConfig(configuration.fiber.config)).toEqual({ preference: 'dark', fontSize: 24 }) + await configuration.update({ preference: 'dark', fontSize: 16 }) + expect(plainConfig(configuration.fiber.config)).toEqual({ preference: 'dark', fontSize: 16 }) await expect(configuration.update({ preference: 'sepia' })).rejects.toThrow() await expect(configuration.update({ fontSize: 11 })).rejects.toThrow() - await expect(configuration.update({ fontSize: 25 })).rejects.toThrow() + await expect(configuration.update({ fontSize: 18 })).rejects.toThrow() await fiber.dispose() }) @@ -51,10 +51,10 @@ describe('ui-theme host', () => { expect(rowText(rows[0])).toContain('@media(prefers-color-scheme:dark)') expect(rowText(rows[1])).toContain('const preference = "system"') expect(rowText(rows[1])).toContain('"14px"') - await configuration.update({ preference: 'dark', fontSize: 24 }) + await configuration.update({ preference: 'dark', fontSize: 17 }) expect(rowText(collect(ctx)[0])).toContain('color-scheme:dark') expect(rowText(collect(ctx)[1])).toContain('const preference = "dark"') - expect(rowText(collect(ctx)[1])).toContain('"24px"') + expect(rowText(collect(ctx)[1])).toContain('"17px"') await fiber.dispose() expect(collect(ctx)).toEqual([{ kind: 'script', placement: 'head', text: 'window.afterTheme=true' }]) }) diff --git a/packages/client/ui-theme/tests/font-size-row.client.spec.tsx b/packages/client/ui-theme/tests/font-size-row.client.spec.tsx index bc8f33062e..f75138b44a 100644 --- a/packages/client/ui-theme/tests/font-size-row.client.spec.tsx +++ b/packages/client/ui-theme/tests/font-size-row.client.spec.tsx @@ -87,11 +87,7 @@ describe('FontSizeRow', () => { }) it('disables the outward arrow at each bound', () => { - const b = mount(23) - fireEvent.click(arrow('Increase font size')) - expect(b.setFontSize).toHaveBeenCalledWith(24) - act(() => { b.store.actions.sync(24, 1) }) - expect(screen.getByText('24')).toBeDefined() + mount(17) expect(arrow('Increase font size').disabled).toBe(true) expect(arrow('Decrease font size').disabled).toBe(false) cleanup() diff --git a/packages/client/ui-theme/tests/theme.client.spec.ts b/packages/client/ui-theme/tests/theme.client.spec.ts index d00b1d5b66..a50ed3e7e2 100644 --- a/packages/client/ui-theme/tests/theme.client.spec.ts +++ b/packages/client/ui-theme/tests/theme.client.spec.ts @@ -36,10 +36,10 @@ describe('ThemeRuntime', () => { it('seeds the initial font size from the boot-script body variable, ignoring junk', () => { // The Host boot script writes the durable size on body before any plugin // runs; the first snapshot must match it so activation never flashes 14. - document.body.style.setProperty('--dsh-content-font-size', '24px') + document.body.style.setProperty('--dsh-content-font-size', '16px') try { - expect(make().theme.getTheme().fontSize).toBe(24) - document.body.style.setProperty('--dsh-content-font-size', '25px') + expect(make().theme.getTheme().fontSize).toBe(16) + document.body.style.setProperty('--dsh-content-font-size', '99px') expect(make().theme.getTheme().fontSize).toBe(14) } finally { document.body.style.removeProperty('--dsh-content-font-size') @@ -48,19 +48,19 @@ describe('ThemeRuntime', () => { it('setFontSize switches, writes through the scope, and republishes; same value is a no-op', () => { const { theme, events, host } = make() - theme.setFontSize(24) - expect(theme.getTheme().fontSize).toBe(24) - expect(host.set).toHaveBeenCalledWith('fontSize', 24) + theme.setFontSize(17) + expect(theme.getTheme().fontSize).toBe(17) + expect(host.set).toHaveBeenCalledWith('fontSize', 17) expect(events).toHaveLength(1) - theme.setFontSize(24) + theme.setFontSize(17) expect(events).toHaveLength(1) expect(host.set).toHaveBeenCalledOnce() }) it('rejects out-of-range and fractional font sizes', () => { const { theme, events, host } = make() - for (const px of [11, 25, 14.5, Number.NaN]) { - expect(() => { theme.setFontSize(px) }).toThrow('outside 12..24') + for (const px of [11, 18, 14.5, Number.NaN]) { + expect(() => { theme.setFontSize(px) }).toThrow('outside 12..17') } expect(events).toHaveLength(0) expect(host.set).not.toHaveBeenCalled() diff --git a/packages/client/ui-tool/README.i18n.yaml b/packages/client/ui-tool/README.i18n.yaml index 358fa4458f..af3b5ca741 100644 --- a/packages/client/ui-tool/README.i18n.yaml +++ b/packages/client/ui-tool/README.i18n.yaml @@ -2,5 +2,5 @@ # 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 packages/client/ui-tool/README.md -README.md: 1fcfa9ffda84b5e0bf76a46accbe486cfb9e9d04 -README.zh.md: 2806fa47ae4d8e48215bce9ca178984839633421 +README.md: a00ed8e8c78dce29144a3ff89d2eb671b5f209fb +README.zh.md: c4a6f6183be082d8c21877b0c1c7052652bc7e2e diff --git a/packages/client/ui-tool/README.md b/packages/client/ui-tool/README.md index 1fcfa9ffda..a00ed8e8c7 100644 --- a/packages/client/ui-tool/README.md +++ b/packages/client/ui-tool/README.md @@ -49,7 +49,7 @@ The owner payload is `ToolCallOwnerProps`: `callId`, `toolName`, the `phase` dis Every registered view receives the explicit `preparing`, `start`, and `result` props declared in [the Tool slot types](src/client/contract/slots.ts). Shared rows use the same `ToolRow` in all stages. Their row model selects the title and combines any generic tool-name prefix with the available argument summary independently of lifecycle state. Tool-owned titles omit the English name. Preparation has no argument summary, and the shared argument parser returns no call without parsing JSON. Custom renderers such as Bash, Skill, and Cordis handle preparation separately; their argument-dependent components accept `StartedToolCallViewProps`. -This package owns the generic fallback and the built-in shell/pwsh, read, read_image, write/edit, running `str_replace_editor` `create`/`str_replace`, grep/glob, web, todo, question, and PTC dispatch presentations. Structured cards derive directly from first-party raw event fields; Host `presentCall` and `presentResult` values never enter the Client. Tool headers follow the shared [process-row colors](../ui-primitives/README.md#component-catalog) for names, summaries, file paths, ordinary counts, glyphs, and chevrons in every Work details mode, whether details are collapsed, expanded, or unavailable; error and warning summaries keep their semantic colors on hover. Running atomic rows share one left-to-right shimmer across their titles, separators, summaries, and suffixes, while settled rows stay static. Running and settled foreground standard `bash`/`pwsh` and `terminal_send` calls use terminal cards at the root and in PTC dispatch children, subject to the same argument, result, and error checks. Persistent `bash`/`pwsh` calls use terminal cards only while running. Shell output ending in a recognized spill-policy notice uses expandable generic output in shell rows and generic output in Details; a displaced or omitted exit marker cannot establish success. Settled persistent-shell results stay generic because reset and partial-output diagnostics do not always describe one process exit status; root persistent results are expandable, while background acknowledgements remain collapsed. A native or PTC dispatch failure carrying `AUTO_REVIEW_DENIED` shows the Auto review verdict in its collapsed row and one normalized not-executed reason when expanded; a missing or whitespace-only reason uses localized fallback text. A successful question row pairs call questions with result answers by their stable ids and shows readable question/answer lines when expanded. A cancelled or interrupted row shows its verdict and original questions without inventing answers. Unsupported, malformed, or ambiguous inputs fall back to flattened Tool input/result text. `ui-skill` demonstrates a business-owned registration for `skill`. +This package owns the generic fallback and the built-in shell/pwsh, read, read_image, write/edit, running `str_replace_editor` `create`/`str_replace`, grep/glob, web, todo, question, and PTC dispatch presentations. Structured cards derive directly from first-party raw event fields; Host `presentCall` and `presentResult` values never enter the Client. Running and settled foreground standard `bash`/`pwsh` and `terminal_send` calls use terminal cards at the root and in PTC dispatch children, subject to the same argument, result, and error checks. Persistent `bash`/`pwsh` calls use terminal cards only while running. Shell output ending in a recognized spill-policy notice uses expandable generic output in shell rows and generic output in Details; a displaced or omitted exit marker cannot establish success. Settled persistent-shell results stay generic because reset and partial-output diagnostics do not always describe one process exit status; root persistent results are expandable, while background acknowledgements remain collapsed. A native or PTC dispatch failure carrying `AUTO_REVIEW_DENIED` shows the Auto review verdict in its collapsed row and one normalized not-executed reason when expanded; a missing or whitespace-only reason uses localized fallback text. A successful question row pairs call questions with result answers by their stable ids and shows readable question/answer lines when expanded. A cancelled or interrupted row shows its verdict and original questions without inventing answers. Unsupported, malformed, or ambiguous inputs fall back to flattened Tool input/result text. `ui-skill` demonstrates a business-owned registration for `skill`. ----- @@ -72,7 +72,7 @@ Tool owner props forward Chat's stable `useDisclosure` Hook through root and nes Every card is read in place in the call tree; there is no second, full-height presentation of a selected call. Row renderers share one pure card model for each terminal, read, diff, search, and web card, and the image card's gallery renders through the tool-owned `tool.call.images` slot. These models validate raw call arguments, result content, failure state, persisted metadata, PTC dispatch `parentCallId`, and Session path facts. Unsupported or malformed inputs use flattened Tool result text. A file-path summary opens the file through the owner's `openFile`, which the chat view routes to the right Sidebar's text preview; `inspect` opens the trajectory view and is absent when that View is unavailable; cards then omit Inspect. Card-specific limits and fallback rules for the terminal, diff, read, search, and web cards remain in [the ui-primitives README](../ui-primitives/README.md); the image card's model in this package carries its own fallback rules. -Chat diff cards keep nine rows before folding, enough for a file header, one removed/added pair, and three context lines on either side. The tool row shows the primitive's exact or coarse-replacement counts; the expanded card contains the diff body without a totals footer. Hovering the tool header colors its added count green and removed count red; both retain those colors while the card is expanded. +Chat diff cards keep nine rows before folding, enough for a file header, one removed/added pair, and three context lines on either side. The tool row shows the primitive's exact or coarse-replacement counts; the expanded card contains the diff body without a totals footer. An Auto denial takes precedence over keyed specialized views. Its generic row preserves the call identity, omits raw arguments, and normalizes the stored reason only for display: trim surrounding whitespace and collapse line separators to spaces, with localized fallback for an empty result. Session and SDK error details keep the original reason. diff --git a/packages/client/ui-tool/README.zh.md b/packages/client/ui-tool/README.zh.md index 2806fa47ae..c4a6f6183b 100644 --- a/packages/client/ui-tool/README.zh.md +++ b/packages/client/ui-tool/README.zh.md @@ -49,7 +49,7 @@ owner 载荷为 `ToolCallOwnerProps`:`callId`、`toolName`、`phase` 判别字 每个注册视图都接收[工具 slot 类型](src/client/contract/slots.ts)声明的显式 `preparing`、`start` 和 `result` props。通用行在三个阶段使用同一个 `ToolRow`。行模型统一选择标题,并组合通用工具名前缀与已有参数摘要,不按生命周期阶段改变前缀;专用标题不附带英文名。准备阶段没有参数摘要,共享参数解析入口直接返回无调用,不解析 JSON。Bash、Skill、Cordis 等自定义 renderer 分别处理准备态,其依赖参数的组件接收 `StartedToolCallViewProps`。 -本包拥有 generic fallback,以及 shell/pwsh、read、read_image、write/edit、运行中的 `str_replace_editor` `create`/`str_replace`、grep/glob、web、todo、question 与 PTC dispatch 的内置展示。结构化卡片直接从第一方原始事件字段派生;Host `presentCall` 与 `presentResult` 值不会进入 Client。工具标题行的名称、摘要、文件路径、普通数量、图标与箭头在所有工作过程展示模式下均遵循共享的[过程行颜色](../ui-primitives/README.zh.md#component-catalog),无论详情是收起、展开还是不可展开;错误和警告摘要在悬停时保留语义色。运行中的原子工具行以同一道高光从左到右扫过标题、分隔符、摘要与后缀;已完成行保持静态。运行中与已完成的前台标准 `bash`/`pwsh` 和 `terminal_send` 调用,无论位于根还是 PTC dispatch 子调用中,都在通过相同的参数、结果和错误检查后使用 terminal 卡片。持久 `bash`/`pwsh` 调用仅在运行中使用 terminal 卡片。以已识别的 spill 策略提示结尾的 shell 输出,在 shell 行中使用可展开的 generic 输出,在 Details 中使用 generic 输出;位置被改变或被省略的退出标记无法证明成功。已完成的持久 shell 结果保持 generic 展示,因为 reset 与部分输出诊断不一定描述单个进程的退出状态;根调用的持久 shell 结果可展开,后台启动回执则保持折叠。带有 `AUTO_REVIEW_DENIED` 的原生或 PTC dispatch 失败会在折叠行显示 Auto review 裁决,展开时显示一行归一化后的“未执行”原因;原因缺失或只有空白时使用本地化 fallback 文案。成功的问题行按稳定 id 配对调用中的问题与结果中的回答,展开后显示可读的问答行。已取消或已中断的问题行显示其裁决与原始问题,不虚构回答。不受支持、格式错误或含糊的输入回退为压平的工具输入/结果文本。`ui-skill` 展示了业务包自行拥有的 `skill` 注册项。 +本包拥有 generic fallback,以及 shell/pwsh、read、read_image、write/edit、运行中的 `str_replace_editor` `create`/`str_replace`、grep/glob、web、todo、question 与 PTC dispatch 的内置展示。结构化卡片直接从第一方原始 event 字段派生;Host `presentCall` 与 `presentResult` 值不会进入 Client。运行中与已完成的前台标准 `bash`/`pwsh` 和 `terminal_send` 调用,无论位于根还是 PTC dispatch 子调用中,都在通过相同的参数、结果和错误检查后使用 terminal 卡片。持久 `bash`/`pwsh` 调用仅在运行中使用 terminal 卡片。以已识别的 spill 策略提示结尾的 shell 输出,在 shell 行中使用可展开的 generic 输出,在 Details 中使用 generic 输出;位置被改变或被省略的退出标记无法证明成功。已完成的持久 shell 结果保持 generic 展示,因为 reset 与部分输出诊断不一定描述单个进程的退出状态;根调用的持久 shell 结果可展开,后台启动回执则保持折叠。带有 `AUTO_REVIEW_DENIED` 的原生或 PTC dispatch 失败会在折叠行显示 Auto review 裁决,展开时显示一行归一化后的“未执行”原因;原因缺失或只有空白时使用本地化 fallback 文案。成功的问题行按稳定 id 配对调用中的问题与结果中的回答,展开后显示可读的问答行。已取消或已中断的问题行显示其裁决与原始问题,不虚构回答。不受支持、格式错误或含糊的输入回退为压平的工具输入/结果文本。`ui-skill` 展示了业务包自行拥有的 `skill` 注册项。 ----- @@ -72,7 +72,7 @@ Tool 所有者属性将 Chat 注入的稳定 `useDisclosure` 钩子传给根调 每张卡片都直接在调用树中查看;选中调用后不会再显示第二个全高视图。行 renderer 为 terminal、read、diff、search 和 web 卡片各复用同一个纯 card model,image 卡片的图库经由工具自有 `tool.call.images` slot 渲染。这些 model 校验原始调用参数、结果内容、失败状态、持久 metadata、PTC dispatch 的 `parentCallId` 与会话路径信息。不受支持或格式错误的输入使用压平的工具结果文本。文件路径摘要经属主的 `openFile` 打开文件,chat 视图把它路由到右侧 Sidebar 的文本预览;`inspect` 打开轨迹视图;该视图不可用时不提供此回调,卡片随之隐藏 Inspect。terminal、diff、read、search 与 web 卡片的上限与 fallback 规则仍由 [ui-primitives README](../ui-primitives/README.zh.md) 负责;image 卡片的 fallback 规则由本包内的 card model 自行承载。 -Chat diff 卡片在折叠前保留九行,足以容纳文件标题、一对删除与新增行及两侧各三行上下文。工具行显示原语提供的精确或粗粒度替换统计;展开卡片包含差异正文,不显示底部统计。悬停工具标题行时,新增数量显示绿色、删除数量显示红色;卡片展开期间保留这两种颜色。 +Chat diff 卡片在折叠前保留九行,足以容纳文件标题、一对删除与新增行及两侧各三行上下文。工具行显示原语提供的精确或粗粒度替换统计;展开卡片包含差异正文,不显示底部统计。 Auto 拒绝优先于按工具名选择的专门视图。其通用行保留调用身份、省略原始参数,并且只在显示时归一化存储的理由:去除首尾空白,把行分隔符折叠为空格,结果为空时使用本地化通用理由。Session 与 SDK 错误详情保留原始理由。 diff --git a/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css b/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css index a33507500d..5e54eeb7e5 100644 --- a/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css +++ b/packages/client/ui-tool/src/client/tool/components/ToolRow.module.css @@ -15,12 +15,28 @@ flex-shrink: 0; } +/* Cordis lifecycle tools retain their generic row mechanics while carrying a + shared product accent and tool-owned action title. */ +.root[data-tool^='cordis_'] .leading, +.root[data-tool^='cordis_'] .title { + color: var(--dsw-alias-state-business-primary); +} + .root[data-tool^='cordis_'] .title { font-weight: 500; } +.root[data-tool^='cordis_'] .sep { + background: var(--dsw-alias-state-business-primary); +} + +.chevron { + color: var(--dsw-alias-label-secondary); +} + .title { font-weight: 400; + transition: color 100ms ease; } .sep { @@ -40,6 +56,8 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-tertiary); + transition: color 100ms ease; } /* Trailing summary fragment kept out of .summary's ellipsis, for a count whose @@ -53,29 +71,31 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-tertiary); + transition: color 100ms ease; +} + +.row:hover .title, +.row:hover .summary:not(.errorSummary):not(.stoppedSummary), +.row:hover .summarySuffix { + color: var(--dsw-alias-label-primary); } /* Diff-row +/- totals: the code font, matching the diff body the numbers summarize; a wider gap keeps the digits from reading as part of the path. Two px under the secondary tier (still riding the axis): mono digits read - optically larger than the sans path at the same size. The + optically larger than the sans path at the same size. Caption, one step + dimmer than the suffix's tertiary, so the digits stay behind the path. The half-pixel nudge closes the baseline gap the size difference leaves under the row's box-centering (a transform, so flex layout is untouched). */ .diffStat { margin-left: 10px; font-family: var(--ds-font-family-code); font-size: calc(var(--dsh-content-font-size-secondary, 13px) - 2px); + color: var(--dsw-alias-label-caption); transform: translateY(0.5px); } -.row:is(:hover, [aria-expanded='true']) .diffAdded { - color: var(--dsw-alias-state-success-primary); -} - -.row:is(:hover, [aria-expanded='true']) .diffRemoved { - color: var(--dsw-alias-state-error-primary); -} - /* File-tool path: same type as .summary, with a persistent link affordance. Dotted dimmed underline: visible enough to say "clickable", light enough that a long path doesn't read as one heavy rule under the row. Shrink-to-fit @@ -95,12 +115,19 @@ text-align: left; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); - color: inherit; + color: var(--dsw-alias-label-secondary); text-decoration: underline dotted; - text-decoration-color: currentColor; + text-decoration-color: var(--dsw-alias-label-tertiary); text-decoration-thickness: 1px; text-underline-offset: 3px; cursor: pointer; + transition: color 100ms ease; +} + +.row:hover .fileLink, +.fileLink:hover { + color: var(--dsw-alias-label-primary); + text-decoration-color: currentColor; } /* Error row's collapsed summary: the failure's first line in the error color. */ diff --git a/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx b/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx index 8855a32105..618344b4c7 100644 --- a/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx +++ b/packages/client/ui-tool/src/client/tool/components/ToolRow.tsx @@ -2,7 +2,7 @@ import { memo, useCallback, useMemo, type KeyboardEvent, type MouseEvent, type R import clsx from 'clsx' import { CodeBlock, DiffBlock, DisclosureRow, IconInspectOutlineRegular, ReadBlock, SearchBlock, - TerminalBlock, ShimmerText, WebBlock, + TerminalBlock, TextShimmer, WebBlock, diffTotals, } from '@deepseek-ai/dsh-client-ui-primitives' import type { PropsRenderSlots, TranslateNS } from '@deepseek-ai/dsh-client-ui-slots' @@ -55,7 +55,6 @@ export interface ToolRowProps { errorSummary?: string | null | undefined /** Terminal card; card fields are mutually exclusive and replace text sections. */ terminal?: TerminalCardModel | null | undefined - /** Diff card with inline totals colored on header hover and while expanded. */ diff?: DiffCardModel | null | undefined read?: ReadCardModel | null | undefined /** @@ -176,7 +175,11 @@ export const ToolRow = memo(function ToolRow({ const summaryText = failureLine ?? normalSummary // The tool row keeps the diff's +/- totals visible while its body is collapsed. // An explicit summarySuffix overrides the diff totals. - const diffStat = useMemo(() => diffBody === null ? null : diffTotals(diffBody.card.diffs), [diffBody]) + const diffStat = useMemo(() => { + if (diffBody === null) return null + const { added, removed } = diffTotals(diffBody.card.diffs) + return `+${added} -${removed}` + }, [diffBody]) const settledWithCue = state === 'error' || state === 'stopped' const suffix = settledWithCue ? null : summarySuffix ?? diffStat const openFile = useMemo(() => filePath !== undefined && onOpenFile !== undefined && !settledWithCue @@ -200,7 +203,7 @@ export const ToolRow = memo(function ToolRow({ /* An empty summary drops the separator with it (a row that is only its title shows no trailing dot). */ <> - + {openFile !== undefined ? ( ) : ( - {summaryText} + {summaryText} )} - {suffix !== null && (typeof suffix === 'string' - ? {suffix} - : ( - - {`+${suffix.added}`} - {' '} - {`-${suffix.removed}`} - - ))} + {suffix !== null && ( + {suffix} + )} - ), [fileLinkKeyDown, openFile, state, suffix, summaryText]) + ), [diffStat, fileLinkKeyDown, openFile, running, state, suffix, summaryText]) const expandedContent = useMemo(() => open ? (
{askQuestionBody !== null @@ -343,6 +340,7 @@ export const ToolRow = memo(function ToolRow({ rowClassName={css.row} leadingClassName={css.leading} titleClassName={css.title} + chevronClassName={css.chevron} icon={icon} title={title} running={running} diff --git a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css index 007219766c..9ef5b4b829 100644 --- a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css +++ b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.module.css @@ -89,18 +89,6 @@ align-items: center; height: calc(24px + var(--dsh-content-font-delta, 0px)); min-width: 0; - color: var(--dsw-alias-label-tertiary); - transition: color 100ms ease; -} - -.root:hover { - color: var(--dsw-alias-label-secondary); -} - -@media (prefers-reduced-motion: reduce) { - .root { - transition: none; - } } .leading { @@ -112,7 +100,7 @@ align-items: center; justify-content: center; margin-right: 6px; - color: inherit; + color: var(--dsw-alias-label-tertiary); } /* Same glyph-scaling rule as DisclosureRow's leading: the CSS edge overrides @@ -127,7 +115,7 @@ } .chevron { - color: inherit; + color: var(--dsw-alias-label-secondary); } /* Hover preview on the expandable row: the idle icon crossfades (100ms) into @@ -158,6 +146,8 @@ flex: none; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-secondary); + transition: color 100ms ease; } .sep { @@ -177,6 +167,13 @@ white-space: nowrap; font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); + color: var(--dsw-alias-label-tertiary); + transition: color 100ms ease; +} + +.root:hover .title, +.root:hover .summary:not(.errorSummary):not(.stoppedSummary) { + color: var(--dsw-alias-label-primary); } /* Error row's collapsed summary: the failure's first line in the error color. */ diff --git a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx index 68e18b8aee..47ae2d1b6d 100644 --- a/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx +++ b/packages/client/ui-tool/src/client/tool/toolviews/bash-sample.tsx @@ -3,7 +3,7 @@ import type { Context } from '@deepseek-ai/cordis' import clsx from 'clsx' import { IconApiOutlineRegular, IconChevronDownOutlineRegular, IconChevronUpOutlineRegular, IconInspectOutlineRegular, - TerminalBlock, Shimmer, ShimmerText, + TerminalBlock, TextShimmer, } from '@deepseek-ai/dsh-client-ui-primitives' import type { PropsLocale } from '@deepseek-ai/dsh-client-ui-slots' import type { ToolCallViewProps } from '../../contract/slots.ts' @@ -107,19 +107,17 @@ const StartedBashRow = memo(function StartedBashRow({ toolName, block, sessionId onClick={expandable ? toggleExpand : undefined} onKeyDown={expandable ? toggleFromKeyboard : undefined} > - {status !== null && {status}} {leading} - - {t(model.titleKey)} - - - {settlementLine ?? normalSummary} - - + {status !== null && {status}} + {t(model.titleKey)} + + + {settlementLine ?? normalSummary} +
{open && (
diff --git a/packages/client/ui-tool/tests/diff-card.client.spec.tsx b/packages/client/ui-tool/tests/diff-card.client.spec.tsx index 7ebc5265a3..3f9282b29f 100644 --- a/packages/client/ui-tool/tests/diff-card.client.spec.tsx +++ b/packages/client/ui-tool/tests/diff-card.client.spec.tsx @@ -245,10 +245,9 @@ describe('FileMutationRow diff card', () => { meta: { diffs: [] }, }), 'write')} />) // The collapsed row already carries the card's +/- totals beside the path. - expect(view.container.querySelector('[data-disclosure-row]')?.textContent).toContain('+1 -0') + expect(view.getByText('+1 -0')).toBeTruthy() toggleRow(view) - expect(view.getAllByText('+1')).toHaveLength(1) - expect(view.getAllByText('-0')).toHaveLength(1) + expect(view.getAllByText('+1 -0')).toHaveLength(1) expect(view.getByText('hello fixture')).toBeTruthy() }) diff --git a/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts b/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts index 399c588713..db05c7f769 100644 --- a/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts +++ b/packages/client/ui-tool/tests/tool-row-styles.client.spec.ts @@ -25,15 +25,9 @@ describe('ToolRow.module.css summary line', () => { it.each([ ['ToolRow', '../src/client/tool/components/ToolRow.module.css'], ['BashRow', '../src/client/tool/toolviews/bash-sample.module.css'], - ] as const)('%s leaves row text color to the shared disclosure header', (_name, path) => { - // The header supplies tertiary at rest and secondary on hover; a tool sheet - // that restates a row text color, or brightens the row text on hover, would - // pin one state against the shared process-row colors. The Inspect button - // keeps its own solid hover fill and is not row text. + ] as const)('%s keeps stopped and error summaries outside hover darkening', (_name, path) => { const sheet = readFileSync(fileURLToPath(new URL(path, import.meta.url)), 'utf8') - .replace(/\/\*[\s\S]*?\*\//g, ' ') - expect(sheet).not.toMatch(/\.(title|summary|summarySuffix)\s*\{[^{}]*\bcolor:/) - expect(sheet).not.toMatch(/:hover\s+\.(title|summary|summarySuffix)\b/) + expect(sheet).toContain('.summary:not(.errorSummary):not(.stoppedSummary)') }) it('keeps the summary suffix on one line and unshrunk', () => { diff --git a/packages/client/ui-tool/tests/tool-row.client.spec.tsx b/packages/client/ui-tool/tests/tool-row.client.spec.tsx index 5f9c210e69..f9338cac00 100644 --- a/packages/client/ui-tool/tests/tool-row.client.spec.tsx +++ b/packages/client/ui-tool/tests/tool-row.client.spec.tsx @@ -309,11 +309,10 @@ describe('ToolRow', () => { newText: 'start\nsecond\nthird\nnew\nfourth\nfifth\nend', }] }, }} />) - expect(view.container.querySelector('[data-disclosure-row]')?.textContent).toContain('+1 -1') + expect(view.getByText('+1 -1')).toBeTruthy() expect(view.container.querySelector('[data-diff]')).toBeNull() fireEvent.click(view.getByRole('button')) - expect(view.getAllByText('+1')).toHaveLength(1) - expect(view.getAllByText('-1')).toHaveLength(1) + expect(view.getAllByText('+1 -1')).toHaveLength(1) expect(view.getAllByText('start')).toHaveLength(1) expect(view.getAllByText('end')).toHaveLength(1) expect(view.getByText('old', { exact: true })).toBeTruthy() @@ -345,7 +344,7 @@ describe('ToolRow', () => { it('keeps the business icon across running and error states', () => { const runningView = render() - expect(runningView.container.querySelector('[data-testid="tool-icon"]:not([inert] *)')).not.toBeNull() + expect(runningView.queryByTestId('tool-icon')).not.toBeNull() expect(runningView.container.querySelector('[data-state="running"]')).not.toBeNull() const errorView = render() expect(errorView.container.querySelector('[data-testid="tool-icon"]')).not.toBeNull() diff --git a/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css b/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css index 270efc6c24..190f136f70 100644 --- a/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css +++ b/packages/client/ui-workflow-run/src/client/WorkflowRunPanel.module.css @@ -29,14 +29,14 @@ align-items: center; justify-content: center; margin-right: 0; - color: inherit; + color: var(--dsw-alias-label-tertiary); } .runTitle { overflow: hidden; flex: none; max-width: 42%; - color: inherit; + color: var(--dsw-alias-label-secondary); font-size: var(--dsh-content-font-size-secondary, 13px); font-weight: 510; line-height: calc(24px + var(--dsh-content-font-delta, 0px)); @@ -48,7 +48,7 @@ overflow: hidden; flex: 1; min-width: 0; - color: inherit; + color: var(--dsw-alias-label-tertiary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(18px + var(--dsh-content-font-delta-secondary, 0px)); text-overflow: ellipsis; @@ -65,7 +65,7 @@ font-size: 11px; font-weight: 510; line-height: 16px; - color: inherit; + color: var(--dsw-alias-label-secondary); white-space: nowrap; } @@ -93,7 +93,7 @@ align-items: center; justify-content: center; margin-right: 0; - color: inherit; + color: var(--dsw-alias-label-tertiary); } .phaseTitle { @@ -101,7 +101,7 @@ flex: 0 1 auto; min-width: 0; max-width: 42%; - color: inherit; + color: var(--dsw-alias-label-secondary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); text-overflow: ellipsis; @@ -112,7 +112,7 @@ overflow: hidden; flex: 1; min-width: 0; - color: inherit; + color: var(--dsw-alias-label-tertiary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(20px + var(--dsh-content-font-delta-secondary, 0px)); text-overflow: ellipsis; @@ -125,7 +125,7 @@ /* Column width scales with the text (~132/13 ≈ 10px per font-size px) so larger sizes keep the same status text visible instead of truncating. */ width: calc(132px + var(--dsh-content-font-delta-secondary, 0px) * 10); - color: inherit; + color: var(--dsw-alias-label-secondary); font-size: var(--dsh-content-font-size-secondary, 13px); line-height: calc(20px + var(--dsh-content-font-delta-secondary, 0px)); text-align: right; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0e7d7b3a45..9d834a613b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3193,9 +3193,6 @@ importers: '@types/react-dom': specifier: ~18.3.0 version: 18.3.7(@types/react@18.3.31) - lottie-web: - specifier: ^5.13.0 - version: 5.13.0 react: specifier: ^18.2.0 version: 18.3.1 @@ -9185,7 +9182,7 @@ importers: version: link:../../../vendor/schemastery '@earendil-works/pi-ai': specifier: ^0.85.1 - version: 0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(supports-color@9.4.0)(ws@8.21.0)(zod@4.4.3) + version: 0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3) devDependencies: '@deepseek-ai/cordis': specifier: workspace:~ @@ -19366,9 +19363,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lottie-web@5.13.0: - resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} - lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} @@ -22064,14 +22058,14 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@earendil-works/pi-ai@0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(supports-color@9.4.0)(ws@8.21.0)(zod@4.4.3)': + '@earendil-works/pi-ai@0.85.1(patch_hash=b9bcce474fb2ac44633dff0fa722816a5bff5451b4575d5874035ea14ba70a4f)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(ws@8.21.0)(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.123.0(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1048.0 '@earendil-works/pi-telemetry': 0.85.1 '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)) '@smithy/node-http-handler': 4.7.3 - http-proxy-agent: 7.0.2(supports-color@9.4.0) + http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 openai: 6.40.0(ws@8.21.0)(zod@4.4.3) partial-json: 0.1.7 @@ -24813,7 +24807,7 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.3(supports-color@9.4.0) fs-extra: 10.1.0 - http-proxy-agent: 7.0.2(supports-color@9.4.0) + http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 js-yaml: 4.3.1 sanitize-filename: 1.6.4 @@ -26243,7 +26237,7 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2(supports-color@9.4.0): + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@9.4.0) @@ -26753,8 +26747,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - lottie-web@5.13.0: {} - lowercase-keys@2.0.0: {} lru-cache@10.4.3: {} diff --git a/scripts/rescope-vendor.ts b/scripts/rescope-vendor.ts index 793df0ad81..2f724032d1 100644 --- a/scripts/rescope-vendor.ts +++ b/scripts/rescope-vendor.ts @@ -135,7 +135,6 @@ const GENERIC_SKIPS: readonly GenericSkip[] = [ { file: 'packages/extensions/ui-cordis/src/client/CordisActionRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisDefineRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisPanel.tsx', upstream: ['cordis'] }, - { file: 'packages/extensions/ui-cordis/src/client/CordisPreparingRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/CordisRunRow.tsx', upstream: ['cordis'] }, { file: 'packages/extensions/ui-cordis/src/client/locales.ts', upstream: ['cordis'] }, ] diff --git a/scripts/test-dom-environment.ts b/scripts/test-dom-environment.ts index 6991a6854e..12c8895735 100644 --- a/scripts/test-dom-environment.ts +++ b/scripts/test-dom-environment.ts @@ -1,23 +1,8 @@ /** Initial resize delivery from jsdom's modeled offsets; geometry/timing suites supply their own observers. */ import { afterAll, beforeEach } from 'vitest' -// The SVG animation player initializes a transparent 1px Canvas placeholder at import time. -const canvasPrototype = typeof HTMLCanvasElement === 'undefined' ? undefined : HTMLCanvasElement.prototype -const originalCanvasContext = canvasPrototype === undefined ? undefined : Object.getOwnPropertyDescriptor(canvasPrototype, 'getContext') -if (canvasPrototype !== undefined) { - Object.defineProperty(canvasPrototype, 'getContext', { - configurable: true, - value: (contextId: string) => { - if (contextId !== '2d') throw new Error(`test DOM: unsupported Canvas context ${contextId}`) - return { fillStyle: '', fillRect: () => {} } - }, - }) -} - const original = Object.getOwnPropertyDescriptor(globalThis, 'ResizeObserver') let installed = false -const originalMatchMedia = typeof window === 'undefined' ? undefined : Object.getOwnPropertyDescriptor(window, 'matchMedia') -let installedMatchMedia = false class TestResizeObserver implements ResizeObserver { private readonly targets = new Set() @@ -42,13 +27,6 @@ class TestResizeObserver implements ResizeObserver { } beforeEach(() => { - if (typeof window !== 'undefined' && typeof window.matchMedia !== 'function') { - const matchMedia: Window['matchMedia'] = media => Object.assign(new EventTarget(), { - media, matches: false, onchange: null, addListener: () => {}, removeListener: () => {}, - }) - Object.defineProperty(window, 'matchMedia', { configurable: true, writable: true, value: matchMedia }) - installedMatchMedia = true - } if (typeof document !== 'undefined' && typeof ResizeObserver === 'undefined') { // Establish the per-environment default, so vi.unstubAllGlobals restores it. Object.defineProperty(globalThis, 'ResizeObserver', { configurable: true, writable: true, value: TestResizeObserver }) @@ -57,16 +35,7 @@ beforeEach(() => { }) afterAll(() => { - if (canvasPrototype !== undefined) { - if (originalCanvasContext === undefined) Reflect.deleteProperty(canvasPrototype, 'getContext') - else Object.defineProperty(canvasPrototype, 'getContext', originalCanvasContext) - } - if (installed) { - if (original === undefined) Reflect.deleteProperty(globalThis, 'ResizeObserver') - else Object.defineProperty(globalThis, 'ResizeObserver', original) - } - if (installedMatchMedia) { - if (originalMatchMedia === undefined) Reflect.deleteProperty(window, 'matchMedia') - else Object.defineProperty(window, 'matchMedia', originalMatchMedia) - } + if (!installed) return + if (original === undefined) Reflect.deleteProperty(globalThis, 'ResizeObserver') + else Object.defineProperty(globalThis, 'ResizeObserver', original) }) diff --git a/snapshots/web/auto-review-denial/ui.expected.md b/snapshots/web/auto-review-denial/ui.expected.md index d3172476e3..1ceeeb4f1e 100644 --- a/snapshots/web/auto-review-denial/ui.expected.md +++ b/snapshots/web/auto-review-denial/ui.expected.md @@ -9,8 +9,8 @@ - tab "Trajectory" - text: Inspect the protected operation, but do not run it unless authorized. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - text: Failed - button "Tool call Rejected by Auto review" @@ -37,8 +37,8 @@ - tab "Trajectory" - text: Inspect the protected operation, but do not run it unless authorized. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - text: Failed - button "Tool call Rejected by Auto review" [expanded] diff --git a/snapshots/web/bash-abort-row/ui.expected.md b/snapshots/web/bash-abort-row/ui.expected.md index e7f584b73c..c74b1b8193 100644 --- a/snapshots/web/bash-abort-row/ui.expected.md +++ b/snapshots/web/bash-abort-row/ui.expected.md @@ -8,7 +8,7 @@ - text: "Run two shell commands: wait for cancellation, then write skipped.txt. {{clock}}" - button "Copy" - status: Stopped -- button "Stopped" [expanded] +- button "Stopped" [disabled] [expanded] - button "Ran commands" [expanded] - 'button "Failed Bash Error: tool call aborted" [expanded]' - text: "IN { \"command\": \"node -e \\\"const fs=require('node:fs'); fs.writeFileSync('started.tmp', 'started'); fs.renameSync('started.tmp', 'started.txt'); setInterval(() => {}, 1000)\\\"\", \"description\": \"Wait until cancellation\" } OUT Error: tool call aborted" diff --git a/snapshots/web/changed-files-turn/ui.expected.md b/snapshots/web/changed-files-turn/ui.expected.md index 2f1d34dc98..7500599d2e 100644 --- a/snapshots/web/changed-files-turn/ui.expected.md +++ b/snapshots/web/changed-files-turn/ui.expected.md @@ -1,7 +1,7 @@ - text: 不用先查看目录,直接做四件事:把 intro.md 里的标题「示例项目」改成「项目说明」,新建 src/util.ts 导出一个两数相加的 add 函数,新建 app.local 写一行 mode=demo,最后用 bash 在 notes.txt 末尾追加一行 done。 {{clock}} - button "复制" -- status: 已完成 -- button "已完成,用时 {{duration}}" [expanded] +- status: 已完成工作 +- button "用时 {{duration}}" [expanded] - button "执行了命令,已写入文件,已读取文件等" [expanded] - button "思考" - button "读取 intro.md": diff --git a/snapshots/web/deepseek-messages-chat/ui.expected.md b/snapshots/web/deepseek-messages-chat/ui.expected.md index 56f27b62ba..021809ac0c 100644 --- a/snapshots/web/deepseek-messages-chat/ui.expected.md +++ b/snapshots/web/deepseek-messages-chat/ui.expected.md @@ -8,8 +8,8 @@ - tab "轨迹" - text: 只回复 MESSAGES_WEB_READY,不调用工具。 {{clock}} - button "复制" -- status: 已完成 -- button "已完成,用时 {{duration}}" [disabled] +- status: 已完成工作 +- button "用时 {{duration}}" [disabled] - paragraph: MESSAGES_WEB_READY - button "复制" - button "好的回答" diff --git a/snapshots/web/default-workspace/ui.expected.md b/snapshots/web/default-workspace/ui.expected.md index 9f26daff62..27cdaa5150 100644 --- a/snapshots/web/default-workspace/ui.expected.md +++ b/snapshots/web/default-workspace/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/feedback-command/ack-expanded.expected.md b/snapshots/web/feedback-command/ack-expanded.expected.md index 102788fbbe..f9d619e382 100644 --- a/snapshots/web/feedback-command/ack-expanded.expected.md +++ b/snapshots/web/feedback-command/ack-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/feedback-command/ack.expected.md b/snapshots/web/feedback-command/ack.expected.md index 4f55e3e95f..716f3bd304 100644 --- a/snapshots/web/feedback-command/ack.expected.md +++ b/snapshots/web/feedback-command/ack.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/feedback-release/ack-expanded.expected.md b/snapshots/web/feedback-release/ack-expanded.expected.md index 102788fbbe..f9d619e382 100644 --- a/snapshots/web/feedback-release/ack-expanded.expected.md +++ b/snapshots/web/feedback-release/ack-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/feedback-release/ack.expected.md b/snapshots/web/feedback-release/ack.expected.md index 4f55e3e95f..716f3bd304 100644 --- a/snapshots/web/feedback-release/ack.expected.md +++ b/snapshots/web/feedback-release/ack.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/file-upload-round/ui.expected.md b/snapshots/web/file-upload-round/ui.expected.md index ff7effe13d..0c60a10a69 100644 --- a/snapshots/web/file-upload-round/ui.expected.md +++ b/snapshots/web/file-upload-round/ui.expected.md @@ -11,8 +11,8 @@ - img "reference-1.png" - text: Read the attached file with the read tool, reply with exactly the single word it contains, and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: UPLOAD_ROUND_OK - button "Copy" - button "Good response" diff --git a/snapshots/web/fresh-round-trip/ui-expanded.expected.md b/snapshots/web/fresh-round-trip/ui-expanded.expected.md index de867a8745..0c4d334df3 100644 --- a/snapshots/web/fresh-round-trip/ui-expanded.expected.md +++ b/snapshots/web/fresh-round-trip/ui-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Think" - button "Bash Echo the test string" diff --git a/snapshots/web/fresh-round-trip/ui.expected.md b/snapshots/web/fresh-round-trip/ui.expected.md index 9f26daff62..27cdaa5150 100644 --- a/snapshots/web/fresh-round-trip/ui.expected.md +++ b/snapshots/web/fresh-round-trip/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: echo WEB_E2E_OK. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md b/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md index 00385a4c9b..067f2ece45 100644 --- a/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md +++ b/snapshots/web/goal-multi-turn-actions/ui-expanded.expected.md @@ -14,8 +14,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Ran commands and updated the plan" [expanded] - button "Think" - button "Bash List package directories deterministically" @@ -51,8 +51,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Think" - button "Bash Randomly select another package with Python" diff --git a/snapshots/web/goal-multi-turn-actions/ui.expected.md b/snapshots/web/goal-multi-turn-actions/ui.expected.md index 505a067cbb..d7d9ad4839 100644 --- a/snapshots/web/goal-multi-turn-actions/ui.expected.md +++ b/snapshots/web/goal-multi-turn-actions/ui.expected.md @@ -14,8 +14,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: - strong: Turn 1 / 2 - text: — 随机选中的包: @@ -38,8 +38,8 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: 两个 turn 都完成了 ✅ - paragraph: - strong: 总结: @@ -94,6 +94,7 @@ - button "Good response" - button "Bad response" - button "Branch into a new conversation" +- tooltip "Branch into a new conversation" - text: {{clock}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" diff --git a/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md b/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md index 8bf5e6fb79..761eb41613 100644 --- a/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md +++ b/snapshots/web/lifecycle-chrome/reloaded-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: LIGHTHOUSE diff --git a/snapshots/web/lifecycle-chrome/reloaded.expected.md b/snapshots/web/lifecycle-chrome/reloaded.expected.md index 6f51412377..f6a61355d8 100644 --- a/snapshots/web/lifecycle-chrome/reloaded.expected.md +++ b/snapshots/web/lifecycle-chrome/reloaded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with the single word LIGHTHOUSE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: LIGHTHOUSE - button "Copy" - button "Good response" diff --git a/snapshots/web/live-interactions/loading.expected.md b/snapshots/web/live-interactions/loading.expected.md index 5e83a173bc..7976fcca1c 100644 --- a/snapshots/web/live-interactions/loading.expected.md +++ b/snapshots/web/live-interactions/loading.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/live-interactions/retry-expanded.expected.md b/snapshots/web/live-interactions/retry-expanded.expected.md index 1fc7f0416b..ad8e9f8f2b 100644 --- a/snapshots/web/live-interactions/retry-expanded.expected.md +++ b/snapshots/web/live-interactions/retry-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - group: - status: Retried model request (1/5) · {{duration}} - button "Analysis completed" [expanded] diff --git a/snapshots/web/live-interactions/retry.expected.md b/snapshots/web/live-interactions/retry.expected.md index abc388a29c..33c058c865 100644 --- a/snapshots/web/live-interactions/retry.expected.md +++ b/snapshots/web/live-interactions/retry.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/live-interactions/running-draft.expected.md b/snapshots/web/live-interactions/running-draft.expected.md index 9e5231c18f..1bdf81ba91 100644 --- a/snapshots/web/live-interactions/running-draft.expected.md +++ b/snapshots/web/live-interactions/running-draft.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions": - paragraph: Queue this follow-up while the current turn is running. - button "Add files or run commands" diff --git a/snapshots/web/message-actions/ui.expected.md b/snapshots/web/message-actions/ui.expected.md index 0eee19f56e..ed11835a6c 100644 --- a/snapshots/web/message-actions/ui.expected.md +++ b/snapshots/web/message-actions/ui.expected.md @@ -13,15 +13,18 @@ - button "Copy" - tooltip "Copy" - status: Stopped -- button "Stopped" +- button "Stopped" [disabled] [expanded] +- button "Analysis completed" +- paragraph: I will read both files before answering. +- button "Read files" - button "Copy" - button "Good response" - button "Bad response" - button "Branch into a new conversation" [disabled] - text: Available only on the last message of a completed turn {{clock}} Now give the final answer. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: DONE - button "Copy" - button "Good response" @@ -29,8 +32,8 @@ - button "Branch into a new conversation" - text: {{clock}} Keep this later input in the original conversation. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - paragraph: ORIGINAL ONLY - button "Copy" - button "Good response" diff --git a/snapshots/web/minimal-preset/ui.expected.md b/snapshots/web/minimal-preset/ui.expected.md index 0469ba0e75..e489e916e6 100644 --- a/snapshots/web/minimal-preset/ui.expected.md +++ b/snapshots/web/minimal-preset/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the bash tool to run exactly: printf 'MINIMAL_BASH_CARD_OK\\n'. Then reply exactly MINIMAL_PRESET_REQUEST_OK and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Ran commands" [expanded] - button "Bash printf 'MINIMAL_BASH_CARD_OK\\n'" [expanded] - text: "IN { \"command\": \"printf 'MINIMAL_BASH_CARD_OK\\\\n'\" } OUT MINIMAL_BASH_CARD_OK [Command finished with exit code 0]" diff --git a/snapshots/web/plan-review/approved-expanded.expected.md b/snapshots/web/plan-review/approved-expanded.expected.md index 1bfe52e4e6..6f978228c7 100644 --- a/snapshots/web/plan-review/approved-expanded.expected.md +++ b/snapshots/web/plan-review/approved-expanded.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "plan Plan mode on. Use /plan off to leave. Plan a small change: add a --greeting flag to a CLI. Do not read or write any files. Call exit_plan_mode with a short plan of at most five bullet points. Once the plan is approved, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: diff --git a/snapshots/web/plan-review/approved.expected.md b/snapshots/web/plan-review/approved.expected.md index bab8040ae6..279843a249 100644 --- a/snapshots/web/plan-review/approved.expected.md +++ b/snapshots/web/plan-review/approved.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "plan Plan mode on. Use /plan off to leave. Plan a small change: add a --greeting flag to a CLI. Do not read or write any files. Call exit_plan_mode with a short plan of at most five bullet points. Once the plan is approved, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - 'button "Open plan: Add `--greeting` flag to CLI"': "Add `--greeting` flag to CLI Plan · Markdown Open" - button "Copy" diff --git a/snapshots/web/present-svg/ui.expected.md b/snapshots/web/present-svg/ui.expected.md index 7aeef09f49..08f503ab05 100644 --- a/snapshots/web/present-svg/ui.expected.md +++ b/snapshots/web/present-svg/ui.expected.md @@ -1,7 +1,7 @@ - text: 简单画一个 SVG 表示冯诺依曼架构, 保存为 von-neumann.svg {{clock}} - button "复制" -- status: 已完成 -- button "已完成,用时 {{duration}}" [expanded] +- status: 已完成工作 +- button "用时 {{duration}}" [expanded] - button "已完成分析" [expanded] - button "思考" - paragraph: 我来创建一个冯诺依曼架构的 SVG 示意图。 diff --git a/snapshots/web/present/ui.expected.md b/snapshots/web/present/ui.expected.md index 41d4680b7a..34a2a77047 100644 --- a/snapshots/web/present/ui.expected.md +++ b/snapshots/web/present/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use one run_code program to do the following in order. Call present for missing.txt and catch its error without creating that file. Use bash to run exactly `printf \"DELIVERED_REPORT\\n\" > report.txt; printf \"DELIVERED_NOTE\\n\" > 说明.txt`. Call present for report.txt and 说明.txt. After present succeeds, deliberately throw the string \"AFTER_PRESENT\" (not an Error object) from that same run_code program. Do not retry the program or create any other files. Finish by mentioning `report.txt` and `说明.txt` in inline code, and put PRESENT_DONE in a separate paragraph. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools, ran code, ran commands" [expanded] - button "Think" - text: Failed diff --git a/snapshots/web/ptc-round/ui.expected.md b/snapshots/web/ptc-round/ui.expected.md index 3dbcb5d3ec..986dcf439c 100644 --- a/snapshots/web/ptc-round/ui.expected.md +++ b/snapshots/web/ptc-round/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Using ONE run_code program: run bash `echo CODE_ROUND_OK`, then read the file missing.txt catching its error in the program. Return an object with both outcomes. Then reply DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Ran code, ran commands, read files" [expanded] - button "Think" - button "Code Run bash echo and catch missing file read" diff --git a/snapshots/web/question-composer/answered-expanded.expected.md b/snapshots/web/question-composer/answered-expanded.expected.md index b8f6cce9a0..346b77ff8d 100644 --- a/snapshots/web/question-composer/answered-expanded.expected.md +++ b/snapshots/web/question-composer/answered-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Asked questions" [expanded] - button "Think" - button "Ask question 1/1 answered" [expanded] diff --git a/snapshots/web/question-composer/answered.expected.md b/snapshots/web/question-composer/answered.expected.md index 6b62b305cb..be7b65aa37 100644 --- a/snapshots/web/question-composer/answered.expected.md +++ b/snapshots/web/question-composer/answered.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/question-composer/cancelled.expected.md b/snapshots/web/question-composer/cancelled.expected.md index 647e99e6f5..7d5d89a078 100644 --- a/snapshots/web/question-composer/cancelled.expected.md +++ b/snapshots/web/question-composer/cancelled.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: "Use the ask_user_question tool to ask me exactly one multi-select question with id \"color\", question \"Which color do you prefer?\", header \"Pick one\", and two options: label \"Blue\" with description \"A cool recessive hue that reads as calm and trustworthy in long reading sessions and dense dashboards.\", and label \"Green\" with description \"A restful mid-spectrum hue with the highest perceived brightness, easiest on the eye over long sessions.\" Set multi_select to true. After I answer, reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Asked questions" [expanded] - button "Think" - button "Ask question cancelled" [expanded] diff --git a/snapshots/web/queue-actions/collapsed.expected.md b/snapshots/web/queue-actions/collapsed.expected.md index 9c17d3c73c..64738a0101 100644 --- a/snapshots/web/queue-actions/collapsed.expected.md +++ b/snapshots/web/queue-actions/collapsed.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - button "2 queued messages" - textbox "Cmd/Ctrl+Enter steers all queued messages" - button "Add files or run commands" diff --git a/snapshots/web/queue-actions/editing.expected.md b/snapshots/web/queue-actions/editing.expected.md index dbd34d30b8..d375969b1e 100644 --- a/snapshots/web/queue-actions/editing.expected.md +++ b/snapshots/web/queue-actions/editing.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - button "2 queued messages" [disabled] [expanded] - list: - listitem: diff --git a/snapshots/web/queue-actions/layout.expected.md b/snapshots/web/queue-actions/layout.expected.md index 6d1d9a2f93..2455bfb385 100644 --- a/snapshots/web/queue-actions/layout.expected.md +++ b/snapshots/web/queue-actions/layout.expected.md @@ -11,9 +11,9 @@ - button "Continuing goal {{clock}}": - text: Continuing goal - time: {{clock}} +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - region "To-dos": - button "To-dos 1 completed · 1 in progress" - text: Ongoing Goal Keep the composer context panels aligned diff --git a/snapshots/web/queue-actions/sending.expected.md b/snapshots/web/queue-actions/sending.expected.md index 1ec3f95c7b..594d0053e8 100644 --- a/snapshots/web/queue-actions/sending.expected.md +++ b/snapshots/web/queue-actions/sending.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - list: - listitem: - text: Queue item to remove diff --git a/snapshots/web/queue-actions/ui.expected.md b/snapshots/web/queue-actions/ui.expected.md index 2de2ae656f..6dc03fa797 100644 --- a/snapshots/web/queue-actions/ui.expected.md +++ b/snapshots/web/queue-actions/ui.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - list: - listitem: - text: Edited queue item diff --git a/snapshots/web/queued-image/delivered.expected.md b/snapshots/web/queued-image/delivered.expected.md index 7d06bd0b91..d014db4b09 100644 --- a/snapshots/web/queued-image/delivered.expected.md +++ b/snapshots/web/queued-image/delivered.expected.md @@ -25,8 +25,8 @@ - img "queued.png" - text: Compare with this screenshot {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" @@ -34,8 +34,8 @@ - button "Branch into a new conversation" - text: {{clock}} Continue with the queued comparison {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/queued-image/queued.expected.md b/snapshots/web/queued-image/queued.expected.md index 7ef1375487..6496bb83f5 100644 --- a/snapshots/web/queued-image/queued.expected.md +++ b/snapshots/web/queued-image/queued.expected.md @@ -8,9 +8,9 @@ - tab "Trajectory" - text: Reply with a one-sentence description of event sourcing, then stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - list: - listitem: - img "Queued message image" diff --git a/snapshots/web/seeded-history/command-row.expected.md b/snapshots/web/seeded-history/command-row.expected.md index 1bf37d80f4..86f3b1a9cc 100644 --- a/snapshots/web/seeded-history/command-row.expected.md +++ b/snapshots/web/seeded-history/command-row.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Read Only"': Read Only diff --git a/snapshots/web/seeded-history/feedback-row.expected.md b/snapshots/web/seeded-history/feedback-row.expected.md index a0d3f44eed..769c31023f 100644 --- a/snapshots/web/seeded-history/feedback-row.expected.md +++ b/snapshots/web/seeded-history/feedback-row.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - 'button "feedback Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}." [expanded]' - text: "Feedback recorded for session {{seededId}} Anonymous user: {{uuid}}." - textbox "Message or run a task, / commands, @ files or sessions" diff --git a/snapshots/web/seeded-history/ui-expanded.expected.md b/snapshots/web/seeded-history/ui-expanded.expected.md index 9c3baf29a6..6cbe989134 100644 --- a/snapshots/web/seeded-history/ui-expanded.expected.md +++ b/snapshots/web/seeded-history/ui-expanded.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Read files" [expanded] - button "Think" - button "Read a.txt": @@ -28,8 +28,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/seeded-history/ui.expected.md b/snapshots/web/seeded-history/ui.expected.md index d2c53e99b2..b1842edc41 100644 --- a/snapshots/web/seeded-history/ui.expected.md +++ b/snapshots/web/seeded-history/ui.expected.md @@ -10,8 +10,8 @@ - button "Jump to turn 2" - text: "Use the read tool twice in one assistant message: read a.txt and b.txt. Then reply with the single word DONE and stop. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" @@ -19,8 +19,8 @@ - button "Branch into a new conversation" - text: {{clock}} - button "compact Compacted 5 history items (~{{tokens}} tokens)" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/skill-tool-row/ui.expected.md b/snapshots/web/skill-tool-row/ui.expected.md index 7dde4db16f..6e08ccbd47 100644 --- a/snapshots/web/skill-tool-row/ui.expected.md +++ b/snapshots/web/skill-tool-row/ui.expected.md @@ -7,8 +7,8 @@ - tab "Trajectory" - text: Load the editing-cordis-compositions skill with the skill tool, then reply DONE. {{date}} {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools" [expanded] - button "Think" - button "Skill editing-cordis-compositions" [expanded] diff --git a/snapshots/web/steering/mid-steer.expected.md b/snapshots/web/steering/mid-steer.expected.md index 29ee449f59..0a731c2f3e 100644 --- a/snapshots/web/steering/mid-steer.expected.md +++ b/snapshots/web/steering/mid-steer.expected.md @@ -8,11 +8,11 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - button "Waiting for your action" - text: "Interjection: include the word BANANA in your final reply." - button "Copy" -- status: Deep diving -- text: Deep diving for {{duration}} - region "Ready to continue?": - text: Checkpoint - heading "Ready to continue?" [level=2] diff --git a/snapshots/web/steering/settled-expanded.expected.md b/snapshots/web/steering/settled-expanded.expected.md index 6ccbadfd62..b04beec4bb 100644 --- a/snapshots/web/steering/settled-expanded.expected.md +++ b/snapshots/web/steering/settled-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - button "Asked questions" [expanded] - button "Ask question 1/1 answered" - text: "Interjection: include the word BANANA in your final reply. {{clock}}" diff --git a/snapshots/web/steering/settled.expected.md b/snapshots/web/steering/settled.expected.md index b13cb9a2f9..030841b7e4 100644 --- a/snapshots/web/steering/settled.expected.md +++ b/snapshots/web/steering/settled.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use the ask_user_question tool to ask me exactly one question with id "checkpoint", question "Ready to continue?", header "Checkpoint", and options labeled "Yes" and "No". After I answer, reply with one short sentence acknowledging my answer and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - button "Asked questions" - text: "Interjection: include the word BANANA in your final reply. {{clock}}" - button "Copy" diff --git a/snapshots/web/subagent-conversation/nested.expected.md b/snapshots/web/subagent-conversation/nested.expected.md index 01e95cd04d..c04320b0b6 100644 --- a/snapshots/web/subagent-conversation/nested.expected.md +++ b/snapshots/web/subagent-conversation/nested.expected.md @@ -12,8 +12,8 @@ - tab "Trajectory" - text: Give one concrete event sourcing example. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [disabled] +- status: Worked +- button "Took {{duration}}" [disabled] - status: - strong: This subagent is read-only for now - text: The parent session is offline; reopen it to continue sending messages. diff --git a/snapshots/web/subagent-conversation/sidebar-chat.expected.md b/snapshots/web/subagent-conversation/sidebar-chat.expected.md index 748cd0db25..607e142b62 100644 --- a/snapshots/web/subagent-conversation/sidebar-chat.expected.md +++ b/snapshots/web/subagent-conversation/sidebar-chat.expected.md @@ -1,7 +1,7 @@ - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/subagent-conversation/ui-expanded.expected.md b/snapshots/web/subagent-conversation/ui-expanded.expected.md index 56cb24ea87..625180666b 100644 --- a/snapshots/web/subagent-conversation/ui-expanded.expected.md +++ b/snapshots/web/subagent-conversation/ui-expanded.expected.md @@ -15,8 +15,8 @@ - button "Jump to turn 2" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. @@ -26,8 +26,8 @@ - button "Branch into a new conversation" - text: {{clock}} Now give the same explanation to a human reader. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" [expanded] - button "Think" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. diff --git a/snapshots/web/subagent-conversation/ui.expected.md b/snapshots/web/subagent-conversation/ui.expected.md index fd6280355e..6e67c79557 100644 --- a/snapshots/web/subagent-conversation/ui.expected.md +++ b/snapshots/web/subagent-conversation/ui.expected.md @@ -15,8 +15,8 @@ - button "Jump to turn 2" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" @@ -24,8 +24,8 @@ - button "Branch into a new conversation" - text: {{clock}} Now give the same explanation to a human reader. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: Event sourcing is a pattern where all changes to an application's state are stored as an immutable, append-only sequence of events, rather than persisting only the current state, enabling full auditability, temporal queries, and event-driven architectures. - button "Copy" - button "Good response" diff --git a/snapshots/web/subagent-interrupt/offline-composer.expected.md b/snapshots/web/subagent-interrupt/offline-composer.expected.md index 9b0d6b0309..c6e866c5e2 100644 --- a/snapshots/web/subagent-interrupt/offline-composer.expected.md +++ b/snapshots/web/subagent-interrupt/offline-composer.expected.md @@ -11,9 +11,9 @@ - tab "Trajectory" - text: "Explain event sourcing in one sentence.Your parent agent id is \"session-{{uuid}}\". Before you finish, send your result to that agent with send_message({ agent_id: \"session-{{uuid}}\", message: \"\" }). The parent shares your workspace but does not automatically receive your transcript, tool output, or reasoning. Send earlier messages as well when a finding changes what the parent should do next; sending a message does not end your turn. {{clock}}" - button "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - list: - listitem: - text: Keep working until I stop you again. diff --git a/snapshots/web/turn-tail-actions/completed.expected.md b/snapshots/web/turn-tail-actions/completed.expected.md index 5d309edf46..75ee221050 100644 --- a/snapshots/web/turn-tail-actions/completed.expected.md +++ b/snapshots/web/turn-tail-actions/completed.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/turn-tail-actions/focused.expected.md b/snapshots/web/turn-tail-actions/focused.expected.md index 353f648456..a31f0d0c79 100644 --- a/snapshots/web/turn-tail-actions/focused.expected.md +++ b/snapshots/web/turn-tail-actions/focused.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Analysis completed" - paragraph: Reading the workspace now. - button "Ran commands" [expanded] diff --git a/snapshots/web/turn-tail-actions/running.expected.md b/snapshots/web/turn-tail-actions/running.expected.md index e8cd6fbf1d..8a9f36aee9 100644 --- a/snapshots/web/turn-tail-actions/running.expected.md +++ b/snapshots/web/turn-tail-actions/running.expected.md @@ -9,12 +9,12 @@ - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" - tooltip "Copy" +- status: Deep diving... +- button "Deep diving for {{duration}}" [disabled] [expanded] - button "Analysis completed" - paragraph: Reading the workspace now. - button "Ran commands" - paragraph: partial -- status: Deep diving -- text: Deep diving for {{duration}} - textbox "Message or run a task, / commands, @ files or sessions" - button "Add files or run commands" - 'button "Access mode, current: Workspace Write"': Workspace Write diff --git a/snapshots/web/turn-tail-actions/settled.expected.md b/snapshots/web/turn-tail-actions/settled.expected.md index a626148bfa..cbe5273748 100644 --- a/snapshots/web/turn-tail-actions/settled.expected.md +++ b/snapshots/web/turn-tail-actions/settled.expected.md @@ -9,7 +9,10 @@ - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" - status: Stopped -- button "Stopped" +- button "Stopped" [disabled] [expanded] +- button "Analysis completed" +- paragraph: Reading the workspace now. +- button "Ran commands" - paragraph: partial - text: Stopped - button "Copy" diff --git a/snapshots/web/turn-tail-actions/usage-expanded.expected.md b/snapshots/web/turn-tail-actions/usage-expanded.expected.md index 791695b15c..8ced72edd1 100644 --- a/snapshots/web/turn-tail-actions/usage-expanded.expected.md +++ b/snapshots/web/turn-tail-actions/usage-expanded.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Begin your reply with the plain sentence "Reading the workspace now." as text, and in that same message call the bash tool with the command "echo alpha". After the tool result, reply with the single word DONE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" +- status: Worked +- button "Took {{duration}}" - paragraph: DONE - button "Copy" - button "Good response" diff --git a/snapshots/web/web-search-round/ui.expected.md b/snapshots/web/web-search-round/ui.expected.md index 92cc1ce25e..f229309b8c 100644 --- a/snapshots/web/web-search-round/ui.expected.md +++ b/snapshots/web/web-search-round/ui.expected.md @@ -8,8 +8,8 @@ - tab "Trajectory" - text: Use web_search once with queries ["DeepSeek Harness snapshot search","DeepSeek Harness multi-query search"]. Then reply exactly SEARCH_DONE and stop. {{clock}} - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Searched the web" [expanded] - button "Search DeepSeek Harness snapshot search, DeepSeek Harness multi-query search" - paragraph: SEARCH_DONE diff --git a/snapshots/web/workflow-run/ui.expected.md b/snapshots/web/workflow-run/ui.expected.md index c760b4962d..12ffccb420 100644 --- a/snapshots/web/workflow-run/ui.expected.md +++ b/snapshots/web/workflow-run/ui.expected.md @@ -1,7 +1,7 @@ - text: "Use the workflow tool exactly once, with args omitted, meta set to { \"name\": \"snapshot-flow\", \"description\": \"one child for the snapshot\" }, and this EXACT script body (copy it verbatim): phase('Run') const reply = await agent('Reply with exactly the word WF_CHILD_OK and nothing else.') return { reply } After the workflow returns, reply with the single word WORKFLOW_DONE and stop. Do not use any other tool. {{clock}}" - button "Copy" -- status: Completed -- button "Completed in {{duration}}" [expanded] +- status: Worked +- button "Took {{duration}}" [expanded] - button "Called tools" [expanded] - button "Think" - button "Run workflow snapshot-flow" diff --git a/tsconfig.host.json b/tsconfig.host.json index 08de88abdc..2d31d0df31 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -29,7 +29,6 @@ "apps/web/tests/streaming-fence-highlight.e2e.ts", "apps/web/tests/declared-reasoning.e2e.ts", "apps/web/tests/support.ts", - "apps/web/tests/shimmer.ts", "apps/web/tests/model-input-layout.ts", "apps/web/tests/scaffold-hermetic.e2e.ts", "apps/web/tests/startup-rpc-budget.e2e.ts", From a60af51e809d008d89af3ade60ee107547b175bf Mon Sep 17 00:00:00 2001 From: turtle1999 Date: Wed, 23 Sep 2026 20:47:45 +0800 Subject: [PATCH 54/60] release(dsh): 0.1.7-rc.1 --- apps/cli/package.json | 2 +- apps/desktop-host/package.json | 2 +- apps/desktop/package.json | 2 +- apps/web/package.json | 2 +- package.json | 2 +- packages/acp/acp/package.json | 2 +- packages/api/account-controller/package.json | 2 +- packages/api/gateway/package.json | 2 +- packages/api/job-controller/package.json | 2 +- packages/api/remotes/package.json | 2 +- packages/api/session-controller/package.json | 2 +- packages/api/settings-controller/package.json | 2 +- packages/api/terminal-controller/package.json | 2 +- packages/api/workspace-controller/package.json | 2 +- packages/api/workspace-files/package.json | 2 +- packages/attachment/attachment-local/package.json | 2 +- packages/attachment/attachment/package.json | 2 +- packages/boot/app-boot/package.json | 2 +- packages/boot/cmdline/package.json | 2 +- packages/boot/config-editor/package.json | 2 +- packages/boot/hmr/package.json | 2 +- packages/boot/plugin-manager/package.json | 2 +- packages/browser-use/browser-use/package.json | 2 +- packages/bundle/acp-app/package.json | 2 +- packages/bundle/base/package.json | 2 +- packages/bundle/headless/package.json | 2 +- packages/bundle/sdk-app/package.json | 2 +- packages/bundle/sdk-minimal/package.json | 2 +- packages/bundle/web-app/package.json | 2 +- packages/client/connection/package.json | 2 +- packages/client/file-upload/package.json | 2 +- packages/client/hmr/package.json | 2 +- packages/client/locale/package.json | 2 +- packages/client/modules/package.json | 2 +- packages/client/resources/package.json | 2 +- packages/client/store/package.json | 2 +- packages/client/ui-agent-preset/package.json | 2 +- packages/client/ui-approval/package.json | 2 +- packages/client/ui-attachment/package.json | 2 +- packages/client/ui-brand-official/package.json | 2 +- packages/client/ui-chat/package.json | 2 +- packages/client/ui-commands/package.json | 2 +- packages/client/ui-conversation/package.json | 2 +- packages/client/ui-deliverables/package.json | 2 +- packages/client/ui-directory-picker-browse/package.json | 2 +- packages/client/ui-directory-picker-native/package.json | 2 +- packages/client/ui-dockkit/package.json | 2 +- packages/client/ui-goal/package.json | 2 +- packages/client/ui-input-trigger/package.json | 2 +- packages/client/ui-jobs/package.json | 2 +- packages/client/ui-layout/package.json | 2 +- packages/client/ui-message-feedback/package.json | 2 +- packages/client/ui-model-selection/package.json | 2 +- packages/client/ui-open-in-app/package.json | 2 +- packages/client/ui-permission-presets/package.json | 2 +- packages/client/ui-plan/package.json | 2 +- packages/client/ui-plugin-manager/package.json | 2 +- packages/client/ui-primitives/package.json | 2 +- packages/client/ui-reference/package.json | 2 +- packages/client/ui-renderer/package.json | 2 +- packages/client/ui-schedule/package.json | 2 +- packages/client/ui-session/package.json | 2 +- packages/client/ui-settings-account/package.json | 2 +- packages/client/ui-settings-agent-loop/package.json | 2 +- packages/client/ui-settings-general/package.json | 2 +- packages/client/ui-settings-models/package.json | 2 +- packages/client/ui-settings-plugin-inventory/package.json | 2 +- packages/client/ui-settings-plugins/package.json | 2 +- packages/client/ui-settings-shell/package.json | 2 +- packages/client/ui-settings-subagent/package.json | 2 +- packages/client/ui-settings-web-search/package.json | 2 +- packages/client/ui-settings/package.json | 2 +- packages/client/ui-sidebar-browser/package.json | 2 +- packages/client/ui-sidebar-documentpreview/package.json | 2 +- packages/client/ui-sidebar-files/package.json | 2 +- packages/client/ui-sidebar-right/package.json | 2 +- packages/client/ui-sidebar-terminal/package.json | 2 +- packages/client/ui-sidebar/package.json | 2 +- packages/client/ui-skill/package.json | 2 +- packages/client/ui-slots/package.json | 2 +- packages/client/ui-subagent/package.json | 2 +- packages/client/ui-theme/package.json | 2 +- packages/client/ui-tool/package.json | 2 +- packages/client/ui-trajectory/package.json | 2 +- packages/client/ui-user-questions/package.json | 2 +- packages/client/ui-workflow-run/package.json | 2 +- packages/client/ui-workspace/package.json | 2 +- packages/client/web/package.json | 2 +- packages/compaction/command-compact/package.json | 2 +- packages/compaction/compaction-basic/package.json | 2 +- packages/compaction/compaction-image-offload/package.json | 2 +- packages/compaction/compaction-tool-result-pruner/package.json | 2 +- packages/compaction/compaction/package.json | 2 +- packages/computer-use/computer-use/package.json | 2 +- packages/context/agent-instructions/package.json | 2 +- packages/context/file-reference-local/package.json | 2 +- packages/context/file-reference/package.json | 2 +- packages/context/session-reference/package.json | 2 +- packages/context/time-context/package.json | 2 +- packages/context/tmux-context/package.json | 2 +- packages/core/agent-default-model/package.json | 2 +- packages/core/agent-loop/package.json | 2 +- packages/core/agent-tool-presentation/package.json | 2 +- packages/core/agent/package.json | 2 +- packages/core/scope/package.json | 2 +- packages/core/session/package.json | 2 +- packages/core/system-prompt/package.json | 2 +- packages/core/tools/package.json | 2 +- packages/credentials/authorization/package.json | 2 +- packages/credentials/credentials-local/package.json | 2 +- packages/credentials/credentials/package.json | 2 +- packages/credentials/deepseek-account-platform/package.json | 2 +- packages/credentials/deepseek-account/package.json | 2 +- packages/deliverables/tool-present/package.json | 2 +- packages/deliverables/workspace-changes/package.json | 2 +- packages/document/office-to-pdf/package.json | 2 +- packages/experimental/agent-team-profile/package.json | 2 +- packages/experimental/agent-team/package.json | 2 +- packages/experimental/api-speech-to-text/package.json | 2 +- packages/experimental/auto-review/package.json | 2 +- .../experimental/browser-use-chrome-devtools-mcp/package.json | 2 +- packages/experimental/browser-use-playwright-mcp/package.json | 2 +- packages/experimental/browser-use-runtime/package.json | 2 +- packages/experimental/browser-use-stagehand-native/package.json | 2 +- packages/experimental/client-ui-agent-team/package.json | 2 +- packages/experimental/client-ui-voice-input/package.json | 2 +- packages/experimental/computer-use-cua-driver-mcp/package.json | 2 +- .../experimental/computer-use-cua-driver-native/package.json | 2 +- packages/experimental/inspector/package.json | 2 +- packages/experimental/ptc-runtime-python/package.json | 2 +- packages/experimental/speech-to-text-sensevoice/package.json | 2 +- packages/experimental/speech-to-text/package.json | 2 +- packages/experimental/tool-agent-team/package.json | 2 +- packages/experimental/voice-input-bundle/package.json | 2 +- packages/experimental/webworker-packer/package.json | 2 +- packages/experimental/webworker-runtime/package.json | 2 +- packages/extensions/cordis-client-runner/package.json | 2 +- packages/extensions/cordis-host-runner/package.json | 2 +- packages/extensions/tool-cordis/package.json | 2 +- packages/extensions/ui-cordis/package.json | 2 +- packages/feedback/command-feedback/package.json | 2 +- packages/feedback/message-feedback/package.json | 2 +- packages/fs/fs-local/package.json | 2 +- packages/fs/fs-observation-policy/package.json | 2 +- packages/fs/fs-sandbox/package.json | 2 +- packages/fs/fs/package.json | 2 +- packages/fs/tool-fs-search/package.json | 2 +- packages/fs/tool-fs/package.json | 2 +- packages/fs/tool-str-replace-editor/package.json | 2 +- packages/goal/command-goal/package.json | 2 +- packages/goal/goal-round-driver/package.json | 2 +- packages/goal/goal/package.json | 2 +- packages/goal/tool-goal/package.json | 2 +- packages/guard/repeat-tool-reminder/package.json | 2 +- packages/guard/timeout-policy/package.json | 2 +- packages/hooks/hook-protocol/package.json | 2 +- packages/hooks/hooks-claude-code/package.json | 2 +- packages/hooks/hooks-codex/package.json | 2 +- packages/host/directory-picker-auto/package.json | 2 +- packages/host/directory-picker-browse/package.json | 2 +- packages/host/directory-picker-native/package.json | 2 +- packages/host/directory-picker/package.json | 2 +- packages/host/frontend-static/package.json | 2 +- packages/host/open-in-app/package.json | 2 +- packages/host/plugin-inventory/package.json | 2 +- packages/host/product-telemetry-otel/package.json | 2 +- packages/host/webserver/package.json | 2 +- packages/identity/anonymous-user-id/package.json | 2 +- packages/interaction/commands/package.json | 2 +- packages/interaction/permission-presets/package.json | 2 +- packages/interaction/tool-ask-user/package.json | 2 +- packages/interaction/user-approval/package.json | 2 +- packages/interaction/user-questions/package.json | 2 +- packages/jobs/jobs-local/package.json | 2 +- packages/jobs/jobs/package.json | 2 +- packages/jobs/tool-jobs/package.json | 2 +- packages/llm/deepseek-llm-api-extensions/package.json | 2 +- packages/llm/llm-deepseek/package.json | 2 +- packages/llm/llm-pi-ai/package.json | 2 +- packages/llm/llm-retry/package.json | 2 +- packages/llm/llm/package.json | 2 +- packages/llm/plugin-package-inventory-deepseek/package.json | 2 +- packages/llm/token-meter/package.json | 2 +- packages/lsp/lsp-stdio/package.json | 2 +- packages/lsp/lsp/package.json | 2 +- packages/lsp/tool-lsp/package.json | 2 +- packages/mcp/mcp-client/package.json | 2 +- packages/mcp/mcp-resources/package.json | 2 +- packages/plan/plan-mode/package.json | 2 +- packages/preset/agent-preset-registry/package.json | 2 +- packages/preset/agent-preset/package.json | 2 +- packages/preset/persona/package.json | 2 +- packages/ptc-runtime/ptc-runtime-node/package.json | 2 +- packages/ptc-runtime/ptc-runtime/package.json | 2 +- packages/runtime-diagnostics/invariants/package.json | 2 +- packages/sandbox/sandbox-local/package.json | 2 +- packages/sandbox/sandbox-policy/package.json | 2 +- packages/sandbox/sandbox-windows-acl/package.json | 2 +- packages/sandbox/sandbox/package.json | 2 +- packages/schedule/schedule/package.json | 2 +- packages/sdk/client/package.json | 2 +- packages/sdk/protocol/package.json | 2 +- packages/sdk/server/package.json | 2 +- packages/session-query/session-log-export/package.json | 2 +- packages/session-query/session-query-sqlite/package.json | 2 +- packages/session-query/session-query/package.json | 2 +- packages/session-query/tool-session-query/package.json | 2 +- packages/session/session-checkpoint-policy/package.json | 2 +- packages/session/session-format-catalog/package.json | 2 +- packages/session/session-format-v0-to-v1/package.json | 2 +- packages/session/session-format-v1-to-v2/package.json | 2 +- packages/session/session-format-v2-to-v3/package.json | 2 +- packages/session/session-format-v3-to-v4/package.json | 2 +- packages/session/session-format/package.json | 2 +- packages/session/session-log-deepseek/package.json | 2 +- packages/session/session-persistence-jsonl/package.json | 2 +- packages/session/session-persistence/package.json | 2 +- packages/session/session-projection-cache/package.json | 2 +- packages/session/session-projection/package.json | 2 +- packages/session/session-stats/package.json | 2 +- packages/session/session-telemetry-otel/package.json | 2 +- packages/session/session-telemetry/package.json | 2 +- packages/session/session-title-all-prompts-llm/package.json | 2 +- packages/session/session-title-first-prompt-llm/package.json | 2 +- packages/session/session-title-llm/package.json | 2 +- packages/session/session-title/package.json | 2 +- packages/session/session-turn-outline/package.json | 2 +- packages/settings/settings/package.json | 2 +- packages/shell/bash-local/package.json | 2 +- packages/shell/bash-sandbox/package.json | 2 +- packages/shell/pwsh-local/package.json | 2 +- packages/shell/pwsh-sandbox/package.json | 2 +- packages/shell/shell-env/package.json | 2 +- packages/shell/shell/package.json | 2 +- packages/shell/tool-bash-persistent/package.json | 2 +- packages/shell/tool-bash/package.json | 2 +- packages/shell/tool-pwsh-persistent/package.json | 2 +- packages/shell/tool-pwsh/package.json | 2 +- packages/skill/skill-badge/package.json | 2 +- packages/skill/skill-filesystem/package.json | 2 +- packages/skill/skill-office/package.json | 2 +- packages/skill/skill/package.json | 2 +- packages/skill/tool-skill/package.json | 2 +- packages/skill/tool-workspace-dependencies/package.json | 2 +- packages/spill/spill-local/package.json | 2 +- packages/spill/spill-policy/package.json | 2 +- packages/spill/spill/package.json | 2 +- packages/ssh/fs-ssh/package.json | 2 +- packages/ssh/sandbox-ssh/package.json | 2 +- packages/ssh/ssh/package.json | 2 +- packages/ssh/subprocess-ssh/package.json | 2 +- packages/storage/storage-domain/package.json | 2 +- packages/storage/storage-json/package.json | 2 +- packages/storage/storage-sqlite/package.json | 2 +- packages/storage/storage/package.json | 2 +- packages/subagent/subagent-acp/package.json | 2 +- packages/subagent/subagent-claude-code/package.json | 2 +- packages/subagent/subagent-codex/package.json | 2 +- packages/subagent/subagent-dsh-sdk/package.json | 2 +- packages/subagent/subagent-fork-in-process/package.json | 2 +- packages/subagent/subagent-in-process-driver/package.json | 2 +- packages/subagent/subagent-spawn-in-process/package.json | 2 +- packages/subagent/subagent/package.json | 2 +- packages/subagent/tool-subagent-control/package.json | 2 +- packages/subagent/tool-subagent/package.json | 2 +- packages/subprocess/subprocess-local/package.json | 2 +- packages/subprocess/subprocess/package.json | 2 +- packages/subprocess/win32-process/package.json | 2 +- packages/terminal/terminal-bash/package.json | 2 +- packages/terminal/terminal/package.json | 2 +- packages/terminal/tool-terminal/package.json | 2 +- packages/test-support/agent-loop-testkit/package.json | 2 +- packages/test-support/client-runtime/package.json | 2 +- packages/test-support/llm-mock-server/package.json | 2 +- packages/test-support/llm-replay/package.json | 2 +- packages/test-support/loader-smoke/package.json | 2 +- packages/test-support/remote-mock/package.json | 2 +- packages/test-support/session-snapshot/package.json | 2 +- packages/todo/tool-todo/package.json | 2 +- packages/typert/generator/package.json | 2 +- packages/typert/loader/package.json | 2 +- packages/typert/protocol/package.json | 2 +- packages/typert/registry/package.json | 2 +- packages/util/atomic-write/package.json | 2 +- packages/util/brand/package.json | 2 +- packages/util/chunked-list/package.json | 2 +- packages/util/crypto/package.json | 2 +- packages/util/deque/package.json | 2 +- packages/util/home-paths/package.json | 2 +- packages/util/http-proxy/package.json | 2 +- packages/util/launch-environment/package.json | 2 +- packages/util/lazy-require/package.json | 2 +- packages/util/native-command/package.json | 2 +- packages/util/output-retention/package.json | 2 +- packages/util/package-manifest/package.json | 2 +- packages/util/time/package.json | 2 +- packages/util/timeout/package.json | 2 +- packages/util/values/package.json | 2 +- packages/util/workspace-path/package.json | 2 +- packages/web/tool-web/package.json | 2 +- packages/web/web-fetch-http/package.json | 2 +- packages/web/web-search-deepseek/package.json | 2 +- packages/web/web-search-exa/package.json | 2 +- packages/web/web-search-perplexity/package.json | 2 +- packages/web/web/package.json | 2 +- packages/webhook/webhook-github/package.json | 2 +- packages/webhook/webhook/package.json | 2 +- packages/workflow/tool-ralph/package.json | 2 +- packages/workflow/tool-workflow/package.json | 2 +- packages/workflow/workflow-ptc/package.json | 2 +- packages/workflow/workflow/package.json | 2 +- packages/workspace/workspace/package.json | 2 +- 312 files changed, 312 insertions(+), 312 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index b433c2407f..5e309e3982 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh", "description": "dsh CLI: profile launch, plugin management, and configuration inspection", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/apps/desktop-host/package.json b/apps/desktop-host/package.json index eea02dc7ce..78678127d0 100644 --- a/apps/desktop-host/package.json +++ b/apps/desktop-host/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-desktop-host", "description": "Private Node-mode host process for the Electron desktop application", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "private": true, "license": "MIT", "type": "module", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index db69834af2..e47bc6614b 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-desktop", "description": "Electron desktop shell for a bundled dsh runtime and external plugins", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "private": true, "license": "MIT", "type": "module", diff --git a/apps/web/package.json b/apps/web/package.json index f1c27b66c1..f8c064f3db 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-frontend", "description": "Web application entry: vite build over the @deepseek-ai/dsh-client-web shell library; dist/ served by apps/cli's dsh web", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/package.json b/package.json index 986af9f481..16cfb7af43 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@deepseek-ai/dsh-root", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "license": "MIT", "private": true, "type": "module", diff --git a/packages/acp/acp/package.json b/packages/acp/acp/package.json index 086843b9b5..3886cbade7 100644 --- a/packages/acp/acp/package.json +++ b/packages/acp/acp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-acp", "description": "Automation-only Agent Client Protocol server for driving DeepSeek Harness agents over JSON-RPC stdio", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/account-controller/package.json b/packages/api/account-controller/package.json index 714c2c4e40..8f7d48fcce 100644 --- a/packages/api/account-controller/package.json +++ b/packages/api/account-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-account-controller", "description": "Expose safe account operations over authenticated Remote", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index 48dccab35f..ba7cf84dfe 100644 --- a/packages/api/gateway/package.json +++ b/packages/api/gateway/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-gateway", "description": "Typert Remote Host dispatcher and Client API endpoint", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/job-controller/package.json b/packages/api/job-controller/package.json index 7cf32571b1..8901819eb9 100644 --- a/packages/api/job-controller/package.json +++ b/packages/api/job-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-job-controller", "description": "Job Remote observation stream and the reference-counted client job-output service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index dc33e2f2c0..1cd8054bdf 100644 --- a/packages/api/remotes/package.json +++ b/packages/api/remotes/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-remotes", "description": "Remote BFF assembly for application-selected Host capabilities", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index 08704ed09d..5f01ccb66c 100644 --- a/packages/api/session-controller/package.json +++ b/packages/api/session-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-session-controller", "description": "Session Remote commands, cold reads, and live control transport", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/settings-controller/package.json b/packages/api/settings-controller/package.json index e228f2cbeb..d386f39841 100644 --- a/packages/api/settings-controller/package.json +++ b/packages/api/settings-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-settings-controller", "description": "Remote owner for the configuration surfaces over the settings-domain seams", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/terminal-controller/package.json b/packages/api/terminal-controller/package.json index c26390e3d6..757e0dba78 100644 --- a/packages/api/terminal-controller/package.json +++ b/packages/api/terminal-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-terminal-controller", "description": "Session-owned interactive terminals with shell discovery, screen recovery and typed Remote control", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/workspace-controller/package.json b/packages/api/workspace-controller/package.json index dfa24fae41..7ac0b5c176 100644 --- a/packages/api/workspace-controller/package.json +++ b/packages/api/workspace-controller/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-workspace-controller", "description": "Workspace Remote commands and reconnect-safe state transport", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/api/workspace-files/package.json b/packages/api/workspace-files/package.json index a5e73318e6..9471e8f116 100644 --- a/packages/api/workspace-files/package.json +++ b/packages/api/workspace-files/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-api-workspace-files", "description": "Workspace file service and Client resource provider: bounded reads, directory listing, and live metadata over the workspaceFiles Remote namespace", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/attachment/attachment-local/package.json b/packages/attachment/attachment-local/package.json index aa3af60e31..7a22b072f9 100644 --- a/packages/attachment/attachment-local/package.json +++ b/packages/attachment/attachment-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-attachment-local", "description": "Private content-addressed DSH_HOME attachment storage", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/attachment/attachment/package.json b/packages/attachment/attachment/package.json index c377716886..48fec0776e 100644 --- a/packages/attachment/attachment/package.json +++ b/packages/attachment/attachment/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-attachment", "description": "Durable immutable attachment storage seam for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/boot/app-boot/package.json b/packages/boot/app-boot/package.json index 9a114e8061..c334fa93b3 100644 --- a/packages/boot/app-boot/package.json +++ b/packages/boot/app-boot/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-app-boot", "description": "Shared boot glue for the app bins: .env loading, fail-loud Loader guards, snapshot-aware config resolution, and the Loader boot sequence", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/boot/cmdline/package.json b/packages/boot/cmdline/package.json index 2a74de5479..68fd60efaf 100644 --- a/packages/boot/cmdline/package.json +++ b/packages/boot/cmdline/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-cmdline", "description": "Immutable command-line handoff from a dsh launcher to any app plugin that injects cmdlineArgs", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/boot/config-editor/package.json b/packages/boot/config-editor/package.json index 1a69c93b6d..0c15d83cda 100644 --- a/packages/boot/config-editor/package.json +++ b/packages/boot/config-editor/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-config-editor", "description": "Persist plugin configuration through profile patches and Loader reconciliation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/boot/hmr/package.json b/packages/boot/hmr/package.json index d57ac71584..5e8323201a 100644 --- a/packages/boot/hmr/package.json +++ b/packages/boot/hmr/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-hmr", "description": "Coordinated module and profile configuration hot reload", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/boot/plugin-manager/package.json b/packages/boot/plugin-manager/package.json index c96579daf0..37b99af2d8 100644 --- a/packages/boot/plugin-manager/package.json +++ b/packages/boot/plugin-manager/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-plugin-manager", "description": "Current-profile plugin and bundle management shared by dsh CLI, Web and agent tools", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/browser-use/browser-use/package.json b/packages/browser-use/browser-use/package.json index 02974247ef..3e4014122f 100644 --- a/packages/browser-use/browser-use/package.json +++ b/packages/browser-use/browser-use/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-browser-use", "description": "Exclusive named browser-use provider registration", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/acp-app/package.json b/packages/bundle/acp-app/package.json index fd79e0747f..adfac2438f 100644 --- a/packages/bundle/acp-app/package.json +++ b/packages/bundle/acp-app/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-acp-app", "description": "The dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-base", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/base/package.json b/packages/bundle/base/package.json index 9bac1d952d..9e68cf12fa 100644 --- a/packages/bundle/base/package.json +++ b/packages/bundle/base/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-base", "description": "The shared dsh core as a profile bundle: the first patch layer of base-backed profiles, inserting core rows over the empty profile root", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/headless/package.json b/packages/bundle/headless/package.json index 01c6559068..2ef2d3abce 100644 --- a/packages/bundle/headless/package.json +++ b/packages/bundle/headless/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-headless", "description": "The dsh one-shot bundle: a direct core Agent/Session runner over dsh-base with no Host, HTTP, or browser layer", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/sdk-app/package.json b/packages/bundle/sdk-app/package.json index dc76a874fa..2ae7c39679 100644 --- a/packages/bundle/sdk-app/package.json +++ b/packages/bundle/sdk-app/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sdk-app", "description": "The dsh SDK profile bundle: stdio JSON-RPC serving and process lifecycle over dsh-base", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/sdk-minimal/package.json b/packages/bundle/sdk-minimal/package.json index d62fa60d58..5e0f34cad8 100644 --- a/packages/bundle/sdk-minimal/package.json +++ b/packages/bundle/sdk-minimal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sdk-minimal", "description": "The standalone minimal SDK profile bundle: JSON-RPC, one DeepSeek adapter, persistent shell, and JSONL sessions", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/web-app/package.json b/packages/bundle/web-app/package.json index 8ee1332d47..f12df13ed6 100644 --- a/packages/bundle/web-app/package.json +++ b/packages/bundle/web-app/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-app", "description": "The dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/connection/package.json b/packages/client/connection/package.json index 572fc80588..c119bf6858 100644 --- a/packages/client/connection/package.json +++ b/packages/client/connection/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-connection", "description": "Authenticated RPC transport and generation lifecycle", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/file-upload/package.json b/packages/client/file-upload/package.json index c46f823fdf..47ebdfed87 100644 --- a/packages/client/file-upload/package.json +++ b/packages/client/file-upload/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-file-upload", "description": "Agent-scoped browser file upload, streaming intake, and staged receipt service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/hmr/package.json b/packages/client/hmr/package.json index 7a94aabed6..a5aec7bf18 100644 --- a/packages/client/hmr/package.json +++ b/packages/client/hmr/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-hmr", "description": "Web client graph synchronization and rebuilt-bundle reload transport", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/locale/package.json b/packages/client/locale/package.json index a57fdc884f..8202d89593 100644 --- a/packages/client/locale/package.json +++ b/packages/client/locale/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-locale", "description": "Locale plugin: Host-backed preference, extensible language catalog, browser fallback, and typed built-in dictionaries", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/modules/package.json b/packages/client/modules/package.json index d9cd2df64a..dede099635 100644 --- a/packages/client/modules/package.json +++ b/packages/client/modules/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-modules", "description": "Client module system, dual-face: node half composes the __DSH_BOOT__ entry graph (incremental dsh.client scan, bundle route, index tap, webPlugins service); browser half is the lazy-CJS module table the vendored cordis Loader consumes as its internal seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/resources/package.json b/packages/client/resources/package.json index cf6c67bcd0..fa7cd71706 100644 --- a/packages/client/resources/package.json +++ b/packages/client/resources/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-resources", "description": "Unified client resource model: protocol-registered providers turn URL addresses into live values, consumed through the useResource global standard hook", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/store/package.json b/packages/client/store/package.json index 3a8a609385..0b8c1810f0 100644 --- a/packages/client/store/package.json +++ b/packages/client/store/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-store", "description": "React-free observable and snapshot-store contracts with the shared Zustand/Immer engine", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-agent-preset/package.json b/packages/client/ui-agent-preset/package.json index 785c41cbe5..518c25b092 100644 --- a/packages/client/ui-agent-preset/package.json +++ b/packages/client/ui-agent-preset/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-agent-preset", "description": "Agent-preset surfaces: the default for later sessions, this session's seat, and the composition editor", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-approval/package.json b/packages/client/ui-approval/package.json index 2159fa5af9..c832a37287 100644 --- a/packages/client/ui-approval/package.json +++ b/packages/client/ui-approval/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-approval", "description": "Approval composer takeover over the scoped Remote Event waterfall", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-attachment/package.json b/packages/client/ui-attachment/package.json index ec5cab12d3..547e81ef38 100644 --- a/packages/client/ui-attachment/package.json +++ b/packages/client/ui-attachment/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-attachment", "description": "Dynamic attachment presentation plugin for conversation input, message-image, and trajectory image slots", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-brand-official/package.json b/packages/client/ui-brand-official/package.json index 822b612aff..ab29f603a1 100644 --- a/packages/client/ui-brand-official/package.json +++ b/packages/client/ui-brand-official/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-brand-official", "description": "Official DeepSeek Harness brand occupants for the Web client's sidebar slots", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index 61174be32d..faf1687e0e 100644 --- a/packages/client/ui-chat/package.json +++ b/packages/client/ui-chat/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-chat", "description": "Chat Conversation target, node definitions, renderers, and details surface", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-commands/package.json b/packages/client/ui-commands/package.json index b2eb3b8b28..58daf7f0bc 100644 --- a/packages/client/ui-commands/package.json +++ b/packages/client/ui-commands/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-commands", "description": "Client command surface: global directory cache, '/' source, three command UI kinds, popupSelect registry", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index 7641d94c74..42491afb46 100644 --- a/packages/client/ui-conversation/package.json +++ b/packages/client/ui-conversation/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-conversation", "description": "Target-neutral Conversation assembly, shell, composer, queue, and view navigation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-deliverables/package.json b/packages/client/ui-deliverables/package.json index 9ed7bc692b..48503a33dc 100644 --- a/packages/client/ui-deliverables/package.json +++ b/packages/client/ui-deliverables/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-deliverables", "description": "Changed-files card with per-file comparison tabs, delivery cards, and clickable final-response file references for Web", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-directory-picker-browse/package.json b/packages/client/ui-directory-picker-browse/package.json index 07127d178b..5869fef807 100644 --- a/packages/client/ui-directory-picker-browse/package.json +++ b/packages/client/ui-directory-picker-browse/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-directory-picker-browse", "description": "In-app directory browsing surface: the workspace directory-flow owner rendering the host's listing and creation primitives", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-directory-picker-native/package.json b/packages/client/ui-directory-picker-native/package.json index 08cd61b1e4..0d42f5c55a 100644 --- a/packages/client/ui-directory-picker-native/package.json +++ b/packages/client/ui-directory-picker-native/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-directory-picker-native", "description": "Native directory-picker surface: the renderless workspace directory-flow occupant driving the local Desktop or Host OS chooser", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-dockkit/package.json b/packages/client/ui-dockkit/package.json index 54daa34e50..e2af95e275 100644 --- a/packages/client/ui-dockkit/package.json +++ b/packages/client/ui-dockkit/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-dockkit", "description": "Docking layout kit: split-tree engine with invertible operations, and the React components that render and drive it (zero cordis)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-goal/package.json b/packages/client/ui-goal/package.json index ea48ca954f..191459293d 100644 --- a/packages/client/ui-goal/package.json +++ b/packages/client/ui-goal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-goal", "description": "Session goal surface: GoalBar docked above the composer, read from the goal session projection", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-input-trigger/package.json b/packages/client/ui-input-trigger/package.json index 6267aff57c..2d445f14ec 100644 --- a/packages/client/ui-input-trigger/package.json +++ b/packages/client/ui-input-trigger/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-input-trigger", "description": "Input trigger pipeline: '/' and '@' detection, candidate menu, pick routing to registered sources", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-jobs/package.json b/packages/client/ui-jobs/package.json index 021b4d2ac6..424df8f1c7 100644 --- a/packages/client/ui-jobs/package.json +++ b/packages/client/ui-jobs/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-jobs", "description": "Session-header background-job list with on-demand streaming record panels", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "type": "module", "main": "lib/index.js", "types": "lib/types/index.d.ts", diff --git a/packages/client/ui-layout/package.json b/packages/client/ui-layout/package.json index cf4b95f168..1c2ba62342 100644 --- a/packages/client/ui-layout/package.json +++ b/packages/client/ui-layout/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-layout", "description": "Shell plugin: three-column AppFrame with drag handles, ctx.layout viewing-state service (navigation + panels)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-message-feedback/package.json b/packages/client/ui-message-feedback/package.json index b60cdadcfd..4438857a58 100644 --- a/packages/client/ui-message-feedback/package.json +++ b/packages/client/ui-message-feedback/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-message-feedback", "description": "The Web feedback surface: per-message Like/Dislike in the assistant-message action strip and the feedback dialog behind both ratings and /feedback, backed by the messageFeedback and sessionFeedback Host Remotes", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-model-selection/package.json b/packages/client/ui-model-selection/package.json index 15c9158526..567571a733 100644 --- a/packages/client/ui-model-selection/package.json +++ b/packages/client/ui-model-selection/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-model-selection", "description": "Model selection over the shared model catalog, Session projection, and session.selectModel", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-open-in-app/package.json b/packages/client/ui-open-in-app/package.json index d64b4adc15..89ab47519c 100644 --- a/packages/client/ui-open-in-app/package.json +++ b/packages/client/ui-open-in-app/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-open-in-app", "description": "Web \"Open In...\" controls: the Session-header split button opening the workspace directory in an installed application, and the document preview's default-application controls for one file", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-permission-presets/package.json b/packages/client/ui-permission-presets/package.json index e18b5b3128..af190bf717 100644 --- a/packages/client/ui-permission-presets/package.json +++ b/packages/client/ui-permission-presets/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-permission-presets", "description": "Permission surfaces: a new-session default in General settings and a current-session /permission popup over the permissions projection", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-plan/package.json b/packages/client/ui-plan/package.json index ceed39ad17..3926c05957 100644 --- a/packages/client/ui-plan/package.json +++ b/packages/client/ui-plan/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-plan", "description": "Plan mode controls, persistent transcript plan cards, and sidebar Markdown previews", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-plugin-manager/package.json b/packages/client/ui-plugin-manager/package.json index aa750e8760..37abf14174 100644 --- a/packages/client/ui-plugin-manager/package.json +++ b/packages/client/ui-plugin-manager/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-plugin-manager", "description": "Plugin management for the dsh web client: the sidebar Plugins panel installs, enables, disables, retries, and composes installed plugin packages", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-primitives/package.json b/packages/client/ui-primitives/package.json index 52e29beb42..7b99cd166f 100644 --- a/packages/client/ui-primitives/package.json +++ b/packages/client/ui-primitives/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-primitives", "description": "Pure React atoms for the dsh web UI: controls, icons, markdown, and JSON inspectors (zero cordis)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-reference/package.json b/packages/client/ui-reference/package.json index f3fb02b449..99a8f213a5 100644 --- a/packages/client/ui-reference/package.json +++ b/packages/client/ui-reference/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-reference", "description": "Unified Web @file and @session reference source", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-renderer/package.json b/packages/client/ui-renderer/package.json index 77852c6550..c30673126f 100644 --- a/packages/client/ui-renderer/package.json +++ b/packages/client/ui-renderer/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-renderer", "description": "Browser UI renderer: React slot bindings, ctx.uiRenderer, and the assembled application root", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-schedule/package.json b/packages/client/ui-schedule/package.json index fd23490a2d..b02a6c84b6 100644 --- a/packages/client/ui-schedule/package.json +++ b/packages/client/ui-schedule/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-schedule", "description": "Read-only active Schedule catalog in the Web Session header", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "type": "module", "main": "lib/index.js", "types": "lib/types/index.d.ts", diff --git a/packages/client/ui-session/package.json b/packages/client/ui-session/package.json index 40d1884750..b3e7c1cab9 100644 --- a/packages/client/ui-session/package.json +++ b/packages/client/ui-session/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-session", "description": "Session Controller adapter for React and session-scoped slots", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-account/package.json b/packages/client/ui-settings-account/package.json index 8dd7ccb9db..ef0173ff03 100644 --- a/packages/client/ui-settings-account/package.json +++ b/packages/client/ui-settings-account/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-account", "description": "Manage DeepSeek login and open Platform billing pages", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-agent-loop/package.json b/packages/client/ui-settings-agent-loop/package.json index 3d97598629..03054980a4 100644 --- a/packages/client/ui-settings-agent-loop/package.json +++ b/packages/client/ui-settings-agent-loop/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-agent-loop", "description": "Settings page of the agent loop on the dsh web client's Plugins page: the parallel tool-call cap of the agent-loop namespace", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index c8430e7058..904789dcee 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-general", "description": "Settings ownerless-copy and product onboarding plugin: the General section, shell trigger/header chrome content, settings dictionaries, and the versioned welcome notice", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-models/package.json b/packages/client/ui-settings-models/package.json index 93959d0734..587093b505 100644 --- a/packages/client/ui-settings-models/package.json +++ b/packages/client/ui-settings-models/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-models", "description": "Models settings and shared product-onboarding dialogs over existing settings and credential joins", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-plugin-inventory/package.json b/packages/client/ui-settings-plugin-inventory/package.json index 0948468ce4..c3dc2d4643 100644 --- a/packages/client/ui-settings-plugin-inventory/package.json +++ b/packages/client/ui-settings-plugin-inventory/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-plugin-inventory", "description": "Read-only Cordis Loader inventory tab in Web Plugins settings", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-plugins/package.json b/packages/client/ui-settings-plugins/package.json index 745ff32976..b295c4ace7 100644 --- a/packages/client/ui-settings-plugins/package.json +++ b/packages/client/ui-settings-plugins/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-plugins", "description": "Built-in plugins settings section for the dsh web client: the Settings navigation entry and the tab chrome feature-owned tabs register into", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-shell/package.json b/packages/client/ui-settings-shell/package.json index e3551daa21..519a5babee 100644 --- a/packages/client/ui-settings-shell/package.json +++ b/packages/client/ui-settings-shell/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-shell", "description": "Settings page of the shell executor on the dsh web client's Plugins page: the command timeout and the per-stream output cap of the shell namespace", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-subagent/package.json b/packages/client/ui-settings-subagent/package.json index 4c2fd80f37..af69574a11 100644 --- a/packages/client/ui-settings-subagent/package.json +++ b/packages/client/ui-settings-subagent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-subagent", "description": "Settings page of Subagent delegation on the dsh web client's Plugins page: recursion depth, parallel capacity, and the models agents may choose for subagents", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-web-search/package.json b/packages/client/ui-settings-web-search/package.json index e21ca4aaa7..63cdd8bf31 100644 --- a/packages/client/ui-settings-web-search/package.json +++ b/packages/client/ui-settings-web-search/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings-web-search", "description": "Settings page of the DeepSeek web-search provider on the dsh web client's Plugins page: its API key, endpoint, and per-request search budget", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings/package.json b/packages/client/ui-settings/package.json index 90ae1eb92b..26e74c5ce5 100644 --- a/packages/client/ui-settings/package.json +++ b/packages/client/ui-settings/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-settings", "description": "Settings domain base plugin: shared configuration forms and the canonical settings slot-type contract", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-browser/package.json b/packages/client/ui-sidebar-browser/package.json index 276edca457..13babc5551 100644 --- a/packages/client/ui-sidebar-browser/package.json +++ b/packages/client/ui-sidebar-browser/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar-browser", "description": "Sandboxed Web browser tabs for the right Sidebar", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-documentpreview/package.json b/packages/client/ui-sidebar-documentpreview/package.json index bae13db1d5..457be7ba2f 100644 --- a/packages/client/ui-sidebar-documentpreview/package.json +++ b/packages/client/ui-sidebar-documentpreview/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar-documentpreview", "description": "Extensible Sidebar previews for Office documents, spreadsheets, Markdown, code, images, PDF, HTML, and plain text", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-files/package.json b/packages/client/ui-sidebar-files/package.json index 492f3a1129..e7669bd2fa 100644 --- a/packages/client/ui-sidebar-files/package.json +++ b/packages/client/ui-sidebar-files/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar-files", "description": "Workspace file tree tab type for the right Sidebar: lazy directory listing over the workspaceFiles Remote namespace, opening files into the Sidebar", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-right/package.json b/packages/client/ui-sidebar-right/package.json index b36613d81e..45f884f1b3 100644 --- a/packages/client/ui-sidebar-right/package.json +++ b/packages/client/ui-sidebar-right/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar-right", "description": "Right Sidebar: the docking surface's session-bound state, its panel and header expand control, and the navigation service over it", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-terminal/package.json b/packages/client/ui-sidebar-terminal/package.json index 1bf7b868b9..c63304616b 100644 --- a/packages/client/ui-sidebar-terminal/package.json +++ b/packages/client/ui-sidebar-terminal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar-terminal", "description": "Interactive shell tabs for the right Sidebar", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar/package.json b/packages/client/ui-sidebar/package.json index cf9d1a2893..f22721e9e9 100644 --- a/packages/client/ui-sidebar/package.json +++ b/packages/client/ui-sidebar/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-sidebar", "description": "Sidebar plugin: session multi-level tree, search, grouping, state dots", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-skill/package.json b/packages/client/ui-skill/package.json index 49bee1c402..480439b8d4 100644 --- a/packages/client/ui-skill/package.json +++ b/packages/client/ui-skill/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-skill", "description": "Web skill references and the dedicated skill tool row", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-slots/package.json b/packages/client/ui-slots/package.json index 40ddbe4970..6a0f52fb91 100644 --- a/packages/client/ui-slots/package.json +++ b/packages/client/ui-slots/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-slots", "description": "Slot registry pure core: typed ordinary Slots and reusable Component Factories, derived props, Store seats, and renderer installation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-subagent/package.json b/packages/client/ui-subagent/package.json index 89a118ddad..e7a5bdf717 100644 --- a/packages/client/ui-subagent/package.json +++ b/packages/client/ui-subagent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-subagent", "description": "Subagent conversation catalog, continuation routing UI, and '@' reference source", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-theme/package.json b/packages/client/ui-theme/package.json index 8fdbec3862..1da5c1bd9a 100644 --- a/packages/client/ui-theme/package.json +++ b/packages/client/ui-theme/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-theme", "description": "Theme plugin: Host bootstrap for the pre-plugin palette; DOM-free ThemeRuntime for light/dark/system state; --dsw-* token styles and Appearance settings row", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-tool/package.json b/packages/client/ui-tool/package.json index 1f36739781..a63f2dd31d 100644 --- a/packages/client/ui-tool/package.json +++ b/packages/client/ui-tool/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-tool", "description": "Client Tool call-tree renderer and keyed per-tool presentation slot", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-trajectory/package.json b/packages/client/ui-trajectory/package.json index b9a31b6307..c406565d9d 100644 --- a/packages/client/ui-trajectory/package.json +++ b/packages/client/ui-trajectory/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-trajectory", "description": "Trajectory event ledger with an interactive timing overview: pure-consumer plugin registering into the conversation ViewMap (no service)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-user-questions/package.json b/packages/client/ui-user-questions/package.json index af7574df7c..6848f4254f 100644 --- a/packages/client/ui-user-questions/package.json +++ b/packages/client/ui-user-questions/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-user-questions", "description": "Web ask_user_question composer takeover and plan-review presentation UI", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-workflow-run/package.json b/packages/client/ui-workflow-run/package.json index 95243a24ea..a2240c1f6a 100644 --- a/packages/client/ui-workflow-run/package.json +++ b/packages/client/ui-workflow-run/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-workflow-run", "description": "Durable workflow-run Conversation Node and nested member disclosure for dsh web", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-workspace/package.json b/packages/client/ui-workspace/package.json index b604aee9ff..4a3304f961 100644 --- a/packages/client/ui-workspace/package.json +++ b/packages/client/ui-workspace/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-workspace", "description": "Workspace picker plugin: one WorkspacePicker registered into the sidebar and empty-state workspace slots", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/client/web/package.json b/packages/client/web/package.json index 03c4707cd8..0cfae82199 100644 --- a/packages/client/web/package.json +++ b/packages/client/web/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-web", "description": "Web boot kernel: static module table, Cordis loader, framework-free boot page, and UI-renderer handoff", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/command-compact/package.json b/packages/compaction/command-compact/package.json index f1124114e6..892b962ace 100644 --- a/packages/compaction/command-compact/package.json +++ b/packages/compaction/command-compact/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-command-compact", "description": "Human-facing slash command for explicit session compaction", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-basic/package.json b/packages/compaction/compaction-basic/package.json index 028c88f678..694abbe588 100644 --- a/packages/compaction/compaction-basic/package.json +++ b/packages/compaction/compaction-basic/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-compaction-basic", "description": "Token-meter-driven compaction policy and LLM summarization backend for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-image-offload/package.json b/packages/compaction/compaction-image-offload/package.json index 1053f6cbd4..c612d44d28 100644 --- a/packages/compaction/compaction-image-offload/package.json +++ b/packages/compaction/compaction-image-offload/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-compaction-image-offload", "description": "Durable image offload for image-capable routes: replace over-budget request images with placeholders and retry", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-tool-result-pruner/package.json b/packages/compaction/compaction-tool-result-pruner/package.json index 7d30cded68..a4e848bb18 100644 --- a/packages/compaction/compaction-tool-result-pruner/package.json +++ b/packages/compaction/compaction-tool-result-pruner/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-compaction-tool-result-pruner", "description": "Replay-safe model-free head/middle/tail pruning for tool-result surface nodes", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction/package.json b/packages/compaction/compaction/package.json index 067a42d1a1..ae9ec1a9e1 100644 --- a/packages/compaction/compaction/package.json +++ b/packages/compaction/compaction/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-compaction", "description": "Abstract compaction service seam (ctx.compaction) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/computer-use/computer-use/package.json b/packages/computer-use/computer-use/package.json index 5892b9f69a..a832a6ae9c 100644 --- a/packages/computer-use/computer-use/package.json +++ b/packages/computer-use/computer-use/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-computer-use", "description": "Exclusive named computer-use provider registration", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/agent-instructions/package.json b/packages/context/agent-instructions/package.json index 90cfff97ab..6776e24407 100644 --- a/packages/context/agent-instructions/package.json +++ b/packages/context/agent-instructions/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-instructions", "description": "Workspace context loader for AGENTS.md/CLAUDE.md instruction files", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/file-reference-local/package.json b/packages/context/file-reference-local/package.json index a42d833f65..f383f01ed7 100644 --- a/packages/context/file-reference-local/package.json +++ b/packages/context/file-reference-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-file-reference-local", "description": "Local-filesystem ctx.fileReferences provider with bounded fuzzy indexes", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/file-reference/package.json b/packages/context/file-reference/package.json index 6b7f48d3e5..74b55fdf1a 100644 --- a/packages/context/file-reference/package.json +++ b/packages/context/file-reference/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-file-reference", "description": "File-reference discovery contract and shared @file grammar", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/session-reference/package.json b/packages/context/session-reference/package.json index 3427d2a847..793dcf603c 100644 --- a/packages/context/session-reference/package.json +++ b/packages/context/session-reference/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-reference", "description": "Cross-session snapshot references and durable untrusted model context (ctx.sessionReferenceResolver)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/time-context/package.json b/packages/context/time-context/package.json index 85b9acf6d3..3ff8a1ed5c 100644 --- a/packages/context/time-context/package.json +++ b/packages/context/time-context/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-time-context", "description": "Opt-in durable per-step context with the current time and elapsed time", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/context/tmux-context/package.json b/packages/context/tmux-context/package.json index 40638291d6..7ffcae3c10 100644 --- a/packages/context/tmux-context/package.json +++ b/packages/context/tmux-context/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tmux-context", "description": "Opt-in durable per-step context with this agent's tmux pane and window location", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-default-model/package.json b/packages/core/agent-default-model/package.json index e27550b897..04806153c4 100644 --- a/packages/core/agent-default-model/package.json +++ b/packages/core/agent-default-model/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-default-model", "description": "Default model selection shared by Agent entry points", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index ddfb2645ac..f7f48f88d2 100644 --- a/packages/core/agent-loop/package.json +++ b/packages/core/agent-loop/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-loop", "description": "The concrete agent loop plugin for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-tool-presentation/package.json b/packages/core/agent-tool-presentation/package.json index c0ad0084a0..4d378c48bf 100644 --- a/packages/core/agent-tool-presentation/package.json +++ b/packages/core/agent-tool-presentation/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-tool-presentation", "description": "Agent-plane presentation selector: composes one agent's tools as PTC mode, native, or both", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent/package.json b/packages/core/agent/package.json index 0e39e03c71..82cdeba4ab 100644 --- a/packages/core/agent/package.json +++ b/packages/core/agent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent", "description": "Agent interface, registry, initiator scope, and event vocabulary for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/scope/package.json b/packages/core/scope/package.json index 56ec1246c6..0968d67f24 100644 --- a/packages/core/scope/package.json +++ b/packages/core/scope/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-scope", "description": "Scoped-context registration primitive (scope tags, scope-filtered event dispatch) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/session/package.json b/packages/core/session/package.json index 3cce03e091..12bcd90466 100644 --- a/packages/core/session/package.json +++ b/packages/core/session/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session", "description": "Event-sourced session store for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/system-prompt/package.json b/packages/core/system-prompt/package.json index 0ab266f3a6..c7cc42b3f3 100644 --- a/packages/core/system-prompt/package.json +++ b/packages/core/system-prompt/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-system-prompt", "description": "System prompt assembly registry for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/core/tools/package.json b/packages/core/tools/package.json index b5839d2e50..99f7d08a2c 100644 --- a/packages/core/tools/package.json +++ b/packages/core/tools/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tools", "description": "Tool registry and execution pipeline for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/authorization/package.json b/packages/credentials/authorization/package.json index 6e8c3ddc7b..a16a72e49d 100644 --- a/packages/credentials/authorization/package.json +++ b/packages/credentials/authorization/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-authorization", "description": "Authorization seam (ctx.authorization): plugin-owned flows that obtain a credential through a conversation with the human", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/credentials-local/package.json b/packages/credentials/credentials-local/package.json index c69efa42a0..7dacbaf287 100644 --- a/packages/credentials/credentials-local/package.json +++ b/packages/credentials/credentials-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-credentials-local", "description": "File-backed credentials provider ($DSH_HOME/.env under the live process environment) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/credentials/package.json b/packages/credentials/credentials/package.json index 65fe3cb106..60c9af417b 100644 --- a/packages/credentials/credentials/package.json +++ b/packages/credentials/credentials/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-credentials", "description": "Abstract credential seam (ctx.credentials): settings carry references to secrets, providers own the values", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/deepseek-account-platform/package.json b/packages/credentials/deepseek-account-platform/package.json index abf1170a15..651a571167 100644 --- a/packages/credentials/deepseek-account-platform/package.json +++ b/packages/credentials/deepseek-account-platform/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-deepseek-account-platform", "description": "Authorize DeepSeek accounts through browser PKCE", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/deepseek-account/package.json b/packages/credentials/deepseek-account/package.json index b0f00e6a7c..eb19e820fd 100644 --- a/packages/credentials/deepseek-account/package.json +++ b/packages/credentials/deepseek-account/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-deepseek-account", "description": "Read account state and resolve official API credentials", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/deliverables/tool-present/package.json b/packages/deliverables/tool-present/package.json index a91f72803a..ec3fc4f3f4 100644 --- a/packages/deliverables/tool-present/package.json +++ b/packages/deliverables/tool-present/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-present", "description": "Explicit workspace file delivery declarations for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/deliverables/workspace-changes/package.json b/packages/deliverables/workspace-changes/package.json index a062496179..c318145d34 100644 --- a/packages/deliverables/workspace-changes/package.json +++ b/packages/deliverables/workspace-changes/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-workspace-changes", "description": "Per-turn workspace file changes recorded from git working-tree snapshots and whole-file captures, with per-file comparisons, for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/document/office-to-pdf/package.json b/packages/document/office-to-pdf/package.json index ae5db5d7a3..5e854f3056 100644 --- a/packages/document/office-to-pdf/package.json +++ b/packages/document/office-to-pdf/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-office-to-pdf", "description": "Shared Office-to-PDF conversion with bounded queues and caching", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/agent-team-profile/package.json b/packages/experimental/agent-team-profile/package.json index ba73fb30ce..0e00106677 100644 --- a/packages/experimental/agent-team-profile/package.json +++ b/packages/experimental/agent-team-profile/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-agent-team-profile", "description": "Agent Teams collaboration, tools, and Web UI in one experimental bundle", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "icon": "./icon.svg", "publishConfig": { "access": "public" diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 680ea5c4c4..077da68094 100644 --- a/packages/experimental/agent-team/package.json +++ b/packages/experimental/agent-team/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-agent-team", "description": "Implicit-root Agent Teams roster, durable peer mailbox, and shared task DAG", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/api-speech-to-text/package.json b/packages/experimental/api-speech-to-text/package.json index 2b6235edb2..512518413d 100644 --- a/packages/experimental/api-speech-to-text/package.json +++ b/packages/experimental/api-speech-to-text/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-api-speech-to-text", "description": "Authenticated experimental speech transcription for browser clients", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/auto-review/package.json b/packages/experimental/auto-review/package.json index c6cbbd994a..257020b4df 100644 --- a/packages/experimental/auto-review/package.json +++ b/packages/experimental/auto-review/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-auto-review", "description": "Per-tool LLM authorization review for the DeepSeek Harness Auto permission preset", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "repository": { "type": "git", "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", diff --git a/packages/experimental/browser-use-chrome-devtools-mcp/package.json b/packages/experimental/browser-use-chrome-devtools-mcp/package.json index 73317d1ead..91966e1436 100644 --- a/packages/experimental/browser-use-chrome-devtools-mcp/package.json +++ b/packages/experimental/browser-use-chrome-devtools-mcp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp", "description": "Experimental per-Session Chromium browser tools through chrome-devtools-mcp", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-playwright-mcp/package.json b/packages/experimental/browser-use-playwright-mcp/package.json index 963c8cbdf3..17f86e295e 100644 --- a/packages/experimental/browser-use-playwright-mcp/package.json +++ b/packages/experimental/browser-use-playwright-mcp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-browser-use-playwright-mcp", "description": "Experimental per-Session Chromium browser tools through @playwright/mcp", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-runtime/package.json b/packages/experimental/browser-use-runtime/package.json index 2628535f4f..46e62a94f1 100644 --- a/packages/experimental/browser-use-runtime/package.json +++ b/packages/experimental/browser-use-runtime/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-browser-use-runtime", "description": "Session-owned browser resource lifecycles and MCP integration for experimental providers", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-stagehand-native/package.json b/packages/experimental/browser-use-stagehand-native/package.json index cd9880acbb..f0b08f11f4 100644 --- a/packages/experimental/browser-use-stagehand-native/package.json +++ b/packages/experimental/browser-use-stagehand-native/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-browser-use-stagehand-native", "description": "Experimental Stagehand browser tools with separately configured native models", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/client-ui-agent-team/package.json b/packages/experimental/client-ui-agent-team/package.json index ef6657b6d7..6720928142 100644 --- a/packages/experimental/client-ui-agent-team/package.json +++ b/packages/experimental/client-ui-agent-team/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-client-ui-agent-team", "description": "Web Agent Teams roster, task board, and teammate navigation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/client-ui-voice-input/package.json b/packages/experimental/client-ui-voice-input/package.json index 8759866c9d..835a522d26 100644 --- a/packages/experimental/client-ui-voice-input/package.json +++ b/packages/experimental/client-ui-voice-input/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-client-ui-voice-input", "description": "Record speech and insert editable text into the conversation draft", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/computer-use-cua-driver-mcp/package.json b/packages/experimental/computer-use-cua-driver-mcp/package.json index 172690c42f..75c08ecfee 100644 --- a/packages/experimental/computer-use-cua-driver-mcp/package.json +++ b/packages/experimental/computer-use-cua-driver-mcp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp", "description": "Experimental computer use through an installed Cua Driver MCP executable", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/computer-use-cua-driver-native/package.json b/packages/experimental/computer-use-cua-driver-native/package.json index 80b7447d8a..21005de10f 100644 --- a/packages/experimental/computer-use-cua-driver-native/package.json +++ b/packages/experimental/computer-use-cua-driver-native/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-computer-use-cua-driver-native", "description": "Experimental computer-use provider embedding the Cua Driver native npm SDK", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/inspector/package.json b/packages/experimental/inspector/package.json index 4e1325661b..ada5657242 100644 --- a/packages/experimental/inspector/package.json +++ b/packages/experimental/inspector/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-inspector", "description": "Experimental cross-realm CDP hub for Host debugging and Client Runtime inspection", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/ptc-runtime-python/package.json b/packages/experimental/ptc-runtime-python/package.json index a938a45f2c..c309ecfedd 100644 --- a/packages/experimental/ptc-runtime-python/package.json +++ b/packages/experimental/ptc-runtime-python/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-ptc-runtime-python", "description": "CPython subprocess implementation of the DeepSeek Harness PTC execution seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "repository": { "type": "git", "url": "git+https://github.com/deepseek-ai/deepseek-harness.git", diff --git a/packages/experimental/speech-to-text-sensevoice/package.json b/packages/experimental/speech-to-text-sensevoice/package.json index 65acfd37de..277ef81671 100644 --- a/packages/experimental/speech-to-text-sensevoice/package.json +++ b/packages/experimental/speech-to-text-sensevoice/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-speech-to-text-sensevoice", "description": "Local SenseVoice ONNX transcription with a managed sherpa-onnx process", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/speech-to-text/package.json b/packages/experimental/speech-to-text/package.json index a27c6d5f9b..e24685d025 100644 --- a/packages/experimental/speech-to-text/package.json +++ b/packages/experimental/speech-to-text/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-speech-to-text", "description": "Experimental speech recognition with independently selectable providers", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/tool-agent-team/package.json b/packages/experimental/tool-agent-team/package.json index fe2455915a..97684aaa97 100644 --- a/packages/experimental/tool-agent-team/package.json +++ b/packages/experimental/tool-agent-team/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-tool-agent-team", "description": "Scoped model-facing Agent Teams tools over ctx.agentTeams", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/voice-input-bundle/package.json b/packages/experimental/voice-input-bundle/package.json index b228379ab3..030b681ac1 100644 --- a/packages/experimental/voice-input-bundle/package.json +++ b/packages/experimental/voice-input-bundle/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-voice-input-bundle", "description": "Experimental voice input with local SenseVoice; downloads its runtime on first use", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "icon": "./icon.svg", "publishConfig": { "access": "public" diff --git a/packages/experimental/webworker-packer/package.json b/packages/experimental/webworker-packer/package.json index 952cbb8a9b..b1a235047b 100644 --- a/packages/experimental/webworker-packer/package.json +++ b/packages/experimental/webworker-packer/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-webworker-packer", "description": "Build-time packer for the browser runtime's base VFS image and ordered data-overlay archives", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/webworker-runtime/package.json b/packages/experimental/webworker-runtime/package.json index 9328a73218..e2b7c265fe 100644 --- a/packages/experimental/webworker-runtime/package.json +++ b/packages/experimental/webworker-runtime/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-experimental-webworker-runtime", "description": "Browser-only harness runtime: in-memory VFS, module transform and loader, postMessage tunnel, and the dedicated Web Worker assembly, with the Node-compatibility layer that lets the host tree run unchanged", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/cordis-client-runner/package.json b/packages/extensions/cordis-client-runner/package.json index 939e310bf0..0c86bccfcb 100644 --- a/packages/extensions/cordis-client-runner/package.json +++ b/packages/extensions/cordis-client-runner/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-cordis-client-runner", "description": "Browser half of dynamic dual-half plugin packages: event subscription, closure evaluation, guard facade, and loader entries", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/cordis-host-runner/package.json b/packages/extensions/cordis-host-runner/package.json index 167baa0017..3189ba40d6 100644 --- a/packages/extensions/cordis-host-runner/package.json +++ b/packages/extensions/cordis-host-runner/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-cordis-host-runner", "description": "Dynamic package definition registry, host-half sandbox lifecycle, and invoke handler table for model-mounted dual-half packages", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/tool-cordis/package.json b/packages/extensions/tool-cordis/package.json index 3a09adac07..d8038f020f 100644 --- a/packages/extensions/tool-cordis/package.json +++ b/packages/extensions/tool-cordis/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-cordis", "description": "Read-only runtime API inspection for Harness plugin development", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/ui-cordis/package.json b/packages/extensions/ui-cordis/package.json index 4ecb8b6c7e..87fa3fd920 100644 --- a/packages/extensions/ui-cordis/package.json +++ b/packages/extensions/ui-cordis/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-ui-cordis", "description": "Cordis dynamic-plugin definition card: the keyed cordis_define tool row with its run/stop switch", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/feedback/command-feedback/package.json b/packages/feedback/command-feedback/package.json index c05ba51ed8..eb0e69e966 100644 --- a/packages/feedback/command-feedback/package.json +++ b/packages/feedback/command-feedback/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-command-feedback", "description": "Log-only session feedback: the record event, the sessionFeedback Host Remote, and the human-facing slash command", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/feedback/message-feedback/package.json b/packages/feedback/message-feedback/package.json index f322034362..78cba5ed08 100644 --- a/packages/feedback/message-feedback/package.json +++ b/packages/feedback/message-feedback/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-message-feedback", "description": "Canonical Session-log ratings and notes for finalized assistant messages", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-local/package.json b/packages/fs/fs-local/package.json index d7457b3a54..04cae8b1d1 100644 --- a/packages/fs/fs-local/package.json +++ b/packages/fs/fs-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-fs-local", "description": "Local-filesystem implementation of the DeepSeek Harness filesystem seam (ctx.fs)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-observation-policy/package.json b/packages/fs/fs-observation-policy/package.json index 208db70821..7a94aa22a4 100644 --- a/packages/fs/fs-observation-policy/package.json +++ b/packages/fs/fs-observation-policy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-fs-observation-policy", "description": "File-context policy plugin for the DeepSeek Harness — observed-state, read-before-edit, and version-guarded write/edit added over the ctx.fs provider seam through the fs/* event gate (no service API)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-sandbox/package.json b/packages/fs/fs-sandbox/package.json index fde7ebbc67..dbd17371f6 100644 --- a/packages/fs/fs-sandbox/package.json +++ b/packages/fs/fs-sandbox/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-fs-sandbox", "description": "Sandbox-enforcing implementation of the DeepSeek Harness filesystem seam: fences write/edit by the per-call sandbox mode (read-only denies mutation, workspace-write contains it to the workspace + temp roots) while reads pass through", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs/package.json b/packages/fs/fs/package.json index edad0a0c7e..781c5011d3 100644 --- a/packages/fs/fs/package.json +++ b/packages/fs/fs/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-fs", "description": "Abstract filesystem capability seam (ctx.fs) for the DeepSeek Harness — vocabulary types, the FileSystem service (text IO + optional version-guarded atomic mutations), and the fs/* policy event vocabulary", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-fs-search/package.json b/packages/fs/tool-fs-search/package.json index 706af4f1c2..210a7beeb5 100644 --- a/packages/fs/tool-fs-search/package.json +++ b/packages/fs/tool-fs-search/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-fs-search", "description": "Model-facing filesystem discovery tools (glob, grep) backed by the packaged ripgrep binary (@vscode/ripgrep)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-fs/package.json b/packages/fs/tool-fs/package.json index bce844f3ee..a028aba2e7 100644 --- a/packages/fs/tool-fs/package.json +++ b/packages/fs/tool-fs/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-fs", "description": "Model-facing filesystem tools (read, write, edit) over the DeepSeek Harness filesystem seam (ctx.fs)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-str-replace-editor/package.json b/packages/fs/tool-str-replace-editor/package.json index bcd55926be..02e6f37764 100644 --- a/packages/fs/tool-str-replace-editor/package.json +++ b/packages/fs/tool-str-replace-editor/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-str-replace-editor", "description": "Model-facing view, create, literal replace, and line insert tool over the Harness filesystem service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/goal/command-goal/package.json b/packages/goal/command-goal/package.json index f721307c43..69514182ac 100644 --- a/packages/goal/command-goal/package.json +++ b/packages/goal/command-goal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-command-goal", "description": "Human-facing slash command for persisted same-session goals", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/goal/goal-round-driver/package.json b/packages/goal/goal-round-driver/package.json index 52507494b8..a452d66f88 100644 --- a/packages/goal/goal-round-driver/package.json +++ b/packages/goal/goal-round-driver/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-goal-round-driver", "description": "Race-fenced same-session goal-round driver", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/goal/goal/package.json b/packages/goal/goal/package.json index 6426b2245b..0376a0c961 100644 --- a/packages/goal/goal/package.json +++ b/packages/goal/goal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-goal", "description": "Event-sourced same-session goal state and lifecycle service for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/goal/tool-goal/package.json b/packages/goal/tool-goal/package.json index bf2afbd7b6..1ba76c00f4 100644 --- a/packages/goal/tool-goal/package.json +++ b/packages/goal/tool-goal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-goal", "description": "Model-facing same-session goal tools with execution-time authority checks", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/guard/repeat-tool-reminder/package.json b/packages/guard/repeat-tool-reminder/package.json index 44ea2e583d..78e672c72f 100644 --- a/packages/guard/repeat-tool-reminder/package.json +++ b/packages/guard/repeat-tool-reminder/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-repeat-tool-reminder", "description": "Repeat-tool-call guard plugin: advisory reminders when an agent loops on identical tool calls", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/guard/timeout-policy/package.json b/packages/guard/timeout-policy/package.json index dca83b9971..b4e9c1ab60 100644 --- a/packages/guard/timeout-policy/package.json +++ b/packages/guard/timeout-policy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-call-timeout-policy", "description": "Tool-call timeout policy: a tools/execute wrapper that arms a per-tool deadline on exec.signal and returns TOOL_TIMEOUT when it wins", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hook-protocol/package.json b/packages/hooks/hook-protocol/package.json index 695fe9b0c3..958af83cff 100644 --- a/packages/hooks/hook-protocol/package.json +++ b/packages/hooks/hook-protocol/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-hook-protocol", "description": "Shared Claude Code / Codex hook wire protocol: matcher engine, stdin/exit-code/stdout codec, multi-hook merge, and hook/* session events", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hooks-claude-code/package.json b/packages/hooks/hooks-claude-code/package.json index 3a23f57137..3cb85770ba 100644 --- a/packages/hooks/hooks-claude-code/package.json +++ b/packages/hooks/hooks-claude-code/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-hooks-claude-code", "description": "Bridge plugin: run a Claude Code hooks.json / settings hook config on the DeepSeek Harness interception seams", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hooks-codex/package.json b/packages/hooks/hooks-codex/package.json index d3bfcddd5b..f2b4794185 100644 --- a/packages/hooks/hooks-codex/package.json +++ b/packages/hooks/hooks-codex/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-hooks-codex", "description": "Bridge plugin: run a Codex hooks.json hook config on the DeepSeek Harness interception seams", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-auto/package.json b/packages/host/directory-picker-auto/package.json index b085694711..d3589b7ef6 100644 --- a/packages/host/directory-picker-auto/package.json +++ b/packages/host/directory-picker-auto/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-directory-picker-auto", "description": "Adaptive chooser of the directory-picker seam: resolves the host situation at boot and mounts the native or browse backend for the DeepSeek Harness web GUI host", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-browse/package.json b/packages/host/directory-picker-browse/package.json index 96c4835118..0258523500 100644 --- a/packages/host/directory-picker-browse/package.json +++ b/packages/host/directory-picker-browse/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-directory-picker-browse", "description": "In-app browsing backend of the directory-picker seam (listing/creation primitives over the host filesystem)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-native/package.json b/packages/host/directory-picker-native/package.json index bb60ec57cd..bca7129d15 100644 --- a/packages/host/directory-picker-native/package.json +++ b/packages/host/directory-picker-native/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-directory-picker-native", "description": "Native-OS-chooser backend of the directory-picker seam for the DeepSeek Harness web GUI host", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker/package.json b/packages/host/directory-picker/package.json index a6cf71a9dc..0ebd4ea02a 100644 --- a/packages/host/directory-picker/package.json +++ b/packages/host/directory-picker/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-directory-picker", "description": "Abstract workspace-directory picking seam (ctx.directoryPicker) for the DeepSeek Harness web GUI host", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/frontend-static/package.json b/packages/host/frontend-static/package.json index edc585600e..9fba35d3a4 100644 --- a/packages/host/frontend-static/package.json +++ b/packages/host/frontend-static/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-frontend-static", "description": "SPA dist server for the Web shell: owns the webserver fallback seat, serving explicit index entries and static assets with traversal rejection and 404 misses", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/open-in-app/package.json b/packages/host/open-in-app/package.json index 89b3a4ab6d..13a624d429 100644 --- a/packages/host/open-in-app/package.json +++ b/packages/host/open-in-app/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-open-in-app", "description": "Host half of open-in-app: resolved application catalog, icons, and the launch endpoint as three webServer routes", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/plugin-inventory/package.json b/packages/host/plugin-inventory/package.json index 1a8befbb71..c70aa78df6 100644 --- a/packages/host/plugin-inventory/package.json +++ b/packages/host/plugin-inventory/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-plugin-inventory", "description": "Read-only Remote projection of current Cordis Loader plugin state", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/product-telemetry-otel/package.json b/packages/host/product-telemetry-otel/package.json index 621f4aa930..e396094001 100644 --- a/packages/host/product-telemetry-otel/package.json +++ b/packages/host/product-telemetry-otel/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-product-telemetry-otel", "description": "Explicit product usage events exported through OpenTelemetry HTTP logs", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/host/webserver/package.json b/packages/host/webserver/package.json index faeb2ff4f7..dcbd840782 100644 --- a/packages/host/webserver/package.json +++ b/packages/host/webserver/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-host-webserver", "description": "Web route-registration plugin: HTTP and upgrade routes, index transform taps, and static dist fallback; knows no harness concepts", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/identity/anonymous-user-id/package.json b/packages/identity/anonymous-user-id/package.json index eff50c0cdb..ea578413e0 100644 --- a/packages/identity/anonymous-user-id/package.json +++ b/packages/identity/anonymous-user-id/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-anonymous-user-id", "description": "Shared anonymous user identity for DeepSeek Harness telemetry and feedback correlation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/commands/package.json b/packages/interaction/commands/package.json index e317c58444..e7f18f7024 100644 --- a/packages/interaction/commands/package.json +++ b/packages/interaction/commands/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-commands", "description": "Plugin-owned human command registry for DeepSeek Harness UIs", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/permission-presets/package.json b/packages/interaction/permission-presets/package.json index c5289ab201..83a122e8bc 100644 --- a/packages/interaction/permission-presets/package.json +++ b/packages/interaction/permission-presets/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-permission-presets", "description": "User-facing permission presets (ctx.permissionPresets) for the DeepSeek Harness: one product-level Permissions select bundling the sandbox-mode and approval-policy knobs, written through to their own session events", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/tool-ask-user/package.json b/packages/interaction/tool-ask-user/package.json index 1262994e62..f80419ac2d 100644 --- a/packages/interaction/tool-ask-user/package.json +++ b/packages/interaction/tool-ask-user/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-ask-user", "description": "Model-facing ask_user_question tool over the ctx.userQuestions seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/user-approval/package.json b/packages/interaction/user-approval/package.json index e154730a57..ab89939dcc 100644 --- a/packages/interaction/user-approval/package.json +++ b/packages/interaction/user-approval/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-user-approval", "description": "User-approval seam (ctx.approval) for the DeepSeek Harness: one-shot permission decisions dispatched to composed answerers over the approval/request waterfall, fail-closed by default", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/user-questions/package.json b/packages/interaction/user-questions/package.json index d5c02e8825..9322349be1 100644 --- a/packages/interaction/user-questions/package.json +++ b/packages/interaction/user-questions/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-user-questions", "description": "Abstract user-questions seam (ctx.userQuestions) for asking the human during agent runs", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/jobs-local/package.json b/packages/jobs/jobs-local/package.json index a96b1f1efc..adc554d642 100644 --- a/packages/jobs/jobs-local/package.json +++ b/packages/jobs/jobs-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-jobs-local", "description": "Process-local implementation of the DeepSeek Harness background job registry seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/jobs/package.json b/packages/jobs/jobs/package.json index f5e4a36603..0298ff2a3c 100644 --- a/packages/jobs/jobs/package.json +++ b/packages/jobs/jobs/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-jobs", "description": "Background job registry (ctx.jobs) for the DeepSeek Harness — shared ids, owner isolation, polling, cancellation, and completion listeners for long-running tool work", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/tool-jobs/package.json b/packages/jobs/tool-jobs/package.json index 4f0515959f..f81ffe41e3 100644 --- a/packages/jobs/tool-jobs/package.json +++ b/packages/jobs/tool-jobs/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-jobs", "description": "Model-facing background job control tools (job_output, job_list, job_kill) over the ctx.jobs registry", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/deepseek-llm-api-extensions/package.json b/packages/llm/deepseek-llm-api-extensions/package.json index a17c6b6763..e36edd7257 100644 --- a/packages/llm/deepseek-llm-api-extensions/package.json +++ b/packages/llm/deepseek-llm-api-extensions/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-deepseek-llm-api-extensions", "description": "Additive request-field registry for the official DeepSeek LLM API adapter", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index ff34eb4349..2971f1a479 100644 --- a/packages/llm/llm-deepseek/package.json +++ b/packages/llm/llm-deepseek/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-deepseek", "description": "DeepSeek Messages adapter", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-pi-ai/package.json b/packages/llm/llm-pi-ai/package.json index d582217754..bd1d5484b9 100644 --- a/packages/llm/llm-pi-ai/package.json +++ b/packages/llm/llm-pi-ai/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-pi-ai", "description": "pi-ai-backed DeepSeek adapter for the DeepSeek Harness LLM seam (design-verification twin of dsh-llm-deepseek)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 5f66b839e6..538df72610 100644 --- a/packages/llm/llm-retry/package.json +++ b/packages/llm/llm-retry/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-retry", "description": "Provider-routed LLM request retry policy for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm/package.json b/packages/llm/llm/package.json index be3d84ae98..cfc18fee5a 100644 --- a/packages/llm/llm/package.json +++ b/packages/llm/llm/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm", "description": "Provider-neutral LLM service interface for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/plugin-package-inventory-deepseek/package.json b/packages/llm/plugin-package-inventory-deepseek/package.json index 350d7599c4..3a58bf863a 100644 --- a/packages/llm/plugin-package-inventory-deepseek/package.json +++ b/packages/llm/plugin-package-inventory-deepseek/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-plugin-package-inventory-deepseek", "description": "Active Loader-backed plugin package inventory for official DeepSeek LLM API requests", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/token-meter/package.json b/packages/llm/token-meter/package.json index 3a3be58bc1..bdeff84e4d 100644 --- a/packages/llm/token-meter/package.json +++ b/packages/llm/token-meter/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-token-meter", "description": "Replay-aware token measurement service (ctx.tokenMeter) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/lsp-stdio/package.json b/packages/lsp/lsp-stdio/package.json index 821604f72e..dd4fb6de11 100644 --- a/packages/lsp/lsp-stdio/package.json +++ b/packages/lsp/lsp-stdio/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-lsp-stdio", "description": "Generic stdio language-server provider for the DeepSeek Harness LSP capability seam (ctx.lsp) — spawns configured servers, translates JSON-RPC, and serves transient-open goToDefinition/findReferences/goToImplementation/hover queries in the host filesystem namespace", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/lsp/package.json b/packages/lsp/lsp/package.json index d03c14ec99..01c00b6ca5 100644 --- a/packages/lsp/lsp/package.json +++ b/packages/lsp/lsp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-lsp", "description": "Abstract LSP capability seam (ctx.lsp) for the DeepSeek Harness — language-server provider registry keyed by branded id and extension mapping, order-independent per-query selection, normalized definition/references/implementation/hover requests and results, and the LspError taxonomy", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/tool-lsp/package.json b/packages/lsp/tool-lsp/package.json index 7eec9023f4..ac1c10e089 100644 --- a/packages/lsp/tool-lsp/package.json +++ b/packages/lsp/tool-lsp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-lsp", "description": "Model-facing lsp tool over the DeepSeek Harness LSP capability seam (ctx.lsp) — one read-only tool with goToDefinition/findReferences/goToImplementation/hover operations, one-based UTF-16 cursor coordinates, bounded location rendering, and hover normalization", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/mcp/mcp-client/package.json b/packages/mcp/mcp-client/package.json index 2ac261cb38..4ca9d2aa05 100644 --- a/packages/mcp/mcp-client/package.json +++ b/packages/mcp/mcp-client/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-mcp-client", "description": "MCP client bridge: connects to MCP servers and registers their tools on ctx.tools", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/mcp/mcp-resources/package.json b/packages/mcp/mcp-resources/package.json index b3ae9d6f5c..4d770f5302 100644 --- a/packages/mcp/mcp-resources/package.json +++ b/packages/mcp/mcp-resources/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-mcp-resources", "description": "Scoped MCP resource discovery and reading through shared model tools", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/plan/plan-mode/package.json b/packages/plan/plan-mode/package.json index ab235817a1..46147a726c 100644 --- a/packages/plan/plan-mode/package.json +++ b/packages/plan/plan-mode/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-plan-mode", "description": "Logged per-agent plan mode with deployment guidance, a direct slash command, and a user-reviewed exit", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/preset/agent-preset-registry/package.json b/packages/preset/agent-preset-registry/package.json index e618bd3948..d02ed4e53f 100644 --- a/packages/preset/agent-preset-registry/package.json +++ b/packages/preset/agent-preset-registry/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-preset-registry", "description": "Declarative Agent preset registry and profile-backed editing", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/preset/agent-preset/package.json b/packages/preset/agent-preset/package.json index 2fba417ecc..b8514157d0 100644 --- a/packages/preset/agent-preset/package.json +++ b/packages/preset/agent-preset/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-preset", "description": "Declare an Agent capability composition in Cordis YAML", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/preset/persona/package.json b/packages/preset/persona/package.json index c20b4006bf..a4c51ca241 100644 --- a/packages/preset/persona/package.json +++ b/packages/preset/persona/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-persona", "description": "Composition-authored deployment persona section for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ptc-runtime/ptc-runtime-node/package.json b/packages/ptc-runtime/ptc-runtime-node/package.json index c8219b1743..86683c2981 100644 --- a/packages/ptc-runtime/ptc-runtime-node/package.json +++ b/packages/ptc-runtime/ptc-runtime-node/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-ptc-runtime-node", "description": "Sandboxed Node process implementation of the DeepSeek Harness PTC execution capability", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ptc-runtime/ptc-runtime/package.json b/packages/ptc-runtime/ptc-runtime/package.json index 40a0d8d234..bf5dd7a5d1 100644 --- a/packages/ptc-runtime/ptc-runtime/package.json +++ b/packages/ptc-runtime/ptc-runtime/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-ptc-runtime", "description": "Abstract PTC execution seam (ctx.ptcRuntime) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/runtime-diagnostics/invariants/package.json b/packages/runtime-diagnostics/invariants/package.json index 7a6179a606..7320bd9ec9 100644 --- a/packages/runtime-diagnostics/invariants/package.json +++ b/packages/runtime-diagnostics/invariants/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-invariants", "description": "Registry service for package-owned DeepSeek Harness runtime invariants", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-local/package.json b/packages/sandbox/sandbox-local/package.json index 1f7cd12f59..9a5edd6223 100644 --- a/packages/sandbox/sandbox-local/package.json +++ b/packages/sandbox/sandbox-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sandbox-local", "description": "Local process-sandbox backends for the DeepSeek Harness sandbox seam: bwrap, the npm-distributed landlock-run launcher, macOS Seatbelt, or the Windows ACL restricted-token runner — functionally probed, fail-closed", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-policy/package.json b/packages/sandbox/sandbox-policy/package.json index a66942a07a..91a95efda7 100644 --- a/packages/sandbox/sandbox-policy/package.json +++ b/packages/sandbox/sandbox-policy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sandbox-policy", "description": "Per-call sandbox policy resolver and current model context: deployment fallbacks plus each session's mode and workspace root, shared by every enforcing capability family", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-windows-acl/package.json b/packages/sandbox/sandbox-windows-acl/package.json index 716bbc0f7d..378e9ebd22 100644 --- a/packages/sandbox/sandbox-windows-acl/package.json +++ b/packages/sandbox/sandbox-windows-acl/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sandbox-windows-acl", "description": "Windows ACL write-restriction sandbox backend (restricted-token spawn with capability-SID write allowlist) for the DeepSeek Harness sandbox seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox/package.json b/packages/sandbox/sandbox/package.json index b07bfc9b18..82da543238 100644 --- a/packages/sandbox/sandbox/package.json +++ b/packages/sandbox/sandbox/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sandbox", "description": "Abstract process-sandbox seam (ctx.sandbox) for the DeepSeek Harness: same-world confinement vocabulary and the SandboxProvider contract", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/schedule/schedule/package.json b/packages/schedule/schedule/package.json index d729668e9c..b3308825b8 100644 --- a/packages/schedule/schedule/package.json +++ b/packages/schedule/schedule/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-schedule", "description": "Agent-scoped durable after, at, and fixed-rate reminders over the session event log", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/client/package.json b/packages/sdk/client/package.json index 432d7420d0..b7885340f5 100644 --- a/packages/sdk/client/package.json +++ b/packages/sdk/client/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sdk-client", "description": "TypeScript client SDK for driving a DeepSeek Harness runtime subprocess over stdio JSON-RPC: the DeepSeekHarness high-level turns API and the lower-level HarnessClient", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/protocol/package.json b/packages/sdk/protocol/package.json index e5eb68077a..cb29c0031a 100644 --- a/packages/sdk/protocol/package.json +++ b/packages/sdk/protocol/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sdk-protocol", "description": "Shared wire protocol for the DeepSeek Harness SDK runtime: the newline-delimited JSON-RPC stdio transport and the named request, result, and notification types spoken between the runtime server and SDK clients", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/server/package.json b/packages/sdk/server/package.json index dd9581f36b..5126fe044d 100644 --- a/packages/sdk/server/package.json +++ b/packages/sdk/server/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sdk-jsonrpc-server", "description": "Stdio JSON-RPC server plugin for out-of-process DeepSeek Harness SDK clients", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-log-export/package.json b/packages/session-query/session-log-export/package.json index 6812223661..d608f7328c 100644 --- a/packages/session-query/session-log-export/package.json +++ b/packages/session-query/session-log-export/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-log-export", "description": "Web Session-log export command and shared download dialog", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-query-sqlite/package.json b/packages/session-query/session-query-sqlite/package.json index 567f044369..4e3fee14df 100644 --- a/packages/session-query/session-query-sqlite/package.json +++ b/packages/session-query/session-query-sqlite/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-query-sqlite", "description": "Concrete ctx.sessionQuery backend with SQLite FTS5 search", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-query/package.json b/packages/session-query/session-query/package.json index 1efe866c2c..d89ebfc709 100644 --- a/packages/session-query/session-query/package.json +++ b/packages/session-query/session-query/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-query", "description": "Combined session query service contract with concrete reads, traces, and filters", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/tool-session-query/package.json b/packages/session-query/tool-session-query/package.json index d28b8eee61..82783f2ce3 100644 --- a/packages/session-query/tool-session-query/package.json +++ b/packages/session-query/tool-session-query/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-session-query", "description": "Workspace-authorized model-facing session history search, trace, and event read tools", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-checkpoint-policy/package.json b/packages/session/session-checkpoint-policy/package.json index 377144a816..b376a3e453 100644 --- a/packages/session/session-checkpoint-policy/package.json +++ b/packages/session/session-checkpoint-policy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-checkpoint-policy", "description": "Semantic session durability checkpoints before model requests and tool side effects", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-catalog/package.json b/packages/session/session-format-catalog/package.json index 857071b04c..6f1e045686 100644 --- a/packages/session/session-format-catalog/package.json +++ b/packages/session/session-format-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format-catalog", "description": "Build-static first-party Session format codec and migration catalog", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-v0-to-v1/package.json b/packages/session/session-format-v0-to-v1/package.json index 8b156a585b..9ff8318147 100644 --- a/packages/session/session-format-v0-to-v1/package.json +++ b/packages/session/session-format-v0-to-v1/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format-v0-to-v1", "description": "Frozen released-v0 Session codec and identity migration to v1", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-v1-to-v2/package.json b/packages/session/session-format-v1-to-v2/package.json index bf9ed47550..3758e10fe1 100644 --- a/packages/session/session-format-v1-to-v2/package.json +++ b/packages/session/session-format-v1-to-v2/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format-v1-to-v2", "description": "Frozen released-v1 Session codec and assistant-stream migration to v2", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-v2-to-v3/package.json b/packages/session/session-format-v2-to-v3/package.json index 03fa527a4d..63c6bfee99 100644 --- a/packages/session/session-format-v2-to-v3/package.json +++ b/packages/session/session-format-v2-to-v3/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format-v2-to-v3", "description": "Streaming system-prompt, canonical-envelope and PTC migration into V3", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-v3-to-v4/package.json b/packages/session/session-format-v3-to-v4/package.json index f07d74f053..c1affa7c0b 100644 --- a/packages/session/session-format-v3-to-v4/package.json +++ b/packages/session/session-format-v3-to-v4/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format-v3-to-v4", "description": "Streaming tool-role migration and delivery validation from Session V3 to V4", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format/package.json b/packages/session/session-format/package.json index 4fecebb4e6..34e465b921 100644 --- a/packages/session/session-format/package.json +++ b/packages/session/session-format/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-format", "description": "Streaming adjacent Session format migration machinery", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-log-deepseek/package.json b/packages/session/session-log-deepseek/package.json index 45ac212aa5..967cc0a766 100644 --- a/packages/session/session-log-deepseek/package.json +++ b/packages/session/session-log-deepseek/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-log-deepseek", "description": "Incremental lossless session-log request extension for the official DeepSeek LLM API", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-persistence-jsonl/package.json b/packages/session/session-persistence-jsonl/package.json index 5d4ff97192..a22aff33f4 100644 --- a/packages/session/session-persistence-jsonl/package.json +++ b/packages/session/session-persistence-jsonl/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-persistence-jsonl", "description": "JSONL durable session persistence backend for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-persistence/package.json b/packages/session/session-persistence/package.json index 73e9e596a5..ec870326db 100644 --- a/packages/session/session-persistence/package.json +++ b/packages/session/session-persistence/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-persistence", "description": "Abstract durable session persistence seam (ctx.sessionPersistence) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-projection-cache/package.json b/packages/session/session-projection-cache/package.json index 2d9ae15d79..6193dd3991 100644 --- a/packages/session/session-projection-cache/package.json +++ b/packages/session/session-projection-cache/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-projection-cache", "description": "Persisted projection cache (ctx.sessionProjectionCache): durable per-session checkpoint records on the session_projcache storage domain (per-record layout), throttled write-behind, and the cached listing read", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-projection/package.json b/packages/session/session-projection/package.json index 68fec6c9ec..707facccf0 100644 --- a/packages/session/session-projection/package.json +++ b/packages/session/session-projection/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-projection", "description": "Session-projection seam: the merge-extensible projection type table, the provider contract, and the ctx.sessionProjections registry serving whole current values of log-derived per-session state", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-stats/package.json b/packages/session/session-stats/package.json index 1310119bae..7c2c53e5bb 100644 --- a/packages/session/session-stats/package.json +++ b/packages/session/session-stats/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-stats", "description": "Whole-log conversation counts and wall times projection (sessionStats) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-telemetry-otel/package.json b/packages/session/session-telemetry-otel/package.json index d422d86902..ccb1e3cb78 100644 --- a/packages/session/session-telemetry-otel/package.json +++ b/packages/session/session-telemetry-otel/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-telemetry-otel", "description": "OpenTelemetry backend for the DeepSeek Harness telemetry seam: hands captured session records to the OTel JS SDK's log pipeline", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-telemetry/package.json b/packages/session/session-telemetry/package.json index fcd35a2203..982781677a 100644 --- a/packages/session/session-telemetry/package.json +++ b/packages/session/session-telemetry/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-telemetry", "description": "SessionTelemetryBackend seam for the DeepSeek Harness: session-event capture, projection, redaction, and handoff to a reporting backend", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title-all-prompts-llm/package.json b/packages/session/session-title-all-prompts-llm/package.json index bca9d289ab..662ed837fb 100644 --- a/packages/session/session-title-all-prompts-llm/package.json +++ b/packages/session/session-title-all-prompts-llm/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-title-all-prompts-llm", "description": "All-user-messages LLM provider plugin for DeepSeek Harness session titles", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title-first-prompt-llm/package.json b/packages/session/session-title-first-prompt-llm/package.json index 9867aef734..710662e238 100644 --- a/packages/session/session-title-first-prompt-llm/package.json +++ b/packages/session/session-title-first-prompt-llm/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-title-first-prompt-llm", "description": "First-message LLM provider plugin for DeepSeek Harness session titles", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title-llm/package.json b/packages/session/session-title-llm/package.json index 617fd4bd7c..62becf6316 100644 --- a/packages/session/session-title-llm/package.json +++ b/packages/session/session-title-llm/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-title-llm", "description": "Shared LLM generation policy for DeepSeek Harness session-title providers", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title/package.json b/packages/session/session-title/package.json index 7b74eaf69a..221fa7a2af 100644 --- a/packages/session/session-title/package.json +++ b/packages/session/session-title/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-title", "description": "Log-backed session title service and provider registry for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-turn-outline/package.json b/packages/session/session-turn-outline/package.json index 623265c4f8..6f4903de59 100644 --- a/packages/session/session-turn-outline/package.json +++ b/packages/session/session-turn-outline/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-turn-outline", "description": "Whole-log turn outline projection (turnOutline) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/settings/settings/package.json b/packages/settings/settings/package.json index ab7777ba69..6cba863802 100644 --- a/packages/settings/settings/package.json +++ b/packages/settings/settings/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-settings", "description": "Abstract user-settings seam (ctx.settings) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/bash-local/package.json b/packages/shell/bash-local/package.json index f0ca7a1a10..3ce8d63995 100644 --- a/packages/shell/bash-local/package.json +++ b/packages/shell/bash-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-bash-local", "description": "Local-subprocess implementation of the DeepSeek Harness bash executor seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/bash-sandbox/package.json b/packages/shell/bash-sandbox/package.json index fdabe47048..4092799457 100644 --- a/packages/shell/bash-sandbox/package.json +++ b/packages/shell/bash-sandbox/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-bash-sandbox", "description": "Sandbox-consuming implementation of the DeepSeek Harness bash executor seam (confines every command via ctx.sandbox, reports denial/enforcement result facts)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/pwsh-local/package.json b/packages/shell/pwsh-local/package.json index a7e16bde9a..acad1970b2 100644 --- a/packages/shell/pwsh-local/package.json +++ b/packages/shell/pwsh-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-pwsh-local", "description": "Local PowerShell implementation of the DeepSeek Harness bash executor seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/pwsh-sandbox/package.json b/packages/shell/pwsh-sandbox/package.json index 4753cd5b59..f84b190611 100644 --- a/packages/shell/pwsh-sandbox/package.json +++ b/packages/shell/pwsh-sandbox/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-pwsh-sandbox", "description": "Sandbox-consuming implementation of the DeepSeek Harness PowerShell executor seam (confines every command via ctx.sandbox, reports denial/enforcement result facts)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/shell-env/package.json b/packages/shell/shell-env/package.json index 3956bb1fbe..e3f703d06c 100644 --- a/packages/shell/shell-env/package.json +++ b/packages/shell/shell-env/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-shell-env", "description": "Tool-independent managed DSH_* shell environment registry", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/shell/package.json b/packages/shell/shell/package.json index 3ac7c3ffb6..e1f2098c99 100644 --- a/packages/shell/shell/package.json +++ b/packages/shell/shell/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-shell", "description": "Abstract bash executor seam (ctx.shell) for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-bash-persistent/package.json b/packages/shell/tool-bash-persistent/package.json index 082fd6d29b..bbffa67639 100644 --- a/packages/shell/tool-bash-persistent/package.json +++ b/packages/shell/tool-bash-persistent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-bash-persistent", "description": "Model-facing owner-scoped persistent Bash tool backed by the Harness PTY service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-bash/package.json b/packages/shell/tool-bash/package.json index a397e3f60b..fb2344e52e 100644 --- a/packages/shell/tool-bash/package.json +++ b/packages/shell/tool-bash/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-bash", "description": "Model-facing bash tool with optional generic background-job and sandbox-escalation support", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-pwsh-persistent/package.json b/packages/shell/tool-pwsh-persistent/package.json index 5758b6520b..83c46a32e7 100644 --- a/packages/shell/tool-pwsh-persistent/package.json +++ b/packages/shell/tool-pwsh-persistent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-pwsh-persistent", "description": "Model-facing owner-scoped persistent PowerShell tool backed by the Harness PTY service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-pwsh/package.json b/packages/shell/tool-pwsh/package.json index c814405b91..ee47f878c9 100644 --- a/packages/shell/tool-pwsh/package.json +++ b/packages/shell/tool-pwsh/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-pwsh", "description": "Model-facing pwsh tool over the bash executor seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-badge/package.json b/packages/skill/skill-badge/package.json index f7eab8c85a..cb94a7e099 100644 --- a/packages/skill/skill-badge/package.json +++ b/packages/skill/skill-badge/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-skill-badge", "description": "Bundled dsh badge skill provider for DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-filesystem/package.json b/packages/skill/skill-filesystem/package.json index 78aa78881e..61fdde451e 100644 --- a/packages/skill/skill-filesystem/package.json +++ b/packages/skill/skill-filesystem/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-skill-filesystem", "description": "Local filesystem skill provider for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-office/package.json b/packages/skill/skill-office/package.json index 1b1a3d79ff..1688462393 100644 --- a/packages/skill/skill-office/package.json +++ b/packages/skill/skill-office/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-skill-office", "description": "Bundled Word, PowerPoint, and Excel workflows and structural checks", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill/package.json b/packages/skill/skill/package.json index 211a20fa73..b86d959a93 100644 --- a/packages/skill/skill/package.json +++ b/packages/skill/skill/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-skill", "description": "Agent skill provider registry for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/tool-skill/package.json b/packages/skill/tool-skill/package.json index 49b6495630..8565f64cb4 100644 --- a/packages/skill/tool-skill/package.json +++ b/packages/skill/tool-skill/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-skill", "description": "Model-facing skill loading tool for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/skill/tool-workspace-dependencies/package.json b/packages/skill/tool-workspace-dependencies/package.json index 019644ea31..27e914db8a 100644 --- a/packages/skill/tool-workspace-dependencies/package.json +++ b/packages/skill/tool-workspace-dependencies/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-workspace-dependencies", "description": "The load_workspace_dependencies tool: absolute paths into a bundled Python, Node.js, and pnpm payload", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill-local/package.json b/packages/spill/spill-local/package.json index eb8e15b99d..f63886fc3c 100644 --- a/packages/spill/spill-local/package.json +++ b/packages/spill/spill-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-spill-local", "description": "Local-filesystem implementation of the DeepSeek Harness spill storage seam (private session-scoped files)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill-policy/package.json b/packages/spill/spill-policy/package.json index ecf5eb5ce6..5d30687ca8 100644 --- a/packages/spill/spill-policy/package.json +++ b/packages/spill/spill-policy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-spill-policy", "description": "Token-budgeted tool-result retention with recoverable text and image paths", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill/package.json b/packages/spill/spill/package.json index 3466cd5f43..3d0280c2ff 100644 --- a/packages/spill/spill/package.json +++ b/packages/spill/spill/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-spill", "description": "Abstract spill storage seam (ctx.spillStore) for the DeepSeek Harness — save oversized tool text and return a retrieval locator", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/fs-ssh/package.json b/packages/ssh/fs-ssh/package.json index e3e5455a40..a54b93c220 100644 --- a/packages/ssh/fs-ssh/package.json +++ b/packages/ssh/fs-ssh/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-fs-ssh", "description": "Filesystem provider over the shared POSIX SSH helper", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/sandbox-ssh/package.json b/packages/ssh/sandbox-ssh/package.json index f61b6fbda6..43f7beee32 100644 --- a/packages/ssh/sandbox-ssh/package.json +++ b/packages/ssh/sandbox-ssh/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-sandbox-ssh", "description": "Remote POSIX sandbox argv provider over the shared SSH helper", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 1cc2289b57..51a7985c4d 100644 --- a/packages/ssh/ssh/package.json +++ b/packages/ssh/ssh/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-ssh", "description": "Shared OpenSSH connection and versioned POSIX remote helper", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/subprocess-ssh/package.json b/packages/ssh/subprocess-ssh/package.json index 90e24535de..534ce1047e 100644 --- a/packages/ssh/subprocess-ssh/package.json +++ b/packages/ssh/subprocess-ssh/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subprocess-ssh", "description": "Subprocess and terminal provider over the shared POSIX SSH helper", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-domain/package.json b/packages/storage/storage-domain/package.json index a83948781d..8289e6e1f1 100644 --- a/packages/storage/storage-domain/package.json +++ b/packages/storage/storage-domain/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-storage-domain", "description": "Domain data form (ctx.storage.domain): schema-validated, event-emitting KV domains over storage backends for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-json/package.json b/packages/storage/storage-json/package.json index 7efc811c36..c7b821f3d1 100644 --- a/packages/storage/storage-json/package.json +++ b/packages/storage/storage-json/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-storage-json", "description": "JSON file KV storage backend for the DeepSeek Harness storage hub", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-sqlite/package.json b/packages/storage/storage-sqlite/package.json index 3b57ffd8c0..a629d826c3 100644 --- a/packages/storage/storage-sqlite/package.json +++ b/packages/storage/storage-sqlite/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-storage-sqlite", "description": "SQLite storage backend (kv facet) for the DeepSeek Harness storage hub", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage/package.json b/packages/storage/storage/package.json index 9c41ca9ee4..c26ed36083 100644 --- a/packages/storage/storage/package.json +++ b/packages/storage/storage/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-storage", "description": "Storage hub (ctx.storage): named backend registry plus mounted data-form facilities for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-acp/package.json b/packages/subagent/subagent-acp/package.json index c16896a5ff..3745aecd28 100644 --- a/packages/subagent/subagent-acp/package.json +++ b/packages/subagent/subagent-acp/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-acp", "description": "Out-of-process ACP subagent backend: drives a child agent in a spawned subprocess over the Agent Client Protocol", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-claude-code/package.json b/packages/subagent/subagent-claude-code/package.json index 6216690b4a..81b9aa0179 100644 --- a/packages/subagent/subagent-claude-code/package.json +++ b/packages/subagent/subagent-claude-code/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-claude-code", "description": "One-shot Claude Code subagent provider over the official Agent SDK", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-codex/package.json b/packages/subagent/subagent-codex/package.json index a44170636a..f8a91b9cde 100644 --- a/packages/subagent/subagent-codex/package.json +++ b/packages/subagent/subagent-codex/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-codex", "description": "One-shot Codex subagent provider over the official app-server protocol", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-dsh-sdk/package.json b/packages/subagent/subagent-dsh-sdk/package.json index ebb7f50ce7..0cbe5e956b 100644 --- a/packages/subagent/subagent-dsh-sdk/package.json +++ b/packages/subagent/subagent-dsh-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-dsh-sdk", "description": "Out-of-process SDK subagent backend: drives a child DeepSeek Harness runtime subprocess over stdio JSON-RPC through the TypeScript SDK client", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-fork-in-process/package.json b/packages/subagent/subagent-fork-in-process/package.json index f9b342dd01..acef860295 100644 --- a/packages/subagent/subagent-fork-in-process/package.json +++ b/packages/subagent/subagent-fork-in-process/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-fork-in-process", "description": "In-process fork subagent backend: runs a child agent seeded with a prefix of the parent's log", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-in-process-driver/package.json b/packages/subagent/subagent-in-process-driver/package.json index 066987a7e4..8e28fd631d 100644 --- a/packages/subagent/subagent-in-process-driver/package.json +++ b/packages/subagent/subagent-in-process-driver/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-in-process-driver", "description": "Shared in-process subagent run driver: drives a child agent on ctx.agents (used by the spawn and fork backends)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-spawn-in-process/package.json b/packages/subagent/subagent-spawn-in-process/package.json index 744fb203c6..f5288d0da0 100644 --- a/packages/subagent/subagent-spawn-in-process/package.json +++ b/packages/subagent/subagent-spawn-in-process/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent-spawn-in-process", "description": "In-process spawn subagent backend: runs a fresh child agent on ctx.agents", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent/package.json b/packages/subagent/subagent/package.json index 38fcf39a5f..eefcbd0ce7 100644 --- a/packages/subagent/subagent/package.json +++ b/packages/subagent/subagent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subagent", "description": "Abstract subagent seam (ctx.subagents): named-provider registry for delegating to child agents", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/tool-subagent-control/package.json b/packages/subagent/tool-subagent-control/package.json index c7573a393e..d9ef0b6d7b 100644 --- a/packages/subagent/tool-subagent-control/package.json +++ b/packages/subagent/tool-subagent-control/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-subagent-control", "description": "Globally named send_message, interrupt_agent, and list_agents tools over ctx.subagents continuations", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/tool-subagent/package.json b/packages/subagent/tool-subagent/package.json index eb16118d7b..3716d4c443 100644 --- a/packages/subagent/tool-subagent/package.json +++ b/packages/subagent/tool-subagent/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-subagent", "description": "Model-facing subagent delegation tool over the ctx.subagents seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/subprocess-local/package.json b/packages/subprocess/subprocess-local/package.json index 85b2055512..619ed1ccce 100644 --- a/packages/subprocess/subprocess-local/package.json +++ b/packages/subprocess/subprocess-local/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subprocess-local", "description": "Local-subprocess implementation of the DeepSeek Harness subprocess seam", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/subprocess/package.json b/packages/subprocess/subprocess/package.json index 84e1c0fbbc..66292ed4fb 100644 --- a/packages/subprocess/subprocess/package.json +++ b/packages/subprocess/subprocess/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-subprocess", "description": "Subprocess seam (ctx.subprocess) for the DeepSeek Harness \u2014 managed process groups, bounded spill-backed output, and escalated kills behind one abstract service", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/win32-process/package.json b/packages/subprocess/win32-process/package.json index 514f9f7ada..aa07aefd28 100644 --- a/packages/subprocess/win32-process/package.json +++ b/packages/subprocess/win32-process/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-win32-process", "description": "Shared low-level Win32 process, stdio, and Job Object primitives", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/terminal-bash/package.json b/packages/terminal/terminal-bash/package.json index 62a0fae23e..8e2187764f 100644 --- a/packages/terminal/terminal-bash/package.json +++ b/packages/terminal/terminal-bash/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-terminal-bash", "description": "Persistent shell PTY backend over the DeepSeek Harness subprocess terminal primitive", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/terminal/package.json b/packages/terminal/terminal/package.json index 697e9d4ebd..0f56f616a1 100644 --- a/packages/terminal/terminal/package.json +++ b/packages/terminal/terminal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-terminal", "description": "Persistent PTY session seam for the DeepSeek Harness — owner-scoped ids, backend registry, interactive sends, reads, signals, and awaited cleanup", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/tool-terminal/package.json b/packages/terminal/tool-terminal/package.json index 1688847288..5ae2d3b654 100644 --- a/packages/terminal/tool-terminal/package.json +++ b/packages/terminal/tool-terminal/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-terminal", "description": "Six model-facing persistent PTY tools with owner isolation and generic background-job integration", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/agent-loop-testkit/package.json b/packages/test-support/agent-loop-testkit/package.json index e41a535c86..9ffdb7449f 100644 --- a/packages/test-support/agent-loop-testkit/package.json +++ b/packages/test-support/agent-loop-testkit/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-agent-loop-testkit", "description": "Prerequisite mounting, production AgentLoop drivers, and Inbox stubs for tests", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/client-runtime/package.json b/packages/test-support/client-runtime/package.json index b4e5a20033..94ab73a023 100644 --- a/packages/test-support/client-runtime/package.json +++ b/packages/test-support/client-runtime/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-client-test-runtime", "description": "Browser test runtimes: a jsdom slot bench with test-owned Session and Workspace doubles, and a whole-client tier that boots the web roster through the production bootClient over an endpoint-named Remote mock", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/llm-mock-server/package.json b/packages/test-support/llm-mock-server/package.json index e7c1a25aef..4f4888c170 100644 --- a/packages/test-support/llm-mock-server/package.json +++ b/packages/test-support/llm-mock-server/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-mock-server", "description": "Scriptable Messages HTTP/SSE fault server for LLM recovery tests", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/llm-replay/package.json b/packages/test-support/llm-replay/package.json index 9e7e1b69fe..88dd0b0b3d 100644 --- a/packages/test-support/llm-replay/package.json +++ b/packages/test-support/llm-replay/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-replay", "description": "Replay LLM plugin: short-circuits llm/stream with model chunks reconstructed from a recorded session JSONL (keyless snapshot tests)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/loader-smoke/package.json b/packages/test-support/loader-smoke/package.json index 18c6d0a9f2..f841828c71 100644 --- a/packages/test-support/loader-smoke/package.json +++ b/packages/test-support/loader-smoke/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-loader-smoke", "description": "Shared subprocess and direct-agent harness for keyless real-Loader example smoke tests", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/remote-mock/package.json b/packages/test-support/remote-mock/package.json index a3186958b2..334bcdaae1 100644 --- a/packages/test-support/remote-mock/package.json +++ b/packages/test-support/remote-mock/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-remote-mock", "description": "Endpoint-named mock for Typert Remote traffic: unary answers and stream scripts per /, live stream control, a log, and the Connection carrier face whole-client specs install", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/session-snapshot/package.json b/packages/test-support/session-snapshot/package.json index 9364e43e0e..d483b184ba 100644 --- a/packages/test-support/session-snapshot/package.json +++ b/packages/test-support/session-snapshot/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-session-snapshot", "description": "Session-log snapshot core with an ACP protocol adapter, expected-output normalization, and fixture invariants", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/todo/tool-todo/package.json b/packages/todo/tool-todo/package.json index bbd0fed447..225fe547c1 100644 --- a/packages/todo/tool-todo/package.json +++ b/packages/todo/tool-todo/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-todo", "description": "Model-facing todo_write tool over the DeepSeek Harness event-sourced session log", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/typert/generator/package.json b/packages/typert/generator/package.json index 94055dde80..420d3628d7 100644 --- a/packages/typert/generator/package.json +++ b/packages/typert/generator/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-typert-generator", "description": "TypeScript project analyzer and model-driven Typert artifact generator", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/typert/loader/package.json b/packages/typert/loader/package.json index 38323ae71d..14e5c431f1 100644 --- a/packages/typert/loader/package.json +++ b/packages/typert/loader/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-typert-loader", "description": "Loader integration for generated Typert package contributions", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/typert/protocol/package.json b/packages/typert/protocol/package.json index c4c81b1377..c1802af815 100644 --- a/packages/typert/protocol/package.json +++ b/packages/typert/protocol/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-typert-protocol", "description": "Compiler-independent Remote metadata and Typert provider protocols", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/typert/registry/package.json b/packages/typert/registry/package.json index 2fa54b854f..5e4087237c 100644 --- a/packages/typert/registry/package.json +++ b/packages/typert/registry/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-typert-registry", "description": "Runtime registry for generated package reflection and Zod schemas", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/atomic-write/package.json b/packages/util/atomic-write/package.json index 44227e213d..97230df112 100644 --- a/packages/util/atomic-write/package.json +++ b/packages/util/atomic-write/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-atomic-write", "description": "Zero-dependency atomic file replacement: exclusive-create random-suffix temp + rename carrying the caller-stated permissions (writeFileAtomic)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/brand/package.json b/packages/util/brand/package.json index d5127c46c1..6e33e96332 100644 --- a/packages/util/brand/package.json +++ b/packages/util/brand/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-brand", "description": "Stateless branded primitive types for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/chunked-list/package.json b/packages/util/chunked-list/package.json index 3ae771f041..bc5b398fba 100644 --- a/packages/util/chunked-list/package.json +++ b/packages/util/chunked-list/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-chunked-list", "description": "Persistent append-only chunked lists with bounded copying and JSON checkpoint validation", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/crypto/package.json b/packages/util/crypto/package.json index 1c83ac57f6..d66f389861 100644 --- a/packages/util/crypto/package.json +++ b/packages/util/crypto/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-util-crypto", "description": "Zero-dependency browser-safe UUID and byte-encoding helpers", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/deque/package.json b/packages/util/deque/package.json index 53f4e535a0..2b40774ee4 100644 --- a/packages/util/deque/package.json +++ b/packages/util/deque/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-deque", "description": "Zero-dependency circular deque with amortized constant-time end operations and bounded vacant storage", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/home-paths/package.json b/packages/util/home-paths/package.json index 23af68a4a2..6352765189 100644 --- a/packages/util/home-paths/package.json +++ b/packages/util/home-paths/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-home-paths", "description": "Shared filesystem path helpers for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/http-proxy/package.json b/packages/util/http-proxy/package.json index 5cdc0c5179..25bf04852d 100644 --- a/packages/util/http-proxy/package.json +++ b/packages/util/http-proxy/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-http-proxy", "description": "Process-wide outbound HTTP proxy policy for DeepSeek Harness: resolve it from the launch environment and install it as undici's global dispatcher", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/launch-environment/package.json b/packages/util/launch-environment/package.json index 77ce691086..f3bca306ec 100644 --- a/packages/util/launch-environment/package.json +++ b/packages/util/launch-environment/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-launch-environment", "description": "Immutable DeepSeek Harness launch environment that records which layer supplied each value", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/lazy-require/package.json b/packages/util/lazy-require/package.json index 4f1dcafdc8..9899a8e161 100644 --- a/packages/util/lazy-require/package.json +++ b/packages/util/lazy-require/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-lazy-require", "description": "Caller-relative, success-cached lazy loading for CommonJS-compatible Host dependencies", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/native-command/package.json b/packages/util/native-command/package.json index 8fa10e9d7a..28c93eac7e 100644 --- a/packages/util/native-command/package.json +++ b/packages/util/native-command/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-native-command", "description": "Host-native command and path-opening utilities with shell-free execution, cancellation, desktop detection, and WSL handoff", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/output-retention/package.json b/packages/util/output-retention/package.json index b1c35111d7..d606d753d5 100644 --- a/packages/util/output-retention/package.json +++ b/packages/util/output-retention/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-output-retention", "description": "Zero-dependency bounded-retention primitive: ItemRetainer/TextRetainer + neutral notice helpers (what did we keep, what did we omit)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/package-manifest/package.json b/packages/util/package-manifest/package.json index c60a771c8c..95a36dcf71 100644 --- a/packages/util/package-manifest/package.json +++ b/packages/util/package-manifest/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-package-manifest", "description": "Shared type declarations for package.json.dsh configuration fields", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/time/package.json b/packages/util/time/package.json index 1b22e958bb..8aea082411 100644 --- a/packages/util/time/package.json +++ b/packages/util/time/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-util-time", "description": "Zero-dependency time vocabulary shared by wire boundaries: canonicalClientTimeZone (IANA zone validation and canonicalization only, no formatting)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/timeout/package.json b/packages/util/timeout/package.json index 5d15a2d582..d6c90cb36f 100644 --- a/packages/util/timeout/package.json +++ b/packages/util/timeout/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-timeout", "description": "Zero-dependency timeout/deadline primitive: clampTimeout, deadline, timeoutOf, TimeoutReason (timing + classification only, no termination)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/values/package.json b/packages/util/values/package.json index 3404c228bc..a003abf910 100644 --- a/packages/util/values/package.json +++ b/packages/util/values/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-util-values", "description": "Duplicate-install-safe value primitives for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/util/workspace-path/package.json b/packages/util/workspace-path/package.json index 6cdf54003c..b54ed43429 100644 --- a/packages/util/workspace-path/package.json +++ b/packages/util/workspace-path/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-util-workspace-path", "description": "Browser-safe Workspace path and display helpers", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/tool-web/package.json b/packages/web/tool-web/package.json index e2c40b37dc..c433d92760 100644 --- a/packages/web/tool-web/package.json +++ b/packages/web/tool-web/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-web", "description": "Model-facing web tools (web_search, web_fetch) over the DeepSeek Harness web capability seam (ctx.web)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-fetch-http/package.json b/packages/web/web-fetch-http/package.json index aa31af13ec..b205864173 100644 --- a/packages/web/web-fetch-http/package.json +++ b/packages/web/web-fetch-http/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-fetch-http", "description": "Anonymous public HTTP(S) fetch provider for the DeepSeek Harness web capability seam (ctx.web)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-deepseek/package.json b/packages/web/web-search-deepseek/package.json index f92130d3d8..c4ac302f27 100644 --- a/packages/web/web-search-deepseek/package.json +++ b/packages/web/web-search-deepseek/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-search-deepseek", "description": "DeepSeek-backed search provider (native web_search via the Anthropic-compatible API) for the DeepSeek Harness web capability seam (ctx.web)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-exa/package.json b/packages/web/web-search-exa/package.json index 2816290bf3..35cefd7726 100644 --- a/packages/web/web-search-exa/package.json +++ b/packages/web/web-search-exa/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-search-exa", "description": "Exa-backed search provider for the DeepSeek Harness web capability seam (ctx.web)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-perplexity/package.json b/packages/web/web-search-perplexity/package.json index 89ddfc7b6f..b753dff5e2 100644 --- a/packages/web/web-search-perplexity/package.json +++ b/packages/web/web-search-perplexity/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web-search-perplexity", "description": "Perplexity-backed search provider for the DeepSeek Harness web capability seam (ctx.web)", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/web/web/package.json b/packages/web/web/package.json index 010eb41dec..c4cb82ba3f 100644 --- a/packages/web/web/package.json +++ b/packages/web/web/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-web", "description": "Abstract web access capability seam (ctx.web) for the DeepSeek Harness — search/fetch provider registry, registration-order-independent selection, request/result vocabulary, and the WebError taxonomy", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/webhook/webhook-github/package.json b/packages/webhook/webhook-github/package.json index ad6ce72720..162b593062 100644 --- a/packages/webhook/webhook-github/package.json +++ b/packages/webhook/webhook-github/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-webhook-github", "description": "Signed GitHub HTTP webhook adapter for the DeepSeek Harness webhook runtime", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/webhook/webhook/package.json b/packages/webhook/webhook/package.json index 28b02bd05b..23ba9a23d9 100644 --- a/packages/webhook/webhook/package.json +++ b/packages/webhook/webhook/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-webhook", "description": "Fire-and-forget webhook rule runtime that creates Workspace-backed DeepSeek Harness Sessions", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/tool-ralph/package.json b/packages/workflow/tool-ralph/package.json index d2e76f3364..3c80c28919 100644 --- a/packages/workflow/tool-ralph/package.json +++ b/packages/workflow/tool-ralph/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-ralph", "description": "Model-facing fresh-agent Ralph loop over the workflow and subagent seams", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/tool-workflow/package.json b/packages/workflow/tool-workflow/package.json index ac3d65e9e0..d042f1789b 100644 --- a/packages/workflow/tool-workflow/package.json +++ b/packages/workflow/tool-workflow/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-tool-workflow", "description": "Model-facing workflow tool: run a JavaScript orchestration script over ctx.workflowEngine", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/workflow-ptc/package.json b/packages/workflow/workflow-ptc/package.json index fe776b7bb7..9409a0757c 100644 --- a/packages/workflow/workflow-ptc/package.json +++ b/packages/workflow/workflow-ptc/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-workflow-ptc", "description": "Workflow orchestration in the shared sandboxed Node PTC runtime", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/workflow/package.json b/packages/workflow/workflow/package.json index 7ffbb48324..c5bfed09db 100644 --- a/packages/workflow/workflow/package.json +++ b/packages/workflow/workflow/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-workflow", "description": "Workflow capability seam: ctx.workflowEngine service, run vocabulary, and workflow/* events", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/workspace/workspace/package.json b/packages/workspace/workspace/package.json index eab12aee36..548a031db6 100644 --- a/packages/workspace/workspace/package.json +++ b/packages/workspace/workspace/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-workspace", "description": "Workspace entity registry (ctx.workspaceRegistry): durable workspace records with validated session attachment over the domain data form for the DeepSeek Harness", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, From 3cf49f26ab91c5c1b7c2e7a232e62c562162367f Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:52:16 +0800 Subject: [PATCH 55/60] fix(account): cover live notices and satisfy CI checks --- apps/desktop/tests/account-backend.spec.ts | 5 +- docs/module-graph.i18n.yaml | 4 +- docs/module-graph.md | 67 +++++++++++-------- docs/module-graph.zh.md | 67 +++++++++++-------- .../tests/session-models.host.spec.ts | 4 +- .../tests/account.client.spec.tsx | 6 ++ .../tests/apply.client.spec.ts | 25 +++++++ .../llm/llm-deepseek-api-key/src/index.ts | 4 +- 8 files changed, 120 insertions(+), 62 deletions(-) diff --git a/apps/desktop/tests/account-backend.spec.ts b/apps/desktop/tests/account-backend.spec.ts index 48dd4e3133..e82dd5601b 100644 --- a/apps/desktop/tests/account-backend.spec.ts +++ b/apps/desktop/tests/account-backend.spec.ts @@ -38,7 +38,7 @@ it('receives live expiry separately from account snapshots', async () => { await once(server, 'listening') onTestFinished(async () => { for (const client of server.clients) client.terminate() - await new Promise((resolve, reject) => { server.close(error => error ? reject(error) : resolve()) }) + await new Promise((resolve, reject) => { server.close((error) => { if (error) reject(error); else resolve() }) }) }) const address = server.address() if (typeof address === 'string' || address === null) throw new Error('missing server address') @@ -56,7 +56,8 @@ it('receives live expiry separately from account snapshots', async () => { const opened = Promise.withResolvers() const socket = [...server.clients][0]! socket.on('message', (data) => { - const frame = JSON.parse(data.toString()) as { endpoint: string; streamId: string } + if (!Buffer.isBuffer(data)) throw new Error('expected a Buffer WebSocket frame') + const frame = JSON.parse(data.toString('utf8')) as { endpoint: string; streamId: string } streams.set(frame.endpoint, frame.streamId) if (streams.size === 2) opened.resolve(undefined) }) diff --git a/docs/module-graph.i18n.yaml b/docs/module-graph.i18n.yaml index 32276ebf2e..aef79e8af5 100644 --- a/docs/module-graph.i18n.yaml +++ b/docs/module-graph.i18n.yaml @@ -2,5 +2,5 @@ # 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 docs/module-graph.md -module-graph.md: bff30ef9bc6b2ad54bbf8913a52b30a58249e753 -module-graph.zh.md: 683dc6ce9f0f3e134043ec9dc77845811acb2057 +module-graph.md: 946692fd4b0528444391fca6aa8bffec46eb455c +module-graph.zh.md: 5048c2deab70b62ce9795dc7f6f9e14bae2ca732 diff --git a/docs/module-graph.md b/docs/module-graph.md index bff30ef9bc..946692fd4b 100644 --- a/docs/module-graph.md +++ b/docs/module-graph.md @@ -29,6 +29,8 @@ flowchart TD pkg_deepseek_llm_api_extensions["deepseek-llm-api-extensions"] pkg_llm["llm"] pkg_llm_deepseek["llm-deepseek"] + pkg_llm_deepseek_account["llm-deepseek-account"] + pkg_llm_deepseek_api_key["llm-deepseek-api-key"] pkg_llm_pi_ai["llm-pi-ai"] pkg_llm_retry["llm-retry"] pkg_plugin_package_inventory_deepseek["plugin-package-inventory-deepseek"] @@ -428,7 +430,6 @@ flowchart TD pkg_browser_use --> pkg_brand pkg_computer_use --> pkg_brand pkg_credentials --> pkg_invariants - pkg_deepseek_account --> pkg_brand pkg_experimental_inspector --> pkg_client_modules pkg_experimental_inspector --> pkg_host_webserver pkg_host_directory_picker_auto --> pkg_client_ui_directory_picker_browse @@ -486,10 +487,6 @@ flowchart TD pkg_app_boot --> pkg_home_paths pkg_app_boot --> pkg_launch_environment pkg_app_boot --> pkg_system_prompt - pkg_deepseek_account_platform --> pkg_authorization - pkg_deepseek_account_platform --> pkg_credentials - pkg_deepseek_account_platform --> pkg_deepseek_account - pkg_deepseek_account_platform --> pkg_host_webserver pkg_experimental_webworker_runtime --> pkg_client_connection pkg_experimental_webworker_runtime --> pkg_client_modules pkg_experimental_webworker_runtime --> pkg_host_webserver @@ -544,6 +541,15 @@ flowchart TD pkg_workspace --> pkg_storage pkg_workspace --> pkg_storage_domain pkg_workspace --> pkg_typert_protocol + pkg_llm_deepseek --> pkg_anonymous_user_id + pkg_llm_deepseek --> pkg_atomic_write + pkg_llm_deepseek --> pkg_attachment + pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions + pkg_llm_deepseek --> pkg_fs + pkg_llm_deepseek --> pkg_home_paths + pkg_llm_deepseek --> pkg_launch_environment + pkg_llm_deepseek --> pkg_llm + pkg_llm_deepseek --> pkg_timeout pkg_llm_pi_ai --> pkg_attachment pkg_llm_pi_ai --> pkg_authorization pkg_llm_pi_ai --> pkg_credentials @@ -596,18 +602,10 @@ flowchart TD pkg_pwsh_local --> pkg_shell pkg_pwsh_local --> pkg_subprocess pkg_pwsh_local --> pkg_timeout - pkg_llm_deepseek --> pkg_agent - pkg_llm_deepseek --> pkg_anonymous_user_id - pkg_llm_deepseek --> pkg_atomic_write - pkg_llm_deepseek --> pkg_attachment - pkg_llm_deepseek --> pkg_credentials - pkg_llm_deepseek --> pkg_deepseek_account - pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions - pkg_llm_deepseek --> pkg_fs - pkg_llm_deepseek --> pkg_home_paths - pkg_llm_deepseek --> pkg_launch_environment - pkg_llm_deepseek --> pkg_llm - pkg_llm_deepseek --> pkg_timeout + pkg_llm_deepseek_api_key --> pkg_credentials + pkg_llm_deepseek_api_key --> pkg_launch_environment + pkg_llm_deepseek_api_key --> pkg_llm + pkg_llm_deepseek_api_key --> pkg_llm_deepseek pkg_llm_retry --> pkg_agent pkg_llm_retry --> pkg_brand pkg_llm_retry --> pkg_invariants @@ -630,9 +628,6 @@ flowchart TD pkg_web_search_deepseek --> pkg_launch_environment pkg_web_search_deepseek --> pkg_session pkg_web_search_deepseek --> pkg_web - pkg_api_account_controller --> pkg_agent - pkg_api_account_controller --> pkg_deepseek_account - pkg_api_account_controller --> pkg_typert_protocol pkg_file_reference --> pkg_agent pkg_time_context --> pkg_agent pkg_time_context --> pkg_invariants @@ -643,6 +638,9 @@ flowchart TD pkg_tmux_context --> pkg_session pkg_tmux_context --> pkg_session_projection pkg_tmux_context --> pkg_shell + pkg_deepseek_account --> pkg_agent + pkg_deepseek_account --> pkg_brand + pkg_deepseek_account --> pkg_llm pkg_commands --> pkg_agent pkg_commands --> pkg_attachment pkg_commands --> pkg_brand @@ -691,6 +689,10 @@ flowchart TD pkg_workflow --> pkg_invariants pkg_workflow --> pkg_llm pkg_workflow --> pkg_session + pkg_llm_deepseek_account --> pkg_deepseek_account + pkg_llm_deepseek_account --> pkg_launch_environment + pkg_llm_deepseek_account --> pkg_llm + pkg_llm_deepseek_account --> pkg_llm_deepseek pkg_tools --> pkg_agent pkg_tools --> pkg_invariants pkg_tools --> pkg_llm @@ -713,11 +715,18 @@ flowchart TD pkg_fs_sandbox --> pkg_fs_local pkg_fs_sandbox --> pkg_sandbox pkg_fs_sandbox --> pkg_sandbox_policy + pkg_api_account_controller --> pkg_agent + pkg_api_account_controller --> pkg_deepseek_account + pkg_api_account_controller --> pkg_typert_protocol pkg_compaction --> pkg_brand pkg_compaction --> pkg_commands pkg_compaction --> pkg_invariants pkg_compaction --> pkg_llm pkg_compaction --> pkg_session + pkg_deepseek_account_platform --> pkg_authorization + pkg_deepseek_account_platform --> pkg_credentials + pkg_deepseek_account_platform --> pkg_deepseek_account + pkg_deepseek_account_platform --> pkg_host_webserver pkg_command_feedback --> pkg_anonymous_user_id pkg_command_feedback --> pkg_commands pkg_command_feedback --> pkg_session @@ -1205,6 +1214,7 @@ flowchart TD pkg_api_session_controller --> pkg_client_connection pkg_api_session_controller --> pkg_client_file_upload pkg_api_session_controller --> pkg_commands + pkg_api_session_controller --> pkg_credentials pkg_api_session_controller --> pkg_file_reference pkg_api_session_controller --> pkg_fs pkg_api_session_controller --> pkg_llm @@ -1216,6 +1226,7 @@ flowchart TD pkg_api_session_controller --> pkg_session_projection_cache pkg_api_session_controller --> pkg_session_query pkg_api_session_controller --> pkg_session_title + pkg_api_session_controller --> pkg_settings pkg_api_session_controller --> pkg_skill pkg_api_session_controller --> pkg_subagent pkg_api_session_controller --> pkg_typert_protocol @@ -1311,7 +1322,7 @@ flowchart TD pkg_sdk_jsonrpc_server --> pkg_agent pkg_sdk_jsonrpc_server --> pkg_attachment pkg_sdk_jsonrpc_server --> pkg_llm - pkg_sdk_jsonrpc_server --> pkg_llm_deepseek + pkg_sdk_jsonrpc_server --> pkg_llm_deepseek_api_key pkg_sdk_jsonrpc_server --> pkg_scope pkg_sdk_jsonrpc_server --> pkg_sdk_protocol pkg_sdk_jsonrpc_server --> pkg_session @@ -1457,7 +1468,6 @@ flowchart TD | [`browser-use`](../packages/browser-use/browser-use) | `browser-use` | [`brand`](../packages/util/brand) | | [`computer-use`](../packages/computer-use/computer-use) | `computer-use` | [`brand`](../packages/util/brand) | | [`credentials`](../packages/credentials/credentials) | `credentials` | [`invariants`](../packages/runtime-diagnostics/invariants) | -| [`deepseek-account`](../packages/credentials/deepseek-account) | `credentials` | [`brand`](../packages/util/brand) | | [`experimental-inspector`](../packages/experimental/inspector) | `experimental` | [`client-modules`](../packages/client/modules), [`host-webserver`](../packages/host/webserver) | | [`host-directory-picker-auto`](../packages/host/directory-picker-auto) | `host` | [`client-ui-directory-picker-browse`](../packages/client/ui-directory-picker-browse), [`client-ui-directory-picker-native`](../packages/client/ui-directory-picker-native), [`host-directory-picker-browse`](../packages/host/directory-picker-browse), [`host-directory-picker-native`](../packages/host/directory-picker-native), [`host-webserver`](../packages/host/webserver) | | [`anonymous-user-id`](../packages/identity/anonymous-user-id) | `identity` | [`brand`](../packages/util/brand), [`home-paths`](../packages/util/home-paths) | @@ -1489,7 +1499,6 @@ flowchart TD | [`spill`](../packages/spill/spill) | `spill` | [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`api-gateway`](../packages/api/gateway) | `api` | [`client-connection`](../packages/client/connection) | | [`app-boot`](../packages/boot/app-boot) | `boot` | [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`system-prompt`](../packages/core/system-prompt) | -| [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | `credentials` | [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`host-webserver`](../packages/host/webserver) | | [`experimental-webworker-runtime`](../packages/experimental/webworker-runtime) | `experimental` | [`client-connection`](../packages/client/connection), [`client-modules`](../packages/client/modules), [`host-webserver`](../packages/host/webserver) | | [`host-frontend-static`](../packages/host/frontend-static) | `host` | [`client-connection`](../packages/client/connection), [`host-webserver`](../packages/host/webserver) | | [`persona`](../packages/preset/persona) | `preset` | [`system-prompt`](../packages/core/system-prompt) | @@ -1513,6 +1522,7 @@ flowchart TD | [`session-turn-outline`](../packages/session/session-turn-outline) | `session` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`shell`](../packages/shell/shell) | `shell` | [`sandbox`](../packages/sandbox/sandbox), [`subprocess`](../packages/subprocess/subprocess) | | [`workspace`](../packages/workspace/workspace) | `workspace` | [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`storage`](../packages/storage/storage), [`storage-domain`](../packages/storage/storage-domain), [`typert-protocol`](../packages/typert/protocol) | +| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | `llm` | [`attachment`](../packages/attachment/attachment), [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`fs`](../packages/fs/fs), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`agent`](../packages/core/agent) | `core` | [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol), [`util-values`](../packages/util/values), [`workspace`](../packages/workspace/workspace) | | [`fs-local`](../packages/fs/fs-local) | `fs` | [`fs`](../packages/fs/fs) | @@ -1527,15 +1537,15 @@ flowchart TD | [`lsp-stdio`](../packages/lsp/lsp-stdio) | `lsp` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`lsp`](../packages/lsp/lsp), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`bash-local`](../packages/shell/bash-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`pwsh-local`](../packages/shell/pwsh-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | -| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`agent`](../packages/core/agent), [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | +| [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key) | `llm` | [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek) | | [`llm-retry`](../packages/llm/llm-retry) | `llm` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`timeout`](../packages/util/timeout) | | [`agent-default-model`](../packages/core/agent-default-model) | `core` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm) | | [`goal`](../packages/goal/goal) | `goal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`typert-protocol`](../packages/typert/protocol) | | [`web-search-deepseek`](../packages/web/web-search-deepseek) | `web` | [`agent`](../packages/core/agent), [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`session`](../packages/core/session), [`web`](../packages/web/web) | -| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`file-reference`](../packages/context/file-reference) | `context` | [`agent`](../packages/core/agent) | | [`time-context`](../packages/context/time-context) | `context` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`tmux-context`](../packages/context/tmux-context) | `context` | [`agent`](../packages/core/agent), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell) | +| [`deepseek-account`](../packages/credentials/deepseek-account) | `credentials` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm) | | [`commands`](../packages/interaction/commands) | `interaction` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`user-approval`](../packages/interaction/user-approval) | `interaction` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt) | | [`user-questions`](../packages/interaction/user-questions) | `interaction` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope) | @@ -1546,11 +1556,14 @@ flowchart TD | [`terminal`](../packages/terminal/terminal) | `terminal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand) | | [`loader-smoke`](../packages/test-support/loader-smoke) | `test-support` | [`agent`](../packages/core/agent), [`http-proxy`](../packages/util/http-proxy), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`workflow`](../packages/workflow/workflow) | `workflow` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | +| [`llm-deepseek-account`](../packages/llm/llm-deepseek-account) | `llm` | [`deepseek-account`](../packages/credentials/deepseek-account), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek) | | [`tools`](../packages/core/tools) | `core` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`ptc-runtime`](../packages/ptc-runtime/ptc-runtime), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`user-approval`](../packages/interaction/user-approval) | | [`command-goal`](../packages/goal/command-goal) | `goal` | [`commands`](../packages/interaction/commands), [`goal`](../packages/goal/goal), [`llm`](../packages/llm/llm) | | [`goal-round-driver`](../packages/goal/goal-round-driver) | `goal` | [`agent`](../packages/core/agent), [`goal`](../packages/goal/goal), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`fs-sandbox`](../packages/fs/fs-sandbox) | `fs` | [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy) | +| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`compaction`](../packages/compaction/compaction) | `compaction` | [`brand`](../packages/util/brand), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | +| [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | `credentials` | [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`host-webserver`](../packages/host/webserver) | | [`command-feedback`](../packages/feedback/command-feedback) | `feedback` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`commands`](../packages/interaction/commands), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`permission-presets`](../packages/interaction/permission-presets) | `interaction` | [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell), [`typert-protocol`](../packages/typert/protocol), [`user-approval`](../packages/interaction/user-approval) | | [`jobs-local`](../packages/jobs/jobs-local) | `jobs` | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`scope`](../packages/core/scope), [`timeout`](../packages/util/timeout) | @@ -1636,7 +1649,7 @@ flowchart TD | [`tool-subagent`](../packages/subagent/tool-subagent) | `subagent` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`tool-subagent-control`](../packages/subagent/tool-subagent-control) | `subagent` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`tools`](../packages/core/tools) | | [`hooks-claude-code`](../packages/hooks/hooks-claude-code) | `hooks` | [`agent`](../packages/core/agent), [`hook-protocol`](../packages/hooks/hook-protocol), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent), [`tools`](../packages/core/tools) | -| [`api-session-controller`](../packages/api/session-controller) | `api` | [`agent`](../packages/core/agent), [`agent-default-model`](../packages/core/agent-default-model), [`agent-preset-registry`](../packages/preset/agent-preset-registry), [`api-gateway`](../packages/api/gateway), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-file-upload`](../packages/client/file-upload), [`commands`](../packages/interaction/commands), [`file-reference`](../packages/context/file-reference), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`native-command`](../packages/util/native-command), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`skill`](../packages/skill/skill), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol), [`typert-registry`](../packages/typert/registry), [`util-time`](../packages/util/time), [`util-values`](../packages/util/values), [`util-workspace-path`](../packages/util/workspace-path), [`workspace`](../packages/workspace/workspace) | +| [`api-session-controller`](../packages/api/session-controller) | `api` | [`agent`](../packages/core/agent), [`agent-default-model`](../packages/core/agent-default-model), [`agent-preset-registry`](../packages/preset/agent-preset-registry), [`api-gateway`](../packages/api/gateway), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-file-upload`](../packages/client/file-upload), [`commands`](../packages/interaction/commands), [`credentials`](../packages/credentials/credentials), [`file-reference`](../packages/context/file-reference), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`native-command`](../packages/util/native-command), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`settings`](../packages/settings/settings), [`skill`](../packages/skill/skill), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol), [`typert-registry`](../packages/typert/registry), [`util-time`](../packages/util/time), [`util-values`](../packages/util/values), [`util-workspace-path`](../packages/util/workspace-path), [`workspace`](../packages/workspace/workspace) | | [`compaction-basic`](../packages/compaction/compaction-basic) | `compaction` | [`agent`](../packages/core/agent), [`commands`](../packages/interaction/commands), [`compaction`](../packages/compaction/compaction), [`compaction-tool-result-pruner`](../packages/compaction/compaction-tool-result-pruner), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`token-meter`](../packages/llm/token-meter) | | [`session-reference`](../packages/context/session-reference) | `context` | [`agent`](../packages/core/agent), [`compaction`](../packages/compaction/compaction), [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`spill`](../packages/spill/spill), [`subagent`](../packages/subagent/subagent), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol) | | [`experimental-agent-team`](../packages/experimental/agent-team) | `experimental` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent) | @@ -1649,6 +1662,6 @@ flowchart TD | [`experimental-client-ui-voice-input`](../packages/experimental/client-ui-voice-input) | `experimental` | [`api-gateway`](../packages/api/gateway), [`api-remotes`](../packages/api/remotes), [`api-session-controller`](../packages/api/session-controller), [`client-locale`](../packages/client/locale), [`client-store`](../packages/client/store), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-plugin-manager`](../packages/client/ui-plugin-manager), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-slots`](../packages/client/ui-slots), [`experimental-api-speech-to-text`](../packages/experimental/api-speech-to-text), [`experimental-speech-to-text`](../packages/experimental/speech-to-text), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | `experimental` | [`agent`](../packages/core/agent), [`experimental-agent-team`](../packages/experimental/agent-team), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`sdk-client`](../packages/sdk/client) | `sdk` | [`llm`](../packages/llm/llm), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session) | -| [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | +| [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | | [`client-test-runtime`](../packages/test-support/client-runtime) | `test-support` | [`api-gateway`](../packages/api/gateway), [`api-session-controller`](../packages/api/session-controller), [`api-workspace-controller`](../packages/api/workspace-controller), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-hmr`](../packages/client/hmr), [`client-modules`](../packages/client/modules), [`client-store`](../packages/client/store), [`client-ui-chat`](../packages/client/ui-chat), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`client-web`](../packages/client/web), [`remote-mock`](../packages/test-support/remote-mock), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol) | | [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | `subagent` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`sdk-client`](../packages/sdk/client), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`subprocess`](../packages/subprocess/subprocess) | diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md index 683dc6ce9f..5048c2deab 100644 --- a/docs/module-graph.zh.md +++ b/docs/module-graph.zh.md @@ -31,6 +31,8 @@ flowchart TD pkg_deepseek_llm_api_extensions["deepseek-llm-api-extensions"] pkg_llm["llm"] pkg_llm_deepseek["llm-deepseek"] + pkg_llm_deepseek_account["llm-deepseek-account"] + pkg_llm_deepseek_api_key["llm-deepseek-api-key"] pkg_llm_pi_ai["llm-pi-ai"] pkg_llm_retry["llm-retry"] pkg_plugin_package_inventory_deepseek["plugin-package-inventory-deepseek"] @@ -430,7 +432,6 @@ flowchart TD pkg_browser_use --> pkg_brand pkg_computer_use --> pkg_brand pkg_credentials --> pkg_invariants - pkg_deepseek_account --> pkg_brand pkg_experimental_inspector --> pkg_client_modules pkg_experimental_inspector --> pkg_host_webserver pkg_host_directory_picker_auto --> pkg_client_ui_directory_picker_browse @@ -488,10 +489,6 @@ flowchart TD pkg_app_boot --> pkg_home_paths pkg_app_boot --> pkg_launch_environment pkg_app_boot --> pkg_system_prompt - pkg_deepseek_account_platform --> pkg_authorization - pkg_deepseek_account_platform --> pkg_credentials - pkg_deepseek_account_platform --> pkg_deepseek_account - pkg_deepseek_account_platform --> pkg_host_webserver pkg_experimental_webworker_runtime --> pkg_client_connection pkg_experimental_webworker_runtime --> pkg_client_modules pkg_experimental_webworker_runtime --> pkg_host_webserver @@ -546,6 +543,15 @@ flowchart TD pkg_workspace --> pkg_storage pkg_workspace --> pkg_storage_domain pkg_workspace --> pkg_typert_protocol + pkg_llm_deepseek --> pkg_anonymous_user_id + pkg_llm_deepseek --> pkg_atomic_write + pkg_llm_deepseek --> pkg_attachment + pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions + pkg_llm_deepseek --> pkg_fs + pkg_llm_deepseek --> pkg_home_paths + pkg_llm_deepseek --> pkg_launch_environment + pkg_llm_deepseek --> pkg_llm + pkg_llm_deepseek --> pkg_timeout pkg_llm_pi_ai --> pkg_attachment pkg_llm_pi_ai --> pkg_authorization pkg_llm_pi_ai --> pkg_credentials @@ -598,18 +604,10 @@ flowchart TD pkg_pwsh_local --> pkg_shell pkg_pwsh_local --> pkg_subprocess pkg_pwsh_local --> pkg_timeout - pkg_llm_deepseek --> pkg_agent - pkg_llm_deepseek --> pkg_anonymous_user_id - pkg_llm_deepseek --> pkg_atomic_write - pkg_llm_deepseek --> pkg_attachment - pkg_llm_deepseek --> pkg_credentials - pkg_llm_deepseek --> pkg_deepseek_account - pkg_llm_deepseek --> pkg_deepseek_llm_api_extensions - pkg_llm_deepseek --> pkg_fs - pkg_llm_deepseek --> pkg_home_paths - pkg_llm_deepseek --> pkg_launch_environment - pkg_llm_deepseek --> pkg_llm - pkg_llm_deepseek --> pkg_timeout + pkg_llm_deepseek_api_key --> pkg_credentials + pkg_llm_deepseek_api_key --> pkg_launch_environment + pkg_llm_deepseek_api_key --> pkg_llm + pkg_llm_deepseek_api_key --> pkg_llm_deepseek pkg_llm_retry --> pkg_agent pkg_llm_retry --> pkg_brand pkg_llm_retry --> pkg_invariants @@ -632,9 +630,6 @@ flowchart TD pkg_web_search_deepseek --> pkg_launch_environment pkg_web_search_deepseek --> pkg_session pkg_web_search_deepseek --> pkg_web - pkg_api_account_controller --> pkg_agent - pkg_api_account_controller --> pkg_deepseek_account - pkg_api_account_controller --> pkg_typert_protocol pkg_file_reference --> pkg_agent pkg_time_context --> pkg_agent pkg_time_context --> pkg_invariants @@ -645,6 +640,9 @@ flowchart TD pkg_tmux_context --> pkg_session pkg_tmux_context --> pkg_session_projection pkg_tmux_context --> pkg_shell + pkg_deepseek_account --> pkg_agent + pkg_deepseek_account --> pkg_brand + pkg_deepseek_account --> pkg_llm pkg_commands --> pkg_agent pkg_commands --> pkg_attachment pkg_commands --> pkg_brand @@ -693,6 +691,10 @@ flowchart TD pkg_workflow --> pkg_invariants pkg_workflow --> pkg_llm pkg_workflow --> pkg_session + pkg_llm_deepseek_account --> pkg_deepseek_account + pkg_llm_deepseek_account --> pkg_launch_environment + pkg_llm_deepseek_account --> pkg_llm + pkg_llm_deepseek_account --> pkg_llm_deepseek pkg_tools --> pkg_agent pkg_tools --> pkg_invariants pkg_tools --> pkg_llm @@ -715,11 +717,18 @@ flowchart TD pkg_fs_sandbox --> pkg_fs_local pkg_fs_sandbox --> pkg_sandbox pkg_fs_sandbox --> pkg_sandbox_policy + pkg_api_account_controller --> pkg_agent + pkg_api_account_controller --> pkg_deepseek_account + pkg_api_account_controller --> pkg_typert_protocol pkg_compaction --> pkg_brand pkg_compaction --> pkg_commands pkg_compaction --> pkg_invariants pkg_compaction --> pkg_llm pkg_compaction --> pkg_session + pkg_deepseek_account_platform --> pkg_authorization + pkg_deepseek_account_platform --> pkg_credentials + pkg_deepseek_account_platform --> pkg_deepseek_account + pkg_deepseek_account_platform --> pkg_host_webserver pkg_command_feedback --> pkg_anonymous_user_id pkg_command_feedback --> pkg_commands pkg_command_feedback --> pkg_session @@ -1207,6 +1216,7 @@ flowchart TD pkg_api_session_controller --> pkg_client_connection pkg_api_session_controller --> pkg_client_file_upload pkg_api_session_controller --> pkg_commands + pkg_api_session_controller --> pkg_credentials pkg_api_session_controller --> pkg_file_reference pkg_api_session_controller --> pkg_fs pkg_api_session_controller --> pkg_llm @@ -1218,6 +1228,7 @@ flowchart TD pkg_api_session_controller --> pkg_session_projection_cache pkg_api_session_controller --> pkg_session_query pkg_api_session_controller --> pkg_session_title + pkg_api_session_controller --> pkg_settings pkg_api_session_controller --> pkg_skill pkg_api_session_controller --> pkg_subagent pkg_api_session_controller --> pkg_typert_protocol @@ -1313,7 +1324,7 @@ flowchart TD pkg_sdk_jsonrpc_server --> pkg_agent pkg_sdk_jsonrpc_server --> pkg_attachment pkg_sdk_jsonrpc_server --> pkg_llm - pkg_sdk_jsonrpc_server --> pkg_llm_deepseek + pkg_sdk_jsonrpc_server --> pkg_llm_deepseek_api_key pkg_sdk_jsonrpc_server --> pkg_scope pkg_sdk_jsonrpc_server --> pkg_sdk_protocol pkg_sdk_jsonrpc_server --> pkg_session @@ -1459,7 +1470,6 @@ flowchart TD | [`browser-use`](../packages/browser-use/browser-use) | `browser-use` | [`brand`](../packages/util/brand) | | [`computer-use`](../packages/computer-use/computer-use) | `computer-use` | [`brand`](../packages/util/brand) | | [`credentials`](../packages/credentials/credentials) | `credentials` | [`invariants`](../packages/runtime-diagnostics/invariants) | -| [`deepseek-account`](../packages/credentials/deepseek-account) | `credentials` | [`brand`](../packages/util/brand) | | [`experimental-inspector`](../packages/experimental/inspector) | `experimental` | [`client-modules`](../packages/client/modules), [`host-webserver`](../packages/host/webserver) | | [`host-directory-picker-auto`](../packages/host/directory-picker-auto) | `host` | [`client-ui-directory-picker-browse`](../packages/client/ui-directory-picker-browse), [`client-ui-directory-picker-native`](../packages/client/ui-directory-picker-native), [`host-directory-picker-browse`](../packages/host/directory-picker-browse), [`host-directory-picker-native`](../packages/host/directory-picker-native), [`host-webserver`](../packages/host/webserver) | | [`anonymous-user-id`](../packages/identity/anonymous-user-id) | `identity` | [`brand`](../packages/util/brand), [`home-paths`](../packages/util/home-paths) | @@ -1491,7 +1501,6 @@ flowchart TD | [`spill`](../packages/spill/spill) | `spill` | [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`api-gateway`](../packages/api/gateway) | `api` | [`client-connection`](../packages/client/connection) | | [`app-boot`](../packages/boot/app-boot) | `boot` | [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`system-prompt`](../packages/core/system-prompt) | -| [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | `credentials` | [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`host-webserver`](../packages/host/webserver) | | [`experimental-webworker-runtime`](../packages/experimental/webworker-runtime) | `experimental` | [`client-connection`](../packages/client/connection), [`client-modules`](../packages/client/modules), [`host-webserver`](../packages/host/webserver) | | [`host-frontend-static`](../packages/host/frontend-static) | `host` | [`client-connection`](../packages/client/connection), [`host-webserver`](../packages/host/webserver) | | [`persona`](../packages/preset/persona) | `preset` | [`system-prompt`](../packages/core/system-prompt) | @@ -1515,6 +1524,7 @@ flowchart TD | [`session-turn-outline`](../packages/session/session-turn-outline) | `session` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`shell`](../packages/shell/shell) | `shell` | [`sandbox`](../packages/sandbox/sandbox), [`subprocess`](../packages/subprocess/subprocess) | | [`workspace`](../packages/workspace/workspace) | `workspace` | [`invariants`](../packages/runtime-diagnostics/invariants), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`storage`](../packages/storage/storage), [`storage-domain`](../packages/storage/storage-domain), [`typert-protocol`](../packages/typert/protocol) | +| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | `llm` | [`attachment`](../packages/attachment/attachment), [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`fs`](../packages/fs/fs), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | | [`agent`](../packages/core/agent) | `core` | [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol), [`util-values`](../packages/util/values), [`workspace`](../packages/workspace/workspace) | | [`fs-local`](../packages/fs/fs-local) | `fs` | [`fs`](../packages/fs/fs) | @@ -1529,15 +1539,15 @@ flowchart TD | [`lsp-stdio`](../packages/lsp/lsp-stdio) | `lsp` | [`brand`](../packages/util/brand), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`lsp`](../packages/lsp/lsp), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`bash-local`](../packages/shell/bash-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | | [`pwsh-local`](../packages/shell/pwsh-local) | `shell` | [`shell`](../packages/shell/shell), [`subprocess`](../packages/subprocess/subprocess), [`timeout`](../packages/util/timeout) | -| [`llm-deepseek`](../packages/llm/llm-deepseek) | `llm` | [`agent`](../packages/core/agent), [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`atomic-write`](../packages/util/atomic-write), [`attachment`](../packages/attachment/attachment), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`deepseek-llm-api-extensions`](../packages/llm/deepseek-llm-api-extensions), [`fs`](../packages/fs/fs), [`home-paths`](../packages/util/home-paths), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`timeout`](../packages/util/timeout) | +| [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key) | `llm` | [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek) | | [`llm-retry`](../packages/llm/llm-retry) | `llm` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`timeout`](../packages/util/timeout) | | [`agent-default-model`](../packages/core/agent-default-model) | `core` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm) | | [`goal`](../packages/goal/goal) | `goal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`typert-protocol`](../packages/typert/protocol) | | [`web-search-deepseek`](../packages/web/web-search-deepseek) | `web` | [`agent`](../packages/core/agent), [`credentials`](../packages/credentials/credentials), [`launch-environment`](../packages/util/launch-environment), [`session`](../packages/core/session), [`web`](../packages/web/web) | -| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`file-reference`](../packages/context/file-reference) | `context` | [`agent`](../packages/core/agent) | | [`time-context`](../packages/context/time-context) | `context` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection) | | [`tmux-context`](../packages/context/tmux-context) | `context` | [`agent`](../packages/core/agent), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell) | +| [`deepseek-account`](../packages/credentials/deepseek-account) | `credentials` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`llm`](../packages/llm/llm) | | [`commands`](../packages/interaction/commands) | `interaction` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`user-approval`](../packages/interaction/user-approval) | `interaction` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt) | | [`user-questions`](../packages/interaction/user-questions) | `interaction` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope) | @@ -1548,11 +1558,14 @@ flowchart TD | [`terminal`](../packages/terminal/terminal) | `terminal` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand) | | [`loader-smoke`](../packages/test-support/loader-smoke) | `test-support` | [`agent`](../packages/core/agent), [`http-proxy`](../packages/util/http-proxy), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`workflow`](../packages/workflow/workflow) | `workflow` | [`agent`](../packages/core/agent), [`brand`](../packages/util/brand), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | +| [`llm-deepseek-account`](../packages/llm/llm-deepseek-account) | `llm` | [`deepseek-account`](../packages/credentials/deepseek-account), [`launch-environment`](../packages/util/launch-environment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek) | | [`tools`](../packages/core/tools) | `core` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`ptc-runtime`](../packages/ptc-runtime/ptc-runtime), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`user-approval`](../packages/interaction/user-approval) | | [`command-goal`](../packages/goal/command-goal) | `goal` | [`commands`](../packages/interaction/commands), [`goal`](../packages/goal/goal), [`llm`](../packages/llm/llm) | | [`goal-round-driver`](../packages/goal/goal-round-driver) | `goal` | [`agent`](../packages/core/agent), [`goal`](../packages/goal/goal), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | | [`fs-sandbox`](../packages/fs/fs-sandbox) | `fs` | [`fs`](../packages/fs/fs), [`fs-local`](../packages/fs/fs-local), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy) | +| [`api-account-controller`](../packages/api/account-controller) | `api` | [`agent`](../packages/core/agent), [`deepseek-account`](../packages/credentials/deepseek-account), [`typert-protocol`](../packages/typert/protocol) | | [`compaction`](../packages/compaction/compaction) | `compaction` | [`brand`](../packages/util/brand), [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session) | +| [`deepseek-account-platform`](../packages/credentials/deepseek-account-platform) | `credentials` | [`authorization`](../packages/credentials/authorization), [`credentials`](../packages/credentials/credentials), [`deepseek-account`](../packages/credentials/deepseek-account), [`host-webserver`](../packages/host/webserver) | | [`command-feedback`](../packages/feedback/command-feedback) | `feedback` | [`anonymous-user-id`](../packages/identity/anonymous-user-id), [`commands`](../packages/interaction/commands), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`permission-presets`](../packages/interaction/permission-presets) | `interaction` | [`commands`](../packages/interaction/commands), [`invariants`](../packages/runtime-diagnostics/invariants), [`sandbox`](../packages/sandbox/sandbox), [`sandbox-policy`](../packages/sandbox/sandbox-policy), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`shell`](../packages/shell/shell), [`typert-protocol`](../packages/typert/protocol), [`user-approval`](../packages/interaction/user-approval) | | [`jobs-local`](../packages/jobs/jobs-local) | `jobs` | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`scope`](../packages/core/scope), [`timeout`](../packages/util/timeout) | @@ -1638,7 +1651,7 @@ flowchart TD | [`tool-subagent`](../packages/subagent/tool-subagent) | `subagent` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`jobs`](../packages/jobs/jobs), [`llm`](../packages/llm/llm), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`tool-subagent-control`](../packages/subagent/tool-subagent-control) | `subagent` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`tools`](../packages/core/tools) | | [`hooks-claude-code`](../packages/hooks/hooks-claude-code) | `hooks` | [`agent`](../packages/core/agent), [`hook-protocol`](../packages/hooks/hook-protocol), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent), [`tools`](../packages/core/tools) | -| [`api-session-controller`](../packages/api/session-controller) | `api` | [`agent`](../packages/core/agent), [`agent-default-model`](../packages/core/agent-default-model), [`agent-preset-registry`](../packages/preset/agent-preset-registry), [`api-gateway`](../packages/api/gateway), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-file-upload`](../packages/client/file-upload), [`commands`](../packages/interaction/commands), [`file-reference`](../packages/context/file-reference), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`native-command`](../packages/util/native-command), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`skill`](../packages/skill/skill), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol), [`typert-registry`](../packages/typert/registry), [`util-time`](../packages/util/time), [`util-values`](../packages/util/values), [`util-workspace-path`](../packages/util/workspace-path), [`workspace`](../packages/workspace/workspace) | +| [`api-session-controller`](../packages/api/session-controller) | `api` | [`agent`](../packages/core/agent), [`agent-default-model`](../packages/core/agent-default-model), [`agent-preset-registry`](../packages/preset/agent-preset-registry), [`api-gateway`](../packages/api/gateway), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-file-upload`](../packages/client/file-upload), [`commands`](../packages/interaction/commands), [`credentials`](../packages/credentials/credentials), [`file-reference`](../packages/context/file-reference), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`native-command`](../packages/util/native-command), [`scope`](../packages/core/scope), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`settings`](../packages/settings/settings), [`skill`](../packages/skill/skill), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol), [`typert-registry`](../packages/typert/registry), [`util-time`](../packages/util/time), [`util-values`](../packages/util/values), [`util-workspace-path`](../packages/util/workspace-path), [`workspace`](../packages/workspace/workspace) | | [`compaction-basic`](../packages/compaction/compaction-basic) | `compaction` | [`agent`](../packages/core/agent), [`commands`](../packages/interaction/commands), [`compaction`](../packages/compaction/compaction), [`compaction-tool-result-pruner`](../packages/compaction/compaction-tool-result-pruner), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`token-meter`](../packages/llm/token-meter) | | [`session-reference`](../packages/context/session-reference) | `context` | [`agent`](../packages/core/agent), [`compaction`](../packages/compaction/compaction), [`llm`](../packages/llm/llm), [`output-retention`](../packages/util/output-retention), [`session`](../packages/core/session), [`session-projection`](../packages/session/session-projection), [`session-projection-cache`](../packages/session/session-projection-cache), [`session-query`](../packages/session-query/session-query), [`session-title`](../packages/session/session-title), [`spill`](../packages/spill/spill), [`subagent`](../packages/subagent/subagent), [`system-prompt`](../packages/core/system-prompt), [`typert-protocol`](../packages/typert/protocol) | | [`experimental-agent-team`](../packages/experimental/agent-team) | `experimental` | [`agent`](../packages/core/agent), [`invariants`](../packages/runtime-diagnostics/invariants), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`session-persistence`](../packages/session/session-persistence), [`session-projection`](../packages/session/session-projection), [`subagent`](../packages/subagent/subagent) | @@ -1651,6 +1664,6 @@ flowchart TD | [`experimental-client-ui-voice-input`](../packages/experimental/client-ui-voice-input) | `experimental` | [`api-gateway`](../packages/api/gateway), [`api-remotes`](../packages/api/remotes), [`api-session-controller`](../packages/api/session-controller), [`client-locale`](../packages/client/locale), [`client-store`](../packages/client/store), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-plugin-manager`](../packages/client/ui-plugin-manager), [`client-ui-primitives`](../packages/client/ui-primitives), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-slots`](../packages/client/ui-slots), [`experimental-api-speech-to-text`](../packages/experimental/api-speech-to-text), [`experimental-speech-to-text`](../packages/experimental/speech-to-text), [`session`](../packages/core/session), [`typert-protocol`](../packages/typert/protocol) | | [`experimental-tool-agent-team`](../packages/experimental/tool-agent-team) | `experimental` | [`agent`](../packages/core/agent), [`experimental-agent-team`](../packages/experimental/agent-team), [`session`](../packages/core/session), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) | | [`sdk-client`](../packages/sdk/client) | `sdk` | [`llm`](../packages/llm/llm), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session) | -| [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek`](../packages/llm/llm-deepseek), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | +| [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | | [`client-test-runtime`](../packages/test-support/client-runtime) | `test-support` | [`api-gateway`](../packages/api/gateway), [`api-session-controller`](../packages/api/session-controller), [`api-workspace-controller`](../packages/api/workspace-controller), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-hmr`](../packages/client/hmr), [`client-modules`](../packages/client/modules), [`client-store`](../packages/client/store), [`client-ui-chat`](../packages/client/ui-chat), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`client-web`](../packages/client/web), [`remote-mock`](../packages/test-support/remote-mock), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol) | | [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | `subagent` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`sdk-client`](../packages/sdk/client), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`subprocess`](../packages/subprocess/subprocess) | diff --git a/packages/api/session-controller/tests/session-models.host.spec.ts b/packages/api/session-controller/tests/session-models.host.spec.ts index b0fbf788a1..0a213ca360 100644 --- a/packages/api/session-controller/tests/session-models.host.spec.ts +++ b/packages/api/session-controller/tests/session-models.host.spec.ts @@ -863,10 +863,10 @@ it('initializes the account model without reasoning metadata and rejects an empt }) }) -it('reports a non-Error catalog rejection as an unavailable selection', async () => { +it.each([new Error('catalog disconnected'), 'catalog disconnected'])('reports catalog rejection as an unavailable selection: %s', async (failure) => { const { ctx } = await harness() const { modelAvailable } = await import('../src/catalog.ts') - const read = vi.spyOn(ctx.llm, 'listModels').mockRejectedValueOnce('catalog disconnected') + const read = vi.spyOn(ctx.llm, 'listModels').mockRejectedValueOnce(failure) try { await expect(modelAvailable(ctx, { provider: 'deepseek-official', model: 'deepseek-chat' })) .rejects.toMatchObject({ code: 'session/model-unavailable', message: 'catalog disconnected' }) diff --git a/packages/client/ui-settings-account/tests/account.client.spec.tsx b/packages/client/ui-settings-account/tests/account.client.spec.tsx index 05dcd079d2..e574d3a284 100644 --- a/packages/client/ui-settings-account/tests/account.client.spec.tsx +++ b/packages/client/ui-settings-account/tests/account.client.spec.tsx @@ -503,6 +503,8 @@ it('reports resize failure, ignores late native failures, and tolerates a remove }) it.each([en, zh])('shows live model sign-in guidance without replaying it after remount', async (copy) => { + vi.useFakeTimers() + onTestFinished(() => { vi.useRealTimers() }) const operations = operationsOf({ status: 'signed-out', attempt: null }) let listener: (() => void) | undefined const unsubscribe = vi.fn(() => { listener = undefined }) @@ -518,6 +520,10 @@ it.each([en, zh])('shows live model sign-in guidance without replaying it after expect(screen.getByRole('alert').textContent).toBe(copy.modelSignInRequired) act(() => { listener?.() }) expect(screen.getAllByRole('alert')).toHaveLength(1) + await act(async () => { await vi.advanceTimersByTimeAsync(4000) }) + expect(screen.queryByRole('alert')).toBeNull() + act(() => { listener?.() }) + expect(screen.getByRole('alert').textContent).toBe(copy.modelSignInRequired) view.unmount() expect(unsubscribe).toHaveBeenCalledOnce() render(element) diff --git a/packages/client/ui-settings-account/tests/apply.client.spec.ts b/packages/client/ui-settings-account/tests/apply.client.spec.ts index 344467bc10..89230b1e9f 100644 --- a/packages/client/ui-settings-account/tests/apply.client.spec.ts +++ b/packages/client/ui-settings-account/tests/apply.client.spec.ts @@ -185,3 +185,28 @@ it('reads the account task impact and reports a refused query', async ({ start, mock.remote.account.hasRunningAccountTasks.mockResolvedValueOnce({ ok: false, error: new RemoteError('gateway/internal', 'offline', {}) }) await expect(actions.hasRunningAccountTasks()).rejects.toThrow('account task query failed') }, 60_000) + + +it('forwards live account notices and removes their subscriptions', async ({ start }) => { + vi.stubGlobal('dshDesktop', {}) + const c = await start() + const actions = operations(c) + const expired = vi.fn() + const unavailable = vi.fn() + const offExpired = actions.subscribeSessionExpired!(expired) + const offUnavailable = actions.subscribeModelSignInRequired!(unavailable) + for (const event of ['deepseek-account/session-expired', 'deepseek-account/model-sign-in-required']) { + c.mock.streams.push('$events', { type: 'emit', event, args: [] }) + } + await c.flush() + expect(expired).toHaveBeenCalledOnce() + expect(unavailable).toHaveBeenCalledOnce() + offExpired() + offUnavailable() + for (const event of ['deepseek-account/session-expired', 'deepseek-account/model-sign-in-required']) { + c.mock.streams.push('$events', { type: 'emit', event, args: [] }) + } + await c.flush() + expect(expired).toHaveBeenCalledOnce() + expect(unavailable).toHaveBeenCalledOnce() +}) diff --git a/packages/llm/llm-deepseek-api-key/src/index.ts b/packages/llm/llm-deepseek-api-key/src/index.ts index 94280483e0..cf039f9a0a 100644 --- a/packages/llm/llm-deepseek-api-key/src/index.ts +++ b/packages/llm/llm-deepseek-api-key/src/index.ts @@ -39,9 +39,9 @@ export function apply(ctx: Context, config: Config): void { registerDeepSeekProvider(ctx, PROVIDER, { options, providerName: 'DeepSeek', resolveAuth: async connection => ({ headers: { 'x-api-key': await resolveApiKey(connection) } }), - discoverModels: async (provider) => { + discoverModels: (provider) => { const connection = options() - return connection.models.map(model => catalogModelInfo(provider, model)) + return Promise.resolve(connection.models.map(model => catalogModelInfo(provider, model))) }, }) } From eff44a957cd7d2697ccf70350674a326bafd7604 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:08:21 +0800 Subject: [PATCH 56/60] test(headless): isolate API-key credential snapshots --- .../cli/tests/profiles/headless/credentials-snapshot.patch.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml b/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml index 148d357d23..8293d9919f 100644 --- a/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml +++ b/apps/cli/tests/profiles/headless/credentials-snapshot.patch.yml @@ -9,6 +9,9 @@ - id: llm-deepseek disabled: true +- id: llm-deepseek-account + disabled: true + - id: agent-loop config: agents: From 4a409edf8ba48a507d2e4961bccc40408f8c1899 Mon Sep 17 00:00:00 2001 From: mektpoy Date: Wed, 23 Sep 2026 21:10:27 +0800 Subject: [PATCH 57/60] fix(client): keep the plugin manager's whole top strip draggable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- apps/web/tests/window-drag-coverage.e2e.ts | 7 ++++++- .../src/client/PluginManagerPage.module.css | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/apps/web/tests/window-drag-coverage.e2e.ts b/apps/web/tests/window-drag-coverage.e2e.ts index 80df040862..16e9f4851e 100644 --- a/apps/web/tests/window-drag-coverage.e2e.ts +++ b/apps/web/tests/window-drag-coverage.e2e.ts @@ -368,6 +368,9 @@ describe('web e2e: macOS window drag coverage', () => { }) const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) + // The row starts at the window's top edge: a page inset above it would be a strip + // no drag region covers, which is the dead band at the very top of this page. + expect(rect.y, 'the page head starts at the window’s top edge').toBeLessThanOrEqual(0.5) // The page head owns its run, clearance included: that is the entry page's // window strip, with no frame band behind it. expect( @@ -419,7 +422,9 @@ describe('web e2e: macOS window drag coverage', () => { const regions = await collectedRegions(page, INTERACTIVE_SELECTOR) // The head's top inset is the window clearance above the crumb: blank, so - // it drags like the entry page's head. + // it drags like the entry page's head. The row also starts at the window's top + // edge, or the strip above it belongs to no drag region. + expect(headRect.y, 'the detail head row starts at the window’s top edge').toBeLessThanOrEqual(0.5) expect( isDraggableAt(regions, headRect.x + headRect.width / 2, headRect.y + 4), 'the detail head row’s top inset', diff --git a/packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css b/packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css index aac9c84426..b399769273 100644 --- a/packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css +++ b/packages/client/ui-plugin-manager/src/client/PluginManagerPage.module.css @@ -8,7 +8,10 @@ box-sizing: border-box; height: 100%; overflow: auto; - padding: 28px clamp(24px, 4vw, 48px) 48px; + /* Inline and bottom insets only: the 28px top inset belongs to the head row + (`.pageHead`, `.detailTop`). macOS window dragging is owned by a row's own box, + so an inset above that box leaves a top strip no drag region covers. */ + padding: 0 clamp(24px, 4vw, 48px) 48px; color: var(--dsw-alias-label-primary); } @@ -23,6 +26,9 @@ justify-content: space-between; gap: 16px; box-sizing: border-box; + /* The page's former top inset: the row starts at the window's top edge, so the whole + strip above the page content drags the window. */ + padding-top: 28px; } /* macOS hiddenInset titlebar: the frame's top clearance keeps the head below @@ -30,7 +36,7 @@ owns the window drag over its own box — clearance included — so this page's top strip drags without a frame band. */ :global([data-platform='darwin']) .pageHead { - padding-top: var(--dsh-frame-top-clearance, 0px); + padding-top: calc(28px + var(--dsh-frame-top-clearance, 0px)); } .pageTitle { @@ -1058,10 +1064,13 @@ label.registryOption { .detailTop { display: flex; flex-direction: column; + /* The same 28px top inset `.pageHead` carries, so the row starts at the window's + top edge and the strip above the detail content drags the window. */ + padding-top: 28px; } :global([data-platform='darwin']) .detailTop { - padding-top: var(--dsh-frame-top-clearance, 0px); + padding-top: calc(28px + var(--dsh-frame-top-clearance, 0px)); } .crumb { From 71f0713b8680a8539a41901915bdbcf18fdc49d9 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:18:17 +0800 Subject: [PATCH 58/60] fix(llm): align provider packages with release version --- packages/llm/llm-deepseek-account/package.json | 2 +- packages/llm/llm-deepseek-api-key/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/llm/llm-deepseek-account/package.json b/packages/llm/llm-deepseek-account/package.json index f96077c86e..96166d4c33 100644 --- a/packages/llm/llm-deepseek-account/package.json +++ b/packages/llm/llm-deepseek-account/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-deepseek-account", "description": "DeepSeek account provider authentication and discovery", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-deepseek-api-key/package.json b/packages/llm/llm-deepseek-api-key/package.json index c0bce4980c..c932986179 100644 --- a/packages/llm/llm-deepseek-api-key/package.json +++ b/packages/llm/llm-deepseek-api-key/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/dsh-llm-deepseek-api-key", "description": "DeepSeek api-key provider authentication and discovery", - "version": "0.1.7-alpha.2", + "version": "0.1.7-rc.1", "publishConfig": { "access": "public" }, From 9a9948bc83a7732db18b69d59958e43df5ae7494 Mon Sep 17 00:00:00 2001 From: lsdsjy <1356263+lsdsjy@users.noreply.github.com> Date: Wed, 23 Sep 2026 21:33:16 +0800 Subject: [PATCH 59/60] test(web): align unavailable model and cold session expectations --- .../tests/deepseek-messages-settings.e2e.ts | 7 +++-- apps/web/tests/default-model.e2e.ts | 26 +++++-------------- .../default-model/unselected.expected.md | 8 +++--- .../tests/onboarding-deepseek-config.e2e.ts | 3 ++- apps/web/tests/reference-composer.e2e.ts | 6 ++--- 5 files changed, 20 insertions(+), 30 deletions(-) diff --git a/apps/web/tests/deepseek-messages-settings.e2e.ts b/apps/web/tests/deepseek-messages-settings.e2e.ts index 93aa400f57..6543428836 100644 --- a/apps/web/tests/deepseek-messages-settings.e2e.ts +++ b/apps/web/tests/deepseek-messages-settings.e2e.ts @@ -90,8 +90,11 @@ describe.skipIf(webSnapshotMode() === 'record')('web e2e: DeepSeek Messages sett await scaffold.ctx.agentDefaultModel.saveSelection({ provider: 'deepseek-official', model: 'deepseek-v4-flash' }) await page.reload({ waitUntil: 'load' }) const input = page.locator('[data-composer-input]').first() - await expect.poll(() => input.getAttribute('contenteditable')).toBe('false') - await page.getByRole('button', { name: '请选择模型', exact: true }).click() + const trigger = page.getByRole('button', { name: /^选择模型.*deepseek-official\/deepseek-v4-flash/ }) + await trigger.waitFor() + await expect.poll(() => input.getAttribute('contenteditable')).toBe('true') + await trigger.click() + await page.getByRole('menuitem', { name: /模型/ }).click() await page.getByRole('menuitemradio', { name: 'Messages Flash', exact: true }).click() await expect.poll(() => input.getAttribute('contenteditable')).toBe('true') await expect.poll(() => scaffold.ctx.agentDefaultModel.currentSelection().provider).toBe('deepseek-official') diff --git a/apps/web/tests/default-model.e2e.ts b/apps/web/tests/default-model.e2e.ts index 08f8505d7f..04cbd9b80f 100644 --- a/apps/web/tests/default-model.e2e.ts +++ b/apps/web/tests/default-model.e2e.ts @@ -127,7 +127,7 @@ describe('web e2e: the composer model switch is the default for later sessions', expect(tripwire.pageErrors).toEqual([]) }, 60_000) - it('goes inert when the route the default names stops being served', async () => { + it('retains the saved route and editable composer when its provider is removed', async () => { onTestFailed(() => saveFailureShot(page, 'web-e2e-default-model-blocked')) const box = page.locator('[data-composer-input]').first() await expect.poll(async () => box.isEnabled(), { timeout: 10_000 }).toBe(true) @@ -139,28 +139,14 @@ describe('web e2e: the composer model switch is the default for later sessions', baseURL: 'https://gateway.origin.example/v1', models: [{ id: START_MODEL, name: 'Origin Large' }] }, } }) - await expect.poll(async () => box.isEnabled(), { timeout: 15_000 }).toBe(false) - const unset = page.getByRole('button', { name: '请选择模型', exact: true }) - await unset.waitFor() - expect(await unset.evaluate(element => getComputedStyle(element).fontWeight)).toBe('400') - expect(await page.getByRole('button', { name: '发送消息', exact: true }).isEnabled()).toBe(false) + const seat = page.getByRole('button', { name: new RegExp(`^选择模型.*${ROUTE}/${MODEL}`) }) + await seat.waitFor() + expect(await box.isEnabled()).toBe(true) + expect(scaffold.ctx.agentDefaultModel.currentSelection()).toMatchObject({ provider: ROUTE, model: MODEL }) const aria = await captureStableAria(page, '[data-composer-card]', scaffold.workspaceCwd) await compareOrRefreshGolden(fileURLToPath(new URL('./expected/default-model/unselected.expected.md', import.meta.url)), aria, webSnapshotMode()) - - // The block is an affordance; the refusal is the Host's. A client that - // never disabled anything still cannot start a turn on a dead route. - await expect(scaffold.ctx.sessionController.prompt({ - requestId: 'default-model-refused' as never, - sessionId: SessionId(await createSession('default-model-refusal')), - mode: 'queue', - content: [{ type: 'text', text: 'hi' }], - }, new AbortController().signal)).rejects.toMatchObject({ code: 'session/model-unavailable' }) - - // The way out stays open. Locking the model seat with everything else - // would leave the composer asking for the one thing it prevents. - const seat = page.getByRole('button', { name: '请选择模型', exact: true }) - expect(await seat.isEnabled()).toBe(true) await seat.click() + await page.getByRole('menuitem', { name: /模型/ }).click() await page.getByRole('menuitemradio').first().click() await expect.poll(async () => box.isEnabled(), { timeout: 15_000 }).toBe(true) expect(tripwire.pageErrors).toEqual([]) diff --git a/apps/web/tests/expected/default-model/unselected.expected.md b/apps/web/tests/expected/default-model/unselected.expected.md index 6228bea41c..8845f5196b 100644 --- a/apps/web/tests/expected/default-model/unselected.expected.md +++ b/apps/web/tests/expected/default-model/unselected.expected.md @@ -1,5 +1,5 @@ -- textbox "描述你想要构建的内容, / 调用指令, @ 文件或对话" [disabled] -- button "添加文件或调用指令" [disabled] -- button "访问模式,当前:工作区内修改" [disabled]: 工作区内修改 -- button "请选择模型" +- textbox "描述你想要构建的内容, / 调用指令, @ 文件或对话" +- button "添加文件或调用指令" +- button "访问模式,当前:工作区内修改": 工作区内修改 +- button "选择模型,当前 acme-gateway/acme-large": acme-gateway/acme-large - button "发送消息" [disabled] diff --git a/apps/web/tests/onboarding-deepseek-config.e2e.ts b/apps/web/tests/onboarding-deepseek-config.e2e.ts index d0e5ddd582..f3b3b48542 100644 --- a/apps/web/tests/onboarding-deepseek-config.e2e.ts +++ b/apps/web/tests/onboarding-deepseek-config.e2e.ts @@ -275,9 +275,10 @@ describe.skipIf(MODE === 'record')('web e2e: first-run DeepSeek credential setup // trigger — on the page; the scaffold boots without one. await connectFreshWorkspaceZh(page, scaffold.workspaceCwd, 'model-fallback-e2e', false) - const modelTrigger = page.getByRole('button', { name: '请选择模型', exact: true }) + const modelTrigger = page.getByRole('button', { name: /^选择模型.*deepseek-official\// }) await modelTrigger.waitFor({ timeout: 10_000 }) await modelTrigger.click() + await page.getByRole('menuitem', { name: /模型/ }).click() expect(await page.getByText('Configured Flash', { exact: true }).count()).toBe(0) await page.getByRole('menuitemradio', { name: 'Private Preview' }).waitFor({ timeout: 10_000 }) expect(tripwire.warnings).toEqual([]) diff --git a/apps/web/tests/reference-composer.e2e.ts b/apps/web/tests/reference-composer.e2e.ts index ed1bd9fa82..d4518210b4 100644 --- a/apps/web/tests/reference-composer.e2e.ts +++ b/apps/web/tests/reference-composer.e2e.ts @@ -24,6 +24,7 @@ import { compareOrRefreshGolden, launchWebScaffold, seedSession, + readPersistedEvents, watchConsole, webSnapshotMode, type WebScaffold, @@ -403,9 +404,8 @@ describe.skipIf(MODE === 'record')('web e2e: file and session references through await target.waitFor({ timeout: 15_000 }) await target.click() await page.locator('[data-chat-flow-kind="user"]').filter({ hasText: 'Research notes' }).waitFor({ timeout: 15_000 }) - const session = scaffold.ctx.sessions.get(SessionId(TARGET_SESSION_ID)) - if (session === undefined) throw new Error('reference target session is unavailable') - const inputs = session.snapshotEvents().filter(event => event.type === 'user/message') + const events = await readPersistedEvents(scaffold, SessionId(TARGET_SESSION_ID)) + const inputs = events.filter(event => event.type === 'user/message') expect(inputs.map(event => event.data.source.kind)).toEqual(['user', 'session-reference']) expect(inputs[0]?.seq).toBeLessThan(inputs[1]!.seq) expect(JSON.stringify(inputs[1]?.data)).toContain('snapshot') From e7def469e1390891cc45f78bea4063009abf6edd Mon Sep 17 00:00:00 2001 From: Turtle Date: Wed, 23 Sep 2026 22:32:06 +0800 Subject: [PATCH 60/60] 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. --- .agents/notes/README.i18n.yaml | 50 +- .agents/notes/archived/manifest.json | 9 +- ...matic-translation-pairing-merges.i18n.yaml | 6 + ...08-automatic-translation-pairing-merges.md | 1 + ...automatic-translation-pairing-merges.zh.md | 1 + ...6-06-11-content-block-vocabulary.i18n.yaml | 23 +- ...ev-invariants-over-deep-readonly.i18n.yaml | 41 +- ...026-06-11-event-sourced-sessions.i18n.yaml | 23 +- ...06-11-microkernel-event-taxonomy.i18n.yaml | 23 +- .../2026-06-13-capability-seams.i18n.yaml | 26 +- .../2026-06-13-twin-llm-adapters.i18n.yaml | 23 +- .../2026-06-14-session-persistence.i18n.yaml | 23 +- .../2026-06-18-session-surface.i18n.yaml | 41 +- ...eneric-long-running-tool-runtime.i18n.yaml | 62 +- ...-21-bounded-llm-request-recovery.i18n.yaml | 47 +- ...andatory-app-attribution-headers.i18n.yaml | 29 +- .../2026-06-24-web-capability-seam.i18n.yaml | 80 +- ...06-26-file-context-as-event-gate.i18n.yaml | 47 +- ...026-06-30-event-domain-semantics.i18n.yaml | 20 +- ...6-07-02-tool-render-intent-union.i18n.yaml | 41 +- ...bles-and-tool-guidance-ownership.i18n.yaml | 44 +- ...6-07-05-reconstructable-requests.i18n.yaml | 32 +- ...05-windows-jsonl-durable-publish.i18n.yaml | 23 +- ...6-07-06-timeout-deadline-library.i18n.yaml | 32 +- ...6-07-07-tool-call-timeout-policy.i18n.yaml | 32 +- .../2026-07-08-agent-scope-contexts.i18n.yaml | 50 +- ...26-07-08-tool-output-spill-files.i18n.yaml | 44 +- ...n-pressure-and-overflow-recovery.i18n.yaml | 35 +- ...cutable-sdk-runtime-distribution.i18n.yaml | 47 +- ...07-12-agent-scope-runtime-design.i18n.yaml | 161 +- ...-14-provider-routed-llm-adapters.i18n.yaml | 41 +- ...2026-07-15-agent-initiator-scope.i18n.yaml | 26 +- ...07-16-explicit-turn-cancellation.i18n.yaml | 26 +- ...19-cooperative-tool-cancellation.i18n.yaml | 38 +- ...7-19-gui-web-client-architecture.i18n.yaml | 44 +- ...kage-invariant-runtime-contracts.i18n.yaml | 32 +- ...-19-zstandard-jsonl-session-logs.i18n.yaml | 35 +- ...0-canonical-tool-output-contract.i18n.yaml | 23 +- ...el-context-and-compaction-policy.i18n.yaml | 38 +- ...20-unified-json-value-schema-dsl.i18n.yaml | 23 +- ...2-slot-type-chain-implementation.i18n.yaml | 50 +- ...7-23-client-plugin-loading-model.i18n.yaml | 44 +- ...7-24-project-session-directories.i18n.yaml | 23 +- ...xt-injection-from-turn-execution.i18n.yaml | 32 +- ...-24-single-harness-home-resolver.i18n.yaml | 23 +- ...tree-boot-and-transport-layering.i18n.yaml | 23 +- ...ession-scope-and-provide-channel.i18n.yaml | 47 +- ...ompiler-independent-typert-model.i18n.yaml | 26 +- ...07-28-api-browser-trust-boundary.i18n.yaml | 23 +- ...ntified-immutable-message-values.i18n.yaml | 26 +- ...rtable-execution-world-consumers.i18n.yaml | 29 +- ...-07-29-dsh-source-launch-tsx-esm.i18n.yaml | 23 +- ...-token-usage-and-request-context.i18n.yaml | 26 +- ...-29-terminal-llm-stream-failures.i18n.yaml | 23 +- ...undaries-and-atomic-registration.i18n.yaml | 23 +- ...-followup-enqueue-and-owned-runs.i18n.yaml | 26 +- ...30-session-end-seed-log-boundary.i18n.yaml | 29 +- ...claimed-pre-step-inbox-lifecycle.i18n.yaml | 26 +- ...-07-31-goal-owned-durable-events.i18n.yaml | 23 +- ...-ptc-runtime-python-fd3-protocol.i18n.yaml | 29 +- ...08-02-typert-remote-method-calls.i18n.yaml | 80 +- ...4-configuration-source-ownership.i18n.yaml | 23 +- ...-provider-endpoint-interrogation.i18n.yaml | 29 +- ...026-08-05-profile-plugin-bundles.i18n.yaml | 23 +- ...lient-conversation-node-assembly.i18n.yaml | 98 +- ...cancelled-stream-prefix-finalize.i18n.yaml | 26 +- ...8-10-fork-children-stay-one-shot.i18n.yaml | 26 +- ...st-plane-ownership-after-presets.i18n.yaml | 26 +- ...2026-08-10-remote-event-delivery.i18n.yaml | 44 +- ...10-session-log-version-mechanism.i18n.yaml | 26 +- ...-records-and-authorization-flows.i18n.yaml | 29 +- ...ient-shells-and-dynamic-packages.i18n.yaml | 35 +- ...xperimental-agent-teams-packages.i18n.yaml | 23 +- ...sion-history-and-event-transport.i18n.yaml | 62 +- ...ession-projection-mandatory-seam.i18n.yaml | 23 +- ...t-session-conversation-ownership.i18n.yaml | 155 +- ...pseek-llm-api-request-extensions.i18n.yaml | 41 +- ...-single-dsh-application-launcher.i18n.yaml | 44 +- ...client-derived-tool-presentation.i18n.yaml | 233 +- ...8-23-locale-owned-client-ui-copy.i18n.yaml | 26 +- ...-24-browser-token-authentication.i18n.yaml | 26 +- ...on-desktop-packaging-and-updates.i18n.yaml | 50 +- ...nd-projection-owned-client-state.i18n.yaml | 62 +- ...7-adjacent-agent-steer-messaging.i18n.yaml | 29 +- ...handle-based-session-persistence.i18n.yaml | 26 +- ...2026-08-27-outbound-proxy-policy.i18n.yaml | 26 +- ...28-ctx-remote-failure-vocabulary.i18n.yaml | 35 +- ...28-subprocess-native-containment.i18n.yaml | 41 +- ...gnorable-external-session-events.i18n.yaml | 23 +- ...historical-unknown-event-refusal.i18n.yaml | 23 +- ...-explicit-agent-runtime-identity.i18n.yaml | 26 +- ...leased-session-format-migrations.i18n.yaml | 71 +- ...9-01-jobs-absorb-activity-record.i18n.yaml | 26 +- ...01-parent-owned-subagent-catalog.i18n.yaml | 23 +- ...01-v2-embedded-assistant-streams.i18n.yaml | 32 +- ...jcache-cross-version-read-compat.i18n.yaml | 35 +- ...02-system-prompt-as-surface-node.i18n.yaml | 41 +- ...26-09-03-jobs-seam-consolidation.i18n.yaml | 23 +- ...026-09-05-canonical-feedback-log.i18n.yaml | 23 +- ...2026-09-05-client-resource-model.i18n.yaml | 44 +- ...-09-05-nonofficial-feedback-otel.i18n.yaml | 23 +- ...026-09-05-package-manifest-types.i18n.yaml | 23 +- ...ly-session-migration-preparation.i18n.yaml | 56 +- ...shared-client-control-primitives.i18n.yaml | 32 +- ...sidebar-tab-types-and-navigation.i18n.yaml | 47 +- ...26-09-05-workspace-files-service.i18n.yaml | 56 +- ...6-embedded-stream-record-readers.i18n.yaml | 26 +- ...6-v3-canonical-session-envelopes.i18n.yaml | 32 +- ...09-07-prebuilt-system-primitives.i18n.yaml | 23 +- ...9-07-sidebar-responsive-tab-info.i18n.yaml | 23 +- ...orkspace-files-dual-face-package.i18n.yaml | 26 +- ...led-runtime-and-external-plugins.i18n.yaml | 29 +- ...-desktop-welcome-window-material.i18n.yaml | 23 +- ...9-08-document-preview-operations.i18n.yaml | 23 +- .../2026-09-08-global-main-panels.i18n.yaml | 23 +- ...026-09-09-awaited-agent-creation.i18n.yaml | 23 +- ...onsumer-owned-startup-strictness.i18n.yaml | 26 +- ...-synchronous-session-event-reads.i18n.yaml | 32 +- ...desktop-build-release-validation.i18n.yaml | 23 +- ...mmediate-window-and-direct-start.i18n.yaml | 23 +- ...in-management-in-the-web-sidebar.i18n.yaml | 26 +- ...9-producer-owned-message-sources.i18n.yaml | 23 +- ...9-profile-resolution-generations.i18n.yaml | 56 +- ...09-workspace-file-read-authority.i18n.yaml | 23 +- ...ntities-and-composer-file-action.i18n.yaml | 23 +- .../2026-09-10-compact-tool-details.i18n.yaml | 23 +- ...ponent-factories-and-local-slots.i18n.yaml | 38 +- .../2026-09-10-desktop-web-wrapper.i18n.yaml | 23 +- .../2026-09-10-image-offload-events.i18n.yaml | 26 +- ...26-09-10-public-package-manifest.i18n.yaml | 23 +- ...0-windows-native-installer-pages.i18n.yaml | 23 +- ...11-desktop-electron-node-runtime.i18n.yaml | 23 +- .../2026-09-11-node-office-kit.i18n.yaml | 23 +- ...plugin-owned-message-projections.i18n.yaml | 23 +- .../2026-09-11-posix-ssh-runtime.i18n.yaml | 29 +- ...09-11-sandboxed-node-ptc-runtime.i18n.yaml | 35 +- ...26-09-11-subprocess-control-pipe.i18n.yaml | 23 +- ...1-windows-directory-installation.i18n.yaml | 26 +- ...rowser-use-provider-registration.i18n.yaml | 23 +- ...mputer-use-provider-registration.i18n.yaml | 23 +- ...026-09-12-ptc-runtime-vocabulary.i18n.yaml | 23 +- ...09-13-workflow-ptc-sandbox-reuse.i18n.yaml | 23 +- ...urrent-profile-plugin-management.i18n.yaml | 23 +- ...026-09-14-deepseek-account-login.i18n.yaml | 29 +- ...9-14-independent-libreoffice-kit.i18n.yaml | 23 +- ...09-14-session-log-upload-default.i18n.yaml | 23 +- ...sidebar-layout-provider-recovery.i18n.yaml | 23 +- ...web-document-relative-app-routes.i18n.yaml | 26 +- ...-09-15-bounded-office-conversion.i18n.yaml | 26 +- ...-09-15-client-session-references.i18n.yaml | 53 +- ...15-desktop-native-fatal-recovery.i18n.yaml | 23 +- ...5-first-class-tool-role-messages.i18n.yaml | 23 +- ...09-15-guided-plugin-installation.i18n.yaml | 26 +- ...-15-narrow-pi-ai-runtime-imports.i18n.yaml | 23 +- ...26-09-15-platform-office-engines.i18n.yaml | 23 +- ...tor-persistent-plugin-management.i18n.yaml | 23 +- ...-16-desktop-cos-upload-transport.i18n.yaml | 26 +- ...6-09-16-experimental-voice-input.i18n.yaml | 23 +- ...onfiguration-on-the-plugins-page.i18n.yaml | 26 +- ...ize-neutral-product-icon-weights.i18n.yaml | 23 +- ...-09-16-user-terminal-permissions.i18n.yaml | 23 +- ...6-09-17-account-provider-signout.i18n.yaml | 23 +- ...-09-17-developer-session-changes.i18n.yaml | 23 +- ...shell-leading-window-chrome-seat.i18n.yaml | 26 +- ...-09-17-native-v4-read-validation.i18n.yaml | 23 +- ...7-persistence-attribution-policy.i18n.yaml | 23 +- ...ugin-detail-page-extension-slots.i18n.yaml | 26 +- ...-17-process-local-blank-sessions.i18n.yaml | 26 +- ...17-session-row-menu-actions-slot.i18n.yaml | 23 +- ...ings-pages-as-companion-packages.i18n.yaml | 26 +- ...2026-09-17-shared-office-runtime.i18n.yaml | 23 +- ...eb-feature-routes-and-route-gate.i18n.yaml | 26 +- ...7-workspace-file-binary-transfer.i18n.yaml | 26 +- ...-09-18-agent-teams-single-bundle.i18n.yaml | 26 +- ...9-18-chat-navigation-performance.i18n.yaml | 35 +- ...-09-18-declarative-agent-presets.i18n.yaml | 26 +- ...09-18-localized-package-metadata.i18n.yaml | 29 +- ...-09-18-plugin-install-registries.i18n.yaml | 26 +- ...le-plugin-host-runtime-instances.i18n.yaml | 23 +- ...09-18-volatile-config-references.i18n.yaml | 23 +- ...sless-projection-checkpoint-json.i18n.yaml | 23 +- ...profile-owned-live-configuration.i18n.yaml | 23 +- ...-profile-resolution-lookup-order.i18n.yaml | 68 +- ...listing-identity-and-cached-rows.i18n.yaml | 53 +- .../2026-09-19-remote-duplex-stream.i18n.yaml | 146 +- ...19-window-drag-coverage-contract.i18n.yaml | 29 +- ...9-20-sidebar-retained-tab-layout.i18n.yaml | 38 +- ...-09-21-conversation-build-groups.i18n.yaml | 47 +- ...or-skills-progressive-disclosure.i18n.yaml | 23 +- ...-21-live-config-inspect-provider.i18n.yaml | 23 +- ...al-diagnostics-and-crash-reports.i18n.yaml | 32 +- ...026-09-22-tool-call-three-phases.i18n.yaml | 38 +- ...026-07-20-jsonl-storage-identity.i18n.yaml | 23 +- ...-fail-loud-releases-the-terminal.i18n.yaml | 26 +- ...3-cli-signal-shutdown-escalation.i18n.yaml | 26 +- ...8-06-bwrap-private-pid-namespace.i18n.yaml | 26 +- ...8-06-host-backed-web-preferences.i18n.yaml | 23 +- ...07-cancel-convergence-wake-latch.i18n.yaml | 23 +- ...2026-08-07-ptc-executor-collapse.i18n.yaml | 35 +- ...-agents-join-their-parent-preset.i18n.yaml | 26 +- ...08-17-durable-web-queue-recovery.i18n.yaml | 26 +- ...gent-message-settlement-ordering.i18n.yaml | 29 +- ...pha-routed-image-quality-ladders.i18n.yaml | 23 +- ...31-win32-picker-path-string-read.i18n.yaml | 23 +- ...alized-unread-fs-tool-diagnostic.i18n.yaml | 23 +- ...03-root-marker-metadata-failures.i18n.yaml | 26 +- ...user-owned-goal-pause-activation.i18n.yaml | 26 +- ...end-button-follows-enter-setting.i18n.yaml | 26 +- ...09-05-continuous-client-recovery.i18n.yaml | 26 +- ...2026-09-05-nested-terminal-cards.i18n.yaml | 26 +- ...026-09-05-patch-plugin-file-urls.i18n.yaml | 23 +- ...9-05-pi-ai-upgrade-compatibility.i18n.yaml | 23 +- ...5-session-reference-model-budget.i18n.yaml | 23 +- ...05-session-reference-spill-reuse.i18n.yaml | 29 +- ...-09-06-environment-prompt-suffix.i18n.yaml | 26 +- ...indows-python-console-spawn-wait.i18n.yaml | 23 +- ...-pi-ai-settings-catalog-recovery.i18n.yaml | 26 +- ...package-local-forwarding-imports.i18n.yaml | 23 +- ...-win32-picker-foreground-alt-key.i18n.yaml | 23 +- ...09-10-built-bundle-css-exemption.i18n.yaml | 23 +- ...pseek-image-token-calculator-v41.i18n.yaml | 23 +- ...eek-v41-request-image-projection.i18n.yaml | 23 +- ...1-incremental-terminal-retention.i18n.yaml | 29 +- ...nux-scope-direct-kill-settlement.i18n.yaml | 23 +- ...verage-location-canonicalization.i18n.yaml | 29 +- ...09-14-chat-presentation-defaults.i18n.yaml | 23 +- .../2026-09-14-web-diff-context.i18n.yaml | 26 +- ...09-14-windows-lock-release-probe.i18n.yaml | 23 +- ...ent-session-blank-reconciliation.i18n.yaml | 29 +- ...-09-15-linear-session-list-cache.i18n.yaml | 23 +- .../2026-09-15-messages-v1-base-url.i18n.yaml | 23 +- ...ajectory-attachment-presentation.i18n.yaml | 29 +- .../2026-09-16-desktop-window-menus.i18n.yaml | 26 +- ...6-messages-historical-tool-input.i18n.yaml | 23 +- ...resent-delayed-windows-installer.i18n.yaml | 23 +- ...-16-session-writer-held-feedback.i18n.yaml | 23 +- ...ws-subprocess-console-visibility.i18n.yaml | 23 +- .../2026-09-17-thinking-markdown.i18n.yaml | 23 +- ...ages-input-history-compatibility.i18n.yaml | 23 +- ...ared-session-attachment-carriers.i18n.yaml | 26 +- ...session-local-subagent-migration.i18n.yaml | 23 +- ...ncomplete-child-catalog-evidence.i18n.yaml | 23 +- ...0-session-open-read-coordination.i18n.yaml | 41 +- ...indows-embedded-mandatory-update.i18n.yaml | 23 +- ...multimodal-tool-result-retention.i18n.yaml | 23 +- ...ent-pwsh-keeps-controlled-prompt.i18n.yaml | 23 +- ...croll-follow-and-footer-geometry.i18n.yaml | 26 +- ...2-input-echo-admission-ownership.i18n.yaml | 26 +- ...ws-open-through-shell-resolution.i18n.yaml | 26 +- .../2026-09-23-bounded-pnpm-runs.i18n.yaml | 32 +- .../feature/2026-06-15-ptc.i18n.yaml | 53 +- ...06-18-compaction-capability-seam.i18n.yaml | 56 +- ...6-06-21-subagent-capability-seam.i18n.yaml | 50 +- ...30-interception-extension-points.i18n.yaml | 35 +- .../2026-07-05-dynamic-workflows.i18n.yaml | 44 +- .../2026-07-06-approval-seam.i18n.yaml | 59 +- .../feature/2026-07-06-sandbox.i18n.yaml | 65 +- .../2026-07-07-mcp-client-plugin.i18n.yaml | 98 +- ...-self-referential-cordis-toolset.i18n.yaml | 23 +- ...-10-parallel-tool-call-execution.i18n.yaml | 35 +- ...nt-persona-tool-filter-and-depth.i18n.yaml | 41 +- ...26-07-14-cross-family-fs-sandbox.i18n.yaml | 41 +- .../2026-07-16-harness-level-loop.i18n.yaml | 50 +- ...26-07-16-persistent-pty-sessions.i18n.yaml | 53 +- ...26-07-19-model-facing-goal-tools.i18n.yaml | 38 +- ...rsisted-same-session-goal-domain.i18n.yaml | 38 +- ...7-19-plugin-command-registration.i18n.yaml | 41 +- ...026-07-20-ptc-typed-tool-returns.i18n.yaml | 44 +- ...7-21-follow-instruction-symlinks.i18n.yaml | 26 +- ...3-session-telemetry-otel-revival.i18n.yaml | 23 +- ...7-25-subagent-policy-inheritance.i18n.yaml | 26 +- ...07-26-ptc-live-parallel-dispatch.i18n.yaml | 23 +- ...07-27-web-subagent-conversations.i18n.yaml | 41 +- ...-workspace-registration-deletion.i18n.yaml | 35 +- ...ntinuable-subagent-conversations.i18n.yaml | 56 +- ...26-07-28-skill-invocation-policy.i18n.yaml | 23 +- ...6-07-30-queued-manual-compaction.i18n.yaml | 47 +- ...07-30-web-remote-markdown-images.i18n.yaml | 23 +- ...31-even-out-shipped-tool-rosters.i18n.yaml | 32 +- .../2026-07-31-web-default-search.i18n.yaml | 23 +- ...6-07-31-web-workspace-file-links.i18n.yaml | 23 +- ...2026-08-02-pwsh-tool-bash-parity.i18n.yaml | 23 +- ...code-and-codex-subagent-backends.i18n.yaml | 35 +- .../feature/2026-08-05-agent-teams.i18n.yaml | 44 +- ...26-08-05-context-form-vocabulary.i18n.yaml | 29 +- .../2026-08-05-durable-web-schedule.i18n.yaml | 41 +- ...6-continuable-subagent-interrupt.i18n.yaml | 26 +- ...ned-subagent-settlement-delivery.i18n.yaml | 47 +- ...08-08-web-background-job-display.i18n.yaml | 44 +- ...ows-acl-restricted-token-sandbox.i18n.yaml | 41 +- ...0-subagent-approval-pinned-never.i18n.yaml | 23 +- ...b-completion-wakes-an-idle-owner.i18n.yaml | 38 +- ...-deepseek-request-user-id-header.i18n.yaml | 26 +- ...l-profiles-bare-two-tool-runtime.i18n.yaml | 26 +- ...agent-noninteractive-permissions.i18n.yaml | 38 +- ...08-18-arbitrary-seq-session-fork.i18n.yaml | 26 +- ...8-model-selected-subagent-routes.i18n.yaml | 26 +- ...0-unified-image-request-pipeline.i18n.yaml | 41 +- ...fire-and-forget-webhook-sessions.i18n.yaml | 32 +- ...standard-acp-automation-controls.i18n.yaml | 41 +- ...-08-24-activity-observation-seam.i18n.yaml | 32 +- ...authorized-subagent-model-routes.i18n.yaml | 26 +- ...feedback-gated-telemetry-default.i18n.yaml | 23 +- ...-25-promote-open-anywhere-plugin.i18n.yaml | 23 +- .../2026-08-26-generic-file-upload.i18n.yaml | 29 +- .../2026-08-26-human-job-kill.i18n.yaml | 26 +- ...ute-projection-and-jobs-at-start.i18n.yaml | 26 +- ...ble-subagent-human-inbox-control.i18n.yaml | 23 +- .../feature/2026-08-28-auto-review.i18n.yaml | 35 +- ...ross-process-session-write-lease.i18n.yaml | 23 +- ...09-01-workflow-run-in-background.i18n.yaml | 23 +- ...istory-system-prompt-replacement.i18n.yaml | 38 +- ...t-sidebar-docking-infrastructure.i18n.yaml | 47 +- ...debar-text-preview-and-file-tree.i18n.yaml | 41 +- ...-07-composer-session-stats-pills.i18n.yaml | 23 +- ...-09-07-deepseek-messages-adapter.i18n.yaml | 23 +- .../2026-09-07-model-switch-notice.i18n.yaml | 23 +- ...ession-prose-local-media-display.i18n.yaml | 26 +- ...menu-sections-and-localized-rows.i18n.yaml | 23 +- ...ktop-uninstall-preserve-dsh-home.i18n.yaml | 26 +- ...8-feedback-dialog-and-categories.i18n.yaml | 23 +- ...-file-display-through-filesystem.i18n.yaml | 26 +- ...8-present-workspace-source-files.i18n.yaml | 23 +- ...026-09-08-shared-file-type-icons.i18n.yaml | 26 +- ...2026-09-08-sidebar-default-pages.i18n.yaml | 23 +- ...-08-sidebar-last-tab-close-rules.i18n.yaml | 23 +- ...ess-machine-readable-run-surface.i18n.yaml | 32 +- ...-09-09-present-filesystem-access.i18n.yaml | 23 +- ...9-ptc-trajectory-code-inspection.i18n.yaml | 23 +- ...r-and-preview-interaction-polish.i18n.yaml | 23 +- .../2026-09-09-web-sidebar-terminal.i18n.yaml | 26 +- ...9-10-composer-reference-previews.i18n.yaml | 23 +- ...tric-message-feedback-submission.i18n.yaml | 23 +- ...-desktop-mandatory-update-client.i18n.yaml | 23 +- ...-sidebar-document-preview-polish.i18n.yaml | 23 +- ...26-09-11-turn-changed-files-card.i18n.yaml | 23 +- ...2-mcp-resources-and-instructions.i18n.yaml | 26 +- ...-12-mcp-sdk-protocol-negotiation.i18n.yaml | 23 +- ...3-macos-hidden-titlebar-vibrancy.i18n.yaml | 26 +- ...-09-13-mcp-resources-in-profiles.i18n.yaml | 26 +- ...9-14-composer-selection-keyboard.i18n.yaml | 26 +- ...26-09-14-desktop-primary-runtime.i18n.yaml | 23 +- .../2026-09-14-docs-mermaid-viewer.i18n.yaml | 23 +- ...ded-browser-terminal-reclamation.i18n.yaml | 23 +- ...2026-09-15-bundled-office-skills.i18n.yaml | 23 +- ...-09-15-changed-file-diff-preview.i18n.yaml | 23 +- ...-continuable-activation-capacity.i18n.yaml | 26 +- ...09-15-docs-page-markdown-actions.i18n.yaml | 23 +- ...09-15-docs-platform-command-tabs.i18n.yaml | 23 +- ...9-15-markdown-file-preview-links.i18n.yaml | 23 +- ...-09-15-profile-command-shorthand.i18n.yaml | 23 +- ...9-15-sidebar-workspace-hierarchy.i18n.yaml | 23 +- ...2026-09-16-browser-excel-preview.i18n.yaml | 23 +- ...in-default-app-for-sidebar-files.i18n.yaml | 23 +- ...-16-performance-usage-preference.i18n.yaml | 23 +- .../2026-09-16-sandbox-same-mode.i18n.yaml | 23 +- ...16-shared-subagent-settings-card.i18n.yaml | 26 +- .../2026-09-16-sidebar-browser.i18n.yaml | 32 +- ...-16-unified-model-input-controls.i18n.yaml | 23 +- ...6-09-16-windows-desktop-titlebar.i18n.yaml | 26 +- ...ompact-translucent-menu-surfaces.i18n.yaml | 23 +- ...6-09-17-developer-tools-settings.i18n.yaml | 23 +- ...2026-09-17-persistent-plan-cards.i18n.yaml | 23 +- ...-file-and-directory-auto-refresh.i18n.yaml | 77 +- ...-09-17-state-dot-visual-language.i18n.yaml | 26 +- ...-session-pin-and-sidebar-archive.i18n.yaml | 38 +- ...-mandatory-integrity-confinement.i18n.yaml | 44 +- ...ig-schema-dump-validation-policy.i18n.yaml | 23 +- .../2026-09-20-default-workspace.i18n.yaml | 23 +- ...26-09-20-desktop-browser-webview.i18n.yaml | 29 +- ...09-20-developer-tools-default-on.i18n.yaml | 23 +- ...chive-stops-running-session-work.i18n.yaml | 23 +- ...nded-completion-wakes-by-default.i18n.yaml | 23 +- .../2026-06-11-quality-gates.i18n.yaml | 20 +- .../2026-06-16-pnpm-over-yarn.i18n.yaml | 23 +- .../2026-06-17-ts-build-config.i18n.yaml | 23 +- ...-bilingual-docs-and-pairing-gate.i18n.yaml | 29 +- ...2026-07-04-doc-tiers-and-budgets.i18n.yaml | 23 +- ...-07-05-uniform-agent-note-format.i18n.yaml | 23 +- .../2026-07-06-node-engine-floor.i18n.yaml | 23 +- ...26-07-06-parallel-pre-push-gates.i18n.yaml | 26 +- ...ackage-model-experience-contract.i18n.yaml | 23 +- ...emove-generated-agent-note-index.i18n.yaml | 23 +- .../2026-07-19-web-styling-system.i18n.yaml | 32 +- .../2026-07-20-gui-testing-system.i18n.yaml | 29 +- ...rial-cross-platform-ci-reference.i18n.yaml | 23 +- .../2026-07-26-ci-failover-runbook.i18n.yaml | 44 +- ...6-dependencies-over-hand-rolling.i18n.yaml | 23 +- ...-07-26-frozen-agent-note-archive.i18n.yaml | 23 +- ...26-07-27-worktree-local-lefthook.i18n.yaml | 23 +- ...30-generated-third-party-notices.i18n.yaml | 26 +- ...thub-stacks-and-optional-rebases.i18n.yaml | 26 +- ...package-anchored-subsystem-pages.i18n.yaml | 23 +- ...matic-translation-pairing-merges.i18n.yaml | 6 - ...08-08-browser-gif-evidence-chain.i18n.yaml | 23 +- ...8-native-windows-pull-request-ci.i18n.yaml | 23 +- ...08-unified-github-label-taxonomy.i18n.yaml | 32 +- ...-09-committed-artifact-citations.i18n.yaml | 26 +- ...-names-actors-and-recorded-facts.i18n.yaml | 23 +- ...-event-directed-pr-review-status.i18n.yaml | 26 +- ...2026-08-10-npm-release-sequences.i18n.yaml | 56 +- ...8-18-in-job-partitioned-coverage.i18n.yaml | 29 +- .../process/2026-08-19-remove-knip.i18n.yaml | 23 +- ...08-26-ban-ambiguous-origin-label.i18n.yaml | 23 +- ...08-26-published-dependency-faces.i18n.yaml | 35 +- ...-ci-node-compile-cache-data-disk.i18n.yaml | 35 +- ...ject-local-issue-planning-fields.i18n.yaml | 26 +- ...antic-issue-templates-and-policy.i18n.yaml | 26 +- ...vidence-driven-performance-skill.i18n.yaml | 26 +- ...26-09-06-master-only-platform-ci.i18n.yaml | 23 +- ...06-node-compatibility-selfhosted.i18n.yaml | 26 +- ...-06-preview-hosted-runner-sizing.i18n.yaml | 26 +- ...06-python-runtime-windows-hosted.i18n.yaml | 23 +- ...-06-release-rehearsal-selfhosted.i18n.yaml | 23 +- ...elective-issue-policy-evaluation.i18n.yaml | 26 +- ...browser-third-party-build-inputs.i18n.yaml | 23 +- ...-08-package-index-link-discovery.i18n.yaml | 23 +- .../2026-09-08-playwright-video-gif.i18n.yaml | 23 +- ...26-09-09-blacksmith-failover-leg.i18n.yaml | 23 +- ...eighted-approvals-remain-pending.i18n.yaml | 26 +- .../2026-09-09-cancel-superseded-ci.i18n.yaml | 26 +- ...9-09-parallel-macos-notarization.i18n.yaml | 23 +- ...pproval-review-workflow-identity.i18n.yaml | 23 +- ...6-09-11-persistence-type-history.i18n.yaml | 26 +- ...production-blame-approval-weight.i18n.yaml | 26 +- ...t-product-experimental-isolation.i18n.yaml | 23 +- ...xperimental-publication-denylist.i18n.yaml | 23 +- ...maintained-repository-references.i18n.yaml | 23 +- ...ublish-all-experimental-packages.i18n.yaml | 23 +- ...026-09-15-pr-approval-delegation.i18n.yaml | 23 +- ...6-09-15-shipped-optional-bundles.i18n.yaml | 23 +- ...026-09-16-author-approval-credit.i18n.yaml | 26 +- ...sktop-release-version-derivation.i18n.yaml | 23 +- ...-09-17-persistence-schema-review.i18n.yaml | 23 +- ...-windows-runtime-signature-cache.i18n.yaml | 26 +- ...-17-windows-signature-completion.i18n.yaml | 23 +- ...dence-led-simplification-surveys.i18n.yaml | 29 +- .../2026-09-19-no-unknown-casts.i18n.yaml | 23 +- ...1-desktop-build-version-as-input.i18n.yaml | 23 +- ...6-09-22-workspace-release-ranges.i18n.yaml | 23 +- ...eyed-translation-pairing-records.i18n.yaml | 25 + ...ction-keyed-translation-pairing-records.md | 56 + ...on-keyed-translation-pairing-records.zh.md | 56 + ...llapse-trace-only-session-events.i18n.yaml | 29 +- ...06-20-unify-agent-and-session-id.i18n.yaml | 26 +- .../2026-06-26-fsspec-style-fs-seam.i18n.yaml | 44 +- .../2026-07-17-one-send-one-turn.i18n.yaml | 26 +- ...nwrap-injected-content-envelopes.i18n.yaml | 26 +- ...lan-specific-collaboration-state.i18n.yaml | 35 +- ...-23-acp-automation-only-protocol.i18n.yaml | 26 +- ...nt-loop-observable-state-machine.i18n.yaml | 26 +- ...07-27-request-error-retry-action.i18n.yaml | 23 +- ...-remove-synthetic-log-only-turns.i18n.yaml | 26 +- ...8-09-explicit-schedule-time-zone.i18n.yaml | 26 +- ...it-unneeded-invariant-companions.i18n.yaml | 32 +- ...0-jsonl-only-session-persistence.i18n.yaml | 23 +- ...l-profiles-persistent-shell-only.i18n.yaml | 23 +- ...6-09-05-base-default-file-editor.i18n.yaml | 26 +- ...06-agent-request-freeze-evidence.i18n.yaml | 29 +- .../2026-09-07-file-content-scan.i18n.yaml | 26 +- ...web-subagent-catalog-projections.i18n.yaml | 23 +- ...26-09-09-nontransactional-loader.i18n.yaml | 23 +- ...-09-10-derived-workspace-recency.i18n.yaml | 26 +- .../2026-09-11-remove-e2b-providers.i18n.yaml | 29 +- ...12-ralph-off-in-shipped-defaults.i18n.yaml | 26 +- ...ost-only-remote-input-validation.i18n.yaml | 23 +- ...nt-availability-and-team-targets.i18n.yaml | 23 +- ...subagent-catalog-membership-only.i18n.yaml | 23 +- ...026-09-19-deepseek-messages-only.i18n.yaml | 23 +- ...ove-desktop-profile-core-cleanup.i18n.yaml | 26 +- .../2026-06-19-acp-snapshot-tests.i18n.yaml | 50 +- .../2026-06-19-real-api-e2e-ci.i18n.yaml | 56 +- ...6-07-24-web-gui-browser-e2e-lane.i18n.yaml | 50 +- ...-30-web-browser-snapshot-ci-gate.i18n.yaml | 23 +- ...n-reasoning-chunk-browser-stress.i18n.yaml | 23 +- ...talled-python-wheel-black-box-ci.i18n.yaml | 38 +- ...8-24-session-log-snapshot-corpus.i18n.yaml | 29 +- ...04-session-open-performance-gate.i18n.yaml | 29 +- ...backend-continuation-performance.i18n.yaml | 26 +- ...-09-06-client-assembly-test-line.i18n.yaml | 32 +- ...-06-frontend-performance-budgets.i18n.yaml | 32 +- ...6-pr-ci-runner-temporary-storage.i18n.yaml | 32 +- ...-06-python-runtime-install-retry.i18n.yaml | 23 +- ...standard-hosted-benchmark-runner.i18n.yaml | 23 +- ...publint-test-subprocess-lifetime.i18n.yaml | 23 +- ...07-pwsh-ci-observable-completion.i18n.yaml | 23 +- ...7-subagent-teardown-test-budgets.i18n.yaml | 23 +- ...09-08-ci-completion-observations.i18n.yaml | 26 +- ...9-08-ci-readiness-and-completion.i18n.yaml | 23 +- ...-09-user-patch-hmr-test-delivery.i18n.yaml | 23 +- ...ktop-local-updater-qualification.i18n.yaml | 23 +- ...10-hosted-image-test-assumptions.i18n.yaml | 23 +- ...compaction-fixture-preconditions.i18n.yaml | 23 +- ...desktop-installed-update-journal.i18n.yaml | 23 +- ...sktop-installed-update-materials.i18n.yaml | 23 +- ...on-through-tool-capability-seams.i18n.yaml | 29 +- ...-domain-kv-storage-and-workspace.i18n.yaml | 53 +- ...ssion-projection-and-command-log.i18n.yaml | 53 +- ...root-and-derived-medium-recovery.i18n.yaml | 32 +- ...7-29-durable-last-activity-index.i18n.yaml | 29 +- ...8-semantic-composer-chain-phases.i18n.yaml | 26 +- ...-logical-session-storage-rebuild.i18n.yaml | 59 +- ...-10-session-capability-protocols.i18n.yaml | 50 +- ...09-10-session-data-compatibility.i18n.yaml | 35 +- ...-10-session-developer-transition.i18n.yaml | 35 +- .../2026-09-10-session-refactor-faq.i18n.yaml | 50 +- ...-composer-model-and-draft-editor.i18n.yaml | 44 +- ...08-20-attachment-read-quarantine.i18n.yaml | 26 +- ...026-06-30-pre-tool-input-rewrite.i18n.yaml | 35 +- ...2026-07-06-recallable-compaction.i18n.yaml | 50 +- ...-07-08-interactive-side-sessions.i18n.yaml | 26 +- .../feature/2026-08-04-task-surface.i18n.yaml | 44 +- ...-08-desktop-mandatory-update-api.i18n.yaml | 47 +- ...-09-08-desktop-update-extensions.i18n.yaml | 47 +- ...p-update-policy-and-installation.i18n.yaml | 35 +- ...2026-06-11-api-extractor-reports.i18n.yaml | 29 +- ...11-supply-chain-and-vendor-drift.i18n.yaml | 29 +- ...06-20-discover-package-inventory.i18n.yaml | 23 +- ...3-human-review-skill-maintenance.i18n.yaml | 44 +- ...-packed-session-fixture-migrator.i18n.yaml | 26 +- ...ence-first-documentation-quality.i18n.yaml | 56 +- ...026-08-27-port-tool-owned-render.i18n.yaml | 26 +- ...fer-office-background-scheduling.i18n.yaml | 26 +- .../2026-09-19-config-only-hmr.i18n.yaml | 26 +- ...-09-19-omit-fs-payload-invariant.i18n.yaml | 26 +- ...-provider-only-instruction-reads.i18n.yaml | 26 +- ...-prune-stream-visibility-helpers.i18n.yaml | 26 +- ...19-python-sdk-directional-client.i18n.yaml | 26 +- ...9-19-retire-app-bin-boot-helpers.i18n.yaml | 26 +- ...ire-prompt-registry-change-event.i18n.yaml | 26 +- ...09-19-shell-env-key-declarations.i18n.yaml | 26 +- ...im-session-query-convenience-api.i18n.yaml | 26 +- ...deterministic-and-stress-testing.i18n.yaml | 26 +- .../2026-06-11-mutation-testing.i18n.yaml | 26 +- .../2026-06-16-typed-event-schemas.i18n.yaml | 44 +- ...-25-client-settings-locale-theme.i18n.yaml | 38 +- ...8-08-cordis-web-dynamic-packages.i18n.yaml | 77 +- ...-06-11-architectural-conformance.i18n.yaml | 26 +- ...t-first-npm-baseline-publication.i18n.yaml | 41 +- ...-20-drop-durable-step-boundaries.i18n.yaml | 23 +- ...ld-session-persistence-interface.i18n.yaml | 23 +- ...06-20-truncate-interrupted-turns.i18n.yaml | 26 +- ...-07-04-prune-dead-core-spine-api.i18n.yaml | 29 +- ...-prune-unused-skill-registry-api.i18n.yaml | 26 +- ...19-fold-compaction-package-split.i18n.yaml | 26 +- ...6-07-19-make-jsonrpc-directional.i18n.yaml | 29 +- ...-promises-for-hand-rolled-sleeps.i18n.yaml | 26 +- ...ency-swaps-rejected-by-nih-audit.i18n.yaml | 20 +- .../dsh-doc/references/metadata-links-i18n.md | 2 +- .agents/skills/dsh-translate-docs/SKILL.md | 4 +- .gitattributes | 4 - .github/issue-management/README.i18n.yaml | 38 +- .github/preview-sizing/README.i18n.yaml | 26 +- BRAND_GUIDELINES.i18n.yaml | 11 +- CONTRIBUTING.i18n.yaml | 11 +- README.i18n.yaml | 38 +- SAFETY.i18n.yaml | 23 +- apps/cli/README.i18n.yaml | 26 +- apps/cli/reference/README.i18n.yaml | 35 +- apps/desktop/README.i18n.yaml | 71 +- apps/desktop/tests/README.i18n.yaml | 26 +- .../tests/installed-update/README.i18n.yaml | 32 +- .../installed-update/network/README.i18n.yaml | 32 +- .../publication/README.i18n.yaml | 32 +- apps/web/tests/README.i18n.yaml | 20 +- .../tests/fixtures/office/README.i18n.yaml | 11 +- .../active-stream-reconnect/README.i18n.yaml | 11 +- .../agent-continuation/README.i18n.yaml | 26 +- .../long-session-browser/README.i18n.yaml | 17 +- docs/agent-lifecycle.i18n.yaml | 14 +- docs/api-gateway.i18n.yaml | 32 +- docs/architecture.i18n.yaml | 41 +- docs/capability-seams.i18n.yaml | 14 +- docs/config-catalog.i18n.yaml | 23 +- docs/config-catalog.md | 1405 ++++++----- docs/config-catalog.zh.md | 1409 ++++++----- docs/cookbook/adding-a-package.i18n.yaml | 32 +- docs/cookbook/adding-a-remote-api.i18n.yaml | 29 +- .../adding-a-session-format-version.i18n.yaml | 44 +- .../cookbook/adding-a-settings-card.i18n.yaml | 26 +- docs/cookbook/adding-a-tool.i18n.yaml | 35 +- .../adding-a-vendored-package.i18n.yaml | 23 +- docs/cookbook/adding-an-llm-adapter.i18n.yaml | 23 +- docs/cookbook/extension-cookbook.i18n.yaml | 29 +- .../maintaining-dsh-code-review.i18n.yaml | 26 +- ...sponding-to-pr-review-on-a-stack.i18n.yaml | 20 +- ...viewing-persistence-type-changes.i18n.yaml | 35 +- docs/cordis-api/context.i18n.yaml | 77 +- docs/cordis-api/events.i18n.yaml | 41 +- docs/cordis-api/fiber.i18n.yaml | 80 +- docs/cordis-api/registry.i18n.yaml | 26 +- docs/cordis-api/service.i18n.yaml | 41 +- docs/cordis-primer.i18n.yaml | 26 +- .../cordis-tutorial/01-first-plugin.i18n.yaml | 26 +- .../02-lifecycle-and-effects.i18n.yaml | 20 +- docs/cordis-tutorial/03-services.i18n.yaml | 26 +- docs/cordis-tutorial/04-events.i18n.yaml | 20 +- docs/cordis-tutorial/05-config.i18n.yaml | 23 +- .../06-composition-and-hmr.i18n.yaml | 20 +- .../07-into-the-harness.i18n.yaml | 23 +- docs/cordis-tutorial/index.i18n.yaml | 20 +- ...deepseek-llm-api-wire-extensions.i18n.yaml | 38 +- docs/defensive-patterns.i18n.yaml | 32 +- docs/development.i18n.yaml | 53 +- docs/development.md | 8 +- docs/development.zh.md | 8 +- docs/event-producer-consumer.i18n.yaml | 17 +- docs/event-producer-consumer.md | 4 + docs/event-producer-consumer.zh.md | 4 + docs/glossary.i18n.yaml | 29 +- docs/graph-atlas.i18n.yaml | 14 +- docs/i18n/README.i18n.yaml | 23 +- docs/i18n/README.md | 20 +- docs/i18n/README.zh.md | 20 +- docs/i18n/terminology.md | 2 +- docs/i18n/translation-rules.i18n.yaml | 32 +- docs/module-graph.i18n.yaml | 14 +- docs/module-graph.md | 4 +- docs/module-graph.zh.md | 4 +- docs/persistence-catalog.i18n.yaml | 2060 ++++++++++++++++- .../2026-09-11-initial.i18n.yaml | 32 +- ...09-12-auto-review-error-metadata.i18n.yaml | 32 +- .../2026-09-14-image-offload.i18n.yaml | 32 +- ...26-09-14-workspace-changes-event.i18n.yaml | 32 +- .../2026-09-16-session-format-v4.i18n.yaml | 32 +- ...2026-09-20-unknown-child-catalog.i18n.yaml | 32 +- docs/persistence-changes/README.i18n.yaml | 32 +- .../historical-formats/README.i18n.yaml | 32 +- .../historical-formats/v0.i18n.yaml | 1289 ++++++++++- .../historical-formats/v1.i18n.yaml | 1289 ++++++++++- .../historical-formats/v2.i18n.yaml | 1349 ++++++++++- .../historical-formats/v3.i18n.yaml | 1445 +++++++++++- .../releases/README.i18n.yaml | 35 +- .../releases/dsh-v0.0.1-rc.1.i18n.yaml | 35 +- .../releases/dsh-v0.0.1-rc.2.i18n.yaml | 35 +- .../releases/dsh-v0.0.1-rc.3.i18n.yaml | 35 +- .../releases/dsh-v0.0.1-rc.4.i18n.yaml | 35 +- .../releases/dsh-v0.0.1-rc.5.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.2.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.3.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.5.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.6.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.7.i18n.yaml | 35 +- .../releases/dsh-v0.1.0-rc.8.i18n.yaml | 35 +- .../releases/dsh-v0.1.1-rc.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.1-rc.2.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-alpha.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-alpha.2.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-alpha.3.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-alpha.4.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-alpha.5.i18n.yaml | 35 +- .../releases/dsh-v0.1.2-rc.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.3-alpha.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.3-alpha.2.i18n.yaml | 35 +- .../releases/dsh-v0.1.5-alpha.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.5-alpha.2.i18n.yaml | 35 +- .../releases/dsh-v0.1.5-rc.1.i18n.yaml | 35 +- .../releases/dsh-v0.1.5-rc.2.i18n.yaml | 35 +- ...-acp-default-export-drops-inject.i18n.yaml | 38 +- ...ession-disabled-filesystem-tools.i18n.yaml | 32 +- ...0003-web-agent-gui-feedback-loop.i18n.yaml | 32 +- ...ice-misclassified-child-failures.i18n.yaml | 32 +- docs/postmortem/README.i18n.yaml | 11 +- docs/rescope.i18n.yaml | 23 +- docs/session-format-status.i18n.yaml | 32 +- docs/subsystems/README.i18n.yaml | 11 +- docs/subsystems/agent-team.i18n.yaml | 26 +- docs/subsystems/approval.i18n.yaml | 23 +- docs/subsystems/attachment.i18n.yaml | 17 +- docs/subsystems/boot.i18n.yaml | 14 +- docs/subsystems/browser-use.i18n.yaml | 23 +- docs/subsystems/client-modules.i18n.yaml | 23 +- docs/subsystems/client-resources.i18n.yaml | 26 +- docs/subsystems/commands.i18n.yaml | 23 +- docs/subsystems/compaction.i18n.yaml | 26 +- docs/subsystems/computer-use.i18n.yaml | 20 +- docs/subsystems/conversation.i18n.yaml | 35 +- docs/subsystems/core.i18n.yaml | 41 +- docs/subsystems/credentials.i18n.yaml | 29 +- docs/subsystems/deliverables.i18n.yaml | 32 +- docs/subsystems/extensions.i18n.yaml | 11 +- docs/subsystems/feedback.i18n.yaml | 32 +- docs/subsystems/filesystem.i18n.yaml | 38 +- docs/subsystems/goal.i18n.yaml | 23 +- docs/subsystems/invariants.i18n.yaml | 23 +- docs/subsystems/jobs.i18n.yaml | 29 +- docs/subsystems/llm-streaming.i18n.yaml | 53 +- docs/subsystems/lsp.i18n.yaml | 23 +- docs/subsystems/mcp.i18n.yaml | 38 +- docs/subsystems/office-to-pdf.i18n.yaml | 23 +- docs/subsystems/permission-presets.i18n.yaml | 23 +- docs/subsystems/persistence.i18n.yaml | 41 +- docs/subsystems/plan.i18n.yaml | 26 +- docs/subsystems/product-telemetry.i18n.yaml | 14 +- docs/subsystems/ptc-runtime.i18n.yaml | 23 +- docs/subsystems/sandbox.i18n.yaml | 25 +- docs/subsystems/schedule.i18n.yaml | 32 +- docs/subsystems/scope.i18n.yaml | 20 +- docs/subsystems/session-projection.i18n.yaml | 20 +- docs/subsystems/session-query.i18n.yaml | 32 +- docs/subsystems/session-reference.i18n.yaml | 23 +- docs/subsystems/session-telemetry.i18n.yaml | 26 +- docs/subsystems/session-title.i18n.yaml | 20 +- docs/subsystems/session.i18n.yaml | 71 +- docs/subsystems/settings.i18n.yaml | 17 +- docs/subsystems/shell.i18n.yaml | 29 +- docs/subsystems/sidebar-right.i18n.yaml | 41 +- docs/subsystems/skills.i18n.yaml | 32 +- docs/subsystems/slots.i18n.yaml | 32 +- docs/subsystems/spill.i18n.yaml | 20 +- docs/subsystems/ssh.i18n.yaml | 26 +- docs/subsystems/storage.i18n.yaml | 29 +- docs/subsystems/subagent.i18n.yaml | 35 +- docs/subsystems/subprocess.i18n.yaml | 35 +- docs/subsystems/system-prompt.i18n.yaml | 23 +- docs/subsystems/terminal.i18n.yaml | 23 +- docs/subsystems/todo.i18n.yaml | 17 +- docs/subsystems/token-meter.i18n.yaml | 17 +- docs/subsystems/tools.i18n.yaml | 29 +- docs/subsystems/typert.i18n.yaml | 26 +- docs/subsystems/user-questions.i18n.yaml | 29 +- docs/subsystems/voice-input.i18n.yaml | 23 +- docs/subsystems/web-client.i18n.yaml | 41 +- docs/subsystems/web-server.i18n.yaml | 20 +- docs/subsystems/web.i18n.yaml | 32 +- docs/subsystems/webhook.i18n.yaml | 23 +- docs/subsystems/workflow.i18n.yaml | 32 +- docs/subsystems/workspace.i18n.yaml | 32 +- docs/testing.i18n.yaml | 38 +- docs/tool-catalog.i18n.yaml | 314 ++- docs/tool-execution-pipeline.i18n.yaml | 14 +- docs/user/develop/basic/config.i18n.yaml | 32 +- docs/user/develop/basic/index.i18n.yaml | 41 +- docs/user/develop/basic/publish.i18n.yaml | 35 +- docs/user/develop/basic/tool.i18n.yaml | 20 +- docs/user/develop/framework/events.i18n.yaml | 50 +- docs/user/develop/framework/index.i18n.yaml | 35 +- docs/user/develop/framework/service.i18n.yaml | 44 +- .../develop/practice/dynamic-cordis.i18n.yaml | 14 +- docs/user/develop/practice/index.i18n.yaml | 50 +- .../develop/practice/llm-adapter.i18n.yaml | 38 +- docs/user/guide/github-review.i18n.yaml | 29 +- docs/user/guide/index.i18n.yaml | 23 +- docs/user/guide/mcp-memory.i18n.yaml | 41 +- docs/user/guide/network-proxy.i18n.yaml | 29 +- docs/user/guide/providers.i18n.yaml | 41 +- docs/user/guide/python-sdk.i18n.yaml | 32 +- docs/user/guide/schedule.i18n.yaml | 11 +- docs/user/index.i18n.yaml | 14 +- docs/web-styling.i18n.yaml | 20 +- native/README.i18n.yaml | 14 +- native/system/README.i18n.yaml | 32 +- .../packages/darwin-arm64/README.i18n.yaml | 14 +- .../packages/darwin-x64/README.i18n.yaml | 14 +- native/system/packages/entry/README.i18n.yaml | 14 +- .../packages/linux-arm64/README.i18n.yaml | 14 +- .../packages/linux-x64/README.i18n.yaml | 14 +- package.json | 1 - packages/README.i18n.yaml | 35 +- packages/acp/README.i18n.yaml | 29 +- packages/acp/acp/README.i18n.yaml | 86 +- packages/api/README.i18n.yaml | 29 +- .../api/account-controller/README.i18n.yaml | 41 +- packages/api/gateway/README.i18n.yaml | 38 +- packages/api/job-controller/README.i18n.yaml | 38 +- packages/api/remotes/README.i18n.yaml | 41 +- .../api/session-controller/README.i18n.yaml | 44 +- .../api/settings-controller/README.i18n.yaml | 38 +- .../api/terminal-controller/README.i18n.yaml | 41 +- .../api/workspace-controller/README.i18n.yaml | 38 +- packages/api/workspace-files/README.i18n.yaml | 71 +- packages/attachment/README.i18n.yaml | 29 +- .../attachment-local/README.i18n.yaml | 65 +- .../attachment/attachment/README.i18n.yaml | 71 +- packages/boot/README.i18n.yaml | 29 +- packages/boot/app-boot/README.i18n.yaml | 77 +- packages/boot/cmdline/README.i18n.yaml | 65 +- packages/boot/config-editor/README.i18n.yaml | 41 +- packages/boot/hmr/README.i18n.yaml | 50 +- packages/boot/plugin-manager/README.i18n.yaml | 59 +- packages/browser-use/README.i18n.yaml | 29 +- .../browser-use/browser-use/README.i18n.yaml | 41 +- packages/bundle/README.i18n.yaml | 29 +- packages/bundle/acp-app/README.i18n.yaml | 47 +- packages/bundle/base/README.i18n.yaml | 65 +- packages/bundle/headless/README.i18n.yaml | 71 +- packages/bundle/sdk-app/README.i18n.yaml | 44 +- packages/bundle/sdk-minimal/README.i18n.yaml | 53 +- packages/bundle/web-app/README.i18n.yaml | 80 +- packages/client/README.i18n.yaml | 29 +- packages/client/connection/README.i18n.yaml | 41 +- packages/client/file-upload/README.i18n.yaml | 41 +- packages/client/hmr/README.i18n.yaml | 68 +- packages/client/locale/README.i18n.yaml | 68 +- packages/client/modules/README.i18n.yaml | 74 +- packages/client/resources/README.i18n.yaml | 53 +- packages/client/store/README.i18n.yaml | 32 +- .../client/ui-agent-preset/README.i18n.yaml | 41 +- packages/client/ui-approval/README.i18n.yaml | 32 +- .../client/ui-attachment/README.i18n.yaml | 50 +- .../client/ui-brand-official/README.i18n.yaml | 47 +- packages/client/ui-chat/README.i18n.yaml | 56 +- .../conversation-nodes/README.i18n.yaml | 59 +- packages/client/ui-commands/README.i18n.yaml | 50 +- .../client/ui-conversation/README.i18n.yaml | 41 +- .../client/ui-deliverables/README.i18n.yaml | 62 +- .../README.i18n.yaml | 44 +- .../README.i18n.yaml | 44 +- packages/client/ui-dockkit/README.i18n.yaml | 44 +- packages/client/ui-goal/README.i18n.yaml | 47 +- .../client/ui-input-trigger/README.i18n.yaml | 44 +- packages/client/ui-jobs/README.i18n.yaml | 47 +- packages/client/ui-layout/README.i18n.yaml | 47 +- .../ui-message-feedback/README.i18n.yaml | 44 +- .../ui-model-selection/README.i18n.yaml | 50 +- .../client/ui-open-in-app/README.i18n.yaml | 44 +- .../ui-permission-presets/README.i18n.yaml | 47 +- packages/client/ui-plan/README.i18n.yaml | 50 +- .../client/ui-plugin-manager/README.i18n.yaml | 65 +- .../client/ui-primitives/README.i18n.yaml | 62 +- packages/client/ui-reference/README.i18n.yaml | 53 +- packages/client/ui-renderer/README.i18n.yaml | 56 +- packages/client/ui-schedule/README.i18n.yaml | 47 +- packages/client/ui-session/README.i18n.yaml | 32 +- .../ui-settings-account/README.i18n.yaml | 41 +- .../ui-settings-agent-loop/README.i18n.yaml | 41 +- .../ui-settings-general/README.i18n.yaml | 62 +- .../ui-settings-models/README.i18n.yaml | 65 +- .../README.i18n.yaml | 56 +- .../ui-settings-plugins/README.i18n.yaml | 41 +- .../client/ui-settings-shell/README.i18n.yaml | 41 +- .../ui-settings-subagent/README.i18n.yaml | 41 +- .../ui-settings-web-search/README.i18n.yaml | 41 +- packages/client/ui-settings/README.i18n.yaml | 62 +- .../ui-sidebar-browser/README.i18n.yaml | 56 +- .../README.i18n.yaml | 50 +- .../tests/fuzz/README.i18n.yaml | 20 +- .../client/ui-sidebar-files/README.i18n.yaml | 38 +- .../client/ui-sidebar-right/README.i18n.yaml | 59 +- .../ui-sidebar-terminal/README.i18n.yaml | 41 +- packages/client/ui-sidebar/README.i18n.yaml | 59 +- packages/client/ui-skill/README.i18n.yaml | 62 +- packages/client/ui-slots/README.i18n.yaml | 59 +- packages/client/ui-subagent/README.i18n.yaml | 68 +- packages/client/ui-theme/README.i18n.yaml | 59 +- packages/client/ui-tool/README.i18n.yaml | 53 +- .../client/ui-trajectory/README.i18n.yaml | 53 +- .../client/ui-user-questions/README.i18n.yaml | 56 +- .../client/ui-workflow-run/README.i18n.yaml | 53 +- packages/client/ui-workspace/README.i18n.yaml | 77 +- packages/client/web/README.i18n.yaml | 65 +- packages/compaction/README.i18n.yaml | 29 +- .../command-compact/README.i18n.yaml | 71 +- .../compaction-basic/README.i18n.yaml | 104 +- .../compaction-image-offload/README.i18n.yaml | 59 +- .../README.i18n.yaml | 71 +- .../compaction/compaction/README.i18n.yaml | 89 +- packages/computer-use/README.i18n.yaml | 29 +- .../computer-use/README.i18n.yaml | 41 +- packages/context/README.i18n.yaml | 29 +- .../agent-instructions/README.i18n.yaml | 104 +- .../file-reference-local/README.i18n.yaml | 71 +- .../context/file-reference/README.i18n.yaml | 59 +- .../session-reference/README.i18n.yaml | 71 +- .../context/time-context/README.i18n.yaml | 74 +- .../context/tmux-context/README.i18n.yaml | 71 +- packages/core/README.i18n.yaml | 29 +- .../core/agent-default-model/README.i18n.yaml | 56 +- packages/core/agent-loop/README.i18n.yaml | 104 +- .../agent-tool-presentation/README.i18n.yaml | 59 +- packages/core/agent/README.i18n.yaml | 95 +- packages/core/scope/README.i18n.yaml | 56 +- packages/core/session/README.i18n.yaml | 107 +- packages/core/system-prompt/README.i18n.yaml | 92 +- packages/core/tools/README.i18n.yaml | 107 +- packages/credentials/README.i18n.yaml | 29 +- .../authorization/README.i18n.yaml | 66 +- .../credentials-local/README.i18n.yaml | 80 +- .../credentials/credentials/README.i18n.yaml | 77 +- .../README.i18n.yaml | 41 +- .../deepseek-account/README.i18n.yaml | 41 +- packages/deliverables/README.i18n.yaml | 29 +- .../tool-present/README.i18n.yaml | 50 +- .../workspace-changes/README.i18n.yaml | 41 +- packages/document/README.i18n.yaml | 29 +- .../document/office-to-pdf/README.i18n.yaml | 41 +- packages/experimental/README.i18n.yaml | 29 +- .../agent-team-profile/README.i18n.yaml | 56 +- .../experimental/agent-team/README.i18n.yaml | 104 +- .../api-speech-to-text/README.i18n.yaml | 41 +- .../experimental/auto-review/README.i18n.yaml | 68 +- .../README.i18n.yaml | 50 +- .../README.i18n.yaml | 50 +- .../browser-use-runtime/README.i18n.yaml | 41 +- .../README.i18n.yaml | 71 +- .../client-ui-agent-team/README.i18n.yaml | 47 +- .../client-ui-voice-input/README.i18n.yaml | 41 +- .../README.i18n.yaml | 59 +- .../README.i18n.yaml | 74 +- .../experimental/inspector/README.i18n.yaml | 50 +- .../ptc-runtime-python/README.i18n.yaml | 65 +- .../README.i18n.yaml | 41 +- .../speech-to-text/README.i18n.yaml | 41 +- .../tool-agent-team/README.i18n.yaml | 74 +- .../voice-input-bundle/README.i18n.yaml | 41 +- .../webworker-packer/README.i18n.yaml | 35 +- .../webworker-runtime/README.i18n.yaml | 35 +- packages/extensions/README.i18n.yaml | 29 +- .../cordis-client-runner/README.i18n.yaml | 83 +- .../cordis-host-runner/README.i18n.yaml | 71 +- .../extensions/tool-cordis/README.i18n.yaml | 50 +- .../extensions/ui-cordis/README.i18n.yaml | 59 +- packages/feedback/README.i18n.yaml | 29 +- .../command-feedback/README.i18n.yaml | 68 +- .../message-feedback/README.i18n.yaml | 59 +- packages/fs/README.i18n.yaml | 29 +- packages/fs/fs-local/README.i18n.yaml | 65 +- .../fs/fs-observation-policy/README.i18n.yaml | 74 +- packages/fs/fs-sandbox/README.i18n.yaml | 71 +- packages/fs/fs/README.i18n.yaml | 62 +- packages/fs/tool-fs-search/README.i18n.yaml | 122 +- packages/fs/tool-fs/README.i18n.yaml | 146 +- .../tool-str-replace-editor/README.i18n.yaml | 83 +- packages/goal/README.i18n.yaml | 29 +- packages/goal/command-goal/README.i18n.yaml | 68 +- .../goal/goal-round-driver/README.i18n.yaml | 71 +- packages/goal/goal/README.i18n.yaml | 77 +- packages/goal/tool-goal/README.i18n.yaml | 83 +- packages/guard/README.i18n.yaml | 29 +- .../repeat-tool-reminder/README.i18n.yaml | 89 +- .../guard/timeout-policy/README.i18n.yaml | 71 +- packages/hooks/README.i18n.yaml | 29 +- packages/hooks/hook-protocol/README.i18n.yaml | 65 +- .../hooks/hooks-claude-code/README.i18n.yaml | 92 +- packages/hooks/hooks-codex/README.i18n.yaml | 92 +- packages/host/README.i18n.yaml | 29 +- .../directory-picker-auto/README.i18n.yaml | 62 +- .../directory-picker-browse/README.i18n.yaml | 65 +- .../directory-picker-native/README.i18n.yaml | 59 +- .../host/directory-picker/README.i18n.yaml | 62 +- .../host/frontend-static/README.i18n.yaml | 59 +- packages/host/open-in-app/README.i18n.yaml | 56 +- .../host/plugin-inventory/README.i18n.yaml | 59 +- .../product-telemetry-otel/README.i18n.yaml | 41 +- packages/host/webserver/README.i18n.yaml | 62 +- packages/identity/README.i18n.yaml | 29 +- .../anonymous-user-id/README.i18n.yaml | 68 +- packages/interaction/README.i18n.yaml | 29 +- .../interaction/commands/README.i18n.yaml | 80 +- .../permission-presets/README.i18n.yaml | 68 +- .../tool-ask-user/README.i18n.yaml | 80 +- .../user-approval/README.i18n.yaml | 92 +- .../user-questions/README.i18n.yaml | 47 +- packages/jobs/README.i18n.yaml | 29 +- packages/jobs/jobs-local/README.i18n.yaml | 71 +- packages/jobs/jobs/README.i18n.yaml | 65 +- packages/jobs/tool-jobs/README.i18n.yaml | 101 +- packages/llm/README.i18n.yaml | 29 +- .../README.i18n.yaml | 35 +- .../llm/llm-deepseek-account/README.i18n.yaml | 50 +- .../llm/llm-deepseek-api-key/README.i18n.yaml | 50 +- packages/llm/llm-deepseek/README.i18n.yaml | 95 +- packages/llm/llm-pi-ai/README.i18n.yaml | 98 +- packages/llm/llm-retry/README.i18n.yaml | 74 +- packages/llm/llm/README.i18n.yaml | 68 +- .../README.i18n.yaml | 47 +- packages/llm/token-meter/README.i18n.yaml | 68 +- packages/lsp/README.i18n.yaml | 29 +- packages/lsp/lsp-stdio/README.i18n.yaml | 62 +- packages/lsp/lsp/README.i18n.yaml | 62 +- packages/lsp/tool-lsp/README.i18n.yaml | 107 +- packages/mcp/README.i18n.yaml | 29 +- packages/mcp/mcp-client/README.i18n.yaml | 101 +- packages/mcp/mcp-resources/README.i18n.yaml | 68 +- packages/plan/README.i18n.yaml | 29 +- packages/plan/plan-mode/README.i18n.yaml | 113 +- packages/preset/README.i18n.yaml | 29 +- .../agent-preset-registry/README.i18n.yaml | 53 +- packages/preset/agent-preset/README.i18n.yaml | 41 +- packages/preset/persona/README.i18n.yaml | 68 +- packages/ptc-runtime/README.i18n.yaml | 29 +- .../ptc-runtime-node/README.i18n.yaml | 62 +- .../ptc-runtime/ptc-runtime/README.i18n.yaml | 74 +- packages/runtime-diagnostics/README.i18n.yaml | 29 +- .../invariants/README.i18n.yaml | 65 +- packages/sandbox/README.i18n.yaml | 29 +- .../sandbox/sandbox-local/README.i18n.yaml | 70 +- .../sandbox/sandbox-policy/README.i18n.yaml | 83 +- .../sandbox-windows-acl/README.i18n.yaml | 73 +- packages/sandbox/sandbox/README.i18n.yaml | 95 +- packages/schedule/README.i18n.yaml | 29 +- packages/schedule/schedule/README.i18n.yaml | 116 +- packages/sdk/README.i18n.yaml | 29 +- packages/sdk/client/README.i18n.yaml | 59 +- packages/sdk/protocol/README.i18n.yaml | 59 +- packages/sdk/server/README.i18n.yaml | 77 +- packages/session-query/README.i18n.yaml | 29 +- .../session-log-export/README.i18n.yaml | 77 +- .../session-query-sqlite/README.i18n.yaml | 71 +- .../session-query/README.i18n.yaml | 71 +- .../tool-session-query/README.i18n.yaml | 101 +- packages/session/README.i18n.yaml | 41 +- .../README.i18n.yaml | 68 +- .../session-format-catalog/README.i18n.yaml | 56 +- .../session-format-v0-to-v1/README.i18n.yaml | 56 +- .../session-format-v1-to-v2/README.i18n.yaml | 56 +- .../session-format-v2-to-v3/README.i18n.yaml | 83 +- .../session-format-v3-to-v4/README.i18n.yaml | 95 +- .../session/session-format/README.i18n.yaml | 56 +- .../session-log-deepseek/README.i18n.yaml | 50 +- .../README.i18n.yaml | 74 +- .../session-persistence/README.i18n.yaml | 83 +- .../session-projection-cache/README.i18n.yaml | 65 +- .../session-projection/README.i18n.yaml | 62 +- .../session/session-stats/README.i18n.yaml | 62 +- .../session-telemetry-otel/README.i18n.yaml | 65 +- .../session-telemetry/README.i18n.yaml | 68 +- .../README.i18n.yaml | 68 +- .../README.i18n.yaml | 68 +- .../session-title-llm/README.i18n.yaml | 68 +- .../session/session-title/README.i18n.yaml | 77 +- .../session-turn-outline/README.i18n.yaml | 59 +- packages/settings/README.i18n.yaml | 29 +- packages/settings/settings/README.i18n.yaml | 41 +- packages/shell/README.i18n.yaml | 29 +- packages/shell/bash-local/README.i18n.yaml | 65 +- packages/shell/bash-sandbox/README.i18n.yaml | 101 +- packages/shell/pwsh-local/README.i18n.yaml | 68 +- packages/shell/pwsh-sandbox/README.i18n.yaml | 77 +- packages/shell/shell-env/README.i18n.yaml | 62 +- packages/shell/shell/README.i18n.yaml | 71 +- .../tool-bash-persistent/README.i18n.yaml | 83 +- packages/shell/tool-bash/README.i18n.yaml | 131 +- .../tool-pwsh-persistent/README.i18n.yaml | 83 +- packages/shell/tool-pwsh/README.i18n.yaml | 128 +- packages/skill/README.i18n.yaml | 29 +- packages/skill/skill-badge/README.i18n.yaml | 59 +- .../skill/skill-filesystem/README.i18n.yaml | 71 +- packages/skill/skill-office/README.i18n.yaml | 47 +- packages/skill/skill/README.i18n.yaml | 68 +- packages/skill/tool-skill/README.i18n.yaml | 140 +- .../README.i18n.yaml | 71 +- packages/spill/README.i18n.yaml | 29 +- packages/spill/spill-local/README.i18n.yaml | 68 +- packages/spill/spill-policy/README.i18n.yaml | 86 +- packages/spill/spill/README.i18n.yaml | 74 +- packages/ssh/README.i18n.yaml | 29 +- packages/ssh/fs-ssh/README.i18n.yaml | 41 +- packages/ssh/sandbox-ssh/README.i18n.yaml | 41 +- packages/ssh/ssh/README.i18n.yaml | 44 +- packages/ssh/subprocess-ssh/README.i18n.yaml | 41 +- packages/storage/README.i18n.yaml | 29 +- .../storage/storage-domain/README.i18n.yaml | 77 +- .../storage/storage-json/README.i18n.yaml | 68 +- .../storage/storage-sqlite/README.i18n.yaml | 68 +- packages/storage/storage/README.i18n.yaml | 71 +- packages/subagent/README.i18n.yaml | 29 +- .../subagent/subagent-acp/README.i18n.yaml | 89 +- .../subagent-claude-code/README.i18n.yaml | 86 +- .../subagent/subagent-codex/README.i18n.yaml | 86 +- .../subagent-dsh-sdk/README.i18n.yaml | 89 +- .../subagent-fork-in-process/README.i18n.yaml | 86 +- .../README.i18n.yaml | 110 +- .../README.i18n.yaml | 83 +- packages/subagent/subagent/README.i18n.yaml | 98 +- .../tool-subagent-control/README.i18n.yaml | 110 +- .../subagent/tool-subagent/README.i18n.yaml | 125 +- packages/subprocess/README.i18n.yaml | 29 +- .../subprocess-local/README.i18n.yaml | 74 +- .../subprocess/subprocess/README.i18n.yaml | 77 +- .../subprocess/win32-process/README.i18n.yaml | 47 +- packages/terminal/README.i18n.yaml | 29 +- .../terminal/terminal-bash/README.i18n.yaml | 95 +- packages/terminal/terminal/README.i18n.yaml | 83 +- .../terminal/tool-terminal/README.i18n.yaml | 104 +- packages/test-support/README.i18n.yaml | 29 +- .../agent-loop-testkit/README.i18n.yaml | 56 +- .../client-runtime/README.i18n.yaml | 71 +- .../llm-mock-server/README.i18n.yaml | 65 +- .../test-support/llm-replay/README.i18n.yaml | 65 +- .../loader-smoke/README.i18n.yaml | 62 +- .../test-support/remote-mock/README.i18n.yaml | 65 +- .../session-snapshot/README.i18n.yaml | 65 +- packages/todo/README.i18n.yaml | 29 +- packages/todo/tool-todo/README.i18n.yaml | 95 +- packages/typert/README.i18n.yaml | 29 +- packages/typert/generator/README.i18n.yaml | 65 +- packages/typert/loader/README.i18n.yaml | 62 +- packages/typert/protocol/README.i18n.yaml | 68 +- packages/typert/registry/README.i18n.yaml | 65 +- packages/util/README.i18n.yaml | 29 +- packages/util/atomic-write/README.i18n.yaml | 59 +- packages/util/brand/README.i18n.yaml | 50 +- packages/util/chunked-list/README.i18n.yaml | 41 +- packages/util/crypto/README.i18n.yaml | 38 +- packages/util/deque/README.i18n.yaml | 50 +- packages/util/home-paths/README.i18n.yaml | 56 +- packages/util/http-proxy/README.i18n.yaml | 59 +- .../util/launch-environment/README.i18n.yaml | 53 +- packages/util/lazy-require/README.i18n.yaml | 44 +- packages/util/native-command/README.i18n.yaml | 56 +- .../util/output-retention/README.i18n.yaml | 68 +- .../util/package-manifest/README.i18n.yaml | 41 +- packages/util/time/README.i18n.yaml | 38 +- packages/util/timeout/README.i18n.yaml | 68 +- packages/util/values/README.i18n.yaml | 47 +- packages/util/workspace-path/README.i18n.yaml | 29 +- packages/web/README.i18n.yaml | 29 +- packages/web/tool-web/README.i18n.yaml | 155 +- packages/web/web-fetch-http/README.i18n.yaml | 65 +- .../web/web-search-deepseek/README.i18n.yaml | 89 +- packages/web/web-search-exa/README.i18n.yaml | 65 +- .../web-search-perplexity/README.i18n.yaml | 86 +- packages/web/web/README.i18n.yaml | 71 +- packages/webhook/README.i18n.yaml | 29 +- .../webhook/webhook-github/README.i18n.yaml | 41 +- packages/webhook/webhook/README.i18n.yaml | 50 +- packages/workflow/README.i18n.yaml | 29 +- packages/workflow/tool-ralph/README.i18n.yaml | 104 +- .../workflow/tool-workflow/README.i18n.yaml | 107 +- .../workflow/workflow-ptc/README.i18n.yaml | 83 +- packages/workflow/workflow/README.i18n.yaml | 65 +- packages/workspace/README.i18n.yaml | 29 +- packages/workspace/workspace/README.i18n.yaml | 92 +- python/README.i18n.yaml | 20 +- python/development.i18n.yaml | 26 +- python/sdk-runtime/README.i18n.yaml | 23 +- python/sdk/README.i18n.yaml | 20 +- python/sdk/examples/README.i18n.yaml | 17 +- scripts/coverage-exempt.ts | 1 - scripts/doc-standard.spec.ts | 3 +- scripts/gen-config-catalog.spec.ts | 42 +- scripts/gen-config-catalog.ts | 250 +- scripts/gen-cordis-catalog-record.spec.ts | 175 -- scripts/gen-cordis-catalog.ts | 73 +- scripts/gen-doc-graphs.ts | 46 +- scripts/gen-module-graph.ts | 48 +- scripts/gen-translation-brief.ts | 59 +- scripts/install-lefthook.mjs | 102 - scripts/install-lefthook.spec.ts | 89 +- scripts/merge-translation-pairing-driver.sh | 35 - scripts/merge-translation-pairing.ts | 53 - scripts/persistence-artifacts.ts | 13 +- .../request-response.expected.json | 2 +- scripts/translation-pairing-git.ts | 84 +- scripts/translation-pairing-merge.spec.ts | 704 ------ scripts/translation-pairing-merge.ts | 408 ---- scripts/translation-pairing-record.ts | 206 +- scripts/translation-pairing.spec.ts | 226 +- scripts/translation-pairing.ts | 110 +- scripts/verify-concrete-terms.spec.ts | 5 + scripts/verify-concrete-terms.ts | 5 +- scripts/verify-translation-pairing.ts | 88 +- 1154 files changed, 48932 insertions(+), 8951 deletions(-) create mode 100644 .agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml rename .agents/notes/{implemented => archived}/process/2026-08-08-automatic-translation-pairing-merges.md (99%) rename .agents/notes/{implemented => archived}/process/2026-08-08-automatic-translation-pairing-merges.zh.md (99%) delete mode 100644 .agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml create mode 100644 .agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.i18n.yaml create mode 100644 .agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.md create mode 100644 .agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.zh.md delete mode 100644 scripts/gen-cordis-catalog-record.spec.ts delete mode 100755 scripts/merge-translation-pairing-driver.sh delete mode 100644 scripts/merge-translation-pairing.ts delete mode 100644 scripts/translation-pairing-merge.spec.ts delete mode 100644 scripts/translation-pairing-merge.ts diff --git a/.agents/notes/README.i18n.yaml b/.agents/notes/README.i18n.yaml index f6289cf96f..1fa95a5e2d 100644 --- a/.agents/notes/README.i18n.yaml +++ b/.agents/notes/README.i18n.yaml @@ -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 diff --git a/.agents/notes/archived/manifest.json b/.agents/notes/archived/manifest.json index 6fc82fe8a6..5ed6850038 100644 --- a/.agents/notes/archived/manifest.json +++ b/.agents/notes/archived/manifest.json @@ -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", diff --git a/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml b/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml new file mode 100644 index 0000000000..48d9fbaaac --- /dev/null +++ b/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md b/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.md similarity index 99% rename from .agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md rename to .agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.md index ac4e0c1129..ed693e376d 100644 --- a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md +++ b/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.md @@ -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) diff --git a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md b/.agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.zh.md similarity index 99% rename from .agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md rename to .agents/notes/archived/process/2026-08-08-automatic-translation-pairing-merges.zh.md index 820ebdbe8c..827475a928 100644 --- a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md +++ b/.agents/notes/archived/process/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) | 中文 diff --git a/.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml index b62c09f26c..5e1614518c 100644 --- a/.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-11-content-block-vocabulary.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-11-dev-invariants-over-deep-readonly.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-11-dev-invariants-over-deep-readonly.i18n.yaml index 6578c0b2a2..d01dd83fdb 100644 --- a/.agents/notes/implemented/architecture/2026-06-11-dev-invariants-over-deep-readonly.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-11-dev-invariants-over-deep-readonly.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.i18n.yaml index 868d215253..60451f71cc 100644 --- a/.agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-11-event-sourced-sessions.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.i18n.yaml index 57843018c6..f23e22ad36 100644 --- a/.agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-11-microkernel-event-taxonomy.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-13-capability-seams.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-13-capability-seams.i18n.yaml index 92ea844d93..18a5b7dcf2 100644 --- a/.agents/notes/implemented/architecture/2026-06-13-capability-seams.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-13-capability-seams.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-13-twin-llm-adapters.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-13-twin-llm-adapters.i18n.yaml index d9ebd3c9de..30a57122ad 100644 --- a/.agents/notes/implemented/architecture/2026-06-13-twin-llm-adapters.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-13-twin-llm-adapters.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-14-session-persistence.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-14-session-persistence.i18n.yaml index f827897a1e..995fba81fe 100644 --- a/.agents/notes/implemented/architecture/2026-06-14-session-persistence.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-14-session-persistence.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-18-session-surface.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-18-session-surface.i18n.yaml index 1939ff2f17..db7edf6873 100644 --- a/.agents/notes/implemented/architecture/2026-06-18-session-surface.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-18-session-surface.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.i18n.yaml index 22bf3c01c4..ff239e85c9 100644 --- a/.agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-20-generic-long-running-tool-runtime.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml index 0956b2aa0b..2b8a5f380d 100644 --- a/.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-21-bounded-llm-request-recovery.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-21-mandatory-app-attribution-headers.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-21-mandatory-app-attribution-headers.i18n.yaml index 2b6c63d334..0856d5ac56 100644 --- a/.agents/notes/implemented/architecture/2026-06-21-mandatory-app-attribution-headers.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-21-mandatory-app-attribution-headers.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-24-web-capability-seam.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-24-web-capability-seam.i18n.yaml index bbdb39100a..490d5c5d24 100644 --- a/.agents/notes/implemented/architecture/2026-06-24-web-capability-seam.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-24-web-capability-seam.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-26-file-context-as-event-gate.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-26-file-context-as-event-gate.i18n.yaml index 7db4727f48..3addc01168 100644 --- a/.agents/notes/implemented/architecture/2026-06-26-file-context-as-event-gate.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-26-file-context-as-event-gate.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.i18n.yaml b/.agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.i18n.yaml index 4a4342d1f2..9afc68c549 100644 --- a/.agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-06-30-event-domain-semantics.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-02-tool-render-intent-union.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-02-tool-render-intent-union.i18n.yaml index 933b3d2826..6e01984aee 100644 --- a/.agents/notes/implemented/architecture/2026-07-02-tool-render-intent-union.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-02-tool-render-intent-union.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-05-prompt-variables-and-tool-guidance-ownership.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-05-prompt-variables-and-tool-guidance-ownership.i18n.yaml index 57dba7f52b..670619cca9 100644 --- a/.agents/notes/implemented/architecture/2026-07-05-prompt-variables-and-tool-guidance-ownership.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-05-prompt-variables-and-tool-guidance-ownership.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml index ac7f2acd4e..987abc5f0e 100644 --- a/.agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-05-reconstructable-requests.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-05-windows-jsonl-durable-publish.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-05-windows-jsonl-durable-publish.i18n.yaml index cc278292d9..2848f7cd4b 100644 --- a/.agents/notes/implemented/architecture/2026-07-05-windows-jsonl-durable-publish.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-05-windows-jsonl-durable-publish.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-06-timeout-deadline-library.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-06-timeout-deadline-library.i18n.yaml index b2ebf2057f..9db3e2596d 100644 --- a/.agents/notes/implemented/architecture/2026-07-06-timeout-deadline-library.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-06-timeout-deadline-library.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.i18n.yaml index 4cacefaca8..617b3a053b 100644 --- a/.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-07-tool-call-timeout-policy.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-08-agent-scope-contexts.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-08-agent-scope-contexts.i18n.yaml index aff7b32029..cfb0644c92 100644 --- a/.agents/notes/implemented/architecture/2026-07-08-agent-scope-contexts.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-08-agent-scope-contexts.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-08-tool-output-spill-files.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-08-tool-output-spill-files.i18n.yaml index d2f8d60d2d..1325797191 100644 --- a/.agents/notes/implemented/architecture/2026-07-08-tool-output-spill-files.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-08-tool-output-spill-files.i18n.yaml @@ -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: e32aec72f423dff33a29d9012c0f71c9cfbd24fb -2026-07-08-tool-output-spill-files.zh.md: 2941fc516723e72b5d5670e674ce612f3cf581cc +/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 diff --git a/.agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.i18n.yaml index ec2f5318d6..ee57a4b8cf 100644 --- a/.agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-10-after-call-compaction-pressure-and-overflow-recovery.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml index e09f7db568..5e078a7885 100644 --- a/.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-10-single-file-executable-sdk-runtime-distribution.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.i18n.yaml index 16591b4f3e..6d5a779689 100644 --- a/.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-12-agent-scope-runtime-design.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.i18n.yaml index 07a0a60247..7d88d4ba73 100644 --- a/.agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-14-provider-routed-llm-adapters.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-15-agent-initiator-scope.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-15-agent-initiator-scope.i18n.yaml index 99577f250e..a90633f326 100644 --- a/.agents/notes/implemented/architecture/2026-07-15-agent-initiator-scope.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-15-agent-initiator-scope.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.i18n.yaml index a3dae54b9b..a7c6542f24 100644 --- a/.agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-16-explicit-turn-cancellation.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-19-cooperative-tool-cancellation.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-cooperative-tool-cancellation.i18n.yaml index 41d4664d7d..7354602835 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-cooperative-tool-cancellation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-cooperative-tool-cancellation.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml index a64c2c83c2..b48fcf3403 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-gui-web-client-architecture.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-19-package-invariant-runtime-contracts.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-package-invariant-runtime-contracts.i18n.yaml index ec285a946f..f8fe485684 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-package-invariant-runtime-contracts.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-package-invariant-runtime-contracts.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-19-zstandard-jsonl-session-logs.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-19-zstandard-jsonl-session-logs.i18n.yaml index 5e0c9ab302..9e8a30179e 100644 --- a/.agents/notes/implemented/architecture/2026-07-19-zstandard-jsonl-session-logs.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-19-zstandard-jsonl-session-logs.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.i18n.yaml index cf9b3216dc..531d05cdc9 100644 --- a/.agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-20-canonical-tool-output-contract.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.i18n.yaml index 081f618b1a..a21bb41371 100644 --- a/.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-20-routed-model-context-and-compaction-policy.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-20-unified-json-value-schema-dsl.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-20-unified-json-value-schema-dsl.i18n.yaml index 152bae16ac..bf011b57b9 100644 --- a/.agents/notes/implemented/architecture/2026-07-20-unified-json-value-schema-dsl.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-20-unified-json-value-schema-dsl.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.i18n.yaml index f633a831d3..eeeda135fe 100644 --- a/.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-22-slot-type-chain-implementation.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-23-client-plugin-loading-model.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-23-client-plugin-loading-model.i18n.yaml index 608fe717d5..142497a1d9 100644 --- a/.agents/notes/implemented/architecture/2026-07-23-client-plugin-loading-model.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-23-client-plugin-loading-model.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-24-project-session-directories.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-24-project-session-directories.i18n.yaml index 95adf4e6c5..28f986327b 100644 --- a/.agents/notes/implemented/architecture/2026-07-24-project-session-directories.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-24-project-session-directories.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.i18n.yaml index b192622981..7e61625e6d 100644 --- a/.agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-24-separate-context-injection-from-turn-execution.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-24-single-harness-home-resolver.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-24-single-harness-home-resolver.i18n.yaml index 83d23518ec..8622ce8f91 100644 --- a/.agents/notes/implemented/architecture/2026-07-24-single-harness-home-resolver.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-24-single-harness-home-resolver.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.i18n.yaml index 4951fbfe77..63949a5c87 100644 --- a/.agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-24-web-config-tree-boot-and-transport-layering.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml index da98873480..cc78be86f5 100644 --- a/.agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-25-web-client-session-scope-and-provide-channel.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.i18n.yaml index 1709d91e34..50fa27df10 100644 --- a/.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-27-compiler-independent-typert-model.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-28-api-browser-trust-boundary.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-28-api-browser-trust-boundary.i18n.yaml index d4ca06ac71..a102c752b0 100644 --- a/.agents/notes/implemented/architecture/2026-07-28-api-browser-trust-boundary.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-28-api-browser-trust-boundary.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.i18n.yaml index 56d5cea939..d7661445ba 100644 --- a/.agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-28-identified-immutable-message-values.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-28-portable-execution-world-consumers.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-28-portable-execution-world-consumers.i18n.yaml index 7aec04b3d6..babbdf4b6f 100644 --- a/.agents/notes/implemented/architecture/2026-07-28-portable-execution-world-consumers.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-28-portable-execution-world-consumers.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.i18n.yaml index cabffaebf6..7bd5c73590 100644 --- a/.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-29-projected-token-usage-and-request-context.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-29-projected-token-usage-and-request-context.i18n.yaml index a5d41c6bca..22d12f0aab 100644 --- a/.agents/notes/implemented/architecture/2026-07-29-projected-token-usage-and-request-context.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-29-projected-token-usage-and-request-context.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-29-terminal-llm-stream-failures.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-29-terminal-llm-stream-failures.i18n.yaml index 04a5f80eec..ddc9c2bc46 100644 --- a/.agents/notes/implemented/architecture/2026-07-29-terminal-llm-stream-failures.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-29-terminal-llm-stream-failures.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.i18n.yaml index ccbabe4e0d..a4c259b654 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-30-credential-boundaries-and-atomic-registration.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-30-followup-enqueue-and-owned-runs.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-30-followup-enqueue-and-owned-runs.i18n.yaml index b729d9dd5b..91a956e428 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-followup-enqueue-and-owned-runs.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-30-followup-enqueue-and-owned-runs.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.i18n.yaml index 01690045bd..18ab603d7b 100644 --- a/.agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-30-session-end-seed-log-boundary.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.i18n.yaml index 049fbfff18..7151c1e20c 100644 --- a/.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-31-claimed-pre-step-inbox-lifecycle.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-31-goal-owned-durable-events.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-31-goal-owned-durable-events.i18n.yaml index aecb82c585..18c1983fdb 100644 --- a/.agents/notes/implemented/architecture/2026-07-31-goal-owned-durable-events.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-31-goal-owned-durable-events.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-07-31-ptc-runtime-python-fd3-protocol.i18n.yaml b/.agents/notes/implemented/architecture/2026-07-31-ptc-runtime-python-fd3-protocol.i18n.yaml index aaa0f005af..85084f80cb 100644 --- a/.agents/notes/implemented/architecture/2026-07-31-ptc-runtime-python-fd3-protocol.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-07-31-ptc-runtime-python-fd3-protocol.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-02-typert-remote-method-calls.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-02-typert-remote-method-calls.i18n.yaml index 279482f67a..b86fbe45fb 100644 --- a/.agents/notes/implemented/architecture/2026-08-02-typert-remote-method-calls.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-02-typert-remote-method-calls.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-04-configuration-source-ownership.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-04-configuration-source-ownership.i18n.yaml index 67681ae7a7..9cd1ebd5f3 100644 --- a/.agents/notes/implemented/architecture/2026-08-04-configuration-source-ownership.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-04-configuration-source-ownership.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-04-draft-provider-endpoint-interrogation.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-04-draft-provider-endpoint-interrogation.i18n.yaml index 17747b2942..0e07d79d52 100644 --- a/.agents/notes/implemented/architecture/2026-08-04-draft-provider-endpoint-interrogation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-04-draft-provider-endpoint-interrogation.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.i18n.yaml index c58f37c2b3..943fa4e6af 100644 --- a/.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-05-profile-plugin-bundles.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.i18n.yaml index 56f2e6e156..171cfb3f1e 100644 --- a/.agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-09-client-conversation-node-assembly.i18n.yaml @@ -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: c8773b77fe761c3a566e02f0bd6aeb18f26e0a89 -2026-08-09-client-conversation-node-assembly.zh.md: 076ad35178996e01eae26b3909feae8d967414c1 +/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 diff --git a/.agents/notes/implemented/architecture/2026-08-10-cancelled-stream-prefix-finalize.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-10-cancelled-stream-prefix-finalize.i18n.yaml index b471d553d6..a592660ac7 100644 --- a/.agents/notes/implemented/architecture/2026-08-10-cancelled-stream-prefix-finalize.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-10-cancelled-stream-prefix-finalize.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.i18n.yaml index 44a8fbf89f..9ac900a05f 100644 --- a/.agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-10-fork-children-stay-one-shot.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.i18n.yaml index 4cc71b035b..93f0597f19 100644 --- a/.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-10-host-plane-ownership-after-presets.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-10-remote-event-delivery.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-10-remote-event-delivery.i18n.yaml index 7606190f02..b0f473168f 100644 --- a/.agents/notes/implemented/architecture/2026-08-10-remote-event-delivery.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-10-remote-event-delivery.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.i18n.yaml index 9a020189ec..e33e7f556d 100644 --- a/.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-13-credential-records-and-authorization-flows.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-13-credential-records-and-authorization-flows.i18n.yaml index b54dd0639b..94fd1f56d0 100644 --- a/.agents/notes/implemented/architecture/2026-08-13-credential-records-and-authorization-flows.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-13-credential-records-and-authorization-flows.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml index 57e892121c..3afca5571b 100644 --- a/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-15-client-shells-and-dynamic-packages.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-18-experimental-agent-teams-packages.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-18-experimental-agent-teams-packages.i18n.yaml index 8a7e75ad27..c0aa66e83f 100644 --- a/.agents/notes/implemented/architecture/2026-08-18-experimental-agent-teams-packages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-18-experimental-agent-teams-packages.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-18-session-history-and-event-transport.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-18-session-history-and-event-transport.i18n.yaml index 3b16c5a3d9..478f9b70b4 100644 --- a/.agents/notes/implemented/architecture/2026-08-18-session-history-and-event-transport.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-18-session-history-and-event-transport.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-19-session-projection-mandatory-seam.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-19-session-projection-mandatory-seam.i18n.yaml index 4830f124d8..24f76c7cb0 100644 --- a/.agents/notes/implemented/architecture/2026-08-19-session-projection-mandatory-seam.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-19-session-projection-mandatory-seam.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.i18n.yaml index d406110a99..a1044d0181 100644 --- a/.agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-20-client-session-conversation-ownership.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml index 1d5d4521cf..800a60bd65 100644 --- a/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-21-deepseek-llm-api-request-extensions.i18n.yaml @@ -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: 75b5f9e642b6c25c + zh: c775a113d5ea0626 +/agent-note-deepseek-llm-api-request-extensions-for-session-logs-and-plugin-packages/incremental-session-log-field: + en: edae015c24a2bc42 + zh: 0c7e23be17d9d424 +/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: c9a0a5323480eb3d + zh: 5df6e88de50038ce diff --git a/.agents/notes/implemented/architecture/2026-08-22-single-dsh-application-launcher.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-22-single-dsh-application-launcher.i18n.yaml index 0094a4b396..2390a9244b 100644 --- a/.agents/notes/implemented/architecture/2026-08-22-single-dsh-application-launcher.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-22-single-dsh-application-launcher.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-23-client-derived-tool-presentation.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-23-client-derived-tool-presentation.i18n.yaml index dcadb91f94..d09a4b6a82 100644 --- a/.agents/notes/implemented/architecture/2026-08-23-client-derived-tool-presentation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-23-client-derived-tool-presentation.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.i18n.yaml index 1aa080d1fe..49f6adf176 100644 --- a/.agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-24-browser-token-authentication.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-24-browser-token-authentication.i18n.yaml index af52bdcb23..a67b37efe1 100644 --- a/.agents/notes/implemented/architecture/2026-08-24-browser-token-authentication.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-24-browser-token-authentication.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.i18n.yaml index 6a9b597434..7dc21e59f4 100644 --- a/.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-25-electron-desktop-packaging-and-updates.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-25-session-observations-and-projection-owned-client-state.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-25-session-observations-and-projection-owned-client-state.i18n.yaml index f53d8aec09..90546ac5db 100644 --- a/.agents/notes/implemented/architecture/2026-08-25-session-observations-and-projection-owned-client-state.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-25-session-observations-and-projection-owned-client-state.i18n.yaml @@ -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: b463e1854d2cc694 + zh: 84fb04c9ddeb2656 +/agent-note-session-observations-and-projection-owned-client-state/decision/read-audiences: + en: c94cd4f6ed488c24 + zh: 12f3b223fdd72c4a +/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: c45a0429091f1cf4 + zh: a76c7fe66e22e410 +/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: a794043297325db2 + zh: 6459213d8dc35b1b +/agent-note-session-observations-and-projection-owned-client-state/verification: + en: e1458c504be960a4 + zh: 12c565a2576450cb +/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 diff --git a/.agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.i18n.yaml index bc7d37ce4c..231ee0bf64 100644 --- a/.agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-27-adjacent-agent-steer-messaging.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.i18n.yaml index 0521855ea8..29242480fe 100644 --- a/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-27-handle-based-session-persistence.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-27-outbound-proxy-policy.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-27-outbound-proxy-policy.i18n.yaml index 0f7fcde21b..0d30f02d4f 100644 --- a/.agents/notes/implemented/architecture/2026-08-27-outbound-proxy-policy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-27-outbound-proxy-policy.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-28-ctx-remote-failure-vocabulary.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-28-ctx-remote-failure-vocabulary.i18n.yaml index 5952b7afe6..2e76fba547 100644 --- a/.agents/notes/implemented/architecture/2026-08-28-ctx-remote-failure-vocabulary.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-28-ctx-remote-failure-vocabulary.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-28-subprocess-native-containment.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-28-subprocess-native-containment.i18n.yaml index bfe7ee764b..76b43c4348 100644 --- a/.agents/notes/implemented/architecture/2026-08-28-subprocess-native-containment.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-28-subprocess-native-containment.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.i18n.yaml index 0d29ace9ff..63a2bfdc06 100644 --- a/.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.i18n.yaml index c976a60147..4453d0d171 100644 --- a/.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-31-explicit-agent-runtime-identity.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-31-explicit-agent-runtime-identity.i18n.yaml index 4fac92ed8c..c28606ddd1 100644 --- a/.agents/notes/implemented/architecture/2026-08-31-explicit-agent-runtime-identity.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-31-explicit-agent-runtime-identity.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.i18n.yaml b/.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.i18n.yaml index 008e706bbf..38dbc1ec40 100644 --- a/.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.i18n.yaml @@ -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 diff --git a/.agents/notes/implemented/architecture/2026-09-01-jobs-absorb-activity-record.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-01-jobs-absorb-activity-record.i18n.yaml index 497481e7d2..dcd4dd469f 100644 --- a/.agents/notes/implemented/architecture/2026-09-01-jobs-absorb-activity-record.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-01-jobs-absorb-activity-record.i18n.yaml @@ -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-09-01-jobs-absorb-activity-record.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-09-01-jobs-absorb-activity-record.md -2026-09-01-jobs-absorb-activity-record.md: 508608f7eb694bf131bad9a25e856d32c7079559 -2026-09-01-jobs-absorb-activity-record.zh.md: 2c157d951042f1cd6f8a3a66129773bc99cd5b02 +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed: + en: f407477a58d20fb6 + zh: b65bc22b9e1e21c3 +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed/problem: + en: a4008f3bcd1e3bd0 + zh: fa8432ddc47003c4 +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed/decision: + en: c7ada6a40d92daf4 + zh: bd16a02f295c4ae2 +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed/alternatives-considered: + en: 00067552f2fcb740 + zh: aa23082899db1a1a +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed/review-corrections: + en: 93db5342c848587a + zh: d4e67a47d573eb39 +/agent-note-the-job-registry-absorbs-the-observation-record-the-standalone-activity-seam-is-removed/consequences: + en: c1df52910a1ee554 + zh: 50fd15ed06f07f76 diff --git a/.agents/notes/implemented/architecture/2026-09-01-parent-owned-subagent-catalog.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-01-parent-owned-subagent-catalog.i18n.yaml index 59e3f84862..895e659b3a 100644 --- a/.agents/notes/implemented/architecture/2026-09-01-parent-owned-subagent-catalog.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-01-parent-owned-subagent-catalog.i18n.yaml @@ -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-09-01-parent-owned-subagent-catalog.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-09-01-parent-owned-subagent-catalog.md -2026-09-01-parent-owned-subagent-catalog.md: 536ec33148bd675a974622b98ee23de812691dc0 -2026-09-01-parent-owned-subagent-catalog.zh.md: ec78ff9e4b7d54a7309baf21c383ec5ff83a19c8 +/agent-note-parent-owned-subagent-catalog-events: + en: 3fc04c5406fdcf8a + zh: a103082ae858dff3 +/agent-note-parent-owned-subagent-catalog-events/problem: + en: 5a991fec31578cea + zh: 13b75aa36eb22907 +/agent-note-parent-owned-subagent-catalog-events/decision: + en: 198354f20b5d0a42 + zh: 7a6b4392117a60b5 +/agent-note-parent-owned-subagent-catalog-events/alternatives-considered: + en: 7a3d4b9f69c243d8 + zh: 82b03d16ccc94dd2 +/agent-note-parent-owned-subagent-catalog-events/consequences: + en: 97f2a8beb039a075 + zh: 80efa9f6dd12d438 diff --git a/.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.i18n.yaml index 3dcffdc51a..c171926d8d 100644 --- a/.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-01-v2-embedded-assistant-streams.i18n.yaml @@ -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-09-01-v2-embedded-assistant-streams.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-09-01-v2-embedded-assistant-streams.md -2026-09-01-v2-embedded-assistant-streams.md: 89b494959fcc10a2c9847908adcf13d5eedcd749 -2026-09-01-v2-embedded-assistant-streams.zh.md: 63cb425740cd2243361ec00a6dadad82c38f6f0f +/agent-note-embed-assistant-streams-in-v2-attempt-settlements: + en: ada7ae6629d0d4e4 + zh: cc1f9a43e87d2dee +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/problem: + en: 9e95306554ecd1ca + zh: 40478697fbc94e33 +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/decision: + en: 14558bfaf20998db + zh: d883b1dd6f024b93 +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/decision/live-presentation-and-durable-replay: + en: daf667b45ce34da3 + zh: 25b17f7b3ec14d9e +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/decision/released-v1-to-v2-migration: + en: c1b5a775aa073a9a + zh: 45a16998d636aec1 +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/verification: + en: 64b75fcbb0c3f819 + zh: 6fe01443a7abec72 +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/alternatives-considered: + en: 74cdc6838df6172e + zh: ebca79a08ff3ebe4 +/agent-note-embed-assistant-streams-in-v2-attempt-settlements/consequences: + en: fc745b93d5e92f50 + zh: 4fa418c30e1968b4 diff --git a/.agents/notes/implemented/architecture/2026-09-02-projcache-cross-version-read-compat.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-02-projcache-cross-version-read-compat.i18n.yaml index 87f3b7c351..6a8c9879cf 100644 --- a/.agents/notes/implemented/architecture/2026-09-02-projcache-cross-version-read-compat.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-02-projcache-cross-version-read-compat.i18n.yaml @@ -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-09-02-projcache-cross-version-read-compat.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-09-02-projcache-cross-version-read-compat.md -2026-09-02-projcache-cross-version-read-compat.md: 160c5c796bacc6f672b06acc0df4246d7008c52b -2026-09-02-projcache-cross-version-read-compat.zh.md: cff7742f6c1f887b905a2c139e4157782aef677c +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7: + en: 5744de86025f278d + zh: 5ba2198c13ac54f9 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/problem: + en: f8d44a69c7b5fefe + zh: 76a4fb3d87698194 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/the-on-disk-generations: + en: 221b8afd2599e139 + zh: ba1de634b87edc71 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/decision: + en: 264e40c0fb90cdc1 + zh: 2e986615bbd656cf +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/decision/v3-v6-v7-disposition: + en: fe188d164c08a7f5 + zh: 30aa9e9201621f35 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/decision/upgrade-matrix: + en: 5d515bd3cb34b0ee + zh: 0648563a966759c7 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/alternatives-considered: + en: c53e111219c5da0c + zh: 8c69f6fc2e776981 +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/consequences: + en: ac8b2f4a66c926ea + zh: 5a415436c2fbc4ec +/agent-note-projection-cache-predecessor-recovery-and-session-format-binding-session-projcache-v3-v6-v7/testing: + en: 495058fe5708949d + zh: 67ed95abc946d418 diff --git a/.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.i18n.yaml index 174aa2592e..6a5de04c23 100644 --- a/.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-02-system-prompt-as-surface-node.i18n.yaml @@ -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-09-02-system-prompt-as-surface-node.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-09-02-system-prompt-as-surface-node.md -2026-09-02-system-prompt-as-surface-node.md: 1500fd2350f02ab5d8f203c0d62b98832c6c5de5 -2026-09-02-system-prompt-as-surface-node.zh.md: 306f347092caa3e9daf2494fa26d290b1c1ab9a7 +/agent-note-the-system-prompt-is-surface-node-0: + en: 449b745953058cff + zh: 4db99c7d1f06e6b9 +/agent-note-the-system-prompt-is-surface-node-0/problem: + en: 9ff2541082426e31 + zh: d8f0ca49d3548f9b +/agent-note-the-system-prompt-is-surface-node-0/decision: + en: 3911ea80c5466d5e + zh: a0d6844e6f8af462 +/agent-note-the-system-prompt-is-surface-node-0/decision/the-event: + en: 35302b956efc4999 + zh: e45ee0d001b63269 +/agent-note-the-system-prompt-is-surface-node-0/decision/the-operations: + en: a217a08932938062 + zh: 4924d99d55d9c973 +/agent-note-the-system-prompt-is-surface-node-0/decision/ownership-in-the-loop: + en: 88945024c2efe271 + zh: 05dca84a4ce5e614 +/agent-note-the-system-prompt-is-surface-node-0/decision/consumers: + en: 39f9f4acffcccdc6 + zh: 36b23a57e7d28950 +/agent-note-the-system-prompt-is-surface-node-0/decision/v2-to-v3-structural-conversion: + en: 131ae882d0a28735 + zh: ea4bc81f0ba5ddec +/agent-note-the-system-prompt-is-surface-node-0/alternatives-considered: + en: 067e96734ebbce89 + zh: 9f79bc0f4942675d +/agent-note-the-system-prompt-is-surface-node-0/consequences: + en: bccea8236b4c32b3 + zh: a1150784718a6639 +/agent-note-the-system-prompt-is-surface-node-0/testing: + en: f5b21c4863cd92bd + zh: 7d1efed827d55161 diff --git a/.agents/notes/implemented/architecture/2026-09-03-jobs-seam-consolidation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-03-jobs-seam-consolidation.i18n.yaml index 1d1a4bc731..69dfebb312 100644 --- a/.agents/notes/implemented/architecture/2026-09-03-jobs-seam-consolidation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-03-jobs-seam-consolidation.i18n.yaml @@ -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-09-03-jobs-seam-consolidation.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-09-03-jobs-seam-consolidation.md -2026-09-03-jobs-seam-consolidation.md: 2742ff1a80ec4cc4d8e5948f63d306abb9753733 -2026-09-03-jobs-seam-consolidation.zh.md: 1fa61919a27362ce42419b57e0960e9be86ea07e +/agent-note-one-output-ring-one-projection-one-event-stream-for-background-jobs: + en: f4cb113e6501a363 + zh: 55693cca6db201b0 +/agent-note-one-output-ring-one-projection-one-event-stream-for-background-jobs/problem: + en: 2e213085523c8ebe + zh: 28229d752ccc7ec4 +/agent-note-one-output-ring-one-projection-one-event-stream-for-background-jobs/decision: + en: a7e2bd18a7e647f0 + zh: 1d8f5500a3b0502a +/agent-note-one-output-ring-one-projection-one-event-stream-for-background-jobs/alternatives-considered: + en: d5d9d6c2c05e563b + zh: 66b2489d947365fe +/agent-note-one-output-ring-one-projection-one-event-stream-for-background-jobs/consequences: + en: 23b0112bba743396 + zh: 28f38ff246b4525f diff --git a/.agents/notes/implemented/architecture/2026-09-05-canonical-feedback-log.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-canonical-feedback-log.i18n.yaml index f62b326074..3793dc362f 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-canonical-feedback-log.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-canonical-feedback-log.i18n.yaml @@ -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-09-05-canonical-feedback-log.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-09-05-canonical-feedback-log.md -2026-09-05-canonical-feedback-log.md: ce7b705b24cb0a4f7432215e19589095a9afc719 -2026-09-05-canonical-feedback-log.zh.md: 7d970ff7aea4962ea52c764fec5b6c07e3669099 +/agent-note-canonical-feedback-log-and-request-delivery: + en: 7dd56e2d495370cf + zh: 0977ed8b2f45dbe5 +/agent-note-canonical-feedback-log-and-request-delivery/problem: + en: 702e5973c264ec35 + zh: 71b095565593629c +/agent-note-canonical-feedback-log-and-request-delivery/decision: + en: 7ae952bbc9193865 + zh: f120bed1d1782470 +/agent-note-canonical-feedback-log-and-request-delivery/alternatives-considered: + en: 9ddfc84ac3a25f3b + zh: f185250a0ec512ba +/agent-note-canonical-feedback-log-and-request-delivery/consequences: + en: f1f99907cd77bdef + zh: e97b76e4a19c5581 diff --git a/.agents/notes/implemented/architecture/2026-09-05-client-resource-model.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-client-resource-model.i18n.yaml index aba709660e..76c55ab2c1 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-client-resource-model.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-client-resource-model.i18n.yaml @@ -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-09-05-client-resource-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-09-05-client-resource-model.md -2026-09-05-client-resource-model.md: e6ad8dae331d8a6392585f5dc8eb8fc52150bdc3 -2026-09-05-client-resource-model.zh.md: d716aa8a42f5c3037a329deabd572a56ab1b0537 +/agent-note-client-resource-model: + en: 48276fc837820219 + zh: 2d99ee9eae22e1e0 +/agent-note-client-resource-model/problem: + en: 22aec3ac5b197342 + zh: 0cd0b1f8094addb3 +/agent-note-client-resource-model/decision: + en: 78afa8698a884b98 + zh: b33cfcae7e75660f +/agent-note-client-resource-model/decision/addresses: + en: 180e3e39813a93b1 + zh: 845befb7c760f7e1 +/agent-note-client-resource-model/decision/the-service: + en: f42277e961bb7209 + zh: 9f3f8a50ad55cf4a +/agent-note-client-resource-model/decision/the-hook: + en: 4f082c4f5a44320a + zh: eba5449b7a1fd52e +/agent-note-client-resource-model/decision/frames: + en: bc1c4e9a9e8e9b20 + zh: f80a77ee66943ce4 +/agent-note-client-resource-model/decision/lifecycle: + en: 4c11bfba97a54646 + zh: a07bda77e918d613 +/agent-note-client-resource-model/alternatives-considered: + en: 288b448e7f1de8af + zh: 997e10c66decce34 +/agent-note-client-resource-model/consequences: + en: 3eda54cb5d74ed00 + zh: ce60b6fef04acb9a +/agent-note-client-resource-model/testing: + en: ca2c610e4f0352ac + zh: fbaa69ee8de7e4c1 +/agent-note-client-resource-model/deferred: + en: 312b46f16d88f301 + zh: a530b3940859079c diff --git a/.agents/notes/implemented/architecture/2026-09-05-nonofficial-feedback-otel.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-nonofficial-feedback-otel.i18n.yaml index 58f161426a..fcea6899f3 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-nonofficial-feedback-otel.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-nonofficial-feedback-otel.i18n.yaml @@ -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-09-05-nonofficial-feedback-otel.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-09-05-nonofficial-feedback-otel.md -2026-09-05-nonofficial-feedback-otel.md: 8225d8bea030c4f09b60fd1a228f0425e9489d39 -2026-09-05-nonofficial-feedback-otel.zh.md: e8ea48b3fe2f228ef57ae1a20f92100dfc333f9c +/agent-note-explicit-feedback-only-upload-through-opentelemetry: + en: 96caaaf6a4efc8cf + zh: 2ef629917f3f2567 +/agent-note-explicit-feedback-only-upload-through-opentelemetry/problem: + en: 7849f56f36e297e8 + zh: b98da01a1fd5d974 +/agent-note-explicit-feedback-only-upload-through-opentelemetry/decision: + en: c4558bdfc95ee2f2 + zh: 4fc88ffa4512b66a +/agent-note-explicit-feedback-only-upload-through-opentelemetry/alternatives-considered: + en: 21376ce3ebef2662 + zh: d3168b64bdf093bf +/agent-note-explicit-feedback-only-upload-through-opentelemetry/consequences: + en: 7daf3ebf1bfd2124 + zh: f2cec93e3069a973 diff --git a/.agents/notes/implemented/architecture/2026-09-05-package-manifest-types.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-package-manifest-types.i18n.yaml index 1e9e2e658d..1cbd6713ec 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-package-manifest-types.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-package-manifest-types.i18n.yaml @@ -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-09-05-package-manifest-types.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-09-05-package-manifest-types.md -2026-09-05-package-manifest-types.md: dc018ba019028b942a17cd016c8670f2405c3bc7 -2026-09-05-package-manifest-types.zh.md: 8fd323bfe6058a6a062e3834a8630c0181a203fc +/agent-note-package-manifest-declaration-ownership: + en: 26d50551c7d49cf8 + zh: eac4a93af773c945 +/agent-note-package-manifest-declaration-ownership/problem: + en: bdc0fcaf27081889 + zh: 45eb034edd0bed82 +/agent-note-package-manifest-declaration-ownership/decision: + en: da43234e14fa9bd5 + zh: 0389015e086f4e25 +/agent-note-package-manifest-declaration-ownership/alternatives-considered: + en: bf99e75ffab5cb45 + zh: 398f5934858aaca5 +/agent-note-package-manifest-declaration-ownership/consequences: + en: ce7c3df526622bf2 + zh: 91d51dff77371cb0 diff --git a/.agents/notes/implemented/architecture/2026-09-05-read-only-session-migration-preparation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-read-only-session-migration-preparation.i18n.yaml index c71a86687b..93080791e0 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-read-only-session-migration-preparation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-read-only-session-migration-preparation.i18n.yaml @@ -1,6 +1,52 @@ -# 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-09-05-read-only-session-migration-preparation.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-09-05-read-only-session-migration-preparation.md -2026-09-05-read-only-session-migration-preparation.md: 081044e34d5071ba242792c588f43a3b83adddd5 -2026-09-05-read-only-session-migration-preparation.zh.md: 7406e7cf31112df6c9f6bb0d454f38d0cf7eb6a4 +/agent-note-historical-session-reads-prepare-before-write-publication: + en: 9b0c300b8c4ea348 + zh: fb248e39c7c82d21 +/agent-note-historical-session-reads-prepare-before-write-publication/problem: + en: 1064c02bdd0829f6 + zh: b8804a72c487d7f6 +/agent-note-historical-session-reads-prepare-before-write-publication/problem/serial-readiness-cost: + en: d1a38e3967176a41 + zh: 746d22a7b65bbacf +/agent-note-historical-session-reads-prepare-before-write-publication/problem/a-naive-split-would-break-lifecycle-guarantees: + en: b6c28b36e59cff21 + zh: 7c52d50d332204ad +/agent-note-historical-session-reads-prepare-before-write-publication/decision: + en: b1c9289331cc1b1c + zh: cddc6fba651201b3 +/agent-note-historical-session-reads-prepare-before-write-publication/decision/prepared-generation-api: + en: 70013314a5ab75c2 + zh: dc83dc7254554951 +/agent-note-historical-session-reads-prepare-before-write-publication/decision/preparation-ownership-and-cancellation: + en: 1e0583523a341ec1 + zh: a78b8cac656559e9 +/agent-note-historical-session-reads-prepare-before-write-publication/decision/read-handle-transition: + en: a74f92b2e6224c7e + zh: 0190d524f8c84770 +/agent-note-historical-session-reads-prepare-before-write-publication/decision/write-open-publication: + en: 9d2d50cb76754b74 + zh: 9ceed3652475f18d +/agent-note-historical-session-reads-prepare-before-write-publication/decision/follow-and-agent-promotion: + en: 692c29db3e7ab07e + zh: 7da0cfdbc80f407d +/agent-note-historical-session-reads-prepare-before-write-publication/problem-to-solution-mapping: + en: e067e187cd4d0a8c + zh: b0c79b635a637296 +/agent-note-historical-session-reads-prepare-before-write-publication/verification: + en: b2b07b60141996ac + zh: 5280ee3455b8c953 +/agent-note-historical-session-reads-prepare-before-write-publication/verification/first-opening-of-historical-data: + en: 048ea8684231ac22 + zh: 83591137f214478b +/agent-note-historical-session-reads-prepare-before-write-publication/verification/scheduling-observation-points: + en: a91766778611df3b + zh: 2a38f5a865dcd413 +/agent-note-historical-session-reads-prepare-before-write-publication/consequences: + en: 4482da434feb62a0 + zh: 38bf9bbb99d3e246 +/agent-note-historical-session-reads-prepare-before-write-publication/alternatives-considered: + en: c11bc9a1ad9a8568 + zh: 717da2fad77cff17 diff --git a/.agents/notes/implemented/architecture/2026-09-05-shared-client-control-primitives.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-shared-client-control-primitives.i18n.yaml index 55f30d278a..d7f7c0dc3b 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-shared-client-control-primitives.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-shared-client-control-primitives.i18n.yaml @@ -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-09-05-shared-client-control-primitives.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-09-05-shared-client-control-primitives.md -2026-09-05-shared-client-control-primitives.md: db8cb9a8bc515918867b27b216fe8edb50c392db -2026-09-05-shared-client-control-primitives.zh.md: 6d4b04a21bf224eaa32b5fbdfb2bf1c3a2cd804d +/agent-note-shared-client-control-primitives: + en: 53e5c771078f4383 + zh: 59e4cc45d06adbee +/agent-note-shared-client-control-primitives/problem: + en: 7a711c1cafe0be88 + zh: 7275b36fdd5094f6 +/agent-note-shared-client-control-primitives/decision: + en: cc335d6820b9ab1c + zh: e375bababc0fccdb +/agent-note-shared-client-control-primitives/finding-the-duplicates: + en: f50ed2aea00a34c5 + zh: a8a27c1d1e0177a8 +/agent-note-shared-client-control-primitives/what-stays-local: + en: e4fb0a84b9924d5a + zh: 30545265b2159f04 +/agent-note-shared-client-control-primitives/alternatives-considered: + en: f77deaa327bc5395 + zh: be8450b665be04bf +/agent-note-shared-client-control-primitives/testing: + en: 578f6bad674e4c40 + zh: 0a8f2e72bb4d1f61 +/agent-note-shared-client-control-primitives/consequences: + en: f94dd6f669d00276 + zh: a67de4bd3f242232 diff --git a/.agents/notes/implemented/architecture/2026-09-05-sidebar-tab-types-and-navigation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-sidebar-tab-types-and-navigation.i18n.yaml index 577fbe18d0..f7b369d628 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-sidebar-tab-types-and-navigation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-sidebar-tab-types-and-navigation.i18n.yaml @@ -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-09-05-sidebar-tab-types-and-navigation.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-09-05-sidebar-tab-types-and-navigation.md -2026-09-05-sidebar-tab-types-and-navigation.md: 599ce36ed4bb1dfc2cce063a461903e1a4aeb40e -2026-09-05-sidebar-tab-types-and-navigation.zh.md: e4e8de5a389fea77aae705d63cc4fb16f88af647 +/agent-note-right-sidebar-tab-types-and-navigation: + en: 2860d8acc82e4a85 + zh: 7b09ac61a684e36d +/agent-note-right-sidebar-tab-types-and-navigation/problem: + en: 1db34c36cf2dc2bd + zh: 4d4e8d3f09ac18c6 +/agent-note-right-sidebar-tab-types-and-navigation/decision: + en: 905fd6fbedad540f + zh: 5420c0dff38012d8 +/agent-note-right-sidebar-tab-types-and-navigation/decision/the-type-registry-ctx-sidebarrighttabs: + en: 9c0a993b39b2c92f + zh: 0e0c008e425f47e4 +/agent-note-right-sidebar-tab-types-and-navigation/decision/bodies-and-titles-keyed-slot-seats-under-the-definition-s-id: + en: 9e80f2d213b394fe + zh: 79f2e5c504b9863e +/agent-note-right-sidebar-tab-types-and-navigation/decision/tab-occurrence-information: + en: 774c3bf80a48ffbe + zh: c513245789aa8efd +/agent-note-right-sidebar-tab-types-and-navigation/decision/navigation-ctx-sidebarright: + en: b32bad4c3b8c2cc8 + zh: 57ba7b8d3451e478 +/agent-note-right-sidebar-tab-types-and-navigation/decision/addresses: + en: eeb1e7e7478a2f2c + zh: bddbc5bc78245f63 +/agent-note-right-sidebar-tab-types-and-navigation/decision/entry-points: + en: 6386bde2654f9a0a + zh: 700439be6a01e162 +/agent-note-right-sidebar-tab-types-and-navigation/alternatives-considered: + en: 91fbca006e8de5bc + zh: f48d3ce1dd7b63bf +/agent-note-right-sidebar-tab-types-and-navigation/consequences: + en: 3cdb1159ee55d851 + zh: dcd068005e678a89 +/agent-note-right-sidebar-tab-types-and-navigation/testing: + en: 49449a6c8465c098 + zh: 1f476cc1226aa9cd +/agent-note-right-sidebar-tab-types-and-navigation/deferred: + en: fa27b7684e38329b + zh: d270e0cdcab73732 diff --git a/.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.i18n.yaml index f44cffc1fa..d8cfb7a469 100644 --- a/.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-05-workspace-files-service.i18n.yaml @@ -1,6 +1,52 @@ -# 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-09-05-workspace-files-service.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-09-05-workspace-files-service.md -2026-09-05-workspace-files-service.md: 65bebf18175d9a94452c92cd36ada3c5ef267ce5 -2026-09-05-workspace-files-service.zh.md: b4ca420042dc702f9bc1eaf5bb09f2667a19322d +/agent-note-workspace-file-service: + en: 4f48d3f949d8e3eb + zh: 4060f4e66c36439e +/agent-note-workspace-file-service/problem: + en: 55d969715a48c9b3 + zh: 755dab7523cd01c2 +/agent-note-workspace-file-service/decision: + en: 6ab2a1f635cfc87c + zh: 369e3ed9b6cdc159 +/agent-note-workspace-file-service/decision/package-topology: + en: 59c3648960630ff8 + zh: 1891f8659e660e45 +/agent-note-workspace-file-service/decision/the-workspacefiles-file-operations: + en: cb489857d97a1b11 + zh: b1a7880df5607c05 +/agent-note-workspace-file-service/decision/paths-on-the-wire: + en: 7b5a96adc08177bc + zh: ae4692e5e62e7de0 +/agent-note-workspace-file-service/decision/file-checks-and-workspace-containment: + en: 4399dcc29336f886 + zh: 69cf2fc174dc83a2 +/agent-note-workspace-file-service/decision/failures: + en: 0e419dd7bdcf38ba + zh: 6cb588a77593913c +/agent-note-workspace-file-service/decision/configuration: + en: 796ee295af0895bd + zh: 4dfa113ed19f5f9a +/agent-note-workspace-file-service/decision/the-readbyterange-seam-in-dsh-fs: + en: 24d84843c56a012a + zh: 058f959527589302 +/agent-note-workspace-file-service/decision/the-client-file-provider: + en: 0d42d4716dde706f + zh: 4e95b8af2df232b6 +/agent-note-workspace-file-service/decision/related-notes: + en: 6e8cfa03b5222af6 + zh: efdf8f17757fc378 +/agent-note-workspace-file-service/alternatives-considered: + en: 3d598eb6d03d05e5 + zh: 7dac0b7af471a651 +/agent-note-workspace-file-service/consequences: + en: 246bb7aed62f6c9b + zh: debf6d4129ee477b +/agent-note-workspace-file-service/testing: + en: 3ab0dabf8ef85258 + zh: c3d0a634bb5e2928 +/agent-note-workspace-file-service/deferred: + en: b033218338ca0122 + zh: aa48fa67f9eb36c3 diff --git a/.agents/notes/implemented/architecture/2026-09-06-embedded-stream-record-readers.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-06-embedded-stream-record-readers.i18n.yaml index f19cf66c4d..f95de9ad8f 100644 --- a/.agents/notes/implemented/architecture/2026-09-06-embedded-stream-record-readers.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-06-embedded-stream-record-readers.i18n.yaml @@ -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-09-06-embedded-stream-record-readers.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-09-06-embedded-stream-record-readers.md -2026-09-06-embedded-stream-record-readers.md: efad86a4f940bf3b56d4b141a8fe1e3659c8dd9c -2026-09-06-embedded-stream-record-readers.zh.md: f7131a27171163954bca8b7013dc6d90f907c552 +/agent-note-embedded-assistant-stream-consumers-read-compact-records: + en: ddc3fed8aa76c1b8 + zh: 409dcb67ef28080e +/agent-note-embedded-assistant-stream-consumers-read-compact-records/problem: + en: 34ceceb99e246ae6 + zh: 0a18314b78557205 +/agent-note-embedded-assistant-stream-consumers-read-compact-records/decision: + en: ad50509c41a7dacf + zh: c8170641203a3184 +/agent-note-embedded-assistant-stream-consumers-read-compact-records/decision/measurements: + en: 2eedf644fa07e35a + zh: cb691c75fbeda518 +/agent-note-embedded-assistant-stream-consumers-read-compact-records/alternatives-considered: + en: 66b6007d582f7521 + zh: a33aa19f7c912fa2 +/agent-note-embedded-assistant-stream-consumers-read-compact-records/consequences: + en: 05cf037a97b4254d + zh: 1a45fae2447678c2 diff --git a/.agents/notes/implemented/architecture/2026-09-06-v3-canonical-session-envelopes.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-06-v3-canonical-session-envelopes.i18n.yaml index e834c8bf6f..85d812f262 100644 --- a/.agents/notes/implemented/architecture/2026-09-06-v3-canonical-session-envelopes.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-06-v3-canonical-session-envelopes.i18n.yaml @@ -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-09-06-v3-canonical-session-envelopes.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-09-06-v3-canonical-session-envelopes.md -2026-09-06-v3-canonical-session-envelopes.md: 68d4386b9e06025fd44d6d9054a95fb51ec8bc3e -2026-09-06-v3-canonical-session-envelopes.zh.md: d3bfc17fa263f8edb0b6f73ce59c626d772dbc1e +/agent-note-canonical-v3-session-event-envelopes: + en: 17b0c507058d0bba + zh: cc281197005d02c8 +/agent-note-canonical-v3-session-event-envelopes/problem: + en: 60cc4d9e1122118f + zh: c1e8d767dc1999e8 +/agent-note-canonical-v3-session-event-envelopes/decision: + en: f75747b415bfd13b + zh: 18e5e35853e4b506 +/agent-note-canonical-v3-session-event-envelopes/decision/validation-ownership: + en: 6fb18468df0b93e1 + zh: 8dd4dd58a883884f +/agent-note-canonical-v3-session-event-envelopes/decision/released-v2-to-v3-conversion: + en: 1f76511cc4c2fcfd + zh: 77633f9860f14d9d +/agent-note-canonical-v3-session-event-envelopes/alternatives-considered: + en: 08c196bc596a0b2a + zh: 55bbbec345e9a078 +/agent-note-canonical-v3-session-event-envelopes/consequences: + en: 9e88dd3830fb0522 + zh: 8be0d8bde8d0d9d2 +/agent-note-canonical-v3-session-event-envelopes/verification: + en: 31ec0b1095035042 + zh: 05d9f08138da1136 diff --git a/.agents/notes/implemented/architecture/2026-09-07-prebuilt-system-primitives.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-07-prebuilt-system-primitives.i18n.yaml index c11c54f6a9..8a100c6c1a 100644 --- a/.agents/notes/implemented/architecture/2026-09-07-prebuilt-system-primitives.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-07-prebuilt-system-primitives.i18n.yaml @@ -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-09-07-prebuilt-system-primitives.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-09-07-prebuilt-system-primitives.md -2026-09-07-prebuilt-system-primitives.md: 183cd3ea984cd779417493f0de17a770f38fc001 -2026-09-07-prebuilt-system-primitives.zh.md: f051bba92910086601aa48a877f360e276df524d +/agent-note-prebuilt-system-primitives: + en: eb306b6649dcf8a0 + zh: eab9d3d896e40603 +/agent-note-prebuilt-system-primitives/problem: + en: 1d7458b11272d21a + zh: 534ac9709711f964 +/agent-note-prebuilt-system-primitives/decision: + en: 80093fd5aae0005f + zh: 56f9aa9549c03e7c +/agent-note-prebuilt-system-primitives/alternatives-considered: + en: 8dc5c0319fe6c7eb + zh: 26722ae58a788d0b +/agent-note-prebuilt-system-primitives/consequences: + en: cd0a9aa852ac178b + zh: 6f5376d64625da88 diff --git a/.agents/notes/implemented/architecture/2026-09-07-sidebar-responsive-tab-info.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-07-sidebar-responsive-tab-info.i18n.yaml index 3a61bfea9c..dd4a23fe04 100644 --- a/.agents/notes/implemented/architecture/2026-09-07-sidebar-responsive-tab-info.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-07-sidebar-responsive-tab-info.i18n.yaml @@ -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-09-07-sidebar-responsive-tab-info.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-09-07-sidebar-responsive-tab-info.md -2026-09-07-sidebar-responsive-tab-info.md: 96f7f047d00a33d6cd48b026ce7762929720d9d6 -2026-09-07-sidebar-responsive-tab-info.zh.md: f020068e71777272fd15a967de547ce153884402 +/agent-note-responsive-sidebar-and-injected-tab-information: + en: 63ced560202cf1a3 + zh: 1ec49cd5ae68f909 +/agent-note-responsive-sidebar-and-injected-tab-information/problem: + en: f9824b1d6f93d329 + zh: 36bc474f646a1a25 +/agent-note-responsive-sidebar-and-injected-tab-information/decision: + en: 1a055f79cb0afcde + zh: 78467751791d42d1 +/agent-note-responsive-sidebar-and-injected-tab-information/alternatives-considered: + en: c05a3ca9a201f01a + zh: b1b30e134a92c8ed +/agent-note-responsive-sidebar-and-injected-tab-information/consequences: + en: 852e827be572c626 + zh: 125ac90be15a5187 diff --git a/.agents/notes/implemented/architecture/2026-09-07-workspace-files-dual-face-package.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-07-workspace-files-dual-face-package.i18n.yaml index 2b1ef7d81a..2d222100c4 100644 --- a/.agents/notes/implemented/architecture/2026-09-07-workspace-files-dual-face-package.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-07-workspace-files-dual-face-package.i18n.yaml @@ -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-09-07-workspace-files-dual-face-package.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-09-07-workspace-files-dual-face-package.md -2026-09-07-workspace-files-dual-face-package.md: adc900865cb8d5f19518828a9cb230a835d025f5 -2026-09-07-workspace-files-dual-face-package.zh.md: ccfa60417284129a280efd7ddad2ea275c242f1e +/agent-note-workspace-files-as-one-dual-face-api-package: + en: fee20bed1c4f69d2 + zh: 8897bf7430250d46 +/agent-note-workspace-files-as-one-dual-face-api-package/problem: + en: 057ac188f6269740 + zh: 4ed1c2f6c3015efb +/agent-note-workspace-files-as-one-dual-face-api-package/decision: + en: 36fdbb0b44b1bb5e + zh: 87a7a9b45231cf28 +/agent-note-workspace-files-as-one-dual-face-api-package/alternatives-considered: + en: 45a93fced31f5980 + zh: 9283fbda48828416 +/agent-note-workspace-files-as-one-dual-face-api-package/consequences: + en: d4558eea4ac3a00b + zh: e625747fd469f146 +/agent-note-workspace-files-as-one-dual-face-api-package/verification: + en: 4c49a2ec778623e8 + zh: 94eacb1ee8e4d36d diff --git a/.agents/notes/implemented/architecture/2026-09-08-desktop-bundled-runtime-and-external-plugins.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-08-desktop-bundled-runtime-and-external-plugins.i18n.yaml index 552cf1b424..6e302c76a3 100644 --- a/.agents/notes/implemented/architecture/2026-09-08-desktop-bundled-runtime-and-external-plugins.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-08-desktop-bundled-runtime-and-external-plugins.i18n.yaml @@ -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-09-08-desktop-bundled-runtime-and-external-plugins.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-09-08-desktop-bundled-runtime-and-external-plugins.md -2026-09-08-desktop-bundled-runtime-and-external-plugins.md: 61fa9eafb72133d4cbba1b65193275cc8474f7e5 -2026-09-08-desktop-bundled-runtime-and-external-plugins.zh.md: 8d94d5823526ab4e615dab13f8453c8b6da5d8b6 +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins: + en: f4c2a14c7f0dbd02 + zh: 5c9b9b68885f3ee0 +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/problem: + en: fe97fe6ba33cb23a + zh: c83a1f023c4e352d +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/decision: + en: e01df5ba880c2972 + zh: e62074a6a9ba5685 +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/package-ownership: + en: 37cae6b28fd359ef + zh: 63118e361fa8f84c +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/transactions-and-upgrades: + en: 5bdc450be55832fb + zh: 3312fc9e5497e139 +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/alternatives-considered: + en: 1558bba473382cbb + zh: b6a6467866ee254d +/agent-note-bundle-the-desktop-runtime-and-retain-external-plugins/consequences: + en: 6dfa581ec6879c5b + zh: f6c735ad6a00b2b3 diff --git a/.agents/notes/implemented/architecture/2026-09-08-desktop-welcome-window-material.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-08-desktop-welcome-window-material.i18n.yaml index 744cb14c8d..5de2a3a586 100644 --- a/.agents/notes/implemented/architecture/2026-09-08-desktop-welcome-window-material.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-08-desktop-welcome-window-material.i18n.yaml @@ -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-09-08-desktop-welcome-window-material.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-09-08-desktop-welcome-window-material.md -2026-09-08-desktop-welcome-window-material.md: 4ee5f6d2934378b06754c4a8f134a4ca07a80840 -2026-09-08-desktop-welcome-window-material.zh.md: 1689af8481925c787c1d2412173fbd7d8c2f4b64 +/agent-note-desktop-welcome-window-material: + en: a362add86cddc144 + zh: c6f482e5f9a66bdf +/agent-note-desktop-welcome-window-material/problem: + en: 8578b584bda3abdc + zh: 85dcf44aab2cfd51 +/agent-note-desktop-welcome-window-material/decision: + en: df31ede930b7c3c0 + zh: c7fc4272bc6b2d85 +/agent-note-desktop-welcome-window-material/alternatives-considered: + en: 6e095dceffe75fa8 + zh: 679a6026afd735a7 +/agent-note-desktop-welcome-window-material/consequences: + en: 8ab73e6c67f4ce88 + zh: 6b1edad02f90ba5b diff --git a/.agents/notes/implemented/architecture/2026-09-08-document-preview-operations.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-08-document-preview-operations.i18n.yaml index 6ccdf5d446..ec7374517f 100644 --- a/.agents/notes/implemented/architecture/2026-09-08-document-preview-operations.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-08-document-preview-operations.i18n.yaml @@ -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-09-08-document-preview-operations.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-09-08-document-preview-operations.md -2026-09-08-document-preview-operations.md: 220db6db0474f244f902cdeb89b297856243672b -2026-09-08-document-preview-operations.zh.md: 7b838711e5118b8fcc072e4efb753abfc9756b56 +/agent-note-document-preview-and-file-addresses: + en: fffa621b7586f221 + zh: d9c7e9bea55fc11f +/agent-note-document-preview-and-file-addresses/problem: + en: a35075e6babe3f7a + zh: 3a64ac57761e1009 +/agent-note-document-preview-and-file-addresses/decision: + en: d0a2923efefbcfe1 + zh: 34f71d092c0e706b +/agent-note-document-preview-and-file-addresses/alternatives-considered: + en: 8e9616e954df488c + zh: 10801341ec53bbe8 +/agent-note-document-preview-and-file-addresses/consequences: + en: cc810ba19e203ead + zh: 9421857a5eb2abe2 diff --git a/.agents/notes/implemented/architecture/2026-09-08-global-main-panels.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-08-global-main-panels.i18n.yaml index 35d6b7f310..d16bba3786 100644 --- a/.agents/notes/implemented/architecture/2026-09-08-global-main-panels.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-08-global-main-panels.i18n.yaml @@ -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-09-08-global-main-panels.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-09-08-global-main-panels.md -2026-09-08-global-main-panels.md: 63530a6b498bd8099cf627d82c888846d3d96767 -2026-09-08-global-main-panels.zh.md: 776787c3de3b79ca7948dcf949ac0393f87e7808 +/agent-note-global-main-panels-without-default-ui-additions: + en: df950323f9032f3b + zh: d08172be0c9ca71c +/agent-note-global-main-panels-without-default-ui-additions/problem: + en: da6aa479acac3baf + zh: ed6316ea9953ff99 +/agent-note-global-main-panels-without-default-ui-additions/decision: + en: e732d64ac12c0ac5 + zh: e8ff462ae93bf259 +/agent-note-global-main-panels-without-default-ui-additions/alternatives-considered: + en: 18c8461d961490ee + zh: a26b37ff3aa15bbc +/agent-note-global-main-panels-without-default-ui-additions/consequences: + en: 31db82c87448a292 + zh: 1923a60d2f0845f9 diff --git a/.agents/notes/implemented/architecture/2026-09-09-awaited-agent-creation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-awaited-agent-creation.i18n.yaml index 50f7a2eb8b..a8255aa82a 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-awaited-agent-creation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-awaited-agent-creation.i18n.yaml @@ -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-09-09-awaited-agent-creation.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-09-09-awaited-agent-creation.md -2026-09-09-awaited-agent-creation.md: 27353225a8d99d038d5c61b1eea0fa67d9120a55 -2026-09-09-awaited-agent-creation.zh.md: f664e89da0794acd1d2a6c0c8a4820a7056dcac6 +/agent-note-awaited-per-agent-initialization: + en: 982ac05aa02da2f0 + zh: 225f89c994efb1c4 +/agent-note-awaited-per-agent-initialization/problem: + en: 03e6b75365b29406 + zh: cc880a33cf2303d0 +/agent-note-awaited-per-agent-initialization/decision: + en: f1db71d1fdb4388e + zh: 6c5a43a770f4cffd +/agent-note-awaited-per-agent-initialization/alternatives-considered: + en: 466a9ebbb13f68c6 + zh: ab88fb34786d2c2b +/agent-note-awaited-per-agent-initialization/consequences: + en: d8cfe8d88ccacfc8 + zh: 8d2aa21408e6e40e diff --git a/.agents/notes/implemented/architecture/2026-09-09-consumer-owned-startup-strictness.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-consumer-owned-startup-strictness.i18n.yaml index bf6ed1340c..51149ea2fb 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-consumer-owned-startup-strictness.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-consumer-owned-startup-strictness.i18n.yaml @@ -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-09-09-consumer-owned-startup-strictness.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-09-09-consumer-owned-startup-strictness.md -2026-09-09-consumer-owned-startup-strictness.md: bbe975e13b251e2e0d18c4e002efbf1d362548f3 -2026-09-09-consumer-owned-startup-strictness.zh.md: 4bd2bfe026a13ccbd46215d2c0165b5a8c5327f7 +/agent-note-consumer-owned-startup-strictness: + en: 52b6747530b4c023 + zh: dc2f8c1f0c300d0a +/agent-note-consumer-owned-startup-strictness/problem: + en: 4548e7fbdbee5b5a + zh: 0078762ea92fa180 +/agent-note-consumer-owned-startup-strictness/decision: + en: eb2b83f5f65c6b6a + zh: b85a9aa4645c9a20 +/agent-note-consumer-owned-startup-strictness/alternatives-considered: + en: 1b67e062213184cd + zh: 91cc8a015de2bfe4 +/agent-note-consumer-owned-startup-strictness/consequences: + en: 283dec1b336c540d + zh: 2ed358079072cfff +/agent-note-consumer-owned-startup-strictness/testing: + en: d8cafae30ea1347b + zh: de47e4e7ba863261 diff --git a/.agents/notes/implemented/architecture/2026-09-09-deprecate-synchronous-session-event-reads.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-deprecate-synchronous-session-event-reads.i18n.yaml index 0cae49b087..f52d6e969f 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-deprecate-synchronous-session-event-reads.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-deprecate-synchronous-session-event-reads.i18n.yaml @@ -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-09-09-deprecate-synchronous-session-event-reads.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-09-09-deprecate-synchronous-session-event-reads.md -2026-09-09-deprecate-synchronous-session-event-reads.md: a2a86b0d6500269531ca1088738aaa612076bfb4 -2026-09-09-deprecate-synchronous-session-event-reads.zh.md: 38468708a5323b6ebf94377f3cc8f2c86dc95dde +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events: + en: c8011fa4e61dea2f + zh: afb60a2e5d39f6dc +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/problem: + en: 95224617f6a308be + zh: 1d4187bb1e50efb4 +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/decision: + en: 29d7cb4415f01a29 + zh: a414d90693e7150e +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/decision/state-needed-after-resume: + en: e393309432e87d21 + zh: e1de0efa07abfdba +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/decision/operations-that-require-complete-history: + en: 38653e50be5bd235 + zh: a2e4dead2ad61124 +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/alternatives-considered: + en: 82d983c9c1110797 + zh: 2f491c4bb559b4f2 +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/consequences: + en: eadd46697f6ad6bf + zh: 38de0e9a72c027e9 +/agent-note-deprecate-synchronous-reads-of-arbitrary-session-events/related-decisions: + en: 037813a1627520ee + zh: b0f7a75ab4c26bff diff --git a/.agents/notes/implemented/architecture/2026-09-09-desktop-build-release-validation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-desktop-build-release-validation.i18n.yaml index c41d31830d..2516370b2e 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-desktop-build-release-validation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-desktop-build-release-validation.i18n.yaml @@ -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-09-09-desktop-build-release-validation.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-09-09-desktop-build-release-validation.md -2026-09-09-desktop-build-release-validation.md: 23aeeaa98d2647f8b9f54e94ea2aedaa82b19e55 -2026-09-09-desktop-build-release-validation.zh.md: 266bca5bbd593907c9a8fadd43050113ede94100 +/agent-note-verify-desktop-release-compatibility-during-packaging: + en: 4183cb362d89a8fb + zh: ede5e45ba6245b6b +/agent-note-verify-desktop-release-compatibility-during-packaging/problem: + en: ae3f1e31ba929c0e + zh: 1a42684e41531547 +/agent-note-verify-desktop-release-compatibility-during-packaging/decision: + en: 352372f213c43a76 + zh: 54dc9826254e56f2 +/agent-note-verify-desktop-release-compatibility-during-packaging/alternatives-considered: + en: 515cec0d22c8373c + zh: e3a5b3058b6316c2 +/agent-note-verify-desktop-release-compatibility-during-packaging/consequences: + en: 5193e3ce82faa984 + zh: 1bd7a31152e3b71c diff --git a/.agents/notes/implemented/architecture/2026-09-09-desktop-immediate-window-and-direct-start.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-desktop-immediate-window-and-direct-start.i18n.yaml index 628396c454..ecc422ab61 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-desktop-immediate-window-and-direct-start.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-desktop-immediate-window-and-direct-start.i18n.yaml @@ -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-09-09-desktop-immediate-window-and-direct-start.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-09-09-desktop-immediate-window-and-direct-start.md -2026-09-09-desktop-immediate-window-and-direct-start.md: e7ccf9b7456213d69795a40d9cd2a8509adfc44e -2026-09-09-desktop-immediate-window-and-direct-start.zh.md: c59cc91f0013293cbaf2c086822085000dd3afd2 +/agent-note-show-the-desktop-window-before-starting-the-host: + en: aed1efe0e21399a1 + zh: dd45a0ed4bfa731e +/agent-note-show-the-desktop-window-before-starting-the-host/problem: + en: bd8f14bc0beaac9e + zh: 20b0521f27ad231f +/agent-note-show-the-desktop-window-before-starting-the-host/decision: + en: 6ac14061a85b3da6 + zh: ec35f11c15b34be8 +/agent-note-show-the-desktop-window-before-starting-the-host/alternatives-considered: + en: 4d476b25f3647e1b + zh: 4a1b0252005c8c22 +/agent-note-show-the-desktop-window-before-starting-the-host/consequences: + en: 98119090f2133d33 + zh: 53ad4539d677ee4e diff --git a/.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml index 030a4eadb9..6c34e86274 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-plugin-management-in-the-web-sidebar.i18n.yaml @@ -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-09-09-plugin-management-in-the-web-sidebar.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-09-09-plugin-management-in-the-web-sidebar.md -2026-09-09-plugin-management-in-the-web-sidebar.md: ba359aeefe3883445fd5f3e3dc164262e0613219 -2026-09-09-plugin-management-in-the-web-sidebar.zh.md: 91664deeb422c1dc6c34f826a85f398183128d1c +/agent-note-plugin-management-moves-to-the-web-sidebar: + en: efdb6c8f366dd2c2 + zh: 5c55e2882753d481 +/agent-note-plugin-management-moves-to-the-web-sidebar/problem: + en: b0d11556425397b0 + zh: 00968088bec13102 +/agent-note-plugin-management-moves-to-the-web-sidebar/decision: + en: eb93a33f64907b80 + zh: 4073f2da219ad798 +/agent-note-plugin-management-moves-to-the-web-sidebar/alternatives-considered: + en: e5cea1a5e97884be + zh: d5544ae935a48f0a +/agent-note-plugin-management-moves-to-the-web-sidebar/consequences: + en: 74c0051937f03444 + zh: 256b38ff34549a4d +/agent-note-plugin-management-moves-to-the-web-sidebar/testing: + en: 9d08eb02abc00595 + zh: 56c7d26016f9deec diff --git a/.agents/notes/implemented/architecture/2026-09-09-producer-owned-message-sources.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-producer-owned-message-sources.i18n.yaml index 1514b7c6d3..7a4ee1cacd 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-producer-owned-message-sources.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-producer-owned-message-sources.i18n.yaml @@ -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-09-09-producer-owned-message-sources.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-09-09-producer-owned-message-sources.md -2026-09-09-producer-owned-message-sources.md: 83f8cb9368b516b7b6fde8717f9e5f8e9d4f7d4e -2026-09-09-producer-owned-message-sources.zh.md: f5cdfc48286f7b92883938c8e316a7751580f52c +/agent-note-producer-owned-message-sources-at-the-v4-edge: + en: 57c1c2cecb09ee0f + zh: 30b6a2c42ce573ca +/agent-note-producer-owned-message-sources-at-the-v4-edge/problem: + en: 4633a3379711846d + zh: aca05b06105b2683 +/agent-note-producer-owned-message-sources-at-the-v4-edge/decision: + en: a6f3c4040206a623 + zh: f44c3343e36cac01 +/agent-note-producer-owned-message-sources-at-the-v4-edge/alternatives-considered: + en: 99e30ba3f8782544 + zh: 3b443115115389f8 +/agent-note-producer-owned-message-sources-at-the-v4-edge/consequences: + en: 18b1b6ccbf1f299b + zh: 1bc741beb049185e diff --git a/.agents/notes/implemented/architecture/2026-09-09-profile-resolution-generations.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-profile-resolution-generations.i18n.yaml index 1d1ecb3a28..c1cc88bcdd 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-profile-resolution-generations.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-profile-resolution-generations.i18n.yaml @@ -1,6 +1,52 @@ -# 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-09-09-profile-resolution-generations.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-09-09-profile-resolution-generations.md -2026-09-09-profile-resolution-generations.md: 649c6c358fece5557031b4a21f3d3ebdd9dac8f7 -2026-09-09-profile-resolution-generations.zh.md: 4e84cc1f1b763c88b4ae96c4c44ae79de0d4c0d6 +/agent-note-add-immutable-profile-resolution-generations: + en: 6a4338564c01ad91 + zh: 241248cff9bd4cfc +/agent-note-add-immutable-profile-resolution-generations/problem: + en: 8e192c176fe48c4c + zh: adb965d650088eb0 +/agent-note-add-immutable-profile-resolution-generations/decision: + en: a3022a87337058c5 + zh: 1d53a08a25ed6eb3 +/agent-note-add-immutable-profile-resolution-generations/decision/one-selection-algorithm: + en: eae0faee66f97e5e + zh: 6d400543869aa7b3 +/agent-note-add-immutable-profile-resolution-generations/decision/ordinary-and-linked-package-examples: + en: f77ef79e2499a0dc + zh: 4bc28292763a1075 +/agent-note-add-immutable-profile-resolution-generations/decision/source-and-built-module-identity: + en: 53a9e92698ce9a5d + zh: 6124d446e8d4a532 +/agent-note-add-immutable-profile-resolution-generations/decision/immutable-generations: + en: cd4e64bd80f448a2 + zh: 585e1fbd8721ae99 +/agent-note-add-immutable-profile-resolution-generations/decision/shared-esm-and-commonjs-rule: + en: 0e0575a04a081b52 + zh: 94c74334939e6d13 +/agent-note-add-immutable-profile-resolution-generations/decision/active-plugin-list-and-package-metadata: + en: 031404dd5b36d408 + zh: de21e819edffbcf7 +/agent-note-add-immutable-profile-resolution-generations/decision/workers-and-generation-updates: + en: 99308bd758859e02 + zh: 35f1e7719fe80d2e +/agent-note-add-immutable-profile-resolution-generations/decision/additive-package-changes: + en: 718dfa7826783f2a + zh: 21c3d5fdfae9cb99 +/agent-note-add-immutable-profile-resolution-generations/decision/filesystem-and-runtime-carriers: + en: b0607713102a093d + zh: 2de9c33bfaa0e3e2 +/agent-note-add-immutable-profile-resolution-generations/decision/performance-and-verification: + en: bf7bd2f8371f54f3 + zh: 426c3b33af8874b8 +/agent-note-add-immutable-profile-resolution-generations/alternatives-considered: + en: 2426173c58a17a48 + zh: 0423b3700273accd +/agent-note-add-immutable-profile-resolution-generations/verification: + en: fbb17aa8fe62b1e8 + zh: 2ed091fdfd995fc8 +/agent-note-add-immutable-profile-resolution-generations/consequences: + en: 54cae20b2734a07e + zh: caa334f8f7a40452 diff --git a/.agents/notes/implemented/architecture/2026-09-09-workspace-file-read-authority.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-09-workspace-file-read-authority.i18n.yaml index eed28e3666..3d1c6c968a 100644 --- a/.agents/notes/implemented/architecture/2026-09-09-workspace-file-read-authority.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-09-workspace-file-read-authority.i18n.yaml @@ -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-09-09-workspace-file-read-authority.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-09-09-workspace-file-read-authority.md -2026-09-09-workspace-file-read-authority.md: 140816e8c48a6628133cf9208d5b48545e2e5eaf -2026-09-09-workspace-file-read-authority.zh.md: 75ffee32c40930c459018ab0fde42d5324371ba8 +/agent-note-workspace-file-read-authority: + en: 7ca22246a308d511 + zh: c51c7343db9c8cfa +/agent-note-workspace-file-read-authority/problem: + en: ee5703dcce5d81c5 + zh: 6c1aec04723d211b +/agent-note-workspace-file-read-authority/decision: + en: 92dbdf6087e00f04 + zh: 2c8720a081d492f9 +/agent-note-workspace-file-read-authority/alternatives-considered: + en: 329e575be02d7392 + zh: a78f428b36d40f59 +/agent-note-workspace-file-read-authority/consequences: + en: 5596ccd54a474e24 + zh: d31721c8d39b7fdc diff --git a/.agents/notes/implemented/architecture/2026-09-10-command-identities-and-composer-file-action.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-command-identities-and-composer-file-action.i18n.yaml index 5ea95513d9..85ab4e3c03 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-command-identities-and-composer-file-action.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-command-identities-and-composer-file-action.i18n.yaml @@ -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-09-10-command-identities-and-composer-file-action.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-09-10-command-identities-and-composer-file-action.md -2026-09-10-command-identities-and-composer-file-action.md: 696c3486c5e007416da3fd5e7be1d4b41cb5f582 -2026-09-10-command-identities-and-composer-file-action.zh.md: 2ce803bad5d39a6d4f40b665fb4ef7456e987912 +/agent-note-command-identities-and-composer-owned-file-action: + en: 96db2d4653b47858 + zh: b914d79ab95b0e51 +/agent-note-command-identities-and-composer-owned-file-action/problem: + en: ad2c360593eb7a42 + zh: 503a9c31a5eb55e7 +/agent-note-command-identities-and-composer-owned-file-action/decision: + en: c78d13ee6a59c04d + zh: 53fc322d351e437b +/agent-note-command-identities-and-composer-owned-file-action/alternatives-considered: + en: 94ccabd1fe224408 + zh: bfa28806f0218ce8 +/agent-note-command-identities-and-composer-owned-file-action/consequences: + en: 08f25ff5e0d227cf + zh: a26663e5b7d9feeb diff --git a/.agents/notes/implemented/architecture/2026-09-10-compact-tool-details.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-compact-tool-details.i18n.yaml index 484c0c2a3b..50d4ce7a3d 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-compact-tool-details.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-compact-tool-details.i18n.yaml @@ -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-09-10-compact-tool-details.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-09-10-compact-tool-details.md -2026-09-10-compact-tool-details.md: 6c1f29c5554c74b01fc2a86c2dee3750a529a6b5 -2026-09-10-compact-tool-details.zh.md: d0822a48f100f9f21ef4706204087fcd1e627da4 +/agent-note-compact-tool-details-from-recorded-results: + en: 7495c26039484440 + zh: d1907caf1f139054 +/agent-note-compact-tool-details-from-recorded-results/problem: + en: e4ce66f2cdb08516 + zh: 3f45374f23fa8f3b +/agent-note-compact-tool-details-from-recorded-results/decision: + en: 668e06f5146a78de + zh: 4af1edf74eb8121c +/agent-note-compact-tool-details-from-recorded-results/alternatives-considered: + en: 1f0bf45e4ecc0bfa + zh: c46b173dc7ee180b +/agent-note-compact-tool-details-from-recorded-results/consequences: + en: e02acb07b752c285 + zh: b29f9a5ad44ff10f diff --git a/.agents/notes/implemented/architecture/2026-09-10-component-factories-and-local-slots.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-component-factories-and-local-slots.i18n.yaml index 993f4391a6..ede649c464 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-component-factories-and-local-slots.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-component-factories-and-local-slots.i18n.yaml @@ -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-09-10-component-factories-and-local-slots.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-09-10-component-factories-and-local-slots.md -2026-09-10-component-factories-and-local-slots.md: 801e77644d9d2c80c4a9f3cad263420d1deda163 -2026-09-10-component-factories-and-local-slots.zh.md: 3ccd5f01633a1aa4ae830e1ee41243f5d1b65cc5 +/agent-note-reusable-component-factories-with-local-slots: + en: c59d9a681b69c8e0 + zh: 987e95099a9bbe2a +/agent-note-reusable-component-factories-with-local-slots/problem: + en: ba5734b4b97a73b5 + zh: 29f3fc9b7b88f25a +/agent-note-reusable-component-factories-with-local-slots/decision: + en: 21aa3e44ee63ef30 + zh: dbbed5107b354ff1 +/agent-note-reusable-component-factories-with-local-slots/decision/opposite-registration-directions: + en: cbe40f4b1db77180 + zh: d471b9b15c1180a8 +/agent-note-reusable-component-factories-with-local-slots/decision/definition-and-occurrence-lifecycle: + en: 5b1dbbc3cdadb743 + zh: 8efdfb12b80d305d +/agent-note-reusable-component-factories-with-local-slots/decision/local-slots-and-ordinary-children: + en: 4efed23287a0332e + zh: fa4079f4e47dd3f3 +/agent-note-reusable-component-factories-with-local-slots/decision/first-shipped-use: + en: 39d1d419e793b2d9 + zh: e5aa14bace690f52 +/agent-note-reusable-component-factories-with-local-slots/decision/type-and-runtime-enforcement: + en: dfa80b7d19335a1f + zh: 19fddd013bac8cee +/agent-note-reusable-component-factories-with-local-slots/alternatives-considered: + en: b20072038b089ea9 + zh: 129aa0705c030356 +/agent-note-reusable-component-factories-with-local-slots/consequences: + en: 14271ca39d681ca6 + zh: 76bceb0182164a6d diff --git a/.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.i18n.yaml index 62399c273d..2de0be6d61 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-desktop-web-wrapper.i18n.yaml @@ -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-09-10-desktop-web-wrapper.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-09-10-desktop-web-wrapper.md -2026-09-10-desktop-web-wrapper.md: 4f43cc650777596c807cf79463edc7a9131db44b -2026-09-10-desktop-web-wrapper.zh.md: bc41b4f8eff1dca7fc3dd9b934dac257a9d10a6b +/agent-note-run-desktop-through-the-shared-web-application: + en: 1803d1966797a555 + zh: 6ab64a673a217d34 +/agent-note-run-desktop-through-the-shared-web-application/problem: + en: 085b445846af76c1 + zh: fdddf72401292bbd +/agent-note-run-desktop-through-the-shared-web-application/decision: + en: 7767ab2839440970 + zh: 9a998e72b728fd17 +/agent-note-run-desktop-through-the-shared-web-application/alternatives-considered: + en: 9c5dfbf9cc788040 + zh: 631f851909dd7234 +/agent-note-run-desktop-through-the-shared-web-application/consequences: + en: 43a80c01a8a95170 + zh: 0d7a2d1d1c676a61 diff --git a/.agents/notes/implemented/architecture/2026-09-10-image-offload-events.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-image-offload-events.i18n.yaml index 6953db3edf..6a7a9b2152 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-image-offload-events.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-image-offload-events.i18n.yaml @@ -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-09-10-image-offload-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-09-10-image-offload-events.md -2026-09-10-image-offload-events.md: e80c4ae17b148d9eb46517b92111a8d768160def -2026-09-10-image-offload-events.zh.md: 2aa2b8b1fbffd117b5d716aba28755a02a155bb8 +/agent-note-durable-image-offload-events: + en: 13b817438040d321 + zh: 490038f3c93551c7 +/agent-note-durable-image-offload-events/problem: + en: 93c2241e0f40fca1 + zh: fe3528cff00e07b3 +/agent-note-durable-image-offload-events/decision: + en: e1cbaf46e6a6a7be + zh: c3640a44c9be69af +/agent-note-durable-image-offload-events/alternatives-considered: + en: f1ab95c3bf1a17f8 + zh: 2708521190143182 +/agent-note-durable-image-offload-events/consequences: + en: 3a9b13af9673349b + zh: 7da10694e24edadc +/agent-note-durable-image-offload-events/testing: + en: 6fa4e40e7666aa68 + zh: e31ffd143463ca15 diff --git a/.agents/notes/implemented/architecture/2026-09-10-public-package-manifest.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-public-package-manifest.i18n.yaml index de121c7c16..493f5002ab 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-public-package-manifest.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-public-package-manifest.i18n.yaml @@ -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-09-10-public-package-manifest.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-09-10-public-package-manifest.md -2026-09-10-public-package-manifest.md: 2d35a3ad17c5aa62df4a5eccde351f325936a84f -2026-09-10-public-package-manifest.zh.md: 7dc03e5160b3837ea07e19469b1d8a0a4f64ebe6 +/agent-note-public-package-manifest-fields: + en: 1ea0f036c6d0ba67 + zh: 3e885b6827315f74 +/agent-note-public-package-manifest-fields/problem: + en: e4bafc2b26cae6d2 + zh: f8226b200b627c55 +/agent-note-public-package-manifest-fields/decision: + en: 9351e430c86c51fe + zh: 486496885b77824a +/agent-note-public-package-manifest-fields/alternatives-considered: + en: 656ef2c1e7853d01 + zh: 21c525fda71c6def +/agent-note-public-package-manifest-fields/consequences: + en: 7221805e563eceb2 + zh: d171144ecef841e9 diff --git a/.agents/notes/implemented/architecture/2026-09-10-windows-native-installer-pages.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-10-windows-native-installer-pages.i18n.yaml index 304ebc1404..30d6654c2d 100644 --- a/.agents/notes/implemented/architecture/2026-09-10-windows-native-installer-pages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-10-windows-native-installer-pages.i18n.yaml @@ -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-09-10-windows-native-installer-pages.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-09-10-windows-native-installer-pages.md -2026-09-10-windows-native-installer-pages.md: 93aa4839620207447ad85b1027a68fcfdc5d3e2c -2026-09-10-windows-native-installer-pages.zh.md: da28e22f82c6e403696904362bcbe6c8b96881b8 +/agent-note-native-windows-installer-pages: + en: 2170ba78b248756f + zh: 6e5852f4685fbc81 +/agent-note-native-windows-installer-pages/problem: + en: 5d148a332b151928 + zh: a79cdfd0f1556c58 +/agent-note-native-windows-installer-pages/decision: + en: 3357e9aca4862152 + zh: c2fa86534f9c8737 +/agent-note-native-windows-installer-pages/alternatives-considered: + en: a5b1e11a1b30ab99 + zh: 8495f05dc87b831a +/agent-note-native-windows-installer-pages/consequences: + en: 16243ca0777d1ff8 + zh: e35cb7f33a756b47 diff --git a/.agents/notes/implemented/architecture/2026-09-11-desktop-electron-node-runtime.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-desktop-electron-node-runtime.i18n.yaml index d8b4bc7ee7..65fd19d68d 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-desktop-electron-node-runtime.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-desktop-electron-node-runtime.i18n.yaml @@ -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-09-11-desktop-electron-node-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-09-11-desktop-electron-node-runtime.md -2026-09-11-desktop-electron-node-runtime.md: 71516bb930f8eee22c1c6a988b6dab596a53a215 -2026-09-11-desktop-electron-node-runtime.zh.md: 162908392b98ee6a666ca414b602207ad8344937 +/agent-note-use-electron-as-the-desktop-node-runtime: + en: 06290013c52b169d + zh: 5e876829cf708f34 +/agent-note-use-electron-as-the-desktop-node-runtime/problem: + en: 67e580ac6d9298d9 + zh: bb2bd7486090bde4 +/agent-note-use-electron-as-the-desktop-node-runtime/decision: + en: 3cac5d877b18179d + zh: 0376bce7b099e0a6 +/agent-note-use-electron-as-the-desktop-node-runtime/consequences: + en: b407d0ce648beea5 + zh: 7ab329aa1d7a237c +/agent-note-use-electron-as-the-desktop-node-runtime/alternatives-considered: + en: 880e255d56b45345 + zh: 5952d9685c564284 diff --git a/.agents/notes/implemented/architecture/2026-09-11-node-office-kit.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-node-office-kit.i18n.yaml index eea688362d..5879ae942a 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-node-office-kit.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-node-office-kit.i18n.yaml @@ -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-09-11-node-office-kit.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-09-11-node-office-kit.md -2026-09-11-node-office-kit.md: 2c95b7e27e059f6aaee21970fb30fca9ba1bb11b -2026-09-11-node-office-kit.zh.md: bec5d6bb59f987f629ebfd81bb753eee121566f3 +/agent-note-node-office-conversion-with-independently-packaged-engines: + en: 04142abd8eef58bc + zh: 1a2fe733f74e88ef +/agent-note-node-office-conversion-with-independently-packaged-engines/problem: + en: ac8ace90fa115f0d + zh: 18b9977031cbadeb +/agent-note-node-office-conversion-with-independently-packaged-engines/decision: + en: 61d2e96b5b3782c5 + zh: 49780b672e681b0e +/agent-note-node-office-conversion-with-independently-packaged-engines/alternatives-considered: + en: 70315a46124cbde7 + zh: ee258ed0ef7effb0 +/agent-note-node-office-conversion-with-independently-packaged-engines/consequences: + en: bb32631217be9743 + zh: 1ea86613ade03732 diff --git a/.agents/notes/implemented/architecture/2026-09-11-plugin-owned-message-projections.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-plugin-owned-message-projections.i18n.yaml index 86af0d0570..552e27d0a6 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-plugin-owned-message-projections.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-plugin-owned-message-projections.i18n.yaml @@ -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-09-11-plugin-owned-message-projections.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-09-11-plugin-owned-message-projections.md -2026-09-11-plugin-owned-message-projections.md: 9e1eca92567fc035d48c1c42ad86d371f2542c5b -2026-09-11-plugin-owned-message-projections.zh.md: b26b5d4549294b37665ac933944b7f51ef7a5717 +/agent-note-plugin-owned-message-projections: + en: 534c84d25c21d930 + zh: 30964b3e14ffaeac +/agent-note-plugin-owned-message-projections/problem: + en: bd3ad5505204ec0b + zh: 770b6089c760d99f +/agent-note-plugin-owned-message-projections/decision: + en: 2b33d4a1cfba0f53 + zh: 55347f3ecf234862 +/agent-note-plugin-owned-message-projections/alternatives-considered: + en: c6e4c770739dca68 + zh: 7bfcb3dda06a22a1 +/agent-note-plugin-owned-message-projections/consequences: + en: c2f3ff0b9639bec5 + zh: 357f90d9a3423751 diff --git a/.agents/notes/implemented/architecture/2026-09-11-posix-ssh-runtime.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-posix-ssh-runtime.i18n.yaml index d7adb64692..423de99127 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-posix-ssh-runtime.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-posix-ssh-runtime.i18n.yaml @@ -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-09-11-posix-ssh-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-09-11-posix-ssh-runtime.md -2026-09-11-posix-ssh-runtime.md: d54600faa68524b569f219627537ce250158d9b1 -2026-09-11-posix-ssh-runtime.zh.md: a6b3a84c37b0d7b4438e8c766ef4e010443fe744 +/agent-note-posix-ssh-execution-providers: + en: 416e4093259a80aa + zh: a04797294e6af446 +/agent-note-posix-ssh-execution-providers/problem: + en: f67f6add03a36e85 + zh: 656be288f8b2e1d2 +/agent-note-posix-ssh-execution-providers/decision: + en: b2d1e370d008f0f3 + zh: 3e98919538d3fb78 +/agent-note-posix-ssh-execution-providers/alternatives-considered: + en: 4efffb3edba91689 + zh: 40100a70e5f55a42 +/agent-note-posix-ssh-execution-providers/consequences: + en: f29359ab89feb084 + zh: db7505b8d4a5351a +/agent-note-posix-ssh-execution-providers/verification: + en: 822c7c029a77f3c0 + zh: 4a2eaaf3372cba8b +/agent-note-posix-ssh-execution-providers/deferred-work: + en: f300f112c9a09f7e + zh: b4708a0b7f596420 diff --git a/.agents/notes/implemented/architecture/2026-09-11-sandboxed-node-ptc-runtime.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-sandboxed-node-ptc-runtime.i18n.yaml index f40d8780e9..834d15576d 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-sandboxed-node-ptc-runtime.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-sandboxed-node-ptc-runtime.i18n.yaml @@ -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-09-11-sandboxed-node-ptc-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-09-11-sandboxed-node-ptc-runtime.md -2026-09-11-sandboxed-node-ptc-runtime.md: f851775460c5bd01760d31552bde8c691807ec06 -2026-09-11-sandboxed-node-ptc-runtime.zh.md: 94f3a37eb702a97161c1d08cec531fcffb3460f2 +/agent-note-sandboxed-node-execution-for-ptc: + en: 0fb682d787b23a30 + zh: a7bdbbe987f53dcb +/agent-note-sandboxed-node-execution-for-ptc/problem: + en: 66ac3d7ce7eb8e15 + zh: abb9d41b71900bbf +/agent-note-sandboxed-node-execution-for-ptc/decision: + en: cf072f53de09faca + zh: 9edd5c4a2bfaae5a +/agent-note-sandboxed-node-execution-for-ptc/decision/resolved-inputs-and-policy: + en: e93df995efab569a + zh: 850daf02d1207028 +/agent-note-sandboxed-node-execution-for-ptc/decision/control-and-lifetime: + en: 2c7a694b04951772 + zh: 133b95b0477b127f +/agent-note-sandboxed-node-execution-for-ptc/decision/resource-limits: + en: 84c73cf3ff33bc03 + zh: a228080683d6252c +/agent-note-sandboxed-node-execution-for-ptc/alternatives-considered: + en: 8ffcc2b32a2243d7 + zh: 81d48d38947abc76 +/agent-note-sandboxed-node-execution-for-ptc/consequences: + en: c0aa3a23a03ba234 + zh: 257c7d35a17abbea +/agent-note-sandboxed-node-execution-for-ptc/deferred-timeout-design: + en: 455d66252cd23253 + zh: bf3839a13dbaaab5 diff --git a/.agents/notes/implemented/architecture/2026-09-11-subprocess-control-pipe.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-subprocess-control-pipe.i18n.yaml index 5e270a8b60..991ebb72c1 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-subprocess-control-pipe.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-subprocess-control-pipe.i18n.yaml @@ -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-09-11-subprocess-control-pipe.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-09-11-subprocess-control-pipe.md -2026-09-11-subprocess-control-pipe.md: 438f840958cb2f7f576b899335602ecff1e8a5ef -2026-09-11-subprocess-control-pipe.zh.md: f4305d279342bb6c91162db5748ed49743d352c6 +/agent-note-subprocess-control-pipe: + en: dca4818e974b5b20 + zh: c4d2bd1dbb65e62e +/agent-note-subprocess-control-pipe/problem: + en: 64028c0449b6699c + zh: 6ad143bac0ce23bf +/agent-note-subprocess-control-pipe/decision: + en: 69dfe0cce4199d64 + zh: 80e2b847f9119372 +/agent-note-subprocess-control-pipe/alternatives-considered: + en: 8c677c2cf3cb15bd + zh: 4fccc1d9da7f041a +/agent-note-subprocess-control-pipe/consequences: + en: b5dd21f7c58f50a5 + zh: 24abcc7136d35211 diff --git a/.agents/notes/implemented/architecture/2026-09-11-windows-directory-installation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-11-windows-directory-installation.i18n.yaml index 91e716d129..35bfbf6d4b 100644 --- a/.agents/notes/implemented/architecture/2026-09-11-windows-directory-installation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-11-windows-directory-installation.i18n.yaml @@ -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-09-11-windows-directory-installation.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-09-11-windows-directory-installation.md -2026-09-11-windows-directory-installation.md: 8208c6cc4b28de8d1ab947cb8e6afba7bfa4f673 -2026-09-11-windows-directory-installation.zh.md: d337397e8ea654d14cccd0839460763b66a19457 +/agent-note-replace-windows-application-directories-after-staging: + en: 7cdd071dd6ad760f + zh: eb8510c6c09f0068 +/agent-note-replace-windows-application-directories-after-staging/problem: + en: fa0015dca8cd9e85 + zh: a826baa59c0a3bd1 +/agent-note-replace-windows-application-directories-after-staging/decision: + en: 5bec9a233d21bb35 + zh: 50e8ba778b14b48e +/agent-note-replace-windows-application-directories-after-staging/consequences: + en: 3562fbc117967fb3 + zh: 6600b28ea6202f68 +/agent-note-replace-windows-application-directories-after-staging/alternatives-considered: + en: 0971baacd045ddef + zh: c908624104e242f9 +/agent-note-replace-windows-application-directories-after-staging/verification: + en: 650fdccdf35ad9d3 + zh: 6069b9acb5f03878 diff --git a/.agents/notes/implemented/architecture/2026-09-12-browser-use-provider-registration.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-12-browser-use-provider-registration.i18n.yaml index d2e46abf6d..3c86f14974 100644 --- a/.agents/notes/implemented/architecture/2026-09-12-browser-use-provider-registration.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-12-browser-use-provider-registration.i18n.yaml @@ -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-09-12-browser-use-provider-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-09-12-browser-use-provider-registration.md -2026-09-12-browser-use-provider-registration.md: a0d3cfdbd798dadee6a9514dffdc619d95811c4d -2026-09-12-browser-use-provider-registration.zh.md: b0016b6655292ccb5259adcb5a07decedda2e21e +/agent-note-browser-use-provider-registration-and-session-ownership: + en: 68473a007451cf68 + zh: f7a8281c5a5a2e11 +/agent-note-browser-use-provider-registration-and-session-ownership/problem: + en: b3513236c712132d + zh: df7701029eae9b31 +/agent-note-browser-use-provider-registration-and-session-ownership/decision: + en: ffca30883c040835 + zh: 3bfc6ebae9a1fe55 +/agent-note-browser-use-provider-registration-and-session-ownership/alternatives-considered: + en: 44408473ef24d8f9 + zh: 448ca799d905e9a9 +/agent-note-browser-use-provider-registration-and-session-ownership/consequences: + en: 8eb33d4073f96236 + zh: 42c456f778e36485 diff --git a/.agents/notes/implemented/architecture/2026-09-12-computer-use-provider-registration.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-12-computer-use-provider-registration.i18n.yaml index b3c762547c..5867eb3e2a 100644 --- a/.agents/notes/implemented/architecture/2026-09-12-computer-use-provider-registration.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-12-computer-use-provider-registration.i18n.yaml @@ -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-09-12-computer-use-provider-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-09-12-computer-use-provider-registration.md -2026-09-12-computer-use-provider-registration.md: 52e51ac9c4f89b6ad730e647280ba3f0c04ea3c9 -2026-09-12-computer-use-provider-registration.zh.md: 2d8802e1d8cb3c5262cbc2ba6185262f949bca01 +/agent-note-computer-use-provider-registration: + en: 7179585d8663cf3c + zh: e0ac002425dfd40b +/agent-note-computer-use-provider-registration/problem: + en: 915ca3edbd83a8fd + zh: 98fe85c63c6b2135 +/agent-note-computer-use-provider-registration/decision: + en: 7166d067e8955c9b + zh: 719263b97c5874e8 +/agent-note-computer-use-provider-registration/alternatives-considered: + en: 12913da00ffb6aa6 + zh: cbb08d075d1b91c0 +/agent-note-computer-use-provider-registration/consequences: + en: eed0c10237bf13b1 + zh: e077a9b42e2d9e71 diff --git a/.agents/notes/implemented/architecture/2026-09-12-ptc-runtime-vocabulary.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-12-ptc-runtime-vocabulary.i18n.yaml index 64a55ac887..ac5f77829d 100644 --- a/.agents/notes/implemented/architecture/2026-09-12-ptc-runtime-vocabulary.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-12-ptc-runtime-vocabulary.i18n.yaml @@ -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-09-12-ptc-runtime-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-09-12-ptc-runtime-vocabulary.md -2026-09-12-ptc-runtime-vocabulary.md: 86d2132b735166fb0ee7c4a4929d5ca64ba0880a -2026-09-12-ptc-runtime-vocabulary.zh.md: 5951c43b9554a6266d96cc60d99c11e84acc138f +/agent-note-ptc-runtime-vocabulary: + en: 4e585bb88c918c48 + zh: 1ee36889df928e84 +/agent-note-ptc-runtime-vocabulary/problem: + en: 1281bbda56bc41e0 + zh: 719dc99572bd7921 +/agent-note-ptc-runtime-vocabulary/decision: + en: b3ca07cb6a92f358 + zh: f3b763124b483563 +/agent-note-ptc-runtime-vocabulary/alternatives-considered: + en: 38af2c476cc408bc + zh: 9f1ebd14829250e3 +/agent-note-ptc-runtime-vocabulary/consequences: + en: bb68774fb0a4bcc3 + zh: b866e8763b3a4f74 diff --git a/.agents/notes/implemented/architecture/2026-09-13-workflow-ptc-sandbox-reuse.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-13-workflow-ptc-sandbox-reuse.i18n.yaml index dad55cc0ce..46f602667d 100644 --- a/.agents/notes/implemented/architecture/2026-09-13-workflow-ptc-sandbox-reuse.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-13-workflow-ptc-sandbox-reuse.i18n.yaml @@ -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-09-13-workflow-ptc-sandbox-reuse.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-09-13-workflow-ptc-sandbox-reuse.md -2026-09-13-workflow-ptc-sandbox-reuse.md: 9454ffef28e1ab5ba7791a30f4bcd67093a34ba3 -2026-09-13-workflow-ptc-sandbox-reuse.zh.md: c51706065703866520bfcad11beffc02eb1f5551 +/agent-note-reuse-the-ptc-node-sandbox-for-workflows: + en: 6db90d1dcfccd294 + zh: 0b66b16319b023a0 +/agent-note-reuse-the-ptc-node-sandbox-for-workflows/problem: + en: 42235162e945e015 + zh: 4edc5633720cd6cc +/agent-note-reuse-the-ptc-node-sandbox-for-workflows/decision: + en: b55a2a59b8039cdd + zh: fd6bbe987a49266f +/agent-note-reuse-the-ptc-node-sandbox-for-workflows/alternatives-considered: + en: 56d9a25713227146 + zh: 2cd89bf6ccc3b3bd +/agent-note-reuse-the-ptc-node-sandbox-for-workflows/consequences: + en: e650b834a6f6a3f2 + zh: de677719cdd49047 diff --git a/.agents/notes/implemented/architecture/2026-09-14-current-profile-plugin-management.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-current-profile-plugin-management.i18n.yaml index 6ec18af290..e9aab02a20 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-current-profile-plugin-management.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-current-profile-plugin-management.i18n.yaml @@ -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-09-14-current-profile-plugin-management.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-09-14-current-profile-plugin-management.md -2026-09-14-current-profile-plugin-management.md: 8d4d4c40f033e490f09ebf8d367e1fb621037a6d -2026-09-14-current-profile-plugin-management.zh.md: a8dce606d00321bd96e643a9ba842581c961d6c1 +/agent-note-current-profile-plugin-management-shares-cli-transactions: + en: 86224d16fc754163 + zh: 1c9948a6f80f2544 +/agent-note-current-profile-plugin-management-shares-cli-transactions/problem: + en: 6bb727a659ba1503 + zh: d2ebf5c8164a807e +/agent-note-current-profile-plugin-management-shares-cli-transactions/decision: + en: 863b4369c39f3933 + zh: 7dd44a91ccaaef8f +/agent-note-current-profile-plugin-management-shares-cli-transactions/alternatives-considered: + en: 30c609de89084351 + zh: 27f2747ad9d9b752 +/agent-note-current-profile-plugin-management-shares-cli-transactions/consequences: + en: a51baa71aa3fe3f4 + zh: 291db9e4ba5723d2 diff --git a/.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.i18n.yaml index f71a656550..6580682ec7 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-deepseek-account-login.i18n.yaml @@ -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-09-14-deepseek-account-login.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-09-14-deepseek-account-login.md -2026-09-14-deepseek-account-login.md: 165cd2d0a2fbe3a4a71d3ce31de69c5005c639b2 -2026-09-14-deepseek-account-login.zh.md: 5e09c0a17cc933b46aa6498c70d86fdefd26d21c +/agent-note-deepseek-account-browser-login: + en: 666b3732ccc1c2fb + zh: 37dffad1bb4e26ae +/agent-note-deepseek-account-browser-login/problem: + en: 67c00444d9dcf06d + zh: ef294910952ba052 +/agent-note-deepseek-account-browser-login/decision: + en: db9297d04d25d0f6 + zh: 20938f92c1563146 +/agent-note-deepseek-account-browser-login/alternatives-considered: + en: b7694861ea5282b6 + zh: a5ff57bdcc9fcf60 +/agent-note-deepseek-account-browser-login/consequences: + en: 348fcdb33c193cf2 + zh: ad82da41941d3afb +/agent-note-deepseek-account-browser-login/verification: + en: 881edcb454b941a6 + zh: 7dc5a9b7a066f623 +/agent-note-deepseek-account-browser-login/related: + en: 3efeda0686194f07 + zh: 9c3ddc3b8baf9381 diff --git a/.agents/notes/implemented/architecture/2026-09-14-independent-libreoffice-kit.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-independent-libreoffice-kit.i18n.yaml index c3570fad78..a0da60252b 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-independent-libreoffice-kit.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-independent-libreoffice-kit.i18n.yaml @@ -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-09-14-independent-libreoffice-kit.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-09-14-independent-libreoffice-kit.md -2026-09-14-independent-libreoffice-kit.md: 13efc41e56a4810273fbb6d9314eeda6053dbe92 -2026-09-14-independent-libreoffice-kit.zh.md: 720ca2ba3f57546825ae14b5b5f0b086fbb7f287 +/agent-note-independent-libreoffice-kit-ownership: + en: ee1625b5a309d9e6 + zh: c3e78e1b1aa92fd8 +/agent-note-independent-libreoffice-kit-ownership/problem: + en: 2fc4ac7bdd4a3474 + zh: 21ebdd3ac9264132 +/agent-note-independent-libreoffice-kit-ownership/decision: + en: 31200a9be3940dc0 + zh: 8e22be1d160ec3e4 +/agent-note-independent-libreoffice-kit-ownership/alternatives-considered: + en: 55175bb30630bf0c + zh: 788853ddd5f7a4e9 +/agent-note-independent-libreoffice-kit-ownership/consequences: + en: ace5eeafb4795ab6 + zh: 136489e75455c8e7 diff --git a/.agents/notes/implemented/architecture/2026-09-14-session-log-upload-default.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-session-log-upload-default.i18n.yaml index 420bcd267c..60583babce 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-session-log-upload-default.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-session-log-upload-default.i18n.yaml @@ -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-09-14-session-log-upload-default.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-09-14-session-log-upload-default.md -2026-09-14-session-log-upload-default.md: c1e7c9e050d1b1809ff3abba03fe4e17a3779daa -2026-09-14-session-log-upload-default.zh.md: d7b6e64098eca3fe07c43272fcba18a3790182e2 +/agent-note-default-deepseek-session-log-upload: + en: fcb31f3679ced0e2 + zh: 0e07b8a08f7e004f +/agent-note-default-deepseek-session-log-upload/problem: + en: f9721b730c7e70c7 + zh: 367e7839912cb726 +/agent-note-default-deepseek-session-log-upload/decision: + en: ec3b05fb70ae490f + zh: 59b0691e327855b4 +/agent-note-default-deepseek-session-log-upload/alternatives-considered: + en: 4cc4b61d76f84ff3 + zh: bdd29ea66037f744 +/agent-note-default-deepseek-session-log-upload/consequences: + en: 1302d84a3d2b168b + zh: aec67b793539f898 diff --git a/.agents/notes/implemented/architecture/2026-09-14-sidebar-layout-provider-recovery.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-sidebar-layout-provider-recovery.i18n.yaml index 515ead78da..621d099284 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-sidebar-layout-provider-recovery.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-sidebar-layout-provider-recovery.i18n.yaml @@ -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-09-14-sidebar-layout-provider-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-09-14-sidebar-layout-provider-recovery.md -2026-09-14-sidebar-layout-provider-recovery.md: f7ec0324f9205a556750e0af54eb856002a4ea74 -2026-09-14-sidebar-layout-provider-recovery.zh.md: 02440391e5601e3ba125c33c4c8971d4d46cbaa8 +/agent-note-sidebar-layout-persistence-and-provider-recovery: + en: 78dee80210908b7d + zh: 01a490734740a523 +/agent-note-sidebar-layout-persistence-and-provider-recovery/problem: + en: 8adb7105e89be803 + zh: 96c4e92e85b6980e +/agent-note-sidebar-layout-persistence-and-provider-recovery/decision: + en: aa09cb90f663dfe8 + zh: edaabb76aa6dc8de +/agent-note-sidebar-layout-persistence-and-provider-recovery/alternatives-considered: + en: 4a9b1234b0289ae7 + zh: 81854e0e9d32b6da +/agent-note-sidebar-layout-persistence-and-provider-recovery/consequences: + en: 4daf813b59205ca3 + zh: 917c2b975c9a67dd diff --git a/.agents/notes/implemented/architecture/2026-09-14-web-document-relative-app-routes.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-14-web-document-relative-app-routes.i18n.yaml index 8f06bf7290..7d6b05d9fa 100644 --- a/.agents/notes/implemented/architecture/2026-09-14-web-document-relative-app-routes.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-14-web-document-relative-app-routes.i18n.yaml @@ -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-09-14-web-document-relative-app-routes.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-09-14-web-document-relative-app-routes.md -2026-09-14-web-document-relative-app-routes.md: fbf30253bbfcc23eb09847f93c1b1f047459d31b -2026-09-14-web-document-relative-app-routes.zh.md: c302ec88a4205239148132513d1ff2a4385033e8 +/agent-note-web-app-owned-routes-are-document-relative: + en: c31a8b2eeced1d7a + zh: 718b29b0f1e3f995 +/agent-note-web-app-owned-routes-are-document-relative/problem: + en: ce92162dd5ef0b2a + zh: a487cfd441b9fe1a +/agent-note-web-app-owned-routes-are-document-relative/decision: + en: 5d61f3f037df8f7e + zh: fbea19a5868d45b9 +/agent-note-web-app-owned-routes-are-document-relative/alternatives-considered: + en: 14cd7d83f28ef818 + zh: 5a429ab09dae43e5 +/agent-note-web-app-owned-routes-are-document-relative/consequences: + en: e3601f867e8c1825 + zh: 5c7ba5acb63a98a3 +/agent-note-web-app-owned-routes-are-document-relative/testing: + en: 3845fc2e126b858c + zh: 5a63b358be90e565 diff --git a/.agents/notes/implemented/architecture/2026-09-15-bounded-office-conversion.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-bounded-office-conversion.i18n.yaml index 2f64b37f55..a6d52473fa 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-bounded-office-conversion.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-bounded-office-conversion.i18n.yaml @@ -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-09-15-bounded-office-conversion.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-09-15-bounded-office-conversion.md -2026-09-15-bounded-office-conversion.md: b15aa5421c575451ddb4a7bf91169bcb2fa38d3c -2026-09-15-bounded-office-conversion.zh.md: f23c38096764cf32207125cc0c3ebbdf1c04d009 +/agent-note-bounded-shared-office-conversion: + en: 10c171aa2a5ab0c2 + zh: 13e8e134e3a68e98 +/agent-note-bounded-shared-office-conversion/problem: + en: b305613daff5a763 + zh: 1aba13289664f65c +/agent-note-bounded-shared-office-conversion/decision: + en: bcd0780f95f173bf + zh: 2a7f49db2575c59d +/agent-note-bounded-shared-office-conversion/alternatives-considered: + en: 9d5cfb7fa5f66bd6 + zh: 4f4133daa2f02f43 +/agent-note-bounded-shared-office-conversion/consequences: + en: c2800ff56c8f89d1 + zh: 3b3710072b59c443 +/agent-note-bounded-shared-office-conversion/related: + en: 2e7b1a0f01c1f617 + zh: ed2abc0181ea4abe diff --git a/.agents/notes/implemented/architecture/2026-09-15-client-session-references.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-client-session-references.i18n.yaml index 0a33e19e2c..f664219cd9 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-client-session-references.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-client-session-references.i18n.yaml @@ -1,6 +1,49 @@ -# 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-09-15-client-session-references.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-09-15-client-session-references.md -2026-09-15-client-session-references.md: 162ef08875e5b0591b3b4099c9bdcadb18e7d175 -2026-09-15-client-session-references.zh.md: 3af8932f7c002b3b63de21c689ae91e3017a164e +/agent-note-client-session-references-reference-sources-and-ui-status: + en: 720fca3e1f085f8f + zh: 3480eb43eb5f0e44 +/agent-note-client-session-references-reference-sources-and-ui-status/problem: + en: 0f4d2b6e8b0393dc + zh: fe20aca8b4fd0701 +/agent-note-client-session-references-reference-sources-and-ui-status/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/scope-and-ownership: + en: d9d52caab1468205 + zh: 1b7665610bb025c6 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/addresses-bindings-and-references: + en: 3743abc8bca00348 + zh: d79e6a9311f0a2fe +/agent-note-client-session-references-reference-sources-and-ui-status/decision/acquisition-failure-and-release: + en: 84e9528d4f995460 + zh: f79f197d3dfbe8e9 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/reference-sources-and-session-list-records: + en: e2de83d10542f93b + zh: 3855b38fc8c48ea3 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/unified-ui-session-status: + en: 2d75aef5cf5f1fc8 + zh: 87a7051f24f9871a +/agent-note-client-session-references-reference-sources-and-ui-status/decision/explicit-providers-and-consumer-lifetimes: + en: 04802baa0147fec1 + zh: b86037bf2e4bc936 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/main-area-navigation-and-presentation: + en: c46c9ca54ea9eaad + zh: 918dc8eebff5edf3 +/agent-note-client-session-references-reference-sources-and-ui-status/decision/presets-and-creation-flows: + en: 790eda215b64ee37 + zh: a4b5d3a61cc80cbc +/agent-note-client-session-references-reference-sources-and-ui-status/decision/host-event-context-ownership-and-typert: + en: eb3be89cf9431c44 + zh: bfc26899286b37ad +/agent-note-client-session-references-reference-sources-and-ui-status/alternatives-considered: + en: 658731de6bc235f3 + zh: be16e5067f450b6e +/agent-note-client-session-references-reference-sources-and-ui-status/verification: + en: b7a7bb90877fedc3 + zh: 8b39d7a9624d6b43 +/agent-note-client-session-references-reference-sources-and-ui-status/consequences: + en: aa1b46303452c3e8 + zh: 01571143251dfc61 diff --git a/.agents/notes/implemented/architecture/2026-09-15-desktop-native-fatal-recovery.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-desktop-native-fatal-recovery.i18n.yaml index a57f31af0a..b5ebc209af 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-desktop-native-fatal-recovery.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-desktop-native-fatal-recovery.i18n.yaml @@ -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-09-15-desktop-native-fatal-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-09-15-desktop-native-fatal-recovery.md -2026-09-15-desktop-native-fatal-recovery.md: fc1564b02e2f7b707d2b6f6d8e0947b1a78f142d -2026-09-15-desktop-native-fatal-recovery.zh.md: ceda54b4141c5fe58e6b385c86e6c1e4958dd261 +/agent-note-native-desktop-fatal-recovery: + en: 753dfd819203ac69 + zh: 5ea088778b13d940 +/agent-note-native-desktop-fatal-recovery/problem: + en: 9cf7ba7dfd36aee0 + zh: 356fdbb01870981e +/agent-note-native-desktop-fatal-recovery/decision: + en: a3b9aa3659117524 + zh: 6f25cb295c37cddd +/agent-note-native-desktop-fatal-recovery/alternatives-considered: + en: 624d62bc0b73c37a + zh: 81c3d7cd66782f73 +/agent-note-native-desktop-fatal-recovery/consequences: + en: 309a935614b0b6a1 + zh: 58db41cd59568a6d diff --git a/.agents/notes/implemented/architecture/2026-09-15-first-class-tool-role-messages.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-first-class-tool-role-messages.i18n.yaml index d44576c5b1..7ebb9aaaf1 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-first-class-tool-role-messages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-first-class-tool-role-messages.i18n.yaml @@ -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-09-15-first-class-tool-role-messages.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-09-15-first-class-tool-role-messages.md -2026-09-15-first-class-tool-role-messages.md: 3749ad698890073634b1753d3370f9c9dc9a2e18 -2026-09-15-first-class-tool-role-messages.zh.md: c97d84a7b3ceaee17ebb6fe828bd739dba5fb0ea +/agent-note-first-class-tool-role-messages: + en: 7241f8eb82eda881 + zh: fecbc696803c619b +/agent-note-first-class-tool-role-messages/problem: + en: d1bff2dd3b7c5070 + zh: 866aecc4211992fd +/agent-note-first-class-tool-role-messages/decision: + en: fd6733aee2f00a16 + zh: 9dd9c2e7525ba9be +/agent-note-first-class-tool-role-messages/alternatives-considered: + en: 5f727366e0885a7a + zh: b1ac16578076c286 +/agent-note-first-class-tool-role-messages/consequences: + en: 6fb4a2047b748ba7 + zh: 5382786860f2e624 diff --git a/.agents/notes/implemented/architecture/2026-09-15-guided-plugin-installation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-guided-plugin-installation.i18n.yaml index e1a4357fcd..9283aaa9e4 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-guided-plugin-installation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-guided-plugin-installation.i18n.yaml @@ -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-09-15-guided-plugin-installation.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-09-15-guided-plugin-installation.md -2026-09-15-guided-plugin-installation.md: 68bd519b7cb4342c42761dfaef53940c83ceb2d8 -2026-09-15-guided-plugin-installation.zh.md: f3cbefedeb151d37078b55140635b69516fafed2 +/agent-note-guided-plugin-installation: + en: 6b8375e59efb720e + zh: d94f130f72639233 +/agent-note-guided-plugin-installation/problem: + en: edefff7cd986a509 + zh: a270839fa86976a2 +/agent-note-guided-plugin-installation/decision: + en: b661fb786e7182c5 + zh: 4cdeb584639fda23 +/agent-note-guided-plugin-installation/alternatives-considered: + en: be64b541f4d81e7c + zh: 8600531c08ab4288 +/agent-note-guided-plugin-installation/consequences: + en: e4536b20f3587497 + zh: a8eeb1d3c578b785 +/agent-note-guided-plugin-installation/testing: + en: 1e121dca5f7dc572 + zh: bcdb1b6482cc1af6 diff --git a/.agents/notes/implemented/architecture/2026-09-15-narrow-pi-ai-runtime-imports.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-narrow-pi-ai-runtime-imports.i18n.yaml index 3201431720..7e6309f2da 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-narrow-pi-ai-runtime-imports.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-narrow-pi-ai-runtime-imports.i18n.yaml @@ -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-09-15-narrow-pi-ai-runtime-imports.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-09-15-narrow-pi-ai-runtime-imports.md -2026-09-15-narrow-pi-ai-runtime-imports.md: 307d880f3fce22b0e1b96efb9c3a220a511eff15 -2026-09-15-narrow-pi-ai-runtime-imports.zh.md: 139983446a2f0cd5315629c4e0a632f8c125a837 +/agent-note-narrow-pi-ai-runtime-imports: + en: d29340bbc4bf0e5b + zh: 12a39c4efe53b580 +/agent-note-narrow-pi-ai-runtime-imports/problem: + en: 4b2048b356064ada + zh: 9926d7c54da73852 +/agent-note-narrow-pi-ai-runtime-imports/decision: + en: d425c01ec05ee7f2 + zh: 8d58d6db913720c4 +/agent-note-narrow-pi-ai-runtime-imports/alternatives-considered: + en: c663ce67f3831d3f + zh: de280dc149d5a6a0 +/agent-note-narrow-pi-ai-runtime-imports/consequences: + en: 9707284a83c1294a + zh: c53be621aac00fc9 diff --git a/.agents/notes/implemented/architecture/2026-09-15-platform-office-engines.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-15-platform-office-engines.i18n.yaml index 7ba1bf8a3e..c20b10b6fe 100644 --- a/.agents/notes/implemented/architecture/2026-09-15-platform-office-engines.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-15-platform-office-engines.i18n.yaml @@ -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-09-15-platform-office-engines.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-09-15-platform-office-engines.md -2026-09-15-platform-office-engines.md: 4272054672c6163f22b910ab64b6472a9dbdfb4c -2026-09-15-platform-office-engines.zh.md: d0a317333049734415ab9c0c05a5624b63b27447 +/agent-note-one-office-engine-per-platform: + en: 5ba8eea6deb11824 + zh: 7d1cb289fa278c74 +/agent-note-one-office-engine-per-platform/problem: + en: 803030fa18966fef + zh: bb1bbd185860f533 +/agent-note-one-office-engine-per-platform/decision: + en: 8cea2cb889666af7 + zh: 346adb1e99787c78 +/agent-note-one-office-engine-per-platform/alternatives-considered: + en: d406d0a9f4dd503a + zh: b2685e11d706799e +/agent-note-one-office-engine-per-platform/consequences: + en: 7e236c479975eee6 + zh: 94a8e0e8883bd324 diff --git a/.agents/notes/implemented/architecture/2026-09-16-creator-persistent-plugin-management.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-creator-persistent-plugin-management.i18n.yaml index 2e5d7be1ec..0c59a93381 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-creator-persistent-plugin-management.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-creator-persistent-plugin-management.i18n.yaml @@ -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-09-16-creator-persistent-plugin-management.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-09-16-creator-persistent-plugin-management.md -2026-09-16-creator-persistent-plugin-management.md: 04ccbb83fe6d2f5c460f53100a9087cce119ea4d -2026-09-16-creator-persistent-plugin-management.zh.md: 91afa00cd3f0adb8b21a52ee958bac61bc0912fc +/agent-note-creator-mode-installs-persistent-plugin-bundles: + en: c73c641d920a1431 + zh: c8ee5e861cc8bad3 +/agent-note-creator-mode-installs-persistent-plugin-bundles/problem: + en: 44615a7a0939054e + zh: b8efa721321ba0d7 +/agent-note-creator-mode-installs-persistent-plugin-bundles/decision: + en: 3530a89a72e35bdd + zh: 3601941563747b5d +/agent-note-creator-mode-installs-persistent-plugin-bundles/alternatives-considered: + en: af527d8aabdfd59c + zh: 34388da992d2ab56 +/agent-note-creator-mode-installs-persistent-plugin-bundles/consequences: + en: f27b9e492a6035e0 + zh: 3d7832ad169b7daa diff --git a/.agents/notes/implemented/architecture/2026-09-16-desktop-cos-upload-transport.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-desktop-cos-upload-transport.i18n.yaml index ecb789a14d..8a90598c63 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-desktop-cos-upload-transport.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-desktop-cos-upload-transport.i18n.yaml @@ -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-09-16-desktop-cos-upload-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-09-16-desktop-cos-upload-transport.md -2026-09-16-desktop-cos-upload-transport.md: 84504b32fd02d1fbaf8276b4f1baf7d85f7dcbd5 -2026-09-16-desktop-cos-upload-transport.zh.md: 2a2080f95b39ab433b4ccb3bec60e5ba61f52dc9 +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk: + en: acead237faaa9390 + zh: ca5d23451f3b4577 +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk/problem: + en: 74f8515cdbb2a0aa + zh: a00d1b08db6d6158 +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk/decision: + en: 54cef8eacccce2e8 + zh: 8bad9ce5c932e0dd +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk/testing: + en: c15a405f365ca499 + zh: ee59d1b593473ee7 +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk/alternatives-considered: + en: faae1f132d6cd404 + zh: 1683143fbe6b07ce +/agent-note-upload-desktop-releases-through-the-tencent-cos-sdk/consequences: + en: 2453f558b12db1ec + zh: 15d77bfb842f9b31 diff --git a/.agents/notes/implemented/architecture/2026-09-16-experimental-voice-input.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-experimental-voice-input.i18n.yaml index 65566f68ce..9845fb1909 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-experimental-voice-input.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-experimental-voice-input.i18n.yaml @@ -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-09-16-experimental-voice-input.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-09-16-experimental-voice-input.md -2026-09-16-experimental-voice-input.md: 30c81ab233f27242dcf1fe2ef89bbb86542f9c04 -2026-09-16-experimental-voice-input.zh.md: 76aa8d6fc4bea32f194b20d05db4bf49af0be313 +/agent-note-experimental-voice-input-with-explicit-recognition-providers: + en: 8d4bb68acfedbb76 + zh: e2fd06ac5d0d1f21 +/agent-note-experimental-voice-input-with-explicit-recognition-providers/problem: + en: 098f766687e70ec0 + zh: 5f75407de5357c36 +/agent-note-experimental-voice-input-with-explicit-recognition-providers/decision: + en: ac3b8f0534c8bc4b + zh: 8480dbb4bdf9e695 +/agent-note-experimental-voice-input-with-explicit-recognition-providers/alternatives-considered: + en: 660a547861d966ad + zh: d597eac0b15d81b4 +/agent-note-experimental-voice-input-with-explicit-recognition-providers/consequences: + en: 75189a3d36b12ccd + zh: 2d88b1c723a2f02e diff --git a/.agents/notes/implemented/architecture/2026-09-16-plugin-configuration-on-the-plugins-page.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-plugin-configuration-on-the-plugins-page.i18n.yaml index 8a8f6629f8..a857ff2101 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-plugin-configuration-on-the-plugins-page.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-plugin-configuration-on-the-plugins-page.i18n.yaml @@ -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-09-16-plugin-configuration-on-the-plugins-page.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-09-16-plugin-configuration-on-the-plugins-page.md -2026-09-16-plugin-configuration-on-the-plugins-page.md: 700ada15385d0ff95e2f7f1cc58545a28677a507 -2026-09-16-plugin-configuration-on-the-plugins-page.zh.md: 23935312d2b09a524a1571f81c18ad8b5ffafc3f +/agent-note-plugin-configuration-on-the-plugins-page: + en: e3cb8f2cfd31ee99 + zh: 75c7c498bb5b29e4 +/agent-note-plugin-configuration-on-the-plugins-page/problem: + en: 9ca845902f1df3a2 + zh: 41e3157a843a511e +/agent-note-plugin-configuration-on-the-plugins-page/decision: + en: edce6321f96653c1 + zh: b9af8efeff5a05ed +/agent-note-plugin-configuration-on-the-plugins-page/consequences: + en: d3d131d6c46bc32e + zh: eb7c06f119dfbe8d +/agent-note-plugin-configuration-on-the-plugins-page/alternatives-considered: + en: 14c6db09f23c2005 + zh: 979730121cd837c3 +/agent-note-plugin-configuration-on-the-plugins-page/testing: + en: b58fdf0d5922f52b + zh: 0b999255d2b9b832 diff --git a/.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.i18n.yaml index 758bca04da..de00746f9a 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.i18n.yaml @@ -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-09-16-size-neutral-product-icon-weights.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-09-16-size-neutral-product-icon-weights.md -2026-09-16-size-neutral-product-icon-weights.md: 3850fcbddfef6d096f648d5b3efa73790f40f8c1 -2026-09-16-size-neutral-product-icon-weights.zh.md: 84031677e9b13b8dbf3b8e5d959359824e0c94fc +/agent-note-size-neutral-product-icon-weights: + en: f0d742af33e3297e + zh: 5db6cdc26635d843 +/agent-note-size-neutral-product-icon-weights/problem: + en: aae2bf56f8695ee8 + zh: 491fa683d7cc580f +/agent-note-size-neutral-product-icon-weights/decision: + en: c0680b384d4198c8 + zh: a34f4481b7784b4f +/agent-note-size-neutral-product-icon-weights/alternatives-considered: + en: bda83cdc7a7c59a9 + zh: d3592cdf068556ea +/agent-note-size-neutral-product-icon-weights/consequences: + en: bceee31f65a32e69 + zh: d8fad0a01f1a7e7a diff --git a/.agents/notes/implemented/architecture/2026-09-16-user-terminal-permissions.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-16-user-terminal-permissions.i18n.yaml index e8df386371..f065cf26a3 100644 --- a/.agents/notes/implemented/architecture/2026-09-16-user-terminal-permissions.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-16-user-terminal-permissions.i18n.yaml @@ -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-09-16-user-terminal-permissions.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-09-16-user-terminal-permissions.md -2026-09-16-user-terminal-permissions.md: f45b96419c34f8ebddc30431b42c9859c46de6b9 -2026-09-16-user-terminal-permissions.zh.md: 62bb152a1b899d026c8d7bddb350317ba12f14cf +/agent-note-user-terminal-permissions: + en: 806fc2a4c3bc2294 + zh: dfdae2dc3c49b0b3 +/agent-note-user-terminal-permissions/problem: + en: 2948b4f40ebe9d3b + zh: a59676148531470f +/agent-note-user-terminal-permissions/decision: + en: 23aad535d7f8d41e + zh: 543ecefce61bee7f +/agent-note-user-terminal-permissions/alternatives-considered: + en: a4f8d5ac653db322 + zh: 9671639c5a2c746b +/agent-note-user-terminal-permissions/consequences: + en: b1c2a8059cd44cc2 + zh: 83aba1c4de722bdc diff --git a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml index 09412b4916..883bb12bc0 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-account-provider-signout.i18n.yaml @@ -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-09-17-account-provider-signout.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-09-17-account-provider-signout.md -2026-09-17-account-provider-signout.md: 6b8ef842c54ef25d1e5fc063c40361775aae9a92 -2026-09-17-account-provider-signout.zh.md: 588dd38bf9fbae8131a9e3c5cb1181dcc807df8c +/agent-note-account-provider-and-active-request-cancellation: + en: 3b8b363041dd596b + zh: 7c9b2eb195435b1f +/agent-note-account-provider-and-active-request-cancellation/problem: + en: 8d4d00e33af763b2 + zh: 61977c82d66ae9bf +/agent-note-account-provider-and-active-request-cancellation/decision: + en: d5eb12a1644c6226 + zh: 513d4f22ab74e039 +/agent-note-account-provider-and-active-request-cancellation/alternatives-considered: + en: a072026c1495a1ca + zh: bf053cc04fb33914 +/agent-note-account-provider-and-active-request-cancellation/consequences: + en: 8fd00b6d69b380c0 + zh: 3830dc3a93d5de3c diff --git a/.agents/notes/implemented/architecture/2026-09-17-developer-session-changes.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-developer-session-changes.i18n.yaml index db3f3c7cb5..70fd453cb1 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-developer-session-changes.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-developer-session-changes.i18n.yaml @@ -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-09-17-developer-session-changes.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-09-17-developer-session-changes.md -2026-09-17-developer-session-changes.md: 0545dfa4344f8ed87fe6343e13901647a5ccdac4 -2026-09-17-developer-session-changes.zh.md: 81c53115aaf4447dac358febcbd1310bb2a36cb2 +/agent-note-developer-messages-for-incremental-session-changes: + en: 1460291daf64190e + zh: 0456570fdcfbff56 +/agent-note-developer-messages-for-incremental-session-changes/problem: + en: 4b02ed98a500205c + zh: e1a075f6a8251059 +/agent-note-developer-messages-for-incremental-session-changes/decision: + en: 5fecb076fa475b6d + zh: b59c76222ec00123 +/agent-note-developer-messages-for-incremental-session-changes/alternatives-considered: + en: a9ec42fb650d6cd8 + zh: c748181c603e675f +/agent-note-developer-messages-for-incremental-session-changes/consequences: + en: 28e92dab15059d0c + zh: 31b4f1955d82c02c diff --git a/.agents/notes/implemented/architecture/2026-09-17-frame-shell-leading-window-chrome-seat.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-frame-shell-leading-window-chrome-seat.i18n.yaml index 08712a98da..16d3ced836 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-frame-shell-leading-window-chrome-seat.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-frame-shell-leading-window-chrome-seat.i18n.yaml @@ -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-09-17-frame-shell-leading-window-chrome-seat.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-09-17-frame-shell-leading-window-chrome-seat.md -2026-09-17-frame-shell-leading-window-chrome-seat.md: cc3ef576900e38dc26c46438fd5d490ac4361be0 -2026-09-17-frame-shell-leading-window-chrome-seat.zh.md: c652f313d4f4863decc14e556a1674487d1d3fea +/agent-note-frame-owned-shell-leading-window-chrome-seat: + en: 3e2cfa57af6b53e7 + zh: 78fe101ad11a6330 +/agent-note-frame-owned-shell-leading-window-chrome-seat/problem: + en: 09b5defb78287f7e + zh: b7333ce5077914a2 +/agent-note-frame-owned-shell-leading-window-chrome-seat/decision: + en: 04853eeed03a00c5 + zh: 9542acfaa6258842 +/agent-note-frame-owned-shell-leading-window-chrome-seat/alternatives-considered: + en: 81e997e43d185834 + zh: 38eda1f9a4bac318 +/agent-note-frame-owned-shell-leading-window-chrome-seat/consequences: + en: 7d95c4c155f8e3c3 + zh: b3f88fe2fb7a77f0 +/agent-note-frame-owned-shell-leading-window-chrome-seat/testing: + en: 2fcc157c9c4f0b81 + zh: 3b0e6135b1c10db1 diff --git a/.agents/notes/implemented/architecture/2026-09-17-native-v4-read-validation.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-native-v4-read-validation.i18n.yaml index c3afeacd89..cfe428cf55 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-native-v4-read-validation.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-native-v4-read-validation.i18n.yaml @@ -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-09-17-native-v4-read-validation.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-09-17-native-v4-read-validation.md -2026-09-17-native-v4-read-validation.md: b111e9f1dd4aae6557b7893a9f334445ef0c85bc -2026-09-17-native-v4-read-validation.zh.md: 20f1dc53b6eda42834e169c18f7b269e2933d27c +/agent-note-mandatory-native-v4-relationship-validation: + en: 67bc5b987df97d21 + zh: 173eb273e11a24a9 +/agent-note-mandatory-native-v4-relationship-validation/problem: + en: cfb527c1c2ca661a + zh: b61a906330cdaf97 +/agent-note-mandatory-native-v4-relationship-validation/decision: + en: 14feaf74a58d5609 + zh: 8aea80c89110e638 +/agent-note-mandatory-native-v4-relationship-validation/alternatives-considered: + en: d6296e00a6b30d48 + zh: 9f7074c69fb42e5f +/agent-note-mandatory-native-v4-relationship-validation/consequences: + en: b76aaca1c35dcc6c + zh: b933c2518c64c60c diff --git a/.agents/notes/implemented/architecture/2026-09-17-persistence-attribution-policy.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-persistence-attribution-policy.i18n.yaml index e2b272908e..2cb18a5a75 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-persistence-attribution-policy.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-persistence-attribution-policy.i18n.yaml @@ -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-09-17-persistence-attribution-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-09-17-persistence-attribution-policy.md -2026-09-17-persistence-attribution-policy.md: 19bebc8bc186f4b2b7e2e561fb6a53ceadcebabf -2026-09-17-persistence-attribution-policy.zh.md: 3561c1d1afca5402cb94b1578603c4f1a2fc89a4 +/agent-note-recorded-user-source-attribution-compatibility: + en: db7dca9aee8a5f49 + zh: 1c5aace5cb896738 +/agent-note-recorded-user-source-attribution-compatibility/problem: + en: 21904d2f57e4e159 + zh: 589fe41a93ec9e5d +/agent-note-recorded-user-source-attribution-compatibility/decision: + en: 10bd45b099218280 + zh: c21ab6c74dd1afbf +/agent-note-recorded-user-source-attribution-compatibility/alternatives-considered: + en: 2e1b3bcd9e00b5be + zh: e5a1725390346470 +/agent-note-recorded-user-source-attribution-compatibility/consequences: + en: cb2b35edfe2a006f + zh: e73c28367e78c44c diff --git a/.agents/notes/implemented/architecture/2026-09-17-plugin-detail-page-extension-slots.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-plugin-detail-page-extension-slots.i18n.yaml index 5bd9f6000c..5b7f7e9b6b 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-plugin-detail-page-extension-slots.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-plugin-detail-page-extension-slots.i18n.yaml @@ -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-09-17-plugin-detail-page-extension-slots.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-09-17-plugin-detail-page-extension-slots.md -2026-09-17-plugin-detail-page-extension-slots.md: d4bbca0c4466fbb78a8c56cfc4e327100385368f -2026-09-17-plugin-detail-page-extension-slots.zh.md: f07efc3d3cadded04a7551867680cc058d532943 +/agent-note-plugin-detail-pages-as-an-extension-point: + en: 71b432dfc4475c08 + zh: a9f9a7e272c32093 +/agent-note-plugin-detail-pages-as-an-extension-point/problem: + en: 39f7e246e6ab3beb + zh: dba3ba5206d81d8d +/agent-note-plugin-detail-pages-as-an-extension-point/decision: + en: df2cba037b6bcb4d + zh: 82d0a5dc61a1716c +/agent-note-plugin-detail-pages-as-an-extension-point/alternatives-considered: + en: cdcc8710be8ab1be + zh: d82781a3c353984f +/agent-note-plugin-detail-pages-as-an-extension-point/consequences: + en: 0567cb3fbfbdb4f8 + zh: 256811c9a7271da1 +/agent-note-plugin-detail-pages-as-an-extension-point/testing: + en: 8957db157d2f743e + zh: fb24db99bb5a55aa diff --git a/.agents/notes/implemented/architecture/2026-09-17-process-local-blank-sessions.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-process-local-blank-sessions.i18n.yaml index e89e510aea..25c6bed4ad 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-process-local-blank-sessions.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-process-local-blank-sessions.i18n.yaml @@ -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-09-17-process-local-blank-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-09-17-process-local-blank-sessions.md -2026-09-17-process-local-blank-sessions.md: 58d222185ae67c1f70874c0d0a73910eaa1e0e5b -2026-09-17-process-local-blank-sessions.zh.md: 0f3fdf050931d11a80e92d98577ac8b42628bb60 +/agent-note-writer-acquisition-for-blank-session-reuse: + en: a78ef0f5b14debe5 + zh: 8b7ef954fe622783 +/agent-note-writer-acquisition-for-blank-session-reuse/problem: + en: 837ebb0071a5611b + zh: 23d0f0713889ead6 +/agent-note-writer-acquisition-for-blank-session-reuse/decision: + en: 932bc5c0be3721de + zh: 000425c5f053e74e +/agent-note-writer-acquisition-for-blank-session-reuse/alternatives-considered: + en: 2a67a53f7f396ba8 + zh: 6df6ccc071fb0de2 +/agent-note-writer-acquisition-for-blank-session-reuse/consequences: + en: 2e1f1894337689a2 + zh: d0cab07cc48083ee +/agent-note-writer-acquisition-for-blank-session-reuse/verification: + en: 4680e845e2ab294e + zh: ea5890c5ffb09831 diff --git a/.agents/notes/implemented/architecture/2026-09-17-session-row-menu-actions-slot.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-session-row-menu-actions-slot.i18n.yaml index 0a9151134f..40bc5939fe 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-session-row-menu-actions-slot.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-session-row-menu-actions-slot.i18n.yaml @@ -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-09-17-session-row-menu-actions-slot.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-09-17-session-row-menu-actions-slot.md -2026-09-17-session-row-menu-actions-slot.md: 034144b2b7c9d260f41565d3835687e52353c381 -2026-09-17-session-row-menu-actions-slot.zh.md: 6ad15d263fd41a0ad97a386506c8f581290d032f +/agent-note-session-row-actions-as-slot-lists: + en: 6c14eadc272cbe5f + zh: d0fb9907cddcae5a +/agent-note-session-row-actions-as-slot-lists/problem: + en: 1afb986570a4bb49 + zh: 22862e82275038b7 +/agent-note-session-row-actions-as-slot-lists/decision: + en: 7a353dd9c0642f56 + zh: e503a953cccfdc47 +/agent-note-session-row-actions-as-slot-lists/alternatives-considered: + en: 19fc0c951e9e49b5 + zh: 9010c3fb55b71ce0 +/agent-note-session-row-actions-as-slot-lists/consequences: + en: cfc90eb041452a48 + zh: 882748ceb29f21ea diff --git a/.agents/notes/implemented/architecture/2026-09-17-settings-pages-as-companion-packages.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-settings-pages-as-companion-packages.i18n.yaml index 665be1daa4..34faaaba25 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-settings-pages-as-companion-packages.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-settings-pages-as-companion-packages.i18n.yaml @@ -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-09-17-settings-pages-as-companion-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-09-17-settings-pages-as-companion-packages.md -2026-09-17-settings-pages-as-companion-packages.md: de2f2897938fcc158c49bed772f399b4d9328d19 -2026-09-17-settings-pages-as-companion-packages.zh.md: 27d00faa156f0f48c6dc3995930be9ca629a732d +/agent-note-settings-pages-as-companion-packages: + en: ada5eadeb6e921e4 + zh: 1cc804b1720c2c98 +/agent-note-settings-pages-as-companion-packages/problem: + en: 8c23fffd3cef6ea8 + zh: 6072e1e4197afd7c +/agent-note-settings-pages-as-companion-packages/decision: + en: d0610e0445b8fdb7 + zh: 5e8af1fce960cae5 +/agent-note-settings-pages-as-companion-packages/alternatives-considered: + en: cc29e94d925d84b4 + zh: bdaec6d6ff2d511a +/agent-note-settings-pages-as-companion-packages/consequences: + en: ef4733505d43fb1e + zh: 320475e4b5a0f5e0 +/agent-note-settings-pages-as-companion-packages/testing: + en: 92bef8e1c609359b + zh: c4f2016243441b1e diff --git a/.agents/notes/implemented/architecture/2026-09-17-shared-office-runtime.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-shared-office-runtime.i18n.yaml index f3e123135e..4aa201536b 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-shared-office-runtime.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-shared-office-runtime.i18n.yaml @@ -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-09-17-shared-office-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-09-17-shared-office-runtime.md -2026-09-17-shared-office-runtime.md: 25b6ddccbb5b17b93bec2c0b024dfcb63e94abc3 -2026-09-17-shared-office-runtime.zh.md: 99dffe8d0233e60480689ff983b6261cbb83bb7b +/agent-note-shared-office-runtime-for-desktop-and-sdk: + en: 28af688a50a2d5c6 + zh: ee73d6dd4fab9184 +/agent-note-shared-office-runtime-for-desktop-and-sdk/problem: + en: 4d08aed08c8aff27 + zh: d618b4ac68832867 +/agent-note-shared-office-runtime-for-desktop-and-sdk/decision: + en: f92ce88d82a076ed + zh: 341e486effad4b6d +/agent-note-shared-office-runtime-for-desktop-and-sdk/alternatives-considered: + en: d85334a384a32a7d + zh: 61c370390d9fdcf9 +/agent-note-shared-office-runtime-for-desktop-and-sdk/consequences: + en: f236fec61d99ba16 + zh: 859ee94e05a95aa4 diff --git a/.agents/notes/implemented/architecture/2026-09-17-web-feature-routes-and-route-gate.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-web-feature-routes-and-route-gate.i18n.yaml index 4531b00628..735a46bdc2 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-web-feature-routes-and-route-gate.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-web-feature-routes-and-route-gate.i18n.yaml @@ -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-09-17-web-feature-routes-and-route-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-09-17-web-feature-routes-and-route-gate.md -2026-09-17-web-feature-routes-and-route-gate.md: 3939bdcd0c53e766827e8fcf05f64fb4d284c59b -2026-09-17-web-feature-routes-and-route-gate.zh.md: fb329c8fc1f93b9f979612b7163e838cc521428b +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there: + en: ca746e8d558cfc31 + zh: 3524931b0bf9991f +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there/problem: + en: d4a1124ae3b6f6a8 + zh: 4814da5d08947bc7 +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there/decision: + en: 5b89e02010c2da46 + zh: d11e67d86ef27908 +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there/alternatives-considered: + en: d90dbd0c95914085 + zh: 6256f4fd76a7cb55 +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there/consequences: + en: 94530852d7746ddb + zh: ad2383c465053822 +/agent-note-feature-routes-follow-the-document-base-and-a-gate-keeps-them-there/testing: + en: 95c952092857cb53 + zh: 232cd731afcd3288 diff --git a/.agents/notes/implemented/architecture/2026-09-17-workspace-file-binary-transfer.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-17-workspace-file-binary-transfer.i18n.yaml index 7eef4b0fa9..5fbbb120e6 100644 --- a/.agents/notes/implemented/architecture/2026-09-17-workspace-file-binary-transfer.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-17-workspace-file-binary-transfer.i18n.yaml @@ -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-09-17-workspace-file-binary-transfer.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-09-17-workspace-file-binary-transfer.md -2026-09-17-workspace-file-binary-transfer.md: b419c8bd15f51246825ceddf2905ec055bbc70ae -2026-09-17-workspace-file-binary-transfer.zh.md: 9cf3d7074c3d536a5c8a39732231c6996d6f6ead +/agent-note-binary-workspace-file-transfer: + en: ea1888ee2f867b71 + zh: fd32b8b9f29347cb +/agent-note-binary-workspace-file-transfer/problem: + en: 7da36071204124c9 + zh: c90cdeaef381b252 +/agent-note-binary-workspace-file-transfer/decision: + en: e1e0224605793212 + zh: 4e55f4b57a4b8739 +/agent-note-binary-workspace-file-transfer/alternatives-considered: + en: c548577bd53db153 + zh: 2880f3751b7fcad3 +/agent-note-binary-workspace-file-transfer/consequences: + en: 44733fbb2102c581 + zh: a0290e25401a40de +/agent-note-binary-workspace-file-transfer/validation: + en: 6d62210510b842d8 + zh: 6c5a2436ed59c354 diff --git a/.agents/notes/implemented/architecture/2026-09-18-agent-teams-single-bundle.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-agent-teams-single-bundle.i18n.yaml index ecf9b0571e..83ed8c5841 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-agent-teams-single-bundle.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-agent-teams-single-bundle.i18n.yaml @@ -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-09-18-agent-teams-single-bundle.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-09-18-agent-teams-single-bundle.md -2026-09-18-agent-teams-single-bundle.md: b417061d24928877d8d31739e1e3bde6b8512d51 -2026-09-18-agent-teams-single-bundle.zh.md: ed20dac79f39f6648767d57556ed97b42d0e1c65 +/agent-note-enable-agent-teams-with-one-bundle: + en: c595b526791a8dfd + zh: 61f4bf6948e41bee +/agent-note-enable-agent-teams-with-one-bundle/problem: + en: 8dd802c775d24e42 + zh: 53cf2818dd93181e +/agent-note-enable-agent-teams-with-one-bundle/decision: + en: d513c3239b59b2ee + zh: 7692b7ae43befc9d +/agent-note-enable-agent-teams-with-one-bundle/alternatives-considered: + en: 32952c4e1b6f486d + zh: 6c9b91eaf0460d30 +/agent-note-enable-agent-teams-with-one-bundle/consequences: + en: be92cb1ce7c86cb6 + zh: 0da06f76df72f97e +/agent-note-enable-agent-teams-with-one-bundle/verification: + en: 8fc694c4c84401f1 + zh: 6540462f6896bef7 diff --git a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.i18n.yaml index 257088effa..d8ea21a542 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.i18n.yaml @@ -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-09-18-chat-navigation-performance.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-09-18-chat-navigation-performance.md -2026-09-18-chat-navigation-performance.md: d82c68098fc422abb181ed4e5e1ca41189cd0951 -2026-09-18-chat-navigation-performance.zh.md: 9c2f81a51ce53660aabf2dd1e729d02e8028b7b6 +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps: + en: c37ea37bfa045a00 + zh: 88a75b8739e99fb5 +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/problem: + en: c3ca28379b414fc5 + zh: 4a25378cef3f2259 +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/decision: + en: a15c7c13f167e5ac + zh: a15c7c13f167e5ac +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/decision/fixed-pitch-virtual-rail: + en: 79e61c0dbffe6f01 + zh: 47dd4758d115f8bb +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/decision/two-layer-transcript-navigation: + en: 022a8ad83ac099f1 + zh: b4393e39bfdd401d +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/decision/one-publication-per-historical-jump: + en: 510e80edc58ebdea + zh: cfbff46bff1e43bb +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/decision/theoretical-work-model: + en: 6786e39e812ad355 + zh: eca00072cf880a08 +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/alternatives-considered: + en: f590762936560d5c + zh: 0fc836bf1841733e +/agent-note-bound-turn-navigation-work-and-batch-historical-jumps/consequences: + en: 5f50c3d4a539f48c + zh: 5aee80a99d52233e diff --git a/.agents/notes/implemented/architecture/2026-09-18-declarative-agent-presets.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-declarative-agent-presets.i18n.yaml index 8c41c47eeb..41b02cd5ae 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-declarative-agent-presets.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-declarative-agent-presets.i18n.yaml @@ -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-09-18-declarative-agent-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-09-18-declarative-agent-presets.md -2026-09-18-declarative-agent-presets.md: 55ec173b33b7ddd62c88c68afc8b7546074aae0a -2026-09-18-declarative-agent-presets.zh.md: 60c81de4d981818f805b1014c2e3f05f16d1e8a9 +/agent-note-declarative-agent-presets-and-retained-revisions: + en: 0a9b9ab7a29ddce9 + zh: 10893a464cde0f97 +/agent-note-declarative-agent-presets-and-retained-revisions/problem: + en: 725f773bb350218e + zh: dd8fbc09ef48208d +/agent-note-declarative-agent-presets-and-retained-revisions/decision: + en: fa2ac428de2ba3d0 + zh: c75da98e1cf076ef +/agent-note-declarative-agent-presets-and-retained-revisions/alternatives-considered: + en: 09f40eab4659e9f6 + zh: 7a70da0d0ae6845b +/agent-note-declarative-agent-presets-and-retained-revisions/consequences: + en: 24179c31261b0942 + zh: 651c61bb5e53fd78 +/agent-note-declarative-agent-presets-and-retained-revisions/testing: + en: d1a38a45212d4ebd + zh: 6ca7a86078515284 diff --git a/.agents/notes/implemented/architecture/2026-09-18-localized-package-metadata.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-localized-package-metadata.i18n.yaml index 89a7fa2cc4..828454ccca 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-localized-package-metadata.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-localized-package-metadata.i18n.yaml @@ -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-09-18-localized-package-metadata.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-09-18-localized-package-metadata.md -2026-09-18-localized-package-metadata.md: a7e41cccbbce63547e8e5f175ec2350bcf515bc2 -2026-09-18-localized-package-metadata.zh.md: d70aed2a57db4c474245806d4bd3db0129f4beb4 +/agent-note-plugin-owned-localized-display-metadata: + en: b78ee8e580f068ea + zh: 17dd59c9b6273897 +/agent-note-plugin-owned-localized-display-metadata/problem: + en: 4022a58baf82e77d + zh: 8439268ed4df9b69 +/agent-note-plugin-owned-localized-display-metadata/decision: + en: f6c3e24681977f48 + zh: 84ae52ec62f4af96 +/agent-note-plugin-owned-localized-display-metadata/existing-decisions: + en: a84f44d6a3179d47 + zh: 8fb62f08bec5f75d +/agent-note-plugin-owned-localized-display-metadata/alternatives-considered: + en: abbdb1b8ab360380 + zh: edfe6c06b1d67fd7 +/agent-note-plugin-owned-localized-display-metadata/verification: + en: 8541a2431321ef61 + zh: 77599e0855d93da9 +/agent-note-plugin-owned-localized-display-metadata/consequences: + en: 2a4547c9657038df + zh: 1a4bebd06d2b9e38 diff --git a/.agents/notes/implemented/architecture/2026-09-18-plugin-install-registries.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-plugin-install-registries.i18n.yaml index 7ca268a8fc..ac4c62e4a0 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-plugin-install-registries.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-plugin-install-registries.i18n.yaml @@ -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-09-18-plugin-install-registries.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-09-18-plugin-install-registries.md -2026-09-18-plugin-install-registries.md: bee870a87b1f5427af8f05a32396bd52bd1524b7 -2026-09-18-plugin-install-registries.zh.md: 65fe35c78910d1cdf1ce45aea7d9fa7ae8617006 +/agent-note-plugin-install-registries: + en: 88c789616a978d0c + zh: 27c9b37d12be8a6a +/agent-note-plugin-install-registries/problem: + en: 0b7713b33c9b665b + zh: eab1dac3e14c8587 +/agent-note-plugin-install-registries/decision: + en: 23bb185c5795943d + zh: 7939b6a738290adf +/agent-note-plugin-install-registries/alternatives-considered: + en: 247f164eaf0196fa + zh: 7863dcfed12161c0 +/agent-note-plugin-install-registries/consequences: + en: 9a4c2233b869350a + zh: 86562a4c8573d1c1 +/agent-note-plugin-install-registries/testing: + en: 6c7a39b22be31df7 + zh: 6eee9b14ed9be704 diff --git a/.agents/notes/implemented/architecture/2026-09-18-profile-plugin-host-runtime-instances.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-profile-plugin-host-runtime-instances.i18n.yaml index d8c7d77519..4325837109 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-profile-plugin-host-runtime-instances.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-profile-plugin-host-runtime-instances.i18n.yaml @@ -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-09-18-profile-plugin-host-runtime-instances.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-09-18-profile-plugin-host-runtime-instances.md -2026-09-18-profile-plugin-host-runtime-instances.md: 76135318b3a935e4588c360df3210618a6c69216 -2026-09-18-profile-plugin-host-runtime-instances.zh.md: b2229574876b0ad326348ababd6b6fca6f3a1ac2 +/agent-note-profile-plugins-share-the-installation-s-host-runtime-instances: + en: 04d5248dde932469 + zh: 877d263ca4b0beef +/agent-note-profile-plugins-share-the-installation-s-host-runtime-instances/problem: + en: f9c4830ba4be20bc + zh: be46323e2eae9247 +/agent-note-profile-plugins-share-the-installation-s-host-runtime-instances/decision: + en: bcd92c487ebfab32 + zh: c50478b864562f0d +/agent-note-profile-plugins-share-the-installation-s-host-runtime-instances/alternatives-considered: + en: 1443d5fc869ffcf9 + zh: 76b21473d2892e7f +/agent-note-profile-plugins-share-the-installation-s-host-runtime-instances/consequences: + en: 075067e84219ae67 + zh: 035c60f3e11783d5 diff --git a/.agents/notes/implemented/architecture/2026-09-18-volatile-config-references.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-18-volatile-config-references.i18n.yaml index ef7c78129d..729ecfe793 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-volatile-config-references.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-18-volatile-config-references.i18n.yaml @@ -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-09-18-volatile-config-references.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-09-18-volatile-config-references.md -2026-09-18-volatile-config-references.md: afaa6affdc3d18da182ec069126033cb55393b72 -2026-09-18-volatile-config-references.zh.md: 3d8800cb92dec4da80b698cb8b3c073331ed266f +/agent-note-volatile-configuration-references: + en: 6a5845c609acc131 + zh: f63fc95d58f06272 +/agent-note-volatile-configuration-references/problem: + en: da97e9a3eabc9a36 + zh: bca53a3021689d06 +/agent-note-volatile-configuration-references/decision: + en: 5798a8dd943987b1 + zh: 090d2b49958c3158 +/agent-note-volatile-configuration-references/alternatives-considered: + en: cf68e95cde8ff288 + zh: 817667d5c8c93056 +/agent-note-volatile-configuration-references/consequences: + en: 7941168bdfa2dc96 + zh: 29385474a4902a8a diff --git a/.agents/notes/implemented/architecture/2026-09-19-lossless-projection-checkpoint-json.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-lossless-projection-checkpoint-json.i18n.yaml index a66f2afe77..93be98ebc5 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-lossless-projection-checkpoint-json.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-lossless-projection-checkpoint-json.i18n.yaml @@ -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-09-19-lossless-projection-checkpoint-json.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-09-19-lossless-projection-checkpoint-json.md -2026-09-19-lossless-projection-checkpoint-json.md: 9c7d15dbd2d570eaa544f168d2c2ef882558d5ca -2026-09-19-lossless-projection-checkpoint-json.zh.md: 8c2b720358351af33a6d07888002c65d0cc30363 +/agent-note-lossless-projection-checkpoint-json: + en: 2b7b5f9e5da030df + zh: 76d65ddc85776939 +/agent-note-lossless-projection-checkpoint-json/problem: + en: 26e613246f31ee5a + zh: e0aa1e2f63bce802 +/agent-note-lossless-projection-checkpoint-json/decision: + en: 01161e9c42142971 + zh: e05e52d2af7fc4c5 +/agent-note-lossless-projection-checkpoint-json/alternatives-considered: + en: 1d64345d3d72ed5f + zh: 4c9d3410cfd815b3 +/agent-note-lossless-projection-checkpoint-json/consequences: + en: 94b619dc13cfff0b + zh: c432227d3333175f diff --git a/.agents/notes/implemented/architecture/2026-09-19-profile-owned-live-configuration.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-profile-owned-live-configuration.i18n.yaml index 8c966f2cfd..599afcc6f0 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-profile-owned-live-configuration.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-profile-owned-live-configuration.i18n.yaml @@ -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-09-19-profile-owned-live-configuration.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-09-19-profile-owned-live-configuration.md -2026-09-19-profile-owned-live-configuration.md: 7acf10986987960a9748308c9fe19060a97cfcc0 -2026-09-19-profile-owned-live-configuration.zh.md: c9b88462a5e0a8601d9dcd83f7d82b49e7ce5b5c +/agent-note-keep-live-configuration-in-the-owning-profile: + en: 4331f70f04ab7bac + zh: 68dece695f6f43a8 +/agent-note-keep-live-configuration-in-the-owning-profile/problem: + en: 2abacff687661d28 + zh: 2d7ba3ae27dba888 +/agent-note-keep-live-configuration-in-the-owning-profile/decision: + en: 66c3884425cfb90a + zh: 0fe6a1f1a576470b +/agent-note-keep-live-configuration-in-the-owning-profile/alternatives-considered: + en: 4089464ad1fb60bd + zh: 3168e9e4a205145d +/agent-note-keep-live-configuration-in-the-owning-profile/consequences: + en: 6033aaa12b2a521b + zh: 43934413c97670de diff --git a/.agents/notes/implemented/architecture/2026-09-19-profile-resolution-lookup-order.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-profile-resolution-lookup-order.i18n.yaml index da2d68745b..8892007905 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-profile-resolution-lookup-order.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-profile-resolution-lookup-order.i18n.yaml @@ -1,6 +1,64 @@ -# 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-09-19-profile-resolution-lookup-order.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-09-19-profile-resolution-lookup-order.md -2026-09-19-profile-resolution-lookup-order.md: 6dfb5511afe885875a778b8a4f1b7c5fc3c0d842 -2026-09-19-profile-resolution-lookup-order.zh.md: 2474a9b040cb4917e71b7002d36c1e61fe3bc106 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer: + en: 7754ffbd03cff339 + zh: cbf34c74b346654a +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/problem: + en: 51374538814c0796 + zh: ebd74420bec9687a +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision: + en: d69f81d4fc545e29 + zh: 9fc532af8015cb28 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules: + en: de6ea16534218e69 + zh: fd8e1d470a2cf056 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/1-the-ancestor-chain-node-s-ancestor-node-modules-lookup: + en: 197a263bc0152b74 + zh: ab05b5033f0a74e0 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/2-the-interception-layer-the-runtime-resolution-occupies-dsh-home-profiles-node-modules-package: + en: 7acd592cb967f08f + zh: 5b20fd69c832287b +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/3-linked-directories-peer-interception-at-each-ancestor-position: + en: 8b0ded021ddb87b4 + zh: 2f4d5c33dadf50e7 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/4-what-the-interception-layer-holds-the-runtime-resolution-s-scan-contents: + en: 5fffd66f08d4b977 + zh: 020ef8953b20cc8a +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/5-hook-coverage: + en: 644f6f9a6ff8d6c8 + zh: 7a81f928551e9041 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-1-resolution-rules/6-package-directories-and-module-files: + en: c85f82cb1c60360e + zh: c535f1c0ec58345e +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-2-walkthroughs: + en: 906e0d58e3c2aff3 + zh: ccc3a709034865b9 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-2-walkthroughs/table-1-ancestor-chain-and-interception-for-esm-and-commonjs-across-request-forms: + en: c88d52e8715281f6 + zh: f69aaf44655bc935 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-2-walkthroughs/table-2-interception-position-for-the-web-and-desktop-profiles: + en: e9dce1779952a066 + zh: d51cf26a192f3f91 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-2-walkthroughs/table-3-ancestor-chain-when-a-plugin-is-linked-outside-the-tree: + en: 6fc9735fac937ec2 + zh: e9502a116339c7c3 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-3-developer-integration-guide: + en: 35f27b53d995d59f + zh: 58a47c7bfced79a0 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-3-developer-integration-guide/1-normal-installation: + en: d0bed60317e6e3a8 + zh: 5714160678adc049 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/decision/part-3-developer-integration-guide/2-development-mode-the-plugin-repository-is-outside-the-profile-tree: + en: d7ec5a747ebcb93e + zh: 7e1d0724973b32c1 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/alternatives-considered: + en: 5466618bb5e3d4d9 + zh: 7d0b6d727e33d0d1 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/verification: + en: 328fbaca95eac5ff + zh: b41fbe45097d3ea9 +/agent-note-resolve-profile-modules-along-the-ancestor-chain-with-an-interception-layer/consequences: + en: 4a748267ef8d0480 + zh: 0ecc79b3c82bf9bb diff --git a/.agents/notes/implemented/architecture/2026-09-19-projection-cache-listing-identity-and-cached-rows.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-projection-cache-listing-identity-and-cached-rows.i18n.yaml index ea121beb8c..fa28db5307 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-projection-cache-listing-identity-and-cached-rows.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-projection-cache-listing-identity-and-cached-rows.i18n.yaml @@ -1,6 +1,49 @@ -# 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-09-19-projection-cache-listing-identity-and-cached-rows.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-09-19-projection-cache-listing-identity-and-cached-rows.md -2026-09-19-projection-cache-listing-identity-and-cached-rows.md: 61b82e5003ba4b634230941f5d3df65e65491e25 -2026-09-19-projection-cache-listing-identity-and-cached-rows.zh.md: ef49d90bc68ca501f7496adbac1d1aa8a5d706a7 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows: + en: 04813e762d48995c + zh: b0ed6656adc7c5f0 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/problem: + en: 2e7f99c81fbc941f + zh: b0fac7cd5eb86ffe +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/problem/mechanism: + en: faa32b20dc128571 + zh: d01263a543be675d +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/problem/the-cache-s-two-uses-and-where-validation-lives: + en: 7bec01a054dffbad + zh: e158b106a079a770 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/problem/the-client-store-cannot-guarantee-that-connected-data-replaces-hints: + en: 597b346459a9d8b0 + zh: f7282a40061d645c +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision: + en: a15c7c13f167e5ac + zh: a15c7c13f167e5ac +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/two-read-faces-the-cut-is-compared-only-on-the-fold-face: + en: 30bb0f92e2ba046b + zh: 25ae7e78a5887643 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/why-the-read-only-face-may-skip-the-cut: + en: 1138b58239be186b + zh: cf5fc5f1d3f21bd3 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/consumers: + en: 5b8c1e5eb06f7d59 + zh: 4018838c3390342a +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/the-client-store-separates-cached-and-sequenced-rows: + en: 8a4e9e9ac2ada06f + zh: b5884535cd934f72 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/what-stays-untouched: + en: 1cefba02bbfb2647 + zh: 5a96942565ab9d72 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/decision/worst-case-walked-through: + en: 396d75331b3b0143 + zh: 2eb41ac09de87de0 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/alternatives-considered: + en: d71031c0dc256d80 + zh: 753c948a90a0c9ad +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/consequences: + en: c95faf40ca336afb + zh: 95d6030671113056 +/agent-note-projection-cache-read-only-face-matches-the-lifecycle-identity-the-client-store-separates-cached-and-sequenced-rows/testing: + en: 20aef0e3d10b7f98 + zh: 478b2d22eb3fcc2a diff --git a/.agents/notes/implemented/architecture/2026-09-19-remote-duplex-stream.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-remote-duplex-stream.i18n.yaml index 9a6d0df300..eba3d7545a 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-remote-duplex-stream.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-remote-duplex-stream.i18n.yaml @@ -1,6 +1,142 @@ -# 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-09-19-remote-duplex-stream.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-09-19-remote-duplex-stream.md -2026-09-19-remote-duplex-stream.md: ea8e8cebcc8285c97ebdb70f4e37805d3ce8bfe9 -2026-09-19-remote-duplex-stream.zh.md: 2e119bf054e20d076e22758178b5e0168092be18 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context: + en: c52d4b55f470a50f + zh: d2d446516b1011bc +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem: + en: 70a969dce3283824 + zh: 18c61bf840a6518a +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem/current-state: + en: 8fb06638898de59e + zh: 79ed0cfe79e40be1 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem/three-unrelated-uplink-mechanisms: + en: 386be7b691ab63e7 + zh: 935e0db22ae1cf5d +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem/concrete-costs: + en: f374976b43645d15 + zh: 26b2c7aaafa41fba +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem/relation-to-background-jobs: + en: 5e67475010d52ddb + zh: ce23aad2d4aa0d67 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/problem/goals: + en: 1f8e6d20dd4b2bf7 + zh: c6939e72e9bac277 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision: + en: a15c7c13f167e5ac + zh: ff261e3705c47ff0 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/in-one-sentence: + en: 943208904785f7eb + zh: bda1969132a16101 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/terms: + en: 401703adbd9cc1c2 + zh: 56d960c0b6fdff57 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/type-signatures: + en: 5f9cd00890b6f4c3 + zh: 600ecba7e60b63f6 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/host-face: + en: 37f59749e1703ca8 + zh: d220eded761d83c0 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/host-face/how-the-invocation-context-reaches-the-method: + en: a7180d3c194cf9d9 + zh: 0dd7833e0e5d0a71 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/peerscope: + en: 202aa6e8e8b04bd6 + zh: b1fc897c09074a7c +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/client-face: + en: 9f10347a73402b8b + zh: b939c7a254a8e579 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/wire-frames: + en: 490c19bf403bc76f + zh: 55ad5cff840d0421 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/logical-stream-state-machine: + en: 438963f156ea05b1 + zh: e738fca49b9bc1cc +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/logical-stream-state-machine/host-side: + en: 959d7f191895af71 + zh: 9b70e5e36233e301 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/logical-stream-state-machine/client-side: + en: 6a6f94f54a29c1ed + zh: 1306602bae8a219b +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/half-close-and-termination: + en: 52e2097ea66452e8 + zh: 0cc058365773a792 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/cancellation-wait-lifetime: + en: a21405b6607345a7 + zh: 70b3be4327ab59d5 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/ordering-guarantees: + en: d176a388014d0bf8 + zh: db4a4988dcb36690 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/backpressure: + en: 607a1afd89892d15 + zh: a0aa85124340458c +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/security-and-validation: + en: 46a0c0b3ce1e5671 + zh: 7743707de42b1d1d +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/in-process-and-worker-carriers: + en: ec339e57dc2c0603 + zh: 3570be8c094ea24c +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/decision/relation-to-events: + en: a011793e5a4400ed + zh: df8b20115f0348b8 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions: + en: b8a63bcefdea2704 + zh: d2aa576cf736b1b7 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/typert-protocol-packages-typert-protocol-src: + en: e1b2ae30d8a8a62d + zh: 8790a068aa3a10e9 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/typert-generator-packages-typert-generator-src: + en: 3b0b1398141b9a3d + zh: 6a96f6785c59dad3 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/two-names-one-entry-point: + en: 59188926c8e586de + zh: 3298be0413d14274 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/gateway-host-packages-api-gateway-src: + en: 9c8122ce6048a432 + zh: 58f28ebe6d484a9d +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/gateway-host-mux-stream-server-ts: + en: eb4b18a979c0665d + zh: 148bf697825ddc49 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/type-and-wire-definitions/gateway-client-packages-api-gateway-src-client: + en: 26dcd8bebdc8d974 + zh: e74bcef7c549e70c +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/placement: + en: 41128746334320c7 + zh: 558a676340aae3a2 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/key-sequences: + en: 130e4f9ec7296a10 + zh: 2a5aa1302a8db61a +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/key-sequences/open-uplink-half-close-downlink-end: + en: 3e8f671254c2b462 + zh: d2dba924dfc0f09e +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/key-sequences/client-dispose: + en: a5b474d42af07bd9 + zh: df2bd41480beb07e +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/key-sequences/inbox-overflow: + en: 32b009b9d90dc36c + zh: 52590ffa9bf9f90b +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/boundary-matrix: + en: c6a08daa98e3c189 + zh: 0c9dbe16f4cdaa79 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/error-codes: + en: 7da8cacc0a6892f2 + zh: e22ca8d3d9161568 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/minimal-echo-method: + en: b42ab0932f8b31b4 + zh: 7fed8cb5b6e36788 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/alternatives-considered: + en: 04e72789417d6e3a + zh: b57c5cc68dff45a5 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/consequences: + en: 07524e0c2dc22ad5 + zh: 5bf4f27160d78b43 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/testing: + en: 5c8188930b9d4fdb + zh: 1d94e6563cedde13 +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/deferred: + en: 3b99a327464edc3e + zh: dcffdc75369925dc +/agent-note-remote-duplex-stream-one-kind-of-stream-an-uplink-channel-and-an-invocation-context/related: + en: f8995f478dc1d478 + zh: 96621e80a4d3cefc diff --git a/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml index 0bdbf1a165..d2ba163848 100644 --- a/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-19-window-drag-coverage-contract.i18n.yaml @@ -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-09-19-window-drag-coverage-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-09-19-window-drag-coverage-contract.md -2026-09-19-window-drag-coverage-contract.md: c73d9230a4194f74babbd41ef3a8fdedc07cdd81 -2026-09-19-window-drag-coverage-contract.zh.md: 81fb9bbcc299769ab5b5bde1c04deb7c691c3a34 +/agent-note-window-drag-coverage-as-a-contract: + en: 120846e859b20561 + zh: 9511a261d15f87b5 +/agent-note-window-drag-coverage-as-a-contract/problem: + en: e4a1c339c31fb1b5 + zh: 0e9db2a9ba74e6c7 +/agent-note-window-drag-coverage-as-a-contract/decision: + en: 1cef50cc0c973afb + zh: c97495c70292f32c +/agent-note-window-drag-coverage-as-a-contract/alternatives-considered: + en: d3c08cbcee308605 + zh: 93bc631a31c16855 +/agent-note-window-drag-coverage-as-a-contract/consequences: + en: d312ce6aad9dc358 + zh: 96905d1acb95ed7c +/agent-note-window-drag-coverage-as-a-contract/testing: + en: bac710df115cac90 + zh: 236874d8df1caa27 +/agent-note-window-drag-coverage-as-a-contract/manual-state-matrix: + en: 8b86cf80458055b1 + zh: 55cece531251548a diff --git a/.agents/notes/implemented/architecture/2026-09-20-sidebar-retained-tab-layout.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-20-sidebar-retained-tab-layout.i18n.yaml index 79c5e6a4e4..641b4a5806 100644 --- a/.agents/notes/implemented/architecture/2026-09-20-sidebar-retained-tab-layout.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-20-sidebar-retained-tab-layout.i18n.yaml @@ -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-09-20-sidebar-retained-tab-layout.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-09-20-sidebar-retained-tab-layout.md -2026-09-20-sidebar-retained-tab-layout.md: 3c1e23ad93ba3dc2f2a5134af7808ca992e0635f -2026-09-20-sidebar-retained-tab-layout.zh.md: 000174a0c31dd3682f2c0224e7550419d2b7b39e +/agent-note-stable-sidebar-tab-mounting-and-session-retention: + en: 79bf4b50c50b52d4 + zh: cfd15cdb020ef7c8 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/problem: + en: fd5b83cd022f1696 + zh: fd14a1bc7f5d9119 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/decision: + en: 3e604325fdf0e8b5 + zh: ddf00764a68532d4 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/decision/layout-ownership: + en: 7095df7c949b8e3c + zh: e7410e44eaa97797 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/decision/session-and-tab-lifetime: + en: 60a4450a1a4f398c + zh: cc0054505b973c91 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/decision/provider-responsibilities: + en: a34c228751a1a329 + zh: 8e8b962b55e7c68e +/agent-note-stable-sidebar-tab-mounting-and-session-retention/decision/retention-versus-recovery: + en: aabfa99401aa0f73 + zh: 465ebf723c4393aa +/agent-note-stable-sidebar-tab-mounting-and-session-retention/alternatives-considered: + en: 84cfe7613657bfdb + zh: 4a0a499eb5d36d22 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/consequences: + en: 9569f8398823e0da + zh: 9b95fb2f5d53b963 +/agent-note-stable-sidebar-tab-mounting-and-session-retention/verification: + en: 8d6fd48c494ba5f6 + zh: 1aa02f822f58d73b diff --git a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.i18n.yaml index 1bd7d91641..f715253877 100644 --- a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.i18n.yaml @@ -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-09-21-conversation-build-groups.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-09-21-conversation-build-groups.md -2026-09-21-conversation-build-groups.md: bccb48b0e40a076bbcb59aaca9e9ef6208e9469d -2026-09-21-conversation-build-groups.zh.md: 5d2ec9e684c75b3db3568c4f046129431295f736 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly: + en: 011f264e0aea8d0c + zh: d0ad8b4334af619e +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/problem: + en: 83dd98f48ee30a1a + zh: 66dec35b4b54f291 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/decision: + en: d4216ce4d80382e8 + zh: 9ee608af410e81e0 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/decision/responsibilities: + en: d7cf1bd544f163ee + zh: 2433f3faa5f5abcb +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/decision/related-decisions: + en: d8307dcaf2a9ac72 + zh: 4852b1e2a4d09af0 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/definition-input-state-and-registration: + en: 9fb89bddbfd75627 + zh: 950c319db123c637 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/node-group-references-and-updates: + en: 13034cf7eb143055 + zh: 4ff0c0be55028258 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/assembly-order-and-lifecycle: + en: 52a1bbfe6e9bcac7 + zh: dabbcd108f68bd14 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/concrete-implementation-locations: + en: 85715eb77bf73713 + zh: 7e6c90830b65281b +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/react-reading-and-presentation: + en: 7636207f33e971a4 + zh: ace1f5bbaf5a01b5 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/alternatives-considered: + en: 21a74f9031f86a92 + zh: c6abd0a5dfbf56a8 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/verification: + en: b42409d029fc0fde + zh: 0f8ab7d206cab772 +/agent-note-definition-owned-grouping-with-generic-node-group-assembly/consequences: + en: 96f1d81b28534661 + zh: 8cb1c7a0f000c335 diff --git a/.agents/notes/implemented/architecture/2026-09-21-creator-skills-progressive-disclosure.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-21-creator-skills-progressive-disclosure.i18n.yaml index 61830cb7cd..4a59755b21 100644 --- a/.agents/notes/implemented/architecture/2026-09-21-creator-skills-progressive-disclosure.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-21-creator-skills-progressive-disclosure.i18n.yaml @@ -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-09-21-creator-skills-progressive-disclosure.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-09-21-creator-skills-progressive-disclosure.md -2026-09-21-creator-skills-progressive-disclosure.md: bdd70beda7c92584a336cda856d196ac23d1f968 -2026-09-21-creator-skills-progressive-disclosure.zh.md: 265d9db21a5288b4d589078ff85a75eb74f3b237 +/agent-note-creator-skills-disclose-progressively-and-may-read-sources: + en: 374f4a41f3026e59 + zh: 4e7f90d18b03fd14 +/agent-note-creator-skills-disclose-progressively-and-may-read-sources/problem: + en: 1808717550a5e7ba + zh: e18dd5a813a2398d +/agent-note-creator-skills-disclose-progressively-and-may-read-sources/decision: + en: b83fb74f03ca75a7 + zh: e4f6b1c73ef96787 +/agent-note-creator-skills-disclose-progressively-and-may-read-sources/alternatives-considered: + en: d36d4f610925060a + zh: c0ed56b6c631789e +/agent-note-creator-skills-disclose-progressively-and-may-read-sources/consequences: + en: ed908afe74adf3bc + zh: 62a3cfba359dfbb6 diff --git a/.agents/notes/implemented/architecture/2026-09-21-live-config-inspect-provider.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-21-live-config-inspect-provider.i18n.yaml index eae4bb9b59..a9e885fe52 100644 --- a/.agents/notes/implemented/architecture/2026-09-21-live-config-inspect-provider.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-21-live-config-inspect-provider.i18n.yaml @@ -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-09-21-live-config-inspect-provider.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-09-21-live-config-inspect-provider.md -2026-09-21-live-config-inspect-provider.md: b4be50852693665780da37b03c130339afa0ef57 -2026-09-21-live-config-inspect-provider.zh.md: e1eead7b68f12be320e5c34b621178f44cd26282 +/agent-note-live-plugin-config-inspection-replaces-the-host-builtin-provider: + en: f57edbb8b3fa60ae + zh: 8d0fa0eb73bbdaf1 +/agent-note-live-plugin-config-inspection-replaces-the-host-builtin-provider/problem: + en: e01cc31ce200b24b + zh: 7462a52c3e59ec87 +/agent-note-live-plugin-config-inspection-replaces-the-host-builtin-provider/decision: + en: a7d21366030c31ac + zh: 047299df13e504b7 +/agent-note-live-plugin-config-inspection-replaces-the-host-builtin-provider/alternatives-considered: + en: a19dba57a4108fc6 + zh: 2e64893e8bcf6513 +/agent-note-live-plugin-config-inspection-replaces-the-host-builtin-provider/consequences: + en: efa454977043c76d + zh: d6bf61ac47310d3e diff --git a/.agents/notes/implemented/architecture/2026-09-22-fatal-diagnostics-and-crash-reports.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-22-fatal-diagnostics-and-crash-reports.i18n.yaml index 89a855ae78..567f3220b2 100644 --- a/.agents/notes/implemented/architecture/2026-09-22-fatal-diagnostics-and-crash-reports.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-22-fatal-diagnostics-and-crash-reports.i18n.yaml @@ -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-09-22-fatal-diagnostics-and-crash-reports.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-09-22-fatal-diagnostics-and-crash-reports.md -2026-09-22-fatal-diagnostics-and-crash-reports.md: 01cbb24fc84b19465a15e9f82c03ae87621b5fe9 -2026-09-22-fatal-diagnostics-and-crash-reports.zh.md: 38f6a6802b61b128ab6b8ffda0465691c5244523 +/agent-note-fatal-diagnostics-and-desktop-crash-reports: + en: a87890699e70ccc6 + zh: 189d21b852a20760 +/agent-note-fatal-diagnostics-and-desktop-crash-reports/problem: + en: f7d0c561d7576f9a + zh: ac96a7d1c470c8cf +/agent-note-fatal-diagnostics-and-desktop-crash-reports/decision: + en: ac461e0ea1702ecc + zh: 745def8581dc7974 +/agent-note-fatal-diagnostics-and-desktop-crash-reports/relationship-to-earlier-decisions: + en: 157e52fc4036044a + zh: e474d9c9a36f1381 +/agent-note-fatal-diagnostics-and-desktop-crash-reports/relationship-to-the-desktop-logging-design: + en: 7dc438912d10574a + zh: 07d05f9f17043d67 +/agent-note-fatal-diagnostics-and-desktop-crash-reports/testing: + en: 864a8e71e3b3378b + zh: a71807db24d9409c +/agent-note-fatal-diagnostics-and-desktop-crash-reports/consequences: + en: a9bf0176caf92221 + zh: 169d31d00bd28585 +/agent-note-fatal-diagnostics-and-desktop-crash-reports/alternatives-considered: + en: 5b5cf601759d1ff1 + zh: 2171128e2b3aa799 diff --git a/.agents/notes/implemented/architecture/2026-09-22-tool-call-three-phases.i18n.yaml b/.agents/notes/implemented/architecture/2026-09-22-tool-call-three-phases.i18n.yaml index 5b3f65eaa0..48da0f768d 100644 --- a/.agents/notes/implemented/architecture/2026-09-22-tool-call-three-phases.i18n.yaml +++ b/.agents/notes/implemented/architecture/2026-09-22-tool-call-three-phases.i18n.yaml @@ -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-09-22-tool-call-three-phases.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-09-22-tool-call-three-phases.md -2026-09-22-tool-call-three-phases.md: f43eaf1a685358f251a446889b6ac25f5fdf0144 -2026-09-22-tool-call-three-phases.zh.md: accbd2e966595ae7f124138147d191f97cb763ee +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid: + en: d8d1cdcedf0b5d8e + zh: 79e4466489558365 +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/problem: + en: 0539e5f25f594681 + zh: 5446bd08229eab9b +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision/one-tool-owns-three-stages: + en: ea65da88c3df35bb + zh: a71afb4683a75290 +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision/start-marks-an-initialization-candidate: + en: 696a180246e23391 + zh: aeb2b1fdcfdf9631 +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision/converge-on-final-state-without-replaying-preparation: + en: 603cbcf3379ad4f7 + zh: e34d87ea348c756b +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision/shared-rows-reuse-their-existing-presentation: + en: 24536588cd0c979b + zh: 992d4c4657d6d034 +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/decision/relationship-to-existing-records: + en: bd4984f66c507785 + zh: 4d2372fdbc4c3cec +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/alternatives-considered: + en: 505095bec889700e + zh: b77c492de3e8641a +/agent-note-tool-calls-own-preparation-dispatch-and-results-by-callid/consequences: + en: 3cf36b54240013da + zh: 67e663b431bc67d2 diff --git a/.agents/notes/implemented/bug-fix/2026-07-20-jsonl-storage-identity.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-20-jsonl-storage-identity.i18n.yaml index 84feb26de2..5247ed21c3 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-20-jsonl-storage-identity.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-07-20-jsonl-storage-identity.i18n.yaml @@ -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-jsonl-storage-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/bug-fix/2026-07-20-jsonl-storage-identity.md -2026-07-20-jsonl-storage-identity.md: 5224ebf6bebc42b4b72e14243c1af6c02f366372 -2026-07-20-jsonl-storage-identity.zh.md: 05b7150edb99cdf336b9df90bc8e3cc1df9848a3 +/agent-note-bind-jsonl-session-identity-before-mutation: + en: 1d52db2391f1433e + zh: 3bcb9dca6b77bfdd +/agent-note-bind-jsonl-session-identity-before-mutation/problem: + en: 960d783083269ddd + zh: ef52b53d99b520d1 +/agent-note-bind-jsonl-session-identity-before-mutation/decision: + en: 3fc8ab92d1f0f98b + zh: 855b863c7d90cdd9 +/agent-note-bind-jsonl-session-identity-before-mutation/alternatives-considered: + en: 5269f154c37cb8de + zh: 983f18775457361a +/agent-note-bind-jsonl-session-identity-before-mutation/consequences: + en: 2c88ff974542760f + zh: 489996a16ba6907b diff --git a/.agents/notes/implemented/bug-fix/2026-07-31-fail-loud-releases-the-terminal.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-07-31-fail-loud-releases-the-terminal.i18n.yaml index 438bf04d9c..dbd450eb86 100644 --- a/.agents/notes/implemented/bug-fix/2026-07-31-fail-loud-releases-the-terminal.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-07-31-fail-loud-releases-the-terminal.i18n.yaml @@ -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-fail-loud-releases-the-terminal.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/bug-fix/2026-07-31-fail-loud-releases-the-terminal.md -2026-07-31-fail-loud-releases-the-terminal.md: 9c8aa41e960764c6d9311c49a8757a25b3996b78 -2026-07-31-fail-loud-releases-the-terminal.zh.md: e44d4672dcf768c33d94b801809cf7aa653aa62f +/agent-note-fail-loud-releases-the-terminal-before-exiting: + en: c070ae81b744a18b + zh: 8379e89b11e263c4 +/agent-note-fail-loud-releases-the-terminal-before-exiting/problem: + en: 705893ebb3a11d92 + zh: 7d19929c62213a3c +/agent-note-fail-loud-releases-the-terminal-before-exiting/decision: + en: a28315c307acdf90 + zh: fb7b2df986ffdffc +/agent-note-fail-loud-releases-the-terminal-before-exiting/alternatives-considered: + en: 5ee239978e8f1ece + zh: 55267740c7726c25 +/agent-note-fail-loud-releases-the-terminal-before-exiting/consequences: + en: 19241cdfdb6c4e56 + zh: 24534e8660ae2f96 +/agent-note-fail-loud-releases-the-terminal-before-exiting/testing: + en: 8a7b0c74ec32d5a0 + zh: 5bbb564ecc8a9870 diff --git a/.agents/notes/implemented/bug-fix/2026-08-03-cli-signal-shutdown-escalation.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-03-cli-signal-shutdown-escalation.i18n.yaml index 07c0e1b202..23c1697c7e 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-03-cli-signal-shutdown-escalation.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-03-cli-signal-shutdown-escalation.i18n.yaml @@ -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-03-cli-signal-shutdown-escalation.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/bug-fix/2026-08-03-cli-signal-shutdown-escalation.md -2026-08-03-cli-signal-shutdown-escalation.md: 2f8bdce548318b2172e8e0a5807958e5f8189179 -2026-08-03-cli-signal-shutdown-escalation.zh.md: 8e3b90ff158b896f363165708e34d4a300cf4677 +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless: + en: d8f8ef8811dfe378 + zh: ca728da97cb35920 +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless/problem: + en: 1042d3e1c2cb1e45 + zh: d32f05dd83eee04b +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless/decision: + en: 5738aa92d9185c4f + zh: 1999e41d43063c12 +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless/alternatives-considered: + en: 53239a7e43d70aa1 + zh: d5ab1cc4c52513e6 +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless/consequences: + en: 888679c978b87125 + zh: c68d962f516f675e +/agent-note-bounded-escalating-signal-shutdown-for-web-and-headless/testing: + en: e2dd8e925ff94a13 + zh: b9430f38c27982ff diff --git a/.agents/notes/implemented/bug-fix/2026-08-06-bwrap-private-pid-namespace.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-06-bwrap-private-pid-namespace.i18n.yaml index ada86f1ca9..a261460c22 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-06-bwrap-private-pid-namespace.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-06-bwrap-private-pid-namespace.i18n.yaml @@ -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-06-bwrap-private-pid-namespace.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/bug-fix/2026-08-06-bwrap-private-pid-namespace.md -2026-08-06-bwrap-private-pid-namespace.md: c7c83fd274c5dcd6634bdb78a909f1366e1926ba -2026-08-06-bwrap-private-pid-namespace.zh.md: fa53d4eb66669236d3e4ed82b2a4df3adff6dfc5 +/agent-note-isolate-bwrap-from-the-host-pid-namespace: + en: 56e719d5aa015e57 + zh: 2568d89bb33ab663 +/agent-note-isolate-bwrap-from-the-host-pid-namespace/problem: + en: 2da6f0dd324f054d + zh: 4a414f04e638aa47 +/agent-note-isolate-bwrap-from-the-host-pid-namespace/decision: + en: d1000f28dd8cd2c6 + zh: 9b35f7085ae68b99 +/agent-note-isolate-bwrap-from-the-host-pid-namespace/alternatives-considered: + en: e794f6d8578bffef + zh: 61feee3ed99c615d +/agent-note-isolate-bwrap-from-the-host-pid-namespace/verification: + en: 7f9a12f088ce869f + zh: 8d1ea7519de1605d +/agent-note-isolate-bwrap-from-the-host-pid-namespace/consequences: + en: 4543b72f4d669fdf + zh: 7576f60bac467013 diff --git a/.agents/notes/implemented/bug-fix/2026-08-06-host-backed-web-preferences.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-06-host-backed-web-preferences.i18n.yaml index 67810e388a..82875f587c 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-06-host-backed-web-preferences.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-06-host-backed-web-preferences.i18n.yaml @@ -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-06-host-backed-web-preferences.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/bug-fix/2026-08-06-host-backed-web-preferences.md -2026-08-06-host-backed-web-preferences.md: 4b8d52887554899f2aee9253e65354e4c0fc7e46 -2026-08-06-host-backed-web-preferences.zh.md: 9c61de71981c9e4950889cf94eba2645b9247aa8 +/agent-note-persist-web-user-preferences-through-host-settings: + en: da28d8677a4d9f9c + zh: a5311ab734f576d3 +/agent-note-persist-web-user-preferences-through-host-settings/problem: + en: 18b583ecb58b9e06 + zh: 55570d758b75852a +/agent-note-persist-web-user-preferences-through-host-settings/decision: + en: 2846c0d0f8615da7 + zh: 511d61ea4ea6efa6 +/agent-note-persist-web-user-preferences-through-host-settings/alternatives-considered: + en: a91ebb47ec1ee356 + zh: d5ce0b7f48195093 +/agent-note-persist-web-user-preferences-through-host-settings/consequences: + en: 7defab72acfd5e78 + zh: 566cbbd3eb3cd9e3 diff --git a/.agents/notes/implemented/bug-fix/2026-08-07-cancel-convergence-wake-latch.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-07-cancel-convergence-wake-latch.i18n.yaml index ca1680270c..8f8930a2f0 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-07-cancel-convergence-wake-latch.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-07-cancel-convergence-wake-latch.i18n.yaml @@ -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-07-cancel-convergence-wake-latch.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/bug-fix/2026-08-07-cancel-convergence-wake-latch.md -2026-08-07-cancel-convergence-wake-latch.md: a6540a7b46b3e4af4058c7549ff056b92fcc708d -2026-08-07-cancel-convergence-wake-latch.zh.md: 2c4f368feaaca91386cac0a5a833ecd8e9f2e1e1 +/agent-note-latch-wake-ups-that-land-in-the-cancel-convergence-window: + en: 0b877f8208b50162 + zh: dd6b6af7d96a5f86 +/agent-note-latch-wake-ups-that-land-in-the-cancel-convergence-window/problem: + en: 4539f5fa2c7dc7e4 + zh: f7b6cbe04ca0ffc2 +/agent-note-latch-wake-ups-that-land-in-the-cancel-convergence-window/decision: + en: 23d5dbc6b75ca908 + zh: 116ae93f6a48e6ed +/agent-note-latch-wake-ups-that-land-in-the-cancel-convergence-window/alternatives-considered: + en: 6df22ff84b2dc081 + zh: 38d1559935b66fb9 +/agent-note-latch-wake-ups-that-land-in-the-cancel-convergence-window/consequences: + en: 7d72c68239cd7e31 + zh: 19045871dcceb4bf diff --git a/.agents/notes/implemented/bug-fix/2026-08-07-ptc-executor-collapse.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-07-ptc-executor-collapse.i18n.yaml index 528aa1f781..a3575ac176 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-07-ptc-executor-collapse.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-07-ptc-executor-collapse.i18n.yaml @@ -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-07-ptc-executor-collapse.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/bug-fix/2026-08-07-ptc-executor-collapse.md -2026-08-07-ptc-executor-collapse.md: e034d30ff54673ecef98faf5c632b92c2d39aa2f -2026-08-07-ptc-executor-collapse.zh.md: 03f93a323533b8507043c2fa8653b4c51c5fd56e +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire: + en: 7958ca7ba1201af2 + zh: bc7f74c91444eed6 +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/problem: + en: a6fcd5114ffde259 + zh: 05940375a30756d0 +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/decision: + en: 66f55639766a6d02 + zh: a8819b045463a927 +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/alternatives-considered: + en: 6119e2aff3b6be5a + zh: e01a6c669a9ec6aa +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/alternatives-considered/filter-get-the-registry-view-by-mode: + en: 31b6fed689eea5db + zh: ace070ad616bca62 +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/alternatives-considered/filter-at-the-agent-loop-entry: + en: 9dbdb9939baccd49 + zh: 11437030cd211000 +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/alternatives-considered/reject-via-a-shipped-guard: + en: 9011947651f58129 + zh: 1d4a0c622680f13f +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/alternatives-considered/keep-schema-omission-only-status-quo: + en: 0d4759646b19917a + zh: 1a1bef7617c52f9c +/agent-note-ptc-mode-collapses-the-executor-not-just-the-wire/consequences: + en: 9120e68ba25bd30a + zh: 6ec4bea5df8668a1 diff --git a/.agents/notes/implemented/bug-fix/2026-08-10-child-agents-join-their-parent-preset.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-10-child-agents-join-their-parent-preset.i18n.yaml index 027bf3babb..e86b334e45 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-10-child-agents-join-their-parent-preset.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-10-child-agents-join-their-parent-preset.i18n.yaml @@ -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-child-agents-join-their-parent-preset.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/bug-fix/2026-08-10-child-agents-join-their-parent-preset.md -2026-08-10-child-agents-join-their-parent-preset.md: 7de247a7a3f75f467ebf5c8387eb8fb8e2f7e009 -2026-08-10-child-agents-join-their-parent-preset.zh.md: c9d392cd75ee9c06005aa53f4f68a8153fc7633b +/agent-note-child-agents-join-their-parent-s-preset-composition: + en: ad623e2fef93c033 + zh: a37abf059f39aefa +/agent-note-child-agents-join-their-parent-s-preset-composition/problem: + en: 0b8d70c073523bc1 + zh: 6bba76a467508149 +/agent-note-child-agents-join-their-parent-s-preset-composition/decision: + en: 13a3452527f35bc6 + zh: 6c319f554184e578 +/agent-note-child-agents-join-their-parent-s-preset-composition/alternatives-considered: + en: 88a48e6bba3d30e2 + zh: 842d835a7a9db434 +/agent-note-child-agents-join-their-parent-s-preset-composition/testing: + en: 458a2aa1ae046253 + zh: 59fad52e881989ed +/agent-note-child-agents-join-their-parent-s-preset-composition/consequences: + en: 09fd94b5ceaa95e6 + zh: bf8e4e22f5b70b45 diff --git a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.i18n.yaml index 5c76962fef..63f61fbc54 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.i18n.yaml @@ -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-17-durable-web-queue-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/bug-fix/2026-08-17-durable-web-queue-recovery.md -2026-08-17-durable-web-queue-recovery.md: 0f18cd7a2b9491d6a8bdfa960409d97a5338f95d -2026-08-17-durable-web-queue-recovery.zh.md: 476c1b2fe88156ba8c34e281ff1d1e5663c7913c +/agent-note-recover-the-web-queue-from-durable-inbox-state: + en: df261933e13adb0a + zh: 369772acd6fe0e48 +/agent-note-recover-the-web-queue-from-durable-inbox-state/problem: + en: 79fe907a6201ed27 + zh: 55d0de6b6518f946 +/agent-note-recover-the-web-queue-from-durable-inbox-state/decision: + en: 2e64d021a2009eec + zh: b3f7d5ba2a6f6322 +/agent-note-recover-the-web-queue-from-durable-inbox-state/verification: + en: bab880ec7de69673 + zh: 769f2641856fde60 +/agent-note-recover-the-web-queue-from-durable-inbox-state/alternatives-considered: + en: df29962ab5d779ee + zh: 2593f0973b725d54 +/agent-note-recover-the-web-queue-from-durable-inbox-state/consequences: + en: ffa16214aa1f0efd + zh: 7915524221acac0c diff --git a/.agents/notes/implemented/bug-fix/2026-08-17-subagent-message-settlement-ordering.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-17-subagent-message-settlement-ordering.i18n.yaml index 3ef4fd1d6c..fcd7dd96b2 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-17-subagent-message-settlement-ordering.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-17-subagent-message-settlement-ordering.i18n.yaml @@ -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-17-subagent-message-settlement-ordering.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/bug-fix/2026-08-17-subagent-message-settlement-ordering.md -2026-08-17-subagent-message-settlement-ordering.md: b383dc290949a3a22ed48e1e639b145e39dbb211 -2026-08-17-subagent-message-settlement-ordering.zh.md: 330c19b20b966d9f719fb61ee1bf5272e0cc8287 +/agent-note-child-agent-messages-precede-their-settlement-notices: + en: b46c628c107fbdfe + zh: 829b71dae5e73e0f +/agent-note-child-agent-messages-precede-their-settlement-notices/problem: + en: 82e6c4d5db64a818 + zh: 3610573f1521409e +/agent-note-child-agent-messages-precede-their-settlement-notices/decision: + en: 94a44265545ff53e + zh: 06db7c1bacb6b120 +/agent-note-child-agent-messages-precede-their-settlement-notices/decision/ordering-across-parent-states: + en: 2bceedd85283e6ed + zh: 6c11a3519fe9b941 +/agent-note-child-agent-messages-precede-their-settlement-notices/decision/verification: + en: b2d6b562739ea61c + zh: 33f56b3220b00953 +/agent-note-child-agent-messages-precede-their-settlement-notices/alternatives-considered: + en: a81f4efd6c32125e + zh: d38898c6b3352ad8 +/agent-note-child-agent-messages-precede-their-settlement-notices/consequences: + en: 3b8532d48efb656a + zh: 971bced6f6bed59d diff --git a/.agents/notes/implemented/bug-fix/2026-08-24-alpha-routed-image-quality-ladders.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-24-alpha-routed-image-quality-ladders.i18n.yaml index e2e60901af..d82479170d 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-24-alpha-routed-image-quality-ladders.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-24-alpha-routed-image-quality-ladders.i18n.yaml @@ -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-24-alpha-routed-image-quality-ladders.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/bug-fix/2026-08-24-alpha-routed-image-quality-ladders.md -2026-08-24-alpha-routed-image-quality-ladders.md: cdf5e7bd908782781e66a4f6494428f0f174e258 -2026-08-24-alpha-routed-image-quality-ladders.zh.md: fbe8215b0ca1c606cd66d60fe1109d2f9aa1cbad +/agent-note-alpha-routed-image-quality-ladders-replace-colour-count-codec-routing: + en: b2c958d45911a787 + zh: b826c61174b3640f +/agent-note-alpha-routed-image-quality-ladders-replace-colour-count-codec-routing/problem: + en: bcb73f4711d40348 + zh: 6e26853ea4728e4d +/agent-note-alpha-routed-image-quality-ladders-replace-colour-count-codec-routing/decision: + en: aabf20046a7a15e9 + zh: dba0c5261a3af1e5 +/agent-note-alpha-routed-image-quality-ladders-replace-colour-count-codec-routing/alternatives-considered: + en: 95a42e3e2313790b + zh: 116043c295d7aa12 +/agent-note-alpha-routed-image-quality-ladders-replace-colour-count-codec-routing/consequences: + en: 3ce6acd960671b52 + zh: 1ec81d76130d338d diff --git a/.agents/notes/implemented/bug-fix/2026-08-31-win32-picker-path-string-read.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-08-31-win32-picker-path-string-read.i18n.yaml index 989c66f145..3ffc1ac876 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-31-win32-picker-path-string-read.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-08-31-win32-picker-path-string-read.i18n.yaml @@ -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-win32-picker-path-string-read.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/bug-fix/2026-08-31-win32-picker-path-string-read.md -2026-08-31-win32-picker-path-string-read.md: 63b2a2ea5ee88b5fa3ac79aca98350f58067fd1e -2026-08-31-win32-picker-path-string-read.zh.md: 8afc6610a0cf1c7c8649f9e1c62c26b3d89f5a03 +/agent-note-read-the-win32-picker-path-without-a-fixed-size-unmanaged-view: + en: abd03a3bff03600e + zh: 8a4a21ecc7cae78b +/agent-note-read-the-win32-picker-path-without-a-fixed-size-unmanaged-view/problem: + en: 1835aa6f42229a1f + zh: 928cb408e879fc41 +/agent-note-read-the-win32-picker-path-without-a-fixed-size-unmanaged-view/decision: + en: 831ea941c84193ef + zh: b7a1842d9843bf0d +/agent-note-read-the-win32-picker-path-without-a-fixed-size-unmanaged-view/alternatives-considered: + en: 8c0a9a1620504f50 + zh: 7f439ecb6ca5a618 +/agent-note-read-the-win32-picker-path-without-a-fixed-size-unmanaged-view/consequences: + en: 616bc4293a0b1856 + zh: ed8cf574d7a126cc diff --git a/.agents/notes/implemented/bug-fix/2026-09-03-normalized-unread-fs-tool-diagnostic.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-03-normalized-unread-fs-tool-diagnostic.i18n.yaml index 573390ed70..40c0a993a5 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-03-normalized-unread-fs-tool-diagnostic.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-03-normalized-unread-fs-tool-diagnostic.i18n.yaml @@ -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-09-03-normalized-unread-fs-tool-diagnostic.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/bug-fix/2026-09-03-normalized-unread-fs-tool-diagnostic.md -2026-09-03-normalized-unread-fs-tool-diagnostic.md: 01287a080641e1272f9759532ae7333866c6352e -2026-09-03-normalized-unread-fs-tool-diagnostic.zh.md: 5aba96ce761376e8609267f251433fee11c9f114 +/agent-note-normalized-unread-filesystem-tool-diagnostic: + en: 103e786a598d2ee3 + zh: 13d637140685f63a +/agent-note-normalized-unread-filesystem-tool-diagnostic/problem: + en: 89cfcff2f9895623 + zh: dd1cd21d431e5161 +/agent-note-normalized-unread-filesystem-tool-diagnostic/decision: + en: 0c59c5193131ca44 + zh: da48f204aef62c99 +/agent-note-normalized-unread-filesystem-tool-diagnostic/alternatives-considered: + en: dbb9cbdafd0f2764 + zh: ed8bef943f12b21d +/agent-note-normalized-unread-filesystem-tool-diagnostic/consequences: + en: 20abbdbfa3aa4edc + zh: d0555aac68cb7a1f diff --git a/.agents/notes/implemented/bug-fix/2026-09-03-root-marker-metadata-failures.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-03-root-marker-metadata-failures.i18n.yaml index 3c4cb67d7d..9789836b6d 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-03-root-marker-metadata-failures.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-03-root-marker-metadata-failures.i18n.yaml @@ -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-09-03-root-marker-metadata-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/bug-fix/2026-09-03-root-marker-metadata-failures.md -2026-09-03-root-marker-metadata-failures.md: e31ef646d7190a1239684f7b66a118deb9ae1087 -2026-09-03-root-marker-metadata-failures.zh.md: 4b62f4e01ba56074a10dbcb3ae37c4478fe82379 +/agent-note-root-marker-metadata-failures: + en: c351be96177b2ea5 + zh: a094d77aaffd1fbe +/agent-note-root-marker-metadata-failures/problem: + en: 3d88594600ede55b + zh: fd9e36f5b72d8aee +/agent-note-root-marker-metadata-failures/decision: + en: 8131fbf06980774f + zh: 21a3c48edbe9ab99 +/agent-note-root-marker-metadata-failures/alternatives-considered: + en: 2070e244fd8ffc91 + zh: 31324cd0d5ace0a9 +/agent-note-root-marker-metadata-failures/consequences: + en: a459fc1a7a8353a3 + zh: 144b373b0988b633 +/agent-note-root-marker-metadata-failures/verification: + en: 4c912e5effdaedb7 + zh: 1b28ba3dea9170dd diff --git a/.agents/notes/implemented/bug-fix/2026-09-03-user-owned-goal-pause-activation.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-03-user-owned-goal-pause-activation.i18n.yaml index f4d9692b37..c75a62877c 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-03-user-owned-goal-pause-activation.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-03-user-owned-goal-pause-activation.i18n.yaml @@ -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-09-03-user-owned-goal-pause-activation.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/bug-fix/2026-09-03-user-owned-goal-pause-activation.md -2026-09-03-user-owned-goal-pause-activation.md: d58566938ef87ca2f25fd94d726dc28209f61b2b -2026-09-03-user-owned-goal-pause-activation.zh.md: 675d61009f0a7d0f98c8f6d7568466d6651f2a42 +/agent-note-user-owned-goal-pause-exposes-live-activation: + en: 07749eb6ac180964 + zh: b9c1165739fc45bf +/agent-note-user-owned-goal-pause-exposes-live-activation/problem: + en: 9f044f22e6782773 + zh: 6c17c53aa75280fd +/agent-note-user-owned-goal-pause-exposes-live-activation/decision: + en: 2cc4ab097350a88f + zh: db10825a6285f3c5 +/agent-note-user-owned-goal-pause-exposes-live-activation/alternatives-considered: + en: 640afdb17164b06b + zh: 92d33c139c40b2a1 +/agent-note-user-owned-goal-pause-exposes-live-activation/consequences: + en: d73e412f853612ee + zh: 96630d28e3c431e1 +/agent-note-user-owned-goal-pause-exposes-live-activation/testing: + en: 9d103a90036f5d06 + zh: df5440c8a4640e93 diff --git a/.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.i18n.yaml index 0dfc11edca..4248c352c7 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.i18n.yaml @@ -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-09-04-busy-send-button-follows-enter-setting.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/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.md -2026-09-04-busy-send-button-follows-enter-setting.md: 2db0848e3ce3b7a1b6b07ff6d6d23c06b23be5ef -2026-09-04-busy-send-button-follows-enter-setting.zh.md: 7062f60320c4bc56f15f57388e79df9ce0e45c2f +/agent-note-the-busy-send-button-follows-the-enter-setting: + en: d0e9f804958ee8ce + zh: e5cd102fbdd12ff1 +/agent-note-the-busy-send-button-follows-the-enter-setting/problem: + en: c378dfa9efcc0758 + zh: 785c3b9ee99c66a4 +/agent-note-the-busy-send-button-follows-the-enter-setting/decision: + en: 101e21100f8afd7d + zh: 76979af8aee15976 +/agent-note-the-busy-send-button-follows-the-enter-setting/verification: + en: eb886930b09445bd + zh: 1e671f8f81868490 +/agent-note-the-busy-send-button-follows-the-enter-setting/alternatives-considered: + en: d47aa278a2103890 + zh: 313f75c7fb8ccd5c +/agent-note-the-busy-send-button-follows-the-enter-setting/consequences: + en: a067e427615a682a + zh: d72074056e1def4a diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-continuous-client-recovery.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-continuous-client-recovery.i18n.yaml index a2bba51f16..f08907aa62 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-continuous-client-recovery.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-continuous-client-recovery.i18n.yaml @@ -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-09-05-continuous-client-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/bug-fix/2026-09-05-continuous-client-recovery.md -2026-09-05-continuous-client-recovery.md: 2eacaca4f8d4b76ab8d82bb10bb8cfa4c80cbd65 -2026-09-05-continuous-client-recovery.zh.md: 96908b1217ca1caa17514e16522080fa342e6813 +/agent-note-continuous-client-connection-recovery: + en: f0fee6b344250d4c + zh: 713ea72ca8d6565a +/agent-note-continuous-client-connection-recovery/problem: + en: 70259bdedbf6b449 + zh: b0a3014c27483a09 +/agent-note-continuous-client-connection-recovery/decision: + en: db9ac3c08a3eaf0b + zh: 68c9ce30d8d5c7e2 +/agent-note-continuous-client-connection-recovery/alternatives-considered: + en: 2e94feca66d912af + zh: 8fc4e81b797d4553 +/agent-note-continuous-client-connection-recovery/consequences: + en: cd99c771043a23d5 + zh: 8559757fa8098fbe +/agent-note-continuous-client-connection-recovery/testing: + en: 39fdcfb5c6b52a96 + zh: 276de310ed1bbc39 diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-nested-terminal-cards.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-nested-terminal-cards.i18n.yaml index d62438d1f3..e0fdd0b674 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-nested-terminal-cards.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-nested-terminal-cards.i18n.yaml @@ -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-09-05-nested-terminal-cards.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/bug-fix/2026-09-05-nested-terminal-cards.md -2026-09-05-nested-terminal-cards.md: c5946a332f2879588cb6ee334404fdaa92a8cb28 -2026-09-05-nested-terminal-cards.zh.md: 74056014ce5b9ac38574c5551420a4e25808b9b4 +/agent-note-nested-terminal-cards: + en: acc1dadeee5e1aeb + zh: a589c28cf1aff307 +/agent-note-nested-terminal-cards/problem: + en: 1bd9adbd90b66871 + zh: 0a87672dffc07bae +/agent-note-nested-terminal-cards/decision: + en: 075b10a41974411e + zh: cc3341afff14f61b +/agent-note-nested-terminal-cards/alternatives-considered: + en: c585eb14efb10514 + zh: c5a1cc87fc4edacc +/agent-note-nested-terminal-cards/consequences: + en: a7abcb5b95a020cc + zh: 27fe3216944de8c3 +/agent-note-nested-terminal-cards/verification: + en: 0133972e958fccce + zh: 52d4d3e29b7346e0 diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-patch-plugin-file-urls.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-patch-plugin-file-urls.i18n.yaml index 2653e7d928..3bcf021adf 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-patch-plugin-file-urls.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-patch-plugin-file-urls.i18n.yaml @@ -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-09-05-patch-plugin-file-urls.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/bug-fix/2026-09-05-patch-plugin-file-urls.md -2026-09-05-patch-plugin-file-urls.md: bad63355ce74b520b5e49b94deeefb2d648b71f4 -2026-09-05-patch-plugin-file-urls.zh.md: 775a576324dd2856f490cf3ce3ba907965737fc2 +/agent-note-file-urls-for-inserted-patch-plugins: + en: 0da1360de4441566 + zh: aa617df23150096d +/agent-note-file-urls-for-inserted-patch-plugins/problem: + en: 68de71db96c5e4b5 + zh: c88db125cddb54a4 +/agent-note-file-urls-for-inserted-patch-plugins/decision: + en: 09bb824857b8fb60 + zh: 859da30ff296688c +/agent-note-file-urls-for-inserted-patch-plugins/alternatives-considered: + en: e53a86bc1c71a6ff + zh: 514b48c8734fca17 +/agent-note-file-urls-for-inserted-patch-plugins/consequences: + en: 9b9628919e52c617 + zh: 195935e5d905d81d diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-pi-ai-upgrade-compatibility.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-pi-ai-upgrade-compatibility.i18n.yaml index e188205736..88960b1f51 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-pi-ai-upgrade-compatibility.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-pi-ai-upgrade-compatibility.i18n.yaml @@ -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-09-05-pi-ai-upgrade-compatibility.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/bug-fix/2026-09-05-pi-ai-upgrade-compatibility.md -2026-09-05-pi-ai-upgrade-compatibility.md: e28d911facae33fcf278a6824376f889e3416d77 -2026-09-05-pi-ai-upgrade-compatibility.zh.md: 408669ddc963a505254529acaab4c19e9774c6b1 +/agent-note-pi-ai-upgrade-compatibility: + en: faa0207498bd36c7 + zh: 2c6c209849dcce32 +/agent-note-pi-ai-upgrade-compatibility/problem: + en: 0a106a9d74115ce5 + zh: a65945e32455944e +/agent-note-pi-ai-upgrade-compatibility/decision: + en: 978b93bba58cfaf9 + zh: 847360ba75d67abc +/agent-note-pi-ai-upgrade-compatibility/alternatives-considered: + en: bcfd595bb17c3cd6 + zh: b7d4346e9c50f95d +/agent-note-pi-ai-upgrade-compatibility/consequences: + en: 0b634c9d7567aa57 + zh: c8ae82694e5fae12 diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-model-budget.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-model-budget.i18n.yaml index 623fcdf1b1..57f613df55 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-model-budget.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-model-budget.i18n.yaml @@ -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-09-05-session-reference-model-budget.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/bug-fix/2026-09-05-session-reference-model-budget.md -2026-09-05-session-reference-model-budget.md: 0654f2b89187727668fddb97ab6e982bacd82dc1 -2026-09-05-session-reference-model-budget.zh.md: 84f4fee76c7fb54f3ec37f0ae3417cc56d772af7 +/agent-note-model-relative-session-reference-budgets: + en: 6d4d5e9c678c93cb + zh: 7023bca0480a27df +/agent-note-model-relative-session-reference-budgets/problem: + en: 2bc7bc4083a96c5d + zh: d0d290871def4abf +/agent-note-model-relative-session-reference-budgets/decision: + en: e686c4ed659fc44c + zh: 41484c0431a53177 +/agent-note-model-relative-session-reference-budgets/alternatives-considered: + en: 77148c41d109895a + zh: dba534347f0e0877 +/agent-note-model-relative-session-reference-budgets/consequences: + en: 6ee6a4b3229ff378 + zh: 9e30e71ac15da8c4 diff --git a/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-spill-reuse.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-spill-reuse.i18n.yaml index 577e94fdc8..05f653cf57 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-spill-reuse.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-05-session-reference-spill-reuse.i18n.yaml @@ -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-09-05-session-reference-spill-reuse.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/bug-fix/2026-09-05-session-reference-spill-reuse.md -2026-09-05-session-reference-spill-reuse.md: 2a24e3adf28c70df8feb726700376df6f06dee87 -2026-09-05-session-reference-spill-reuse.zh.md: 346ed1a39ee65a560cf9e74e519ae45c2ce133e1 +/agent-note-reuse-spill-storage-for-truncated-session-references: + en: 9691f4ba51c41f8b + zh: 5c1719f1ef901639 +/agent-note-reuse-spill-storage-for-truncated-session-references/problem: + en: 50a1ef10604acb5f + zh: 128abfd3e43740dc +/agent-note-reuse-spill-storage-for-truncated-session-references/decision: + en: 058598a9e6c65fcf + zh: 7760170bbc53396d +/agent-note-reuse-spill-storage-for-truncated-session-references/alternatives-considered: + en: fccf1c25876b92a0 + zh: 7d5c7c3d240132c3 +/agent-note-reuse-spill-storage-for-truncated-session-references/consequences: + en: 2bff957549afe59b + zh: 30c6be54168fe183 +/agent-note-reuse-spill-storage-for-truncated-session-references/verification: + en: e015a599fc71a65f + zh: 0812b5b9a64a8673 +/agent-note-reuse-spill-storage-for-truncated-session-references/related-decisions: + en: 7a53914026e82df7 + zh: 3c802bbf63117485 diff --git a/.agents/notes/implemented/bug-fix/2026-09-06-environment-prompt-suffix.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-06-environment-prompt-suffix.i18n.yaml index 69715a797c..1e5d9065c2 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-06-environment-prompt-suffix.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-06-environment-prompt-suffix.i18n.yaml @@ -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-09-06-environment-prompt-suffix.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/bug-fix/2026-09-06-environment-prompt-suffix.md -2026-09-06-environment-prompt-suffix.md: 3438df0fec7b3296084c94b7db68d2800c6d6c98 -2026-09-06-environment-prompt-suffix.zh.md: 102d1196639ac7d7a754a24fc5a93bc93c1d05ba +/agent-note-environment-facts-follow-reusable-prompt-instructions: + en: 8677e5d20233627f + zh: 684772490164fbdf +/agent-note-environment-facts-follow-reusable-prompt-instructions/problem: + en: 7b20207cd4dc1583 + zh: ca5014aa437a5239 +/agent-note-environment-facts-follow-reusable-prompt-instructions/decision: + en: 0f28a61d659c0f4d + zh: d2ef431d15a54d57 +/agent-note-environment-facts-follow-reusable-prompt-instructions/alternatives-considered: + en: 9fb4ff8a8786ce2d + zh: 25820720365b489f +/agent-note-environment-facts-follow-reusable-prompt-instructions/consequences: + en: 212b29160c254854 + zh: e6a1ea253e8f7780 +/agent-note-environment-facts-follow-reusable-prompt-instructions/testing: + en: d5132186efc6afcd + zh: e5cc036c7c8ed68e diff --git a/.agents/notes/implemented/bug-fix/2026-09-06-windows-python-console-spawn-wait.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-06-windows-python-console-spawn-wait.i18n.yaml index 65ea0bac5e..be90b83299 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-06-windows-python-console-spawn-wait.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-06-windows-python-console-spawn-wait.i18n.yaml @@ -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-09-06-windows-python-console-spawn-wait.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/bug-fix/2026-09-06-windows-python-console-spawn-wait.md -2026-09-06-windows-python-console-spawn-wait.md: 036062bdf459e4cbb69a6c31d3160c78ec1fad4c -2026-09-06-windows-python-console-spawn-wait.zh.md: d0870be84066b885e1622438a9fbc277f56a6bcf +/agent-note-wait-for-the-windows-python-console-runtime: + en: 97ffbd17152279cc + zh: 9a223670f273471b +/agent-note-wait-for-the-windows-python-console-runtime/problem: + en: 26ea75714d6fbbea + zh: 49441436e362a868 +/agent-note-wait-for-the-windows-python-console-runtime/decision: + en: 6ef15038eb5e0786 + zh: 92e319fbb8133d52 +/agent-note-wait-for-the-windows-python-console-runtime/alternatives-considered: + en: 2cc100a4b8724d40 + zh: 6ba47c76f304a460 +/agent-note-wait-for-the-windows-python-console-runtime/consequences: + en: ec5c2a7082012ed5 + zh: 32027ea20bd32acf diff --git a/.agents/notes/implemented/bug-fix/2026-09-07-pi-ai-settings-catalog-recovery.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-07-pi-ai-settings-catalog-recovery.i18n.yaml index 43f6f3b14c..130a3812c0 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-07-pi-ai-settings-catalog-recovery.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-07-pi-ai-settings-catalog-recovery.i18n.yaml @@ -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-09-07-pi-ai-settings-catalog-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/bug-fix/2026-09-07-pi-ai-settings-catalog-recovery.md -2026-09-07-pi-ai-settings-catalog-recovery.md: 21fe532a491775ff875f6b9bcb000d917a95e13c -2026-09-07-pi-ai-settings-catalog-recovery.zh.md: 80bd0758e13b767671f4cec52ee3832c9250651f +/agent-note-repairable-pi-ai-settings-after-catalog-changes: + en: 69bf6edd0515636c + zh: cb5039a98dc8b736 +/agent-note-repairable-pi-ai-settings-after-catalog-changes/problem: + en: acc6a5afd829fde0 + zh: a2173b59b670efe2 +/agent-note-repairable-pi-ai-settings-after-catalog-changes/decision: + en: 37034d76d7542f46 + zh: a6423ba488fe272c +/agent-note-repairable-pi-ai-settings-after-catalog-changes/alternatives-considered: + en: 1dcabe193953fa1b + zh: 02263349cdbdc843 +/agent-note-repairable-pi-ai-settings-after-catalog-changes/consequences: + en: d2f89ce8cec55c6e + zh: 20fab7854366ae05 +/agent-note-repairable-pi-ai-settings-after-catalog-changes/testing: + en: 30c8172b88231251 + zh: 54aee9d1dffa8566 diff --git a/.agents/notes/implemented/bug-fix/2026-09-07-typert-package-local-forwarding-imports.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-07-typert-package-local-forwarding-imports.i18n.yaml index 71b7d891d1..53a10eeede 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-07-typert-package-local-forwarding-imports.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-07-typert-package-local-forwarding-imports.i18n.yaml @@ -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-09-07-typert-package-local-forwarding-imports.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/bug-fix/2026-09-07-typert-package-local-forwarding-imports.md -2026-09-07-typert-package-local-forwarding-imports.md: 33e4334edef732b9c498ad2397151bd9c2c16f1f -2026-09-07-typert-package-local-forwarding-imports.zh.md: ea4babdb4b58981fb16f499c7986279fa18dbc58 +/agent-note-follow-package-local-forwarding-modules-in-typert-references: + en: ebacf2fc1c764589 + zh: c14b1752a01b2775 +/agent-note-follow-package-local-forwarding-modules-in-typert-references/problem: + en: 0ed0703cdd876132 + zh: ab759d1a2137bdd8 +/agent-note-follow-package-local-forwarding-modules-in-typert-references/decision: + en: e828847b069ef3f8 + zh: 95e9425c02dd8215 +/agent-note-follow-package-local-forwarding-modules-in-typert-references/alternatives-considered: + en: 49a0984c31c2b993 + zh: fb6d093474130a75 +/agent-note-follow-package-local-forwarding-modules-in-typert-references/consequences: + en: 7e196e1cffcb31e1 + zh: 7d096507578c1731 diff --git a/.agents/notes/implemented/bug-fix/2026-09-07-win32-picker-foreground-alt-key.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-07-win32-picker-foreground-alt-key.i18n.yaml index 0a54d83ab9..6088c5898e 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-07-win32-picker-foreground-alt-key.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-07-win32-picker-foreground-alt-key.i18n.yaml @@ -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-09-07-win32-picker-foreground-alt-key.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/bug-fix/2026-09-07-win32-picker-foreground-alt-key.md -2026-09-07-win32-picker-foreground-alt-key.md: cd1bae56845c74bf8fb0b3c0e6b8e6bab8032daf -2026-09-07-win32-picker-foreground-alt-key.zh.md: 8cbacaee97892b2ba6feb3d0250212fa9d393376 +/agent-note-foreground-activation-for-the-win32-picker-via-a-synthesized-alt-press: + en: bbd08341a635d6a8 + zh: 94d4ea2412237630 +/agent-note-foreground-activation-for-the-win32-picker-via-a-synthesized-alt-press/problem: + en: b21a34182868057e + zh: 54cb143a2a11479b +/agent-note-foreground-activation-for-the-win32-picker-via-a-synthesized-alt-press/decision: + en: d4cff7cc9b5c9379 + zh: a8f3e238799a18ce +/agent-note-foreground-activation-for-the-win32-picker-via-a-synthesized-alt-press/alternatives-considered: + en: dd3491b3b760f330 + zh: 81ca7b6603379713 +/agent-note-foreground-activation-for-the-win32-picker-via-a-synthesized-alt-press/consequences: + en: 6e7c7c46cc48a95d + zh: bbed46fb61e53700 diff --git a/.agents/notes/implemented/bug-fix/2026-09-10-built-bundle-css-exemption.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-10-built-bundle-css-exemption.i18n.yaml index 4f985d74f7..7fc8e02b71 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-10-built-bundle-css-exemption.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-10-built-bundle-css-exemption.i18n.yaml @@ -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-09-10-built-bundle-css-exemption.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/bug-fix/2026-09-10-built-bundle-css-exemption.md -2026-09-10-built-bundle-css-exemption.md: e5a55689696f885b8ea9411a5b3a7598295fff35 -2026-09-10-built-bundle-css-exemption.zh.md: 1c1aab35df72497946b02bf2a7f67a2271c804e5 +/agent-note-built-bundle-exemption-for-a-failing-stylesheet: + en: 7eea80c07cea261d + zh: 936523023c0b527d +/agent-note-built-bundle-exemption-for-a-failing-stylesheet/problem: + en: ca5c97dd0ad51b66 + zh: 8491ee495b0c625e +/agent-note-built-bundle-exemption-for-a-failing-stylesheet/decision: + en: cd272aa1bfd34a14 + zh: d184be63053f73b8 +/agent-note-built-bundle-exemption-for-a-failing-stylesheet/alternatives-considered: + en: 7f0eb995b7f00d73 + zh: aaf7b18f7bb2c20d +/agent-note-built-bundle-exemption-for-a-failing-stylesheet/consequences: + en: 767857f0bbd93ca8 + zh: f49bf34e304a7dee diff --git a/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-image-token-calculator-v41.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-image-token-calculator-v41.i18n.yaml index 2ff4007876..f98968b567 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-image-token-calculator-v41.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-image-token-calculator-v41.i18n.yaml @@ -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-09-10-deepseek-image-token-calculator-v41.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/bug-fix/2026-09-10-deepseek-image-token-calculator-v41.md -2026-09-10-deepseek-image-token-calculator-v41.md: 668738221ebe3e634be7e4fe9d07c9627e0ceb4a -2026-09-10-deepseek-image-token-calculator-v41.zh.md: a483282c6da667c2b8e32accb091e065419d44fc +/agent-note-deepseek-image-token-estimator-on-the-v41-calculator: + en: 3e0b96f522d5e2c9 + zh: a05009e8f9cbe5d4 +/agent-note-deepseek-image-token-estimator-on-the-v41-calculator/problem: + en: c47a183a3192d1ae + zh: bbc157ff44423dd3 +/agent-note-deepseek-image-token-estimator-on-the-v41-calculator/decision: + en: 17f8c045d3222266 + zh: aead3e0de01980d9 +/agent-note-deepseek-image-token-estimator-on-the-v41-calculator/alternatives-considered: + en: 8f5bb52220ead193 + zh: f267fda075b19963 +/agent-note-deepseek-image-token-estimator-on-the-v41-calculator/consequences: + en: 0a41bb795e221c3f + zh: b4840b79c78691cf diff --git a/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-v41-request-image-projection.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-v41-request-image-projection.i18n.yaml index ece05b1229..eb27fa1ee7 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-v41-request-image-projection.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-10-deepseek-v41-request-image-projection.i18n.yaml @@ -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-09-10-deepseek-v41-request-image-projection.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/bug-fix/2026-09-10-deepseek-v41-request-image-projection.md -2026-09-10-deepseek-v41-request-image-projection.md: 2bf7ac3f7f09ff7aea1067030f4474306d3f9a8e -2026-09-10-deepseek-v41-request-image-projection.zh.md: 4f0a8cfd3a71d54a54bf74d6819235ed7d0749f8 +/agent-note-deepseek-request-images-on-the-published-token-grid: + en: 67401dae42c79c06 + zh: 19ab8d82fec9ec25 +/agent-note-deepseek-request-images-on-the-published-token-grid/problem: + en: 3c86cfcbd6895dc5 + zh: 68cb8bd4c1ef2d24 +/agent-note-deepseek-request-images-on-the-published-token-grid/decision: + en: 0c1257b4fd77d7ad + zh: b1134f24c8f58ded +/agent-note-deepseek-request-images-on-the-published-token-grid/alternatives-considered: + en: c5d3470b62129fde + zh: 26c9abf1e4a4f49f +/agent-note-deepseek-request-images-on-the-published-token-grid/consequences: + en: 95bc8d0d09928dee + zh: 090292fa154e854f diff --git a/.agents/notes/implemented/bug-fix/2026-09-11-incremental-terminal-retention.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-11-incremental-terminal-retention.i18n.yaml index 29767853c0..aa5f93f3c7 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-11-incremental-terminal-retention.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-11-incremental-terminal-retention.i18n.yaml @@ -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-09-11-incremental-terminal-retention.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/bug-fix/2026-09-11-incremental-terminal-retention.md -2026-09-11-incremental-terminal-retention.md: 7e2507775bc39ed2599c2af1173f949bbf352145 -2026-09-11-incremental-terminal-retention.zh.md: 6c6fb95fa0c593ae2b7abb0007d5e7c6fc9f4e7d +/agent-note-incremental-terminal-retention: + en: b00300b3ace789da + zh: c267be719b3c8814 +/agent-note-incremental-terminal-retention/problem: + en: 0c3232a4a2429315 + zh: c6b3c6224bc9031d +/agent-note-incremental-terminal-retention/decision: + en: 43bb3c2d0d561231 + zh: 8dacb0720f28d490 +/agent-note-incremental-terminal-retention/measurement-design: + en: 925815f8ae326179 + zh: 188ee3f695ece8de +/agent-note-incremental-terminal-retention/measurement-design/local-reference-measurements: + en: a049c0a118648de7 + zh: 2c31044ff11b9029 +/agent-note-incremental-terminal-retention/alternatives-considered: + en: 0af1fcbc28320b5b + zh: 8e1cfc843821dd77 +/agent-note-incremental-terminal-retention/consequences: + en: c60008ba652dffd2 + zh: 3210329182096f39 diff --git a/.agents/notes/implemented/bug-fix/2026-09-12-linux-scope-direct-kill-settlement.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-12-linux-scope-direct-kill-settlement.i18n.yaml index d3c3388a18..192ea7ceec 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-12-linux-scope-direct-kill-settlement.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-12-linux-scope-direct-kill-settlement.i18n.yaml @@ -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-09-12-linux-scope-direct-kill-settlement.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/bug-fix/2026-09-12-linux-scope-direct-kill-settlement.md -2026-09-12-linux-scope-direct-kill-settlement.md: e89d8f801d6f7fb1309f50e0bc3dbad69aa797d0 -2026-09-12-linux-scope-direct-kill-settlement.zh.md: 7ab43107491ec24d5e39a62c401d245b61bb744d +/agent-note-join-direct-termination-before-rejecting-linux-scope-cleanup: + en: 6a72b66b6d0cf21b + zh: be432bfebb8e9919 +/agent-note-join-direct-termination-before-rejecting-linux-scope-cleanup/problem: + en: be042a28c1154171 + zh: 7b8356c9dcb159be +/agent-note-join-direct-termination-before-rejecting-linux-scope-cleanup/decision: + en: 75b071e48715ff29 + zh: 3f1d710f54ed3b1b +/agent-note-join-direct-termination-before-rejecting-linux-scope-cleanup/alternatives-considered: + en: ea3f33dd6c9bab88 + zh: 6f274fcd86b231a7 +/agent-note-join-direct-termination-before-rejecting-linux-scope-cleanup/consequences: + en: 4f7e7535b49b22fe + zh: 10447b3c42a341a2 diff --git a/.agents/notes/implemented/bug-fix/2026-09-13-partitioned-coverage-location-canonicalization.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-13-partitioned-coverage-location-canonicalization.i18n.yaml index 2f76639c0d..baae5ed39f 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-13-partitioned-coverage-location-canonicalization.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-13-partitioned-coverage-location-canonicalization.i18n.yaml @@ -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-09-13-partitioned-coverage-location-canonicalization.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/bug-fix/2026-09-13-partitioned-coverage-location-canonicalization.md -2026-09-13-partitioned-coverage-location-canonicalization.md: 54e5aaefe9551d1357f1c60201212873a1c7aef7 -2026-09-13-partitioned-coverage-location-canonicalization.zh.md: 1aa4b8de844a1f0e544d2bbb223641dbbfeff3da +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge: + en: 9346bcf9fc59bea8 + zh: 170ebd969ac038bd +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/problem: + en: c2f8792fb6ec46d1 + zh: cc01e2e2ff14f367 +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/decision: + en: 07f37eb8430ef8ee + zh: bc2910040b90291c +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/divergent-statement-maps-across-vite-environments: + en: 4f6d088fd7e272fc + zh: d44463ee8485b060 +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/testing: + en: 59a8515f97eb4c63 + zh: 86d655d454da2c63 +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/alternatives-considered: + en: 8c7efd287cf0e56b + zh: 2ed0477918e10f4e +/agent-note-canonicalize-partition-coverage-locations-before-the-blob-merge/consequences: + en: c7a2e99922697cb6 + zh: 0c98a57b00263bf8 diff --git a/.agents/notes/implemented/bug-fix/2026-09-14-chat-presentation-defaults.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-14-chat-presentation-defaults.i18n.yaml index 9ce88177ba..e671a8aa27 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-14-chat-presentation-defaults.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-14-chat-presentation-defaults.i18n.yaml @@ -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-09-14-chat-presentation-defaults.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/bug-fix/2026-09-14-chat-presentation-defaults.md -2026-09-14-chat-presentation-defaults.md: 6703a14e2ad108c4b43dd50692a44c159cf3ea5a -2026-09-14-chat-presentation-defaults.zh.md: 67ca433339ecf6e44d3f74b6c3ff9e465f802b0b +/agent-note-keep-chat-presentation-independent-of-trajectory-inspection: + en: 72d5bc0911e0bc3f + zh: 1fc58f89bdc53b56 +/agent-note-keep-chat-presentation-independent-of-trajectory-inspection/problem: + en: 2102a58c1baafe54 + zh: 939872d86e013f94 +/agent-note-keep-chat-presentation-independent-of-trajectory-inspection/decision: + en: f77e394352fe8d8e + zh: 7c4c9b066874dc9b +/agent-note-keep-chat-presentation-independent-of-trajectory-inspection/alternatives-considered: + en: f4c1b9c9998e3355 + zh: f684e39ffabce5e6 +/agent-note-keep-chat-presentation-independent-of-trajectory-inspection/consequences: + en: bb15d68e46b10b8e + zh: 8506ab5775d04fe8 diff --git a/.agents/notes/implemented/bug-fix/2026-09-14-web-diff-context.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-14-web-diff-context.i18n.yaml index 286919457a..8a44818fd8 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-14-web-diff-context.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-14-web-diff-context.i18n.yaml @@ -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-09-14-web-diff-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/bug-fix/2026-09-14-web-diff-context.md -2026-09-14-web-diff-context.md: 072af0966689d475d7fdd1df83861fa847f3745f -2026-09-14-web-diff-context.zh.md: cd165a443451fc5ba580078b1b431a2788671dbe +/agent-note-web-diff-cards-compare-contextual-content: + en: 2dc5ae1577ba6173 + zh: 0b580f4e70eddc72 +/agent-note-web-diff-cards-compare-contextual-content/problem: + en: 73aa63782984835f + zh: 41982214968dcca8 +/agent-note-web-diff-cards-compare-contextual-content/decision: + en: d8c9e2af5843c87d + zh: 5487925fa1a66da8 +/agent-note-web-diff-cards-compare-contextual-content/alternatives-considered: + en: b5d00cc913db27c9 + zh: ef72c91cff5ebcce +/agent-note-web-diff-cards-compare-contextual-content/measurement: + en: 839be054edf51392 + zh: 3d2a51e634b39eb2 +/agent-note-web-diff-cards-compare-contextual-content/consequences: + en: 1900b6984a59765c + zh: 8f3755fcdf8f2562 diff --git a/.agents/notes/implemented/bug-fix/2026-09-14-windows-lock-release-probe.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-14-windows-lock-release-probe.i18n.yaml index d98d216298..4816998bc8 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-14-windows-lock-release-probe.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-14-windows-lock-release-probe.i18n.yaml @@ -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-09-14-windows-lock-release-probe.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/bug-fix/2026-09-14-windows-lock-release-probe.md -2026-09-14-windows-lock-release-probe.md: 76a21f655fc8c1b299e3507beffabfacde3ac0d9 -2026-09-14-windows-lock-release-probe.zh.md: 292203d3931225f0000d56cd5cb5d700ecb0bcc7 +/agent-note-windows-lock-release-before-contention-probing: + en: ec7e0474bd96df26 + zh: 20a70a6284cb0269 +/agent-note-windows-lock-release-before-contention-probing/problem: + en: cc9630ce8e232e8a + zh: 16f3541a58eac0ef +/agent-note-windows-lock-release-before-contention-probing/decision: + en: 9230417f2af237d4 + zh: 6fbef7a6d6e1e4d0 +/agent-note-windows-lock-release-before-contention-probing/alternatives-considered: + en: ba6d9e4c01c8f25b + zh: 8899bcf11d45b258 +/agent-note-windows-lock-release-before-contention-probing/consequences: + en: fc268a94ceeb3a96 + zh: b14be62df4a4bfad diff --git a/.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.i18n.yaml index 154afe129e..196679568b 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.i18n.yaml @@ -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-09-15-client-session-blank-reconciliation.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/bug-fix/2026-09-15-client-session-blank-reconciliation.md -2026-09-15-client-session-blank-reconciliation.md: 7213636e32702c4c51887adba3da019f49b8703c -2026-09-15-client-session-blank-reconciliation.zh.md: 4b50340fea668b6d850c1d00787dda3874b61e0c +/agent-note-keep-accepted-session-presentation-across-list-refreshes: + en: cb6cc54ba8dbdb04 + zh: 49155298ed676aa9 +/agent-note-keep-accepted-session-presentation-across-list-refreshes/problem: + en: 43f5cb3e859ff15c + zh: 6aaf24dbd90601ba +/agent-note-keep-accepted-session-presentation-across-list-refreshes/decision: + en: a96b274615d2b533 + zh: 1610d9bc4bddd29f +/agent-note-keep-accepted-session-presentation-across-list-refreshes/alternatives-considered: + en: c1d81465f7ae6906 + zh: 668641e19a3e5088 +/agent-note-keep-accepted-session-presentation-across-list-refreshes/consequences: + en: 488d87360f50c682 + zh: 68408e517189ac93 +/agent-note-keep-accepted-session-presentation-across-list-refreshes/verification: + en: 4c16904319ae2745 + zh: 06bf9126b7f504ec +/agent-note-keep-accepted-session-presentation-across-list-refreshes/related-decisions: + en: 99d6b7e450a8dc09 + zh: 46a6df4730514668 diff --git a/.agents/notes/implemented/bug-fix/2026-09-15-linear-session-list-cache.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-15-linear-session-list-cache.i18n.yaml index d3b6770fac..a4a8a32d4e 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-15-linear-session-list-cache.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-15-linear-session-list-cache.i18n.yaml @@ -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-09-15-linear-session-list-cache.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/bug-fix/2026-09-15-linear-session-list-cache.md -2026-09-15-linear-session-list-cache.md: fb09950f77c224d2b85bb76792bdf8c3c87e33f5 -2026-09-15-linear-session-list-cache.zh.md: b877f0659fff4e1b3d48aa4250e634120ddc365f +/agent-note-linear-session-list-cache-reconciliation: + en: 7b6289de90982e71 + zh: 0c020de607402bbd +/agent-note-linear-session-list-cache-reconciliation/problem: + en: b94ff168ba0310a8 + zh: 8d9fe4af8b047c86 +/agent-note-linear-session-list-cache-reconciliation/decision: + en: 1d85980590014837 + zh: 2e03befc8ac84f0e +/agent-note-linear-session-list-cache-reconciliation/alternatives-considered: + en: 2085e3ccec11084a + zh: 55f5f5156d03e20c +/agent-note-linear-session-list-cache-reconciliation/consequences: + en: 54f1788954da5704 + zh: dad3478c7f3b46f6 diff --git a/.agents/notes/implemented/bug-fix/2026-09-15-messages-v1-base-url.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-15-messages-v1-base-url.i18n.yaml index 106b30af30..312f8cf353 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-15-messages-v1-base-url.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-15-messages-v1-base-url.i18n.yaml @@ -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-09-15-messages-v1-base-url.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/bug-fix/2026-09-15-messages-v1-base-url.md -2026-09-15-messages-v1-base-url.md: d9014756eacd1752495bfecb52860634ece08ae1 -2026-09-15-messages-v1-base-url.zh.md: 8f5803e4bdc68195164e187d1aa8cd537f71c5d6 +/agent-note-exact-v1-recognition-for-messages-base-urls: + en: 8e65836ea970f866 + zh: 54ef0765d2c39be8 +/agent-note-exact-v1-recognition-for-messages-base-urls/problem: + en: d6d0baca328ce1cd + zh: 152d5c7793674ed2 +/agent-note-exact-v1-recognition-for-messages-base-urls/decision: + en: 037fe11400e2e666 + zh: 5941d8f7364e45b8 +/agent-note-exact-v1-recognition-for-messages-base-urls/alternatives-considered: + en: 5615cd72ec115068 + zh: 772d9a557d46c43d +/agent-note-exact-v1-recognition-for-messages-base-urls/consequences: + en: 90a3b42b98cf99e0 + zh: 50e45634f1bd5ecb diff --git a/.agents/notes/implemented/bug-fix/2026-09-15-trajectory-attachment-presentation.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-15-trajectory-attachment-presentation.i18n.yaml index cc6eb7ff26..da4262d0ea 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-15-trajectory-attachment-presentation.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-15-trajectory-attachment-presentation.i18n.yaml @@ -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-09-15-trajectory-attachment-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/bug-fix/2026-09-15-trajectory-attachment-presentation.md -2026-09-15-trajectory-attachment-presentation.md: 03d737d67e626497bbcb957911b1578e0dadd5fb -2026-09-15-trajectory-attachment-presentation.zh.md: 55c63bf3d97de2e3e102e92730ce4d2637547d6b +/agent-note-consistent-trajectory-attachment-presentation: + en: 44651b6372b8e74e + zh: 8e1df22f6c969427 +/agent-note-consistent-trajectory-attachment-presentation/problem: + en: 3a02d475408db611 + zh: 49ef7f0e91917e13 +/agent-note-consistent-trajectory-attachment-presentation/decision: + en: 9a37a61d84813db3 + zh: 546cf3d1734289ee +/agent-note-consistent-trajectory-attachment-presentation/decision/ownership: + en: d453afd765988e76 + zh: eeb4c7d40fe578dc +/agent-note-consistent-trajectory-attachment-presentation/alternatives-considered: + en: f32a7ff301caf058 + zh: fbea3a171a300aef +/agent-note-consistent-trajectory-attachment-presentation/consequences: + en: da70caa5b98ac85d + zh: 52a5379c3adaa62f +/agent-note-consistent-trajectory-attachment-presentation/verification: + en: 145819ab133854c3 + zh: f9a440d57c12a257 diff --git a/.agents/notes/implemented/bug-fix/2026-09-16-desktop-window-menus.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-16-desktop-window-menus.i18n.yaml index 9c2cdd061a..c17e77792b 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-16-desktop-window-menus.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-16-desktop-window-menus.i18n.yaml @@ -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-09-16-desktop-window-menus.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/bug-fix/2026-09-16-desktop-window-menus.md -2026-09-16-desktop-window-menus.md: 8a5343404e0cb3d2e7c4e20248a8b29f3bfbec47 -2026-09-16-desktop-window-menus.zh.md: d6ee6412462aecf49557a7994a683d37bf8e7253 +/agent-note-desktop-standard-macos-window-menus: + en: 7a3fc575043bc839 + zh: 5ab70cfa35509b3e +/agent-note-desktop-standard-macos-window-menus/problem: + en: 75c201a0a687b59d + zh: 34593038f673d06f +/agent-note-desktop-standard-macos-window-menus/decision: + en: ea0310537d0251d9 + zh: daf3f8a745bb2872 +/agent-note-desktop-standard-macos-window-menus/alternatives-considered: + en: e2d3ed82f6247910 + zh: 7e449d21f0601f65 +/agent-note-desktop-standard-macos-window-menus/consequences: + en: 54527f9422525fb8 + zh: 285fd6ffda5ff4fd +/agent-note-desktop-standard-macos-window-menus/testing: + en: 0c05c0044532f891 + zh: cff254b44b3c7a2d diff --git a/.agents/notes/implemented/bug-fix/2026-09-16-messages-historical-tool-input.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-16-messages-historical-tool-input.i18n.yaml index e6974943f5..d0f3da21b3 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-16-messages-historical-tool-input.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-16-messages-historical-tool-input.i18n.yaml @@ -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-09-16-messages-historical-tool-input.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/bug-fix/2026-09-16-messages-historical-tool-input.md -2026-09-16-messages-historical-tool-input.md: 85e4047bb5274eb7c7adb458d564e1268d4ea81e -2026-09-16-messages-historical-tool-input.zh.md: 5a8c31dbee32094f124102ccac9ffb7b8b81b177 +/agent-note-replay-malformed-historical-tool-input-through-messages: + en: 88cdfca30918b47f + zh: 1203d380805f81e4 +/agent-note-replay-malformed-historical-tool-input-through-messages/problem: + en: b9f848905bb31969 + zh: 7c56aab1a15cfc85 +/agent-note-replay-malformed-historical-tool-input-through-messages/decision: + en: ee7c586820c28e54 + zh: fced4d6c50c7d227 +/agent-note-replay-malformed-historical-tool-input-through-messages/alternatives-considered: + en: c7d7275282a83780 + zh: c0c570f156ac546f +/agent-note-replay-malformed-historical-tool-input-through-messages/consequences: + en: 4d1447eb8ea0f7f4 + zh: cf232f6bb1d60d4e diff --git a/.agents/notes/implemented/bug-fix/2026-09-16-present-delayed-windows-installer.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-16-present-delayed-windows-installer.i18n.yaml index f8d7bd6adf..e64fb33fd5 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-16-present-delayed-windows-installer.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-16-present-delayed-windows-installer.i18n.yaml @@ -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-09-16-present-delayed-windows-installer.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/bug-fix/2026-09-16-present-delayed-windows-installer.md -2026-09-16-present-delayed-windows-installer.md: d4ffcfdc1183bbc414cfdd82595053c959a9975c -2026-09-16-present-delayed-windows-installer.zh.md: bf97ed8a4f6c7184d1e048c21f7975c90fb4a9cb +/agent-note-present-delayed-windows-installer: + en: 4451eeb66010bc3d + zh: 7b5e60d779a9eb41 +/agent-note-present-delayed-windows-installer/problem: + en: 7835e64ac8ea1825 + zh: aac3b323204b08b9 +/agent-note-present-delayed-windows-installer/decision: + en: adea34850b8df240 + zh: da68a90a4144092f +/agent-note-present-delayed-windows-installer/alternatives-considered: + en: 66f936fe39452162 + zh: 4d0e192fb37afffe +/agent-note-present-delayed-windows-installer/consequences: + en: 6431f3c88199ecaf + zh: 9f30f647fdab4e64 diff --git a/.agents/notes/implemented/bug-fix/2026-09-16-session-writer-held-feedback.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-16-session-writer-held-feedback.i18n.yaml index 61b6c1c780..3d896f268f 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-16-session-writer-held-feedback.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-16-session-writer-held-feedback.i18n.yaml @@ -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-09-16-session-writer-held-feedback.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/bug-fix/2026-09-16-session-writer-held-feedback.md -2026-09-16-session-writer-held-feedback.md: 922987996c4abd32857cd0f54cec4394566cf97f -2026-09-16-session-writer-held-feedback.zh.md: 6a1aa7993a8f36c50cb5fed0180d6523af44c177 +/agent-note-session-writer-contention-feedback: + en: 31fc83d11f79fbac + zh: ec2e62f56a83ff3c +/agent-note-session-writer-contention-feedback/problem: + en: ce6f2ed854986c2a + zh: 74b28d3282f610e8 +/agent-note-session-writer-contention-feedback/decision: + en: a2c50e7614d183fd + zh: c4057682bc25cb23 +/agent-note-session-writer-contention-feedback/alternatives-considered: + en: 43f74d015db77ab1 + zh: 38c7ffda0a33ecac +/agent-note-session-writer-contention-feedback/consequences: + en: 230c23cceae0ad46 + zh: 8ec04813b825b509 diff --git a/.agents/notes/implemented/bug-fix/2026-09-16-windows-subprocess-console-visibility.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-16-windows-subprocess-console-visibility.i18n.yaml index b6d4fe5084..879cde4ff0 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-16-windows-subprocess-console-visibility.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-16-windows-subprocess-console-visibility.i18n.yaml @@ -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-09-16-windows-subprocess-console-visibility.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/bug-fix/2026-09-16-windows-subprocess-console-visibility.md -2026-09-16-windows-subprocess-console-visibility.md: 281525e960b049d5871cde9f5da5c8f928654440 -2026-09-16-windows-subprocess-console-visibility.zh.md: 04abf7154b4b384ca521b9d232c7dfb398f5ed99 +/agent-note-hide-windows-subprocess-console-windows-at-creation: + en: be47c56d2dd977d1 + zh: 3ab8a9a18e7f545d +/agent-note-hide-windows-subprocess-console-windows-at-creation/problem: + en: b76c3b25b8616076 + zh: d14facfdf3948bc4 +/agent-note-hide-windows-subprocess-console-windows-at-creation/decision: + en: 56b951a948c6d007 + zh: 301031638a642517 +/agent-note-hide-windows-subprocess-console-windows-at-creation/alternatives-considered: + en: 9dcf5702a5032d69 + zh: 493c2709d441d52c +/agent-note-hide-windows-subprocess-console-windows-at-creation/consequences: + en: 0bfe83068c6fe3ee + zh: 2bdc9eb64c6f7b66 diff --git a/.agents/notes/implemented/bug-fix/2026-09-17-thinking-markdown.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-17-thinking-markdown.i18n.yaml index 6377a233cb..9290c75e26 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-17-thinking-markdown.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-17-thinking-markdown.i18n.yaml @@ -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-09-17-thinking-markdown.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/bug-fix/2026-09-17-thinking-markdown.md -2026-09-17-thinking-markdown.md: 6990fc6277d7d1c0a088a50cfb88694b2d9c55c7 -2026-09-17-thinking-markdown.zh.md: 963626088e50a44bcf76c7fc7ec3653e93fcd2c9 +/agent-note-compact-markdown-for-thinking: + en: 2b71ec7a5294e982 + zh: 0c33248c5d07ec74 +/agent-note-compact-markdown-for-thinking/problem: + en: c14bd1618741736a + zh: dc1fff84736cb4f7 +/agent-note-compact-markdown-for-thinking/decision: + en: adb4f711ecf2011a + zh: 791f7bf3b8d23458 +/agent-note-compact-markdown-for-thinking/alternatives-considered: + en: d5bf82e0de012900 + zh: a639fd02e00b5d09 +/agent-note-compact-markdown-for-thinking/consequences: + en: d69b13246a34047c + zh: 4c1a6520053261ef diff --git a/.agents/notes/implemented/bug-fix/2026-09-18-messages-input-history-compatibility.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-18-messages-input-history-compatibility.i18n.yaml index 259613bc28..4d97265632 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-18-messages-input-history-compatibility.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-18-messages-input-history-compatibility.i18n.yaml @@ -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-09-18-messages-input-history-compatibility.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/bug-fix/2026-09-18-messages-input-history-compatibility.md -2026-09-18-messages-input-history-compatibility.md: dd974fb1ae883716002a1381f4c374dee792b3b3 -2026-09-18-messages-input-history-compatibility.zh.md: 6e850328db63d5ae5cb508aa3529e9f2507182b0 +/agent-note-replay-assistant-blocks-in-messages-user-input: + en: 2928aedee63465ba + zh: 0492dcc6604e2292 +/agent-note-replay-assistant-blocks-in-messages-user-input/problem: + en: d42b7147df73f498 + zh: f77ef429363c2da8 +/agent-note-replay-assistant-blocks-in-messages-user-input/decision: + en: 0b5629b321be7181 + zh: 3449958cde376d59 +/agent-note-replay-assistant-blocks-in-messages-user-input/alternatives-considered: + en: 3801041c0f9c4d8a + zh: 71d80b08183e8b30 +/agent-note-replay-assistant-blocks-in-messages-user-input/consequences: + en: c1770c7aa4097c42 + zh: 80ab7f2b66408ad7 diff --git a/.agents/notes/implemented/bug-fix/2026-09-19-declared-session-attachment-carriers.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-19-declared-session-attachment-carriers.i18n.yaml index a49e4b2351..a1c2b57fdb 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-19-declared-session-attachment-carriers.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-19-declared-session-attachment-carriers.i18n.yaml @@ -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-09-19-declared-session-attachment-carriers.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/bug-fix/2026-09-19-declared-session-attachment-carriers.md -2026-09-19-declared-session-attachment-carriers.md: 1619624800dc5e1ee8d6a4f4b64b84a6c80078c2 -2026-09-19-declared-session-attachment-carriers.zh.md: bd66b1c80469e2adbd7becc1b015d390978becc6 +/agent-note-declared-session-attachment-carriers: + en: ec696589b6d29694 + zh: fca0e8292a840d47 +/agent-note-declared-session-attachment-carriers/problem: + en: 2c3544ea223fd86c + zh: fee865c0ce374115 +/agent-note-declared-session-attachment-carriers/decision: + en: 7538fa848fbbeff8 + zh: 6fd10f3683cadef0 +/agent-note-declared-session-attachment-carriers/alternatives-considered: + en: 3307cfd109d19377 + zh: a0051b257807e6d0 +/agent-note-declared-session-attachment-carriers/consequences: + en: 9d028f075b96f121 + zh: c5da5f89f7b75efc +/agent-note-declared-session-attachment-carriers/verification: + en: f297ee8e56e7e69e + zh: e6bc44cb7711b778 diff --git a/.agents/notes/implemented/bug-fix/2026-09-19-session-local-subagent-migration.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-19-session-local-subagent-migration.i18n.yaml index e2f0f66dda..5618368313 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-19-session-local-subagent-migration.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-19-session-local-subagent-migration.i18n.yaml @@ -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-09-19-session-local-subagent-migration.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/bug-fix/2026-09-19-session-local-subagent-migration.md -2026-09-19-session-local-subagent-migration.md: 26911ea6e2cb31126d13e4c8c6488ff3b45563e6 -2026-09-19-session-local-subagent-migration.zh.md: 673040a3dc73d3665e42013a4704ef2d5911b23d +/agent-note-complete-parent-catalogs-without-migrating-child-catalogs: + en: 352c234841bc0905 + zh: 89be7b695aec5931 +/agent-note-complete-parent-catalogs-without-migrating-child-catalogs/problem: + en: 5ca0c3232895a9dd + zh: cb89e5464d4a5f99 +/agent-note-complete-parent-catalogs-without-migrating-child-catalogs/decision: + en: 7a368a5ad8dc3e0c + zh: 11ca2af33de30d8f +/agent-note-complete-parent-catalogs-without-migrating-child-catalogs/alternatives-considered: + en: 7272107ab68ceefd + zh: 8b8bba44c9e0c402 +/agent-note-complete-parent-catalogs-without-migrating-child-catalogs/consequences: + en: 7caecc8516419375 + zh: cc966c325896737d diff --git a/.agents/notes/implemented/bug-fix/2026-09-19-v3-incomplete-child-catalog-evidence.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-19-v3-incomplete-child-catalog-evidence.i18n.yaml index bf6d6c2fd0..3b1c733004 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-19-v3-incomplete-child-catalog-evidence.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-19-v3-incomplete-child-catalog-evidence.i18n.yaml @@ -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-09-19-v3-incomplete-child-catalog-evidence.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/bug-fix/2026-09-19-v3-incomplete-child-catalog-evidence.md -2026-09-19-v3-incomplete-child-catalog-evidence.md: 400a84f376a7babc0a95492ca33a3bcd0761cd79 -2026-09-19-v3-incomplete-child-catalog-evidence.zh.md: 535951630bc600647724d50107e74e83ab626739 +/agent-note-preserve-v3-sessions-with-incomplete-child-catalog-evidence: + en: ff7fbd846f8edf2f + zh: 8f4703ea0b0d7cc9 +/agent-note-preserve-v3-sessions-with-incomplete-child-catalog-evidence/problem: + en: a5d524599f02e77f + zh: b79687f999f4024c +/agent-note-preserve-v3-sessions-with-incomplete-child-catalog-evidence/decision: + en: cfd781300b663010 + zh: 6f7865d5619a1e52 +/agent-note-preserve-v3-sessions-with-incomplete-child-catalog-evidence/alternatives-considered: + en: b7ce0d1b6b280d7f + zh: 3deeaef73a3a7856 +/agent-note-preserve-v3-sessions-with-incomplete-child-catalog-evidence/consequences: + en: 9f8b6446f6cdea60 + zh: d0a07674bf8434c4 diff --git a/.agents/notes/implemented/bug-fix/2026-09-20-session-open-read-coordination.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-20-session-open-read-coordination.i18n.yaml index 802ab740bd..1ca3737cda 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-20-session-open-read-coordination.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-20-session-open-read-coordination.i18n.yaml @@ -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-09-20-session-open-read-coordination.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/bug-fix/2026-09-20-session-open-read-coordination.md -2026-09-20-session-open-read-coordination.md: a4907df1d7dd38e4c532c38fb6ff10362a4a3898 -2026-09-20-session-open-read-coordination.zh.md: 759a45d8c52a62ea7a0b30ceed4003f8804a42c3 +/agent-note-session-opening-cache-identity-and-read-ordering: + en: 1ea618d07f8d8f28 + zh: 25332949ef7af87e +/agent-note-session-opening-cache-identity-and-read-ordering/problem: + en: 490984caf5af4323 + zh: 273ac6284e1ff67f +/agent-note-session-opening-cache-identity-and-read-ordering/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-session-opening-cache-identity-and-read-ordering/decision/identify-the-cache-producer-with-a-service-owned-symbol: + en: 56bec761deb63aad + zh: 8b16c2b7582aeb3f +/agent-note-session-opening-cache-identity-and-read-ordering/decision/auxiliary-rpcs-wait-for-the-current-conversation-s-initial-open-to-succeed: + en: 3a09e82c1fb032e4 + zh: c1ef33b75ab0e734 +/agent-note-session-opening-cache-identity-and-read-ordering/decision/conversations-use-follow-catalog-branches-retain-explicit-reads: + en: 181653d75354df80 + zh: 7984321c5a2715d5 +/agent-note-session-opening-cache-identity-and-read-ordering/implementation-scope: + en: 84310b075ac5537b + zh: 6bf16dbf06353a39 +/agent-note-session-opening-cache-identity-and-read-ordering/alternatives-considered: + en: 7d64c8151ffef2a0 + zh: b899a22f4d070a78 +/agent-note-session-opening-cache-identity-and-read-ordering/consequences: + en: 51a45af1622d7e4d + zh: f33fecfa0f889af7 +/agent-note-session-opening-cache-identity-and-read-ordering/verification-and-known-gaps: + en: 13437882143e2025 + zh: 586bcd68eaa03969 +/agent-note-session-opening-cache-identity-and-read-ordering/relationship-to-existing-records: + en: 8b479aee5c808180 + zh: aa0220e664f9e9a6 diff --git a/.agents/notes/implemented/bug-fix/2026-09-20-windows-embedded-mandatory-update.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-20-windows-embedded-mandatory-update.i18n.yaml index 259202f1a0..48e79b967c 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-20-windows-embedded-mandatory-update.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-20-windows-embedded-mandatory-update.i18n.yaml @@ -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-09-20-windows-embedded-mandatory-update.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/bug-fix/2026-09-20-windows-embedded-mandatory-update.md -2026-09-20-windows-embedded-mandatory-update.md: 99577a4d85adc3fe13ea0ae262d5aa1af6128237 -2026-09-20-windows-embedded-mandatory-update.zh.md: abe4a9577d8e11d8de2089dc53ef07433e10bbdb +/agent-note-windows-embedded-mandatory-update: + en: fb52005dc1f55b5d + zh: dda7e46555da6d03 +/agent-note-windows-embedded-mandatory-update/problem: + en: df8f2127905913d7 + zh: 64d27253ce39e031 +/agent-note-windows-embedded-mandatory-update/decision: + en: f238482836ae80da + zh: df856cba1b715056 +/agent-note-windows-embedded-mandatory-update/alternatives-considered: + en: 9564f979909f0743 + zh: 6730e42a123b707a +/agent-note-windows-embedded-mandatory-update/consequences: + en: 64cd6585a98f01cd + zh: 8bca9eb88aa55d8e diff --git a/.agents/notes/implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.i18n.yaml index 78d945e72c..82aabefd0d 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-21-multimodal-tool-result-retention.i18n.yaml @@ -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-09-21-multimodal-tool-result-retention.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/bug-fix/2026-09-21-multimodal-tool-result-retention.md -2026-09-21-multimodal-tool-result-retention.md: 41470724911d3086878d206f82c76ad9a4993146 -2026-09-21-multimodal-tool-result-retention.zh.md: 8e6d4953f7380d45235ac13f9f245e2e005f1abf +/agent-note-multimodal-tool-result-retention: + en: aa04c4148785f8ca + zh: b08c44c8484ea5d2 +/agent-note-multimodal-tool-result-retention/problem: + en: 9e8765ea40441f36 + zh: 3ca2616499d3c9fc +/agent-note-multimodal-tool-result-retention/decision: + en: a65eeedad585fc4b + zh: 82aae7ef0148282b +/agent-note-multimodal-tool-result-retention/alternatives-considered: + en: c670e96a46c93540 + zh: efccc4d3423e5ac0 +/agent-note-multimodal-tool-result-retention/consequences: + en: 7fdf51600bb0ffd7 + zh: 0ad7f06887b1c859 diff --git a/.agents/notes/implemented/bug-fix/2026-09-21-persistent-pwsh-keeps-controlled-prompt.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-21-persistent-pwsh-keeps-controlled-prompt.i18n.yaml index 4f16b7775b..48e34b2079 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-21-persistent-pwsh-keeps-controlled-prompt.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-21-persistent-pwsh-keeps-controlled-prompt.i18n.yaml @@ -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-09-21-persistent-pwsh-keeps-controlled-prompt.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/bug-fix/2026-09-21-persistent-pwsh-keeps-controlled-prompt.md -2026-09-21-persistent-pwsh-keeps-controlled-prompt.md: 3fd42b77d4536215f34c32643526dbb03d21674f -2026-09-21-persistent-pwsh-keeps-controlled-prompt.zh.md: 88d4e2deef26af4ad92ef4a69d8ae17403027f70 +/agent-note-persistent-pwsh-keeps-the-backend-s-controlled-prompt: + en: 78c6e7e3340581dc + zh: 64e16ab608caa610 +/agent-note-persistent-pwsh-keeps-the-backend-s-controlled-prompt/problem: + en: 0cd51c293e96d9eb + zh: 6eb89ee3f1b7a851 +/agent-note-persistent-pwsh-keeps-the-backend-s-controlled-prompt/decision: + en: edd5cbb51ddad62f + zh: d7c41f09a9453992 +/agent-note-persistent-pwsh-keeps-the-backend-s-controlled-prompt/alternatives-considered: + en: a3920fa51dd5ac79 + zh: 29c3f8364f64115e +/agent-note-persistent-pwsh-keeps-the-backend-s-controlled-prompt/consequences: + en: d43b72fb5aa0c6da + zh: c4c9a27d5c7c6338 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.i18n.yaml index ceb40894c4..e10cbc61b1 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.i18n.yaml @@ -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-09-22-chat-scroll-follow-and-footer-geometry.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/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md -2026-09-22-chat-scroll-follow-and-footer-geometry.md: 56cd1681eef23162df2595a138545ade25e34212 -2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: 9979688d52373ae7a64a3f4fc22b932b43091b34 +/agent-note-separate-chat-clipping-and-independent-follow-intent: + en: a95aae5eecac228c + zh: 01b7df574c3d010f +/agent-note-separate-chat-clipping-and-independent-follow-intent/problem: + en: 8e4310ee05cf535c + zh: bd57ba36ebe8c201 +/agent-note-separate-chat-clipping-and-independent-follow-intent/decision: + en: afe3cf3bb5a92039 + zh: bb11f9f4bcd8f329 +/agent-note-separate-chat-clipping-and-independent-follow-intent/alternatives-considered: + en: 014e7974ce1cadae + zh: 63c1743c598413e4 +/agent-note-separate-chat-clipping-and-independent-follow-intent/verification: + en: 235dc4e251fa8124 + zh: 2c08ab5e14213b54 +/agent-note-separate-chat-clipping-and-independent-follow-intent/consequences: + en: aa1367b399806ab7 + zh: f98a8b416d9a70c8 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.i18n.yaml index 6ba4b3a015..6f58c8d30c 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.i18n.yaml @@ -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-09-22-input-echo-admission-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/bug-fix/2026-09-22-input-echo-admission-ownership.md -2026-09-22-input-echo-admission-ownership.md: 227857bd8168aa1d7f51b621737c2ed0ab572632 -2026-09-22-input-echo-admission-ownership.zh.md: 1d64de220a3c6d5c9357770175c79266b8f9f063 +/agent-note-input-echoes-retain-display-ownership-through-admission: + en: 987905631fdf4244 + zh: 2b2a1db249903717 +/agent-note-input-echoes-retain-display-ownership-through-admission/problem: + en: a56f673056a7d913 + zh: a06acdb9f3e1afd3 +/agent-note-input-echoes-retain-display-ownership-through-admission/decision: + en: b570ae20a428f554 + zh: b3cf1ebc56fbe78c +/agent-note-input-echoes-retain-display-ownership-through-admission/alternatives-considered: + en: 9ee59841301a61f4 + zh: 7ad35e485294dce1 +/agent-note-input-echoes-retain-display-ownership-through-admission/verification: + en: a1373e299a536929 + zh: 13405143c3bb9331 +/agent-note-input-echoes-retain-display-ownership-through-admission/consequences: + en: 027d6bae744c47e0 + zh: c9f397bc631298b9 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-windows-open-through-shell-resolution.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-22-windows-open-through-shell-resolution.i18n.yaml index 420cb47036..3a1ef4f137 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-windows-open-through-shell-resolution.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-22-windows-open-through-shell-resolution.i18n.yaml @@ -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-09-22-windows-open-through-shell-resolution.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/bug-fix/2026-09-22-windows-open-through-shell-resolution.md -2026-09-22-windows-open-through-shell-resolution.md: 7bfe559e7f26b96fa37d3bbed44f0403d4e51b59 -2026-09-22-windows-open-through-shell-resolution.zh.md: ff33455da1653f9d24f9ddcc21c1594e8875bb5e +/agent-note-windows-opens-go-through-explorer-exe: + en: 315c5e87180365ba + zh: 4bc29f09bb3900d3 +/agent-note-windows-opens-go-through-explorer-exe/problem: + en: bc2c92e4247ea71e + zh: ca20fdeccc58e883 +/agent-note-windows-opens-go-through-explorer-exe/decision: + en: 4cf76bcb52a7beef + zh: a55a5bd9a4b85063 +/agent-note-windows-opens-go-through-explorer-exe/alternatives-considered: + en: 64712f720fca44a1 + zh: aad98e46f0c7a6bb +/agent-note-windows-opens-go-through-explorer-exe/consequences: + en: d06af93b608037c9 + zh: 38b1a4c840b0ce51 +/agent-note-windows-opens-go-through-explorer-exe/verification: + en: c7ff7cb42072737c + zh: 9bbf5ff6596938a0 diff --git a/.agents/notes/implemented/bug-fix/2026-09-23-bounded-pnpm-runs.i18n.yaml b/.agents/notes/implemented/bug-fix/2026-09-23-bounded-pnpm-runs.i18n.yaml index 727ff382c0..1978750d50 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-23-bounded-pnpm-runs.i18n.yaml +++ b/.agents/notes/implemented/bug-fix/2026-09-23-bounded-pnpm-runs.i18n.yaml @@ -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-09-23-bounded-pnpm-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/bug-fix/2026-09-23-bounded-pnpm-runs.md -2026-09-23-bounded-pnpm-runs.md: 7ce6b1776e4587240072201781c9da5bc78650e8 -2026-09-23-bounded-pnpm-runs.zh.md: 1cb91132cca22a1130fdc48ce3d3dbd354fa5d16 +/agent-note-bounding-a-pnpm-run-that-stops-progressing: + en: c2bd52dec2a41d84 + zh: 80dae83761a09a60 +/agent-note-bounding-a-pnpm-run-that-stops-progressing/problem: + en: 227a287fe7127eae + zh: 5d7eae54a4a75f8c +/agent-note-bounding-a-pnpm-run-that-stops-progressing/decision: + en: 6a574e5b6d536b5b + zh: 92a9bb15d983e7db +/agent-note-bounding-a-pnpm-run-that-stops-progressing/why-a-silence-bound-rather-than-a-duration-bound: + en: 31287e4e71e7f10f + zh: ff57c96539d51972 +/agent-note-bounding-a-pnpm-run-that-stops-progressing/alternatives-considered: + en: 125710ae84911ed4 + zh: 5f35dbcda4447bea +/agent-note-bounding-a-pnpm-run-that-stops-progressing/testing: + en: eb3c4907aec48db3 + zh: 56b7168b732c782a +/agent-note-bounding-a-pnpm-run-that-stops-progressing/related: + en: a9c6d0a071ea9834 + zh: 0702183c645d03b9 +/agent-note-bounding-a-pnpm-run-that-stops-progressing/consequences: + en: c13a64cd3dd381e9 + zh: 83d2db47153e3d8c diff --git a/.agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml b/.agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml index 0e6c3a467b..4a99a03276 100644 --- a/.agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-06-15-ptc.i18n.yaml @@ -1,6 +1,49 @@ -# 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-15-ptc.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/feature/2026-06-15-ptc.md -2026-06-15-ptc.md: d5ed3fc79d4586d3754b7273e08970fb066fe6e9 -2026-06-15-ptc.zh.md: 1434db5c352cdb14b857dc5d4ca3bb2f5332e98e +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry: + en: 9506116227b22bd0 + zh: c2d42a9f483cfbe3 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/problem: + en: 4b312be894531bee + zh: d655648ea5843ef5 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision: + en: 371abc68ce278a5c + zh: 3fa8d28213794932 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/per-program-execution-controls: + en: da694641e1d009de + zh: 9d7492d39039af66 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/the-registry-owns-the-mode: + en: 55287fedeaaee6d8 + zh: d2afe242e84acc43 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/the-run-code-tool-and-the-dispatch-bridge: + en: 8811a9c5e28488fd + zh: 6937645281b79fb9 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/observability-tool-ptc-dispatch: + en: b8e4cf9433c7ee18 + zh: e5f4e8d7d03d3a7b +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/the-ptc-runtime-seam: + en: 4c423f4e9cef6055 + zh: 5c23a3637eb420c0 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/the-node-process-runtime: + en: 0b846ed33977e383 + zh: e45158758d657f9a +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/trust-posture: + en: d62b41a6a5c58e5f + zh: ef72c5a9b32b370e +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/decision/what-the-model-sees: + en: 43653fd91ab9165b + zh: 6ddfa853e69b2d80 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/consequences: + en: 761eb6c1aeb7af18 + zh: 5434456a3d0a1b65 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/testing: + en: f5d287f610962a48 + zh: 88368e1df517b087 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/alternatives-considered: + en: 90110f91f6f6130f + zh: 25d28433840f91a4 +/agent-note-ptc-mode-the-model-writes-typescript-against-the-tool-registry/risks: + en: 7743b1b621b8e6c7 + zh: 70c33a5b306ca71c diff --git a/.agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.i18n.yaml b/.agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.i18n.yaml index 4e2bd8d28d..4b48c194fe 100644 --- a/.agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-06-18-compaction-capability-seam.i18n.yaml @@ -1,6 +1,52 @@ -# 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-compaction-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/feature/2026-06-18-compaction-capability-seam.md -2026-06-18-compaction-capability-seam.md: 7d8b4f5011385f306aec4c6374d3402427fb3cc4 -2026-06-18-compaction-capability-seam.zh.md: 6a255bb05e0b3c90077af051bd24744305f3833e +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend: + en: 6808ccbe73762daa + zh: 11f3669e6ae4512c +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/problem: + en: ed3fddc1dce0f229 + zh: fab2663b344cd851 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/compaction-is-a-capability-seam-with-separate-service-definition-and-service-provider-roles: + en: 785c69730accbb4d + zh: ee9bd2a8a7dc3b72 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/the-contract-depends-on-dsh-session-and-dsh-llm-a-deliberate-deviation: + en: 5c07a5a6429f6752 + zh: 8bf83da6e0563a66 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/three-abstract-operations-algorithm-in-the-backend: + en: 62191e0e65c79673 + zh: cbaa5bece0f5b45a +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/automatic-pressure-runs-after-successful-durable-step-work: + en: b246f9837c9c9a6b + zh: c19c51456c8fd8b7 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/retention-is-turn-agnostic-tool-pairing-balance-is-the-only-structural-guard: + en: 3126c249c48e90b9 + zh: dc82bc9a37d90474 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/head-anchoring-one-auto-checkpoint-always-at-the-head: + en: 26f187b321217e4c + zh: b324dcdb6da4bf02 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/approximate-convergence-invariant: + en: 4870032f23833fc4 + zh: b30180c31ba84a5a +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/surface-replacement-compaction-events-are-log-only-one-user-message-carries-the-summary: + en: 6d50dfe66a35f6fb + zh: 6ff9e66553f10ac6 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/checkpoint-framing-incremental-merge-backend-private: + en: 1c71cf67450e78d5 + zh: fb44b3cf5cee070a +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/decision/blocking-via-a-log-recorded-lock-plus-a-crash-recoverable-failure-taxonomy: + en: 5aed57a49e031b1e + zh: 1424f332197ef541 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/alternatives-considered: + en: 24a7bb1949445136 + zh: 7914ea99f498ed67 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/consequences: + en: 400bf1cadb974d04 + zh: 7612a4634ae98b32 +/agent-note-compaction-as-a-capability-seam-abstract-contract-basic-backend/testing: + en: 843476bd607fe832 + zh: 50be0b06553a54d0 diff --git a/.agents/notes/implemented/feature/2026-06-21-subagent-capability-seam.i18n.yaml b/.agents/notes/implemented/feature/2026-06-21-subagent-capability-seam.i18n.yaml index 1445f54bbb..2362f9cac7 100644 --- a/.agents/notes/implemented/feature/2026-06-21-subagent-capability-seam.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-06-21-subagent-capability-seam.i18n.yaml @@ -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-06-21-subagent-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/feature/2026-06-21-subagent-capability-seam.md -2026-06-21-subagent-capability-seam.md: 6eedb3a4b03cd919aa8888853fac5fdaf3f74fe0 -2026-06-21-subagent-capability-seam.zh.md: 7e73fdc58f4b537ca2f6be481e359b267af31d96 +/agent-note-subagent-capability-seam: + en: 3c051f92759dd9c4 + zh: fceee1b8289f2779 +/agent-note-subagent-capability-seam/problem: + en: 5c81597e6dc16c39 + zh: c30c6b5dce12bfae +/agent-note-subagent-capability-seam/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 76136ef5249c23eb +/agent-note-subagent-capability-seam/alternatives-considered/why-not-the-bash-seam-shape: + en: 3a01c98c45de8585 + zh: 7f87d8bd6d348dae +/agent-note-subagent-capability-seam/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-subagent-capability-seam/decision/the-three-package-boundary: + en: c470cd9518cebc8b + zh: 228b559f73c58f2b +/agent-note-subagent-capability-seam/decision/the-primitive-async-start-subagentrun: + en: 08250dc4d5faf918 + zh: 1b413cb438af6796 +/agent-note-subagent-capability-seam/decision/two-kinds-of-optional-capability-discovered-two-ways: + en: d2a27fcacc46ca76 + zh: 4e8cca931fcaec2c +/agent-note-subagent-capability-seam/decision/fork-vs-fresh-are-separate-backends-not-a-flag: + en: a8e071639738ea79 + zh: 3fd7cc7427843efe +/agent-note-subagent-capability-seam/decision/child-isolation-and-the-parent-log: + en: e970f97f27d11f4a + zh: 34ece0dfe5ec6185 +/agent-note-subagent-capability-seam/decision/synchronous-collect-first-cut: + en: a14200a7abfa532f + zh: ee4f8c08deb0ee99 +/agent-note-subagent-capability-seam/decision/transport-provider-selection-is-config-not-model-facing: + en: 3dab95ec93f918df + zh: 4c3c7d4e8357bf63 +/agent-note-subagent-capability-seam/testing: + en: 324951447c43d01a + zh: b04388c4665302d2 +/agent-note-subagent-capability-seam/consequences: + en: c60d3fb1012f52b4 + zh: f46ab4b214941622 diff --git a/.agents/notes/implemented/feature/2026-06-30-interception-extension-points.i18n.yaml b/.agents/notes/implemented/feature/2026-06-30-interception-extension-points.i18n.yaml index 8ed643d29b..b5de0ccbcd 100644 --- a/.agents/notes/implemented/feature/2026-06-30-interception-extension-points.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-06-30-interception-extension-points.i18n.yaml @@ -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-06-30-interception-extension-points.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/feature/2026-06-30-interception-extension-points.md -2026-06-30-interception-extension-points.md: 5adffd1679c97cc69cf18991913113b84d88ba3c -2026-06-30-interception-extension-points.zh.md: c3aa374a22d58c5185a3bd8e79b4040a04bd43e3 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against: + en: 623ca9ecb3ed4c8e + zh: 5d5639dea9a6a541 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/problem: + en: 7ce5525628f7fc7d + zh: 53f27e5423da86f8 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/decision: + en: dc7daa9100978a8b + zh: c87aa08a4e085b7b +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/decision/the-tool-pipeline-gives-each-phase-one-kind-of-authority: + en: 65553dedec611132 + zh: 5b002349db90b83f +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/decision/three-load-bearing-loop-decisions: + en: d91bda956aa8bad9 + zh: 12bc8f819bf62ed2 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/decision/pre-tool-input-rewrite-is-a-separate-consistency-decision: + en: bea1cab63d0470f1 + zh: b3a1dba46e346109 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/decision/boundaries: + en: 30c23a1087faca81 + zh: 03d58723ee6b1a37 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/alternatives-considered: + en: d05468299caa114d + zh: d0b0eecf36456130 +/agent-note-interception-extension-points-the-typed-decision-surface-a-hook-programs-against/consequences: + en: 830c7bab979652be + zh: 7266e2d0780e9d67 diff --git a/.agents/notes/implemented/feature/2026-07-05-dynamic-workflows.i18n.yaml b/.agents/notes/implemented/feature/2026-07-05-dynamic-workflows.i18n.yaml index 8fe72e240d..b70097f9c9 100644 --- a/.agents/notes/implemented/feature/2026-07-05-dynamic-workflows.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-05-dynamic-workflows.i18n.yaml @@ -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-dynamic-workflows.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/feature/2026-07-05-dynamic-workflows.md -2026-07-05-dynamic-workflows.md: c7245704b0734c1508fe7f001e6429f594ebdd1d -2026-07-05-dynamic-workflows.zh.md: a4502d7d6b3acf1aebc4a5b36caccf50859bab01 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam: + en: 472dec484bf937c1 + zh: 1d6c38c699d43828 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/problem: + en: e890f8ac24054d94 + zh: 45ec14140f62e1c9 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision: + en: 16af14c0c9fc54ee + zh: 463dd56b53d05ea7 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision/the-script-contract-claude-code-compatible: + en: 889beb90c3650f25 + zh: b1ba5dac3c77f8d2 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision/the-seam-dsh-workflow: + en: d37f01afb4d9cd6a + zh: 5648b981b61e6624 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision/the-engine-dsh-workflow-ptc-shared-node-process-execution: + en: 7567d5fcf218e4b5 + zh: 2ba33b1237df9e4a +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision/the-consumer-dsh-tool-workflow: + en: 00b015ee9db948fb + zh: 6dac8d8aaf0b32d2 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/decision/the-foundation-structured-output-on-the-subagent-seam: + en: 40ad0d1f23ffa7db + zh: 23a81a277fb24cd9 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/testing: + en: a1607694b584dcbc + zh: 29c9c7560f0fcf56 +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/deferred-documented-non-goals: + en: 2bff807d808bfa13 + zh: add602509c0a826c +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/alternatives-considered: + en: 44a36cb0a91546cc + zh: f4ed8c49f3764d7a +/agent-note-dynamic-workflows-a-script-driven-multi-agent-orchestration-seam/consequences: + en: bfd2d827ffb20587 + zh: 310c4fe77f48aa4e diff --git a/.agents/notes/implemented/feature/2026-07-06-approval-seam.i18n.yaml b/.agents/notes/implemented/feature/2026-07-06-approval-seam.i18n.yaml index f3eb596443..6b8dc5e1c0 100644 --- a/.agents/notes/implemented/feature/2026-07-06-approval-seam.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-06-approval-seam.i18n.yaml @@ -1,6 +1,55 @@ -# 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-approval-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/feature/2026-07-06-approval-seam.md -2026-07-06-approval-seam.md: 03a4269dd7712f88d73e0439f944e6bf5bce14b5 -2026-07-06-approval-seam.zh.md: f11e0956c90cd60c9e34c7ccdee62111b5653545 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers: + en: 5a500ddf8910f3b2 + zh: 0461f97e3c905d72 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/problem: + en: 0903931cf3fd2d9b + zh: ae39e774ffa66c36 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision: + en: 058d4bd95d3c55d3 + zh: a861c6a59340b121 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/how-a-deployment-uses-it: + en: d0bcdfb988eaeadc + zh: 5ce6fd8f89b503fc +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail: + en: a6d7884e4359af3a + zh: e72588705942000a +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/the-seam-mechanism-and-policy-split: + en: 0aa6f3a90921d1ea + zh: c4a734f84800dae8 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/ask-routing-in-dsh-tools: + en: 1d4478059f608fd2 + zh: 4a1d12e4ccb766b5 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/the-per-session-policy-tier: + en: 4eaf3ae10290dc6a + zh: 0cb65c79a5e9effc +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/the-acp-answerer: + en: bbfb8c3f1cb34b12 + zh: 4f8f51a027a09a03 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/audit-and-what-the-model-sees: + en: d9f129e893e76bec + zh: 92929dbc54c65a5b +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/design-detail/entities-and-dependencies: + en: 08abe894f74bcb00 + zh: a94052662c8536c7 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/decision/testing: + en: 01356985c175fcda + zh: b1bb3b68f619e698 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/deferred: + en: 3a9a1ddf86364f14 + zh: ec8413e23f171bd2 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/alternatives-considered: + en: ae974b0f43a29b4e + zh: bbc4662c0c63b6c1 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/consequences: + en: 9d2097d7b796dd63 + zh: 4f1a0493dc109b12 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/faq: + en: 85f3a8270d96497d + zh: b97bedebc08f23f0 +/agent-note-the-approval-seam-one-shot-permission-decisions-over-a-waterfall-of-answerers/prior-art: + en: 964a5c6afd4724d6 + zh: 1a386e1376860105 diff --git a/.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml b/.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml index 0c0d28aa76..ea0738686e 100644 --- a/.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-06-sandbox.i18n.yaml @@ -1,6 +1,61 @@ -# 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-sandbox.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/feature/2026-07-06-sandbox.md -2026-07-06-sandbox.md: f2c703ba67bc16529605250d35ed181412f05494 -2026-07-06-sandbox.zh.md: ff4d4ed592dc4235903555528a029b4b295d972e +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes: + en: b36f59d0746e94f1 + zh: 0d0f8e19917a9eae +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/problem: + en: 045e61bb682755dc + zh: ac95eb64ce892f8d +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision: + en: f4748553d52935ff + zh: 1802a543c6d989ef +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/how-a-deployment-uses-it: + en: 956a2c069b1ac0b1 + zh: ebf91494b8107ced +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail: + en: a6d7884e4359af3a + zh: e72588705942000a +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/scope-grounding: + en: 0c09534b59e2063e + zh: 5225d6750d13b9d7 +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/the-seam-ctx-sandbox: + en: 2c98e8c0bd8a9ff1 + zh: 661b58f81f6e05c6 +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/local-backends-and-the-shipped-launcher: + en: 5c6bf38f958b07d0 + zh: 22bf9fac71eb643d +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/asynchronous-preparation: + en: 7bc0fab85c7c91d0 + zh: 3eafcde6b1e3249c +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/the-bash-consumer: + en: af561a23104227cd + zh: ac6fd59518d1bb55 +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/escalation-one-approved-wider-retry-after-a-denial: + en: 035640e276225e97 + zh: 09fd95921529369b +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/per-session-modes-the-session-log-as-the-store: + en: 6805c807f584961c + zh: 687fd4ad687e4dee +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/design-detail/in-process-tools: + en: 73cd47df9f2acbd0 + zh: 877db86c2a36a9ab +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/decision/testing: + en: c0189d491354eb48 + zh: ac68b07188402f9c +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/deferred-phases: + en: f28b530000b8495e + zh: f256b8b32c4ce4ef +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/alternatives-considered: + en: eabe577b837f3de2 + zh: 4ef0167c895766a6 +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/consequences: + en: c0d8279a677a0ef1 + zh: 3518fc05f8700c0b +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/faq: + en: de45c2a398b8abe6 + zh: 93be112960b40736 +/agent-note-the-subprocess-sandbox-confinement-seam-native-runners-escalation-and-per-session-modes/prior-art: + en: a51744b1cafca339 + zh: 1d27f49f1aa550af diff --git a/.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml b/.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml index 2d9a9b05e4..751b41f4c6 100644 --- a/.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-07-mcp-client-plugin.i18n.yaml @@ -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-07-07-mcp-client-plugin.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/feature/2026-07-07-mcp-client-plugin.md -2026-07-07-mcp-client-plugin.md: dd793b67bf2043fa88377d50837df40faadf3fbf -2026-07-07-mcp-client-plugin.zh.md: 5056118df0185f1e7ec2b1ea06818ed920d2af26 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools: + en: 7d41e632fd40efe0 + zh: 4c7f6410b74a5bd3 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/problem: + en: 7cef5ed5bc88fba5 + zh: 795917e3321148ab +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/package: + en: 90a6e5a22fa99a36 + zh: 4280a5feecd3e6c1 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/sdk: + en: f69bbd1cfca85fa0 + zh: 9b21abc7e3eeb2fd +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/scope: + en: 32cd57e8d3ea1ac1 + zh: 7c14401492f22c32 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/plugin-shape: + en: 3d6e4726e5c890a6 + zh: 888123ed412544a7 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/configuration: + en: a244e4d7a8294424 + zh: 4be5ed51345a660e +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/lifecycle: + en: b428a4e72dec4ba0 + zh: c070db6fdd2d3c7f +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/tool-discovery-and-registration: + en: 75da266ca8141a90 + zh: 078e3a969273ed9b +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/public-name-normalization: + en: eb0511bd6173c99c + zh: c5fc98231a733699 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/name-conflict-handling: + en: 88210585c857f934 + zh: fc0d90d572d6ba45 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/naming-invariants: + en: 1e2ce84605977339 + zh: 3b3c9d120c0262a7 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/tool-execution: + en: c82db842e7a6f3db + zh: ace9e266cd6c4203 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/subprocess-environment-stdio-transport: + en: d599a7db35e1f96d + zh: a2655e0410565c93 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/decision/disconnection-crash: + en: e8207a70c6511778 + zh: aa281be51d85be13 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 76136ef5249c23eb +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/mcp-server-side-expose-harness-tools-to-external-mcp-clients: + en: 831148b7e748eaa3 + zh: 845172ccc64d7a65 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/capability-seam-three-package-split-interface-impl-consumer: + en: caefc1146f9b2b16 + zh: 9c4a5d55019d8002 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/auto-reconnect-with-exponential-backoff: + en: e92d18530feb1ee3 + zh: 2fecc50b4b6a96d9 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/bridge-resources-and-prompts: + en: 606ee33502fa60cc + zh: 0c21afec01caf4c2 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/raw-model-facing-tool-names-with-an-optional-toolprefix: + en: ef886d275ac5734c + zh: 304c578e674f50a2 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/server-only-namespace-github-create-issue-no-mcp-marker: + en: d18be656bd334d18 + zh: b7cdc2d580e9f2ab +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/deriving-the-namespace-from-the-server-announced-serverinfo-name: + en: 17bc5d831e3d06a7 + zh: 6b9e2f5cd76d12f8 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/preserve-multiple-textblocks-in-tool-result: + en: 184f6d75be815400 + zh: a284afac1e2b80e2 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/replace-the-canonical-mcp-result-with-core-contentblock: + en: d5d253f8e466bab9 + zh: 7d93b7fa1c2219ed +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/add-a-generic-richcontent-service-or-perform-i-o-in-output-render: + en: 687c220df3767635 + zh: c87dd8700edc9291 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/alternatives-considered/let-each-image-returning-tool-special-case-ptc-mode-parents: + en: a5fc7b17970699ce + zh: 2d7bd23621f62597 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/testing: + en: 4bb5be21c1097a57 + zh: d12bf01bb70e1bc3 +/agent-note-mcp-client-plugin-connect-to-external-mcp-servers-and-bridge-their-tools/consequences: + en: ef35ec18568b38e5 + zh: ca85076585c2b787 diff --git a/.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.i18n.yaml b/.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.i18n.yaml index 2b37bdad0a..67063fa1b4 100644 --- a/.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-08-self-referential-cordis-toolset.i18n.yaml @@ -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-08-self-referential-cordis-toolset.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/feature/2026-07-08-self-referential-cordis-toolset.md -2026-07-08-self-referential-cordis-toolset.md: 278c71051de1fb897c8735b39dff0b66c43a5626 -2026-07-08-self-referential-cordis-toolset.zh.md: 8a8e197e197fb6b53b52426d5ad9a33fd09e78c9 +/agent-note-cordis-runtime-inspection-and-runner-isolation: + en: d96c123d1989b22b + zh: 4a53cdd763955f19 +/agent-note-cordis-runtime-inspection-and-runner-isolation/problem: + en: 29d1465c348331e9 + zh: 25dbc885f5d7ee7d +/agent-note-cordis-runtime-inspection-and-runner-isolation/decision: + en: 8a4cbb660f2409d7 + zh: 2219e39468e6baee +/agent-note-cordis-runtime-inspection-and-runner-isolation/alternatives-considered: + en: 637137a3b035c211 + zh: 5a667bfe2446a5f8 +/agent-note-cordis-runtime-inspection-and-runner-isolation/consequences: + en: a21f854954e01db6 + zh: c16bbe7c3580b394 diff --git a/.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.i18n.yaml b/.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.i18n.yaml index f317a3d223..4b82a34a31 100644 --- a/.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-10-parallel-tool-call-execution.i18n.yaml @@ -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-parallel-tool-call-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/feature/2026-07-10-parallel-tool-call-execution.md -2026-07-10-parallel-tool-call-execution.md: d5d26e03a2081569a8dba4de966201abc312d420 -2026-07-10-parallel-tool-call-execution.zh.md: 707428985c872dcbbc82f59124f0d60aef7f1090 +/agent-note-parallel-tool-call-execution-by-per-call-safety: + en: bbc8567dc50716d1 + zh: 4ddef348cc74b39c +/agent-note-parallel-tool-call-execution-by-per-call-safety/problem: + en: 41ffece5e72e022f + zh: e813a3efb9c12646 +/agent-note-parallel-tool-call-execution-by-per-call-safety/decision: + en: 532bb7268d9b93ce + zh: ad47162233222ab0 +/agent-note-parallel-tool-call-execution-by-per-call-safety/scheduling-and-ordering: + en: f0906d03fef98e7b + zh: f9e43c4c832c9a05 +/agent-note-parallel-tool-call-execution-by-per-call-safety/safety-contract: + en: 16c4ee08b65ead23 + zh: df80d6e49982615b +/agent-note-parallel-tool-call-execution-by-per-call-safety/configuration-and-declarations: + en: e112957ed8a48039 + zh: 37d63f9ea4968fb2 +/agent-note-parallel-tool-call-execution-by-per-call-safety/verification: + en: eb5a6aa84980f0ab + zh: eed2680a160e8ed2 +/agent-note-parallel-tool-call-execution-by-per-call-safety/alternatives-considered: + en: 44f8fb5851ba4e39 + zh: 4d75c937ac5277f7 +/agent-note-parallel-tool-call-execution-by-per-call-safety/consequences: + en: 5e5b2a1c7d850f83 + zh: b63311f28eb69366 diff --git a/.agents/notes/implemented/feature/2026-07-12-subagent-persona-tool-filter-and-depth.i18n.yaml b/.agents/notes/implemented/feature/2026-07-12-subagent-persona-tool-filter-and-depth.i18n.yaml index 13820af392..431d5f60ec 100644 --- a/.agents/notes/implemented/feature/2026-07-12-subagent-persona-tool-filter-and-depth.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-12-subagent-persona-tool-filter-and-depth.i18n.yaml @@ -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-12-subagent-persona-tool-filter-and-depth.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/feature/2026-07-12-subagent-persona-tool-filter-and-depth.md -2026-07-12-subagent-persona-tool-filter-and-depth.md: f848b92a7a5647995330e2bf26796dde1b43a3f8 -2026-07-12-subagent-persona-tool-filter-and-depth.zh.md: 3360b27c9feb5950cc3f338c89e48a4c902e2ac8 +/agent-note-configure-subagent-persona-tool-visibility-and-depth: + en: ea51f1e98afc88b7 + zh: 6aa0101b8de5097f +/agent-note-configure-subagent-persona-tool-visibility-and-depth/problem: + en: 311bc04b9c36ab53 + zh: 0c52e6493e9350a5 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision: + en: 79b3fcfaaaaccf9e + zh: 0287bfb41c7b9707 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision/persona-is-a-scoped-shadow: + en: 8b299c99d26aa5c3 + zh: 6956efbd236cef8e +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision/tool-filtering-is-one-live-global-view-rule: + en: a9fe46283ea28722 + zh: 7b7d1be7c070b893 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision/depth-is-an-absolute-tree-cap: + en: 9145bec4e3f7eb5b + zh: 986276925cb064d9 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision/capability-gating-keeps-providers-honest: + en: 5334afafefdb0f59 + zh: 7e96c9a08bbc3d1a +/agent-note-configure-subagent-persona-tool-visibility-and-depth/decision/unpublished-setup-makes-the-first-request-correct: + en: 3c988dfff07c8da3 + zh: 8ce2fbcc438e7dd8 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/visibility-is-not-authority: + en: d0db5310a87ff8e4 + zh: 4b9f502238cd4bae +/agent-note-configure-subagent-persona-tool-visibility-and-depth/alternatives-considered: + en: 78ae41331d8fcc3e + zh: a93ee10b3e30c267 +/agent-note-configure-subagent-persona-tool-visibility-and-depth/consequences: + en: d5f05d63b7a01dd8 + zh: f0be1e88b06d8cc9 diff --git a/.agents/notes/implemented/feature/2026-07-14-cross-family-fs-sandbox.i18n.yaml b/.agents/notes/implemented/feature/2026-07-14-cross-family-fs-sandbox.i18n.yaml index 021837de21..938869414c 100644 --- a/.agents/notes/implemented/feature/2026-07-14-cross-family-fs-sandbox.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-14-cross-family-fs-sandbox.i18n.yaml @@ -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-cross-family-fs-sandbox.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/feature/2026-07-14-cross-family-fs-sandbox.md -2026-07-14-cross-family-fs-sandbox.md: 0fe1d4078797eceb9f3f0f9c319bba62acd6b08c -2026-07-14-cross-family-fs-sandbox.zh.md: 021923c7e3c4653991377cd9b5bccf18c9a4bf65 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity: + en: d971839c319030fa + zh: 29d8cc0ec85337af +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/problem: + en: 2ce70b520caa28b5 + zh: 6f023332dd48bf83 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision: + en: dd825d09d6d850ed + zh: 0c355b56ff17d099 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision/ctx-sandboxpolicy-one-home-for-mode-and-workspace-root: + en: e8ef62a480614c1a + zh: 90c29f6845e2f437 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision/dsh-fs-sandbox-enforcement-inside-the-provider: + en: 077a767b86dd7860 + zh: e8797afed2f65fa6 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision/tool-parity-one-denial-marker-one-escalation-flow: + en: f1fed3aaf3a1482c + zh: d4bc7989477b3a0b +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision/the-enforcement-point-provider-not-intent-gate: + en: 98549276110ac457 + zh: d680c26086c68a8c +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/decision/out-of-scope: + en: 9157891a477f17bd + zh: 58d926d0b86bc4fd +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/alternatives-considered: + en: 669431ca494a7783 + zh: e875a63c553135e1 +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/consequences: + en: 3848066c5a8c56ef + zh: 048cdf6cb8dbde4d +/agent-note-cross-family-file-sandbox-one-policy-home-a-sandboxed-fs-provider-and-fs-escalation-parity/testing: + en: dc226f5a587ff7d4 + zh: 55f5d937d6bc86e9 diff --git a/.agents/notes/implemented/feature/2026-07-16-harness-level-loop.i18n.yaml b/.agents/notes/implemented/feature/2026-07-16-harness-level-loop.i18n.yaml index 550d23413e..624d9c4025 100644 --- a/.agents/notes/implemented/feature/2026-07-16-harness-level-loop.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-16-harness-level-loop.i18n.yaml @@ -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-16-harness-level-loop.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/feature/2026-07-16-harness-level-loop.md -2026-07-16-harness-level-loop.md: 54adc1aad63e8968c9e0d276a075cd42abf021fd -2026-07-16-harness-level-loop.zh.md: 9e1a7e73fbf1fab1807b59b3b7816cdfcc6f45df +/agent-note-harness-level-goal-based-execution: + en: 20d103f4160b124d + zh: 36e888ebeec1d366 +/agent-note-harness-level-goal-based-execution/problem: + en: b0294f40b8915f39 + zh: 786bcecd8e0df343 +/agent-note-harness-level-goal-based-execution/decision: + en: f9d2e5774bca2d5b + zh: 375683705a21f16c +/agent-note-harness-level-goal-based-execution/decision/vocabulary-and-policy-boundary: + en: 213a55ec1ef4dd58 + zh: 56076b8524188153 +/agent-note-harness-level-goal-based-execution/decision/package-topology-and-owning-verbs: + en: fb8e9df7705a2293 + zh: ffe7040bdad4fa64 +/agent-note-harness-level-goal-based-execution/decision/durable-goal-state-and-live-authority: + en: ef386ad58ff3bcaf + zh: 9517886000faf515 +/agent-note-harness-level-goal-based-execution/decision/same-session-continuation: + en: 669447319e89b06a + zh: 2a08e6a8622aabd1 +/agent-note-harness-level-goal-based-execution/decision/human-and-model-interactions: + en: 8923f16b40a2f331 + zh: 697417b21f475c1e +/agent-note-harness-level-goal-based-execution/decision/fresh-agent-ralph-execution: + en: 3cc9d8fee8dfbd41 + zh: 2c4bf8aab739b0e8 +/agent-note-harness-level-goal-based-execution/decision/external-design-lineage: + en: 4a7b290a2649720c + zh: 1a2f32667061e7b4 +/agent-note-harness-level-goal-based-execution/decision/verification: + en: cb538a23eb170008 + zh: fdd00c5ca70918a1 +/agent-note-harness-level-goal-based-execution/alternatives-considered: + en: 5f4c2ba58601587c + zh: a7e2028dd8bc23c1 +/agent-note-harness-level-goal-based-execution/consequences: + en: 31d109628ee650f4 + zh: 2278dd884e6a088a +/agent-note-harness-level-goal-based-execution/known-limitations-and-deferred-work: + en: 2bc0e7709c516ed0 + zh: 614b4ddf8ca6ebc6 diff --git a/.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml b/.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml index b1b7365597..ac9be41f4d 100644 --- a/.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-16-persistent-pty-sessions.i18n.yaml @@ -1,6 +1,49 @@ -# 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-persistent-pty-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/feature/2026-07-16-persistent-pty-sessions.md -2026-07-16-persistent-pty-sessions.md: d62587ced78be75de121fe907ca258d07a2830a1 -2026-07-16-persistent-pty-sessions.zh.md: a26c3ed852b3a18842585e19ecb2a6994f8d9117 +/agent-note-persistent-pty-sessions: + en: c7796dc579fe7fb3 + zh: 2126be0b08124ca5 +/agent-note-persistent-pty-sessions/problem: + en: cd408e9b6e9705e8 + zh: 7811f9216b6961fa +/agent-note-persistent-pty-sessions/decision: + en: 5656c117648160c8 + zh: 7f7c3de8e2ea6d9a +/agent-note-persistent-pty-sessions/decision/package-topology: + en: 0187ac573d06a360 + zh: 13e08f4f22bacfff +/agent-note-persistent-pty-sessions/decision/agent-ownership-and-identity: + en: 9bf79081f102eb51 + zh: 34855888f0614b47 +/agent-note-persistent-pty-sessions/decision/security-and-process-boundary: + en: 10d84442483e1d40 + zh: c970ae058e2e0f6d +/agent-note-persistent-pty-sessions/decision/six-model-facing-tools: + en: b92715f36550c728 + zh: e18d7e0e2363347a +/agent-note-persistent-pty-sessions/decision/local-readiness-detection: + en: cd8b4032a624c277 + zh: 47f0d8c15f1c9cad +/agent-note-persistent-pty-sessions/decision/model-visible-output-and-durability: + en: 1b504ab41b47216d + zh: 8fb3d360b3a4e6a1 +/agent-note-persistent-pty-sessions/decision/process-tree-teardown: + en: e96a972845bc3513 + zh: d76d7dfb80985e9d +/agent-note-persistent-pty-sessions/decision/composition-and-rollout: + en: db49b6dff73d8772 + zh: 1f2182fd2c7dc3af +/agent-note-persistent-pty-sessions/decision/deferred-work: + en: c0ae6d86dd5c0635 + zh: 737bd3fda903d5e3 +/agent-note-persistent-pty-sessions/alternatives-considered: + en: cda0998b2bb05b7d + zh: 7cc5683a6dfd64be +/agent-note-persistent-pty-sessions/verification: + en: 08cd5f0369ee69e9 + zh: 3e9b13ba1f8b6bff +/agent-note-persistent-pty-sessions/consequences: + en: f8784b2ca03fc80a + zh: e20e38014292f86a diff --git a/.agents/notes/implemented/feature/2026-07-19-model-facing-goal-tools.i18n.yaml b/.agents/notes/implemented/feature/2026-07-19-model-facing-goal-tools.i18n.yaml index 3a30f6624d..c67f4a0d57 100644 --- a/.agents/notes/implemented/feature/2026-07-19-model-facing-goal-tools.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-19-model-facing-goal-tools.i18n.yaml @@ -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-model-facing-goal-tools.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/feature/2026-07-19-model-facing-goal-tools.md -2026-07-19-model-facing-goal-tools.md: 2c05c8aa0ee2caecb0264fa87984085b3df5d785 -2026-07-19-model-facing-goal-tools.zh.md: f16055e52e4a3d6a4db423699a36929f6f8c4cd2 +/agent-note-model-facing-same-session-goal-tools: + en: 4d9b039620654dd6 + zh: e8703b6a1723f910 +/agent-note-model-facing-same-session-goal-tools/problem: + en: f8e860155bfc0b43 + zh: 3279c90b622e8c08 +/agent-note-model-facing-same-session-goal-tools/decision: + en: 0ab1e1c40cb2dac9 + zh: b4180b6681c130b2 +/agent-note-model-facing-same-session-goal-tools/decision/tools-and-model-contract: + en: 288a819f644611c9 + zh: d6bd7986ba091519 +/agent-note-model-facing-same-session-goal-tools/decision/execution-authority: + en: 63a9e7e85303b9f1 + zh: d3f1d0c225103cfe +/agent-note-model-facing-same-session-goal-tools/decision/blocking-threshold: + en: 398de9518db40d11 + zh: b7f36c4061ca7e78 +/agent-note-model-facing-same-session-goal-tools/testing: + en: 92650dd6648ca455 + zh: 5b57276a6a983fea +/agent-note-model-facing-same-session-goal-tools/alternatives-considered: + en: e84b9fc4823bcc1e + zh: a125628e4746bf50 +/agent-note-model-facing-same-session-goal-tools/consequences: + en: e254571a176b37e5 + zh: 01f76aff35e3618d +/agent-note-model-facing-same-session-goal-tools/known-limitations-and-deferred-work: + en: 5b043a930afd4a13 + zh: d91e8a61de2590a4 diff --git a/.agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.i18n.yaml b/.agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.i18n.yaml index 62b98a691a..722d00ad1a 100644 --- a/.agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-19-persisted-same-session-goal-domain.i18n.yaml @@ -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-persisted-same-session-goal-domain.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/feature/2026-07-19-persisted-same-session-goal-domain.md -2026-07-19-persisted-same-session-goal-domain.md: 4ddc02c3bd3b7bbf04b3c6867a76673431309460 -2026-07-19-persisted-same-session-goal-domain.zh.md: 2bb937b0f637e54ab6d9a6e10ebe237849e08171 +/agent-note-persisted-same-session-goal-domain: + en: 05f6641270399579 + zh: 962259d5bd3b3e16 +/agent-note-persisted-same-session-goal-domain/problem: + en: 45e351264fabe761 + zh: 6513999a7d83a528 +/agent-note-persisted-same-session-goal-domain/decision: + en: 7efc52c6215aa755 + zh: e570a4f82e69300b +/agent-note-persisted-same-session-goal-domain/decision/durable-record-and-replay: + en: d4520ec456f4023a + zh: 2ffcb155955539e5 +/agent-note-persisted-same-session-goal-domain/decision/lifecycle-and-live-activation: + en: d68c058ff7a49fee + zh: cbcdbce1aade7758 +/agent-note-persisted-same-session-goal-domain/decision/service-boundary: + en: 0bff035a2664e7c0 + zh: ba303bd3ec64151b +/agent-note-persisted-same-session-goal-domain/testing: + en: 9fb97674d1dd45ac + zh: c56df41a9aa6767a +/agent-note-persisted-same-session-goal-domain/alternatives-considered: + en: b8bae793bb1c922d + zh: 4abb28a01b1fc7f3 +/agent-note-persisted-same-session-goal-domain/consequences: + en: fa46d172b9d01b52 + zh: 54c40631d1719624 +/agent-note-persisted-same-session-goal-domain/known-limitations-and-deferred-work: + en: 21f5c50b4eafa028 + zh: 4cad975fb10501bd diff --git a/.agents/notes/implemented/feature/2026-07-19-plugin-command-registration.i18n.yaml b/.agents/notes/implemented/feature/2026-07-19-plugin-command-registration.i18n.yaml index 8a975fd9bd..a8a8205207 100644 --- a/.agents/notes/implemented/feature/2026-07-19-plugin-command-registration.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-19-plugin-command-registration.i18n.yaml @@ -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-19-plugin-command-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/feature/2026-07-19-plugin-command-registration.md -2026-07-19-plugin-command-registration.md: f5033c6ac52dd09371d67ba5b54f0aa2cdba8024 -2026-07-19-plugin-command-registration.zh.md: 55f3a58f0e1f4c1ee6dfd7105e968a1a466f7806 +/agent-note-plugin-owned-human-command-registration: + en: f1509f79bd9e2445 + zh: 30f62b9b4f611f9d +/agent-note-plugin-owned-human-command-registration/problem: + en: 628dcc0bda181677 + zh: 71b110588f89c2b4 +/agent-note-plugin-owned-human-command-registration/decision: + en: acf2742722ab7c85 + zh: e0bdbd6fd0bf51b1 +/agent-note-plugin-owned-human-command-registration/decision/registry-contract: + en: 1b3daffaa9a8b56e + zh: fa99bb6bc553cafb +/agent-note-plugin-owned-human-command-registration/decision/scope-and-lifecycle: + en: 6d55a0d4b1b9606a + zh: 34bf959ef332630f +/agent-note-plugin-owned-human-command-registration/decision/direct-dispatch-and-cancellation: + en: 074ee61a689493cb + zh: 580035e2a4c82d4f +/agent-note-plugin-owned-human-command-registration/decision/tui-mapping: + en: 00f0f8b697d9e1ff + zh: 9c4ceb0024e50835 +/agent-note-plugin-owned-human-command-registration/testing: + en: 0679c206796636a6 + zh: ca2cc5df6aa3aa2e +/agent-note-plugin-owned-human-command-registration/alternatives-considered: + en: ffb2f060314a17b2 + zh: e7707cf5faf80227 +/agent-note-plugin-owned-human-command-registration/consequences: + en: 6b8525a4ca3213a8 + zh: 286a336a68669f72 +/agent-note-plugin-owned-human-command-registration/known-limitations-and-deferred-work: + en: 5e2417d5b1237526 + zh: dbfeea7c7ac38cf0 diff --git a/.agents/notes/implemented/feature/2026-07-20-ptc-typed-tool-returns.i18n.yaml b/.agents/notes/implemented/feature/2026-07-20-ptc-typed-tool-returns.i18n.yaml index b083ea6a1e..1d59d0072b 100644 --- a/.agents/notes/implemented/feature/2026-07-20-ptc-typed-tool-returns.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-20-ptc-typed-tool-returns.i18n.yaml @@ -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-20-ptc-typed-tool-returns.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/feature/2026-07-20-ptc-typed-tool-returns.md -2026-07-20-ptc-typed-tool-returns.md: 08e760b95a40386bccc8c7a2722d289da10e3dff -2026-07-20-ptc-typed-tool-returns.zh.md: c2883740e1eeadbf6fb2413496104ff08a9bd1f7 +/agent-note-typed-tool-returns-in-ptc-mode: + en: 4b7c45b382db3a40 + zh: 96e9210446ec35ed +/agent-note-typed-tool-returns-in-ptc-mode/problem: + en: cf7610bb16ff04af + zh: 73b00b539dbaecd9 +/agent-note-typed-tool-returns-in-ptc-mode/decision: + en: 55bb889404c89f4a + zh: f9a9091569fbf7b4 +/agent-note-typed-tool-returns-in-ptc-mode/decision/generated-sdk: + en: 30583e9ac6715952 + zh: 3a85c9482abf574c +/agent-note-typed-tool-returns-in-ptc-mode/decision/binding-values-and-failures: + en: ecb95cafa2dc1297 + zh: ccdf300ca936ca12 +/agent-note-typed-tool-returns-in-ptc-mode/decision/outer-result-and-output-ledger: + en: d907d0a8205157e1 + zh: 1ed99168266a7ca4 +/agent-note-typed-tool-returns-in-ptc-mode/decision/typed-handles-and-lifetime: + en: c5d9997ae7c7362d + zh: 1da8883d17d2748e +/agent-note-typed-tool-returns-in-ptc-mode/decision/persistence-metadata-and-spill: + en: 4d1e5f83f15f99cc + zh: b7f41a084cb23745 +/agent-note-typed-tool-returns-in-ptc-mode/testing: + en: 728513c779f031f8 + zh: f6d869f18add7242 +/agent-note-typed-tool-returns-in-ptc-mode/alternatives-considered: + en: dedd87b9b35d8fab + zh: 78db4c7e8c4e5f61 +/agent-note-typed-tool-returns-in-ptc-mode/consequences: + en: 7c2ee65532ab76f8 + zh: 3fb074c69909d390 +/agent-note-typed-tool-returns-in-ptc-mode/known-limitations-and-deferred-work: + en: a42af629ad6872cc + zh: 41e5c0bb3de0ae4d diff --git a/.agents/notes/implemented/feature/2026-07-21-follow-instruction-symlinks.i18n.yaml b/.agents/notes/implemented/feature/2026-07-21-follow-instruction-symlinks.i18n.yaml index 77a58fcc17..b85229745f 100644 --- a/.agents/notes/implemented/feature/2026-07-21-follow-instruction-symlinks.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-21-follow-instruction-symlinks.i18n.yaml @@ -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-21-follow-instruction-symlinks.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/feature/2026-07-21-follow-instruction-symlinks.md -2026-07-21-follow-instruction-symlinks.md: a6b4cb5d465d2ebf7088d8e3a04fbb32503e2e15 -2026-07-21-follow-instruction-symlinks.zh.md: a44f89d8ec3c636a875059aabe0683c6bf1da851 +/agent-note-follow-symlinked-instruction-files: + en: aa37067267aa70ff + zh: 75aff9256b49199f +/agent-note-follow-symlinked-instruction-files/problem: + en: 81e1947150ceb054 + zh: 97575f09a9e57db4 +/agent-note-follow-symlinked-instruction-files/decision: + en: 911b5bb48a95afd0 + zh: 1a38e50602b86bc4 +/agent-note-follow-symlinked-instruction-files/decision/trust-boundary-and-residual-risk: + en: 31ea638766861600 + zh: a270db3c868585b0 +/agent-note-follow-symlinked-instruction-files/alternatives-considered: + en: cf5e62b7cae4f0dc + zh: ff7d5821958efeac +/agent-note-follow-symlinked-instruction-files/consequences: + en: b0ee45a9e4d95dd5 + zh: 338d3758f400a651 diff --git a/.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.i18n.yaml b/.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.i18n.yaml index c193f39ddd..8f2fe2b211 100644 --- a/.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-23-session-telemetry-otel-revival.i18n.yaml @@ -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-23-session-telemetry-otel-revival.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/feature/2026-07-23-session-telemetry-otel-revival.md -2026-07-23-session-telemetry-otel-revival.md: dc52ee87ef78107d674e49af3c20c255266f0414 -2026-07-23-session-telemetry-otel-revival.zh.md: f647ea289684eca648fe797011daad858612546f +/agent-note-session-telemetry-seam-with-mandatory-redaction-and-the-otel-backend: + en: 36222884462b86d2 + zh: 2f834557e3fa3baa +/agent-note-session-telemetry-seam-with-mandatory-redaction-and-the-otel-backend/problem: + en: d3383b495424d118 + zh: 4e6ffc8ebfa7f741 +/agent-note-session-telemetry-seam-with-mandatory-redaction-and-the-otel-backend/decision: + en: 85b950a67315023c + zh: cb4c08338c30b226 +/agent-note-session-telemetry-seam-with-mandatory-redaction-and-the-otel-backend/alternatives-considered: + en: 01838eefca2bc117 + zh: fc71f5449d095b27 +/agent-note-session-telemetry-seam-with-mandatory-redaction-and-the-otel-backend/consequences: + en: 487d440abfc7e3a9 + zh: a31d6abc8a0176c6 diff --git a/.agents/notes/implemented/feature/2026-07-25-subagent-policy-inheritance.i18n.yaml b/.agents/notes/implemented/feature/2026-07-25-subagent-policy-inheritance.i18n.yaml index 892090c52d..eef9430a5a 100644 --- a/.agents/notes/implemented/feature/2026-07-25-subagent-policy-inheritance.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-25-subagent-policy-inheritance.i18n.yaml @@ -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-25-subagent-policy-inheritance.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/feature/2026-07-25-subagent-policy-inheritance.md -2026-07-25-subagent-policy-inheritance.md: 8ca63bd511a275acbfda5ddee8cb50af51c348a1 -2026-07-25-subagent-policy-inheritance.zh.md: 630c69274e8e9cba07a6152395149757be3d6560 +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override: + en: 02b7ba888360c75c + zh: 42a6d20927622c9c +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override/problem: + en: 476b4a1b9ada2d8a + zh: 15b8051d22bb1dd0 +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override/decision: + en: dc11e7e52cdd4704 + zh: e000adedb13f2a98 +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override/decision/what-a-blocked-child-experiences: + en: 3b6ff196a06c2420 + zh: c04cb8bd81eb1c4b +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override/alternatives-considered: + en: 2f659b5b3b6faa21 + zh: c3712d0b6f8903c9 +/agent-note-in-process-subagent-policy-inheritance-the-child-starts-under-the-parent-s-sandbox-override/consequences: + en: 1b0a242aa33a8005 + zh: 426f83e118771b8e diff --git a/.agents/notes/implemented/feature/2026-07-26-ptc-live-parallel-dispatch.i18n.yaml b/.agents/notes/implemented/feature/2026-07-26-ptc-live-parallel-dispatch.i18n.yaml index ae720a62ac..07e8978506 100644 --- a/.agents/notes/implemented/feature/2026-07-26-ptc-live-parallel-dispatch.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-26-ptc-live-parallel-dispatch.i18n.yaml @@ -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-26-ptc-live-parallel-dispatch.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/feature/2026-07-26-ptc-live-parallel-dispatch.md -2026-07-26-ptc-live-parallel-dispatch.md: f064314098af9c074f7cd06dc9ceea3df4c91c76 -2026-07-26-ptc-live-parallel-dispatch.zh.md: 70cbebcdc30c5771a2c29f36b588232822e19269 +/agent-note-ptc-mode-live-dispatch-lifecycle-and-native-contract-parallelism: + en: f546683c54ae7d6b + zh: 1c0760c5f49f0188 +/agent-note-ptc-mode-live-dispatch-lifecycle-and-native-contract-parallelism/problem: + en: ce16b44b1db07ec0 + zh: 30681dab84948cd8 +/agent-note-ptc-mode-live-dispatch-lifecycle-and-native-contract-parallelism/decision: + en: 7ac907f773ff9d50 + zh: 86982428baf83cde +/agent-note-ptc-mode-live-dispatch-lifecycle-and-native-contract-parallelism/alternatives-considered: + en: b015fa95b46e5fd5 + zh: b4fe283a1ab598c1 +/agent-note-ptc-mode-live-dispatch-lifecycle-and-native-contract-parallelism/consequences: + en: d16ba3a88fa7d528 + zh: 8c374a14a4f34cfe diff --git a/.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml b/.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml index 21f75ab4b4..770368862d 100644 --- a/.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-27-web-subagent-conversations.i18n.yaml @@ -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-27-web-subagent-conversations.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/feature/2026-07-27-web-subagent-conversations.md -2026-07-27-web-subagent-conversations.md: 3798a5a2e5deb8b3801298def31c3a1890877796 -2026-07-27-web-subagent-conversations.zh.md: 4531528dd2a58baff3aaeaf53f20e037fce6cec4 +/agent-note-web-subagent-catalog-and-human-continuation: + en: c6373db2300cb803 + zh: 4d0589f21ec284ff +/agent-note-web-subagent-catalog-and-human-continuation/problem: + en: dfdbe64d34f9e05b + zh: 4cb7a92a6d3dc3e3 +/agent-note-web-subagent-catalog-and-human-continuation/decision: + en: 8892eea7f62d45ed + zh: 18f64966ff53e38b +/agent-note-web-subagent-catalog-and-human-continuation/design-context: + en: 3c44fc5af90bc807 + zh: 478538d028a52858 +/agent-note-web-subagent-catalog-and-human-continuation/product-contract: + en: 2060d607d1cd1ef3 + zh: e7100887358625c4 +/agent-note-web-subagent-catalog-and-human-continuation/host-adapter-and-wire-contract: + en: e0e82599b0a8d3bf + zh: e671e1f0f98795b4 +/agent-note-web-subagent-catalog-and-human-continuation/client-object-layer-and-presentation: + en: c0c891d86b1f7e1e + zh: c7b8da2bee81755d +/agent-note-web-subagent-catalog-and-human-continuation/default-web-assembly: + en: 6d4d8db99535aa18 + zh: 803554b55a67acb1 +/agent-note-web-subagent-catalog-and-human-continuation/alternatives-considered: + en: 427f0a8ace8ad692 + zh: 876771621858f77d +/agent-note-web-subagent-catalog-and-human-continuation/testing: + en: 0c2f7f5cc473ecff + zh: 00b2c22e109b3429 +/agent-note-web-subagent-catalog-and-human-continuation/consequences: + en: 143fc76c6d09e8fb + zh: 01a042fb32b0d6e0 diff --git a/.agents/notes/implemented/feature/2026-07-27-workspace-registration-deletion.i18n.yaml b/.agents/notes/implemented/feature/2026-07-27-workspace-registration-deletion.i18n.yaml index ff57ba5953..ff719e7b97 100644 --- a/.agents/notes/implemented/feature/2026-07-27-workspace-registration-deletion.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-27-workspace-registration-deletion.i18n.yaml @@ -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-27-workspace-registration-deletion.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/feature/2026-07-27-workspace-registration-deletion.md -2026-07-27-workspace-registration-deletion.md: 1d9804cfc4e2d44ea6c44f69b69dd6b10578f08a -2026-07-27-workspace-registration-deletion.zh.md: 54e10b67a7607e32b08609fe00191da87d75f7e8 +/agent-note-workspace-registration-deletion: + en: 68262d0cd61db2ae + zh: bb2f78757972aae6 +/agent-note-workspace-registration-deletion/problem: + en: a51dbe0190d4dff0 + zh: 25b6c3083ee60627 +/agent-note-workspace-registration-deletion/decision: + en: 70182cd2979bdfd6 + zh: a6580a23cfbe6c07 +/agent-note-workspace-registration-deletion/durable-commit-and-publication: + en: f97d526274c3608b + zh: b0ae161f4e9febb8 +/agent-note-workspace-registration-deletion/client-convergence: + en: 84e56775e22ecf23 + zh: ab146e3179868efb +/agent-note-workspace-registration-deletion/confirmation-interaction: + en: 95178832030a9697 + zh: 3a2bd50680ed0c97 +/agent-note-workspace-registration-deletion/alternatives-considered: + en: d7b866f763db5364 + zh: 5e0865d42522d189 +/agent-note-workspace-registration-deletion/verification: + en: a7e98d39e3ffdba7 + zh: 9c4f8168e3fff83e +/agent-note-workspace-registration-deletion/consequences: + en: 3a50bfb5d93f6ef7 + zh: 80b8dd19b2d50b16 diff --git a/.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.i18n.yaml b/.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.i18n.yaml index 1369b927e3..e3f1e8bb08 100644 --- a/.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-28-continuable-subagent-conversations.i18n.yaml @@ -1,6 +1,52 @@ -# 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-continuable-subagent-conversations.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/feature/2026-07-28-continuable-subagent-conversations.md -2026-07-28-continuable-subagent-conversations.md: a30966c4d614fda837bc2bac95f6b6e411de9791 -2026-07-28-continuable-subagent-conversations.zh.md: 59a02a211e0ca861f819a7524e4d69ad09acdbbc +/agent-note-continuable-subagents: + en: 14c7d31032237174 + zh: ac2666670a0ca5ab +/agent-note-continuable-subagents/problem: + en: a72071eeedb77402 + zh: 818d16ce429fd610 +/agent-note-continuable-subagents/decision: + en: 445a8c9783aad214 + zh: 9b5c576bb76100a4 +/agent-note-continuable-subagents/decision/materialization-and-public-operations: + en: c7c55e5738a7c0d8 + zh: 54849d8938f7c77f +/agent-note-continuable-subagents/decision/durable-session-and-live-activation: + en: 92fd7302d4c8f2e5 + zh: e821764c07070ebc +/agent-note-continuable-subagents/decision/activation-lifecycle: + en: 68215c0ae5628608 + zh: fdf038decac8f07a +/agent-note-continuable-subagents/decision/one-inbox-and-follow-up-delivery: + en: 065399ce5b1de59e + zh: b60af3c37851323e +/agent-note-continuable-subagents/decision/child-ownership: + en: 503fb4311cd94674 + zh: 376fa98ec4d22b20 +/agent-note-continuable-subagents/decision/adjacent-agent-messaging: + en: a6899f5a82d5dceb + zh: 0671b89b2dca9c4e +/agent-note-continuable-subagents/decision/agent-and-human-scheduling: + en: 8c861f3846fef1b5 + zh: 8cc3d668d73c7748 +/agent-note-continuable-subagents/decision/authority-and-recorded-sender-identity: + en: f5ba7e9c5339ceef + zh: 31ae1b2f57e44463 +/agent-note-continuable-subagents/decision/durability-disposal-and-recovery: + en: 276626f3b6d4a080 + zh: 806f9c4786bc4004 +/agent-note-continuable-subagents/decision/scope: + en: a47eed90de23351c + zh: 2351e4acbfe4c8e1 +/agent-note-continuable-subagents/alternatives-considered: + en: 485aef32231dac62 + zh: 5e2c103afb3e2d6f +/agent-note-continuable-subagents/consequences: + en: fa5a6b4bf262b8dd + zh: 4bffd7b8cc2efae5 +/agent-note-continuable-subagents/consequences/accepted-costs: + en: 4d4330ee4d7c3f31 + zh: 8fd11ba0625fb76d diff --git a/.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.i18n.yaml b/.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.i18n.yaml index 4e16712b96..55f7304827 100644 --- a/.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-28-skill-invocation-policy.i18n.yaml @@ -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-skill-invocation-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/feature/2026-07-28-skill-invocation-policy.md -2026-07-28-skill-invocation-policy.md: 614a0058e3887c6977cf92b4bcf7d15557215996 -2026-07-28-skill-invocation-policy.zh.md: a49cb96ea63af72d5abc41406097fcfb1b06739a +/agent-note-independent-model-and-user-skill-invocation-policy: + en: d5f87e846ef041b1 + zh: 273e87043d19a709 +/agent-note-independent-model-and-user-skill-invocation-policy/problem: + en: 9fc564115fca4b22 + zh: 3a414ee5c1f7f842 +/agent-note-independent-model-and-user-skill-invocation-policy/decision: + en: dbd7aabf9fdd7c37 + zh: d71a2fd355e30fd1 +/agent-note-independent-model-and-user-skill-invocation-policy/alternatives-considered: + en: fdffcd101a494c4a + zh: db802bf9bc04ae74 +/agent-note-independent-model-and-user-skill-invocation-policy/consequences: + en: 94071073367396eb + zh: 5afca22d8140b5c0 diff --git a/.agents/notes/implemented/feature/2026-07-30-queued-manual-compaction.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-queued-manual-compaction.i18n.yaml index 73f3dd021b..9da56d634b 100644 --- a/.agents/notes/implemented/feature/2026-07-30-queued-manual-compaction.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-30-queued-manual-compaction.i18n.yaml @@ -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-30-queued-manual-compaction.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/feature/2026-07-30-queued-manual-compaction.md -2026-07-30-queued-manual-compaction.md: 3efd1a490148b34b0ee76800ed795dfaab280743 -2026-07-30-queued-manual-compaction.zh.md: 2da3f494afcdb0e0db47a0adb2e2a6101f7ef2e6 +/agent-note-queued-manual-compaction-with-one-durable-lock: + en: 45504a64618db51a + zh: f8dfebaf42ee4ddf +/agent-note-queued-manual-compaction-with-one-durable-lock/problem: + en: ffd033e0cea4b612 + zh: 63fa18871f038eb7 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/compact-is-a-command-over-a-backend-independent-seam: + en: a8631732e038e08d + zh: 68cb705f38ddfa57 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/idle-maintenance-is-synchronously-claimed: + en: a11c700f32838561 + zh: c20636c5f7efabaf +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/one-parameterized-transaction-owns-every-bracket: + en: 7b75672fafc370c9 + zh: 4fb473856c9c7265 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/bracket-first-deliberately-differs-from-the-surveyed-implementations: + en: 309671a79b437033 + zh: 86e0f366aed73c35 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/markers-are-time-points-not-an-event-container: + en: e9d8043178dc946f + zh: 56808150ba2ab275 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/end-seed-distinguishes-live-and-stale-orphans: + en: cc767e216225e117 + zh: 4ec7dbc179f96c37 +/agent-note-queued-manual-compaction-with-one-durable-lock/decision/reference-implementation-boundaries: + en: 97b121c53b8f3b68 + zh: 13d86db92c30bef1 +/agent-note-queued-manual-compaction-with-one-durable-lock/alternatives-considered: + en: f1c5bae090425598 + zh: 60a30f851d85dfb0 +/agent-note-queued-manual-compaction-with-one-durable-lock/verification: + en: 37587419460fcf36 + zh: e45c752f93d5a87e +/agent-note-queued-manual-compaction-with-one-durable-lock/consequences: + en: b8c71ea1d1db7b8e + zh: 0d276bb8317ada91 diff --git a/.agents/notes/implemented/feature/2026-07-30-web-remote-markdown-images.i18n.yaml b/.agents/notes/implemented/feature/2026-07-30-web-remote-markdown-images.i18n.yaml index afe776d402..aea31db0d2 100644 --- a/.agents/notes/implemented/feature/2026-07-30-web-remote-markdown-images.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-30-web-remote-markdown-images.i18n.yaml @@ -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-web-remote-markdown-images.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/feature/2026-07-30-web-remote-markdown-images.md -2026-07-30-web-remote-markdown-images.md: 23dc699aab87597b7b5bfee83d0d745d4798303e -2026-07-30-web-remote-markdown-images.zh.md: 54db9b25e9f558d77c84bb67c05fadea2c9086ac +/agent-note-remote-web-markdown-images: + en: a11eadff0703761d + zh: 59841eaf2993b7c4 +/agent-note-remote-web-markdown-images/problem: + en: 97447c93b654eda7 + zh: 456a3ceed4967d0a +/agent-note-remote-web-markdown-images/decision: + en: 8dfbdb81dff9cae3 + zh: 217042998b65c158 +/agent-note-remote-web-markdown-images/alternatives-considered: + en: 32a4116e8ffc4b16 + zh: 59dd991fede9ac71 +/agent-note-remote-web-markdown-images/consequences: + en: 12b97c75c5d19308 + zh: ee8102b7d01e579b diff --git a/.agents/notes/implemented/feature/2026-07-31-even-out-shipped-tool-rosters.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-even-out-shipped-tool-rosters.i18n.yaml index 1f490bce21..2a3d4bae8d 100644 --- a/.agents/notes/implemented/feature/2026-07-31-even-out-shipped-tool-rosters.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-31-even-out-shipped-tool-rosters.i18n.yaml @@ -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-31-even-out-shipped-tool-rosters.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/feature/2026-07-31-even-out-shipped-tool-rosters.md -2026-07-31-even-out-shipped-tool-rosters.md: 90efaeb4734c806bc1bdc63d883c4e3158792a13 -2026-07-31-even-out-shipped-tool-rosters.zh.md: 4379ffbcd23ea80acd6801ea260fb686cd955fa5 +/agent-note-even-out-the-shipped-tool-rosters: + en: aa8ec8438dc609aa + zh: 28172207b09ea3ad +/agent-note-even-out-the-shipped-tool-rosters/problem: + en: 69e127b53366cf66 + zh: 63f783ac453d4cbe +/agent-note-even-out-the-shipped-tool-rosters/decision: + en: 45662b711bd9a201 + zh: 845cd2a9193cbe0f +/agent-note-even-out-the-shipped-tool-rosters/decision/what-stays-unmounted-and-why: + en: 7a74b42b428b9cf9 + zh: 4f534ccd26b9ecc4 +/agent-note-even-out-the-shipped-tool-rosters/decision/mcp-is-a-dependency-not-a-row: + en: 45358314e6adae26 + zh: 85ca6a6ce7bbf947 +/agent-note-even-out-the-shipped-tool-rosters/testing: + en: 07e46125d49a2068 + zh: 83a1b2737768651b +/agent-note-even-out-the-shipped-tool-rosters/alternatives-considered: + en: cf41f0bf700af59c + zh: 1dcaafe6bb944d92 +/agent-note-even-out-the-shipped-tool-rosters/consequences: + en: cf1821c985507b13 + zh: 0f7396a06d1b19fb diff --git a/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml index ce197d5093..f398e72a4e 100644 --- a/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-31-web-default-search.i18n.yaml @@ -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-web-default-search.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/feature/2026-07-31-web-default-search.md -2026-07-31-web-default-search.md: fed162cf2552e0209599634a7f215c48c1943339 -2026-07-31-web-default-search.zh.md: 3f39ef7d9f3adbc1c43a327faac78b21a08654de +/agent-note-default-web-search-in-shipped-compositions: + en: 030dc2ef246ba33d + zh: 94cc720adfd3d4ef +/agent-note-default-web-search-in-shipped-compositions/problem: + en: cd5af0c73d578874 + zh: 29e14c7ff1c77391 +/agent-note-default-web-search-in-shipped-compositions/decision: + en: 7062647c8e227743 + zh: 26bdd8dc4b0cd7ad +/agent-note-default-web-search-in-shipped-compositions/alternatives-considered: + en: f28e0f1183e755ce + zh: 2cbf256a33d99686 +/agent-note-default-web-search-in-shipped-compositions/consequences: + en: d69965f3be327186 + zh: 4e2b10bb0a227f0a diff --git a/.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.i18n.yaml b/.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.i18n.yaml index a8899fea13..25355eb4d5 100644 --- a/.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-07-31-web-workspace-file-links.i18n.yaml @@ -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-web-workspace-file-links.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/feature/2026-07-31-web-workspace-file-links.md -2026-07-31-web-workspace-file-links.md: 1fd58deafa99f6c84371d2a2c3975eae86522ac2 -2026-07-31-web-workspace-file-links.zh.md: 8cb1d06562398a832fed0743a7c06894d0a4212b +/agent-note-opening-a-produced-file-from-the-web-ui: + en: bdfcd62110aaefa2 + zh: 92981f1fe8ca52c9 +/agent-note-opening-a-produced-file-from-the-web-ui/problem: + en: 06ba78ace240645c + zh: 07a46477d41ddcee +/agent-note-opening-a-produced-file-from-the-web-ui/decision: + en: a3d6e9aa14dc6fb8 + zh: d9696d46eb4a348d +/agent-note-opening-a-produced-file-from-the-web-ui/alternatives-considered: + en: ba9603055aea84aa + zh: 3ab217f1b1ccb3b6 +/agent-note-opening-a-produced-file-from-the-web-ui/consequences: + en: aa460548654a89a5 + zh: ebb8e51f5cd18f0b diff --git a/.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.i18n.yaml b/.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.i18n.yaml index 66983526a5..4ac0e96629 100644 --- a/.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-02-pwsh-tool-bash-parity.i18n.yaml @@ -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-02-pwsh-tool-bash-parity.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/feature/2026-08-02-pwsh-tool-bash-parity.md -2026-08-02-pwsh-tool-bash-parity.md: cc2e7797c07ee8fd8c876cb30f9154a8ee2903c3 -2026-08-02-pwsh-tool-bash-parity.zh.md: b7949f1a5145fb6dac06bc47eeee488497b169d6 +/agent-note-pwsh-tool-bash-parity: + en: 76e33af7ff962cd2 + zh: 392f3d5f7100c564 +/agent-note-pwsh-tool-bash-parity/problem: + en: de5bfad14ef58243 + zh: fe8168a215719127 +/agent-note-pwsh-tool-bash-parity/decision: + en: 169a42b6c2dc965d + zh: 4172091b0299c748 +/agent-note-pwsh-tool-bash-parity/alternatives-considered: + en: 7dc381c52b191bc9 + zh: 6c07393519d3bb21 +/agent-note-pwsh-tool-bash-parity/consequences: + en: ea302108933e8a69 + zh: 563db786f22d07fa diff --git a/.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml b/.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml index d95f30747e..dc33cc6355 100644 --- a/.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-04-claude-code-and-codex-subagent-backends.i18n.yaml @@ -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-04-claude-code-and-codex-subagent-backends.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/feature/2026-08-04-claude-code-and-codex-subagent-backends.md -2026-08-04-claude-code-and-codex-subagent-backends.md: d11b200e95cbb0769ad30ae88cb976c7921c80f8 -2026-08-04-claude-code-and-codex-subagent-backends.zh.md: 5899a27bb8ad592d9b83b7d19e681bef375525fb +/agent-note-claude-code-and-codex-subagent-backends: + en: 0f3599cefa53ad5b + zh: 988c28cdd9ee4e61 +/agent-note-claude-code-and-codex-subagent-backends/problem: + en: dbd5758c1c46b303 + zh: ca5b8479f4358c9b +/agent-note-claude-code-and-codex-subagent-backends/decision: + en: caf8c74c3466b27a + zh: 5b1daf0a738221cd +/agent-note-claude-code-and-codex-subagent-backends/decision/ownership-and-lifecycle: + en: 1c106b8b0063fee2 + zh: 0a38a1ffbe93086d +/agent-note-claude-code-and-codex-subagent-backends/codex-provider: + en: 5835894b4ac2e182 + zh: c1fcbd2b2b7e0ea0 +/agent-note-claude-code-and-codex-subagent-backends/claude-code-provider: + en: 81a92541d399b155 + zh: d73a1f20c34982bb +/agent-note-claude-code-and-codex-subagent-backends/distribution-and-evidence: + en: ff6d6216e5ce11dd + zh: 6198c006ba8c61e7 +/agent-note-claude-code-and-codex-subagent-backends/alternatives-considered: + en: 10b5b282fac03988 + zh: bf9fb4899f2c8e16 +/agent-note-claude-code-and-codex-subagent-backends/consequences: + en: 4154bcdc7ad9ff7c + zh: e2bc1f2010bb48a9 diff --git a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml index 4eb9df8cb0..1f9b21f587 100644 --- a/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-05-agent-teams.i18n.yaml @@ -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-05-agent-teams.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/feature/2026-08-05-agent-teams.md -2026-08-05-agent-teams.md: 6333e511ba1e71823cfa55c27ba46b2665d1ef15 -2026-08-05-agent-teams.zh.md: 3fed1302146406f71d63c7ff2df8f031a91c9804 +/agent-note-durable-agent-teams-over-continuable-children: + en: c914d8148bfc4bf9 + zh: a8115f87c0ac6cae +/agent-note-durable-agent-teams-over-continuable-children/problem: + en: bab62798c2dc07b4 + zh: fe42c5abf9127d37 +/agent-note-durable-agent-teams-over-continuable-children/decision: + en: 58568b3a9b5f60d5 + zh: 02d67b6cb0736c0a +/agent-note-durable-agent-teams-over-continuable-children/profile-delegation: + en: 3a66308576f74247 + zh: 3453f0bcce88033d +/agent-note-durable-agent-teams-over-continuable-children/team-identity: + en: 83e446c928a20c47 + zh: b0a2bd24419dd815 +/agent-note-durable-agent-teams-over-continuable-children/provisioning-and-recovery: + en: 085846d0078c0898 + zh: 40b2ca3ae6864451 +/agent-note-durable-agent-teams-over-continuable-children/mailbox-and-task-transactions: + en: ab2ad55021eb34e0 + zh: 2d1996df7a69201d +/agent-note-durable-agent-teams-over-continuable-children/shared-checkout-boundary: + en: 3969de3b44e412c8 + zh: 12be5854816cb808 +/agent-note-durable-agent-teams-over-continuable-children/web-projection: + en: e6348054f024725b + zh: 8740636e99940308 +/agent-note-durable-agent-teams-over-continuable-children/alternatives-considered: + en: bb266fe7a97f0828 + zh: 7c86c2d6d11ba02a +/agent-note-durable-agent-teams-over-continuable-children/testing: + en: 151b462649212acf + zh: 983c4bee7b71c1e3 +/agent-note-durable-agent-teams-over-continuable-children/consequences: + en: c3740ae56809e537 + zh: 76a1e77d14cb6f26 diff --git a/.agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.i18n.yaml b/.agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.i18n.yaml index bcd3dfd359..19c93bd64d 100644 --- a/.agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-05-context-form-vocabulary.i18n.yaml @@ -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-05-context-form-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/feature/2026-08-05-context-form-vocabulary.md -2026-08-05-context-form-vocabulary.md: e1c909b761fee60ebacb306ef204a4212a03baa4 -2026-08-05-context-form-vocabulary.zh.md: 4d595bf52fba2f7323643ddc47bd365ce6508c9e +/agent-note-producer-declared-context-forms: + en: a88151ac41197659 + zh: 4aaffb71b4ae04ea +/agent-note-producer-declared-context-forms/problem: + en: 74c06aa0b3e5337e + zh: c13364dbaebabba1 +/agent-note-producer-declared-context-forms/decision: + en: e97830627fd8245f + zh: 0b035c15ed09902d +/agent-note-producer-declared-context-forms/why-not-a-presenter-registry: + en: feb1b16eeb312e0c + zh: 9eb3c5af2d510235 +/agent-note-producer-declared-context-forms/alternatives-considered: + en: 86f7f90f4c573316 + zh: d8008512145a89b4 +/agent-note-producer-declared-context-forms/testing: + en: 5910183c18c3341e + zh: 7c5d4e538a66533f +/agent-note-producer-declared-context-forms/consequences: + en: 15d3d98980ea3919 + zh: 4e14b65420de0df3 diff --git a/.agents/notes/implemented/feature/2026-08-05-durable-web-schedule.i18n.yaml b/.agents/notes/implemented/feature/2026-08-05-durable-web-schedule.i18n.yaml index a2330d603f..95f9c571b7 100644 --- a/.agents/notes/implemented/feature/2026-08-05-durable-web-schedule.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-05-durable-web-schedule.i18n.yaml @@ -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-05-durable-web-schedule.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/feature/2026-08-05-durable-web-schedule.md -2026-08-05-durable-web-schedule.md: b09ab752c9db0587b49dbe50a152144b9ff19515 -2026-08-05-durable-web-schedule.zh.md: 8d84be3e3589969245fa41f433166eabacdf3951 +/agent-note-durable-session-local-reminders: + en: c40fc2bc6dd1b469 + zh: c3932a1c8c60579b +/agent-note-durable-session-local-reminders/problem: + en: 75d2d50c48475d22 + zh: 293c507e9e516f29 +/agent-note-durable-session-local-reminders/decision: + en: 7fd21223d6306a39 + zh: b792a415d9dccba0 +/agent-note-durable-session-local-reminders/decision/session-log-authority-and-tools: + en: 23a928cba17217d6 + zh: 7995b144db6e4c70 +/agent-note-durable-session-local-reminders/decision/explicit-absolute-time-boundary: + en: 2e1fe906d42245aa + zh: bd21d4a2dd7d8afc +/agent-note-durable-session-local-reminders/decision/bounded-fixed-rate-semantics: + en: 2ebada22d530b18a + zh: 90e7dd128c8ba54a +/agent-note-durable-session-local-reminders/decision/live-delivery-lifecycle: + en: e69281749cf18500 + zh: 9ce38e39e486f2d6 +/agent-note-durable-session-local-reminders/decision/read-only-web-catalog: + en: 6ea0fcb2512d1434 + zh: ef9e430200677c9f +/agent-note-durable-session-local-reminders/alternatives-considered: + en: d86b5e8b0380c22a + zh: e6b6fce158608b08 +/agent-note-durable-session-local-reminders/verification: + en: 716fce79e742ecfa + zh: 6abb1480f1b9e2d9 +/agent-note-durable-session-local-reminders/consequences: + en: 7abf5e7d73b32153 + zh: c178fb3f1f28dee4 diff --git a/.agents/notes/implemented/feature/2026-08-06-continuable-subagent-interrupt.i18n.yaml b/.agents/notes/implemented/feature/2026-08-06-continuable-subagent-interrupt.i18n.yaml index ff0246f556..a030f39da0 100644 --- a/.agents/notes/implemented/feature/2026-08-06-continuable-subagent-interrupt.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-06-continuable-subagent-interrupt.i18n.yaml @@ -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-06-continuable-subagent-interrupt.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/feature/2026-08-06-continuable-subagent-interrupt.md -2026-08-06-continuable-subagent-interrupt.md: e865415bbba4ea196afd7d075a079412f18e5a1e -2026-08-06-continuable-subagent-interrupt.zh.md: ed4981bdac12a5c8b09b2e8dbc6363817e4d7dea +/agent-note-continuable-subagent-current-turn-interrupt: + en: 0940bfeaf12caf8c + zh: e6a1da625950371d +/agent-note-continuable-subagent-current-turn-interrupt/problem: + en: be2b1e9ef5bb2511 + zh: 36c7ee54c37c0700 +/agent-note-continuable-subagent-current-turn-interrupt/decision: + en: db543685b2fd2f88 + zh: fcc848c04036253c +/agent-note-continuable-subagent-current-turn-interrupt/alternatives-considered: + en: e7e953783cc4a332 + zh: be5d47a503b47170 +/agent-note-continuable-subagent-current-turn-interrupt/consequences: + en: 4a7ea28d02c66b63 + zh: bad8d6e58b45bd81 +/agent-note-continuable-subagent-current-turn-interrupt/testing: + en: e46413bc89f9238e + zh: 4fb1639ae696e9a4 diff --git a/.agents/notes/implemented/feature/2026-08-06-manager-owned-subagent-settlement-delivery.i18n.yaml b/.agents/notes/implemented/feature/2026-08-06-manager-owned-subagent-settlement-delivery.i18n.yaml index a8b84e3d55..c405aca74b 100644 --- a/.agents/notes/implemented/feature/2026-08-06-manager-owned-subagent-settlement-delivery.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-06-manager-owned-subagent-settlement-delivery.i18n.yaml @@ -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-08-06-manager-owned-subagent-settlement-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/feature/2026-08-06-manager-owned-subagent-settlement-delivery.md -2026-08-06-manager-owned-subagent-settlement-delivery.md: 7f6cfc90862b5bb32368b4b0e1fbe068ba0cbf66 -2026-08-06-manager-owned-subagent-settlement-delivery.zh.md: 23c5506f79d4d95308b0533e8d507ac856c4d85e +/agent-note-settlement-delivery-belongs-to-the-continuation-manager: + en: e8e4fec15acfe5d4 + zh: 6dac0279cf244edc +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/problem: + en: 325f283354af59f6 + zh: 059179e883da78c2 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision: + en: 472a34f28ed5200a + zh: 70dcbbd2e26dc32f +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/closing-text: + en: 229151705efda8a9 + zh: b4e94b52280a2076 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/runtime-source: + en: b2e4931dfb6c21b1 + zh: 9bf619cd5b697e68 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/two-ordering-rules-and-why-the-manager-owns-them: + en: 34fad866d5c6377b + zh: e865e2cb70c3e00a +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/establishment-holds-ownership-open: + en: bcaf3f22ba44fa01 + zh: d7b0968990f41a66 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/scheduling: + en: 3d1862329727a379 + zh: 92fcf4ffd366ea30 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/the-epoch-s-own-log-is-the-whole-account: + en: f444a596a75f0180 + zh: ec9c0b61a38a3458 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/decision/snapshot-coverage: + en: 9e50e4014df1d5b0 + zh: 1a111b53a149a21b +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/alternatives-considered: + en: dd3073a05a8e13bd + zh: e58debc18a591077 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/consequences: + en: 10ebfbc70ff94e20 + zh: c32a335007de89d1 +/agent-note-settlement-delivery-belongs-to-the-continuation-manager/consequences/accepted-risks: + en: 615cd09443411b4d + zh: f74b5dcab43975d3 diff --git a/.agents/notes/implemented/feature/2026-08-08-web-background-job-display.i18n.yaml b/.agents/notes/implemented/feature/2026-08-08-web-background-job-display.i18n.yaml index ce21dc1c9a..adc20bec51 100644 --- a/.agents/notes/implemented/feature/2026-08-08-web-background-job-display.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-08-web-background-job-display.i18n.yaml @@ -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-08-web-background-job-display.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/feature/2026-08-08-web-background-job-display.md -2026-08-08-web-background-job-display.md: 1ebd600e4d423f95ad663c333572a990d0c9efa7 -2026-08-08-web-background-job-display.zh.md: 56d062b5079e15c90cffc30b538efe162bc19d9d +/agent-note-web-background-job-display: + en: 78eff738bc5ed554 + zh: c8a8a83853fa806b +/agent-note-web-background-job-display/problem: + en: 41ddca92193cbbf1 + zh: ec8f39ad20044d1c +/agent-note-web-background-job-display/decision: + en: 50058c6557e05f15 + zh: bbf35bb475474cd8 +/agent-note-web-background-job-display/decision/wire-shape: + en: 4d6b92cbfde80add + zh: d32e0421100eeb71 +/agent-note-web-background-job-display/decision/the-task-registry-change-feed: + en: a7a9416ab3b325dc + zh: 448820bad0224785 +/agent-note-web-background-job-display/decision/the-session-controller-carrier: + en: e9ef574e65e8fb7d + zh: d1a6e446c48a0921 +/agent-note-web-background-job-display/decision/the-client-mirror: + en: 6185994020e639ee + zh: df9b464f95c0f3e2 +/agent-note-web-background-job-display/decision/the-header-action: + en: 8985aa8f6ade32c3 + zh: 94ea0844ed8649b5 +/agent-note-web-background-job-display/decision/what-this-deliberately-does-not-do: + en: c9ff2d1fec1459d9 + zh: b28a573ca9fbb1c2 +/agent-note-web-background-job-display/alternatives-considered: + en: a648d1748674d866 + zh: 0f68b82476121c38 +/agent-note-web-background-job-display/testing: + en: f41d5017ea4beabb + zh: cb216dd1d802ebe2 +/agent-note-web-background-job-display/consequences: + en: 5204e04c3ed02d53 + zh: 9eaa9b52b69be7b2 diff --git a/.agents/notes/implemented/feature/2026-08-08-windows-acl-restricted-token-sandbox.i18n.yaml b/.agents/notes/implemented/feature/2026-08-08-windows-acl-restricted-token-sandbox.i18n.yaml index 65bc426f49..cfa5b6c2ad 100644 --- a/.agents/notes/implemented/feature/2026-08-08-windows-acl-restricted-token-sandbox.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-08-windows-acl-restricted-token-sandbox.i18n.yaml @@ -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-08-windows-acl-restricted-token-sandbox.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/feature/2026-08-08-windows-acl-restricted-token-sandbox.md -2026-08-08-windows-acl-restricted-token-sandbox.md: 65780b9bba31605db02dc9be4c1b2454c74eb0f4 -2026-08-08-windows-acl-restricted-token-sandbox.zh.md: fe9aadb97b172d77d65ca6b0a843f05751075502 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer: + en: cfc871213b6d8360 + zh: 18ff96c2272fee09 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/problem: + en: 86e01a1c009ac595 + zh: 91844972d41dd6f9 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/decision: + en: 125dea7427047966 + zh: 5d0bfd3921b38714 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/how-the-restriction-works-why-no-new-identity: + en: ac9b3d800889ea39 + zh: 9db1065b6027f65f +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 4237c596c10e1ee9 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/alternatives-considered/why-not-mxc-microsoft-xcontainer: + en: 0bb56896664ab257 + zh: de921ecab11cf572 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/alternatives-considered/why-not-appcontainer: + en: 6e7ed26630c25476 + zh: edd52735b36b0b12 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/alternatives-considered/why-not-landstrip: + en: e2c573d90c4ddeb9 + zh: f0259213e1321722 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/consequences: + en: b9f3a7c6890707f1 + zh: c9a344b50732c296 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/testing: + en: b223cb2cf13193c9 + zh: 61ddd0a0b99f8f56 +/agent-note-windows-sandbox-rung-raw-acl-restricted-tokens-over-mxc-and-appcontainer/related: + en: dd16f0c5815df991 + zh: df3c1cf511ee52bf diff --git a/.agents/notes/implemented/feature/2026-08-10-subagent-approval-pinned-never.i18n.yaml b/.agents/notes/implemented/feature/2026-08-10-subagent-approval-pinned-never.i18n.yaml index b4d5d4a95a..0841a07056 100644 --- a/.agents/notes/implemented/feature/2026-08-10-subagent-approval-pinned-never.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-10-subagent-approval-pinned-never.i18n.yaml @@ -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-10-subagent-approval-pinned-never.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/feature/2026-08-10-subagent-approval-pinned-never.md -2026-08-10-subagent-approval-pinned-never.md: a21c6b966b1ad00ed63e0fe87b0ce982f0daf490 -2026-08-10-subagent-approval-pinned-never.zh.md: 32f367303559eecbfd5049cd370e48c8ce57de33 +/agent-note-delegated-subagents-run-with-approvals-pinned-to-never: + en: f38cf8f2c67fc976 + zh: a4b357a3452383c3 +/agent-note-delegated-subagents-run-with-approvals-pinned-to-never/problem: + en: fa1add8bd8bb3733 + zh: 35ac0951e676acaf +/agent-note-delegated-subagents-run-with-approvals-pinned-to-never/decision: + en: 2d2e42923663abc7 + zh: 5728346e7c5ea291 +/agent-note-delegated-subagents-run-with-approvals-pinned-to-never/alternatives-considered: + en: 32fe1eb5bd7cd5ab + zh: ea437edee4fbc1c6 +/agent-note-delegated-subagents-run-with-approvals-pinned-to-never/consequences: + en: 4503eecfc7f17fed + zh: 1f201ba769ec0354 diff --git a/.agents/notes/implemented/feature/2026-08-11-background-job-completion-wakes-an-idle-owner.i18n.yaml b/.agents/notes/implemented/feature/2026-08-11-background-job-completion-wakes-an-idle-owner.i18n.yaml index 3b96b194f6..562d31b711 100644 --- a/.agents/notes/implemented/feature/2026-08-11-background-job-completion-wakes-an-idle-owner.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-11-background-job-completion-wakes-an-idle-owner.i18n.yaml @@ -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-08-11-background-job-completion-wakes-an-idle-owner.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/feature/2026-08-11-background-job-completion-wakes-an-idle-owner.md -2026-08-11-background-job-completion-wakes-an-idle-owner.md: f13f09d326dc7b4e7b2998f3124f70c185c50922 -2026-08-11-background-job-completion-wakes-an-idle-owner.zh.md: f9b563ebbf90e2ca19d1fc5ca9fa5b028e4429f1 +/agent-note-background-job-completion-wakes-an-idle-owner: + en: b761777a02303d0e + zh: a65eb415e75bcac5 +/agent-note-background-job-completion-wakes-an-idle-owner/problem: + en: da112fe20077acdf + zh: b0e3e099c3aacde5 +/agent-note-background-job-completion-wakes-an-idle-owner/decision: + en: c5d7901d87803d0c + zh: 8a1e473e88f3e400 +/agent-note-background-job-completion-wakes-an-idle-owner/decision/the-busy-owner-keeps-injection: + en: 841588bc73fc4613 + zh: 7fb4095bd55ee241 +/agent-note-background-job-completion-wakes-an-idle-owner/decision/the-cap-on-consecutive-wakes-is-opt-in-and-it-is-not-time: + en: fa9f572f763bc6b0 + zh: f3924fa49d2be22d +/agent-note-background-job-completion-wakes-an-idle-owner/decision/teardown-claims-the-report: + en: f79257596c755a32 + zh: 856bf42492425f9c +/agent-note-background-job-completion-wakes-an-idle-owner/decision/completion-is-announced-last: + en: 9cab013b3513f1e0 + zh: 78ea1b05df94d8a8 +/agent-note-background-job-completion-wakes-an-idle-owner/alternatives-considered: + en: debb2c9b924474c3 + zh: 90e2cefc230e3ec8 +/agent-note-background-job-completion-wakes-an-idle-owner/consequences: + en: a2a6f76c8cc92d57 + zh: 6eed3e6a5c75dfb9 +/agent-note-background-job-completion-wakes-an-idle-owner/consequences/accepted-risks: + en: 2141374aa4f79a2b + zh: acff1b68abf2db7e diff --git a/.agents/notes/implemented/feature/2026-08-11-deepseek-request-user-id-header.i18n.yaml b/.agents/notes/implemented/feature/2026-08-11-deepseek-request-user-id-header.i18n.yaml index 4d8cfe3580..8f60e2293e 100644 --- a/.agents/notes/implemented/feature/2026-08-11-deepseek-request-user-id-header.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-11-deepseek-request-user-id-header.i18n.yaml @@ -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-11-deepseek-request-user-id-header.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/feature/2026-08-11-deepseek-request-user-id-header.md -2026-08-11-deepseek-request-user-id-header.md: 54f59a3f69a933af4f80d629f32f5089676263f6 -2026-08-11-deepseek-request-user-id-header.zh.md: 4904a08fcf4320211fd4253403bddda062bd496e +/agent-note-deepseek-request-user-and-session-identity-headers: + en: 6888d1c6a57a6839 + zh: e3817ccbcd782a44 +/agent-note-deepseek-request-user-and-session-identity-headers/problem: + en: fdeb3bc22bab88c0 + zh: 089ea4713776fb7a +/agent-note-deepseek-request-user-and-session-identity-headers/decision: + en: b168d3c975d191aa + zh: fdd92a1a92f87537 +/agent-note-deepseek-request-user-and-session-identity-headers/verification: + en: 3984cb1cb953605e + zh: 59e06d6eac8070d7 +/agent-note-deepseek-request-user-and-session-identity-headers/alternatives-considered: + en: 2233f9f6a934a48f + zh: c73d1db971239742 +/agent-note-deepseek-request-user-and-session-identity-headers/consequences: + en: 1621a8eab7787622 + zh: 636cf922cf76d2bc diff --git a/.agents/notes/implemented/feature/2026-08-11-minimal-profiles-bare-two-tool-runtime.i18n.yaml b/.agents/notes/implemented/feature/2026-08-11-minimal-profiles-bare-two-tool-runtime.i18n.yaml index 98786c2a8b..13d32374f6 100644 --- a/.agents/notes/implemented/feature/2026-08-11-minimal-profiles-bare-two-tool-runtime.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-11-minimal-profiles-bare-two-tool-runtime.i18n.yaml @@ -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-11-minimal-profiles-bare-two-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/feature/2026-08-11-minimal-profiles-bare-two-tool-runtime.md -2026-08-11-minimal-profiles-bare-two-tool-runtime.md: 8cfa4aa71e33317947d0661641df1e6e814f5e90 -2026-08-11-minimal-profiles-bare-two-tool-runtime.zh.md: f1f916bdde92fd104c3d879ff058b2e0474eef38 +/agent-note-minimal-profiles-use-a-bare-runtime: + en: b086c2a8d0fca111 + zh: 3c81b90a2818e7ff +/agent-note-minimal-profiles-use-a-bare-runtime/problem: + en: 725fe45436a65f26 + zh: 97f96497173bec4f +/agent-note-minimal-profiles-use-a-bare-runtime/decision: + en: ef9aa81743b6bc46 + zh: 86bcf7e3a7e34f4b +/agent-note-minimal-profiles-use-a-bare-runtime/verification: + en: c9d0b2145e4c1271 + zh: 186919163b20379c +/agent-note-minimal-profiles-use-a-bare-runtime/alternatives-considered: + en: 35b3346928cb6c3f + zh: 6e60d1073b5a95e3 +/agent-note-minimal-profiles-use-a-bare-runtime/consequences: + en: 462abbbe168de14c + zh: 13f9e257a5f18984 diff --git a/.agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml b/.agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml index 7e9849194b..c0058f198d 100644 --- a/.agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-15-product-subagent-noninteractive-permissions.i18n.yaml @@ -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-08-15-product-subagent-noninteractive-permissions.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/feature/2026-08-15-product-subagent-noninteractive-permissions.md -2026-08-15-product-subagent-noninteractive-permissions.md: 1ec45f9adafa2364f9d0f37f3914d97054942226 -2026-08-15-product-subagent-noninteractive-permissions.zh.md: 80e99d9ee47da859456faf66560d42e73c88cf3d +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions: + en: feb20636c72ade23 + zh: fd2e9f192a3fa527 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/problem: + en: 905b54b06f35015a + zh: b0b3a79e9f92b33d +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/decision: + en: a4635e16af21d478 + zh: 6cd59ad7e2bb9885 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/decision/claude-code: + en: dbbd5e37924de6f7 + zh: 33c327f0737894c4 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/decision/codex: + en: 75114f6529699ebd + zh: 19dab70be62fb3d7 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/decision/failure-diagnostic: + en: 5439f8ab6ad61d42 + zh: 4b3f9bee3794b2f2 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/decision/ownership-and-lifecycle: + en: 987eec9a67ba131d + zh: 735399cd3ac78a45 +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/verification: + en: 16a02354fe427b8e + zh: 948225be10331c8d +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/alternatives-considered: + en: 7b6bbb52fd5e4cbc + zh: c8e7ab515cd6c0db +/agent-note-product-subagents-use-profile-selected-non-interactive-permissions/consequences: + en: 6e995471b4cb9ff4 + zh: 9baf59015a911310 diff --git a/.agents/notes/implemented/feature/2026-08-18-arbitrary-seq-session-fork.i18n.yaml b/.agents/notes/implemented/feature/2026-08-18-arbitrary-seq-session-fork.i18n.yaml index 792f97a11a..167308d649 100644 --- a/.agents/notes/implemented/feature/2026-08-18-arbitrary-seq-session-fork.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-18-arbitrary-seq-session-fork.i18n.yaml @@ -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-18-arbitrary-seq-session-fork.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/feature/2026-08-18-arbitrary-seq-session-fork.md -2026-08-18-arbitrary-seq-session-fork.md: c02ba6c1f24462224cb7f4f245d82063f29c4d61 -2026-08-18-arbitrary-seq-session-fork.zh.md: fe78e505313b2177435abd93e1d8056972b2646b +/agent-note-exact-event-session-forks-with-shared-crash-repair: + en: f75e952184cae150 + zh: 32c2519c85aa6822 +/agent-note-exact-event-session-forks-with-shared-crash-repair/problem: + en: e01b73d9d4b50c50 + zh: 14f7816869b76241 +/agent-note-exact-event-session-forks-with-shared-crash-repair/decision: + en: 0b7afc12950ce308 + zh: 384d26f698a344a7 +/agent-note-exact-event-session-forks-with-shared-crash-repair/alternatives-considered: + en: 49544ba70825c8e9 + zh: 41c7dceb9241fc5a +/agent-note-exact-event-session-forks-with-shared-crash-repair/consequences: + en: a829fc736a132d89 + zh: 03b116766bd44d64 +/agent-note-exact-event-session-forks-with-shared-crash-repair/testing: + en: f15e826fa12a4f55 + zh: fe053fa01304e072 diff --git a/.agents/notes/implemented/feature/2026-08-18-model-selected-subagent-routes.i18n.yaml b/.agents/notes/implemented/feature/2026-08-18-model-selected-subagent-routes.i18n.yaml index 5e0f82335f..2095b6be29 100644 --- a/.agents/notes/implemented/feature/2026-08-18-model-selected-subagent-routes.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-18-model-selected-subagent-routes.i18n.yaml @@ -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-18-model-selected-subagent-routes.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/feature/2026-08-18-model-selected-subagent-routes.md -2026-08-18-model-selected-subagent-routes.md: 9cdbdbec3b79a93043fa6ae95a6a6dedf6072086 -2026-08-18-model-selected-subagent-routes.zh.md: 3b81f5417339325dd60884049a853d1094a9f1eb +/agent-note-model-selected-subagent-routes: + en: 1e719fd754836549 + zh: 603cce7a5f9ec6bd +/agent-note-model-selected-subagent-routes/problem: + en: f4010276228f4441 + zh: 50ac98640dbf519a +/agent-note-model-selected-subagent-routes/decision: + en: 39836773d1830515 + zh: 537c96bfa93573e7 +/agent-note-model-selected-subagent-routes/alternatives-considered: + en: 3b9fd91294fbfd27 + zh: 2854dd690ead3d15 +/agent-note-model-selected-subagent-routes/consequences: + en: 55969d3742da39ce + zh: a248167f9bb2fa4e +/agent-note-model-selected-subagent-routes/related-decisions: + en: 28c4eb2e90488ff0 + zh: ba59bb2fafdd4720 diff --git a/.agents/notes/implemented/feature/2026-08-20-unified-image-request-pipeline.i18n.yaml b/.agents/notes/implemented/feature/2026-08-20-unified-image-request-pipeline.i18n.yaml index 4f9e640fe2..6e1c636324 100644 --- a/.agents/notes/implemented/feature/2026-08-20-unified-image-request-pipeline.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-20-unified-image-request-pipeline.i18n.yaml @@ -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-20-unified-image-request-pipeline.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/feature/2026-08-20-unified-image-request-pipeline.md -2026-08-20-unified-image-request-pipeline.md: b79eeb7d908d664362851c28bda64dab163aac89 -2026-08-20-unified-image-request-pipeline.zh.md: 444234715256c48167b0b45dbd8843a9c80079f7 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files: + en: 79d1a6f50ac76c3d + zh: 9af0070009537602 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/problem: + en: 7ce3a351a1492dd0 + zh: 7c7e3bb6799822f8 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision: + en: 98e7aad889f5b79c + zh: 84b24f6fd9209fcf +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision/provider-independent-normalized-attachment: + en: 75b1d3732f3a9d05 + zh: c8683df3c6f0c989 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision/deterministic-request-versions: + en: 8afa51d02643bd40 + zh: d27d9a5b09fc6d74 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision/stable-handles: + en: 1b204c138b0d8e6c + zh: 3d6a2e82372e6825 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision/deepseek-files-lifecycle: + en: b35a18963d122b21 + zh: faa21c45cef3555a +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/decision/diagnostics: + en: e4c79434bedfc385 + zh: 9e7de1061629ef5e +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/alternatives-considered: + en: 7bfd39c761549b85 + zh: 6ac48c5842f7df91 +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/verification: + en: 7697f72ce5a7d969 + zh: 733ca1e0a05ae4ed +/agent-note-unified-normalized-attachments-request-versions-and-provider-files/consequences: + en: 1a6ef14a3e13b502 + zh: bc4ab273755b2739 diff --git a/.agents/notes/implemented/feature/2026-08-22-fire-and-forget-webhook-sessions.i18n.yaml b/.agents/notes/implemented/feature/2026-08-22-fire-and-forget-webhook-sessions.i18n.yaml index 3877584618..99cd729035 100644 --- a/.agents/notes/implemented/feature/2026-08-22-fire-and-forget-webhook-sessions.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-22-fire-and-forget-webhook-sessions.i18n.yaml @@ -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-08-22-fire-and-forget-webhook-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/feature/2026-08-22-fire-and-forget-webhook-sessions.md -2026-08-22-fire-and-forget-webhook-sessions.md: 08f718b8063c7ca0d78e93f547c0e0c33c183d07 -2026-08-22-fire-and-forget-webhook-sessions.zh.md: f015d993e61864bbc21d9d55fc331c25118fbde3 +/agent-note-fire-and-forget-webhook-sessions: + en: adb18c2b0d575306 + zh: 2605913ffe5bafaa +/agent-note-fire-and-forget-webhook-sessions/problem: + en: 394e062b7e8f31a0 + zh: bcb26075cf62115c +/agent-note-fire-and-forget-webhook-sessions/decision: + en: 08ff83adfec1a7da + zh: 871b9998631f22ac +/agent-note-fire-and-forget-webhook-sessions/provider-adapters: + en: 8eb2865f18fcf018 + zh: 1b73dfd634a8c07a +/agent-note-fire-and-forget-webhook-sessions/session-creation: + en: fbc57974dd81bf5a + zh: 1a4810df6b7a776f +/agent-note-fire-and-forget-webhook-sessions/alternatives-considered: + en: 59634068f7c22476 + zh: 844472f7a5e9de91 +/agent-note-fire-and-forget-webhook-sessions/verification: + en: e2a3192fc68b1ade + zh: 63c2b07bf5f32696 +/agent-note-fire-and-forget-webhook-sessions/consequences: + en: 8b40a7c91834a281 + zh: 882125d8070d77c1 diff --git a/.agents/notes/implemented/feature/2026-08-22-standard-acp-automation-controls.i18n.yaml b/.agents/notes/implemented/feature/2026-08-22-standard-acp-automation-controls.i18n.yaml index 872993adb4..b6b5b90bc1 100644 --- a/.agents/notes/implemented/feature/2026-08-22-standard-acp-automation-controls.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-22-standard-acp-automation-controls.i18n.yaml @@ -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-22-standard-acp-automation-controls.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/feature/2026-08-22-standard-acp-automation-controls.md -2026-08-22-standard-acp-automation-controls.md: dd1e39b84f942417640f741f17a211276b67872c -2026-08-22-standard-acp-automation-controls.zh.md: 2d7160bda164949799652bc2e3e3ab95afdafb0c +/agent-note-standard-acp-v1-automation-controls: + en: e6a4b457afbf12ac + zh: b1d83f4892e05f99 +/agent-note-standard-acp-v1-automation-controls/problem: + en: ba88135e9528b4c7 + zh: 8bc1be92b1f5178e +/agent-note-standard-acp-v1-automation-controls/decision: + en: 0a2b2a83aca7d189 + zh: 8de789db33953283 +/agent-note-standard-acp-v1-automation-controls/per-session-ownership: + en: 5b98c5e68eccfe76 + zh: c22dc47ad8003f22 +/agent-note-standard-acp-v1-automation-controls/persistent-session-controls: + en: 122752f1cb116417 + zh: 96971bcc1fed4a8a +/agent-note-standard-acp-v1-automation-controls/standard-configuration-options: + en: 61cb15891965c67a + zh: a0a958094b60951f +/agent-note-standard-acp-v1-automation-controls/standard-mcp-mapping: + en: 57acbe1c89af4c6b + zh: 3417e3d4b1874d94 +/agent-note-standard-acp-v1-automation-controls/semantic-update-projection: + en: 8e5128cd34629af3 + zh: 6132e78ddf9b3cf9 +/agent-note-standard-acp-v1-automation-controls/alternatives-considered: + en: fc94c87f43787d95 + zh: 17850ecc35e6ab9d +/agent-note-standard-acp-v1-automation-controls/verification: + en: 08e2b98606d9d362 + zh: 99d6aef7c89e287f +/agent-note-standard-acp-v1-automation-controls/consequences: + en: 9f839d4720f07d28 + zh: 5164ae3eb5b52385 diff --git a/.agents/notes/implemented/feature/2026-08-24-activity-observation-seam.i18n.yaml b/.agents/notes/implemented/feature/2026-08-24-activity-observation-seam.i18n.yaml index 548e9f5b36..d5220cd2f4 100644 --- a/.agents/notes/implemented/feature/2026-08-24-activity-observation-seam.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-24-activity-observation-seam.i18n.yaml @@ -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-08-24-activity-observation-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/feature/2026-08-24-activity-observation-seam.md -2026-08-24-activity-observation-seam.md: 21fe08fd21ad95eec7a83f6f29b9b94514358bb9 -2026-08-24-activity-observation-seam.zh.md: ffb6766b3e5d226d324ea2894a6e3f758cf1932a +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client: + en: 7fe6230c2327e0b5 + zh: 13a07f7926f6861c +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/problem: + en: 8b50b64ed5a852bd + zh: 21d651e0109dc641 +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/decision: + en: 88b51276287344bd + zh: 0827faa6c822e4a5 +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/decision/why-not-durable-session-events-the-control-stream-or-the-jobs-seam: + en: 58d884216caa6d85 + zh: aa47eb76bdb1ece0 +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/decision/two-cursor-regimes-kept-separate: + en: 7ab433f08fa6140a + zh: d001a90815b0156b +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/alternatives-considered: + en: 4462632fd94010c1 + zh: 01d1285f2ac6e42c +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/testing: + en: 26687866bbf7be90 + zh: 32dea8052bd5465b +/agent-note-the-activity-observation-seam-ctx-activities-and-live-output-streaming-to-the-web-client/consequences: + en: e975f4f2410e8619 + zh: 42f16406950a4d6f diff --git a/.agents/notes/implemented/feature/2026-08-24-user-authorized-subagent-model-routes.i18n.yaml b/.agents/notes/implemented/feature/2026-08-24-user-authorized-subagent-model-routes.i18n.yaml index 697f943349..75bb4b5177 100644 --- a/.agents/notes/implemented/feature/2026-08-24-user-authorized-subagent-model-routes.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-24-user-authorized-subagent-model-routes.i18n.yaml @@ -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-user-authorized-subagent-model-routes.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/feature/2026-08-24-user-authorized-subagent-model-routes.md -2026-08-24-user-authorized-subagent-model-routes.md: ef6f90d2cc1ec79e1381d75fd8cc25c568af3067 -2026-08-24-user-authorized-subagent-model-routes.zh.md: 23519bfc6619718e1cbf98dbad65eccd90353c0a +/agent-note-user-authorized-subagent-model-routes: + en: 572df418f108d72b + zh: d17c31e1c4150155 +/agent-note-user-authorized-subagent-model-routes/problem: + en: 3238dfb7db7dfdd8 + zh: ec3bdd9a9da0a321 +/agent-note-user-authorized-subagent-model-routes/decision: + en: 0166e452a774ade5 + zh: 747061b9424b3610 +/agent-note-user-authorized-subagent-model-routes/alternatives-considered: + en: e41c17226190ea8b + zh: d3b1395fafe75f01 +/agent-note-user-authorized-subagent-model-routes/consequences: + en: f1927d31ffc1dee9 + zh: b0fed04b80043c71 +/agent-note-user-authorized-subagent-model-routes/related-decisions: + en: 0b54fad7171103ec + zh: 8cf1d007a42fb991 diff --git a/.agents/notes/implemented/feature/2026-08-25-feedback-gated-telemetry-default.i18n.yaml b/.agents/notes/implemented/feature/2026-08-25-feedback-gated-telemetry-default.i18n.yaml index 511e99e65e..ee45f9f6ea 100644 --- a/.agents/notes/implemented/feature/2026-08-25-feedback-gated-telemetry-default.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-25-feedback-gated-telemetry-default.i18n.yaml @@ -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-25-feedback-gated-telemetry-default.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/feature/2026-08-25-feedback-gated-telemetry-default.md -2026-08-25-feedback-gated-telemetry-default.md: 1a5ecd6b34415650db5e5068d96f9d2dc5f30e42 -2026-08-25-feedback-gated-telemetry-default.zh.md: 55936aa4045214b627ecaad39d898b1898a50fc9 +/agent-note-feedback-gated-session-telemetry-default: + en: 213a794503e0d7bc + zh: e086babdf2ad52c9 +/agent-note-feedback-gated-session-telemetry-default/problem: + en: 46b3efd996067d48 + zh: fc59ee763b07987e +/agent-note-feedback-gated-session-telemetry-default/decision: + en: 4136623e5589a592 + zh: db7bc5e9e6ebc19f +/agent-note-feedback-gated-session-telemetry-default/alternatives-considered: + en: 14b51f0de8771943 + zh: 616afb4097857368 +/agent-note-feedback-gated-session-telemetry-default/consequences: + en: d3ed844cc1e29b0b + zh: 76838815edb0a450 diff --git a/.agents/notes/implemented/feature/2026-08-25-promote-open-anywhere-plugin.i18n.yaml b/.agents/notes/implemented/feature/2026-08-25-promote-open-anywhere-plugin.i18n.yaml index a806e17e4e..9c2732ed18 100644 --- a/.agents/notes/implemented/feature/2026-08-25-promote-open-anywhere-plugin.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-25-promote-open-anywhere-plugin.i18n.yaml @@ -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-25-promote-open-anywhere-plugin.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/feature/2026-08-25-promote-open-anywhere-plugin.md -2026-08-25-promote-open-anywhere-plugin.md: e5a435d24c2400b68fad8cccb094b176ad83f590 -2026-08-25-promote-open-anywhere-plugin.zh.md: 108091f3e7c2736063d67bc6b2d7fe0c039b35db +/agent-note-promote-open-anywhere-from-community-plugin-to-first-party-package: + en: 279cf946b4f6c386 + zh: cf76602956b811de +/agent-note-promote-open-anywhere-from-community-plugin-to-first-party-package/problem: + en: 08d8d5454fdc2e75 + zh: 22381ce00cb51148 +/agent-note-promote-open-anywhere-from-community-plugin-to-first-party-package/decision: + en: 26a46d3b6f21288a + zh: 94c32f789b3e28ac +/agent-note-promote-open-anywhere-from-community-plugin-to-first-party-package/alternatives-considered: + en: cc7c2ed172e4de3f + zh: b8fed28d9ee835c5 +/agent-note-promote-open-anywhere-from-community-plugin-to-first-party-package/consequences: + en: 5be6b2891e3429c9 + zh: 68ffcff52676824f diff --git a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.i18n.yaml b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.i18n.yaml index 6019a38f89..49360cffec 100644 --- a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.i18n.yaml @@ -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-26-generic-file-upload.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/feature/2026-08-26-generic-file-upload.md -2026-08-26-generic-file-upload.md: 196d048da9ffc1342cd62cb9c25674b7cecaffac -2026-08-26-generic-file-upload.zh.md: fce7cef76cf36060f55165d009c568480abb0f16 +/agent-note-generic-file-upload: + en: e82308b967a63c32 + zh: 743f8f4eda638827 +/agent-note-generic-file-upload/problem: + en: e7c3b5d7702714fe + zh: 268f162b553b37d1 +/agent-note-generic-file-upload/decision: + en: 31c7ad96c6ab82c8 + zh: 806922fc8fcd1242 +/agent-note-generic-file-upload/alternatives-considered: + en: 23f386b05e4e79ef + zh: 0756c4fa30e8d0eb +/agent-note-generic-file-upload/consequences: + en: e07df040738c45bb + zh: 9de3b560cb104bd3 +/agent-note-generic-file-upload/testing: + en: 3a50ac370d51cda9 + zh: d490f58922f8795b +/agent-note-generic-file-upload/related: + en: f7e186f0decb4e79 + zh: e5bc9fbd24b6d626 diff --git a/.agents/notes/implemented/feature/2026-08-26-human-job-kill.i18n.yaml b/.agents/notes/implemented/feature/2026-08-26-human-job-kill.i18n.yaml index 151857373f..787b132459 100644 --- a/.agents/notes/implemented/feature/2026-08-26-human-job-kill.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-26-human-job-kill.i18n.yaml @@ -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-26-human-job-kill.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/feature/2026-08-26-human-job-kill.md -2026-08-26-human-job-kill.md: efffdbd85bf2fa665565ff584a6938cfee827516 -2026-08-26-human-job-kill.zh.md: 206acca008518dd689351e40a99ff1571f3d1a8f +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path: + en: d47dedfab1caa170 + zh: 00bb8cd62ed79d54 +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path/problem: + en: 3690502ccc80b5a3 + zh: cfd3c378e3921864 +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path/decision: + en: ccd3751d2ecaba5c + zh: f8f820f9492a9bf3 +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path/alternatives-considered: + en: 74a385c561d8854a + zh: c131a4e386d9b976 +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path/testing: + en: 094513090d51adfc + zh: b6598110da6c5793 +/agent-note-human-job-kill-an-unclaimed-terminal-report-instead-of-a-second-cancellation-path/consequences: + en: 0bcec15bd9c760fe + zh: 754269206f110f69 diff --git a/.agents/notes/implemented/feature/2026-08-26-shell-execute-projection-and-jobs-at-start.i18n.yaml b/.agents/notes/implemented/feature/2026-08-26-shell-execute-projection-and-jobs-at-start.i18n.yaml index 5359a7b2cd..428a985b5b 100644 --- a/.agents/notes/implemented/feature/2026-08-26-shell-execute-projection-and-jobs-at-start.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-26-shell-execute-projection-and-jobs-at-start.i18n.yaml @@ -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-26-shell-execute-projection-and-jobs-at-start.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/feature/2026-08-26-shell-execute-projection-and-jobs-at-start.md -2026-08-26-shell-execute-projection-and-jobs-at-start.md: 2a03cd9f99645c10377dc9d2a5fdc68cb5ab0a4a -2026-08-26-shell-execute-projection-and-jobs-at-start.zh.md: bdc6cc432dbb8e3a0a8d0fc86cf055f3938ff201 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job: + en: bbc82e3f79a66fcb + zh: 6c348491e0db97b0 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job/problem: + en: e0e1292e5a785322 + zh: 34ec6572ed6cf406 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job/decision: + en: 332ddaffd22e473f + zh: 15c0ff6808316770 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job/alternatives-considered: + en: d888a561fafa5bb3 + zh: 719d687f2b3e4c10 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job/testing: + en: 65f59286de9fa00a + zh: 664d7f82a1479153 +/agent-note-one-shell-execute-foreground-as-a-projection-timeout-as-a-bounded-wait-on-the-job/consequences: + en: 5a5278fc96afacc1 + zh: cc088ea97c6249c9 diff --git a/.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.i18n.yaml b/.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.i18n.yaml index 25749576f7..db46bc5f64 100644 --- a/.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.i18n.yaml @@ -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-27-continuable-subagent-human-inbox-control.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/feature/2026-08-27-continuable-subagent-human-inbox-control.md -2026-08-27-continuable-subagent-human-inbox-control.md: 6bf8ceb2b8eab7138a1e617bb97e475d5cfa8172 -2026-08-27-continuable-subagent-human-inbox-control.zh.md: 081fb84f75afcc94339ae3bf627480081bc56d89 +/agent-note-human-inbox-controls-for-continuable-subagents: + en: 42b7ed7255c6c527 + zh: c3faf95870ba0e0c +/agent-note-human-inbox-controls-for-continuable-subagents/problem: + en: 4241f01a3a205ff5 + zh: 415c642ad379a53c +/agent-note-human-inbox-controls-for-continuable-subagents/decision: + en: 4f8c53964ac18aff + zh: 31d747618ca608cc +/agent-note-human-inbox-controls-for-continuable-subagents/alternatives-considered: + en: c1f10fb70c8bb500 + zh: 4dc0ec6cac95595c +/agent-note-human-inbox-controls-for-continuable-subagents/consequences: + en: 5fdc5b07eae2633c + zh: 1359d126d182d219 diff --git a/.agents/notes/implemented/feature/2026-08-28-auto-review.i18n.yaml b/.agents/notes/implemented/feature/2026-08-28-auto-review.i18n.yaml index b0a8d7fa60..4e846fcbce 100644 --- a/.agents/notes/implemented/feature/2026-08-28-auto-review.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-28-auto-review.i18n.yaml @@ -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-auto-review.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/feature/2026-08-28-auto-review.md -2026-08-28-auto-review.md: 13b3769b97c27b2ef4ac5cf4f6c2c2dde6323e7f -2026-08-28-auto-review.zh.md: bf7d70b85be43a0b9f451dd20e3bcd5c4b879cd3 +/agent-note-experimental-auto-review-before-each-tool-call: + en: 66cfb9da0816f4f2 + zh: 79f66b9713964a5e +/agent-note-experimental-auto-review-before-each-tool-call/problem: + en: 492ba2355360d81a + zh: 825c0e7ab1cf4beb +/agent-note-experimental-auto-review-before-each-tool-call/decision: + en: 8bf58a9d5c800af6 + zh: 3bb386279301fbbf +/agent-note-experimental-auto-review-before-each-tool-call/decision/effects-and-authority: + en: 55a79d8572fb4332 + zh: f63d03d0f3bb5811 +/agent-note-experimental-auto-review-before-each-tool-call/decision/one-complete-reviewer-request: + en: d93bd9b8af6b0bfc + zh: 9514c2e5554a721e +/agent-note-experimental-auto-review-before-each-tool-call/decision/result-and-cancellation: + en: 7952d0f88e7b7753 + zh: ea85c96f9d0b78a1 +/agent-note-experimental-auto-review-before-each-tool-call/decision/process-catalog-and-children: + en: c305e3506fb4febc + zh: aecc99cda8be3de2 +/agent-note-experimental-auto-review-before-each-tool-call/alternatives-considered: + en: fe97128ed05b9e43 + zh: 4aaa344933fa89b4 +/agent-note-experimental-auto-review-before-each-tool-call/consequences: + en: 1aca35a6d0784f67 + zh: 51cfa397db101600 diff --git a/.agents/notes/implemented/feature/2026-08-31-cross-process-session-write-lease.i18n.yaml b/.agents/notes/implemented/feature/2026-08-31-cross-process-session-write-lease.i18n.yaml index 0451d6edcb..679466e91b 100644 --- a/.agents/notes/implemented/feature/2026-08-31-cross-process-session-write-lease.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-08-31-cross-process-session-write-lease.i18n.yaml @@ -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-cross-process-session-write-lease.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/feature/2026-08-31-cross-process-session-write-lease.md -2026-08-31-cross-process-session-write-lease.md: bf02ce3eddfb5bcfe2a7d6bd6a6701c47d5f28a4 -2026-08-31-cross-process-session-write-lease.zh.md: b287ab7d6cb4202745fd1112bcb313cb261d674e +/agent-note-cross-process-session-write-lease: + en: 700d2cb4cbf2ba75 + zh: 04a6283f685f4b8a +/agent-note-cross-process-session-write-lease/problem: + en: fa5063a7f8ec786f + zh: f3f7f955d146f00c +/agent-note-cross-process-session-write-lease/decision: + en: fd3a65b3d53ad2d7 + zh: a795f9665045966a +/agent-note-cross-process-session-write-lease/alternatives-considered: + en: c67ce2d14445140a + zh: dd0f531b6e540f9e +/agent-note-cross-process-session-write-lease/consequences: + en: d2a681fa574ebd04 + zh: 4af2e372011bbd59 diff --git a/.agents/notes/implemented/feature/2026-09-01-workflow-run-in-background.i18n.yaml b/.agents/notes/implemented/feature/2026-09-01-workflow-run-in-background.i18n.yaml index 1bc2f5e95d..c220a01232 100644 --- a/.agents/notes/implemented/feature/2026-09-01-workflow-run-in-background.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-01-workflow-run-in-background.i18n.yaml @@ -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-09-01-workflow-run-in-background.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/feature/2026-09-01-workflow-run-in-background.md -2026-09-01-workflow-run-in-background.md: 5a141b384186e7b4f9e8125c37eaf2c01a614a6d -2026-09-01-workflow-run-in-background.zh.md: 102a398d95eef6df07443a919c19dae57b5c1e74 +/agent-note-workflow-runs-gain-run-in-background-over-the-job-registry: + en: f009de4a29acc7d0 + zh: d207b3722564338d +/agent-note-workflow-runs-gain-run-in-background-over-the-job-registry/problem: + en: 4ef955f5184800a3 + zh: 8e4e74557efac4ca +/agent-note-workflow-runs-gain-run-in-background-over-the-job-registry/decision: + en: b0bc1669a6e61b1e + zh: 99ba5afe693aed9d +/agent-note-workflow-runs-gain-run-in-background-over-the-job-registry/alternatives-considered: + en: 70c9a5dd502eae0c + zh: 2b4f7b6a83cfec18 +/agent-note-workflow-runs-gain-run-in-background-over-the-job-registry/consequences: + en: 439882b972d28d4e + zh: 3bd61f42e29f490c diff --git a/.agents/notes/implemented/feature/2026-09-02-in-history-system-prompt-replacement.i18n.yaml b/.agents/notes/implemented/feature/2026-09-02-in-history-system-prompt-replacement.i18n.yaml index 0c14aed1d7..52afcd886f 100644 --- a/.agents/notes/implemented/feature/2026-09-02-in-history-system-prompt-replacement.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-02-in-history-system-prompt-replacement.i18n.yaml @@ -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-09-02-in-history-system-prompt-replacement.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/feature/2026-09-02-in-history-system-prompt-replacement.md -2026-09-02-in-history-system-prompt-replacement.md: aaaf44d6388e6daf98acf8b1a93a61f1d7c55703 -2026-09-02-in-history-system-prompt-replacement.zh.md: 73003b04de82f45154f9c673654cc492eb62a4fd +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes: + en: 7b69ac848815886a + zh: db7a9f4000fe5359 +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/problem: + en: 03d0dad3061794af + zh: 4dbef64cd45c4064 +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/decision: + en: da6d3f0677f0343b + zh: 8b5dcf7e1108edc9 +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/decision/capability: + en: 2f23fa55e1ce652c + zh: 335695fc654ab1db +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/decision/the-decision-rule: + en: 3734096cc35b0c86 + zh: 7b6f4ceaae602c87 +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/decision/presentation-and-accounting: + en: 00a91b4fb592e1e4 + zh: dac2e4f0a3ee9ecf +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/decision/compaction: + en: c21a3e7a773860e5 + zh: 566669e245ccdbaf +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/alternatives-considered: + en: bb8f951694de2aea + zh: d53960bf0ec052c7 +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/consequences: + en: beda064bcd194a2a + zh: 8a3bb81d5edcd60a +/agent-note-in-history-system-prompt-replacement-for-cache-stable-prompt-changes/testing: + en: 4b09d253309f2d4d + zh: f897ffad3a1b2fbe diff --git a/.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.i18n.yaml b/.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.i18n.yaml index 137c5eba63..091e991d76 100644 --- a/.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-04-right-sidebar-docking-infrastructure.i18n.yaml @@ -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-09-04-right-sidebar-docking-infrastructure.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/feature/2026-09-04-right-sidebar-docking-infrastructure.md -2026-09-04-right-sidebar-docking-infrastructure.md: c5bfb75730f2037826723bc7fd0aa2bb01005d1e -2026-09-04-right-sidebar-docking-infrastructure.zh.md: 4959032b53f84654205a1973aee781acb356f999 +/agent-note-right-sidebar-docking-infrastructure: + en: 850908fd93d39f7e + zh: 371d9b0d946c2cb4 +/agent-note-right-sidebar-docking-infrastructure/problem: + en: dae256ae605900f2 + zh: 11e9c51126ad836c +/agent-note-right-sidebar-docking-infrastructure/decision: + en: a30a377c8df0e654 + zh: f2577e74c6be3e88 +/agent-note-right-sidebar-docking-infrastructure/decision/package-topology: + en: 7dfd8ad3a822b421 + zh: 338151c69866c7d5 +/agent-note-right-sidebar-docking-infrastructure/decision/layout-engine: + en: af79bc03cd8e8f72 + zh: 88145221570301bf +/agent-note-right-sidebar-docking-infrastructure/decision/the-frame-s-right-column: + en: 78c5b5bf86d0293a + zh: 28b8856d88b78d1e +/agent-note-right-sidebar-docking-infrastructure/decision/state: + en: 7a73e989059c0871 + zh: ef4f8783fc5f3229 +/agent-note-right-sidebar-docking-infrastructure/decision/beyond-the-surface: + en: 82b5fd9d88c3ea43 + zh: d8581e996abbe034 +/agent-note-right-sidebar-docking-infrastructure/decision/entry-points-and-removals: + en: e9cb121a18afadc2 + zh: 37ff2e89d5641e11 +/agent-note-right-sidebar-docking-infrastructure/alternatives-considered: + en: 6569babd25fc0599 + zh: f9d93c937b2cad60 +/agent-note-right-sidebar-docking-infrastructure/consequences: + en: deb3f1a934c49958 + zh: 040de05a3c602858 +/agent-note-right-sidebar-docking-infrastructure/testing: + en: c7ca930dede9f819 + zh: 44c76a4faefe7268 +/agent-note-right-sidebar-docking-infrastructure/deferred: + en: 6c2cd149c6ecf2b0 + zh: b2673dee64de6bd6 diff --git a/.agents/notes/implemented/feature/2026-09-05-sidebar-text-preview-and-file-tree.i18n.yaml b/.agents/notes/implemented/feature/2026-09-05-sidebar-text-preview-and-file-tree.i18n.yaml index 0d328978e1..7c077c2da7 100644 --- a/.agents/notes/implemented/feature/2026-09-05-sidebar-text-preview-and-file-tree.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-05-sidebar-text-preview-and-file-tree.i18n.yaml @@ -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-09-05-sidebar-text-preview-and-file-tree.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/feature/2026-09-05-sidebar-text-preview-and-file-tree.md -2026-09-05-sidebar-text-preview-and-file-tree.md: e978043545b7f172f2b67053fe44b5936ea9b529 -2026-09-05-sidebar-text-preview-and-file-tree.zh.md: 088d4a58c973843ac5085cfaa1ca9980387bcc8f +/agent-note-sidebar-text-preview-and-file-tree: + en: 2f9ef6cc50ad825d + zh: 5ec8592ac9963f85 +/agent-note-sidebar-text-preview-and-file-tree/problem: + en: 4e647765dfcd2ef9 + zh: 2c362ffdee7ff3d4 +/agent-note-sidebar-text-preview-and-file-tree/decision: + en: f8ea6a52a404b064 + zh: c91528d66487bb33 +/agent-note-sidebar-text-preview-and-file-tree/decision/the-guide: + en: cc4eaeefe4de9a02 + zh: bc9e727d6316ae88 +/agent-note-sidebar-text-preview-and-file-tree/decision/the-text-preview: + en: efc84d800d52a69e + zh: 0061138d7cd12ae7 +/agent-note-sidebar-text-preview-and-file-tree/decision/the-file-tree: + en: f03013eee6c293de + zh: 54796ac3da91047f +/agent-note-sidebar-text-preview-and-file-tree/alternatives-considered: + en: 87fddbd01f117061 + zh: 1810d283202db648 +/agent-note-sidebar-text-preview-and-file-tree/consequences: + en: 00b1675fcd76ad0d + zh: caf3eb340c74aef7 +/agent-note-sidebar-text-preview-and-file-tree/testing: + en: 2987a6417b7e4c14 + zh: 97eeb97e67536c70 +/agent-note-sidebar-text-preview-and-file-tree/deferred: + en: 6c788b26fb65227b + zh: 1bafda76bac92edd +/agent-note-sidebar-text-preview-and-file-tree/related: + en: 0a2531b19968c69b + zh: 4065017075aa11cc diff --git a/.agents/notes/implemented/feature/2026-09-07-composer-session-stats-pills.i18n.yaml b/.agents/notes/implemented/feature/2026-09-07-composer-session-stats-pills.i18n.yaml index d4ef512e91..b54791c599 100644 --- a/.agents/notes/implemented/feature/2026-09-07-composer-session-stats-pills.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-07-composer-session-stats-pills.i18n.yaml @@ -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-09-07-composer-session-stats-pills.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/feature/2026-09-07-composer-session-stats-pills.md -2026-09-07-composer-session-stats-pills.md: 50d3d3294ed012773657ba9849e45835c361d8be -2026-09-07-composer-session-stats-pills.zh.md: 97b91b601e62e8b06ab13a764babb4dd3b25bfce +/agent-note-composer-session-stats-two-icon-pills-with-click-open-stat-dialogs: + en: 76e613674da56884 + zh: 4c9c5d750eace3e0 +/agent-note-composer-session-stats-two-icon-pills-with-click-open-stat-dialogs/problem: + en: 654462fa4eeb58dc + zh: 7c9cd57947ab8639 +/agent-note-composer-session-stats-two-icon-pills-with-click-open-stat-dialogs/decision: + en: 27eb1718cd80b39b + zh: e39576842a3578c1 +/agent-note-composer-session-stats-two-icon-pills-with-click-open-stat-dialogs/alternatives-considered: + en: 7798b1fb9824b920 + zh: 7e75cd154ab58a0b +/agent-note-composer-session-stats-two-icon-pills-with-click-open-stat-dialogs/consequences: + en: c078fb870536eec6 + zh: 17076d824c74ee9d diff --git a/.agents/notes/implemented/feature/2026-09-07-deepseek-messages-adapter.i18n.yaml b/.agents/notes/implemented/feature/2026-09-07-deepseek-messages-adapter.i18n.yaml index 13e41b76da..65061d8855 100644 --- a/.agents/notes/implemented/feature/2026-09-07-deepseek-messages-adapter.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-07-deepseek-messages-adapter.i18n.yaml @@ -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-09-07-deepseek-messages-adapter.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/feature/2026-09-07-deepseek-messages-adapter.md -2026-09-07-deepseek-messages-adapter.md: 29f712e57c8048ddb0c05b5f56fd4793c52bec5f -2026-09-07-deepseek-messages-adapter.zh.md: 3cf60fc2101fb835423b74a6532e5edcc5bee911 +/agent-note-deepseek-through-the-anthropic-messages-protocol: + en: 4d1dc31d47e3e8b1 + zh: b80687f6506860d5 +/agent-note-deepseek-through-the-anthropic-messages-protocol/problem: + en: 6c9d47e829752afe + zh: 98bd3b5300bfea8c +/agent-note-deepseek-through-the-anthropic-messages-protocol/decision: + en: 3c28330671a1e6db + zh: 0d7ef9a8cf22c51f +/agent-note-deepseek-through-the-anthropic-messages-protocol/alternatives-considered: + en: 4297bc439e8b23e4 + zh: 2bb4dec78040d81e +/agent-note-deepseek-through-the-anthropic-messages-protocol/consequences: + en: 76aa9259724323d2 + zh: 0aac83847bbd4ab6 diff --git a/.agents/notes/implemented/feature/2026-09-07-model-switch-notice.i18n.yaml b/.agents/notes/implemented/feature/2026-09-07-model-switch-notice.i18n.yaml index a3796aa548..d1cc740eac 100644 --- a/.agents/notes/implemented/feature/2026-09-07-model-switch-notice.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-07-model-switch-notice.i18n.yaml @@ -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-09-07-model-switch-notice.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/feature/2026-09-07-model-switch-notice.md -2026-09-07-model-switch-notice.md: cb2f915f13b5fa277977b7a768a3531074126f2a -2026-09-07-model-switch-notice.zh.md: b6dd8da02732e4b6c6b2102aef6074b8f136d37d +/agent-note-model-visible-route-change-notices: + en: 8e372ee5814c99d1 + zh: 3fd0faa18fc02f75 +/agent-note-model-visible-route-change-notices/problem: + en: 0c0be027f271e132 + zh: c4f6aa9217633f43 +/agent-note-model-visible-route-change-notices/decision: + en: 86dbb17229ae9634 + zh: 6b0af5f12441461c +/agent-note-model-visible-route-change-notices/alternatives-considered: + en: 9e8ac73976d39c99 + zh: e637370a5f2b0de8 +/agent-note-model-visible-route-change-notices/consequences: + en: 93976aae03285052 + zh: 27791c4f1f36dc92 diff --git a/.agents/notes/implemented/feature/2026-09-07-session-prose-local-media-display.i18n.yaml b/.agents/notes/implemented/feature/2026-09-07-session-prose-local-media-display.i18n.yaml index daa947a20c..ddf9d83bdd 100644 --- a/.agents/notes/implemented/feature/2026-09-07-session-prose-local-media-display.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-07-session-prose-local-media-display.i18n.yaml @@ -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-09-07-session-prose-local-media-display.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/feature/2026-09-07-session-prose-local-media-display.md -2026-09-07-session-prose-local-media-display.md: fe769d1cbe0b54eed355a7e699bf853a497820cb -2026-09-07-session-prose-local-media-display.zh.md: 2cfff4016f42a13d94a1097602ff2dadbd28d2a7 +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route: + en: 58736e33d45c5578 + zh: 224ab6304833ce7f +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route/problem: + en: 934cbf480461e9e6 + zh: 986d53c72b94cfe4 +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route/decision: + en: 37e189446dd25601 + zh: 0321b091e2250650 +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route/alternatives-considered: + en: b184da259c41e4de + zh: 5c75e50fa595a30e +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route/consequences: + en: 9929a8ad123b21b0 + zh: ac5bf7f3a317d180 +/agent-note-session-prose-local-media-paths-display-through-a-same-origin-file-route/testing: + en: 3c29c3c506a993b2 + zh: 2dfac506ae2ff93a diff --git a/.agents/notes/implemented/feature/2026-09-08-composer-menu-sections-and-localized-rows.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-composer-menu-sections-and-localized-rows.i18n.yaml index 93a617d08b..9956298fd4 100644 --- a/.agents/notes/implemented/feature/2026-09-08-composer-menu-sections-and-localized-rows.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-composer-menu-sections-and-localized-rows.i18n.yaml @@ -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-09-08-composer-menu-sections-and-localized-rows.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/feature/2026-09-08-composer-menu-sections-and-localized-rows.md -2026-09-08-composer-menu-sections-and-localized-rows.md: 50b97ce2c7e59d53bf5607fef74a799a359d27c8 -2026-09-08-composer-menu-sections-and-localized-rows.zh.md: 92bcb04bfe9b4f7b5581c80d7c0b843f98096e52 +/agent-note-composer-menu-sections-localized-rows-and-the-file-row: + en: c917d19351c56a78 + zh: f443c8b88e4f71dd +/agent-note-composer-menu-sections-localized-rows-and-the-file-row/problem: + en: 3047bf5dd9f33e93 + zh: 34b017add5329b49 +/agent-note-composer-menu-sections-localized-rows-and-the-file-row/decision: + en: 7f9b8265d826561e + zh: e2eca2e3f58d296f +/agent-note-composer-menu-sections-localized-rows-and-the-file-row/alternatives-considered: + en: a7806a39ab7a1bac + zh: 421815a13d53e306 +/agent-note-composer-menu-sections-localized-rows-and-the-file-row/consequences: + en: 8d4daba9e67cdfaa + zh: 6ef43f58f9abf3bc diff --git a/.agents/notes/implemented/feature/2026-09-08-desktop-uninstall-preserve-dsh-home.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-desktop-uninstall-preserve-dsh-home.i18n.yaml index 3bdaabeccf..ea1536b2ae 100644 --- a/.agents/notes/implemented/feature/2026-09-08-desktop-uninstall-preserve-dsh-home.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-desktop-uninstall-preserve-dsh-home.i18n.yaml @@ -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-09-08-desktop-uninstall-preserve-dsh-home.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/feature/2026-09-08-desktop-uninstall-preserve-dsh-home.md -2026-09-08-desktop-uninstall-preserve-dsh-home.md: 921d9681aa6a26c39e8861d2156dc868237f5b37 -2026-09-08-desktop-uninstall-preserve-dsh-home.zh.md: cb9187bb6d7c3f619dc083fcc3b36cca09494515 +/agent-note-windows-uninstall-retains-the-harness-home: + en: ae26a8eee5e5ef6e + zh: 2549190b3d8890e1 +/agent-note-windows-uninstall-retains-the-harness-home/problem: + en: 7e0091e3af8b52d8 + zh: b40193a58711c6a5 +/agent-note-windows-uninstall-retains-the-harness-home/decision: + en: fd2608389491a1f8 + zh: b007e1d35a049292 +/agent-note-windows-uninstall-retains-the-harness-home/alternatives-considered: + en: f3a2c8263d598b30 + zh: 226a3203c940bdd3 +/agent-note-windows-uninstall-retains-the-harness-home/deferred: + en: 7d13267e5928961a + zh: 79398501c8e099dd +/agent-note-windows-uninstall-retains-the-harness-home/consequences: + en: 9f94a327edbd7685 + zh: fa53c77c2d9df54d diff --git a/.agents/notes/implemented/feature/2026-09-08-feedback-dialog-and-categories.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-feedback-dialog-and-categories.i18n.yaml index c18c6397ed..5de5db011a 100644 --- a/.agents/notes/implemented/feature/2026-09-08-feedback-dialog-and-categories.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-feedback-dialog-and-categories.i18n.yaml @@ -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-09-08-feedback-dialog-and-categories.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/feature/2026-09-08-feedback-dialog-and-categories.md -2026-09-08-feedback-dialog-and-categories.md: 1d544e6ef978c10008ac62768b6faaf9eaaf8b73 -2026-09-08-feedback-dialog-and-categories.zh.md: 6e58820bf308a3a9f7d15b64027f90e7e6771bd4 +/agent-note-feedback-dialog-categories-and-the-acknowledgement-toast: + en: 0ca76fe002b0b0fc + zh: 14fa2772a6a23e25 +/agent-note-feedback-dialog-categories-and-the-acknowledgement-toast/problem: + en: 90ac7f116156c209 + zh: 20274add2ffbcdc0 +/agent-note-feedback-dialog-categories-and-the-acknowledgement-toast/decision: + en: 4cde40e5b1ad6beb + zh: fb49e47434faf06f +/agent-note-feedback-dialog-categories-and-the-acknowledgement-toast/alternatives-considered: + en: 3713257ee75869da + zh: 5892d375fe8d0764 +/agent-note-feedback-dialog-categories-and-the-acknowledgement-toast/consequences: + en: a55c05291a78e922 + zh: 1373131586665daf diff --git a/.agents/notes/implemented/feature/2026-09-08-file-display-through-filesystem.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-file-display-through-filesystem.i18n.yaml index 0817dcd4f1..efe36291ac 100644 --- a/.agents/notes/implemented/feature/2026-09-08-file-display-through-filesystem.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-file-display-through-filesystem.i18n.yaml @@ -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-09-08-file-display-through-filesystem.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/feature/2026-09-08-file-display-through-filesystem.md -2026-09-08-file-display-through-filesystem.md: b1f93f8c9fbd245ad69bc732b2a599c6e0abeb0d -2026-09-08-file-display-through-filesystem.zh.md: faa3fdb757c9a3fc60cae37692a559158e02ceee +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads: + en: 1db6d91b6011384e + zh: 68152c2e3fff2931 +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads/problem: + en: c8e25473775da151 + zh: af807ea30d423858 +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads/decision: + en: d448ed98f635fd14 + zh: 81795f947a0c1c99 +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads/alternatives-considered: + en: 80e52b422305ca28 + zh: d0e38b1cd96be951 +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads/consequences: + en: 15ec0dd18d621f24 + zh: e4925a96395edd8c +/agent-note-authenticated-file-display-reuses-filesystem-byte-reads/testing: + en: 9d28b1552a2decde + zh: 6ea9f91992bcfa1a diff --git a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml index 057e138853..e2c08a0acd 100644 --- a/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-present-workspace-source-files.i18n.yaml @@ -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-09-08-present-workspace-source-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/feature/2026-09-08-present-workspace-source-files.md -2026-09-08-present-workspace-source-files.md: 52cc3e9cdbcd30d378117a327b86062523a2cb3e -2026-09-08-present-workspace-source-files.zh.md: 99b7b9df1d9ca2da2175df1ae7e9d8acbb5c5fdd +/agent-note-present-declares-workspace-source-files: + en: 8e9f703ce074f949 + zh: 37e27d1591d31b9d +/agent-note-present-declares-workspace-source-files/problem: + en: 8598b8d2e92bcfa1 + zh: e3ae5fc294711095 +/agent-note-present-declares-workspace-source-files/decision: + en: 481549ced705b010 + zh: 8cad3ea14f84decf +/agent-note-present-declares-workspace-source-files/alternatives-considered: + en: b959eae9786351da + zh: 030c06051d6ac4be +/agent-note-present-declares-workspace-source-files/consequences: + en: 98cd6d2356003a58 + zh: 6e0b46c4ec6ba4b5 diff --git a/.agents/notes/implemented/feature/2026-09-08-shared-file-type-icons.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-shared-file-type-icons.i18n.yaml index 35f8f4dc56..569b09933e 100644 --- a/.agents/notes/implemented/feature/2026-09-08-shared-file-type-icons.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-shared-file-type-icons.i18n.yaml @@ -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-09-08-shared-file-type-icons.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/feature/2026-09-08-shared-file-type-icons.md -2026-09-08-shared-file-type-icons.md: 5dbe0ade14c15e1d509f56eba6e0266c61089c46 -2026-09-08-shared-file-type-icons.zh.md: 9dbccdf10f188b30dcbbbe11d45b238af42ca112 +/agent-note-shared-file-type-icons: + en: d83f437754356503 + zh: 7f5b673537312d8c +/agent-note-shared-file-type-icons/problem: + en: 67d8c2d11e0ae0a2 + zh: fb2a576b528db3ad +/agent-note-shared-file-type-icons/decision: + en: 418ba69021928ba0 + zh: 7fc1b5cef5f22004 +/agent-note-shared-file-type-icons/alternatives-considered: + en: 67dc36a02b841541 + zh: cf262c343957ff69 +/agent-note-shared-file-type-icons/testing: + en: 16768b2ea13d16ef + zh: e7455e31220bb2e6 +/agent-note-shared-file-type-icons/consequences: + en: fb30a1c743dbe885 + zh: 858fb79479434d69 diff --git a/.agents/notes/implemented/feature/2026-09-08-sidebar-default-pages.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-sidebar-default-pages.i18n.yaml index e6392aa970..b7a60a735c 100644 --- a/.agents/notes/implemented/feature/2026-09-08-sidebar-default-pages.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-sidebar-default-pages.i18n.yaml @@ -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-09-08-sidebar-default-pages.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/feature/2026-09-08-sidebar-default-pages.md -2026-09-08-sidebar-default-pages.md: 13374ab294cab74b54ada8550a6dff5af2cd9cd1 -2026-09-08-sidebar-default-pages.zh.md: 6730a87fbe9c59ef6d448fe0f2d4c3c2cb75e6bb +/agent-note-sidebar-default-pages: + en: 0b6b9c156b3653d9 + zh: f4650c41660ea99d +/agent-note-sidebar-default-pages/problem: + en: 48127a7f5a873a52 + zh: a722f139876a415a +/agent-note-sidebar-default-pages/decision: + en: b6707d5c48eb414a + zh: c920061739304dfc +/agent-note-sidebar-default-pages/alternatives-considered: + en: 8d981eef6c5088b8 + zh: 0bc9541a7f7d7b53 +/agent-note-sidebar-default-pages/consequences: + en: eb418364a7c202e2 + zh: d2372099a1ed3e6e diff --git a/.agents/notes/implemented/feature/2026-09-08-sidebar-last-tab-close-rules.i18n.yaml b/.agents/notes/implemented/feature/2026-09-08-sidebar-last-tab-close-rules.i18n.yaml index 2846db77ba..a4049b0446 100644 --- a/.agents/notes/implemented/feature/2026-09-08-sidebar-last-tab-close-rules.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-08-sidebar-last-tab-close-rules.i18n.yaml @@ -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-09-08-sidebar-last-tab-close-rules.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/feature/2026-09-08-sidebar-last-tab-close-rules.md -2026-09-08-sidebar-last-tab-close-rules.md: ed76b0ad0b8bbadcf5eace12a7da3bd38c733d0e -2026-09-08-sidebar-last-tab-close-rules.zh.md: bcc54c0c39cc65434f21ef8f6f81a382b6eecdb7 +/agent-note-last-tab-close-rules-on-the-sidebar-s-docked-surface: + en: 4f38145de396b08f + zh: 3e65231a5ebb8fdd +/agent-note-last-tab-close-rules-on-the-sidebar-s-docked-surface/problem: + en: 90a9c3dc146c7d11 + zh: a12b784b66fa3979 +/agent-note-last-tab-close-rules-on-the-sidebar-s-docked-surface/decision: + en: a760dcb29bb9645c + zh: ad4dafd7d5b407e7 +/agent-note-last-tab-close-rules-on-the-sidebar-s-docked-surface/alternatives-considered: + en: 4e2673d521d6540e + zh: 0d5f0b99ea80d5ff +/agent-note-last-tab-close-rules-on-the-sidebar-s-docked-surface/consequences: + en: 3e43dd3066e8b05b + zh: ed6ed81abb18131b diff --git a/.agents/notes/implemented/feature/2026-09-09-headless-machine-readable-run-surface.i18n.yaml b/.agents/notes/implemented/feature/2026-09-09-headless-machine-readable-run-surface.i18n.yaml index d704c77ad2..f4cc113bc2 100644 --- a/.agents/notes/implemented/feature/2026-09-09-headless-machine-readable-run-surface.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-09-headless-machine-readable-run-surface.i18n.yaml @@ -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-09-09-headless-machine-readable-run-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/feature/2026-09-09-headless-machine-readable-run-surface.md -2026-09-09-headless-machine-readable-run-surface.md: 317f213095f86e94104c013139390cdf988f95fe -2026-09-09-headless-machine-readable-run-surface.zh.md: 0114f87aef4f25db0887663464973bb2f762b2d5 +/agent-note-headless-machine-readable-run-surface: + en: bcf2251478004e35 + zh: 70ade47c837c6bab +/agent-note-headless-machine-readable-run-surface/problem: + en: 9d2c64ed47b82129 + zh: bb0de126368e9f07 +/agent-note-headless-machine-readable-run-surface/decision: + en: ed08acff9c4ea030 + zh: 484c2646de4aa5d8 +/agent-note-headless-machine-readable-run-surface/decision/command-line-contract: + en: 59470d5c2eba0a57 + zh: 342c1ac9042c6b46 +/agent-note-headless-machine-readable-run-surface/decision/event-stream: + en: b6837e3de1305559 + zh: 183956da3319a126 +/agent-note-headless-machine-readable-run-surface/decision/session-identity: + en: ebb2c5da4ea076a9 + zh: a706416d290e7424 +/agent-note-headless-machine-readable-run-surface/consequences: + en: 1ba14087f533dd8e + zh: 66f4aa9d63a0da23 +/agent-note-headless-machine-readable-run-surface/alternatives-considered: + en: 42f321bd399f906e + zh: 3b13791afa256781 diff --git a/.agents/notes/implemented/feature/2026-09-09-present-filesystem-access.i18n.yaml b/.agents/notes/implemented/feature/2026-09-09-present-filesystem-access.i18n.yaml index 5bb1142826..4b6f724f0b 100644 --- a/.agents/notes/implemented/feature/2026-09-09-present-filesystem-access.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-09-present-filesystem-access.i18n.yaml @@ -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-09-09-present-filesystem-access.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/feature/2026-09-09-present-filesystem-access.md -2026-09-09-present-filesystem-access.md: 5c9d5bec47c73ac1c5952b887d56e582148a4cea -2026-09-09-present-filesystem-access.zh.md: 6387f07b17276b3455d19d650b4ae031a7efda4c +/agent-note-present-follows-session-filesystem-access: + en: 33cf0a75284f8392 + zh: 5299af2f77bf6fd8 +/agent-note-present-follows-session-filesystem-access/problem: + en: dda1953cb567c3dc + zh: 3c447175454c844a +/agent-note-present-follows-session-filesystem-access/decision: + en: 2668dd51b07e2653 + zh: 3cd895017f568c42 +/agent-note-present-follows-session-filesystem-access/alternatives-considered: + en: 85336cd165610ddf + zh: 75608e3bfeab5dc5 +/agent-note-present-follows-session-filesystem-access/consequences: + en: e31784fe619d4d1c + zh: 7cadc3941a0c7b33 diff --git a/.agents/notes/implemented/feature/2026-09-09-ptc-trajectory-code-inspection.i18n.yaml b/.agents/notes/implemented/feature/2026-09-09-ptc-trajectory-code-inspection.i18n.yaml index d88fb31e2e..6ae3a85d71 100644 --- a/.agents/notes/implemented/feature/2026-09-09-ptc-trajectory-code-inspection.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-09-ptc-trajectory-code-inspection.i18n.yaml @@ -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-09-09-ptc-trajectory-code-inspection.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/feature/2026-09-09-ptc-trajectory-code-inspection.md -2026-09-09-ptc-trajectory-code-inspection.md: 19779d20e8d08ce0ca9678ab6626765faa13cf65 -2026-09-09-ptc-trajectory-code-inspection.zh.md: 7cdb2321d61893e43426798d311847662450d289 +/agent-note-inspect-recorded-ptc-source-in-trajectory: + en: 29f601adfcaa6019 + zh: bdd1c59d1bbbff62 +/agent-note-inspect-recorded-ptc-source-in-trajectory/problem: + en: 6b49bc4faca04ae0 + zh: 60165937e0a7c71d +/agent-note-inspect-recorded-ptc-source-in-trajectory/decision: + en: 43dd488c270c1664 + zh: 3fdf6d374c49fee3 +/agent-note-inspect-recorded-ptc-source-in-trajectory/alternatives-considered: + en: bbf705774c5c608a + zh: 1af9b4aa3d4fa025 +/agent-note-inspect-recorded-ptc-source-in-trajectory/consequences: + en: c680634fe8b95880 + zh: 7660cd3354522ef8 diff --git a/.agents/notes/implemented/feature/2026-09-09-sidebar-and-preview-interaction-polish.i18n.yaml b/.agents/notes/implemented/feature/2026-09-09-sidebar-and-preview-interaction-polish.i18n.yaml index 6906decd2f..e82abbb700 100644 --- a/.agents/notes/implemented/feature/2026-09-09-sidebar-and-preview-interaction-polish.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-09-sidebar-and-preview-interaction-polish.i18n.yaml @@ -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-09-09-sidebar-and-preview-interaction-polish.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/feature/2026-09-09-sidebar-and-preview-interaction-polish.md -2026-09-09-sidebar-and-preview-interaction-polish.md: eba8bd3a2314c7eaf18cd9982aa4e599665dbc62 -2026-09-09-sidebar-and-preview-interaction-polish.zh.md: 93d88d41e99f50621c80d69d615e39852b715c89 +/agent-note-sidebar-and-preview-interaction-polish: + en: bce3b5bc9f49bbff + zh: bebc5b0ce3a370a7 +/agent-note-sidebar-and-preview-interaction-polish/problem: + en: 2d6e8ec1b08dcce9 + zh: 75e1c454d71da103 +/agent-note-sidebar-and-preview-interaction-polish/decision: + en: 7358c236daed510b + zh: 93cf67bbffa2c20b +/agent-note-sidebar-and-preview-interaction-polish/alternatives-considered: + en: c828e83875412d49 + zh: d0277bf0d1f5d7a9 +/agent-note-sidebar-and-preview-interaction-polish/consequences: + en: cb7cb72724552f2b + zh: 05705b4795ade85f diff --git a/.agents/notes/implemented/feature/2026-09-09-web-sidebar-terminal.i18n.yaml b/.agents/notes/implemented/feature/2026-09-09-web-sidebar-terminal.i18n.yaml index 76ed3e8786..73ba0975be 100644 --- a/.agents/notes/implemented/feature/2026-09-09-web-sidebar-terminal.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-09-web-sidebar-terminal.i18n.yaml @@ -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-09-09-web-sidebar-terminal.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/feature/2026-09-09-web-sidebar-terminal.md -2026-09-09-web-sidebar-terminal.md: 09be4a142f615750799e01106eac7a9b52cbad48 -2026-09-09-web-sidebar-terminal.zh.md: c2ac1468756ee08c713855979119662390ffeadb +/agent-note-web-sidebar-terminals: + en: dfb245f871011059 + zh: d64c0bd9cbe5f652 +/agent-note-web-sidebar-terminals/problem: + en: 71813b1cb1f750ba + zh: 64d2b999933ccd98 +/agent-note-web-sidebar-terminals/decision: + en: d73dc0a37bd7c9dd + zh: f5c6cf8cce36090a +/agent-note-web-sidebar-terminals/alternatives-considered: + en: 0c129fba63a60777 + zh: c334f34dd71bbaf6 +/agent-note-web-sidebar-terminals/consequences: + en: d710787595b5dc89 + zh: 4df9518c32698f85 +/agent-note-web-sidebar-terminals/related: + en: 94540c743da01fc4 + zh: 53e3d9d2268153d1 diff --git a/.agents/notes/implemented/feature/2026-09-10-composer-reference-previews.i18n.yaml b/.agents/notes/implemented/feature/2026-09-10-composer-reference-previews.i18n.yaml index ee5d2b3fa2..e5beccba4f 100644 --- a/.agents/notes/implemented/feature/2026-09-10-composer-reference-previews.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-10-composer-reference-previews.i18n.yaml @@ -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-09-10-composer-reference-previews.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/feature/2026-09-10-composer-reference-previews.md -2026-09-10-composer-reference-previews.md: e9425851c1dc4ac0c8dc588d3b234c173eeb9262 -2026-09-10-composer-reference-previews.zh.md: c47718468bf1e38469140c12c1096b7bc5da0f40 +/agent-note-composer-reference-previews: + en: 4077f5f4bb6cbbc1 + zh: 0ed641c53ecc9ff9 +/agent-note-composer-reference-previews/problem: + en: b6c93af7ecb4f6df + zh: e6efd6ac2e2193fc +/agent-note-composer-reference-previews/decision: + en: f895747aad30a9ea + zh: 1a736bbf64f82041 +/agent-note-composer-reference-previews/alternatives-considered: + en: c76709c683a56316 + zh: a6708957a465c3ce +/agent-note-composer-reference-previews/consequences: + en: d67f32b4450e8c71 + zh: 7d3a8c6588959e04 diff --git a/.agents/notes/implemented/feature/2026-09-10-symmetric-message-feedback-submission.i18n.yaml b/.agents/notes/implemented/feature/2026-09-10-symmetric-message-feedback-submission.i18n.yaml index bc63e89dd9..9a45958b42 100644 --- a/.agents/notes/implemented/feature/2026-09-10-symmetric-message-feedback-submission.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-10-symmetric-message-feedback-submission.i18n.yaml @@ -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-09-10-symmetric-message-feedback-submission.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/feature/2026-09-10-symmetric-message-feedback-submission.md -2026-09-10-symmetric-message-feedback-submission.md: 51c754dbd3ecc566e15ec1b7a276fc2a3cf7c551 -2026-09-10-symmetric-message-feedback-submission.zh.md: 0ba5d1a1c53f08b76c5bbc32b84687c3dcd38ec2 +/agent-note-symmetric-message-feedback-submission: + en: 40f6c11f8f4332a2 + zh: fa31c26c296f892c +/agent-note-symmetric-message-feedback-submission/problem: + en: f5afa64229a1e8db + zh: b73e730754f33cc5 +/agent-note-symmetric-message-feedback-submission/decision: + en: a8a9598cb30f8f8e + zh: 3073219d585bc5fd +/agent-note-symmetric-message-feedback-submission/alternatives-considered: + en: b425d01d854f8962 + zh: f74131c171c9f74a +/agent-note-symmetric-message-feedback-submission/consequences: + en: 833bc3370c02fd1e + zh: 2718d60cdf762436 diff --git a/.agents/notes/implemented/feature/2026-09-11-desktop-mandatory-update-client.i18n.yaml b/.agents/notes/implemented/feature/2026-09-11-desktop-mandatory-update-client.i18n.yaml index 32ae05e725..0e6f21dae4 100644 --- a/.agents/notes/implemented/feature/2026-09-11-desktop-mandatory-update-client.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-11-desktop-mandatory-update-client.i18n.yaml @@ -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-09-11-desktop-mandatory-update-client.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/feature/2026-09-11-desktop-mandatory-update-client.md -2026-09-11-desktop-mandatory-update-client.md: ff55f30836a37e49229adac6414cb3a98bca4d6c -2026-09-11-desktop-mandatory-update-client.zh.md: 6c17a9fbd0ce2741b635b742be682d4c5fd9f8c6 +/agent-note-desktop-mandatory-update-client-and-blocking-window: + en: 059254153764a162 + zh: 17dfd84fd2ba6eea +/agent-note-desktop-mandatory-update-client-and-blocking-window/problem: + en: f1aeaa7df97a744f + zh: 039b2cccd9a45198 +/agent-note-desktop-mandatory-update-client-and-blocking-window/decision: + en: fc0fa9c713fb74e8 + zh: 783f643486eeccaa +/agent-note-desktop-mandatory-update-client-and-blocking-window/alternatives-considered: + en: 136afb04a37db4a1 + zh: 2b049e0d9fd8aa27 +/agent-note-desktop-mandatory-update-client-and-blocking-window/consequences: + en: 6f7a3decf4f0504f + zh: 16241131d1053989 diff --git a/.agents/notes/implemented/feature/2026-09-11-sidebar-document-preview-polish.i18n.yaml b/.agents/notes/implemented/feature/2026-09-11-sidebar-document-preview-polish.i18n.yaml index fe0979cdb2..bffd9997fe 100644 --- a/.agents/notes/implemented/feature/2026-09-11-sidebar-document-preview-polish.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-11-sidebar-document-preview-polish.i18n.yaml @@ -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-09-11-sidebar-document-preview-polish.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/feature/2026-09-11-sidebar-document-preview-polish.md -2026-09-11-sidebar-document-preview-polish.md: b78141881513167a08050afb287eb4d1bcb43995 -2026-09-11-sidebar-document-preview-polish.zh.md: 43016af0dff72ed09a19271535912ba9abd65d9c +/agent-note-sidebar-document-preview-polish: + en: f6de5780a080c43b + zh: 43c5fe472e41c955 +/agent-note-sidebar-document-preview-polish/problem: + en: 4a52e0a397d95c28 + zh: ecaeb3f570c775da +/agent-note-sidebar-document-preview-polish/decision: + en: 6292b936ed7ee1bb + zh: 1758900c96a6811b +/agent-note-sidebar-document-preview-polish/alternatives-considered: + en: e2e5b8bbd191385e + zh: 29b37f3ec312f5ca +/agent-note-sidebar-document-preview-polish/consequences: + en: 38951cfb55e9214c + zh: 6ca3845e206be2da diff --git a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml index 376ac2b6d8..26ab339a79 100644 --- a/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-11-turn-changed-files-card.i18n.yaml @@ -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-09-11-turn-changed-files-card.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/feature/2026-09-11-turn-changed-files-card.md -2026-09-11-turn-changed-files-card.md: 0c41783c6d5d02fecd0c85298aed1f07f5c8a65f -2026-09-11-turn-changed-files-card.zh.md: f417b31b899529b664664926c832c28f4b1be6ba +/agent-note-turn-changed-files-card: + en: 21aea14160ab0796 + zh: c8b389f1b684f677 +/agent-note-turn-changed-files-card/problem: + en: f3416b4d37371155 + zh: 52e22bd5a90358e5 +/agent-note-turn-changed-files-card/decision: + en: 75a1a9aa9b204844 + zh: 941fdb3556ebe035 +/agent-note-turn-changed-files-card/alternatives-considered: + en: 7ade7ce52c2a320d + zh: 18832d5f45568429 +/agent-note-turn-changed-files-card/consequences: + en: 33504bcb31f30f84 + zh: c6626b532701fcc7 diff --git a/.agents/notes/implemented/feature/2026-09-12-mcp-resources-and-instructions.i18n.yaml b/.agents/notes/implemented/feature/2026-09-12-mcp-resources-and-instructions.i18n.yaml index 44220ef7f3..05daf52fa7 100644 --- a/.agents/notes/implemented/feature/2026-09-12-mcp-resources-and-instructions.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-12-mcp-resources-and-instructions.i18n.yaml @@ -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-09-12-mcp-resources-and-instructions.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/feature/2026-09-12-mcp-resources-and-instructions.md -2026-09-12-mcp-resources-and-instructions.md: a5eabd6170507d5a4df295b8554e6da47b40b9be -2026-09-12-mcp-resources-and-instructions.zh.md: 44890b23944f482a2e1a38483029f1e61caebbe1 +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions: + en: 052fc1f95f280688 + zh: fdfacc841597d4da +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions/problem: + en: 0d6c75e85a04c36a + zh: fe5043f324369cdd +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions/decision: + en: 69a021dd23820bb8 + zh: 447d2d8d03f12896 +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions/alternatives-considered: + en: 02bc8e76ce4d68ab + zh: 0991cc64ff9e3011 +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions/verification: + en: 41694d9121383436 + zh: 781ea7503ea149f1 +/agent-note-on-demand-mcp-resources-and-scoped-server-instructions/consequences: + en: 432b24aa763eff2e + zh: 236825ede84e2c0d diff --git a/.agents/notes/implemented/feature/2026-09-12-mcp-sdk-protocol-negotiation.i18n.yaml b/.agents/notes/implemented/feature/2026-09-12-mcp-sdk-protocol-negotiation.i18n.yaml index 61450c1d3c..25b2735cf8 100644 --- a/.agents/notes/implemented/feature/2026-09-12-mcp-sdk-protocol-negotiation.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-12-mcp-sdk-protocol-negotiation.i18n.yaml @@ -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-09-12-mcp-sdk-protocol-negotiation.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/feature/2026-09-12-mcp-sdk-protocol-negotiation.md -2026-09-12-mcp-sdk-protocol-negotiation.md: 74f027cead92688b0af71c1028d536b26f2a8059 -2026-09-12-mcp-sdk-protocol-negotiation.zh.md: bc8a9a41b8ccd8cbc844b4b9de8b39a646d1dcbf +/agent-note-mcp-sdk-protocol-negotiation: + en: 9228ca2f4da2f41b + zh: 7cd10429865c3f2d +/agent-note-mcp-sdk-protocol-negotiation/problem: + en: bd614e17c62d137e + zh: ee71fdcd310a9592 +/agent-note-mcp-sdk-protocol-negotiation/decision: + en: ed7b45ffcaeffedd + zh: 2287d525ec04006c +/agent-note-mcp-sdk-protocol-negotiation/alternatives-considered: + en: 1fba2ebdcc100c37 + zh: 45c384641d3b0300 +/agent-note-mcp-sdk-protocol-negotiation/consequences: + en: 1a50179c0254517c + zh: 046e4f72bfc2ea89 diff --git a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml index c6d3366d84..ccb4558c12 100644 --- a/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-13-macos-hidden-titlebar-vibrancy.i18n.yaml @@ -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-09-13-macos-hidden-titlebar-vibrancy.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/feature/2026-09-13-macos-hidden-titlebar-vibrancy.md -2026-09-13-macos-hidden-titlebar-vibrancy.md: 7e69fea3a40ace0761949a655cb302b7ca7f4e91 -2026-09-13-macos-hidden-titlebar-vibrancy.zh.md: fbba1857402d54e0da0b31198db0608d8146a34f +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar: + en: 1872fd56128fb565 + zh: dc7b04d80eda9880 +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar/problem: + en: 199f00b0e7f3c09c + zh: bb331fc8d7d46bbd +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar/decision: + en: f59c3d276d0fb5c0 + zh: 85509dca9810cd4d +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar/alternatives-considered: + en: 28d920253012bd11 + zh: ae6a27f959d5afe3 +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar/consequences: + en: e08ce133c72863d8 + zh: e67b5c3bff579d86 +/agent-note-macos-hidden-titlebar-with-vibrancy-sidebar/testing: + en: a075febd9b78dc5f + zh: 7c59a9b7f0798dac diff --git a/.agents/notes/implemented/feature/2026-09-13-mcp-resources-in-profiles.i18n.yaml b/.agents/notes/implemented/feature/2026-09-13-mcp-resources-in-profiles.i18n.yaml index ea2358fcd3..854c136a37 100644 --- a/.agents/notes/implemented/feature/2026-09-13-mcp-resources-in-profiles.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-13-mcp-resources-in-profiles.i18n.yaml @@ -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-09-13-mcp-resources-in-profiles.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/feature/2026-09-13-mcp-resources-in-profiles.md -2026-09-13-mcp-resources-in-profiles.md: 236cd2849383e32fee523c56a43aae2fcae1f07a -2026-09-13-mcp-resources-in-profiles.zh.md: d2e0fbc45cdffe16ac482173d75c13329b98b868 +/agent-note-mcp-resource-availability-follows-configured-servers: + en: 2f520034ae7711ed + zh: 0e76516042ef51c1 +/agent-note-mcp-resource-availability-follows-configured-servers/problem: + en: 729c308d0bb4e142 + zh: 42df44189f83a701 +/agent-note-mcp-resource-availability-follows-configured-servers/decision: + en: 6d79d22b7a2d118a + zh: 9e7aaccbcb6535c0 +/agent-note-mcp-resource-availability-follows-configured-servers/alternatives-considered: + en: e60cb2c45a8a8cf7 + zh: e74f3b9ca5157278 +/agent-note-mcp-resource-availability-follows-configured-servers/verification: + en: d07e735ad317655c + zh: c9419acac96f0740 +/agent-note-mcp-resource-availability-follows-configured-servers/consequences: + en: 270341820e2713d4 + zh: d56cdd72625fd570 diff --git a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.i18n.yaml b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.i18n.yaml index 9c3ae26c74..ce405a2db5 100644 --- a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.i18n.yaml @@ -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-09-14-composer-selection-keyboard.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/feature/2026-09-14-composer-selection-keyboard.md -2026-09-14-composer-selection-keyboard.md: 675e7239108604c51f4e9a82b98e164833ff9173 -2026-09-14-composer-selection-keyboard.zh.md: 2b296a609cdd76a407fd4ddcc5855eef2fcfa047 +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys: + en: d3af1337a24bd411 + zh: ebf464a7f3d9b5c3 +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys/problem: + en: e5f4084d8eda4d0e + zh: 4dc98999d008fecd +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys/decision: + en: d6a84d4b3d935fbb + zh: b842b20d197fc1a6 +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys/alternatives-considered: + en: f062131fb8b9cbcf + zh: a14b718ed6381b3f +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys/verification: + en: 81508f6216c1cde0 + zh: 764a8cafea8594e5 +/agent-note-composer-selection-surfaces-mirror-the-composer-s-enter-and-escape-keys/consequences: + en: 1310807e3a7a259d + zh: c35aca580ee553b7 diff --git a/.agents/notes/implemented/feature/2026-09-14-desktop-primary-runtime.i18n.yaml b/.agents/notes/implemented/feature/2026-09-14-desktop-primary-runtime.i18n.yaml index 27bbadb4ae..56a6a1ef1e 100644 --- a/.agents/notes/implemented/feature/2026-09-14-desktop-primary-runtime.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-14-desktop-primary-runtime.i18n.yaml @@ -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-09-14-desktop-primary-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/feature/2026-09-14-desktop-primary-runtime.md -2026-09-14-desktop-primary-runtime.md: a1491ca0c47e40c6d5b885c9f6a42ccf8180b78c -2026-09-14-desktop-primary-runtime.zh.md: 6447086a6948ed262699b62061eb44af8d6071d7 +/agent-note-desktop-primary-runtime: + en: aac537d0aef9e6c3 + zh: 30166e8f8627087f +/agent-note-desktop-primary-runtime/problem: + en: 36bf235f0821ef6a + zh: a86bf07af03d54a3 +/agent-note-desktop-primary-runtime/decision: + en: b3b104e314762322 + zh: 77478c007893201f +/agent-note-desktop-primary-runtime/alternatives-considered: + en: 566fd91c30cb0a0a + zh: 70758ae2617f6ebb +/agent-note-desktop-primary-runtime/consequences: + en: d0583f2397b7f778 + zh: cf42263bc62ee947 diff --git a/.agents/notes/implemented/feature/2026-09-14-docs-mermaid-viewer.i18n.yaml b/.agents/notes/implemented/feature/2026-09-14-docs-mermaid-viewer.i18n.yaml index a2eba8f020..f43d81c749 100644 --- a/.agents/notes/implemented/feature/2026-09-14-docs-mermaid-viewer.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-14-docs-mermaid-viewer.i18n.yaml @@ -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-09-14-docs-mermaid-viewer.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/feature/2026-09-14-docs-mermaid-viewer.md -2026-09-14-docs-mermaid-viewer.md: 5cb4bae84fcafb49c559b7678e9a9dc1aa961ab0 -2026-09-14-docs-mermaid-viewer.zh.md: 665ab65e48e15651ebb9323e96e6a950c0b48deb +/agent-note-documentation-diagram-and-image-viewer: + en: c43de97ff7fbe82d + zh: 5e2ecb9d39255ad7 +/agent-note-documentation-diagram-and-image-viewer/problem: + en: 3630dd02a8e8dfdf + zh: f25b00903e05bd05 +/agent-note-documentation-diagram-and-image-viewer/decision: + en: e82d48a7ebee05c8 + zh: af5c517d1d728f07 +/agent-note-documentation-diagram-and-image-viewer/alternatives-considered: + en: bdebec164a27c787 + zh: 8acb59417c96b807 +/agent-note-documentation-diagram-and-image-viewer/consequences: + en: f7bc4c0588dda49d + zh: 9261c0bde08031b1 diff --git a/.agents/notes/implemented/feature/2026-09-14-unattended-browser-terminal-reclamation.i18n.yaml b/.agents/notes/implemented/feature/2026-09-14-unattended-browser-terminal-reclamation.i18n.yaml index b8b927d5ab..11e6f533a5 100644 --- a/.agents/notes/implemented/feature/2026-09-14-unattended-browser-terminal-reclamation.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-14-unattended-browser-terminal-reclamation.i18n.yaml @@ -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-09-14-unattended-browser-terminal-reclamation.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/feature/2026-09-14-unattended-browser-terminal-reclamation.md -2026-09-14-unattended-browser-terminal-reclamation.md: 6eca6faa222ed744b8ebd4ef59b2dbaec25fd8ce -2026-09-14-unattended-browser-terminal-reclamation.zh.md: 9065fe53a7d7970c4523beaffb08b3df30a4944f +/agent-note-two-hour-reclamation-of-unattended-browser-terminals: + en: 7d9283383e551b42 + zh: c9d9ed029a0afcf2 +/agent-note-two-hour-reclamation-of-unattended-browser-terminals/problem: + en: bd5cfc222df1a98c + zh: b58a3570a98298ee +/agent-note-two-hour-reclamation-of-unattended-browser-terminals/decision: + en: 079c8a1e95099239 + zh: 613d888fd7bf6b61 +/agent-note-two-hour-reclamation-of-unattended-browser-terminals/alternatives-considered: + en: 165fedee22bdb52e + zh: 6b9b7054ddb2a3a9 +/agent-note-two-hour-reclamation-of-unattended-browser-terminals/consequences: + en: ded45621bb710e52 + zh: f5f9624fa5f608e8 diff --git a/.agents/notes/implemented/feature/2026-09-15-bundled-office-skills.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-bundled-office-skills.i18n.yaml index 00f68c0337..d220a04f6f 100644 --- a/.agents/notes/implemented/feature/2026-09-15-bundled-office-skills.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-bundled-office-skills.i18n.yaml @@ -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-09-15-bundled-office-skills.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/feature/2026-09-15-bundled-office-skills.md -2026-09-15-bundled-office-skills.md: 089ca0326a7c53d4ee023608010efd49a8616db2 -2026-09-15-bundled-office-skills.zh.md: cd10aa863b1149594e9eb6b6a8e479511424f20d +/agent-note-bundled-office-skills-with-structural-verification: + en: 8cc7012d7343c387 + zh: 8565543be5d94a56 +/agent-note-bundled-office-skills-with-structural-verification/problem: + en: d1e1e74b0fa286de + zh: 61ce855e4726d4a3 +/agent-note-bundled-office-skills-with-structural-verification/decision: + en: 486c2b40a0a4fe3c + zh: 317f47318b27e8f8 +/agent-note-bundled-office-skills-with-structural-verification/alternatives-considered: + en: c5389aef638deb0c + zh: a11a99a269e81c6a +/agent-note-bundled-office-skills-with-structural-verification/consequences: + en: a6035aefa4443df3 + zh: f87c6f099e4f3c7d diff --git a/.agents/notes/implemented/feature/2026-09-15-changed-file-diff-preview.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-changed-file-diff-preview.i18n.yaml index bb657950e7..b52514834c 100644 --- a/.agents/notes/implemented/feature/2026-09-15-changed-file-diff-preview.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-changed-file-diff-preview.i18n.yaml @@ -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-09-15-changed-file-diff-preview.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/feature/2026-09-15-changed-file-diff-preview.md -2026-09-15-changed-file-diff-preview.md: e265c1f4528f2de3a95ce0fab3e20cab1c83a3f6 -2026-09-15-changed-file-diff-preview.zh.md: 48571cd9866cb01e31609c90500d26b19802bb8e +/agent-note-turn-review-tab: + en: cdcf921443075122 + zh: 177609e61939922a +/agent-note-turn-review-tab/problem: + en: 91d904d836519a4b + zh: c0aec4e184ff924b +/agent-note-turn-review-tab/decision: + en: 8169e63f8bf8416d + zh: 24c1e3fb394983e3 +/agent-note-turn-review-tab/alternatives-considered: + en: e648f82b78a2c0d3 + zh: f4e6511766ace168 +/agent-note-turn-review-tab/consequences: + en: 2147596d8c6574da + zh: db8b2e1ce86465df diff --git a/.agents/notes/implemented/feature/2026-09-15-continuable-activation-capacity.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-continuable-activation-capacity.i18n.yaml index be51075feb..a373848ad2 100644 --- a/.agents/notes/implemented/feature/2026-09-15-continuable-activation-capacity.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-continuable-activation-capacity.i18n.yaml @@ -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-09-15-continuable-activation-capacity.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/feature/2026-09-15-continuable-activation-capacity.md -2026-09-15-continuable-activation-capacity.md: a6403d10fd4bcfb73147a0482293429e108939e2 -2026-09-15-continuable-activation-capacity.zh.md: 75cf6ca7a352d503cfffef29416c0990f98185db +/agent-note-shared-continuable-activation-capacity: + en: 56a51d29c97b2c8e + zh: c99085a3b2deb97c +/agent-note-shared-continuable-activation-capacity/problem: + en: f940cc05cf90362d + zh: 1cdb4281d845c0da +/agent-note-shared-continuable-activation-capacity/decision: + en: e03ae0d516885585 + zh: bd81d197e097b1ee +/agent-note-shared-continuable-activation-capacity/alternatives-considered: + en: 54aefa812e00ce1e + zh: 08251d541b7991df +/agent-note-shared-continuable-activation-capacity/consequences: + en: 4792e84eeaac32ee + zh: 4c941792d03130a0 +/agent-note-shared-continuable-activation-capacity/verification: + en: f599edb8fb0112af + zh: a66f9102a79234f0 diff --git a/.agents/notes/implemented/feature/2026-09-15-docs-page-markdown-actions.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-docs-page-markdown-actions.i18n.yaml index 776fa5a823..87e8807409 100644 --- a/.agents/notes/implemented/feature/2026-09-15-docs-page-markdown-actions.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-docs-page-markdown-actions.i18n.yaml @@ -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-09-15-docs-page-markdown-actions.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/feature/2026-09-15-docs-page-markdown-actions.md -2026-09-15-docs-page-markdown-actions.md: ff4002fd69d670b743b7394544cf8486b141b5ce -2026-09-15-docs-page-markdown-actions.zh.md: 4e2db5e55f47104d1b2f401099648cc1d6a7dc34 +/agent-note-page-markdown-actions-in-the-documentation-site: + en: 135670d1e466e923 + zh: b071c98c104c6aa5 +/agent-note-page-markdown-actions-in-the-documentation-site/problem: + en: d8c4d91741fe4a3f + zh: 0dae755314b52d9d +/agent-note-page-markdown-actions-in-the-documentation-site/decision: + en: b02d9faf0f2dfa91 + zh: 994a9755e0ddf16c +/agent-note-page-markdown-actions-in-the-documentation-site/alternatives-considered: + en: 96b23eb170e4edf2 + zh: 63e91e6c425afe1b +/agent-note-page-markdown-actions-in-the-documentation-site/consequences: + en: 57a6d0707d1793cd + zh: b63d4f3f82f8c38f diff --git a/.agents/notes/implemented/feature/2026-09-15-docs-platform-command-tabs.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-docs-platform-command-tabs.i18n.yaml index f6c0f88653..ceadaacf73 100644 --- a/.agents/notes/implemented/feature/2026-09-15-docs-platform-command-tabs.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-docs-platform-command-tabs.i18n.yaml @@ -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-09-15-docs-platform-command-tabs.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/feature/2026-09-15-docs-platform-command-tabs.md -2026-09-15-docs-platform-command-tabs.md: 4d44d1191a7ffc1601e15aa4d9f119a90e06b0dd -2026-09-15-docs-platform-command-tabs.zh.md: 450765b52d1507fa9b9e6a20a1854e6861655838 +/agent-note-platform-command-tabs-in-the-python-sdk-guide: + en: 3d96f04869d2a2fb + zh: 4a6ebfb3ccf9c69d +/agent-note-platform-command-tabs-in-the-python-sdk-guide/problem: + en: 8fb6ad2440352a06 + zh: 0809a5c9866e52ee +/agent-note-platform-command-tabs-in-the-python-sdk-guide/decision: + en: 0ec36e0eccea6209 + zh: 5df6069c60a55f31 +/agent-note-platform-command-tabs-in-the-python-sdk-guide/alternatives-considered: + en: a98aa2b8d03f11aa + zh: 0aefaa161a20a24e +/agent-note-platform-command-tabs-in-the-python-sdk-guide/consequences: + en: f3af5502a73e7725 + zh: 4ca34dfd993fcc21 diff --git a/.agents/notes/implemented/feature/2026-09-15-markdown-file-preview-links.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-markdown-file-preview-links.i18n.yaml index 182ff386d9..43efd357fe 100644 --- a/.agents/notes/implemented/feature/2026-09-15-markdown-file-preview-links.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-markdown-file-preview-links.i18n.yaml @@ -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-09-15-markdown-file-preview-links.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/feature/2026-09-15-markdown-file-preview-links.md -2026-09-15-markdown-file-preview-links.md: d9d535afc5b005ae453bd7623e05c411e4d6932b -2026-09-15-markdown-file-preview-links.zh.md: 63c18e284b785ed5686721a0b04cf73c78c0ceb3 +/agent-note-markdown-file-preview-links: + en: 98c528496f33598e + zh: 640619a2dfa0255e +/agent-note-markdown-file-preview-links/problem: + en: ba7789f83fadbe95 + zh: 34bcaa0aed5f5c3b +/agent-note-markdown-file-preview-links/decision: + en: b986fe2640c2ebf4 + zh: e69700b233e7bd69 +/agent-note-markdown-file-preview-links/alternatives-considered: + en: d8a4d6ab17eb2880 + zh: 089419d53f71305a +/agent-note-markdown-file-preview-links/consequences: + en: c0fc2dd3d860edfa + zh: 129aa543b4a39e10 diff --git a/.agents/notes/implemented/feature/2026-09-15-profile-command-shorthand.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-profile-command-shorthand.i18n.yaml index 2ef9ed7383..5665220ce2 100644 --- a/.agents/notes/implemented/feature/2026-09-15-profile-command-shorthand.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-profile-command-shorthand.i18n.yaml @@ -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-09-15-profile-command-shorthand.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/feature/2026-09-15-profile-command-shorthand.md -2026-09-15-profile-command-shorthand.md: 15bdf30b98eb814e299e8e2c3af3756b1f59aad1 -2026-09-15-profile-command-shorthand.zh.md: 77ffd2324fc8fe518368fce44f52ad85274eb7b5 +/agent-note-profile-command-shorthand: + en: 35f20a1162b8407f + zh: 33d263d534df0b1d +/agent-note-profile-command-shorthand/problem: + en: b5c950343e5fbe8c + zh: df2a055d2c0b3f53 +/agent-note-profile-command-shorthand/decision: + en: cc8d5ebd595fee34 + zh: 99cb3ade0f17fb7b +/agent-note-profile-command-shorthand/alternatives-considered: + en: 8d10eee94348e187 + zh: 5930dee3861058e1 +/agent-note-profile-command-shorthand/consequences: + en: bbfeb6e59bb8ba55 + zh: fc33289f717cb805 diff --git a/.agents/notes/implemented/feature/2026-09-15-sidebar-workspace-hierarchy.i18n.yaml b/.agents/notes/implemented/feature/2026-09-15-sidebar-workspace-hierarchy.i18n.yaml index fe452cfeb2..5f0daf0064 100644 --- a/.agents/notes/implemented/feature/2026-09-15-sidebar-workspace-hierarchy.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-15-sidebar-workspace-hierarchy.i18n.yaml @@ -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-09-15-sidebar-workspace-hierarchy.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/feature/2026-09-15-sidebar-workspace-hierarchy.md -2026-09-15-sidebar-workspace-hierarchy.md: 82e63684ec1d8c5d86e062b125aff6e1144ef8fa -2026-09-15-sidebar-workspace-hierarchy.zh.md: 07f9ff89b6e33fd4d46b5e386b4240ad12c177c5 +/agent-note-sidebar-workspace-hierarchy: + en: 6be9fd74b0422158 + zh: ba6dbc81479b75b5 +/agent-note-sidebar-workspace-hierarchy/problem: + en: dc209dd9d8c73af4 + zh: cc5384ba15ea0be0 +/agent-note-sidebar-workspace-hierarchy/decision: + en: 9f34c1e903475d25 + zh: 6b22b19f6da3d390 +/agent-note-sidebar-workspace-hierarchy/alternatives-considered: + en: b30322d71fc7c464 + zh: 36b218a82690cd19 +/agent-note-sidebar-workspace-hierarchy/consequences: + en: bf890a80351fa883 + zh: 05da81c7026a5204 diff --git a/.agents/notes/implemented/feature/2026-09-16-browser-excel-preview.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-browser-excel-preview.i18n.yaml index 5edfca99c1..caa8355929 100644 --- a/.agents/notes/implemented/feature/2026-09-16-browser-excel-preview.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-browser-excel-preview.i18n.yaml @@ -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-09-16-browser-excel-preview.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/feature/2026-09-16-browser-excel-preview.md -2026-09-16-browser-excel-preview.md: 8a4bbd5dc838bc79e61f9b412af43b912a8fe019 -2026-09-16-browser-excel-preview.zh.md: f04170b28fe4c6d267b12958f47a392638bfaadb +/agent-note-browser-excel-preview-with-saved-formula-results: + en: 2437d7b03a82ed8b + zh: 7ca514afeba1ffde +/agent-note-browser-excel-preview-with-saved-formula-results/problem: + en: 518507d82a9f15f5 + zh: b857b75e0359ae6d +/agent-note-browser-excel-preview-with-saved-formula-results/decision: + en: f962826fcf5e3949 + zh: 8a9932d86332fb47 +/agent-note-browser-excel-preview-with-saved-formula-results/alternatives-considered: + en: 8d7ac06eaa3ba42c + zh: b6e43ae09e4df4fa +/agent-note-browser-excel-preview-with-saved-formula-results/consequences: + en: 62595b9a9b948422 + zh: 0618904d9ebfa7fc diff --git a/.agents/notes/implemented/feature/2026-09-16-open-in-default-app-for-sidebar-files.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-open-in-default-app-for-sidebar-files.i18n.yaml index 7614cd0318..e3f4c53695 100644 --- a/.agents/notes/implemented/feature/2026-09-16-open-in-default-app-for-sidebar-files.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-open-in-default-app-for-sidebar-files.i18n.yaml @@ -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-09-16-open-in-default-app-for-sidebar-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/feature/2026-09-16-open-in-default-app-for-sidebar-files.md -2026-09-16-open-in-default-app-for-sidebar-files.md: fa7506be77e8a62e5dfd97b59de6ebc4be510ae0 -2026-09-16-open-in-default-app-for-sidebar-files.zh.md: af124182dc1b38658ff55736277e499e963a6281 +/agent-note-open-sidebar-previewed-files-in-the-default-application: + en: 948e52b8edac6120 + zh: 0898da7049f15ca5 +/agent-note-open-sidebar-previewed-files-in-the-default-application/problem: + en: 6caae0cf235cdb1d + zh: e80f02c05d65598a +/agent-note-open-sidebar-previewed-files-in-the-default-application/decision: + en: ebd2273122d077db + zh: 8a596d0a49fb4e4e +/agent-note-open-sidebar-previewed-files-in-the-default-application/alternatives-considered: + en: f42e5763bf52e401 + zh: 4b2d954904505fc9 +/agent-note-open-sidebar-previewed-files-in-the-default-application/consequences: + en: 618062f56d294415 + zh: 5eb57d17854fa805 diff --git a/.agents/notes/implemented/feature/2026-09-16-performance-usage-preference.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-performance-usage-preference.i18n.yaml index 2da6cd2bfa..369511d545 100644 --- a/.agents/notes/implemented/feature/2026-09-16-performance-usage-preference.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-performance-usage-preference.i18n.yaml @@ -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-09-16-performance-usage-preference.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/feature/2026-09-16-performance-usage-preference.md -2026-09-16-performance-usage-preference.md: 36ab30561fccc6c824ee8483f5a533a9178f11c5 -2026-09-16-performance-usage-preference.zh.md: ecfd19c41c861116d18829b355bf8c8df4ea929a +/agent-note-performance-and-usage-detail-preference: + en: 6179732355b5c019 + zh: 3a620cf25a5580c4 +/agent-note-performance-and-usage-detail-preference/problem: + en: 3b420f5fb2952b3e + zh: 6fa1ef1090e595ec +/agent-note-performance-and-usage-detail-preference/decision: + en: 953b5fcaed000c9e + zh: 2ff9d6ff0535d846 +/agent-note-performance-and-usage-detail-preference/alternatives-considered: + en: 7c676c0b192d03eb + zh: 2e994f30fc99c5d4 +/agent-note-performance-and-usage-detail-preference/consequences: + en: 2bc7b780efbae1e9 + zh: c7ecaffd29dfbbff diff --git a/.agents/notes/implemented/feature/2026-09-16-sandbox-same-mode.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-sandbox-same-mode.i18n.yaml index 426e7d8c80..dfc86aee32 100644 --- a/.agents/notes/implemented/feature/2026-09-16-sandbox-same-mode.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-sandbox-same-mode.i18n.yaml @@ -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-09-16-sandbox-same-mode.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/feature/2026-09-16-sandbox-same-mode.md -2026-09-16-sandbox-same-mode.md: f1b7c3ae05103363f47f28fab1ae534a8a8b04c2 -2026-09-16-sandbox-same-mode.zh.md: 0bb04415230ec7a0f0f3fdd3c7f00bd7b76d9d9b +/agent-note-repeated-sandbox-modes-need-no-approval: + en: 85325770757063d8 + zh: 9c55052551299ddf +/agent-note-repeated-sandbox-modes-need-no-approval/problem: + en: 0d5832fd63b9cd7b + zh: f07b20a91b92de25 +/agent-note-repeated-sandbox-modes-need-no-approval/decision: + en: b102948c4acbdd96 + zh: 7220f043716d571c +/agent-note-repeated-sandbox-modes-need-no-approval/alternatives-considered: + en: fb337915525ed95c + zh: d0584f998f0a3b8f +/agent-note-repeated-sandbox-modes-need-no-approval/consequences: + en: bde9f3b22f5159c2 + zh: 105c24546f0943bb diff --git a/.agents/notes/implemented/feature/2026-09-16-shared-subagent-settings-card.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-shared-subagent-settings-card.i18n.yaml index e98c3c4e39..eab4632401 100644 --- a/.agents/notes/implemented/feature/2026-09-16-shared-subagent-settings-card.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-shared-subagent-settings-card.i18n.yaml @@ -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-09-16-shared-subagent-settings-card.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/feature/2026-09-16-shared-subagent-settings-card.md -2026-09-16-shared-subagent-settings-card.md: d9457b3e9b9786d77dcced4cac8ca1086914699a -2026-09-16-shared-subagent-settings-card.zh.md: ccde0c97df24239b4e5113fecbaec6e85f19b145 +/agent-note-shared-subagent-settings-card: + en: 63fcf9d6ab8a601d + zh: 0f824893329679f2 +/agent-note-shared-subagent-settings-card/problem: + en: a63f47c29f3a6305 + zh: 9f2150e9a9c5bc4b +/agent-note-shared-subagent-settings-card/decision: + en: 2c4056b23e053d3a + zh: d46c391f9b5be135 +/agent-note-shared-subagent-settings-card/alternatives-considered: + en: 8674979fbd8197f1 + zh: 6c2169803839f70b +/agent-note-shared-subagent-settings-card/consequences: + en: 4a3671620dfa64b6 + zh: eb6eb20e864f77a1 +/agent-note-shared-subagent-settings-card/verification: + en: 8d9956c13fb6658b + zh: 3d95564e51595bca diff --git a/.agents/notes/implemented/feature/2026-09-16-sidebar-browser.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-sidebar-browser.i18n.yaml index fac9746b09..70686c479d 100644 --- a/.agents/notes/implemented/feature/2026-09-16-sidebar-browser.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-sidebar-browser.i18n.yaml @@ -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-09-16-sidebar-browser.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/feature/2026-09-16-sidebar-browser.md -2026-09-16-sidebar-browser.md: eff143cc042da7c6455152f684ec83dfa654a1ec -2026-09-16-sidebar-browser.zh.md: a037c2fb54be745a3a85f43561c0bd587873c008 +/agent-note-sandboxed-sidebar-browser: + en: eae586a5966353a5 + zh: ca3a7283e3fae594 +/agent-note-sandboxed-sidebar-browser/problem: + en: 5236141e90e42b81 + zh: 1af6306b20797603 +/agent-note-sandboxed-sidebar-browser/decision: + en: 9e89a0fe77cd8b9f + zh: 7aba8507320cf504 +/agent-note-sandboxed-sidebar-browser/web-navigation-states: + en: 6aec277c70600c7d + zh: e2b53f01072b2423 +/agent-note-sandboxed-sidebar-browser/electron-carrier: + en: dd20fa5656fc5779 + zh: 94b5908de0695755 +/agent-note-sandboxed-sidebar-browser/alternatives-considered: + en: 73919eb8d5618982 + zh: 18d2f5becae72790 +/agent-note-sandboxed-sidebar-browser/verification: + en: 91563b2be0b76a37 + zh: 24e55764bc85b8ae +/agent-note-sandboxed-sidebar-browser/consequences: + en: d9844d90ebdeb553 + zh: 7f05c8e911bd73c4 diff --git a/.agents/notes/implemented/feature/2026-09-16-unified-model-input-controls.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-unified-model-input-controls.i18n.yaml index e74186da34..4a74dfb669 100644 --- a/.agents/notes/implemented/feature/2026-09-16-unified-model-input-controls.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-unified-model-input-controls.i18n.yaml @@ -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-09-16-unified-model-input-controls.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/feature/2026-09-16-unified-model-input-controls.md -2026-09-16-unified-model-input-controls.md: 73913880924577caf86b30990baef98efdbe751e -2026-09-16-unified-model-input-controls.zh.md: 691ca5229c017919e708bf7df92285dee25ef6b4 +/agent-note-unified-model-input-controls: + en: a22f2dd1b73eb314 + zh: 1f43526fa6af593a +/agent-note-unified-model-input-controls/problem: + en: e28035e73033057d + zh: 262cf7551cdb783a +/agent-note-unified-model-input-controls/decision: + en: 6b4872a76d480c8a + zh: f833a14a48d2e9d7 +/agent-note-unified-model-input-controls/alternatives-considered: + en: 83f8ffa39259a9f4 + zh: e158cb5868c82d74 +/agent-note-unified-model-input-controls/consequences: + en: 768bb77e3a4d72be + zh: 81080b075b0cc26c diff --git a/.agents/notes/implemented/feature/2026-09-16-windows-desktop-titlebar.i18n.yaml b/.agents/notes/implemented/feature/2026-09-16-windows-desktop-titlebar.i18n.yaml index d85ac2b2b2..6c3b3ddfe0 100644 --- a/.agents/notes/implemented/feature/2026-09-16-windows-desktop-titlebar.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-16-windows-desktop-titlebar.i18n.yaml @@ -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-09-16-windows-desktop-titlebar.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/feature/2026-09-16-windows-desktop-titlebar.md -2026-09-16-windows-desktop-titlebar.md: 17fd2aac308cff0b4357a0c39c3fe757cfc60f5b -2026-09-16-windows-desktop-titlebar.zh.md: 05903d86960942204d7b18d4155266c144effc1a +/agent-note-windows-desktop-caption-and-application-menus: + en: 4220f3c0d8058ca7 + zh: 4751c2cffb9b8e2a +/agent-note-windows-desktop-caption-and-application-menus/problem: + en: 9a3d1b6d02197c6b + zh: 5eba9f9bf6928430 +/agent-note-windows-desktop-caption-and-application-menus/decision: + en: be4b50d09caa5d46 + zh: 20b0572be5941b0c +/agent-note-windows-desktop-caption-and-application-menus/alternatives-considered: + en: db7703a7a37ac5da + zh: 704a2a289b8f7cb0 +/agent-note-windows-desktop-caption-and-application-menus/consequences: + en: a52bfa0c00b4e26d + zh: c479cc99fd1bff03 +/agent-note-windows-desktop-caption-and-application-menus/testing: + en: d72a6473a7d385cf + zh: ededb7391908db38 diff --git a/.agents/notes/implemented/feature/2026-09-17-compact-translucent-menu-surfaces.i18n.yaml b/.agents/notes/implemented/feature/2026-09-17-compact-translucent-menu-surfaces.i18n.yaml index cf44de1cb6..101417360a 100644 --- a/.agents/notes/implemented/feature/2026-09-17-compact-translucent-menu-surfaces.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-17-compact-translucent-menu-surfaces.i18n.yaml @@ -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-09-17-compact-translucent-menu-surfaces.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/feature/2026-09-17-compact-translucent-menu-surfaces.md -2026-09-17-compact-translucent-menu-surfaces.md: 08fcb2d851e4c75ce9069fc797e8dbcb070acc5b -2026-09-17-compact-translucent-menu-surfaces.zh.md: 8e13634995d46b7414f17bbb51443df85cb3ac3c +/agent-note-compact-translucent-menu-surfaces: + en: 629cdf857a84d1f3 + zh: 676a34bac03903be +/agent-note-compact-translucent-menu-surfaces/problem: + en: f1ff5b408b409003 + zh: 1f548352bc075cc4 +/agent-note-compact-translucent-menu-surfaces/decision: + en: 30cbe72206e81f96 + zh: 21cb393871fe6420 +/agent-note-compact-translucent-menu-surfaces/alternatives-considered: + en: f06228674ee82029 + zh: 385603bebcd17d5f +/agent-note-compact-translucent-menu-surfaces/consequences: + en: e76746c0b95549df + zh: 9ff34644703d565c diff --git a/.agents/notes/implemented/feature/2026-09-17-developer-tools-settings.i18n.yaml b/.agents/notes/implemented/feature/2026-09-17-developer-tools-settings.i18n.yaml index 6485deaade..1609de0af7 100644 --- a/.agents/notes/implemented/feature/2026-09-17-developer-tools-settings.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-17-developer-tools-settings.i18n.yaml @@ -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-09-17-developer-tools-settings.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/feature/2026-09-17-developer-tools-settings.md -2026-09-17-developer-tools-settings.md: 5ae8861efa701042e0730310ddb23f6f559d14d7 -2026-09-17-developer-tools-settings.zh.md: e7a9d3c28d53ba9fe14c970bd48f2a6031248e58 +/agent-note-shared-developer-tool-settings: + en: 353fa09368362d0f + zh: b36c06c8b49833b1 +/agent-note-shared-developer-tool-settings/problem: + en: e22ee243b1503319 + zh: b53c1a932d547f55 +/agent-note-shared-developer-tool-settings/decision: + en: 3fc14af35b025970 + zh: 0e6047f33b7e91db +/agent-note-shared-developer-tool-settings/alternatives-considered: + en: df1b80e5b8d2a178 + zh: 0136d16fc44d57bf +/agent-note-shared-developer-tool-settings/consequences: + en: c1e05aebc88fc12c + zh: 0ace5bced7b32437 diff --git a/.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.i18n.yaml b/.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.i18n.yaml index da8a49ddb6..bc17196684 100644 --- a/.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-17-persistent-plan-cards.i18n.yaml @@ -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-09-17-persistent-plan-cards.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/feature/2026-09-17-persistent-plan-cards.md -2026-09-17-persistent-plan-cards.md: 096c89c7ed3e52293787a2724b0c7231ae3740ae -2026-09-17-persistent-plan-cards.zh.md: 95cce3fed84dd802195b87f593654b7d511933cb +/agent-note-persistent-plan-cards-and-sidebar-reading: + en: e84bc0e16f40cafb + zh: b11a06e7800e3f9a +/agent-note-persistent-plan-cards-and-sidebar-reading/problem: + en: 273400b515da3a1d + zh: 13b508617f08c6d0 +/agent-note-persistent-plan-cards-and-sidebar-reading/decision: + en: 243abb4fe9944c97 + zh: 6e66ddceb9c89aee +/agent-note-persistent-plan-cards-and-sidebar-reading/alternatives-considered: + en: f1f8dbe0f29b89cd + zh: 4fc73f1f4b4bcbae +/agent-note-persistent-plan-cards-and-sidebar-reading/consequences: + en: 4d1740b16711041d + zh: 412ac19a3705045e diff --git a/.agents/notes/implemented/feature/2026-09-17-sidebar-file-and-directory-auto-refresh.i18n.yaml b/.agents/notes/implemented/feature/2026-09-17-sidebar-file-and-directory-auto-refresh.i18n.yaml index bee0b26a39..f8fc347f32 100644 --- a/.agents/notes/implemented/feature/2026-09-17-sidebar-file-and-directory-auto-refresh.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-17-sidebar-file-and-directory-auto-refresh.i18n.yaml @@ -1,6 +1,73 @@ -# 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-09-17-sidebar-file-and-directory-auto-refresh.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/feature/2026-09-17-sidebar-file-and-directory-auto-refresh.md -2026-09-17-sidebar-file-and-directory-auto-refresh.md: f509a8cf2642d3ca816d40e9e9817d3c962c79a6 -2026-09-17-sidebar-file-and-directory-auto-refresh.zh.md: ff7a950aa86c663d4f5d2fb8e20d64bb2b077f6b +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees: + en: 8dfe4436b064776d + zh: acb3f1e2fae231f4 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/problem: + en: f7e7751fe98be91e + zh: e1d6c4f042c7d75d +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/decision: + en: b51a6972761816ef + zh: 6f50b2a09b8d6abc +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/implementation-and-responsibilities: + en: 79480338424c1829 + zh: c32ff30ccf3d9b87 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/implementation-and-responsibilities/fs-and-host: + en: ca63fb903b447c2d + zh: 3014adbdb0a890ee +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/implementation-and-responsibilities/client-and-sidebar: + en: 5cb8326d8a5b0407 + zh: a31173f990276856 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/watch-requests-and-notifications: + en: 025ba83ae78824df + zh: 264d74d2bdfe3d27 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/watch-requests-and-notifications/one-stream-per-explicit-target: + en: 75d1c4e35d0f4d74 + zh: a6b11f70a64d6922 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/watch-requests-and-notifications/os-watching-and-access-scope: + en: 48af866f541caf04 + zh: c3df4edf7f7ddb4a +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/complete-file-preview-data-flow: + en: f8468653186b2a60 + zh: 0c624d957c9ce332 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/html-resourcegroup: + en: 0f2419d75906ca0a + zh: 3ff0dbb7382ba02c +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/automatic-refresh-controls: + en: a00c8265a48e910d + zh: e1aa7c639a4e2c10 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/complete-files-panel-data-flow: + en: d688642e5f272d48 + zh: 96088fbc0471aeae +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/directory-node-tree-and-lifecycle: + en: 2ea8615be8d5229b + zh: 0c73fa4ebb06445e +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/user-flows: + en: eb4005a334103895 + zh: e2c207faffa64e57 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/user-flows/edit-a-previewed-file: + en: 2b7d90550ad49eff + zh: a8136d5d00390635 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/user-flows/browse-changing-directories: + en: d375f21c1ae106ef + zh: 5a39f248cc98f20a +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/user-flows/deletion-renaming-and-failure: + en: 4f343f7a6c4d3ba4 + zh: a4390843a20f8dde +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/readiness-races-and-refresh-coalescing: + en: caadd187479e9074 + zh: 3deedd8093f60703 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/alternatives-considered: + en: 8a8c19229647c760 + zh: 2de283fc2c815e65 +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/verification: + en: e8143b93c93b4dc2 + zh: a90105eb5823a2ff +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/consequences: + en: 8faa05de777dea21 + zh: 2f0b1ff65bdba75b +/agent-note-on-demand-watching-and-automatic-refresh-for-sidebar-previews-and-file-trees/relationship-to-existing-agent-notes: + en: 8ddc059f64cb3b1c + zh: f6d6836458ef9522 diff --git a/.agents/notes/implemented/feature/2026-09-17-state-dot-visual-language.i18n.yaml b/.agents/notes/implemented/feature/2026-09-17-state-dot-visual-language.i18n.yaml index d86602a99e..711a40b14b 100644 --- a/.agents/notes/implemented/feature/2026-09-17-state-dot-visual-language.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-17-state-dot-visual-language.i18n.yaml @@ -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-09-17-state-dot-visual-language.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/feature/2026-09-17-state-dot-visual-language.md -2026-09-17-state-dot-visual-language.md: 751abbaa33919721c7e71738ad9b6bed744fcad7 -2026-09-17-state-dot-visual-language.zh.md: 9746ec9af79e15fc41ea8e6601cc52c1cfafba02 +/agent-note-statedot-solid-marks-and-loading-spinner: + en: 74ca1dda90213e27 + zh: 14851ca8d3d4617d +/agent-note-statedot-solid-marks-and-loading-spinner/problem: + en: 4739e4079e950c72 + zh: 4633fc299da13565 +/agent-note-statedot-solid-marks-and-loading-spinner/decision: + en: 98dd1c4ac95913b9 + zh: c3c53bae1ffc430a +/agent-note-statedot-solid-marks-and-loading-spinner/alternatives-considered: + en: 962827b807ebf026 + zh: dfe83e98956dd2cd +/agent-note-statedot-solid-marks-and-loading-spinner/testing: + en: 9d5f7bfb69b7bded + zh: 281db4c0e7ddd8c2 +/agent-note-statedot-solid-marks-and-loading-spinner/consequences: + en: 17a7a8d9c3923666 + zh: 84d941223b079f2b diff --git a/.agents/notes/implemented/feature/2026-09-18-session-pin-and-sidebar-archive.i18n.yaml b/.agents/notes/implemented/feature/2026-09-18-session-pin-and-sidebar-archive.i18n.yaml index 39b7b53e98..a74636286a 100644 --- a/.agents/notes/implemented/feature/2026-09-18-session-pin-and-sidebar-archive.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-18-session-pin-and-sidebar-archive.i18n.yaml @@ -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-09-18-session-pin-and-sidebar-archive.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/feature/2026-09-18-session-pin-and-sidebar-archive.md -2026-09-18-session-pin-and-sidebar-archive.md: ac580979b9419e3f00af860e2dce2655fec51908 -2026-09-18-session-pin-and-sidebar-archive.zh.md: d4719fe75bb8aa1e2ebe9b89d4d80182a7597447 +/agent-note-session-pinning-and-the-sidebar-archived-filter: + en: f21362fdb86cdb6c + zh: b14889b8b7a717a3 +/agent-note-session-pinning-and-the-sidebar-archived-filter/problem: + en: 8a33826809d1dd8f + zh: b37aa33a8e2ed8d8 +/agent-note-session-pinning-and-the-sidebar-archived-filter/decision: + en: c483432158826f12 + zh: 2fc1e96f276420a7 +/agent-note-session-pinning-and-the-sidebar-archived-filter/decision/complete-session-order: + en: 321a47984818bbb9 + zh: a55d22a44e7b7155 +/agent-note-session-pinning-and-the-sidebar-archived-filter/decision/archive-restoration: + en: 0e16cb25af1f2bb1 + zh: 026fdf7bfa1c104c +/agent-note-session-pinning-and-the-sidebar-archived-filter/decision/archived-visibility-and-row-motion: + en: 83dd778a865f2cf5 + zh: 7636166749f63633 +/agent-note-session-pinning-and-the-sidebar-archived-filter/decision/persistence: + en: 4bcb0398b47334aa + zh: fa386724afa99a77 +/agent-note-session-pinning-and-the-sidebar-archived-filter/alternatives-considered: + en: 3bf6fc0c22b17377 + zh: 0fc64131ee8be859 +/agent-note-session-pinning-and-the-sidebar-archived-filter/consequences: + en: a487faf9af215726 + zh: a92cae8b15fba541 +/agent-note-session-pinning-and-the-sidebar-archived-filter/related: + en: 6c67f3a071f80c15 + zh: e0455cddc9c4bea9 diff --git a/.agents/notes/implemented/feature/2026-09-19-windows-acl-mandatory-integrity-confinement.i18n.yaml b/.agents/notes/implemented/feature/2026-09-19-windows-acl-mandatory-integrity-confinement.i18n.yaml index 4ab68b411e..5058cd26a1 100644 --- a/.agents/notes/implemented/feature/2026-09-19-windows-acl-mandatory-integrity-confinement.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-19-windows-acl-mandatory-integrity-confinement.i18n.yaml @@ -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-09-19-windows-acl-mandatory-integrity-confinement.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/feature/2026-09-19-windows-acl-mandatory-integrity-confinement.md -2026-09-19-windows-acl-mandatory-integrity-confinement.md: f53765f34a7d6d9bcae8b06839c30731a054165d -2026-09-19-windows-acl-mandatory-integrity-confinement.zh.md: a963fd7f549ca2e995f74893c95f1620034664eb +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny: + en: 2255e36ca94e90fa + zh: 7bfa70db175ce842 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/problem: + en: adb85f1842b69545 + zh: 42a0ebb3b8015a74 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/decision: + en: 08406f9c720d66c1 + zh: b9c81901488d73b5 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 4237c596c10e1ee9 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered/why-not-make-the-label-revocable-per-session: + en: 198f33d224035c53 + zh: 63068271658034e7 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered/why-not-untrusted-integrity-for-read-only-mode: + en: 5f53545a83ccd02c + zh: f8fd05c1f3440e41 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered/why-not-deny-file-delete-child-with-oi-ci: + en: 78a36aa70395d214 + zh: 0dd32d8ca513cb43 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered/why-not-drop-the-confinement-layer-and-document-the-escape: + en: 9ff963493255783c + zh: 41b5577792e977cd +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/alternatives-considered/why-not-give-each-workspace-its-own-integrity-level: + en: c39c82f7b745d672 + zh: 7b38d3c4b889dac6 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/consequences: + en: 4930b2596686d377 + zh: 022a62051a58181e +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/testing: + en: 6c1deeacdbff418d + zh: 4d7c546e19da5e53 +/agent-note-windows-sandbox-delete-confinement-mandatory-integrity-plus-an-ambient-delete-deny/related: + en: e4b631df90dd1efa + zh: abc66bfbf8ea2c52 diff --git a/.agents/notes/implemented/feature/2026-09-20-config-schema-dump-validation-policy.i18n.yaml b/.agents/notes/implemented/feature/2026-09-20-config-schema-dump-validation-policy.i18n.yaml index c93f11edb2..9575bd914d 100644 --- a/.agents/notes/implemented/feature/2026-09-20-config-schema-dump-validation-policy.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-20-config-schema-dump-validation-policy.i18n.yaml @@ -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-09-20-config-schema-dump-validation-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/feature/2026-09-20-config-schema-dump-validation-policy.md -2026-09-20-config-schema-dump-validation-policy.md: a0f15b6aad1f534f80db15185a9a70d5c22bc7c2 -2026-09-20-config-schema-dump-validation-policy.zh.md: d94f040057e0a221057a8410523e1e154a8ae166 +/agent-note-config-schema-dump-validation-policy: + en: 3934f170891561da + zh: 3f54f8a830b766ee +/agent-note-config-schema-dump-validation-policy/problem: + en: c0baf581702ed4e8 + zh: eb9ab134045c2e18 +/agent-note-config-schema-dump-validation-policy/decision: + en: 047d67040b39f999 + zh: f7eccdb59e9e72bd +/agent-note-config-schema-dump-validation-policy/alternatives-considered: + en: be0e67675b0a6bf3 + zh: 361c7fd4eb482f3a +/agent-note-config-schema-dump-validation-policy/consequences: + en: 5df3531b64f09edd + zh: 03e1a9f15248b171 diff --git a/.agents/notes/implemented/feature/2026-09-20-default-workspace.i18n.yaml b/.agents/notes/implemented/feature/2026-09-20-default-workspace.i18n.yaml index 89b4d5dabf..eec425be40 100644 --- a/.agents/notes/implemented/feature/2026-09-20-default-workspace.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-20-default-workspace.i18n.yaml @@ -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-09-20-default-workspace.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/feature/2026-09-20-default-workspace.md -2026-09-20-default-workspace.md: 1674079403b17fb1bd984052a85975609179cad0 -2026-09-20-default-workspace.zh.md: 81a7c96efa3d8b8d4673b684b59babe339706f29 +/agent-note-first-use-default-workspace: + en: cf68fedc85ef73ad + zh: a48dfa96ac11585a +/agent-note-first-use-default-workspace/problem: + en: 952ca70e83872f88 + zh: 471b4e39dba2039a +/agent-note-first-use-default-workspace/decision: + en: 7f51354b3082f290 + zh: 8f6ce1c14f11f888 +/agent-note-first-use-default-workspace/alternatives-considered: + en: 65c93ecfbbcf22a9 + zh: c88ed47852200752 +/agent-note-first-use-default-workspace/consequences: + en: ab39d4e9302a2641 + zh: 8921bb8451ef2d0e diff --git a/.agents/notes/implemented/feature/2026-09-20-desktop-browser-webview.i18n.yaml b/.agents/notes/implemented/feature/2026-09-20-desktop-browser-webview.i18n.yaml index 254189ee9f..b30c8e7897 100644 --- a/.agents/notes/implemented/feature/2026-09-20-desktop-browser-webview.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-20-desktop-browser-webview.i18n.yaml @@ -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-09-20-desktop-browser-webview.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/feature/2026-09-20-desktop-browser-webview.md -2026-09-20-desktop-browser-webview.md: e69114a90f50d51542e9b6a0d40daef05a93001f -2026-09-20-desktop-browser-webview.zh.md: b0ab8b1a7058ae9cbb1258977cb4c4e2d8c40614 +/agent-note-retained-desktop-browser-webviews: + en: 59456b799c9d5d5e + zh: 19a88c553986b463 +/agent-note-retained-desktop-browser-webviews/problem: + en: c6abffbd4077e427 + zh: a7a0a2c2a99cc70b +/agent-note-retained-desktop-browser-webviews/decision: + en: f4970f18902b8974 + zh: 2b1a5fa3fc05f256 +/agent-note-retained-desktop-browser-webviews/decision/storage-ownership: + en: fac51097030c3670 + zh: 86868bc1b9a6d8cf +/agent-note-retained-desktop-browser-webviews/decision/initial-guest-policy: + en: 21ab346f9a98863c + zh: efa115f530d22de3 +/agent-note-retained-desktop-browser-webviews/alternatives-considered: + en: 884daa089df32dcc + zh: 7e16d740897555c9 +/agent-note-retained-desktop-browser-webviews/consequences: + en: 01d4a2e6f638d5e9 + zh: 9804b00edea2b03c diff --git a/.agents/notes/implemented/feature/2026-09-20-developer-tools-default-on.i18n.yaml b/.agents/notes/implemented/feature/2026-09-20-developer-tools-default-on.i18n.yaml index aa7199eff4..7467604771 100644 --- a/.agents/notes/implemented/feature/2026-09-20-developer-tools-default-on.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-20-developer-tools-default-on.i18n.yaml @@ -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-09-20-developer-tools-default-on.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/feature/2026-09-20-developer-tools-default-on.md -2026-09-20-developer-tools-default-on.md: 42c89faed11b966ac8ea0882236af9bf13557702 -2026-09-20-developer-tools-default-on.zh.md: a684844f5ba53a0bebdd1c3a3a3ade1ed150cc31 +/agent-note-developer-tools-default-on-after-preference-resolution: + en: 9e6062c94dd70c14 + zh: 3c04f278da2016a5 +/agent-note-developer-tools-default-on-after-preference-resolution/problem: + en: 81d08fb192b8e83b + zh: 90a841219f86bc12 +/agent-note-developer-tools-default-on-after-preference-resolution/decision: + en: 8a3fbb5281d1b313 + zh: 320b845842676375 +/agent-note-developer-tools-default-on-after-preference-resolution/alternatives-considered: + en: 7d9ecd04554103c4 + zh: 2706bb78fcc6072d +/agent-note-developer-tools-default-on-after-preference-resolution/consequences: + en: 54622ff5338afba9 + zh: 494d55213b2751a0 diff --git a/.agents/notes/implemented/feature/2026-09-21-archive-stops-running-session-work.i18n.yaml b/.agents/notes/implemented/feature/2026-09-21-archive-stops-running-session-work.i18n.yaml index d6f9f2b719..cda575574b 100644 --- a/.agents/notes/implemented/feature/2026-09-21-archive-stops-running-session-work.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-21-archive-stops-running-session-work.i18n.yaml @@ -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-09-21-archive-stops-running-session-work.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/feature/2026-09-21-archive-stops-running-session-work.md -2026-09-21-archive-stops-running-session-work.md: 2df18c00e6a561e3d85820cbf472bacf5acd9b1d -2026-09-21-archive-stops-running-session-work.zh.md: 423a01bd2feab61c62fa0f4b4b4296674e6b24e4 +/agent-note-archiving-a-session-with-running-work: + en: 0fbbf70c0c7c2bfa + zh: 5d3119ee84af3796 +/agent-note-archiving-a-session-with-running-work/problem: + en: 7926983089aebab2 + zh: 366e32db00674a83 +/agent-note-archiving-a-session-with-running-work/decision: + en: ba02c1b57e6ca76b + zh: 2908fcda98c4734e +/agent-note-archiving-a-session-with-running-work/alternatives-considered: + en: c9d0a5c8d9924ad6 + zh: f848ba8fa3c0d030 +/agent-note-archiving-a-session-with-running-work/consequences: + en: 977e6f36e62c0618 + zh: 706de6bc6bb06282 diff --git a/.agents/notes/implemented/feature/2026-09-22-unbounded-completion-wakes-by-default.i18n.yaml b/.agents/notes/implemented/feature/2026-09-22-unbounded-completion-wakes-by-default.i18n.yaml index 24ad5190da..a107523e07 100644 --- a/.agents/notes/implemented/feature/2026-09-22-unbounded-completion-wakes-by-default.i18n.yaml +++ b/.agents/notes/implemented/feature/2026-09-22-unbounded-completion-wakes-by-default.i18n.yaml @@ -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-09-22-unbounded-completion-wakes-by-default.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/feature/2026-09-22-unbounded-completion-wakes-by-default.md -2026-09-22-unbounded-completion-wakes-by-default.md: 8760154054de423240e16d93e3db5ae01521820a -2026-09-22-unbounded-completion-wakes-by-default.zh.md: e5560bc7ced5a8ca9ab55ea56ba309676d78b568 +/agent-note-background-job-completion-wakes-are-unbounded-by-default: + en: 5c8e5c0ff2d19ab9 + zh: a046e3297aba3904 +/agent-note-background-job-completion-wakes-are-unbounded-by-default/problem: + en: 32fdd5fa938fc279 + zh: f8f97f806157eea1 +/agent-note-background-job-completion-wakes-are-unbounded-by-default/decision: + en: 7e4ee951808e1860 + zh: 8dad4884d259cdc3 +/agent-note-background-job-completion-wakes-are-unbounded-by-default/alternatives-considered: + en: 62630b7ec477bf7b + zh: 0640a01ac9d22722 +/agent-note-background-job-completion-wakes-are-unbounded-by-default/consequences: + en: ba000076db02ccb7 + zh: 1aa1e7d45d6512fe diff --git a/.agents/notes/implemented/process/2026-06-11-quality-gates.i18n.yaml b/.agents/notes/implemented/process/2026-06-11-quality-gates.i18n.yaml index 5dedd0a1fb..515c9508fd 100644 --- a/.agents/notes/implemented/process/2026-06-11-quality-gates.i18n.yaml +++ b/.agents/notes/implemented/process/2026-06-11-quality-gates.i18n.yaml @@ -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-11-quality-gates.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/process/2026-06-11-quality-gates.md -2026-06-11-quality-gates.md: b4bcbcbb6e47ccbb3ed193300c4a8b2daa3901c0 -2026-06-11-quality-gates.zh.md: 64179fd7b13bf5de3d82bf9bf8819f6230b46238 +/agent-note-mechanical-quality-gates-over-prose-guidelines: + en: ee219fd65689e5ea + zh: a5eb719557f02ad6 +/agent-note-mechanical-quality-gates-over-prose-guidelines/problem: + en: 526b060333ea2457 + zh: 182f46699589aff5 +/agent-note-mechanical-quality-gates-over-prose-guidelines/decision: + en: c6d1551e56d22b99 + zh: 6b7efc184274b7ac +/agent-note-mechanical-quality-gates-over-prose-guidelines/consequences: + en: 7bf0c081f242501e + zh: 30f892fbd982f1b2 diff --git a/.agents/notes/implemented/process/2026-06-16-pnpm-over-yarn.i18n.yaml b/.agents/notes/implemented/process/2026-06-16-pnpm-over-yarn.i18n.yaml index 2a7d105492..d4354efa31 100644 --- a/.agents/notes/implemented/process/2026-06-16-pnpm-over-yarn.i18n.yaml +++ b/.agents/notes/implemented/process/2026-06-16-pnpm-over-yarn.i18n.yaml @@ -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-16-pnpm-over-yarn.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/process/2026-06-16-pnpm-over-yarn.md -2026-06-16-pnpm-over-yarn.md: 4a8560a0216e614f4ea06c0a1aac3a553abcaf8d -2026-06-16-pnpm-over-yarn.zh.md: 4955cf88834a56d89ba1c4c1866c72cf647ccbd3 +/agent-note-pnpm-as-the-package-manager-instead-of-yarn-4: + en: 2c8be5b7d3dae8c7 + zh: e6d4d5dc41455f52 +/agent-note-pnpm-as-the-package-manager-instead-of-yarn-4/problem: + en: a397e5f0a83c3306 + zh: 5ced99f94dae9e30 +/agent-note-pnpm-as-the-package-manager-instead-of-yarn-4/decision: + en: cadbbd8b1bab85ef + zh: 31fcb11ddbcb79c3 +/agent-note-pnpm-as-the-package-manager-instead-of-yarn-4/alternatives-considered: + en: 20e2ebed65f92625 + zh: f1717d69d271fb43 +/agent-note-pnpm-as-the-package-manager-instead-of-yarn-4/consequences: + en: 024fefe88e8bbc95 + zh: 018dc287c07d6483 diff --git a/.agents/notes/implemented/process/2026-06-17-ts-build-config.i18n.yaml b/.agents/notes/implemented/process/2026-06-17-ts-build-config.i18n.yaml index 6ee41d8ba1..3d3e5e065d 100644 --- a/.agents/notes/implemented/process/2026-06-17-ts-build-config.i18n.yaml +++ b/.agents/notes/implemented/process/2026-06-17-ts-build-config.i18n.yaml @@ -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-17-ts-build-config.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/process/2026-06-17-ts-build-config.md -2026-06-17-ts-build-config.md: 05b70cb836491e8a3e6c66deb38773b5351e69e8 -2026-06-17-ts-build-config.zh.md: d42d9b7abe6368b3ed8e0f32605e866e214f1e7c +/agent-note-tsc-first-build-and-one-compiler-ownership: + en: 98c341593a211f00 + zh: 5c051e3aaff4847e +/agent-note-tsc-first-build-and-one-compiler-ownership/problem: + en: 62307ddfb9e110cb + zh: 236bdad7df92a028 +/agent-note-tsc-first-build-and-one-compiler-ownership/decision: + en: e2b61f1e0549117d + zh: 596ca8cf8207f2b5 +/agent-note-tsc-first-build-and-one-compiler-ownership/alternatives-considered: + en: 9b143ba610f06e2f + zh: 7832be7816aec7e6 +/agent-note-tsc-first-build-and-one-compiler-ownership/consequences: + en: 05b0f4a3a96e9435 + zh: 2903da5edbaf3cb7 diff --git a/.agents/notes/implemented/process/2026-07-02-bilingual-docs-and-pairing-gate.i18n.yaml b/.agents/notes/implemented/process/2026-07-02-bilingual-docs-and-pairing-gate.i18n.yaml index 213fa7b96a..59b17b44ff 100644 --- a/.agents/notes/implemented/process/2026-07-02-bilingual-docs-and-pairing-gate.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-02-bilingual-docs-and-pairing-gate.i18n.yaml @@ -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-02-bilingual-docs-and-pairing-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/process/2026-07-02-bilingual-docs-and-pairing-gate.md -2026-07-02-bilingual-docs-and-pairing-gate.md: 9448c9dcd75cae0ab39fd62b418fd3aa3b5e4484 -2026-07-02-bilingual-docs-and-pairing-gate.zh.md: b843de91e2fb92d05c81387f49853c4ca413228f +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate: + en: 04529b9cc16be36d + zh: 5fb4377453231503 +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/problem: + en: 0ca5c6556229e3ee + zh: 6dacd60a7dc4bff4 +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/decision: + en: 46b0ca2b0f45eb6c + zh: 3ddcd36e9ef8d134 +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/verification: + en: 8fbf681b863a831c + zh: e5ba11a549a92612 +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/alternatives-considered: + en: 995a746c59ea7b6c + zh: 04a248329dc0d04b +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/industry-precedent: + en: 6b5d62086bfd3868 + zh: 219dad72943f590a +/agent-note-bilingual-documentation-via-paired-sibling-files-and-a-pairing-gate/consequences: + en: 65f9f024d99d438f + zh: ff624c8be88c5830 diff --git a/.agents/notes/implemented/process/2026-07-04-doc-tiers-and-budgets.i18n.yaml b/.agents/notes/implemented/process/2026-07-04-doc-tiers-and-budgets.i18n.yaml index 06f10621ec..e72a4d0af7 100644 --- a/.agents/notes/implemented/process/2026-07-04-doc-tiers-and-budgets.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-04-doc-tiers-and-budgets.i18n.yaml @@ -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-04-doc-tiers-and-budgets.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/process/2026-07-04-doc-tiers-and-budgets.md -2026-07-04-doc-tiers-and-budgets.md: 209504218d18e97ae6da65bed9a22da40d2a7681 -2026-07-04-doc-tiers-and-budgets.zh.md: 9c866424d84b4fefa5ffe95efa21a3cf7d3c321a +/agent-note-documentation-structure-tiers-and-budgets: + en: f2add84f6fdb18d0 + zh: 7f97fab8f9234bb9 +/agent-note-documentation-structure-tiers-and-budgets/problem: + en: 6ecec6cc312745dd + zh: ac1244b6113b89da +/agent-note-documentation-structure-tiers-and-budgets/decision: + en: 8a3a2e086af59a6c + zh: d1d45a4a108031a2 +/agent-note-documentation-structure-tiers-and-budgets/alternatives-considered: + en: 8275e8f6ffe18def + zh: 06a5af3e5581f45b +/agent-note-documentation-structure-tiers-and-budgets/consequences: + en: 76c254b56618cef6 + zh: 1f1264d6879df20c diff --git a/.agents/notes/implemented/process/2026-07-05-uniform-agent-note-format.i18n.yaml b/.agents/notes/implemented/process/2026-07-05-uniform-agent-note-format.i18n.yaml index 95a5b0ee27..c860b4f1d3 100644 --- a/.agents/notes/implemented/process/2026-07-05-uniform-agent-note-format.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-05-uniform-agent-note-format.i18n.yaml @@ -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-uniform-agent-note-format.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/process/2026-07-05-uniform-agent-note-format.md -2026-07-05-uniform-agent-note-format.md: c05d81c700b81f0d619173a261f405b1cc039df1 -2026-07-05-uniform-agent-note-format.zh.md: 13991632e70cfab1c65170ba5f2350f47ad1acd0 +/agent-note-one-gated-in-file-format-for-agent-notes: + en: 1d02708a467f4a07 + zh: 3c924198ec72c881 +/agent-note-one-gated-in-file-format-for-agent-notes/problem: + en: 71bd2d16e40c3ed7 + zh: 485862218afcdc00 +/agent-note-one-gated-in-file-format-for-agent-notes/decision: + en: 246ec96b0c1da90d + zh: 12a06608ffdf28f8 +/agent-note-one-gated-in-file-format-for-agent-notes/alternatives-considered: + en: 330044b841da3ab9 + zh: e909207cbcbc5edb +/agent-note-one-gated-in-file-format-for-agent-notes/consequences: + en: 345e6318b76b1a06 + zh: 63cef25e59d91654 diff --git a/.agents/notes/implemented/process/2026-07-06-node-engine-floor.i18n.yaml b/.agents/notes/implemented/process/2026-07-06-node-engine-floor.i18n.yaml index 5687bcd853..18ab194298 100644 --- a/.agents/notes/implemented/process/2026-07-06-node-engine-floor.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-06-node-engine-floor.i18n.yaml @@ -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-06-node-engine-floor.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/process/2026-07-06-node-engine-floor.md -2026-07-06-node-engine-floor.md: e2fe7661f43b77f544de2c3a555e5d756f260ea2 -2026-07-06-node-engine-floor.zh.md: e7d41e81281aa1d335780cf4edd65749ccb1db84 +/agent-note-raise-the-node-lts-engine-floor-to-22-19: + en: 01f43f2b4c6bd4fa + zh: 7f34e5b3c1c55419 +/agent-note-raise-the-node-lts-engine-floor-to-22-19/problem: + en: d7bf1b1699ce0dc8 + zh: f10dfd0e4787bb44 +/agent-note-raise-the-node-lts-engine-floor-to-22-19/decision: + en: 0051c0d8c1948f63 + zh: cbab7aa0f53f7200 +/agent-note-raise-the-node-lts-engine-floor-to-22-19/consequences: + en: 0b9fbe932d9a8b1f + zh: 642e19d06caecef2 +/agent-note-raise-the-node-lts-engine-floor-to-22-19/alternatives-considered: + en: c433389b2064eaf9 + zh: 57de2af812def1c4 diff --git a/.agents/notes/implemented/process/2026-07-06-parallel-pre-push-gates.i18n.yaml b/.agents/notes/implemented/process/2026-07-06-parallel-pre-push-gates.i18n.yaml index 482b7bc689..60dff04b5b 100644 --- a/.agents/notes/implemented/process/2026-07-06-parallel-pre-push-gates.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-06-parallel-pre-push-gates.i18n.yaml @@ -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-06-parallel-pre-push-gates.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/process/2026-07-06-parallel-pre-push-gates.md -2026-07-06-parallel-pre-push-gates.md: 9773a86428545608d184112ec4ab95136d4690d0 -2026-07-06-parallel-pre-push-gates.zh.md: 4d0e15a3389d276ea4b1c51224c96b864b0958a0 +/agent-note-parallel-pre-push-gates: + en: d5ee83ee15159e15 + zh: 07a6599af21d98a9 +/agent-note-parallel-pre-push-gates/problem: + en: 896ffdae7d51cc19 + zh: eed0d7e80456bd8e +/agent-note-parallel-pre-push-gates/decision: + en: c95d213689164ad6 + zh: da85165d13b26d58 +/agent-note-parallel-pre-push-gates/verification: + en: c7124c68afb12a8e + zh: 0a0269476ae353f3 +/agent-note-parallel-pre-push-gates/alternatives-considered: + en: d54f4ed806116b2e + zh: 38725684130bb843 +/agent-note-parallel-pre-push-gates/consequences: + en: 5d22505a7c041e41 + zh: ba1010f18d3e8302 diff --git a/.agents/notes/implemented/process/2026-07-12-package-model-experience-contract.i18n.yaml b/.agents/notes/implemented/process/2026-07-12-package-model-experience-contract.i18n.yaml index 1d988cd081..0496ff4408 100644 --- a/.agents/notes/implemented/process/2026-07-12-package-model-experience-contract.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-12-package-model-experience-contract.i18n.yaml @@ -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-12-package-model-experience-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/process/2026-07-12-package-model-experience-contract.md -2026-07-12-package-model-experience-contract.md: 8462cc20e8de43927cd04b73cfdb11a0c3d77336 -2026-07-12-package-model-experience-contract.zh.md: 040412f3afe4f5854d1945a6e638d6a517464f7f +/agent-note-package-model-experience-contract: + en: c14f97f66251831b + zh: a7ef93d593a72215 +/agent-note-package-model-experience-contract/problem: + en: 69034b9a9ba40d49 + zh: 016b64cb54c4c873 +/agent-note-package-model-experience-contract/decision: + en: f67c13ad41004520 + zh: 28cf10f7d217f626 +/agent-note-package-model-experience-contract/alternatives-considered: + en: 206bc943c04313b1 + zh: 6d295d9da6675854 +/agent-note-package-model-experience-contract/consequences: + en: dc6057b8836bb3fc + zh: 6e41a27a99ae0339 diff --git a/.agents/notes/implemented/process/2026-07-19-remove-generated-agent-note-index.i18n.yaml b/.agents/notes/implemented/process/2026-07-19-remove-generated-agent-note-index.i18n.yaml index 7b91c29627..42524fde30 100644 --- a/.agents/notes/implemented/process/2026-07-19-remove-generated-agent-note-index.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-19-remove-generated-agent-note-index.i18n.yaml @@ -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-19-remove-generated-agent-note-index.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/process/2026-07-19-remove-generated-agent-note-index.md -2026-07-19-remove-generated-agent-note-index.md: 60dba14064ffe294228968cdb111920696fe7d63 -2026-07-19-remove-generated-agent-note-index.zh.md: 912aea133068a727856475df21516a28b2d27876 +/agent-note-keep-agent-notes-discoverable-without-a-generated-index: + en: aedcead60a29472a + zh: 0b17ad37acb4a92e +/agent-note-keep-agent-notes-discoverable-without-a-generated-index/problem: + en: 8a66ca1096aab8f4 + zh: f9774f5f3e7d0a31 +/agent-note-keep-agent-notes-discoverable-without-a-generated-index/decision: + en: 2b02e79f20d9be1b + zh: 5dec073afcee9c2e +/agent-note-keep-agent-notes-discoverable-without-a-generated-index/alternatives-considered: + en: 0317d3d10b97f004 + zh: 9315c31a17f7057a +/agent-note-keep-agent-notes-discoverable-without-a-generated-index/consequences: + en: 631728aa0d482555 + zh: 910a749ae88d4c83 diff --git a/.agents/notes/implemented/process/2026-07-19-web-styling-system.i18n.yaml b/.agents/notes/implemented/process/2026-07-19-web-styling-system.i18n.yaml index f9fe8dd6ff..7889068a5c 100644 --- a/.agents/notes/implemented/process/2026-07-19-web-styling-system.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-19-web-styling-system.i18n.yaml @@ -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-web-styling-system.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/process/2026-07-19-web-styling-system.md -2026-07-19-web-styling-system.md: b4d647924ab6ab172cd7a7e2531a10a2a7e62981 -2026-07-19-web-styling-system.zh.md: e7384575cf69099c8a95610f61c85b5bcb80d300 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints: + en: 60e793c38185c08c + zh: 8f4d4644e3502c31 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/problem: + en: aa546850f8c51cd1 + zh: bba14f66aaf1e06a +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/decision: + en: 72a1d3545d1ebd6d + zh: f2fdc9006468aa72 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/engineering-constraints: + en: 39f1984d96e609ed + zh: 14eda6caf43c5514 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/the-execution-shape-for-agents: + en: 10342491b9dcc1a7 + zh: cd23d8c2f8ef3d26 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/division-of-labor-with-web-styling-md: + en: 91e06333e11b1417 + zh: c743f392dbd9391f +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/consequences: + en: 128333a6495cbfa0 + zh: f165ef2f3d76f216 +/agent-note-web-styling-system-the-token-framework-and-engineering-constraints/alternatives-considered: + en: 6579ca659b112618 + zh: f1a650f4af1b8cc2 diff --git a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml index 8d3f060672..d91e7a4590 100644 --- a/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-20-gui-testing-system.i18n.yaml @@ -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-20-gui-testing-system.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/process/2026-07-20-gui-testing-system.md -2026-07-20-gui-testing-system.md: 3fdb9a596dd18861ea8b765da129656942778f96 -2026-07-20-gui-testing-system.zh.md: e49d5a2f848e7f4847c7761ee0a487ce6fd3220e +/agent-note-gui-testing-system-the-three-tier-structure: + en: 66959d1c7c3cad28 + zh: 1e29f27d36c45909 +/agent-note-gui-testing-system-the-three-tier-structure/problem: + en: 1c54e58ea993ef6a + zh: 73108687fa58a6f2 +/agent-note-gui-testing-system-the-three-tier-structure/decision: + en: 4c6e52549113c2c7 + zh: 586175edee8b128c +/agent-note-gui-testing-system-the-three-tier-structure/lane-map: + en: 81d53390f31e540e + zh: 272a2b2b93269c45 +/agent-note-gui-testing-system-the-three-tier-structure/anti-regression-discipline: + en: 80fe1589a6236740 + zh: 30e1911d37865c49 +/agent-note-gui-testing-system-the-three-tier-structure/consequences: + en: 22f2475a438c639c + zh: aafab5ff60b7c644 +/agent-note-gui-testing-system-the-three-tier-structure/alternatives-considered: + en: 19e29023b70018b0 + zh: d47ff8e62a0befb6 diff --git a/.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml b/.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml index 2ce7922815..42a4a26dc0 100644 --- a/.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-21-serial-cross-platform-ci-reference.i18n.yaml @@ -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-21-serial-cross-platform-ci-reference.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/process/2026-07-21-serial-cross-platform-ci-reference.md -2026-07-21-serial-cross-platform-ci-reference.md: 24022fea271d677a4588bd5dc9c7cb5b417ca8b7 -2026-07-21-serial-cross-platform-ci-reference.zh.md: c9fbc84d8ff91803acc6bcd008607fc03136b832 +/agent-note-serial-cross-platform-ci-reference: + en: 4dd700fefdda5d17 + zh: 3a6a9bc2a28b3f39 +/agent-note-serial-cross-platform-ci-reference/problem: + en: 4fb1c27a631b32d3 + zh: 9dbe9a4b9aadfca9 +/agent-note-serial-cross-platform-ci-reference/decision: + en: f547014d316c1385 + zh: f13b09a4a778adaa +/agent-note-serial-cross-platform-ci-reference/alternatives-considered: + en: bc72a1e194e3b0e2 + zh: 9a92cbac88adc7a7 +/agent-note-serial-cross-platform-ci-reference/consequences: + en: 7042125ce6a209d4 + zh: ef2be4fa8a4d6320 diff --git a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.i18n.yaml b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.i18n.yaml index 1be4833f09..14ae915151 100644 --- a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.i18n.yaml @@ -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-26-ci-failover-runbook.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/process/2026-07-26-ci-failover-runbook.md -2026-07-26-ci-failover-runbook.md: d46f9d140860580011e06aa3b51bb8618a23a114 -2026-07-26-ci-failover-runbook.zh.md: a229d46f16d959356e9108842edd557420e699ae +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool: + en: 677b522817e84e2f + zh: f8518a7033b0fd54 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/problem: + en: 317fafe666a76953 + zh: c886a5a4bccceda0 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/decision: + en: 2520d6c0d2bfe1a6 + zh: 616c70b8b1026109 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/decision/release-rehearsals-share-the-linux-switch: + en: 7fdad4f7d060d659 + zh: 6773db9b7d62cd0a +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/decision/what-the-in-house-pool-is: + en: 00d8934ed30e838c + zh: bdb5584fbaf27c7d +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/decision/what-the-in-house-pool-is/windows-pool: + en: f395af725d1deaf1 + zh: 896cedbb36c13758 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/decision/switch-any-repository-writer-1-minute-no-merge: + en: 2e3829fd72d6b1b0 + zh: 563f0abade7974f9 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/capacity-during-failover: + en: 4095da1b492d7484 + zh: 0c0bb9c97e4af977 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/capacity-during-failover/switch-back: + en: 63cf911019db8d2f + zh: 5eb3903b0ceb30db +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/capacity-during-failover/trust-boundary: + en: c05bc0ceba304ff0 + zh: 19ae9a2d70f25d33 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/alternatives-considered: + en: e68b70d7caca52f1 + zh: e6f0be792105a9e6 +/agent-note-ci-failover-runbook-hosted-pools-in-house-pool/consequences: + en: f66e0aa401136799 + zh: 657188692959955e diff --git a/.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.i18n.yaml b/.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.i18n.yaml index edc74a719e..5d93d0272b 100644 --- a/.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-26-dependencies-over-hand-rolling.i18n.yaml @@ -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-26-dependencies-over-hand-rolling.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/process/2026-07-26-dependencies-over-hand-rolling.md -2026-07-26-dependencies-over-hand-rolling.md: 53336e5a2dc8970422dcf8a161a31eb01f8155e4 -2026-07-26-dependencies-over-hand-rolling.zh.md: deec00d87f2c514dbf16cac0e96cdf00ec055958 +/agent-note-prefer-maintained-dependencies-over-hand-rolling: + en: 5cf63576459c1942 + zh: c3f2dbc5e4656693 +/agent-note-prefer-maintained-dependencies-over-hand-rolling/problem: + en: 5c13c4dd8707db61 + zh: b788b35b54bec861 +/agent-note-prefer-maintained-dependencies-over-hand-rolling/decision: + en: 2b8c6ea6c61732cd + zh: 946b2ef6142eaca3 +/agent-note-prefer-maintained-dependencies-over-hand-rolling/alternatives-considered: + en: c3575c5c8b4a6e51 + zh: f20aa07eefed8a3b +/agent-note-prefer-maintained-dependencies-over-hand-rolling/consequences: + en: abac778b1b57b62a + zh: 7cd7b253d637726b diff --git a/.agents/notes/implemented/process/2026-07-26-frozen-agent-note-archive.i18n.yaml b/.agents/notes/implemented/process/2026-07-26-frozen-agent-note-archive.i18n.yaml index c8bfb9d43c..1b44f40971 100644 --- a/.agents/notes/implemented/process/2026-07-26-frozen-agent-note-archive.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-26-frozen-agent-note-archive.i18n.yaml @@ -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-26-frozen-agent-note-archive.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/process/2026-07-26-frozen-agent-note-archive.md -2026-07-26-frozen-agent-note-archive.md: e9ecfa78f53a5912608201654e2c56e399defccd -2026-07-26-frozen-agent-note-archive.zh.md: 9a3ce2e6e21864f2754f627be6f7576bfc1f9076 +/agent-note-freeze-low-future-value-agent-notes-outside-the-active-corpus: + en: f6883e4627411644 + zh: e034e9b350dfd622 +/agent-note-freeze-low-future-value-agent-notes-outside-the-active-corpus/problem: + en: cef0f05fd8dfd6a1 + zh: 228107eb6c00a91a +/agent-note-freeze-low-future-value-agent-notes-outside-the-active-corpus/decision: + en: 453cf66046816477 + zh: af5bb77e849416a1 +/agent-note-freeze-low-future-value-agent-notes-outside-the-active-corpus/alternatives-considered: + en: 7637deef67f3ec14 + zh: 7f43606e487fab67 +/agent-note-freeze-low-future-value-agent-notes-outside-the-active-corpus/consequences: + en: 679af41e64d0dd15 + zh: ebbead84f8b8e1df diff --git a/.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.i18n.yaml b/.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.i18n.yaml index 5bb1f929e1..5d29f39a16 100644 --- a/.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.i18n.yaml @@ -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-27-worktree-local-lefthook.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/process/2026-07-27-worktree-local-lefthook.md -2026-07-27-worktree-local-lefthook.md: 42adc1ed1d60d1462a3fb6600b22b7d77b6ae28e -2026-07-27-worktree-local-lefthook.zh.md: b4b905967861606154a4bf63f4dbb6b4eb469e92 +/agent-note-make-lefthook-installation-worktree-local: + en: 2a11ec534041e270 + zh: 9cbd4adbaecd1b32 +/agent-note-make-lefthook-installation-worktree-local/problem: + en: b3ec2245644b46e6 + zh: 83de1cb620f9ddcf +/agent-note-make-lefthook-installation-worktree-local/decision: + en: 577d90ff7e03ebaf + zh: dc680155c0c3a2a1 +/agent-note-make-lefthook-installation-worktree-local/alternatives-considered: + en: d7100b0d2c95a3f9 + zh: 070c38c4d0d1331a +/agent-note-make-lefthook-installation-worktree-local/consequences: + en: ea991f7a0d5c0bf2 + zh: e7f7b3c9215213ba diff --git a/.agents/notes/implemented/process/2026-07-30-generated-third-party-notices.i18n.yaml b/.agents/notes/implemented/process/2026-07-30-generated-third-party-notices.i18n.yaml index c92bdd5546..91cb4b1f67 100644 --- a/.agents/notes/implemented/process/2026-07-30-generated-third-party-notices.i18n.yaml +++ b/.agents/notes/implemented/process/2026-07-30-generated-third-party-notices.i18n.yaml @@ -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-generated-third-party-notices.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/process/2026-07-30-generated-third-party-notices.md -2026-07-30-generated-third-party-notices.md: 71f1fd0a5b650d53c5ef21438e17e0a6e162bdf5 -2026-07-30-generated-third-party-notices.zh.md: e3adb43e4b407945a8cca88105de689407b5908b +/agent-note-generated-third-party-notices: + en: 762fe10c2750eb0a + zh: 24f5efdf4cc1755e +/agent-note-generated-third-party-notices/problem: + en: e6929494e60041a2 + zh: 15bec8e8baabcab2 +/agent-note-generated-third-party-notices/decision: + en: 4d9ab23559067da3 + zh: 8de95de194393187 +/agent-note-generated-third-party-notices/testing: + en: 194f87f780991068 + zh: 58096d2339576d20 +/agent-note-generated-third-party-notices/alternatives-considered: + en: 093ddc027e296bf0 + zh: 6b9e64d99dcefa11 +/agent-note-generated-third-party-notices/consequences: + en: 860b806c5d393c98 + zh: 51b4ca11e2d3802a diff --git a/.agents/notes/implemented/process/2026-08-02-native-github-stacks-and-optional-rebases.i18n.yaml b/.agents/notes/implemented/process/2026-08-02-native-github-stacks-and-optional-rebases.i18n.yaml index 360c8ca687..88fc7212bb 100644 --- a/.agents/notes/implemented/process/2026-08-02-native-github-stacks-and-optional-rebases.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-02-native-github-stacks-and-optional-rebases.i18n.yaml @@ -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-02-native-github-stacks-and-optional-rebases.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/process/2026-08-02-native-github-stacks-and-optional-rebases.md -2026-08-02-native-github-stacks-and-optional-rebases.md: 394f0d7b4557bd306ae020d3edb5339fbcd2f068 -2026-08-02-native-github-stacks-and-optional-rebases.zh.md: 6266619fa1b2e58b50377b2ddb268632bb6cce08 +/agent-note-native-github-stacks-and-optional-pr-rebases: + en: 9427ca53db68d50b + zh: 9e72b34deee3bb9f +/agent-note-native-github-stacks-and-optional-pr-rebases/problem: + en: 21312af191207fa6 + zh: 86306b4c6dd08a0c +/agent-note-native-github-stacks-and-optional-pr-rebases/decision: + en: 893a172d6f0fc764 + zh: 5fdeca6898882bb2 +/agent-note-native-github-stacks-and-optional-pr-rebases/verification: + en: eac5830cd3dd385e + zh: 8e272a5cf2e54519 +/agent-note-native-github-stacks-and-optional-pr-rebases/alternatives-considered: + en: 9c601bc6dee773f1 + zh: 72fb6396e76ba2a5 +/agent-note-native-github-stacks-and-optional-pr-rebases/consequences: + en: 7cb31f6445970432 + zh: 0da95a9f9b521bea diff --git a/.agents/notes/implemented/process/2026-08-03-package-anchored-subsystem-pages.i18n.yaml b/.agents/notes/implemented/process/2026-08-03-package-anchored-subsystem-pages.i18n.yaml index 1e3b097d4c..b427a1cc50 100644 --- a/.agents/notes/implemented/process/2026-08-03-package-anchored-subsystem-pages.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-03-package-anchored-subsystem-pages.i18n.yaml @@ -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-03-package-anchored-subsystem-pages.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/process/2026-08-03-package-anchored-subsystem-pages.md -2026-08-03-package-anchored-subsystem-pages.md: ea98bae0c54b45351712a75b5c2387c5f57fae71 -2026-08-03-package-anchored-subsystem-pages.zh.md: 4da4211f4e29eff0d30bd3da5d5035ad2a928ee5 +/agent-note-package-anchored-subsystem-pages-and-thin-group-readmes: + en: 48a39166064d9f0d + zh: c23ba48570aab506 +/agent-note-package-anchored-subsystem-pages-and-thin-group-readmes/problem: + en: 244099e9da9c15ce + zh: 72b5dd59abe0133a +/agent-note-package-anchored-subsystem-pages-and-thin-group-readmes/decision: + en: b8c1668317997b2c + zh: 62d0ef605bfa3d3c +/agent-note-package-anchored-subsystem-pages-and-thin-group-readmes/alternatives-considered: + en: 07b4fc9048074b31 + zh: d14c862196f545fa +/agent-note-package-anchored-subsystem-pages-and-thin-group-readmes/consequences: + en: 9a6d02787410d14d + zh: e63d7023f49d5750 diff --git a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml b/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml deleted file mode 100644 index 5e46e610a1..0000000000 --- a/.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.i18n.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# 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/implemented/process/2026-08-08-automatic-translation-pairing-merges.md -2026-08-08-automatic-translation-pairing-merges.md: ac4e0c11290abfd48d0f3caf037062aa2fe36c4d -2026-08-08-automatic-translation-pairing-merges.zh.md: 820ebdbe8c20988c4e917704db2f1994ae830fad diff --git a/.agents/notes/implemented/process/2026-08-08-browser-gif-evidence-chain.i18n.yaml b/.agents/notes/implemented/process/2026-08-08-browser-gif-evidence-chain.i18n.yaml index e09c768aba..402eb36c98 100644 --- a/.agents/notes/implemented/process/2026-08-08-browser-gif-evidence-chain.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-08-browser-gif-evidence-chain.i18n.yaml @@ -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-08-browser-gif-evidence-chain.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/process/2026-08-08-browser-gif-evidence-chain.md -2026-08-08-browser-gif-evidence-chain.md: 8a7c28792bbab178cac6ba6743628882a15fdf6e -2026-08-08-browser-gif-evidence-chain.zh.md: ff9b6cc729c23dd9f3ba170752fa05fe65c7fb53 +/agent-note-browser-gifs-preserve-one-evidence-chain: + en: acd1abc5215025db + zh: 13d04f81ebb47d18 +/agent-note-browser-gifs-preserve-one-evidence-chain/problem: + en: 427edb924ca3106e + zh: 2115278719f9fd25 +/agent-note-browser-gifs-preserve-one-evidence-chain/decision: + en: 1a098893e7e55ff8 + zh: c2912855cfc4a2bb +/agent-note-browser-gifs-preserve-one-evidence-chain/alternatives-considered: + en: 7c8b16109ffaf01a + zh: d978945c49912639 +/agent-note-browser-gifs-preserve-one-evidence-chain/consequences: + en: 18e112842a2a0ac8 + zh: bb562ffcbd660b83 diff --git a/.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml b/.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml index 7ad3923251..8a421fe006 100644 --- a/.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-08-native-windows-pull-request-ci.i18n.yaml @@ -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-08-native-windows-pull-request-ci.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/process/2026-08-08-native-windows-pull-request-ci.md -2026-08-08-native-windows-pull-request-ci.md: 64c4366ee8d60dd0137e6e4eb5473c0450204efe -2026-08-08-native-windows-pull-request-ci.zh.md: 48725cdc58ab7b8db22461da64236c6de3bb3027 +/agent-note-wine-and-native-windows-ci: + en: 9c96424c10b83c6b + zh: b2adf0c650fbf529 +/agent-note-wine-and-native-windows-ci/problem: + en: 3e229ecf646af866 + zh: d358507b1e1d381f +/agent-note-wine-and-native-windows-ci/decision: + en: f557cb00e1b457c1 + zh: eeaec8412ddb315a +/agent-note-wine-and-native-windows-ci/alternatives-considered: + en: f6c5e77fe3f05739 + zh: 8de640d12d3a38c4 +/agent-note-wine-and-native-windows-ci/consequences: + en: 58069228d4e904c6 + zh: 2601a48b82400903 diff --git a/.agents/notes/implemented/process/2026-08-08-unified-github-label-taxonomy.i18n.yaml b/.agents/notes/implemented/process/2026-08-08-unified-github-label-taxonomy.i18n.yaml index 8c6982cd71..3abc0c9d28 100644 --- a/.agents/notes/implemented/process/2026-08-08-unified-github-label-taxonomy.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-08-unified-github-label-taxonomy.i18n.yaml @@ -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-08-08-unified-github-label-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/process/2026-08-08-unified-github-label-taxonomy.md -2026-08-08-unified-github-label-taxonomy.md: 1748f9b77ed2922035c5e75ac4a2eee047f413d3 -2026-08-08-unified-github-label-taxonomy.zh.md: 3b221a5f3db43597656f46dfc505cdfda38c75db +/agent-note-unified-github-label-taxonomy: + en: 59560a685380483f + zh: 1bf2324f05c8968a +/agent-note-unified-github-label-taxonomy/problem: + en: 8c0c360d500f22f0 + zh: 97c815076ee9b53b +/agent-note-unified-github-label-taxonomy/decision: + en: 398fb26c5da12e42 + zh: 02c16ca5058283bc +/agent-note-unified-github-label-taxonomy/decision/kinds: + en: 04e51bc9313727a0 + zh: 443388bc0472c368 +/agent-note-unified-github-label-taxonomy/decision/areas: + en: b8d485a8222d0938 + zh: 8fbb27557db98023 +/agent-note-unified-github-label-taxonomy/decision/issues-and-migrations: + en: 6d720c37cf806ae6 + zh: c16c420482d02067 +/agent-note-unified-github-label-taxonomy/alternatives-considered: + en: 57740baaeda04f6d + zh: 8da0aabac6b06424 +/agent-note-unified-github-label-taxonomy/consequences: + en: 41169a21b2ac9801 + zh: 5506bf106f95163d diff --git a/.agents/notes/implemented/process/2026-08-09-committed-artifact-citations.i18n.yaml b/.agents/notes/implemented/process/2026-08-09-committed-artifact-citations.i18n.yaml index febe070830..e8b85c04de 100644 --- a/.agents/notes/implemented/process/2026-08-09-committed-artifact-citations.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-09-committed-artifact-citations.i18n.yaml @@ -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-09-committed-artifact-citations.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/process/2026-08-09-committed-artifact-citations.md -2026-08-09-committed-artifact-citations.md: 66dec38755fbe366385349e65da3dbc0ff632769 -2026-08-09-committed-artifact-citations.zh.md: ebc4541e56c4481005700cf16aa03881c9fb005d +/agent-note-cite-committed-artifacts-never-design-session-ordinals: + en: c97b89961652ab9f + zh: a2ecdc61c29652a6 +/agent-note-cite-committed-artifacts-never-design-session-ordinals/problem: + en: 79dc8b3d2c600d91 + zh: e7b16c9e276e565f +/agent-note-cite-committed-artifacts-never-design-session-ordinals/decision: + en: 83f88200cfa66c98 + zh: 3db6822a92701d64 +/agent-note-cite-committed-artifacts-never-design-session-ordinals/alternatives-considered: + en: cdf3ce2ccd530449 + zh: f24bb73190b4b22b +/agent-note-cite-committed-artifacts-never-design-session-ordinals/verification: + en: fb9ce345704f7da4 + zh: 3148c6bbf67ad87f +/agent-note-cite-committed-artifacts-never-design-session-ordinals/consequences: + en: 53fe33cd40aa7133 + zh: 4eaf89d5dea43c62 diff --git a/.agents/notes/implemented/process/2026-08-09-concrete-prose-names-actors-and-recorded-facts.i18n.yaml b/.agents/notes/implemented/process/2026-08-09-concrete-prose-names-actors-and-recorded-facts.i18n.yaml index 4326e893cf..eb5e443f1b 100644 --- a/.agents/notes/implemented/process/2026-08-09-concrete-prose-names-actors-and-recorded-facts.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-09-concrete-prose-names-actors-and-recorded-facts.i18n.yaml @@ -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-09-concrete-prose-names-actors-and-recorded-facts.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/process/2026-08-09-concrete-prose-names-actors-and-recorded-facts.md -2026-08-09-concrete-prose-names-actors-and-recorded-facts.md: 91f7913ff0cabafdd1c089e618d7864b9a085147 -2026-08-09-concrete-prose-names-actors-and-recorded-facts.zh.md: 315850711adb234fa2bd9a92d9bd69fea5077230 +/agent-note-concrete-prose-names-actors-and-recorded-facts: + en: fbfbd92c8f73d34c + zh: fc48118b80f5dbb9 +/agent-note-concrete-prose-names-actors-and-recorded-facts/problem: + en: f0228c15ff233209 + zh: b6183fdc8dd705a0 +/agent-note-concrete-prose-names-actors-and-recorded-facts/decision: + en: 833658027dc8e2d7 + zh: a360c4aa7b4dde7f +/agent-note-concrete-prose-names-actors-and-recorded-facts/alternatives-considered: + en: 08a988b00edf03b2 + zh: 8614c5edbc46ca36 +/agent-note-concrete-prose-names-actors-and-recorded-facts/consequences: + en: 18e6d0b597186220 + zh: 744ed1b795929bba diff --git a/.agents/notes/implemented/process/2026-08-10-event-directed-pr-review-status.i18n.yaml b/.agents/notes/implemented/process/2026-08-10-event-directed-pr-review-status.i18n.yaml index 4d9e3fafc1..6d96599459 100644 --- a/.agents/notes/implemented/process/2026-08-10-event-directed-pr-review-status.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-10-event-directed-pr-review-status.i18n.yaml @@ -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-event-directed-pr-review-status.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/process/2026-08-10-event-directed-pr-review-status.md -2026-08-10-event-directed-pr-review-status.md: 37b8086a081145e8c16ceb29d489fbc38a7f0d43 -2026-08-10-event-directed-pr-review-status.zh.md: cc0dad8554f869d51965c30d2648937c54dc2b75 +/agent-note-event-directed-pr-review-status-commands: + en: 936b85c184551acf + zh: faf32b3209539114 +/agent-note-event-directed-pr-review-status-commands/problem: + en: 3e00a9cb6c0e53ec + zh: 1bd27ceea8a424ce +/agent-note-event-directed-pr-review-status-commands/decision: + en: 3b661de4e6fbf401 + zh: 2fb7f7adb4f846e4 +/agent-note-event-directed-pr-review-status-commands/verification: + en: 46301d11d2f1c8df + zh: daa44a617912c315 +/agent-note-event-directed-pr-review-status-commands/alternatives-considered: + en: 8b5ec4d7fc09a9ab + zh: d72ebe462bb2e9d2 +/agent-note-event-directed-pr-review-status-commands/consequences: + en: e3d39dca9122531b + zh: 262098573f196b93 diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.i18n.yaml b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.i18n.yaml index bd7e432b63..40e0e18b71 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.i18n.yaml @@ -1,6 +1,52 @@ -# 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-npm-release-sequences.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/process/2026-08-10-npm-release-sequences.md -2026-08-10-npm-release-sequences.md: 6a4f9d1ec23d1fd1c7b74630e106974b680fe41a -2026-08-10-npm-release-sequences.zh.md: d33d48e4458a62951aa957e694dd70eedcf2a6c8 +/agent-note-private-npm-publication-as-three-independent-sequences: + en: 176f873a6b094838 + zh: 9baeba69cbaea9cf +/agent-note-private-npm-publication-as-three-independent-sequences/problem: + en: b94462e04e350571 + zh: 07cef78e4cf7a9ac +/agent-note-private-npm-publication-as-three-independent-sequences/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/three-independent-sequences: + en: 6cd23b2407935500 + zh: 6d50f5f4fb867342 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/versions-land-in-the-repository-from-a-local-command-ci-only-checks-and-uploads: + en: 71d4cda384013bfb + zh: 909d853c18496925 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/vendor-publish-what-changed-and-let-tags-be-the-ledger: + en: 7f578bb18f7f8693 + zh: 49f25210f7c1a61f +/agent-note-private-npm-publication-as-three-independent-sequences/decision/publication-runs-only-on-github-and-the-registry-decides-what-goes-out: + en: 4f399390f58d7a34 + zh: 9df67248acfc61c8 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/workspace-internal-references-use-the-workspace-protocol: + en: 6cff087e7e2d0ac7 + zh: 5d45a3abdd960d9c +/agent-note-private-npm-publication-as-three-independent-sequences/decision/published-dependency-faces-use-an-explicit-policy: + en: 30a64e0e919a27c0 + zh: 19729d7ebee35439 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/an-optional-dependency-is-never-loaded-at-module-scope: + en: d83f6cf38529c5b5 + zh: 4df5659b2154d3b7 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/release-family-objects: + en: e8bb80d936e2cbbd + zh: bc4ae297e98a5446 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/workflow-shape-pack-on-pr-push-publish-from-a-manual-dispatch-workflow: + en: ea0acc6409da4d5c + zh: ac0bd2fe41f4fe67 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/repository-changes-this-carried: + en: c505237cad2c4128 + zh: 55364ba462536680 +/agent-note-private-npm-publication-as-three-independent-sequences/decision/relationship-to-the-earlier-proposal: + en: 298382a27013dcfb + zh: ab89cf392232f9bb +/agent-note-private-npm-publication-as-three-independent-sequences/alternatives-considered: + en: 11877d09e5a84f6e + zh: ea372c779254be93 +/agent-note-private-npm-publication-as-three-independent-sequences/consequences: + en: f961ebb927e30b5c + zh: 019f1628fb1f2c56 diff --git a/.agents/notes/implemented/process/2026-08-18-in-job-partitioned-coverage.i18n.yaml b/.agents/notes/implemented/process/2026-08-18-in-job-partitioned-coverage.i18n.yaml index b11aba495c..47454c2346 100644 --- a/.agents/notes/implemented/process/2026-08-18-in-job-partitioned-coverage.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-18-in-job-partitioned-coverage.i18n.yaml @@ -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-18-in-job-partitioned-coverage.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/process/2026-08-18-in-job-partitioned-coverage.md -2026-08-18-in-job-partitioned-coverage.md: 3eafecc02f45b470e13ca426ad005f053a852472 -2026-08-18-in-job-partitioned-coverage.zh.md: 457e352992519b1845b0a592cc9d5a235d29df9d +/agent-note-in-job-partitioned-coverage: + en: eb25ff049a1ecc31 + zh: d7430b14ccea5707 +/agent-note-in-job-partitioned-coverage/problem: + en: ab6dcac4ca2bbfb3 + zh: c754cc8077671b25 +/agent-note-in-job-partitioned-coverage/decision: + en: ae23ea86587c23e8 + zh: b9868c5c76238d9a +/agent-note-in-job-partitioned-coverage/failure-and-output-semantics: + en: c73ddbc65107e34e + zh: dbc7649637f8d1c0 +/agent-note-in-job-partitioned-coverage/verification: + en: 81dcaebd4b96229c + zh: 76b3332b183f6c44 +/agent-note-in-job-partitioned-coverage/alternatives-considered: + en: 82f314bd434b0059 + zh: 7b64e90b74f428e5 +/agent-note-in-job-partitioned-coverage/consequences: + en: 146e997017ee6e47 + zh: cd5e5d2d9b0b47b9 diff --git a/.agents/notes/implemented/process/2026-08-19-remove-knip.i18n.yaml b/.agents/notes/implemented/process/2026-08-19-remove-knip.i18n.yaml index aee415539b..1d76a326bd 100644 --- a/.agents/notes/implemented/process/2026-08-19-remove-knip.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-19-remove-knip.i18n.yaml @@ -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-remove-knip.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/process/2026-08-19-remove-knip.md -2026-08-19-remove-knip.md: 5e7e898e05a7e6a6e087b8784f7f49e71cf8fc37 -2026-08-19-remove-knip.zh.md: f6bca8661648efd565dc0bbec86ca2c76738ea85 +/agent-note-remove-knip-from-repository-gates: + en: adba00071ebc35c8 + zh: 44f778106e0b9965 +/agent-note-remove-knip-from-repository-gates/problem: + en: 5b2ece5e6f3775e0 + zh: 4fbc60619afdb7e2 +/agent-note-remove-knip-from-repository-gates/decision: + en: c5d7ae84ed863e29 + zh: 409dca40c2a63940 +/agent-note-remove-knip-from-repository-gates/alternatives-considered: + en: 95363dbc293712f3 + zh: 9cbcb9937081f5f0 +/agent-note-remove-knip-from-repository-gates/consequences: + en: 7466ca9e99d0bb27 + zh: 2ac417bc23865e14 diff --git a/.agents/notes/implemented/process/2026-08-26-ban-ambiguous-origin-label.i18n.yaml b/.agents/notes/implemented/process/2026-08-26-ban-ambiguous-origin-label.i18n.yaml index c1d9874a82..064bf1cbf2 100644 --- a/.agents/notes/implemented/process/2026-08-26-ban-ambiguous-origin-label.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-26-ban-ambiguous-origin-label.i18n.yaml @@ -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-26-ban-ambiguous-origin-label.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/process/2026-08-26-ban-ambiguous-origin-label.md -2026-08-26-ban-ambiguous-origin-label.md: b4c161a8a963e0aebdb3dcf24b8aac028429f349 -2026-08-26-ban-ambiguous-origin-label.zh.md: 2d592f44429d8622b5a42c55c7f92eae6da96800 +/agent-note-ban-an-ambiguous-origin-label: + en: 98843ceb0ee72c06 + zh: e4963bfe0e1b1314 +/agent-note-ban-an-ambiguous-origin-label/problem: + en: e3c5b3a689f7a3cc + zh: 676620dfb5303bed +/agent-note-ban-an-ambiguous-origin-label/decision: + en: bb8507460f159ad1 + zh: 357b5e6065cf389c +/agent-note-ban-an-ambiguous-origin-label/alternatives-considered: + en: 50421d71ea80fef9 + zh: 512625bd4dac0734 +/agent-note-ban-an-ambiguous-origin-label/consequences: + en: 51a4f9c099f993f1 + zh: 655bcf2eda1835ff diff --git a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.i18n.yaml b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.i18n.yaml index 02670de7a5..19ca92d47b 100644 --- a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.i18n.yaml @@ -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-26-published-dependency-faces.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/process/2026-08-26-published-dependency-faces.md -2026-08-26-published-dependency-faces.md: f188ccc0fc91b2899ccb618d3000a9b3cb94eb59 -2026-08-26-published-dependency-faces.zh.md: d59bb724ceb15f6eae65b509f8437a5dcfa05a23 +/agent-note-published-dependency-faces-and-bounded-peer-relays: + en: 553313933867d0f4 + zh: 11288efed41eea50 +/agent-note-published-dependency-faces-and-bounded-peer-relays/problem: + en: a8357e7e0735ad71 + zh: 5217d99a4ef921c7 +/agent-note-published-dependency-faces-and-bounded-peer-relays/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-published-dependency-faces-and-bounded-peer-relays/decision/package-selection: + en: 5ea13b09ae774437 + zh: ef9dbccada39107a +/agent-note-published-dependency-faces-and-bounded-peer-relays/decision/dependency-sections: + en: b1c3e9a87b8bb1ea + zh: 5cfd8b4db39805b7 +/agent-note-published-dependency-faces-and-bounded-peer-relays/decision/maintainer-workflow: + en: 5983475fa551ca90 + zh: a5519f4817f65e8c +/agent-note-published-dependency-faces-and-bounded-peer-relays/decision/performance-verification: + en: 4ef3cc92457794fd + zh: 16ac73ea9760223b +/agent-note-published-dependency-faces-and-bounded-peer-relays/alternatives-considered: + en: e1c6f1cebc9dc6d2 + zh: 8c4b1959cdd6b3f2 +/agent-note-published-dependency-faces-and-bounded-peer-relays/consequences: + en: 70e475315e0898e2 + zh: bcb54a35da49fc99 diff --git a/.agents/notes/implemented/process/2026-08-28-ci-node-compile-cache-data-disk.i18n.yaml b/.agents/notes/implemented/process/2026-08-28-ci-node-compile-cache-data-disk.i18n.yaml index 4fd1361ca9..9413c6b4fd 100644 --- a/.agents/notes/implemented/process/2026-08-28-ci-node-compile-cache-data-disk.i18n.yaml +++ b/.agents/notes/implemented/process/2026-08-28-ci-node-compile-cache-data-disk.i18n.yaml @@ -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-ci-node-compile-cache-data-disk.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/process/2026-08-28-ci-node-compile-cache-data-disk.md -2026-08-28-ci-node-compile-cache-data-disk.md: 3f5f7eb2f00a37b635b63093f60c66688b82316b -2026-08-28-ci-node-compile-cache-data-disk.zh.md: c55a6c73cf98f0dd0b31b50d64e7937ee9e14305 +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp: + en: 52bb1466b8f7f8fe + zh: fa7c282d3d207e53 +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/problem: + en: 3efe58882ca81bf7 + zh: 14f802e97e26f03d +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/decision: + en: cb66e6c4ad73b50b + zh: 43540cec116e342a +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/verification: + en: e23de17356f97224 + zh: b28bcafb4d1a72ad +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/alternatives-considered: + en: 6119e2aff3b6be5a + zh: e01a6c669a9ec6aa +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/alternatives-considered/why-not-disable-the-compile-cache-entirely: + en: cee8de5b45031309 + zh: 6ce10a304e63bdbb +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/alternatives-considered/why-not-add-node-compile-cache-to-the-dsh-residue-sweep: + en: 7e06d9c4df7a9f56 + zh: f3151fe2671fd91e +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/alternatives-considered/why-not-job-level-env-or-gate-step-env-only: + en: 4ba6c9a14bafbc80 + zh: 410149f4a3e930e6 +/agent-note-redirect-the-node-compile-cache-to-the-data-volume-runner-temp/consequences: + en: 083e2665e1550111 + zh: 70560c09ca2b3750 diff --git a/.agents/notes/implemented/process/2026-09-02-project-local-issue-planning-fields.i18n.yaml b/.agents/notes/implemented/process/2026-09-02-project-local-issue-planning-fields.i18n.yaml index 305f975303..c092807a5a 100644 --- a/.agents/notes/implemented/process/2026-09-02-project-local-issue-planning-fields.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-02-project-local-issue-planning-fields.i18n.yaml @@ -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-09-02-project-local-issue-planning-fields.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/process/2026-09-02-project-local-issue-planning-fields.md -2026-09-02-project-local-issue-planning-fields.md: e44fe0f002c40309beaeb4af3ccdd975714777e6 -2026-09-02-project-local-issue-planning-fields.zh.md: 28308d48994dbb144f7e7934a1058cef35942c20 +/agent-note-project-local-issue-planning-fields: + en: 9791d03a5df4c38c + zh: 19cbbf884294402b +/agent-note-project-local-issue-planning-fields/problem: + en: d01d052a9f366f35 + zh: b18600b91aad9a7c +/agent-note-project-local-issue-planning-fields/decision: + en: 21db463121897497 + zh: fd0551038412fd17 +/agent-note-project-local-issue-planning-fields/verification: + en: 7d1ef3eb9aac465d + zh: 68280a4511bce360 +/agent-note-project-local-issue-planning-fields/alternatives-considered: + en: b51a8fbc92bb7b5f + zh: 9316e86ac82c0a1b +/agent-note-project-local-issue-planning-fields/consequences: + en: d3614b91a0a6523a + zh: 773a31194e293014 diff --git a/.agents/notes/implemented/process/2026-09-03-semantic-issue-templates-and-policy.i18n.yaml b/.agents/notes/implemented/process/2026-09-03-semantic-issue-templates-and-policy.i18n.yaml index 782e6472d4..68c4e68e70 100644 --- a/.agents/notes/implemented/process/2026-09-03-semantic-issue-templates-and-policy.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-03-semantic-issue-templates-and-policy.i18n.yaml @@ -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-09-03-semantic-issue-templates-and-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/process/2026-09-03-semantic-issue-templates-and-policy.md -2026-09-03-semantic-issue-templates-and-policy.md: 96b1981b21e901841d88b09d68a0e7e31ca140a2 -2026-09-03-semantic-issue-templates-and-policy.zh.md: 706cd59047fe5121964183bbc27efc8961a493ed +/agent-note-semantic-issue-templates-and-presentation-neutral-policy: + en: e1e183193c798bf4 + zh: db76ac954cd3038f +/agent-note-semantic-issue-templates-and-presentation-neutral-policy/problem: + en: 5da7b92d65316469 + zh: 30bc615947b3a8aa +/agent-note-semantic-issue-templates-and-presentation-neutral-policy/decision: + en: a351c272ef520bb9 + zh: 98db942d18da7565 +/agent-note-semantic-issue-templates-and-presentation-neutral-policy/verification: + en: 90912d4c58b9e35d + zh: 811eaab5bdd54ab4 +/agent-note-semantic-issue-templates-and-presentation-neutral-policy/alternatives-considered: + en: 520ba80ce03e05b4 + zh: 50df33c59c4c837d +/agent-note-semantic-issue-templates-and-presentation-neutral-policy/consequences: + en: c762b95945320c61 + zh: 935f6e7290c06811 diff --git a/.agents/notes/implemented/process/2026-09-06-evidence-driven-performance-skill.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-evidence-driven-performance-skill.i18n.yaml index 52ccc34d2c..a9cf40b2dc 100644 --- a/.agents/notes/implemented/process/2026-09-06-evidence-driven-performance-skill.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-evidence-driven-performance-skill.i18n.yaml @@ -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-09-06-evidence-driven-performance-skill.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/process/2026-09-06-evidence-driven-performance-skill.md -2026-09-06-evidence-driven-performance-skill.md: 221287ef03386f53d61458db7a280142dfde690a -2026-09-06-evidence-driven-performance-skill.zh.md: 90e2c1aa5778d23492bec4f2049ce158433e2363 +/agent-note-evidence-driven-performance-optimization-workflow: + en: 0a63ab9dc4847f40 + zh: f8ba9a608396c47c +/agent-note-evidence-driven-performance-optimization-workflow/problem: + en: 2e0cb63ef966a541 + zh: 1853e223e530708e +/agent-note-evidence-driven-performance-optimization-workflow/decision: + en: bd0e363221108421 + zh: fc83dc1020d53f4e +/agent-note-evidence-driven-performance-optimization-workflow/historical-evidence: + en: 2d913642c87e5a01 + zh: 45fce898640c87e8 +/agent-note-evidence-driven-performance-optimization-workflow/alternatives-considered: + en: 70d016cd8e541933 + zh: 2ebeb9cbeba8129e +/agent-note-evidence-driven-performance-optimization-workflow/consequences: + en: 961c634c37340937 + zh: 9a528567223f7bfa diff --git a/.agents/notes/implemented/process/2026-09-06-master-only-platform-ci.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-master-only-platform-ci.i18n.yaml index a331c0727e..0397c20321 100644 --- a/.agents/notes/implemented/process/2026-09-06-master-only-platform-ci.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-master-only-platform-ci.i18n.yaml @@ -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-09-06-master-only-platform-ci.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/process/2026-09-06-master-only-platform-ci.md -2026-09-06-master-only-platform-ci.md: fcdc413d644c1129635a7f33fe80bdec1b4a0b7a -2026-09-06-master-only-platform-ci.zh.md: 4fb55d5e95f8fe75e6d1efb8b57295b8e8469e8d +/agent-note-master-only-platform-ci: + en: fed101c5775cbbcd + zh: b407efdb4c46cfe2 +/agent-note-master-only-platform-ci/problem: + en: 85cf39297a859208 + zh: c959bf7f94ebc50b +/agent-note-master-only-platform-ci/decision: + en: 98b8ecd3b4cfe5e5 + zh: 2c622950ea7afd42 +/agent-note-master-only-platform-ci/alternatives-considered: + en: 71ce7f8bb8a31323 + zh: 45f97b72eb9c6971 +/agent-note-master-only-platform-ci/consequences: + en: 523bbd6a59c120bf + zh: a9d834b5c32a911f diff --git a/.agents/notes/implemented/process/2026-09-06-node-compatibility-selfhosted.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-node-compatibility-selfhosted.i18n.yaml index 93aad86a87..7cc692226f 100644 --- a/.agents/notes/implemented/process/2026-09-06-node-compatibility-selfhosted.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-node-compatibility-selfhosted.i18n.yaml @@ -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-09-06-node-compatibility-selfhosted.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/process/2026-09-06-node-compatibility-selfhosted.md -2026-09-06-node-compatibility-selfhosted.md: 0ed422711426268efcb3b7cf37b6e19c52feba55 -2026-09-06-node-compatibility-selfhosted.zh.md: 2e58e3e7983b370050484bb8455cfa8554af494e +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux: + en: 21c12c8bd0c44122 + zh: b07f0ffc18092f0d +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux/problem: + en: 6bcedb8e3f0dce21 + zh: 83e88ed593259292 +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux/decision: + en: 14f1348f993b9102 + zh: a94e1b802e6a8c39 +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux/alternatives-considered: + en: 93217ca46c2cefb8 + zh: 77a167c69f59111c +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux/consequences: + en: 116d255b8d1b846c + zh: 931754a68e4f75c6 +/agent-note-isolated-node-compatibility-jobs-on-self-hosted-linux/verification: + en: d0b1f1431fae737b + zh: 6cf4f4d654a9525d diff --git a/.agents/notes/implemented/process/2026-09-06-preview-hosted-runner-sizing.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-preview-hosted-runner-sizing.i18n.yaml index 3156f6b0bd..6bd758533f 100644 --- a/.agents/notes/implemented/process/2026-09-06-preview-hosted-runner-sizing.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-preview-hosted-runner-sizing.i18n.yaml @@ -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-09-06-preview-hosted-runner-sizing.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/process/2026-09-06-preview-hosted-runner-sizing.md -2026-09-06-preview-hosted-runner-sizing.md: 414a17bf8a47f901e61ed271e9b2cf3dee3415b8 -2026-09-06-preview-hosted-runner-sizing.zh.md: 91a67b90b6617fea4dfa77672cb7e78412f462ee +/agent-note-measured-github-hosted-pr-preview-sizing: + en: 987e2592c644030d + zh: 55f306766247e4a4 +/agent-note-measured-github-hosted-pr-preview-sizing/problem: + en: bc382c3ef9c28709 + zh: 27e50735d80696a2 +/agent-note-measured-github-hosted-pr-preview-sizing/decision: + en: 9988e6268f8fc5b8 + zh: e92f3922b49b193d +/agent-note-measured-github-hosted-pr-preview-sizing/decision/measurements: + en: 768cd2ecf9d33c87 + zh: 693ea069a5275736 +/agent-note-measured-github-hosted-pr-preview-sizing/alternatives-considered: + en: 04f845ddb2a86e31 + zh: 993c6f82f5119f66 +/agent-note-measured-github-hosted-pr-preview-sizing/consequences: + en: ed9e8446f4579f5d + zh: c899cdd070e6befa diff --git a/.agents/notes/implemented/process/2026-09-06-python-runtime-windows-hosted.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-python-runtime-windows-hosted.i18n.yaml index 4836b9f8c0..52e1d7fc30 100644 --- a/.agents/notes/implemented/process/2026-09-06-python-runtime-windows-hosted.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-python-runtime-windows-hosted.i18n.yaml @@ -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-09-06-python-runtime-windows-hosted.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/process/2026-09-06-python-runtime-windows-hosted.md -2026-09-06-python-runtime-windows-hosted.md: 95b762f2247c791536ae0902287ba40e20066258 -2026-09-06-python-runtime-windows-hosted.zh.md: e3f27788b0b620b4a7215b98bdc42b7d6957d5d7 +/agent-note-windows-python-runtime-ci-stays-on-github-hosted-windows: + en: d36b4627e3216a22 + zh: aabdaed56959936a +/agent-note-windows-python-runtime-ci-stays-on-github-hosted-windows/problem: + en: 81d36185575e6d77 + zh: 19003ab154d93394 +/agent-note-windows-python-runtime-ci-stays-on-github-hosted-windows/decision: + en: 1169dd58149ad6b4 + zh: aeebaf9ca8769de6 +/agent-note-windows-python-runtime-ci-stays-on-github-hosted-windows/alternatives-considered: + en: 817e77f011ea35c8 + zh: 2087bc653620a60f +/agent-note-windows-python-runtime-ci-stays-on-github-hosted-windows/consequences: + en: c31f88bace48ff9e + zh: 4698cd5ee3152e87 diff --git a/.agents/notes/implemented/process/2026-09-06-release-rehearsal-selfhosted.i18n.yaml b/.agents/notes/implemented/process/2026-09-06-release-rehearsal-selfhosted.i18n.yaml index a8ce01be68..9e35b7e987 100644 --- a/.agents/notes/implemented/process/2026-09-06-release-rehearsal-selfhosted.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-06-release-rehearsal-selfhosted.i18n.yaml @@ -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-09-06-release-rehearsal-selfhosted.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/process/2026-09-06-release-rehearsal-selfhosted.md -2026-09-06-release-rehearsal-selfhosted.md: 415ae4716e9bc0ae9b165afc807f6f41e8a57e04 -2026-09-06-release-rehearsal-selfhosted.zh.md: a6fa441d01e66cea998d77a9b1be588053ac60a5 +/agent-note-trusted-release-rehearsals-on-persistent-linux-runners: + en: 1bccf6bdafd4cc76 + zh: 28ce63be303697f1 +/agent-note-trusted-release-rehearsals-on-persistent-linux-runners/problem: + en: c458bf4244320194 + zh: fbd5f64cf8875725 +/agent-note-trusted-release-rehearsals-on-persistent-linux-runners/decision: + en: d51d35350d91f19b + zh: 65297576aff64e8a +/agent-note-trusted-release-rehearsals-on-persistent-linux-runners/alternatives-considered: + en: cd04297045b93d7b + zh: 9eacc1d9c6c10726 +/agent-note-trusted-release-rehearsals-on-persistent-linux-runners/consequences: + en: 90c50dda81822e7c + zh: 9c3ff4df4d2d9533 diff --git a/.agents/notes/implemented/process/2026-09-07-selective-issue-policy-evaluation.i18n.yaml b/.agents/notes/implemented/process/2026-09-07-selective-issue-policy-evaluation.i18n.yaml index 435048c1ba..b8002f1c9e 100644 --- a/.agents/notes/implemented/process/2026-09-07-selective-issue-policy-evaluation.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-07-selective-issue-policy-evaluation.i18n.yaml @@ -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-09-07-selective-issue-policy-evaluation.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/process/2026-09-07-selective-issue-policy-evaluation.md -2026-09-07-selective-issue-policy-evaluation.md: 5e05bef320980b6069ede9edb0d40446ddd27b0f -2026-09-07-selective-issue-policy-evaluation.zh.md: 37c531e14e485499a3cb76d042d4c17438d413a0 +/agent-note-selective-issue-policy-evaluation: + en: b0f986e68a7b7d74 + zh: cffd2efae38626ef +/agent-note-selective-issue-policy-evaluation/problem: + en: 5af4901a5e9576fb + zh: eb089750b27129b1 +/agent-note-selective-issue-policy-evaluation/decision: + en: 99e6c76f04a4d49b + zh: 2631ff72b4db3bdf +/agent-note-selective-issue-policy-evaluation/alternatives-considered: + en: 89631c2a92ab079a + zh: 37b94f76ec6dc36a +/agent-note-selective-issue-policy-evaluation/consequences: + en: 6013a044827444e5 + zh: 69f767a1d534761a +/agent-note-selective-issue-policy-evaluation/verification: + en: b7fb4ebd009d7fd3 + zh: 6d682a4b7f41a4e0 diff --git a/.agents/notes/implemented/process/2026-09-08-browser-third-party-build-inputs.i18n.yaml b/.agents/notes/implemented/process/2026-09-08-browser-third-party-build-inputs.i18n.yaml index 7fc8e364f2..70e32ca967 100644 --- a/.agents/notes/implemented/process/2026-09-08-browser-third-party-build-inputs.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-08-browser-third-party-build-inputs.i18n.yaml @@ -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-09-08-browser-third-party-build-inputs.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/process/2026-09-08-browser-third-party-build-inputs.md -2026-09-08-browser-third-party-build-inputs.md: 97e61f3b99955cb402f9e622b2d40e3ee2953d79 -2026-09-08-browser-third-party-build-inputs.zh.md: e23c4e9d4615c7c5bc788beafcf6b94699f211ce +/agent-note-browser-third-party-libraries-as-build-inputs: + en: 907b99b05fcbce0e + zh: 57980cde5b585338 +/agent-note-browser-third-party-libraries-as-build-inputs/problem: + en: 55458dc0cd27341e + zh: ab23b350c17862be +/agent-note-browser-third-party-libraries-as-build-inputs/decision: + en: 2e9ff103342733eb + zh: d8be06fe18aab03a +/agent-note-browser-third-party-libraries-as-build-inputs/alternatives-considered: + en: 0247f31a86099d53 + zh: 445a6d35c03fc468 +/agent-note-browser-third-party-libraries-as-build-inputs/consequences: + en: ee331a2282a6884e + zh: de81b33db3fd6486 diff --git a/.agents/notes/implemented/process/2026-09-08-package-index-link-discovery.i18n.yaml b/.agents/notes/implemented/process/2026-09-08-package-index-link-discovery.i18n.yaml index a7a1903352..e57f7c6ecc 100644 --- a/.agents/notes/implemented/process/2026-09-08-package-index-link-discovery.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-08-package-index-link-discovery.i18n.yaml @@ -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-09-08-package-index-link-discovery.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/process/2026-09-08-package-index-link-discovery.md -2026-09-08-package-index-link-discovery.md: be9084f72e468b914bd035ce62e95aa6a89983dc -2026-09-08-package-index-link-discovery.zh.md: 93d6c2163183b4fb6391b731e982002b1938a704 +/agent-note-include-package-indexes-in-markdown-link-discovery: + en: edf2fd5b97c0075a + zh: da6ca05db38ee998 +/agent-note-include-package-indexes-in-markdown-link-discovery/problem: + en: 74a87cccbf602fc4 + zh: 88d1116da4cc35fb +/agent-note-include-package-indexes-in-markdown-link-discovery/decision: + en: 350354f891182cbf + zh: 4607ef9c38ff7a68 +/agent-note-include-package-indexes-in-markdown-link-discovery/alternatives-considered: + en: e12999e567cd2cbd + zh: a502f11b11e86815 +/agent-note-include-package-indexes-in-markdown-link-discovery/consequences: + en: 0bd932bd7feb363b + zh: acce05659887e5e5 diff --git a/.agents/notes/implemented/process/2026-09-08-playwright-video-gif.i18n.yaml b/.agents/notes/implemented/process/2026-09-08-playwright-video-gif.i18n.yaml index bdf8870e5f..f8222bf89a 100644 --- a/.agents/notes/implemented/process/2026-09-08-playwright-video-gif.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-08-playwright-video-gif.i18n.yaml @@ -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-09-08-playwright-video-gif.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/process/2026-09-08-playwright-video-gif.md -2026-09-08-playwright-video-gif.md: 44db04814900d4813f1d39521e4e84e7d0b8d1b8 -2026-09-08-playwright-video-gif.zh.md: 4922d739f0ff760afe12fe1a624abc1d1c4cd81f +/agent-note-playwright-video-captures-continuous-browser-demos: + en: fcca6f069dc51b80 + zh: e9d171b6c84f92a7 +/agent-note-playwright-video-captures-continuous-browser-demos/problem: + en: 967fed211899587e + zh: 0062f7ca29211105 +/agent-note-playwright-video-captures-continuous-browser-demos/decision: + en: 5f9e88a564fd6b8a + zh: b78164f92167dada +/agent-note-playwright-video-captures-continuous-browser-demos/alternatives-considered: + en: 221e89bafcb152d4 + zh: b33816c680dc450f +/agent-note-playwright-video-captures-continuous-browser-demos/consequences: + en: e5c9eb6df05801ba + zh: 786cd7775bfceb9e diff --git a/.agents/notes/implemented/process/2026-09-09-blacksmith-failover-leg.i18n.yaml b/.agents/notes/implemented/process/2026-09-09-blacksmith-failover-leg.i18n.yaml index bfd50afb64..be7e6eb89c 100644 --- a/.agents/notes/implemented/process/2026-09-09-blacksmith-failover-leg.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-09-blacksmith-failover-leg.i18n.yaml @@ -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-09-09-blacksmith-failover-leg.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/process/2026-09-09-blacksmith-failover-leg.md -2026-09-09-blacksmith-failover-leg.md: 4fb4ed4ccb500887622200e01310230393b3de12 -2026-09-09-blacksmith-failover-leg.zh.md: c2c4ee76a3fcd8c9f16c635ac81bc987d40a04e2 +/agent-note-blacksmith-as-a-failover-leg-for-ci-pools: + en: 018c4f4b64ca6634 + zh: 949f97c78d0f0236 +/agent-note-blacksmith-as-a-failover-leg-for-ci-pools/problem: + en: 43ecfec1601f933e + zh: 3db5365403ffeac5 +/agent-note-blacksmith-as-a-failover-leg-for-ci-pools/decision: + en: fac195b5006faa2d + zh: 7c0ea86638c54e95 +/agent-note-blacksmith-as-a-failover-leg-for-ci-pools/alternatives-considered: + en: a605440fed0ccc2a + zh: 621b35ad2850ca1b +/agent-note-blacksmith-as-a-failover-leg-for-ci-pools/consequences: + en: 09db977b1472b797 + zh: c1b890aaca4e557e diff --git a/.agents/notes/implemented/process/2026-09-09-blocked-weighted-approvals-remain-pending.i18n.yaml b/.agents/notes/implemented/process/2026-09-09-blocked-weighted-approvals-remain-pending.i18n.yaml index 8817e9561a..3cf9104f6e 100644 --- a/.agents/notes/implemented/process/2026-09-09-blocked-weighted-approvals-remain-pending.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-09-blocked-weighted-approvals-remain-pending.i18n.yaml @@ -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-09-09-blocked-weighted-approvals-remain-pending.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/process/2026-09-09-blocked-weighted-approvals-remain-pending.md -2026-09-09-blocked-weighted-approvals-remain-pending.md: 50ab64dadc0d7ad14366950d24b4136d131f55ec -2026-09-09-blocked-weighted-approvals-remain-pending.zh.md: 58ab10b3acb3bee92c720b622d92170a1a8bcf03 +/agent-note-blocked-weighted-approvals-remain-pending: + en: 6a5da25eb874aece + zh: 654aa967a9222501 +/agent-note-blocked-weighted-approvals-remain-pending/problem: + en: 0afdda30d02b666b + zh: 6624aa9c8c58ea0a +/agent-note-blocked-weighted-approvals-remain-pending/decision: + en: cf7ac63f422b4cfb + zh: 250385e42d546d30 +/agent-note-blocked-weighted-approvals-remain-pending/verification: + en: af674f57088d303a + zh: b9c42f04beec9be5 +/agent-note-blocked-weighted-approvals-remain-pending/alternatives-considered: + en: 13d5f67070bd3396 + zh: c75db3746d31272e +/agent-note-blocked-weighted-approvals-remain-pending/consequences: + en: 284f19608b0d449f + zh: 1d9bd95239ba6ffa diff --git a/.agents/notes/implemented/process/2026-09-09-cancel-superseded-ci.i18n.yaml b/.agents/notes/implemented/process/2026-09-09-cancel-superseded-ci.i18n.yaml index 5ef13299ed..5dac131679 100644 --- a/.agents/notes/implemented/process/2026-09-09-cancel-superseded-ci.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-09-cancel-superseded-ci.i18n.yaml @@ -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-09-09-cancel-superseded-ci.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/process/2026-09-09-cancel-superseded-ci.md -2026-09-09-cancel-superseded-ci.md: 8de1f757870a2b18852a224ec2f1cc33d9f6a95e -2026-09-09-cancel-superseded-ci.zh.md: 3ae6ec6ad58b0dfc94e803a33ba92ded4e239485 +/agent-note-cancel-superseded-ci-validation: + en: 78c382bc45c48256 + zh: a6a93a2ef554c61c +/agent-note-cancel-superseded-ci-validation/problem: + en: b436e3c8a7ffe727 + zh: 80b9f77b5cb051de +/agent-note-cancel-superseded-ci-validation/decision: + en: a61d1bc387ed8436 + zh: 3162cdd8096a8a01 +/agent-note-cancel-superseded-ci-validation/alternatives-considered: + en: c7d012d6e43f35ec + zh: 6f3eaf1342319aeb +/agent-note-cancel-superseded-ci-validation/consequences: + en: c226f645a79d0060 + zh: 023071f83b9a126d +/agent-note-cancel-superseded-ci-validation/verification: + en: 015f312772637350 + zh: b703cdab8bd4f0ae diff --git a/.agents/notes/implemented/process/2026-09-09-parallel-macos-notarization.i18n.yaml b/.agents/notes/implemented/process/2026-09-09-parallel-macos-notarization.i18n.yaml index 43d5e94cad..2a23f8fdfb 100644 --- a/.agents/notes/implemented/process/2026-09-09-parallel-macos-notarization.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-09-parallel-macos-notarization.i18n.yaml @@ -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-09-09-parallel-macos-notarization.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/process/2026-09-09-parallel-macos-notarization.md -2026-09-09-parallel-macos-notarization.md: 18358444426575e27a21f0f56541e22e37fcdf2c -2026-09-09-parallel-macos-notarization.zh.md: a69d586eff1413debe096656a7572a53f0938e98 +/agent-note-parallel-macos-notarization-from-isolated-app-copies: + en: 610808eedf6e8fdd + zh: 2db10903004a3ebd +/agent-note-parallel-macos-notarization-from-isolated-app-copies/problem: + en: 12c2160b03bac5e0 + zh: 2222e4490505f728 +/agent-note-parallel-macos-notarization-from-isolated-app-copies/decision: + en: 9084607b8e5ecba2 + zh: 00d70d13629a7dd4 +/agent-note-parallel-macos-notarization-from-isolated-app-copies/alternatives-considered: + en: 0ec8e4f3902e17e6 + zh: 3df3091fc01ab600 +/agent-note-parallel-macos-notarization-from-isolated-app-copies/consequences: + en: 81b2cc070cc05152 + zh: 30c684868025f994 diff --git a/.agents/notes/implemented/process/2026-09-10-approval-review-workflow-identity.i18n.yaml b/.agents/notes/implemented/process/2026-09-10-approval-review-workflow-identity.i18n.yaml index 2cadc0e736..521e943a63 100644 --- a/.agents/notes/implemented/process/2026-09-10-approval-review-workflow-identity.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-10-approval-review-workflow-identity.i18n.yaml @@ -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-09-10-approval-review-workflow-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/process/2026-09-10-approval-review-workflow-identity.md -2026-09-10-approval-review-workflow-identity.md: 77164134e826acdf647db352cf73df2480055505 -2026-09-10-approval-review-workflow-identity.zh.md: 736851d6f3612080fd67ed6b72e1b8b667948d73 +/agent-note-identify-approval-review-workflows-by-file-path: + en: 8a332b9d080f3d62 + zh: 29f1de05d7867a77 +/agent-note-identify-approval-review-workflows-by-file-path/problem: + en: 6b927a7545ac2c48 + zh: 0902f03aa478d5ee +/agent-note-identify-approval-review-workflows-by-file-path/decision: + en: 82802438f1b8d16c + zh: ffe8c1fcbcc39abe +/agent-note-identify-approval-review-workflows-by-file-path/alternatives-considered: + en: f8fdd869a03ac5ff + zh: c355eb36e9cba350 +/agent-note-identify-approval-review-workflows-by-file-path/consequences: + en: 9f31e023a04a7849 + zh: 66831c450af4c88f diff --git a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml index 969ab3fd9e..126601f6e3 100644 --- a/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-11-persistence-type-history.i18n.yaml @@ -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-09-11-persistence-type-history.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/process/2026-09-11-persistence-type-history.md -2026-09-11-persistence-type-history.md: 87e87041dd44c4f671409a75c1b374312736342a -2026-09-11-persistence-type-history.zh.md: cfe5c4f7bd1998d4329dc422607cfe33273d1a5a +/agent-note-in-tree-persistence-type-history: + en: 27496d50584a4feb + zh: 1b241d60286a92f3 +/agent-note-in-tree-persistence-type-history/problem: + en: c8e926bfc65d7195 + zh: e0e007960b68fe80 +/agent-note-in-tree-persistence-type-history/decision: + en: 0d6257a57763ad48 + zh: 6ce3cb7228bba27a +/agent-note-in-tree-persistence-type-history/decision/finalized-checkpoints: + en: 7dd42139850de3bf + zh: 0783bff2f0084f71 +/agent-note-in-tree-persistence-type-history/alternatives-considered: + en: 5cdac1b3f15f89f6 + zh: 36cda3b92d31c916 +/agent-note-in-tree-persistence-type-history/consequences: + en: 672c8cb59d291dc2 + zh: cbec90fbca92320a diff --git a/.agents/notes/implemented/process/2026-09-11-production-blame-approval-weight.i18n.yaml b/.agents/notes/implemented/process/2026-09-11-production-blame-approval-weight.i18n.yaml index bbc5adb976..9272a63484 100644 --- a/.agents/notes/implemented/process/2026-09-11-production-blame-approval-weight.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-11-production-blame-approval-weight.i18n.yaml @@ -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-09-11-production-blame-approval-weight.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/process/2026-09-11-production-blame-approval-weight.md -2026-09-11-production-blame-approval-weight.md: d9a223c2f332cc110ddd8f6a3f592febe0072987 -2026-09-11-production-blame-approval-weight.zh.md: f4dfc9d4fc5cefcccadb2785f58893ec92043ba7 +/agent-note-weight-approvals-by-changed-production-line-ownership: + en: 40516dee2915ffc3 + zh: 3d58358bc7110df2 +/agent-note-weight-approvals-by-changed-production-line-ownership/problem: + en: 2dbd821b8d65b054 + zh: 9bef2993db51a00d +/agent-note-weight-approvals-by-changed-production-line-ownership/decision: + en: 7dc225f91538ace1 + zh: a22d05ffd8d32b6d +/agent-note-weight-approvals-by-changed-production-line-ownership/alternatives-considered: + en: 5e8af03e3ff6018a + zh: 6b518c8eee8c5172 +/agent-note-weight-approvals-by-changed-production-line-ownership/consequences: + en: 08495483b77771be + zh: a798d4af0eda55fe +/agent-note-weight-approvals-by-changed-production-line-ownership/verification: + en: cb604625373372b9 + zh: f9056d20ab612537 diff --git a/.agents/notes/implemented/process/2026-09-12-default-product-experimental-isolation.i18n.yaml b/.agents/notes/implemented/process/2026-09-12-default-product-experimental-isolation.i18n.yaml index 30118b2276..cf4ae928c6 100644 --- a/.agents/notes/implemented/process/2026-09-12-default-product-experimental-isolation.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-12-default-product-experimental-isolation.i18n.yaml @@ -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-09-12-default-product-experimental-isolation.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/process/2026-09-12-default-product-experimental-isolation.md -2026-09-12-default-product-experimental-isolation.md: 5c2485e4f737b822088a680b0006f395a5479fa9 -2026-09-12-default-product-experimental-isolation.zh.md: 3a412a491ab8356a4e29d706fed55226dc0f6038 +/agent-note-keep-experimental-packages-outside-the-default-product: + en: 2d1751612781064c + zh: 8be0f776c4a37e11 +/agent-note-keep-experimental-packages-outside-the-default-product/problem: + en: 6938ed9a5ca419bb + zh: 6d2cd6bb912b9118 +/agent-note-keep-experimental-packages-outside-the-default-product/decision: + en: d471671fd6c06d03 + zh: 205586983a29eba4 +/agent-note-keep-experimental-packages-outside-the-default-product/alternatives-considered: + en: b8615d8d31f313d7 + zh: 556e3b96a90f6897 +/agent-note-keep-experimental-packages-outside-the-default-product/consequences: + en: 5ffd5e60d782a0bd + zh: 300665f42d70f049 diff --git a/.agents/notes/implemented/process/2026-09-12-experimental-publication-denylist.i18n.yaml b/.agents/notes/implemented/process/2026-09-12-experimental-publication-denylist.i18n.yaml index 9ec2270d40..0d6fed02a4 100644 --- a/.agents/notes/implemented/process/2026-09-12-experimental-publication-denylist.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-12-experimental-publication-denylist.i18n.yaml @@ -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-09-12-experimental-publication-denylist.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/process/2026-09-12-experimental-publication-denylist.md -2026-09-12-experimental-publication-denylist.md: f19faa1f391628574fd47e3064130e00c26c831a -2026-09-12-experimental-publication-denylist.zh.md: 92a1c6d5cd0f23615f89d4779f2b9a977b1a8438 +/agent-note-publish-experimental-packages-with-explicit-private-exceptions: + en: 20aed7271477745f + zh: 81b50a3ba89b7935 +/agent-note-publish-experimental-packages-with-explicit-private-exceptions/problem: + en: c267b50c3004619f + zh: 91830d04d2972d46 +/agent-note-publish-experimental-packages-with-explicit-private-exceptions/decision: + en: 3cf968834876a655 + zh: 7f7bad8b931a5ed2 +/agent-note-publish-experimental-packages-with-explicit-private-exceptions/alternatives-considered: + en: 61369830fb32e695 + zh: 445eb44e1ae3457a +/agent-note-publish-experimental-packages-with-explicit-private-exceptions/consequences: + en: 23f4d725196f1c2d + zh: ebd9455778d8a89f diff --git a/.agents/notes/implemented/process/2026-09-12-maintained-repository-references.i18n.yaml b/.agents/notes/implemented/process/2026-09-12-maintained-repository-references.i18n.yaml index ee236e6c0b..34379e6e6c 100644 --- a/.agents/notes/implemented/process/2026-09-12-maintained-repository-references.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-12-maintained-repository-references.i18n.yaml @@ -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-09-12-maintained-repository-references.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/process/2026-09-12-maintained-repository-references.md -2026-09-12-maintained-repository-references.md: b2bc750100e1aaf2ff63ffc773bbd54997fdf355 -2026-09-12-maintained-repository-references.zh.md: 99216e8105af9d159f6f371c9e31fec6d75a0e75 +/agent-note-maintained-repository-references: + en: 10750a69061b5dd0 + zh: ab4be61612ead1da +/agent-note-maintained-repository-references/problem: + en: 36ca11f2ef3d8b4e + zh: 6e6ca6ae00fab2f7 +/agent-note-maintained-repository-references/decision: + en: ec87568d74d5dc5f + zh: bc34159aeafa9fcd +/agent-note-maintained-repository-references/alternatives-considered: + en: de1c15bc0d404c41 + zh: a32a80be126d3d71 +/agent-note-maintained-repository-references/consequences: + en: 17e87405d1ab8efa + zh: d4dbc337733d9a2d diff --git a/.agents/notes/implemented/process/2026-09-12-publish-all-experimental-packages.i18n.yaml b/.agents/notes/implemented/process/2026-09-12-publish-all-experimental-packages.i18n.yaml index d3452d5d10..3568158aca 100644 --- a/.agents/notes/implemented/process/2026-09-12-publish-all-experimental-packages.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-12-publish-all-experimental-packages.i18n.yaml @@ -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-09-12-publish-all-experimental-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/process/2026-09-12-publish-all-experimental-packages.md -2026-09-12-publish-all-experimental-packages.md: 8bef877297d096159fcce60e6b479e12461357f2 -2026-09-12-publish-all-experimental-packages.zh.md: 6163e6b4ac11c46dac3897361585d2fcc29ef746 +/agent-note-publish-every-current-experimental-package: + en: e08e7bc92478407d + zh: 45501f51a5f619ec +/agent-note-publish-every-current-experimental-package/problem: + en: 7db3c27e4b5c2d09 + zh: 0a770941ec41a50a +/agent-note-publish-every-current-experimental-package/decision: + en: cc702e2596b0bd73 + zh: 3815da9b56ae653b +/agent-note-publish-every-current-experimental-package/alternatives-considered: + en: e59c9f8484629e20 + zh: d6f64683af3d0460 +/agent-note-publish-every-current-experimental-package/consequences: + en: 2721ffbcf5341d3b + zh: be0b430b9d91d7c2 diff --git a/.agents/notes/implemented/process/2026-09-15-pr-approval-delegation.i18n.yaml b/.agents/notes/implemented/process/2026-09-15-pr-approval-delegation.i18n.yaml index 640bea7c7b..14bf4d7016 100644 --- a/.agents/notes/implemented/process/2026-09-15-pr-approval-delegation.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-15-pr-approval-delegation.i18n.yaml @@ -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-09-15-pr-approval-delegation.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/process/2026-09-15-pr-approval-delegation.md -2026-09-15-pr-approval-delegation.md: 4dcf0e8a8d23d66da11381586e376fdf39d23635 -2026-09-15-pr-approval-delegation.zh.md: bf21724d672aaf534bfe94540b76878177eeb57e +/agent-note-pr-scoped-approval-delegation: + en: 3fa5881b5ca14a79 + zh: 99dbde5fae7cdd6a +/agent-note-pr-scoped-approval-delegation/problem: + en: 5fe2f3b3cb7ce046 + zh: ed27d4efc995b8b5 +/agent-note-pr-scoped-approval-delegation/decision: + en: 41c5c90b82d323c6 + zh: 55d5ed09d88bb821 +/agent-note-pr-scoped-approval-delegation/alternatives-considered: + en: a6006217cb29613a + zh: 83968328096f1d91 +/agent-note-pr-scoped-approval-delegation/consequences: + en: e761c382b4431212 + zh: 43bb475b646c85eb diff --git a/.agents/notes/implemented/process/2026-09-15-shipped-optional-bundles.i18n.yaml b/.agents/notes/implemented/process/2026-09-15-shipped-optional-bundles.i18n.yaml index 2c5a3f8554..dbe4c5aaab 100644 --- a/.agents/notes/implemented/process/2026-09-15-shipped-optional-bundles.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-15-shipped-optional-bundles.i18n.yaml @@ -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-09-15-shipped-optional-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/process/2026-09-15-shipped-optional-bundles.md -2026-09-15-shipped-optional-bundles.md: c9f560f5c07ec6fb18030b77a0d1f53bd27dc045 -2026-09-15-shipped-optional-bundles.zh.md: e91b6580e29cd7ae142c9c61ed6aac7e5e1476eb +/agent-note-ship-optional-bundles-with-the-installation: + en: a35c5daebeaa4b1e + zh: a74f44bb23f0571c +/agent-note-ship-optional-bundles-with-the-installation/problem: + en: dc43ba84345e1405 + zh: dbc03572ab7710d2 +/agent-note-ship-optional-bundles-with-the-installation/decision: + en: 84777110aa68ecf8 + zh: b109275cfddb73b0 +/agent-note-ship-optional-bundles-with-the-installation/alternatives-considered: + en: 05c19f616009bee8 + zh: af318640481351f0 +/agent-note-ship-optional-bundles-with-the-installation/consequences: + en: 4a9d3a049a605150 + zh: 67b50bbc9f7f4bb0 diff --git a/.agents/notes/implemented/process/2026-09-16-author-approval-credit.i18n.yaml b/.agents/notes/implemented/process/2026-09-16-author-approval-credit.i18n.yaml index b3f403e7b5..cfc6317172 100644 --- a/.agents/notes/implemented/process/2026-09-16-author-approval-credit.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-16-author-approval-credit.i18n.yaml @@ -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-09-16-author-approval-credit.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/process/2026-09-16-author-approval-credit.md -2026-09-16-author-approval-credit.md: ab7aba88801271c22a0f054d5b3888726b94e97a -2026-09-16-author-approval-credit.zh.md: 316a09ea5d82f78915a9550fde7f29bd55761e44 +/agent-note-author-approval-credit: + en: 58068bcf9dbf6d30 + zh: ad51b869c8f3e791 +/agent-note-author-approval-credit/problem: + en: 13def594e495779d + zh: d5ceaa0d156ba043 +/agent-note-author-approval-credit/decision: + en: 5670829131121899 + zh: 7df21c9b22c4978d +/agent-note-author-approval-credit/alternatives-considered: + en: 8ab9e11e49044029 + zh: c7930455d747ceb5 +/agent-note-author-approval-credit/consequences: + en: 70ad19025f7fe6d4 + zh: c73aa8be25724790 +/agent-note-author-approval-credit/verification: + en: 0617e23e217b0a67 + zh: 82576f05a59d8db7 diff --git a/.agents/notes/implemented/process/2026-09-16-desktop-release-version-derivation.i18n.yaml b/.agents/notes/implemented/process/2026-09-16-desktop-release-version-derivation.i18n.yaml index 1293c824d8..f25c473733 100644 --- a/.agents/notes/implemented/process/2026-09-16-desktop-release-version-derivation.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-16-desktop-release-version-derivation.i18n.yaml @@ -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-09-16-desktop-release-version-derivation.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/process/2026-09-16-desktop-release-version-derivation.md -2026-09-16-desktop-release-version-derivation.md: 54a7b9d52c63268f15209ad0a84bcd8da035dcee -2026-09-16-desktop-release-version-derivation.zh.md: dddf4b773217965380c4487803971311b57e0863 +/agent-note-derive-desktop-test-versions-from-the-complete-dsh-version: + en: b4afaf99cba87722 + zh: bd6c3b76efebf932 +/agent-note-derive-desktop-test-versions-from-the-complete-dsh-version/problem: + en: 307dae6b4bdf80de + zh: 72c9045a2e42036f +/agent-note-derive-desktop-test-versions-from-the-complete-dsh-version/decision: + en: 1a3ef4e14511dc1f + zh: 1db763a1323d9c87 +/agent-note-derive-desktop-test-versions-from-the-complete-dsh-version/alternatives-considered: + en: cf86267e11a4e534 + zh: daa4fb017b2725a5 +/agent-note-derive-desktop-test-versions-from-the-complete-dsh-version/consequences: + en: ce62d7f641c0cd45 + zh: 08b05c154f38d816 diff --git a/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml index 45223d0f08..564858250c 100644 --- a/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-17-persistence-schema-review.i18n.yaml @@ -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-09-17-persistence-schema-review.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/process/2026-09-17-persistence-schema-review.md -2026-09-17-persistence-schema-review.md: 47308a5584b368c99ee849b6d550538ba1856a09 -2026-09-17-persistence-schema-review.zh.md: eaa3c17991b23612753634297993dd3b951259ab +/agent-note-persistence-schema-policy-and-review: + en: 354306d8acf2141b + zh: 01b9235a77121284 +/agent-note-persistence-schema-policy-and-review/problem: + en: 4dfc8768cd580993 + zh: ad78f2ff4c22b390 +/agent-note-persistence-schema-policy-and-review/decision: + en: ab2a881b58bb6e05 + zh: c6e7b7b9854a0f94 +/agent-note-persistence-schema-policy-and-review/alternatives-considered: + en: 4a73283af97bcd4b + zh: 952cf965d7615737 +/agent-note-persistence-schema-policy-and-review/consequences: + en: eeadd60710998de9 + zh: 5c48f512f1d53d2c diff --git a/.agents/notes/implemented/process/2026-09-17-windows-runtime-signature-cache.i18n.yaml b/.agents/notes/implemented/process/2026-09-17-windows-runtime-signature-cache.i18n.yaml index 0ace5db1f2..4bc132731b 100644 --- a/.agents/notes/implemented/process/2026-09-17-windows-runtime-signature-cache.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-17-windows-runtime-signature-cache.i18n.yaml @@ -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-09-17-windows-runtime-signature-cache.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/process/2026-09-17-windows-runtime-signature-cache.md -2026-09-17-windows-runtime-signature-cache.md: e9229e47929664984a92499e54f87bb2166bde9d -2026-09-17-windows-runtime-signature-cache.zh.md: 53b6182170d807843345fa90f962ee18807f2cf2 +/agent-note-windows-runtime-signature-cache: + en: 36e012be8a24f6d3 + zh: 6caabddc72c89c95 +/agent-note-windows-runtime-signature-cache/problem: + en: ee8762f64fbefe3f + zh: 8781828a4b19d862 +/agent-note-windows-runtime-signature-cache/decision: + en: 4c114a4e0c81a753 + zh: 3e05c0fcc9fe637b +/agent-note-windows-runtime-signature-cache/alternatives-considered: + en: f83b7439bb610dd4 + zh: 938ae28e9f269406 +/agent-note-windows-runtime-signature-cache/consequences: + en: 382899114280f46a + zh: c12090b052308163 +/agent-note-windows-runtime-signature-cache/risks: + en: 12b4df69b80bee3d + zh: 9cce7f8a26918f5d diff --git a/.agents/notes/implemented/process/2026-09-17-windows-signature-completion.i18n.yaml b/.agents/notes/implemented/process/2026-09-17-windows-signature-completion.i18n.yaml index c8a392f733..92b7cb3e69 100644 --- a/.agents/notes/implemented/process/2026-09-17-windows-signature-completion.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-17-windows-signature-completion.i18n.yaml @@ -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-09-17-windows-signature-completion.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/process/2026-09-17-windows-signature-completion.md -2026-09-17-windows-signature-completion.md: e9c81531633a41c87ea10c9e4af2999923aa4470 -2026-09-17-windows-signature-completion.zh.md: 3142749db309b638676c171d4b1da8bd34729fe4 +/agent-note-separate-windows-hardware-signing-from-timestamp-completion: + en: 1e28eec77c3e64c0 + zh: 59e5a5cd5b377949 +/agent-note-separate-windows-hardware-signing-from-timestamp-completion/problem: + en: 7fbde4e99b78b965 + zh: 9137ec46c0645b25 +/agent-note-separate-windows-hardware-signing-from-timestamp-completion/decision: + en: deb7b785a51ef40f + zh: 751965c28a9c303f +/agent-note-separate-windows-hardware-signing-from-timestamp-completion/alternatives-considered: + en: ee16de94898ac51e + zh: c6f1de465d8bb261 +/agent-note-separate-windows-hardware-signing-from-timestamp-completion/consequences: + en: 9e228d85054ce3e8 + zh: f5d6af6411bc3b13 diff --git a/.agents/notes/implemented/process/2026-09-19-evidence-led-simplification-surveys.i18n.yaml b/.agents/notes/implemented/process/2026-09-19-evidence-led-simplification-surveys.i18n.yaml index be42dfe317..e36a2aa1c1 100644 --- a/.agents/notes/implemented/process/2026-09-19-evidence-led-simplification-surveys.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-19-evidence-led-simplification-surveys.i18n.yaml @@ -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-09-19-evidence-led-simplification-surveys.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/process/2026-09-19-evidence-led-simplification-surveys.md -2026-09-19-evidence-led-simplification-surveys.md: c217f80239690ee2f7310ca8e97956ec06fb75c7 -2026-09-19-evidence-led-simplification-surveys.zh.md: 1b1a11731967c87ab54aa9eba82253f90bb2abde +/agent-note-evidence-led-simplification-surveys: + en: f0941223baf75c96 + zh: b3cc733f7f90509a +/agent-note-evidence-led-simplification-surveys/problem: + en: 528a0c462d456493 + zh: a2af4901a8f498a7 +/agent-note-evidence-led-simplification-surveys/decision: + en: 865cfb210f13b188 + zh: 777d8155216d98c6 +/agent-note-evidence-led-simplification-surveys/historical-evidence: + en: 53eea2f1d7560461 + zh: 3c55432d9cd3ebe3 +/agent-note-evidence-led-simplification-surveys/bounded-survey-evidence: + en: 3637438d2ed7f606 + zh: d78b39ae6b67a442 +/agent-note-evidence-led-simplification-surveys/alternatives-considered: + en: 9e0039e0ff82ba1b + zh: fa4b0a52bf3dcbdd +/agent-note-evidence-led-simplification-surveys/consequences: + en: 395acde9597898c5 + zh: 45ee94d13427862a diff --git a/.agents/notes/implemented/process/2026-09-19-no-unknown-casts.i18n.yaml b/.agents/notes/implemented/process/2026-09-19-no-unknown-casts.i18n.yaml index 29002959bc..d6f0972f92 100644 --- a/.agents/notes/implemented/process/2026-09-19-no-unknown-casts.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-19-no-unknown-casts.i18n.yaml @@ -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-09-19-no-unknown-casts.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/process/2026-09-19-no-unknown-casts.md -2026-09-19-no-unknown-casts.md: 2f90422d0980fddc2569951ef7f8dba34b488ce4 -2026-09-19-no-unknown-casts.zh.md: 3b66236e586a60a61cdcc1f93b1c0c14ce27eb15 +/agent-note-prohibit-new-assertions-to-unknown: + en: d05b7f323025e1b9 + zh: fa84da1b6dbbd40a +/agent-note-prohibit-new-assertions-to-unknown/problem: + en: de8fd99f06ce9378 + zh: 627e67ac20b16e56 +/agent-note-prohibit-new-assertions-to-unknown/decision: + en: 426df6b19b654021 + zh: f4d8c678f9760139 +/agent-note-prohibit-new-assertions-to-unknown/alternatives-considered: + en: 1080f8f62795b113 + zh: bee2b837e7ae0de4 +/agent-note-prohibit-new-assertions-to-unknown/consequences: + en: ab7350f789864067 + zh: 9867a9baaa1c6227 diff --git a/.agents/notes/implemented/process/2026-09-21-desktop-build-version-as-input.i18n.yaml b/.agents/notes/implemented/process/2026-09-21-desktop-build-version-as-input.i18n.yaml index a5fb8f7ea7..32be76bd93 100644 --- a/.agents/notes/implemented/process/2026-09-21-desktop-build-version-as-input.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-21-desktop-build-version-as-input.i18n.yaml @@ -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-09-21-desktop-build-version-as-input.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/process/2026-09-21-desktop-build-version-as-input.md -2026-09-21-desktop-build-version-as-input.md: 8653c1ed580ac360e0c2f5145781303f15fc29b2 -2026-09-21-desktop-build-version-as-input.zh.md: 0a995ab5740a73de00b2a417d07640b3c07e4690 +/agent-note-pass-the-desktop-build-version-as-an-argument-instead-of-rewriting-manifests: + en: 300e3ca5e8255a56 + zh: 59f948ca2440d33b +/agent-note-pass-the-desktop-build-version-as-an-argument-instead-of-rewriting-manifests/problem: + en: 9f373ce939732eb2 + zh: a021c3f432d10fbe +/agent-note-pass-the-desktop-build-version-as-an-argument-instead-of-rewriting-manifests/decision: + en: be9fa7f7e85134f1 + zh: 51796ebbdfffc063 +/agent-note-pass-the-desktop-build-version-as-an-argument-instead-of-rewriting-manifests/alternatives-considered: + en: b5025ea37e2908bc + zh: 6f2ebcaa138f1c62 +/agent-note-pass-the-desktop-build-version-as-an-argument-instead-of-rewriting-manifests/consequences: + en: 686a5979332c0964 + zh: 89cff9e1e04e0325 diff --git a/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.i18n.yaml b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.i18n.yaml index 528c760888..05753024a2 100644 --- a/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.i18n.yaml +++ b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.i18n.yaml @@ -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-09-22-workspace-release-ranges.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/process/2026-09-22-workspace-release-ranges.md -2026-09-22-workspace-release-ranges.md: 57c74df3eaeac16ba40f55cdc4069762ae8fe2ef -2026-09-22-workspace-release-ranges.zh.md: f39ede4fb1941956af12d0391f5b88bd244db6f8 +/agent-note-workspace-dependency-release-ranges: + en: 8b7bf2179034aa08 + zh: a7a8b5dc60849d88 +/agent-note-workspace-dependency-release-ranges/problem: + en: ea71dd3eea6e1c60 + zh: 2a8ea98e8f6a3fbf +/agent-note-workspace-dependency-release-ranges/decision: + en: c7e9c7eb5b3e2ebf + zh: b74ef023fc894e36 +/agent-note-workspace-dependency-release-ranges/alternatives-considered: + en: b6aa87296ee61fcf + zh: f516320e589ce7a3 +/agent-note-workspace-dependency-release-ranges/consequences: + en: 49eac7a43407bbd9 + zh: 8a39766e8df596b8 diff --git a/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.i18n.yaml b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.i18n.yaml new file mode 100644 index 0000000000..f05c998dde --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.i18n.yaml @@ -0,0 +1,25 @@ +# Bilingual-pair consistency record for 2026-09-23-section-keyed-translation-pairing-records.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/process/2026-09-23-section-keyed-translation-pairing-records.md +/agent-note-section-keyed-translation-pairing-records: + en: fe3ee02933f0e25b + zh: 3518b378aebef215 +/agent-note-section-keyed-translation-pairing-records/problem: + en: 1662619f5cc6743f + zh: e98e9b39e82a2294 +/agent-note-section-keyed-translation-pairing-records/decision: + en: 333d08badeeef8a6 + zh: 2ccb1fe95b3457ff +/agent-note-section-keyed-translation-pairing-records/alternatives-considered: + en: 3e17a6963d74e3de + zh: cc086da130648d3c +/agent-note-section-keyed-translation-pairing-records/consequences: + en: 7a1f77c69ef79755 + zh: 7f12bd25f556ba9c +/agent-note-section-keyed-translation-pairing-records/measured-effect: + en: 97af2f09c25338f1 + zh: 2ec62a414fa61254 +/agent-note-section-keyed-translation-pairing-records/related: + en: 8f208df4c003e06e + zh: c1660f5b55dea743 diff --git a/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.md b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.md new file mode 100644 index 0000000000..e01eac4bbc --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.md @@ -0,0 +1,56 @@ +# Agent Note: Section-keyed translation pairing records + +Status: implemented + +English | [中文](2026-09-23-section-keyed-translation-pairing-records.zh.md) + +## Problem + +A consistency record held the full blob hash of each language file. Any edit to a pair changed both lines, so two branches that edited different parts of the same pair always conflicted on the record, even when Git merged both Markdown files cleanly. Generated references such as `docs/config-catalog.md`, `docs/module-graph.md`, and `docs/event-producer-consumer.md` were affected most: most PRs that touch packages, config, or events regenerate one of them, and each regeneration also required a hand-copied Chinese update and a new record. A worktree-local merge driver composed such records, but GitHub's mergeability check never runs it, so PRs still showed a conflict until someone merged the base locally and pushed. + +## Decision + +`foo.i18n.yaml` holds one entry per heading section that contains hashed content. `verify-translation-pairing` computes the entries; `scripts/translation-pairing-record.ts` owns the format. + +- Both sides are split at every heading. Section `i` of the English file corresponds to section `i` of the Chinese file; different heading counts are a structure error and cannot be recorded. +- The key is the English heading-slug path, such as `/plugin-config-catalog/loadable-plugins-with-no-config`. Text before the first heading is `/`, and a repeated path gets `~2`, `~3`, and so on. Keys are counted over every section, including sections without entries, so a key depends only on headings. +- Each side's hash covers the section's top-level blocks after paired-document link localization, except fenced code blocks and generated regions. Those two kinds of content are exactly what the pairing gate already requires to be identical on both sides; any other content is hashed even when it happens to be identical. The entry holds a 16-hex SHA-256 prefix of each side's hashed blocks. A section with no hashed blocks has no entry. +- Each entry spans three lines: an unchanged key line followed by the `en:` and `zh:` hash lines. The key line separates neighboring entries, so Git's text merge treats changes to adjacent entries as separate hunks. + +A record conflict therefore requires both branches to change hashed content in the same section. + +Generators put their generated data in generated regions and write each region into both pages, so regeneration changes neither the record nor the Chinese prose. `gen-config-catalog` writes both languages and the record, with one region per package and one per package table; labels inside a region are the code identifiers `inject`, `refs`, `source`, and `class`, which the translated introduction explains. `gen-module-graph` keeps its table in a region with identifier column headers. `gen-doc-graphs` splices the event matrix tables into the authored Chinese page, and `gen-cordis-catalog` already did the same for subsystem regions. + +`gen-translation-brief` recovers the last-confirmed text from the newest commit of the pair whose contents produce the committed record. Records no longer point to Git blobs, and `--write` no longer stores snapshot objects or refs. + +Archived Agent Notes keep their sealed whole-file records; `verify-archived-agent-notes` owns that format. + +## Alternatives considered + +**Keep whole-file hashes and the merge driver.** The driver resolved the conflict only in local worktrees where it was installed. GitHub still reported the PR as conflicted, raw merges without the installed runtime stopped, and the driver, resolver, installer integration, and their tests were about 1,400 lines of code to maintain. + +**One entry per top-level block instead of per heading section.** Fewer false conflicts inside long sections, but the record would grow to roughly the block count of the document. Positional block keys would also renumber on every insertion and create conflicts of their own. + +**Positional section keys (`h2[3]`).** Inserting a section renumbers every later key and changes every later record line, which recreates the conflicts this format removes. Heading-slug keys change only when that heading's English text changes. + +**Resolve on GitHub through Actions or an app.** Hosted automation would need credentials, concurrency control, and permission to rewrite PR branches. A record that Git's default text merge composes needs none of these. + +**Hash whole sections, including code blocks and regions.** Every regenerated row or code block would still change a record line, so generated references would keep conflicting on their largest sections. + +**Leave out any block that is byte-identical on both sides.** It also keeps generated rows out of the record, but it decides implicitly what needs no translation: an English paragraph copied untranslated into the Chinese file would be left out too, and a later edit to it would no longer change the record. Code blocks and generated regions are declared shared content that existing gates check. + +## Consequences + +Edits to different sections, and regenerated regions and code blocks, merge without a local tool, including on GitHub. Replaying the merge commits reachable from `master` between 2026-08-20 and 2026-09-23 shows the effect on real history: see [Measured effect](#measured-effect). + +A same-section conflict is resolved by resolving the Markdown and re-running `verify-translation-pairing --write `; no command automates it. Chinese readers of generated regions see code identifiers and English table headers instead of translated labels. Recovering last-confirmed text for the brief requires the confirmed pair to be committed. + +## Measured effect + +The replay covered 2016 two-parent merge commits reachable from `master` between 2026-08-20 and 2026-09-23, most of them PR branches merging the base forward. For every active pair whose record both parents changed, it ran Git's default text merge on the old record, on the section-keyed record computed from the same commit contents, and on the two Markdown files. It counts a record whose headings did not align at some commit as a conflict. The old format conflicted in 2950 pair merges across 850 merge commits; the section-keyed format conflicts in 1586 pair merges across 595 merge commits, a 46% reduction per pair. The Markdown files themselves conflicted in 926 pair merges across 338 merge commits, which no record format can avoid. Merge commits whose only conflicts were records fell from 512 to 257 (50%). + +The replay uses each commit's content as it was, before the generators wrapped their data in regions, so `docs/module-graph.md` (277 conflicts), `docs/event-producer-consumer.md` (220), and `docs/config-catalog.md` (110) still conflict on generated data in it. With that data in regions, their records change only when their prose changes; excluding their generated rows from the same replay left 0 and 14 conflicts for the first two. Substituting that for the three pages projects about 990 pair conflicts, about 66% below the old format; this projection is an estimate, not a replayed measurement. + +## Related + +The [bilingual pairing gate Agent Note](2026-07-02-bilingual-docs-and-pairing-gate.md) owns the three-file pair and its equal-authority rule; this note replaces its whole-file hash record. The [archived automatic pairing merges Agent Note](../../archived/process/2026-08-08-automatic-translation-pairing-merges.md) records the retired merge driver. diff --git a/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.zh.md b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.zh.md new file mode 100644 index 0000000000..e4746a5092 --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.zh.md @@ -0,0 +1,56 @@ +# Agent Note: 按分节记录翻译配对 + +Status: implemented + +[English](2026-09-23-section-keyed-translation-pairing-records.md) | 中文 + +## Problem + +一致性记录过去保存每个语言文件完整的 blob hash。对配对的任何修改都会改动这两行,因此两个分支即使修改同一配对的不同部分、Git 也能干净合并两个 Markdown 文件,记录仍然必然冲突。受影响最大的是 `docs/config-catalog.md`、`docs/module-graph.md` 和 `docs/event-producer-consumer.md` 等生成参考文档:大多数涉及包、配置或事件的 PR 都会重新生成其中之一,而每次重新生成还要求手工复制中文更新并写入新记录。worktree 本地的合并驱动可以组合这类记录,但 GitHub 的可合并性检查从不运行它,因此在有人于本地合并基线分支并推送之前,PR 仍显示冲突。 + +## Decision + +`foo.i18n.yaml` 为每个含有计入 hash 内容的标题分节保存一个条目。`verify-translation-pairing` 计算这些条目;`scripts/translation-pairing-record.ts` 负责该格式。 + +- 两侧都在每个标题处切分。英文文件的第 `i` 个分节对应中文文件的第 `i` 个分节;标题数量不同属于结构错误,无法记录。 +- 键是英文标题 slug 组成的路径,例如 `/plugin-config-catalog/loadable-plugins-with-no-config`。第一个标题之前的文本为 `/`,重复路径依次加 `~2`、`~3` 等后缀。键的计数覆盖每个分节(包括没有条目的分节),因此键只取决于标题。 +- 每侧的 hash 覆盖该分节在配对文档链接本地化后的顶层块,只排除围栏代码块和生成区域。这两类内容正是配对门禁已要求两侧一致的内容;其他内容即使碰巧相同也计入 hash。条目保存每侧计入 hash 的块的 SHA-256 前 16 位十六进制值。没有计入 hash 的块的分节没有条目。 +- 每个条目占三行:一行不变的键,后跟 `en:` 与 `zh:` 两行 hash。键行把相邻条目隔开,因此 Git 文本合并把对相邻条目的修改视为不同的 hunk。 + +因此,只有两个分支都修改了同一分节中计入 hash 的内容时,记录才会冲突。 + +生成器把生成数据放在生成区域中,并把每个区域写入两种语言的页面,因此重新生成既不改变记录,也不改变中文说明文字。`gen-config-catalog` 写出两种语言和记录,每个包一个区域,每个包表格一个区域;区域内的标签是代码标识符 `inject`、`refs`、`source` 和 `class`,由已翻译的介绍段落解释。`gen-module-graph` 把表格放在区域中,列头使用标识符。`gen-doc-graphs` 把事件矩阵的表格写入人工撰写的中文页面,`gen-cordis-catalog` 已经以同样方式处理子系统区域。 + +`gen-translation-brief` 从配对的提交中找到内容能生成已提交记录的最新提交,并从中还原上次确认的文本。记录不再指向 Git blob,`--write` 也不再存储快照对象或 ref。 + +已归档的 Agent Note 保留其已封存的整文件记录;该格式由 `verify-archived-agent-notes` 负责。 + +## Alternatives considered + +**保留整文件 hash 和合并驱动。** 驱动只在已安装它的本地 worktree 中解决冲突。GitHub 仍把 PR 报告为冲突,未安装运行时的原始合并会停止,而驱动、解决命令、安装脚本集成及其测试共约 1,400 行需要维护的代码。 + +**按顶层块而非按标题分节记录条目。** 长分节内的误报冲突更少,但记录会增长到约等于文档的块数。按位置编号的块键还会在每次插入时重新编号,自身又制造冲突。 + +**按位置编号的分节键(`h2[3]`)。** 插入一个分节会让之后的每个键重新编号,并改动之后的每一行记录,重新造成这种格式要消除的冲突。标题 slug 键只在该标题的英文文本改变时才改变。 + +**通过 Actions 或 GitHub App 在 GitHub 上解决。** 托管自动化需要凭证、并发控制以及改写 PR 分支的权限。Git 默认文本合并即可组合的记录不需要这些。 + +**对整个分节(包括代码块和区域)取 hash。** 每次重新生成的行或代码块仍会改动一行记录,因此生成参考文档最大的分节仍会冲突。 + +**排除两侧逐字节相同的任何块。** 这同样能让生成的行不进入记录,但它隐式地判定哪些内容不需要翻译:原样复制到中文文件而未翻译的英文段落也会被排除,之后对它的修改也不再改变记录。代码块和生成区域是现有门禁已检查的、明确声明的共享内容。 + +## Consequences + +对不同分节的修改,以及重新生成的区域和代码块,无需本地工具即可合并,在 GitHub 上也是如此。重放 2026-08-20 至 2026-09-23 期间可从 `master` 到达的合并提交可以看到它在真实历史上的效果:见[实测效果](#measured-effect)。 + +同一分节的冲突需要先解决 Markdown 冲突,再重新运行 `verify-translation-pairing --write `;没有命令会自动完成。生成区域的中文读者看到的是代码标识符和英文表头,而不是译文标签。为 brief 还原上次确认的文本,要求已确认的配对已经提交。 + +## Measured effect + +重放覆盖了 2026-08-20 至 2026-09-23 期间可从 `master` 到达的 2016 个双父合并提交,其中大多数是 PR 分支向前合并基线分支。对两个父提交都修改了其记录的每个活跃配对,它分别对旧记录、根据同一提交内容计算出的按分节记录,以及两个 Markdown 文件运行 Git 默认文本合并。某个提交中标题未对齐而无法计算的记录计为冲突。旧格式在 850 个合并提交中的 2950 次配对合并里冲突;按分节格式在 595 个合并提交中的 1586 次配对合并里冲突,按配对计减少 46%。Markdown 文件本身在 338 个合并提交中的 926 次配对合并里冲突,这部分任何记录格式都无法避免。只有记录冲突的合并提交从 512 个降到 257 个(减少 50%)。 + +重放使用各提交当时的内容,那时生成器还未把数据放进区域,因此 `docs/module-graph.md`(277 次)、`docs/event-producer-consumer.md`(220 次)和 `docs/config-catalog.md`(110 次)仍因其中的生成数据冲突。数据放进区域后,它们的记录只在说明文字改变时才变;在同一重放中排除其生成行后,前两者分别剩 0 次和 14 次冲突。用这一结果替换这三个页面后,预计约 990 次配对冲突,比旧格式少约 66%;这是估算,不是重放实测。 + +## Related + +[双语配对门禁 Agent Note](2026-07-02-bilingual-docs-and-pairing-gate.zh.md) 负责三文件配对及其两种语言同权的规则;本文取代其中的整文件 hash 记录。[已归档的自动配对合并 Agent Note](../../archived/process/2026-08-08-automatic-translation-pairing-merges.md) 记录已退役的合并驱动。 diff --git a/.agents/notes/implemented/simplification/2026-06-20-collapse-trace-only-session-events.i18n.yaml b/.agents/notes/implemented/simplification/2026-06-20-collapse-trace-only-session-events.i18n.yaml index a7506a8eeb..be5d21a505 100644 --- a/.agents/notes/implemented/simplification/2026-06-20-collapse-trace-only-session-events.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-06-20-collapse-trace-only-session-events.i18n.yaml @@ -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-20-collapse-trace-only-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/simplification/2026-06-20-collapse-trace-only-session-events.md -2026-06-20-collapse-trace-only-session-events.md: f83d93a899d59eb3ebb3f22f36e32aa7865bf902 -2026-06-20-collapse-trace-only-session-events.zh.md: e53544aed0d3b88c7eb85cd1e9a4f12af7686256 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events: + en: e7ada88fff270fa2 + zh: 501f2d2ab2122718 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/problem: + en: 909f9925807d0e0a + zh: eba8fb3aba92caa8 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/decision: + en: d07841a539028e7a + zh: 5ebaef62105a0da8 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/alternatives-considered: + en: f99cc05ab13c85c3 + zh: 93c92b3894cee7b1 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/verification: + en: 67e74bfc51b0a1ed + zh: dfdc9364ec831b9f +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/consequences: + en: 1c0e59938ce8408f + zh: 8c891d273da28f27 +/agent-note-fold-trace-only-session-facts-into-load-bearing-events/implementation-note: + en: 40e0c79252a438bc + zh: 27332c259b4bdf95 diff --git a/.agents/notes/implemented/simplification/2026-06-20-unify-agent-and-session-id.i18n.yaml b/.agents/notes/implemented/simplification/2026-06-20-unify-agent-and-session-id.i18n.yaml index 6b7315b167..3e2757185e 100644 --- a/.agents/notes/implemented/simplification/2026-06-20-unify-agent-and-session-id.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-06-20-unify-agent-and-session-id.i18n.yaml @@ -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-20-unify-agent-and-session-id.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/simplification/2026-06-20-unify-agent-and-session-id.md -2026-06-20-unify-agent-and-session-id.md: 4084912f95aa2354e815a1b4c05cd7f90bd3c315 -2026-06-20-unify-agent-and-session-id.zh.md: 3adba379f12a46e6f151e6777e0a63f4b16e9cd6 +/agent-note-unify-the-agent-id-and-the-session-id: + en: a3b5f1ad744e332a + zh: f56748eb6f1c1e8f +/agent-note-unify-the-agent-id-and-the-session-id/problem: + en: 13081f69bc061561 + zh: 6062223de9302202 +/agent-note-unify-the-agent-id-and-the-session-id/decision: + en: 58fe3d6c1fbe5aff + zh: 564332602546955e +/agent-note-unify-the-agent-id-and-the-session-id/alternatives-considered: + en: 5dba32bffc8ba6f4 + zh: 4e0d6f084e94eaa3 +/agent-note-unify-the-agent-id-and-the-session-id/verification: + en: bb4f738c649a2d9f + zh: dd46752393643444 +/agent-note-unify-the-agent-id-and-the-session-id/consequences: + en: 38daf65318d286fb + zh: 620933bffd049c42 diff --git a/.agents/notes/implemented/simplification/2026-06-26-fsspec-style-fs-seam.i18n.yaml b/.agents/notes/implemented/simplification/2026-06-26-fsspec-style-fs-seam.i18n.yaml index f45df2a68a..413cf22c2d 100644 --- a/.agents/notes/implemented/simplification/2026-06-26-fsspec-style-fs-seam.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-06-26-fsspec-style-fs-seam.i18n.yaml @@ -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-06-26-fsspec-style-fs-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/simplification/2026-06-26-fsspec-style-fs-seam.md -2026-06-26-fsspec-style-fs-seam.md: 138d6d4d74d162ab2149350a76fc72dc31c1818e -2026-06-26-fsspec-style-fs-seam.zh.md: bc7a3756dbf08673cfa63693a68aba1eb73da323 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin: + en: 181df186598c42fc + zh: 07b7687434105955 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/problem: + en: 4069760b095aa1b6 + zh: ea8baf0050362519 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/decision: + en: 6f6dc20965bb9948 + zh: 5a858a0359f96a98 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/provider-contract: + en: a04b6ceab91aa265 + zh: 5fae55161f754f4d +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/policy-contract: + en: bd54f18f4665b1ec + zh: eee54b7890c9d8be +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/tool-contract: + en: b517106d3e0ac7ef + zh: 2b128d7af26ebed2 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/concurrency-boundary: + en: 6a459d121a49988c + zh: 048de517a0f952b6 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/supersedes: + en: 780789585ce58330 + zh: 7b4b8d171dfdefae +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/verification: + en: ee6e0f4922f991af + zh: 3ce55e7b7d0fd431 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/later-extension: + en: b56210bf2c8f8dec + zh: 27decb39624c0ef7 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/alternatives-considered: + en: 3d169e07a912cbab + zh: d8a550835cfe7801 +/agent-note-split-the-filesystem-seam-provider-text-mutations-plus-the-dsh-fs-observation-policy-plugin/consequences: + en: 70264e0d9422b871 + zh: ae93add503e8a9bc diff --git a/.agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.i18n.yaml index d4d6d30f86..cea714ade6 100644 --- a/.agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-17-one-send-one-turn.i18n.yaml @@ -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-17-one-send-one-turn.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/simplification/2026-07-17-one-send-one-turn.md -2026-07-17-one-send-one-turn.md: 71ea5d23c303a2e5de472ceabf9868364d916ab9 -2026-07-17-one-send-one-turn.zh.md: 8478f3fb35698087873b39773f8997ec33832f2a +/agent-note-remove-implicit-batching-from-ordinary-sends: + en: 5376ddae6e8cf5b9 + zh: 1dae892f25da755e +/agent-note-remove-implicit-batching-from-ordinary-sends/problem: + en: ed05e7ef01abfafc + zh: 40293ad57c00f902 +/agent-note-remove-implicit-batching-from-ordinary-sends/decision: + en: 354fbb4e6a776538 + zh: c78879212400bf0f +/agent-note-remove-implicit-batching-from-ordinary-sends/alternatives-considered: + en: f944e18c49b30b4c + zh: cfcc0b18ce94f37c +/agent-note-remove-implicit-batching-from-ordinary-sends/verification: + en: 9f75f226ac06ba1f + zh: 2ae17eda85a56324 +/agent-note-remove-implicit-batching-from-ordinary-sends/consequences: + en: afb9764a5345a188 + zh: 10ee27c54cbdbbdb diff --git a/.agents/notes/implemented/simplification/2026-07-20-unwrap-injected-content-envelopes.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-20-unwrap-injected-content-envelopes.i18n.yaml index dbf98656ed..bcce3bc92b 100644 --- a/.agents/notes/implemented/simplification/2026-07-20-unwrap-injected-content-envelopes.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-20-unwrap-injected-content-envelopes.i18n.yaml @@ -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-20-unwrap-injected-content-envelopes.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/simplification/2026-07-20-unwrap-injected-content-envelopes.md -2026-07-20-unwrap-injected-content-envelopes.md: 7d14ada7cc1b88071ec4f07870afcfff6211a883 -2026-07-20-unwrap-injected-content-envelopes.zh.md: 813adfb818cac35da6e8c3b279b2e795fa99ad1a +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes: + en: 488b566c13d0cd05 + zh: e9b9a14dc644a313 +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes/problem: + en: 0005839a50aa093b + zh: bfb21448bbec1ac9 +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes/decision: + en: ed1a833070d10b97 + zh: b7ce57a2b927f064 +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes/alternatives-considered: + en: 93dca58966e5d55e + zh: 9fe7fd528d0114a2 +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes/consequences: + en: 2b369a5b2ee9435b + zh: f72957abff1d2327 +/agent-note-project-injected-content-verbatim-dropping-the-xml-envelopes/deferred: + en: a772793aea7ee7ee + zh: a57b31af4422406d diff --git a/.agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.i18n.yaml index f11b9827e8..ad1c43c6dd 100644 --- a/.agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-22-plan-specific-collaboration-state.i18n.yaml @@ -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-22-plan-specific-collaboration-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/simplification/2026-07-22-plan-specific-collaboration-state.md -2026-07-22-plan-specific-collaboration-state.md: 20648b8d6cee3e3c049aeee3022bd322d657ba1c -2026-07-22-plan-specific-collaboration-state.zh.md: 2142839d5a834abba7aac042c8b1fee7a56c56b1 +/agent-note-plan-specific-collaboration-state: + en: b1e94e354a36ef2b + zh: bbc98d4b9a837a5a +/agent-note-plan-specific-collaboration-state/problem: + en: e79a03a0ec1ebc34 + zh: 94adee6ef4f1bcc2 +/agent-note-plan-specific-collaboration-state/decision: + en: 1255fd4c4852ea9c + zh: 27e431da895a9a69 +/agent-note-plan-specific-collaboration-state/decision/boundary-and-model-contract: + en: f9d67f4f91e14f9d + zh: 3284e2432e8a8466 +/agent-note-plan-specific-collaboration-state/decision/reviewed-exit: + en: 283fec44700c41e5 + zh: 99b8634a1dff791c +/agent-note-plan-specific-collaboration-state/deleted-api: + en: 7da48b6397bad4d0 + zh: cc0af0e26a81c7e0 +/agent-note-plan-specific-collaboration-state/alternatives-considered: + en: 4098e049cd6d28d8 + zh: 4ab332ad6af53ccf +/agent-note-plan-specific-collaboration-state/verification: + en: 41179b6ab02b3f90 + zh: 47f5a602496281cd +/agent-note-plan-specific-collaboration-state/consequences: + en: a71537da7d3921e2 + zh: a2ab69676bfe985d diff --git a/.agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml index 9640e9d10e..0be5f93a6e 100644 --- a/.agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-23-acp-automation-only-protocol.i18n.yaml @@ -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-23-acp-automation-only-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/simplification/2026-07-23-acp-automation-only-protocol.md -2026-07-23-acp-automation-only-protocol.md: d3d6a7abb6f347b04fdbfcea2940e8df0432b806 -2026-07-23-acp-automation-only-protocol.zh.md: d332e3f7c4798f391fe34b1e50bd63276f0121b8 +/agent-note-acp-as-an-automation-only-protocol: + en: e8a5a82b0137b656 + zh: 8b371b4add7c17b4 +/agent-note-acp-as-an-automation-only-protocol/problem: + en: 5123f99030ae618e + zh: fa62dc7b9a4b9fef +/agent-note-acp-as-an-automation-only-protocol/decision: + en: d9a2404790fe7cf0 + zh: 5fbd7f65d5ed1c4f +/agent-note-acp-as-an-automation-only-protocol/snapshot-boundary: + en: 4f015bfadd7027e2 + zh: 7d68f4c3b9a875d5 +/agent-note-acp-as-an-automation-only-protocol/alternatives-considered: + en: 13192a25709b5d95 + zh: 6cadde33a58510b5 +/agent-note-acp-as-an-automation-only-protocol/consequences: + en: bce44fd4a6d9f755 + zh: 351e80b7c02f6ce7 diff --git a/.agents/notes/implemented/simplification/2026-07-24-agent-loop-observable-state-machine.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-24-agent-loop-observable-state-machine.i18n.yaml index d768a5513b..0e8ec12298 100644 --- a/.agents/notes/implemented/simplification/2026-07-24-agent-loop-observable-state-machine.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-24-agent-loop-observable-state-machine.i18n.yaml @@ -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-24-agent-loop-observable-state-machine.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/simplification/2026-07-24-agent-loop-observable-state-machine.md -2026-07-24-agent-loop-observable-state-machine.md: f250d645ca0a69c0fcad0078292de1d6531db19d -2026-07-24-agent-loop-observable-state-machine.zh.md: c77e5ad8f664851917bc578f1fb39760a80d2593 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine: + en: b7998bdbf46a06b1 + zh: ea7b4e8ef8e3cef5 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine/problem: + en: c55232633eaacf5a + zh: a71c538c61234c42 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine/decision: + en: 75a1c677da39192e + zh: 81a07f55fce3cbc0 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine/alternatives-considered: + en: 0d61d49e9f5964c2 + zh: f5e8802c7fe67839 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine/consequences: + en: 675d4ae63174031d + zh: 2649109d067352e2 +/agent-note-collapse-agent-loop-events-around-the-observable-state-machine/related: + en: f1610942ca31fdb8 + zh: 04eb3d4ce8e641af diff --git a/.agents/notes/implemented/simplification/2026-07-27-request-error-retry-action.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-27-request-error-retry-action.i18n.yaml index bccb2cfc58..204f3b5cba 100644 --- a/.agents/notes/implemented/simplification/2026-07-27-request-error-retry-action.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-27-request-error-retry-action.i18n.yaml @@ -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-27-request-error-retry-action.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/simplification/2026-07-27-request-error-retry-action.md -2026-07-27-request-error-retry-action.md: 9853d7d0439093afd3e7a611e360a6b32517ca4c -2026-07-27-request-error-retry-action.zh.md: e0c4749b7ed6bddcbc44f3ab512df542f33831bd +/agent-note-request-error-retry-action: + en: 672e3acc184e72f7 + zh: 10334d48de7dcc0e +/agent-note-request-error-retry-action/problem: + en: 8b9476349def23b6 + zh: e3b034bae896e24b +/agent-note-request-error-retry-action/decision: + en: 3937a99236b23d80 + zh: ec5e9cb21744e3ae +/agent-note-request-error-retry-action/alternatives-considered: + en: 8f50ac6497dfd03e + zh: 4f1d07901132a184 +/agent-note-request-error-retry-action/consequences: + en: 3e60793a09964f5a + zh: b28626761a229d85 diff --git a/.agents/notes/implemented/simplification/2026-07-28-remove-synthetic-log-only-turns.i18n.yaml b/.agents/notes/implemented/simplification/2026-07-28-remove-synthetic-log-only-turns.i18n.yaml index a8f49b1780..036542d074 100644 --- a/.agents/notes/implemented/simplification/2026-07-28-remove-synthetic-log-only-turns.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-07-28-remove-synthetic-log-only-turns.i18n.yaml @@ -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-remove-synthetic-log-only-turns.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/simplification/2026-07-28-remove-synthetic-log-only-turns.md -2026-07-28-remove-synthetic-log-only-turns.md: 073ac0888054c907087dd0c5f2d01b03a5e87455 -2026-07-28-remove-synthetic-log-only-turns.zh.md: 67b24c7423ee37c40361cb937fdad42243362dfd +/agent-note-remove-synthetic-turns-for-log-only-events: + en: 558a3b8b47acfec2 + zh: 9e6cc6443e468745 +/agent-note-remove-synthetic-turns-for-log-only-events/problem: + en: 33413b092d535f4f + zh: 02f79f372227c104 +/agent-note-remove-synthetic-turns-for-log-only-events/decision: + en: a49da9273f224a87 + zh: 870ffea9aacca6c7 +/agent-note-remove-synthetic-turns-for-log-only-events/alternatives-considered: + en: fbee860bf43530a7 + zh: 276647ba5402d6a8 +/agent-note-remove-synthetic-turns-for-log-only-events/verification: + en: bb7b19f80c4fbed6 + zh: ef06defe5b745e38 +/agent-note-remove-synthetic-turns-for-log-only-events/consequences: + en: 0c636b744dfa4ca9 + zh: 05f409a4fd962015 diff --git a/.agents/notes/implemented/simplification/2026-08-09-explicit-schedule-time-zone.i18n.yaml b/.agents/notes/implemented/simplification/2026-08-09-explicit-schedule-time-zone.i18n.yaml index 11c416587f..acb0275dcc 100644 --- a/.agents/notes/implemented/simplification/2026-08-09-explicit-schedule-time-zone.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-08-09-explicit-schedule-time-zone.i18n.yaml @@ -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-09-explicit-schedule-time-zone.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/simplification/2026-08-09-explicit-schedule-time-zone.md -2026-08-09-explicit-schedule-time-zone.md: 2f23394e65d37f9eb714c2e55b0556cdf0bc967e -2026-08-09-explicit-schedule-time-zone.zh.md: aafa5d56853339e51b9a4265a32fca1a24e7b1dd +/agent-note-explicit-schedule-time-zone-boundary: + en: 475b5512c7155605 + zh: e564e8c4f718f0c0 +/agent-note-explicit-schedule-time-zone-boundary/problem: + en: 4a7e52f6a16dec96 + zh: d558db30801355d9 +/agent-note-explicit-schedule-time-zone-boundary/decision: + en: 6f233286c95b5294 + zh: 5a1f4ba6f5ccbd36 +/agent-note-explicit-schedule-time-zone-boundary/alternatives-considered: + en: 982fe0b8d24a66ce + zh: e6dceee1ce776d21 +/agent-note-explicit-schedule-time-zone-boundary/verification: + en: 56dcb44f09be3713 + zh: 59a6814a662458ad +/agent-note-explicit-schedule-time-zone-boundary/consequences: + en: d9358667c58662e4 + zh: d536bb0fccd9f0a9 diff --git a/.agents/notes/implemented/simplification/2026-08-28-omit-unneeded-invariant-companions.i18n.yaml b/.agents/notes/implemented/simplification/2026-08-28-omit-unneeded-invariant-companions.i18n.yaml index 57d6fb3b1f..8ccac77c7e 100644 --- a/.agents/notes/implemented/simplification/2026-08-28-omit-unneeded-invariant-companions.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-08-28-omit-unneeded-invariant-companions.i18n.yaml @@ -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-08-28-omit-unneeded-invariant-companions.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/simplification/2026-08-28-omit-unneeded-invariant-companions.md -2026-08-28-omit-unneeded-invariant-companions.md: 82d421677cb2f2a425c92e203766527aac7ce860 -2026-08-28-omit-unneeded-invariant-companions.zh.md: d0fda9154675d038c1f304609313654fc4e51f23 +/agent-note-omit-invariant-companions-without-independent-observations: + en: 1aaf29f8d757fcc8 + zh: 76d99dd71bfabbaa +/agent-note-omit-invariant-companions-without-independent-observations/problem: + en: 53d9687bdef70d91 + zh: 61d225b1cd374c28 +/agent-note-omit-invariant-companions-without-independent-observations/decision: + en: a15c7c13f167e5ac + zh: 63bcc2ef60c2f344 +/agent-note-omit-invariant-companions-without-independent-observations/decision/independent-observations-justify-publication: + en: ee3e2ff2f0565d94 + zh: 232ddf075bf3b353 +/agent-note-omit-invariant-companions-without-independent-observations/decision/omission-is-explicit-in-the-package-readme: + en: 465c523c29fd7836 + zh: 9967d7e5b17f1adf +/agent-note-omit-invariant-companions-without-independent-observations/decision/audit-result: + en: b19c08cd1f7df630 + zh: 30e872df9ee3ff0a +/agent-note-omit-invariant-companions-without-independent-observations/alternatives-considered: + en: 5908a05a2aeb3f82 + zh: 9a01748e8d8b86f4 +/agent-note-omit-invariant-companions-without-independent-observations/consequences: + en: c648b67008e676f1 + zh: c89400eae3fef89c diff --git a/.agents/notes/implemented/simplification/2026-08-30-jsonl-only-session-persistence.i18n.yaml b/.agents/notes/implemented/simplification/2026-08-30-jsonl-only-session-persistence.i18n.yaml index 5b414b1e68..31ce312f8a 100644 --- a/.agents/notes/implemented/simplification/2026-08-30-jsonl-only-session-persistence.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-08-30-jsonl-only-session-persistence.i18n.yaml @@ -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-jsonl-only-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/simplification/2026-08-30-jsonl-only-session-persistence.md -2026-08-30-jsonl-only-session-persistence.md: eeb89d8ecc06b082c5346d61e85b40d317e31c89 -2026-08-30-jsonl-only-session-persistence.zh.md: 210e66fa75db5959f198235c31022792f5f35ea8 +/agent-note-jsonl-only-first-party-session-persistence: + en: 4060d3d6df88fea3 + zh: f6ed66cd7e39c465 +/agent-note-jsonl-only-first-party-session-persistence/problem: + en: fd4ad3e29b080f22 + zh: 6b3e1e88cea3e3ce +/agent-note-jsonl-only-first-party-session-persistence/decision: + en: 8c80ac91f1c31247 + zh: 560796b1b338f60f +/agent-note-jsonl-only-first-party-session-persistence/alternatives-considered: + en: d09a6b404ee37a4c + zh: a846a6ee2d3851c3 +/agent-note-jsonl-only-first-party-session-persistence/consequences: + en: 952ee4c54a2f9851 + zh: 1e7f908464b86a4a diff --git a/.agents/notes/implemented/simplification/2026-09-03-minimal-profiles-persistent-shell-only.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-03-minimal-profiles-persistent-shell-only.i18n.yaml index cd6b1146aa..2f39ebf65f 100644 --- a/.agents/notes/implemented/simplification/2026-09-03-minimal-profiles-persistent-shell-only.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-03-minimal-profiles-persistent-shell-only.i18n.yaml @@ -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-09-03-minimal-profiles-persistent-shell-only.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/simplification/2026-09-03-minimal-profiles-persistent-shell-only.md -2026-09-03-minimal-profiles-persistent-shell-only.md: 2bc4ef7ada0767d96c0ac448e19e13e8e06a945c -2026-09-03-minimal-profiles-persistent-shell-only.zh.md: d54e5734ac04825e2d28f59d9104a01b5caf9fb7 +/agent-note-minimal-profiles-expose-only-a-persistent-shell: + en: d48e78dc2040921c + zh: 70122e09d8c78e77 +/agent-note-minimal-profiles-expose-only-a-persistent-shell/problem: + en: a5d116f8ba3ed48b + zh: d60d307237a69573 +/agent-note-minimal-profiles-expose-only-a-persistent-shell/decision: + en: 95a1c2d9322ed9da + zh: 04bc770915863950 +/agent-note-minimal-profiles-expose-only-a-persistent-shell/alternatives-considered: + en: 55fc282c31b7d4e8 + zh: 6daa72fb5527fcca +/agent-note-minimal-profiles-expose-only-a-persistent-shell/consequences: + en: 4f0e22319608c3be + zh: a6393182b9452c4a diff --git a/.agents/notes/implemented/simplification/2026-09-05-base-default-file-editor.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-05-base-default-file-editor.i18n.yaml index 3b4fcb4fa3..e70adc677c 100644 --- a/.agents/notes/implemented/simplification/2026-09-05-base-default-file-editor.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-05-base-default-file-editor.i18n.yaml @@ -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-09-05-base-default-file-editor.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/simplification/2026-09-05-base-default-file-editor.md -2026-09-05-base-default-file-editor.md: e1e15718962322ba8c79107fda31446448b87056 -2026-09-05-base-default-file-editor.zh.md: d43df3313ecaeff8b2123208620779df2048b818 +/agent-note-shared-base-default-file-editor-selection: + en: 2adaf509a18a68eb + zh: 3103eec286980735 +/agent-note-shared-base-default-file-editor-selection/problem: + en: b9cf9c91689aeca7 + zh: 4fce9354bb6c2af0 +/agent-note-shared-base-default-file-editor-selection/decision: + en: 8aa4e6ecc02abdb8 + zh: 9925a29181c53e81 +/agent-note-shared-base-default-file-editor-selection/alternatives-considered: + en: 172ed2cdc1d47e20 + zh: e12bbb0576244f43 +/agent-note-shared-base-default-file-editor-selection/consequences: + en: 886dab29e1e6580f + zh: 49a7b2ceafac0c48 +/agent-note-shared-base-default-file-editor-selection/verification: + en: 7e8cd8a29f33aff3 + zh: ee6c24c9adf54998 diff --git a/.agents/notes/implemented/simplification/2026-09-06-agent-request-freeze-evidence.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-06-agent-request-freeze-evidence.i18n.yaml index cb5eb44cc5..6c68b294d5 100644 --- a/.agents/notes/implemented/simplification/2026-09-06-agent-request-freeze-evidence.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-06-agent-request-freeze-evidence.i18n.yaml @@ -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-09-06-agent-request-freeze-evidence.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/simplification/2026-09-06-agent-request-freeze-evidence.md -2026-09-06-agent-request-freeze-evidence.md: 6603a728c3dd2acc87902169bb07a67bde0be2a4 -2026-09-06-agent-request-freeze-evidence.zh.md: a5ba15ac139d647755f9c039847acbb642d214d3 +/agent-note-reuse-only-loop-proven-message-freezes: + en: 7ec7e2c8c1eb46bb + zh: 93a619878774a795 +/agent-note-reuse-only-loop-proven-message-freezes/problem: + en: af6aa6181efb2163 + zh: 3f1630947294db0a +/agent-note-reuse-only-loop-proven-message-freezes/decision: + en: 64e5058366d82142 + zh: 073f4e1856c58294 +/agent-note-reuse-only-loop-proven-message-freezes/measurement-evidence: + en: 731e00bb5059b1f3 + zh: 118464dc6e640431 +/agent-note-reuse-only-loop-proven-message-freezes/measurement-evidence/standard-hosted-ci-calibration: + en: 22ad93c82afc0572 + zh: 86e43487e7791148 +/agent-note-reuse-only-loop-proven-message-freezes/alternatives-considered: + en: 8a00552d7797826c + zh: 765a6b84eb663bab +/agent-note-reuse-only-loop-proven-message-freezes/consequences: + en: 5947b38f7722d4db + zh: 147b5ea3d681ebd7 diff --git a/.agents/notes/implemented/simplification/2026-09-07-file-content-scan.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-07-file-content-scan.i18n.yaml index e5ab7e62d9..7943e40a05 100644 --- a/.agents/notes/implemented/simplification/2026-09-07-file-content-scan.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-07-file-content-scan.i18n.yaml @@ -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-09-07-file-content-scan.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/simplification/2026-09-07-file-content-scan.md -2026-09-07-file-content-scan.md: 1ec46e7d685394f5165624f1e7b68622ba9f89d3 -2026-09-07-file-content-scan.zh.md: b4ebd835ca8adaf3a7b7fa09150cd5a2bec9f401 +/agent-note-scan-file-content-without-per-array-callbacks: + en: a814034fce2407dc + zh: 7de9ec55cbbb30ab +/agent-note-scan-file-content-without-per-array-callbacks/problem: + en: cb13a0053453cf45 + zh: ce40afb7fa03f9ed +/agent-note-scan-file-content-without-per-array-callbacks/decision: + en: e3d83658869a24f7 + zh: 44dd61458a47df6c +/agent-note-scan-file-content-without-per-array-callbacks/measurement-evidence: + en: ad23fa4ee386f3cf + zh: 41e54e28d26b3d02 +/agent-note-scan-file-content-without-per-array-callbacks/alternatives-considered: + en: 0128940c217dd77c + zh: 9394e713dac9675d +/agent-note-scan-file-content-without-per-array-callbacks/consequences: + en: dace71e8857e57b1 + zh: 0ee88fdaa4e067ee diff --git a/.agents/notes/implemented/simplification/2026-09-08-web-subagent-catalog-projections.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-08-web-subagent-catalog-projections.i18n.yaml index d589324465..ebd9b4005d 100644 --- a/.agents/notes/implemented/simplification/2026-09-08-web-subagent-catalog-projections.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-08-web-subagent-catalog-projections.i18n.yaml @@ -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-09-08-web-subagent-catalog-projections.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/simplification/2026-09-08-web-subagent-catalog-projections.md -2026-09-08-web-subagent-catalog-projections.md: 766d33e581bcac53844b0836f23cda615858fc27 -2026-09-08-web-subagent-catalog-projections.zh.md: ef14db2530ed10a7aa34408c5a6fada6f0a28858 +/agent-note-web-subagent-catalogs-consume-shared-projections: + en: 90a80df3b19785a2 + zh: 8e29073af6c61213 +/agent-note-web-subagent-catalogs-consume-shared-projections/problem: + en: 21600a979400fc8a + zh: 59ba11ed5210986e +/agent-note-web-subagent-catalogs-consume-shared-projections/decision: + en: de9d755497c49716 + zh: 872a15b960e01618 +/agent-note-web-subagent-catalogs-consume-shared-projections/alternatives-considered: + en: 2a1d32d867c38abd + zh: 1f473782ade94fa5 +/agent-note-web-subagent-catalogs-consume-shared-projections/consequences: + en: 44d73213900d4e43 + zh: 2beec2c2634320e2 diff --git a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.i18n.yaml index 258af20542..5a3be08ed1 100644 --- a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.i18n.yaml @@ -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-09-09-nontransactional-loader.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/simplification/2026-09-09-nontransactional-loader.md -2026-09-09-nontransactional-loader.md: 98b0b1ce0c1250e651c5280c9b918948b17cd963 -2026-09-09-nontransactional-loader.zh.md: 77ae1ce91aa0d20940f0c63f2a2d42a0f3c07edb +/agent-note-keep-loader-mutations-non-transactional: + en: 199b544883ab8736 + zh: 4b2ad7d22985d52f +/agent-note-keep-loader-mutations-non-transactional/problem: + en: d4ab65a39cf4fd7c + zh: 62144be9b4fd7956 +/agent-note-keep-loader-mutations-non-transactional/decision: + en: 9b661159de63d421 + zh: 15697f468a90edb9 +/agent-note-keep-loader-mutations-non-transactional/alternatives-considered: + en: 72b871064c7ae315 + zh: a09e5168f8124c4c +/agent-note-keep-loader-mutations-non-transactional/consequences: + en: 2b1eece19252ad80 + zh: 8c9f5faf201521e0 diff --git a/.agents/notes/implemented/simplification/2026-09-10-derived-workspace-recency.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-10-derived-workspace-recency.i18n.yaml index 6895faecfb..282d674791 100644 --- a/.agents/notes/implemented/simplification/2026-09-10-derived-workspace-recency.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-10-derived-workspace-recency.i18n.yaml @@ -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-09-10-derived-workspace-recency.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/simplification/2026-09-10-derived-workspace-recency.md -2026-09-10-derived-workspace-recency.md: b967e332f234d6d120bb82c444e4b05818b85103 -2026-09-10-derived-workspace-recency.zh.md: 87c2bb9f2648baa613ded32cda5b8673a77c5f56 +/agent-note-derive-workspace-recency-independently-of-manual-order: + en: 96d0de6bdc9dcac1 + zh: a50ab8a60f58a24d +/agent-note-derive-workspace-recency-independently-of-manual-order/problem: + en: 796dc4d186169b89 + zh: 058b6a8438e46238 +/agent-note-derive-workspace-recency-independently-of-manual-order/decision: + en: c598d4991271fbf4 + zh: 6454e56191922501 +/agent-note-derive-workspace-recency-independently-of-manual-order/alternatives-considered: + en: 0e74f1c4f176107a + zh: 66a66eaa811c8b11 +/agent-note-derive-workspace-recency-independently-of-manual-order/consequences: + en: f4658d8f0f3ff8d3 + zh: 68c3c8c87b9c4e31 +/agent-note-derive-workspace-recency-independently-of-manual-order/testing: + en: 82b15f31cd5b5315 + zh: 5f14bfe0d0e8ef0c diff --git a/.agents/notes/implemented/simplification/2026-09-11-remove-e2b-providers.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-11-remove-e2b-providers.i18n.yaml index 5d922e128e..fd8eb2f048 100644 --- a/.agents/notes/implemented/simplification/2026-09-11-remove-e2b-providers.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-11-remove-e2b-providers.i18n.yaml @@ -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-09-11-remove-e2b-providers.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/simplification/2026-09-11-remove-e2b-providers.md -2026-09-11-remove-e2b-providers.md: 6ff8f51e94875b9496da2c77b1e160357a15add9 -2026-09-11-remove-e2b-providers.zh.md: ebc592fb564d1ed1a0e981dc9b1bd3806de54414 +/agent-note-remove-the-e2b-execution-providers: + en: 0f876c637fad20a9 + zh: a7616ada505f0bc1 +/agent-note-remove-the-e2b-execution-providers/problem: + en: 92edfc6f0da7a874 + zh: 21487929a5631087 +/agent-note-remove-the-e2b-execution-providers/decision: + en: 924d9953c601a131 + zh: 6bb14feef8f4238a +/agent-note-remove-the-e2b-execution-providers/alternatives-considered: + en: dc8a267887d4a65c + zh: 806f4a6c844b6284 +/agent-note-remove-the-e2b-execution-providers/consequences: + en: ec119616577fb094 + zh: 4dafe3fd08e11b79 +/agent-note-remove-the-e2b-execution-providers/reintroduction-conditions: + en: ddc5f44430a6b6d5 + zh: 372f28000c98cbd6 +/agent-note-remove-the-e2b-execution-providers/verification: + en: d4f3b559dd32d80a + zh: c4ba5b64178faf81 diff --git a/.agents/notes/implemented/simplification/2026-09-12-ralph-off-in-shipped-defaults.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-12-ralph-off-in-shipped-defaults.i18n.yaml index 9d38b3b53b..2f8e4c8416 100644 --- a/.agents/notes/implemented/simplification/2026-09-12-ralph-off-in-shipped-defaults.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-12-ralph-off-in-shipped-defaults.i18n.yaml @@ -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-09-12-ralph-off-in-shipped-defaults.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/simplification/2026-09-12-ralph-off-in-shipped-defaults.md -2026-09-12-ralph-off-in-shipped-defaults.md: fbd7ea72e02302f45029d2b7677d9a4d15ee2e63 -2026-09-12-ralph-off-in-shipped-defaults.zh.md: 377f8656236b55dc8de79a78abe742b595e3617c +/agent-note-ship-ralph-off-in-the-default-compositions: + en: 59fe1293d618be67 + zh: 0da7f1b4447f10f1 +/agent-note-ship-ralph-off-in-the-default-compositions/problem: + en: c8c152617cca4d5d + zh: 1846b119989b9e5b +/agent-note-ship-ralph-off-in-the-default-compositions/decision: + en: 7d95a71842e74d38 + zh: fc0d360ff3acc8b5 +/agent-note-ship-ralph-off-in-the-default-compositions/alternatives-considered: + en: 4e6ed0566a2de3a8 + zh: c1e7ba6dd4047fa0 +/agent-note-ship-ralph-off-in-the-default-compositions/consequences: + en: 427242f0a8df0c66 + zh: ca3dd1bd4cd54605 +/agent-note-ship-ralph-off-in-the-default-compositions/verification: + en: 2511c9dd0da7ab60 + zh: 6d4e801f33f3d81b diff --git a/.agents/notes/implemented/simplification/2026-09-15-host-only-remote-input-validation.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-15-host-only-remote-input-validation.i18n.yaml index 75a1eea7ed..5029c4401d 100644 --- a/.agents/notes/implemented/simplification/2026-09-15-host-only-remote-input-validation.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-15-host-only-remote-input-validation.i18n.yaml @@ -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-09-15-host-only-remote-input-validation.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/simplification/2026-09-15-host-only-remote-input-validation.md -2026-09-15-host-only-remote-input-validation.md: 5c256fb5f5b78b646c645a44b77718fa40a62399 -2026-09-15-host-only-remote-input-validation.zh.md: 92a3f2415c6206a0513d8338bbb8d0844bf5d43d +/agent-note-validate-remote-inputs-only-on-the-host: + en: 4434bfb455727454 + zh: 776fc3b42ce339e6 +/agent-note-validate-remote-inputs-only-on-the-host/problem: + en: 6cddd9c31c5bf1e5 + zh: f2730b6448f7fc26 +/agent-note-validate-remote-inputs-only-on-the-host/decision: + en: 6e3ef9540b02336b + zh: e8abe4ea84d95b95 +/agent-note-validate-remote-inputs-only-on-the-host/alternatives-considered: + en: 1c9ed80b25403e03 + zh: edbc8301e50cf3a1 +/agent-note-validate-remote-inputs-only-on-the-host/consequences: + en: caf3ffc95133ac40 + zh: f29864e4b636d6f7 diff --git a/.agents/notes/implemented/simplification/2026-09-15-model-agent-availability-and-team-targets.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-15-model-agent-availability-and-team-targets.i18n.yaml index 165022b7dc..a259fd41c0 100644 --- a/.agents/notes/implemented/simplification/2026-09-15-model-agent-availability-and-team-targets.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-15-model-agent-availability-and-team-targets.i18n.yaml @@ -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-09-15-model-agent-availability-and-team-targets.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/simplification/2026-09-15-model-agent-availability-and-team-targets.md -2026-09-15-model-agent-availability-and-team-targets.md: e1f7f95cfa333be6d05677b4b19775c744f2817c -2026-09-15-model-agent-availability-and-team-targets.zh.md: 0447d7d4059eb75d1fb9169389cd83a54292aadf +/agent-note-model-agent-availability-and-team-targets: + en: 7c8722f7b156cd8c + zh: aad147cf37021d82 +/agent-note-model-agent-availability-and-team-targets/problem: + en: 66cc6cea878418a6 + zh: 5df1e5508e10fc02 +/agent-note-model-agent-availability-and-team-targets/decision: + en: 044f44c456540021 + zh: 975794704c37186f +/agent-note-model-agent-availability-and-team-targets/alternatives-considered: + en: a19b8766bcff7e49 + zh: 0851603e9c8315c6 +/agent-note-model-agent-availability-and-team-targets/consequences: + en: 9b622b43322a407e + zh: ffe2e0199ba85b5e diff --git a/.agents/notes/implemented/simplification/2026-09-16-subagent-catalog-membership-only.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-16-subagent-catalog-membership-only.i18n.yaml index a6c46b0bbd..3d56b5605f 100644 --- a/.agents/notes/implemented/simplification/2026-09-16-subagent-catalog-membership-only.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-16-subagent-catalog-membership-only.i18n.yaml @@ -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-09-16-subagent-catalog-membership-only.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/simplification/2026-09-16-subagent-catalog-membership-only.md -2026-09-16-subagent-catalog-membership-only.md: d1d0956380ef2b2ffd610e5a3d07c7988991e42e -2026-09-16-subagent-catalog-membership-only.zh.md: 4225a331a0b3c483349760cd805416a94c4b915a +/agent-note-keep-model-configuration-outside-subagent-catalogs: + en: 58a38a2045e8bd43 + zh: 1a1b02b0a93ebc9e +/agent-note-keep-model-configuration-outside-subagent-catalogs/problem: + en: d817b413b7e38939 + zh: a4a3a12df1407a34 +/agent-note-keep-model-configuration-outside-subagent-catalogs/decision: + en: e46b59047e7cbe7d + zh: 2249547faa8e6a72 +/agent-note-keep-model-configuration-outside-subagent-catalogs/alternatives-considered: + en: 415a276e8011a2ab + zh: d86739d9fbe72fb9 +/agent-note-keep-model-configuration-outside-subagent-catalogs/consequences: + en: 6849156944864ab6 + zh: b74ba42a7d5711d9 diff --git a/.agents/notes/implemented/simplification/2026-09-19-deepseek-messages-only.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-19-deepseek-messages-only.i18n.yaml index 07287b00f8..b97e9bb8dd 100644 --- a/.agents/notes/implemented/simplification/2026-09-19-deepseek-messages-only.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-19-deepseek-messages-only.i18n.yaml @@ -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-09-19-deepseek-messages-only.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/simplification/2026-09-19-deepseek-messages-only.md -2026-09-19-deepseek-messages-only.md: c10ecae950bb12f4556021de21c9716ad2906227 -2026-09-19-deepseek-messages-only.zh.md: 3cfadac6ebc0b4bb1587a8b72e9b169d2ade2ee9 +/agent-note-one-messages-transport-for-the-official-deepseek-route: + en: 7f7651d2e098b62d + zh: 0b12845f48f7ae93 +/agent-note-one-messages-transport-for-the-official-deepseek-route/problem: + en: 050718df19ce3089 + zh: 676838e85ba91e25 +/agent-note-one-messages-transport-for-the-official-deepseek-route/decision: + en: 33738d00a2d9564b + zh: 00101971b1a18d64 +/agent-note-one-messages-transport-for-the-official-deepseek-route/alternatives-considered: + en: f92695788ada65aa + zh: b885b30ba9f846f8 +/agent-note-one-messages-transport-for-the-official-deepseek-route/consequences: + en: 23f7d09fb7cf709c + zh: 1db0bf29cdc38871 diff --git a/.agents/notes/implemented/simplification/2026-09-19-remove-desktop-profile-core-cleanup.i18n.yaml b/.agents/notes/implemented/simplification/2026-09-19-remove-desktop-profile-core-cleanup.i18n.yaml index 7dd1a29921..12e19d3efa 100644 --- a/.agents/notes/implemented/simplification/2026-09-19-remove-desktop-profile-core-cleanup.i18n.yaml +++ b/.agents/notes/implemented/simplification/2026-09-19-remove-desktop-profile-core-cleanup.i18n.yaml @@ -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-09-19-remove-desktop-profile-core-cleanup.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/simplification/2026-09-19-remove-desktop-profile-core-cleanup.md -2026-09-19-remove-desktop-profile-core-cleanup.md: a42100e8dc247611e29ddd2b8075b3b98e388177 -2026-09-19-remove-desktop-profile-core-cleanup.zh.md: 9a6be335a427e3f3083362ffd9e3aaa2f236635d +/agent-note-remove-the-desktop-production-profile-core-package-cleanup: + en: c0f7b1fb34a21423 + zh: 2ed4b90f28d21faa +/agent-note-remove-the-desktop-production-profile-core-package-cleanup/problem: + en: 7176d7d629dd9e9f + zh: f0e02f220e3ae72b +/agent-note-remove-the-desktop-production-profile-core-package-cleanup/decision: + en: 411b72fcdcb37d61 + zh: 7fac6dfd6d0ab0e4 +/agent-note-remove-the-desktop-production-profile-core-package-cleanup/alternatives-considered: + en: 92f74de20afec309 + zh: 6ace8389378cc343 +/agent-note-remove-the-desktop-production-profile-core-package-cleanup/verification: + en: dfb7a6977452f472 + zh: 424f2003f8372fe3 +/agent-note-remove-the-desktop-production-profile-core-package-cleanup/consequences: + en: 1012a408f055e2f3 + zh: 48329f673f2e440f diff --git a/.agents/notes/implemented/testing/2026-06-19-acp-snapshot-tests.i18n.yaml b/.agents/notes/implemented/testing/2026-06-19-acp-snapshot-tests.i18n.yaml index 42cefa39a0..f2eedbf389 100644 --- a/.agents/notes/implemented/testing/2026-06-19-acp-snapshot-tests.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-06-19-acp-snapshot-tests.i18n.yaml @@ -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-06-19-acp-snapshot-tests.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/testing/2026-06-19-acp-snapshot-tests.md -2026-06-19-acp-snapshot-tests.md: 3a21d09609d45b574d7f19c3704a44dde5a3d17c -2026-06-19-acp-snapshot-tests.zh.md: e9f3682289a05e4e54db2de3adcd3bee7042ef1b +/agent-note-acp-snapshot-tests-record-once-replay-deterministic: + en: 2f19b76966d5cf54 + zh: cbaed521d650e079 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/problem: + en: d1738d268738633e + zh: ce62a5b0ff65ce8c +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision: + en: a9e85418ad5d2bbd + zh: 8e86b30a2a5bd049 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/the-fixture-projects-the-persisted-session-jsonl: + en: bdd1333366edfc30 + zh: ed8a0fbab516a62b +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/replay-derives-the-model-script-from-the-log: + en: cb71313f2b14f855 + zh: f85809cfd19ce6af +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/the-in-memory-replay-entry-honors-the-full-llm-contract: + en: 5d750b82fd88597c + zh: 22dc6dec0d638449 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/positional-replay-one-in-flight-stream: + en: 9ecd0c3efce1b2a1 + zh: 51612956e0c4fc85 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/recording-harvests-the-log-keyless-replay-needs-a-providerless-config: + en: 17239981275e59c8 + zh: 8f7fc2d9e6abd3ee +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/two-outputs-normalize-then-compare: + en: ee891a839a0c05e9 + zh: 677259307e4357fa +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/isolation-normalization-now-sandbox-later: + en: ce58ef2e3180d0d3 + zh: 1e9354614e4d7219 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/the-replay-plugin-is-its-own-package: + en: 6c3f938c57f4458b + zh: f64bb14ffb80ab90 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/decision/two-subcommands-replay-in-the-default-gate: + en: a50cb4cd2be177f7 + zh: a29f45aafb83fa6c +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/alternatives-considered: + en: c4e83a568e8f483e + zh: eff19f1872565ff6 +/agent-note-acp-snapshot-tests-record-once-replay-deterministic/consequences: + en: ea210a6a43707447 + zh: 8c1e2a474d595b96 diff --git a/.agents/notes/implemented/testing/2026-06-19-real-api-e2e-ci.i18n.yaml b/.agents/notes/implemented/testing/2026-06-19-real-api-e2e-ci.i18n.yaml index b55464949e..5958148df6 100644 --- a/.agents/notes/implemented/testing/2026-06-19-real-api-e2e-ci.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-06-19-real-api-e2e-ci.i18n.yaml @@ -1,6 +1,52 @@ -# 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-19-real-api-e2e-ci.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/testing/2026-06-19-real-api-e2e-ci.md -2026-06-19-real-api-e2e-ci.md: bdb20b3d5413077a4ddf1c1d9293b3b808cd6c8c -2026-06-19-real-api-e2e-ci.zh.md: b95f7df62e0a57d4c58fc5c12a83905dd848c55e +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api: + en: 705c6fd43858bdac + zh: 2bbc6491368fb4c0 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/problem: + en: 80cf8dc578552364 + zh: a54441ea02664483 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision: + en: 3fbdb8769322e05f + zh: f46f68f8eba74d67 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/a-separate-workflow-not-a-job-in-ci-yml: + en: e4745c43611b96bb + zh: 8fb980401b0c5e9b +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/cost-is-not-the-constraint-reliability-is: + en: 88b945361b1d4804 + zh: 0887a653945f4dda +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/triggers-trusted-events-only: + en: 42a2fb15f00aec3a + zh: c4775447c863d209 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/the-untrusted-pr-gate: + en: e94c28db20896508 + zh: c8e77c54dceed035 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/preflight-fail-loud-never-false-green: + en: 07904c7ad53be5ad + zh: 67d84d4dc6f082a9 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/secret-mapping-and-hygiene: + en: fbbcc9a926dfc943 + zh: 506acdb4e034574b +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/decision/scope-runtime-shape: + en: c59c441547da2a4d + zh: b08d50e7cfd40cd5 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/security: + en: 1fd3925ab26c11d4 + zh: 0d7103fd0b1afa89 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/security/who-can-reach-the-secret-in-a-private-repository: + en: a748b4e79bab26e1 + zh: 1c607bc65274cdef +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/security/the-residual-exposure-the-pull-request-trigger-adds: + en: 04463ffd6f67a2bd + zh: 4126fb30873782ed +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/security/what-changes-when-the-repo-goes-public: + en: 02aa2f4100f6aac5 + zh: f9868c6a12e19ecd +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/alternatives-considered: + en: 7e7aa3a387a174bc + zh: 2431a0df2fb478a8 +/agent-note-real-api-e2e-in-ci-against-the-external-deepseek-api/consequences: + en: a999af1cbd7776da + zh: 5f1fab52fd4eb304 diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml index ac15111eb8..432ef80b37 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.i18n.yaml @@ -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-24-web-gui-browser-e2e-lane.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/testing/2026-07-24-web-gui-browser-e2e-lane.md -2026-07-24-web-gui-browser-e2e-lane.md: eb79591e7b94fccb8eb92aec4024738825d214fc -2026-07-24-web-gui-browser-e2e-lane.zh.md: f715f4ca93b202f72e632e5ddae0d13559a927a7 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui: + en: acbf72f6a3c5bea9 + zh: 4d655027ac2b78db +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/problem: + en: 547a3f60ac28095e + zh: 85a9d996257f0273 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision: + en: c2f86db5f0b6b5a4 + zh: dd07b529cc65e7d2 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/scaffold-apps-web-tests-scaffold-ts: + en: 3d09cd693966a674 + zh: 4cda02850961f8d0 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/determinism-rules: + en: 41790d8d79b7ada3 + zh: 1fc7e85a1accd806 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/expected-outputs: + en: ca1ae9ccbeab8c01 + zh: 662cd5d98ee20ccc +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/modes-and-fixtures: + en: 54f10befeaaade72 + zh: 3a7726c1f4be51cc +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/coverage-contract: + en: c529437d4fbaeeb3 + zh: fe13551e56cba7df +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/decision/ci-stance: + en: 23b625d86ba7f5e2 + zh: 88f33b233fca0a82 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/prior-art: + en: 7472e212043721dd + zh: 61dd9f5a8e12730b +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/alternatives-considered: + en: 5bd57b3dbacd8380 + zh: a154f27d93930f77 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/testing: + en: f4459a24f56c9cfe + zh: a15bdc45785ed7e8 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/deferred: + en: aef84d3933bb72a1 + zh: 1cc5e2f1c9bcccf9 +/agent-note-keyless-browser-e2e-lane-for-the-web-gui/consequences: + en: 30928e1b547ddc34 + zh: 068bd12b2ac119dc diff --git a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml index aeb64a1a11..8a40db5638 100644 --- a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.i18n.yaml @@ -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-web-browser-snapshot-ci-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/testing/2026-07-30-web-browser-snapshot-ci-gate.md -2026-07-30-web-browser-snapshot-ci-gate.md: 352072bca6e1a9e1d5b72973d2c3c9e96bc58ad9 -2026-07-30-web-browser-snapshot-ci-gate.zh.md: cd04f33a5db6ddb3c88a235fb34ea31da0e5a869 +/agent-note-required-ci-gate-for-web-browser-expected-outputs: + en: 246ce605a87c0592 + zh: 37b3fb230abcb280 +/agent-note-required-ci-gate-for-web-browser-expected-outputs/problem: + en: e04a5ecbd6d6a39e + zh: 049ce77a1a679daa +/agent-note-required-ci-gate-for-web-browser-expected-outputs/decision: + en: 915efba11d7ece34 + zh: 540495b04ef9a305 +/agent-note-required-ci-gate-for-web-browser-expected-outputs/alternatives-considered: + en: 145e763735dd33b1 + zh: 4ea34838629cd3bf +/agent-note-required-ci-gate-for-web-browser-expected-outputs/consequences: + en: d4c6e69ad04c5748 + zh: 5f3034df8f13b106 diff --git a/.agents/notes/implemented/testing/2026-08-03-opt-in-reasoning-chunk-browser-stress.i18n.yaml b/.agents/notes/implemented/testing/2026-08-03-opt-in-reasoning-chunk-browser-stress.i18n.yaml index e8edd6c33e..42da714161 100644 --- a/.agents/notes/implemented/testing/2026-08-03-opt-in-reasoning-chunk-browser-stress.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-08-03-opt-in-reasoning-chunk-browser-stress.i18n.yaml @@ -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-03-opt-in-reasoning-chunk-browser-stress.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/testing/2026-08-03-opt-in-reasoning-chunk-browser-stress.md -2026-08-03-opt-in-reasoning-chunk-browser-stress.md: 5b679ce2682743531bd3ff48621cbde462a335aa -2026-08-03-opt-in-reasoning-chunk-browser-stress.zh.md: 3d730a4505351be968c71092c65a9b9c6b69818c +/agent-note-frame-coalesced-reasoning-chunk-publication-and-browser-stress-validation: + en: c63de146daf09530 + zh: 5e117bc92e2ac783 +/agent-note-frame-coalesced-reasoning-chunk-publication-and-browser-stress-validation/problem: + en: 73673725b44538c9 + zh: 32027f7a457ee3ae +/agent-note-frame-coalesced-reasoning-chunk-publication-and-browser-stress-validation/decision: + en: 76879cc8efbe7c80 + zh: 539556341dcb04e5 +/agent-note-frame-coalesced-reasoning-chunk-publication-and-browser-stress-validation/alternatives-considered: + en: 8d0a7be0a8660a9c + zh: c1e94daae31893c5 +/agent-note-frame-coalesced-reasoning-chunk-publication-and-browser-stress-validation/consequences: + en: 7b67ec0da7f08635 + zh: 2b808c760e8df494 diff --git a/.agents/notes/implemented/testing/2026-08-23-installed-python-wheel-black-box-ci.i18n.yaml b/.agents/notes/implemented/testing/2026-08-23-installed-python-wheel-black-box-ci.i18n.yaml index ad99495034..be0529a4d9 100644 --- a/.agents/notes/implemented/testing/2026-08-23-installed-python-wheel-black-box-ci.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-08-23-installed-python-wheel-black-box-ci.i18n.yaml @@ -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-08-23-installed-python-wheel-black-box-ci.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/testing/2026-08-23-installed-python-wheel-black-box-ci.md -2026-08-23-installed-python-wheel-black-box-ci.md: a23f7ea1b0157ba4ec050069b9fa9a4ea705bfa7 -2026-08-23-installed-python-wheel-black-box-ci.zh.md: 1751430445c6f42cf37fdf9b6164c19b04f01536 +/agent-note-installed-wheel-python-runtime-pull-request-validation: + en: e7a926cb3fc87ca2 + zh: 9d4df26986ee2c25 +/agent-note-installed-wheel-python-runtime-pull-request-validation/problem: + en: a8679e0c46ab5294 + zh: 1c3b4edd7263d8a9 +/agent-note-installed-wheel-python-runtime-pull-request-validation/decision: + en: a15c7c13f167e5ac + zh: a15c7c13f167e5ac +/agent-note-installed-wheel-python-runtime-pull-request-validation/decision/installed-artifact-boundary: + en: 57b22736a43ce8ef + zh: b80a12ade299258a +/agent-note-installed-wheel-python-runtime-pull-request-validation/decision/keyless-behavior: + en: c1b78f6c3cedd4d2 + zh: 03e267c73af6036b +/agent-note-installed-wheel-python-runtime-pull-request-validation/decision/real-deepseek-api: + en: 0f98f5b5f78b5603 + zh: 95ee8bafa66d6b1b +/agent-note-installed-wheel-python-runtime-pull-request-validation/decision/required-targets: + en: 4eafb728b9b3d596 + zh: e127fdfe44659767 +/agent-note-installed-wheel-python-runtime-pull-request-validation/existing-decisions-and-supersession: + en: 04aa439d4e607324 + zh: f4c1d24b6a418cc4 +/agent-note-installed-wheel-python-runtime-pull-request-validation/alternatives-considered: + en: 360a7e4cd0f6e1ec + zh: 53beb38864ff052d +/agent-note-installed-wheel-python-runtime-pull-request-validation/consequences: + en: 6161aae704abdd20 + zh: 4c81c9f6d1bef7d4 diff --git a/.agents/notes/implemented/testing/2026-08-24-session-log-snapshot-corpus.i18n.yaml b/.agents/notes/implemented/testing/2026-08-24-session-log-snapshot-corpus.i18n.yaml index 9cb458cb68..a82fdb832c 100644 --- a/.agents/notes/implemented/testing/2026-08-24-session-log-snapshot-corpus.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-08-24-session-log-snapshot-corpus.i18n.yaml @@ -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-24-session-log-snapshot-corpus.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/testing/2026-08-24-session-log-snapshot-corpus.md -2026-08-24-session-log-snapshot-corpus.md: a9001c2eabd610e08cfb1177f2b1339f306320af -2026-08-24-session-log-snapshot-corpus.zh.md: d02c798af23a205993e92ed72a0f3a162f8bdded +/agent-note-session-log-snapshot-corpus: + en: 9cb40b5081c110bc + zh: 17c221d99b579119 +/agent-note-session-log-snapshot-corpus/problem: + en: ec6f331737be909e + zh: 5faee4c81cf2314f +/agent-note-session-log-snapshot-corpus/decision: + en: 1611b352461c63c5 + zh: f32a5229bac3264a +/agent-note-session-log-snapshot-corpus/alternatives-considered: + en: 76db318c1c2dad2d + zh: b868b7c9b29c1e00 +/agent-note-session-log-snapshot-corpus/invariants: + en: 04098d11861c90ae + zh: 6af6c376fe1ba8bb +/agent-note-session-log-snapshot-corpus/consequences: + en: 3d5810a9518fcb8d + zh: 075ad9a226b8b312 +/agent-note-session-log-snapshot-corpus/risks: + en: 333b33afa03cf4e1 + zh: 3b8f3bcdf57cfe8e diff --git a/.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.i18n.yaml b/.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.i18n.yaml index 2eb9f0f8ea..fa8f7c9390 100644 --- a/.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.i18n.yaml @@ -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-09-04-session-open-performance-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/testing/2026-09-04-session-open-performance-gate.md -2026-09-04-session-open-performance-gate.md: 1b2b0aabb79aceb0ac515a1d90ba3e2ba042535c -2026-09-04-session-open-performance-gate.zh.md: 9ad56796aac6310977aedfff0f9188e46cbbf3d7 +/agent-note-required-ci-performance-gate-for-opening-large-sessions: + en: 3e87960dd29e5814 + zh: 7abaea0b9397e16d +/agent-note-required-ci-performance-gate-for-opening-large-sessions/problem: + en: 00ba1f66195351e2 + zh: a738b81adceda351 +/agent-note-required-ci-performance-gate-for-opening-large-sessions/decision: + en: 75679c69eeeb1e02 + zh: 49ea45fa46ae3fcb +/agent-note-required-ci-performance-gate-for-opening-large-sessions/calibration-evidence: + en: f1001a139470f6b7 + zh: b7b46f96b84b1271 +/agent-note-required-ci-performance-gate-for-opening-large-sessions/calibration-evidence/indexed-traversal-of-stored-json-arrays: + en: 4ff4df8437e978a8 + zh: 642ac8ab685c7a11 +/agent-note-required-ci-performance-gate-for-opening-large-sessions/alternatives-considered: + en: 5debbc2a0382ed13 + zh: 415d11776f73f871 +/agent-note-required-ci-performance-gate-for-opening-large-sessions/consequences: + en: 845730942e93aa38 + zh: f8d6cd2a8e5e6859 diff --git a/.agents/notes/implemented/testing/2026-09-06-backend-continuation-performance.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-backend-continuation-performance.i18n.yaml index aeaed20365..60da3ac257 100644 --- a/.agents/notes/implemented/testing/2026-09-06-backend-continuation-performance.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-backend-continuation-performance.i18n.yaml @@ -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-09-06-backend-continuation-performance.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/testing/2026-09-06-backend-continuation-performance.md -2026-09-06-backend-continuation-performance.md: a2423a404e23f6a4ccb6a4fb177ec6842b7bf584 -2026-09-06-backend-continuation-performance.zh.md: 942cfd37528d121bf482c48c5d75dd1f2de30887 +/agent-note-performance-baselines-for-tool-heavy-backend-continuation: + en: 542fea07db8861a3 + zh: 3a9d381c2366f5ec +/agent-note-performance-baselines-for-tool-heavy-backend-continuation/problem: + en: c6a89dac7dea293a + zh: b10610932d55996c +/agent-note-performance-baselines-for-tool-heavy-backend-continuation/decision: + en: 3429525a40e02b95 + zh: 92f12beb81003101 +/agent-note-performance-baselines-for-tool-heavy-backend-continuation/calibration-evidence: + en: 4f47ca6859cc2d70 + zh: 5bfe8314fd30d82b +/agent-note-performance-baselines-for-tool-heavy-backend-continuation/alternatives-considered: + en: 3a61dff7c926eb22 + zh: 8f2633b16be78233 +/agent-note-performance-baselines-for-tool-heavy-backend-continuation/consequences: + en: 0ffe42f70b26de41 + zh: 367038e53dc04ff4 diff --git a/.agents/notes/implemented/testing/2026-09-06-client-assembly-test-line.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-client-assembly-test-line.i18n.yaml index 1e0850bf40..f4079749aa 100644 --- a/.agents/notes/implemented/testing/2026-09-06-client-assembly-test-line.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-client-assembly-test-line.i18n.yaml @@ -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-09-06-client-assembly-test-line.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/testing/2026-09-06-client-assembly-test-line.md -2026-09-06-client-assembly-test-line.md: d2515c0689b9ea39bf14e4ce653a26d9a81ebfb8 -2026-09-06-client-assembly-test-line.zh.md: 90b5768db4307c551b895d7101324f329f42c955 +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock: + en: f11c0f43c9f9be09 + zh: 991625645ac91f06 +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/problem: + en: 33c0c3670dae25c3 + zh: 4d91a11eea9bbb8f +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/decision: + en: af415345cccb067e + zh: 8e82f7136f61a80e +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/product-exports-added-for-the-tier: + en: b45dd80dbe278c5f + zh: cdfb145cd8fab276 +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/alternatives-considered: + en: 2898d540f4bb1ee2 + zh: a3e2f1ea4cc8154f +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/consequences: + en: b6a9721dec64d304 + zh: 160edfa839b7d024 +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/deferred: + en: 1f18c8a38967698a + zh: f6809d290748d9cf +/agent-note-whole-client-test-tier-over-an-endpoint-named-remote-mock/testing: + en: 84fd4b8cc4a4abc8 + zh: f5d8fcb31a6d103b diff --git a/.agents/notes/implemented/testing/2026-09-06-frontend-performance-budgets.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-frontend-performance-budgets.i18n.yaml index bc0def0cce..1d0b70851d 100644 --- a/.agents/notes/implemented/testing/2026-09-06-frontend-performance-budgets.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-frontend-performance-budgets.i18n.yaml @@ -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-09-06-frontend-performance-budgets.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/testing/2026-09-06-frontend-performance-budgets.md -2026-09-06-frontend-performance-budgets.md: ea91edf8d39d838ab58204f8516d9d1e9d50109f -2026-09-06-frontend-performance-budgets.zh.md: 84c115ef09f55babf96eb1ef8d2f472a139dd55d +/agent-note-frontend-large-session-performance-budgets: + en: 443578f129feecd8 + zh: fcc3b1bf7dcdb1fb +/agent-note-frontend-large-session-performance-budgets/problem: + en: 9bf1200b5f980008 + zh: d2dc07922817c581 +/agent-note-frontend-large-session-performance-budgets/decision: + en: 0ff66ffe55696498 + zh: c05736fde021bcc4 +/agent-note-frontend-large-session-performance-budgets/calibration: + en: f3be2a0d346e80cc + zh: c49cc56e7714f68c +/agent-note-frontend-large-session-performance-budgets/calibration/actual-ci-runs: + en: d4d6aebafcdb8c12 + zh: 112d3ca1a4ea8ae1 +/agent-note-frontend-large-session-performance-budgets/calibration/standard-hosted-expectations-and-input-scheduling: + en: 8cb6299dbb42a9fe + zh: 51ef49d4fcaeb92f +/agent-note-frontend-large-session-performance-budgets/alternatives-considered: + en: 1472bd425ef0daec + zh: a89811758d70331e +/agent-note-frontend-large-session-performance-budgets/consequences: + en: 3f4f510612875d54 + zh: 3a4af464f159bfe8 diff --git a/.agents/notes/implemented/testing/2026-09-06-pr-ci-runner-temporary-storage.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-pr-ci-runner-temporary-storage.i18n.yaml index dccefc4520..aa5bb20d1f 100644 --- a/.agents/notes/implemented/testing/2026-09-06-pr-ci-runner-temporary-storage.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-pr-ci-runner-temporary-storage.i18n.yaml @@ -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-09-06-pr-ci-runner-temporary-storage.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/testing/2026-09-06-pr-ci-runner-temporary-storage.md -2026-09-06-pr-ci-runner-temporary-storage.md: 59d609c08e1b228ae9a9705140f2832305dfead5 -2026-09-06-pr-ci-runner-temporary-storage.zh.md: f6765212af2424f2080063946f9104125993b9d5 +/agent-note-runner-owned-temporary-storage-for-pr-ci: + en: 2f9ebea4c52687b3 + zh: 5924c9657eea7ff7 +/agent-note-runner-owned-temporary-storage-for-pr-ci/problem: + en: 5787327a360024d9 + zh: ee9b8cb63d79e551 +/agent-note-runner-owned-temporary-storage-for-pr-ci/decision: + en: 44990c35e1cb69cb + zh: 38a6bed07b5596e3 +/agent-note-runner-owned-temporary-storage-for-pr-ci/recorded-acp-completion-order: + en: 51f2f962db14ba9c + zh: 5fc8a908431c3865 +/agent-note-runner-owned-temporary-storage-for-pr-ci/workspace-grant-fixture-placement: + en: 1008b2fc61d01b10 + zh: f5314d10980611ef +/agent-note-runner-owned-temporary-storage-for-pr-ci/live-verification-and-browser-fixture-inputs: + en: 0f8e8478a3fb6486 + zh: 5d74c6902ea9831c +/agent-note-runner-owned-temporary-storage-for-pr-ci/alternatives-considered: + en: 8b0f2798f91ff190 + zh: f6e871a723e4d079 +/agent-note-runner-owned-temporary-storage-for-pr-ci/consequences: + en: ff73f9c3daeb33be + zh: 28f4245c275c4109 diff --git a/.agents/notes/implemented/testing/2026-09-06-python-runtime-install-retry.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-python-runtime-install-retry.i18n.yaml index 834bf27d4b..4a7ab9e93d 100644 --- a/.agents/notes/implemented/testing/2026-09-06-python-runtime-install-retry.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-python-runtime-install-retry.i18n.yaml @@ -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-09-06-python-runtime-install-retry.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/testing/2026-09-06-python-runtime-install-retry.md -2026-09-06-python-runtime-install-retry.md: 639fe2814ae1b3beadcd47d3b9eac15408c585cc -2026-09-06-python-runtime-install-retry.zh.md: 7a7943f43fcec536542c5aef0e608e177f64907f +/agent-note-bounded-retry-for-python-runtime-dependency-install: + en: 610eeadbda25f100 + zh: e063790ef0b766c9 +/agent-note-bounded-retry-for-python-runtime-dependency-install/problem: + en: ea99de707130a978 + zh: 0d8d853cf38e903a +/agent-note-bounded-retry-for-python-runtime-dependency-install/decision: + en: 8a91f9e5ade1fbbe + zh: 82851f2d37f6a216 +/agent-note-bounded-retry-for-python-runtime-dependency-install/alternatives-considered: + en: c9bee05dfbb068aa + zh: 7f0712a941209116 +/agent-note-bounded-retry-for-python-runtime-dependency-install/consequences: + en: 4d036332d39c88a6 + zh: aac5dd7e7f09df2a diff --git a/.agents/notes/implemented/testing/2026-09-06-standard-hosted-benchmark-runner.i18n.yaml b/.agents/notes/implemented/testing/2026-09-06-standard-hosted-benchmark-runner.i18n.yaml index feddeffb9f..50c9f04da5 100644 --- a/.agents/notes/implemented/testing/2026-09-06-standard-hosted-benchmark-runner.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-06-standard-hosted-benchmark-runner.i18n.yaml @@ -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-09-06-standard-hosted-benchmark-runner.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/testing/2026-09-06-standard-hosted-benchmark-runner.md -2026-09-06-standard-hosted-benchmark-runner.md: af95af6ee8cef1128a5475863ea7a1aaf66f30b9 -2026-09-06-standard-hosted-benchmark-runner.zh.md: 47095a5b2e91318c2f3ec5ac3cc9f6df3bce04d6 +/agent-note-standard-hosted-runner-for-required-benchmarks: + en: 07d81b0ddc7349cd + zh: 0494136a627f09a4 +/agent-note-standard-hosted-runner-for-required-benchmarks/problem: + en: e930cd992a15b811 + zh: fe791e9581ff6a35 +/agent-note-standard-hosted-runner-for-required-benchmarks/decision: + en: 07bc990d5c68d617 + zh: 5bf08df36181b2a6 +/agent-note-standard-hosted-runner-for-required-benchmarks/alternatives-considered: + en: 82f0eab2a8e66383 + zh: 6677a34a53b8915f +/agent-note-standard-hosted-runner-for-required-benchmarks/consequences: + en: 173caff985f5ff21 + zh: 83f3ef068ec62439 diff --git a/.agents/notes/implemented/testing/2026-09-07-publint-test-subprocess-lifetime.i18n.yaml b/.agents/notes/implemented/testing/2026-09-07-publint-test-subprocess-lifetime.i18n.yaml index 75ddc0220c..336d27a518 100644 --- a/.agents/notes/implemented/testing/2026-09-07-publint-test-subprocess-lifetime.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-07-publint-test-subprocess-lifetime.i18n.yaml @@ -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-09-07-publint-test-subprocess-lifetime.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/testing/2026-09-07-publint-test-subprocess-lifetime.md -2026-09-07-publint-test-subprocess-lifetime.md: f8b0e0455f44e6cfc7dd1ce120b0edc07e88180a -2026-09-07-publint-test-subprocess-lifetime.zh.md: dd0533752b13f337e5f2453f01ca87f17d6ec3b2 +/agent-note-publint-test-subprocesses-inherit-the-execution-lane-deadline: + en: 762197e4e97b62a1 + zh: a2ac103348f6e692 +/agent-note-publint-test-subprocesses-inherit-the-execution-lane-deadline/problem: + en: a5fb106b97023934 + zh: 537bd40564850192 +/agent-note-publint-test-subprocesses-inherit-the-execution-lane-deadline/decision: + en: 62cc75fa54d44d80 + zh: 72d296ea1d5448bc +/agent-note-publint-test-subprocesses-inherit-the-execution-lane-deadline/alternatives-considered: + en: 5cc52a67c84dd039 + zh: 9fdc5ac07da9a056 +/agent-note-publint-test-subprocesses-inherit-the-execution-lane-deadline/consequences: + en: a2d7dabc61d37634 + zh: 753addcc45383715 diff --git a/.agents/notes/implemented/testing/2026-09-07-pwsh-ci-observable-completion.i18n.yaml b/.agents/notes/implemented/testing/2026-09-07-pwsh-ci-observable-completion.i18n.yaml index e52920e249..d9e1bb9952 100644 --- a/.agents/notes/implemented/testing/2026-09-07-pwsh-ci-observable-completion.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-07-pwsh-ci-observable-completion.i18n.yaml @@ -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-09-07-pwsh-ci-observable-completion.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/testing/2026-09-07-pwsh-ci-observable-completion.md -2026-09-07-pwsh-ci-observable-completion.md: 2cd42296c14602f1f4aad68b8988f84dabbd5479 -2026-09-07-pwsh-ci-observable-completion.zh.md: 9ea83963be7faa274e53b1b9260222f71553e0f4 +/agent-note-powershell-ci-completion-and-profile-expectations: + en: 30366de41f8f71f6 + zh: d343887adae38ef4 +/agent-note-powershell-ci-completion-and-profile-expectations/problem: + en: 5806986dfd58191c + zh: ac082211e112c2d4 +/agent-note-powershell-ci-completion-and-profile-expectations/decision: + en: f23d0691bc168ad7 + zh: 2873eb08c925f2f6 +/agent-note-powershell-ci-completion-and-profile-expectations/alternatives-considered: + en: 6fde4f1b34fdd5e7 + zh: 6bc1ef73ce0e2645 +/agent-note-powershell-ci-completion-and-profile-expectations/consequences: + en: d486f9db082655db + zh: 01c46ff6b700cb15 diff --git a/.agents/notes/implemented/testing/2026-09-07-subagent-teardown-test-budgets.i18n.yaml b/.agents/notes/implemented/testing/2026-09-07-subagent-teardown-test-budgets.i18n.yaml index 9a305f4c7f..10306946dc 100644 --- a/.agents/notes/implemented/testing/2026-09-07-subagent-teardown-test-budgets.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-07-subagent-teardown-test-budgets.i18n.yaml @@ -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-09-07-subagent-teardown-test-budgets.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/testing/2026-09-07-subagent-teardown-test-budgets.md -2026-09-07-subagent-teardown-test-budgets.md: 372c8b311054b11d86b3057415dd98584d94be9f -2026-09-07-subagent-teardown-test-budgets.zh.md: 8539664280c5fe720f27459fdb2d14c47ad3e780 +/agent-note-subagent-teardown-tests-inherit-their-execution-lane-budgets: + en: b704be92bc9b9b3c + zh: 4154bd2d89177e5d +/agent-note-subagent-teardown-tests-inherit-their-execution-lane-budgets/problem: + en: 5853599207f6b3bb + zh: d58b5e8e19d93a4f +/agent-note-subagent-teardown-tests-inherit-their-execution-lane-budgets/decision: + en: 721ea003ebaef8c7 + zh: e17be423bc4c7568 +/agent-note-subagent-teardown-tests-inherit-their-execution-lane-budgets/alternatives-considered: + en: 3ad30b2574818a61 + zh: d323adddd5065ae4 +/agent-note-subagent-teardown-tests-inherit-their-execution-lane-budgets/consequences: + en: 20d060fe30ada016 + zh: c73937bffbb251c0 diff --git a/.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.i18n.yaml b/.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.i18n.yaml index 297fed6b49..dc92e99d72 100644 --- a/.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.i18n.yaml @@ -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-09-08-ci-completion-observations.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/testing/2026-09-08-ci-completion-observations.md -2026-09-08-ci-completion-observations.md: 30145f26fccd1ca7d174d76df738f100827cc32a -2026-09-08-ci-completion-observations.zh.md: a819d6ad45d80b7fce2f67025629d8d6cf9f8344 +/agent-note-ci-fixture-completion-and-isolation: + en: f5c180b0aad40b22 + zh: 89af7791bfbed707 +/agent-note-ci-fixture-completion-and-isolation/problem: + en: b7350054dcefd411 + zh: 61fd5b508f804ca1 +/agent-note-ci-fixture-completion-and-isolation/decision: + en: 8b245a4f4974e855 + zh: 93963695545d13ed +/agent-note-ci-fixture-completion-and-isolation/decision/built-client-import-classification: + en: 443f119bc5d5b49f + zh: b1c53efd3a216d63 +/agent-note-ci-fixture-completion-and-isolation/alternatives-considered: + en: 569976702b273da6 + zh: 3a5e5faba0074398 +/agent-note-ci-fixture-completion-and-isolation/consequences: + en: 168df70afdad308d + zh: 0e77a4741fa8024b diff --git a/.agents/notes/implemented/testing/2026-09-08-ci-readiness-and-completion.i18n.yaml b/.agents/notes/implemented/testing/2026-09-08-ci-readiness-and-completion.i18n.yaml index 77ca3fa1c8..bef8854202 100644 --- a/.agents/notes/implemented/testing/2026-09-08-ci-readiness-and-completion.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-08-ci-readiness-and-completion.i18n.yaml @@ -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-09-08-ci-readiness-and-completion.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/testing/2026-09-08-ci-readiness-and-completion.md -2026-09-08-ci-readiness-and-completion.md: 1bf4f701f1b66debd982f1b786116e437e35dea4 -2026-09-08-ci-readiness-and-completion.zh.md: ae6d4e0195c66435fba22efae2376f6979ea9f6d +/agent-note-ci-assertions-wait-for-owned-completion: + en: 784e4056f020fab9 + zh: 941e7091a7621c9e +/agent-note-ci-assertions-wait-for-owned-completion/problem: + en: a7fe3958c0c18911 + zh: cce83727500187bc +/agent-note-ci-assertions-wait-for-owned-completion/decision: + en: 2b0ff4ab1d18bd1c + zh: 39556bf95aec3c56 +/agent-note-ci-assertions-wait-for-owned-completion/alternatives-considered: + en: 07ee7017cc6f6e74 + zh: b42f742932edd3f8 +/agent-note-ci-assertions-wait-for-owned-completion/consequences: + en: 70258f58a1e781bb + zh: fabc014ced9872f5 diff --git a/.agents/notes/implemented/testing/2026-09-09-user-patch-hmr-test-delivery.i18n.yaml b/.agents/notes/implemented/testing/2026-09-09-user-patch-hmr-test-delivery.i18n.yaml index 13264740b3..be1357732e 100644 --- a/.agents/notes/implemented/testing/2026-09-09-user-patch-hmr-test-delivery.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-09-user-patch-hmr-test-delivery.i18n.yaml @@ -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-09-09-user-patch-hmr-test-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/testing/2026-09-09-user-patch-hmr-test-delivery.md -2026-09-09-user-patch-hmr-test-delivery.md: 32ee3073dcb67e1f6bed70c515dd9b6990b97d03 -2026-09-09-user-patch-hmr-test-delivery.zh.md: bcd6f261c0ec4428f4f28138e7e62b80141dd981 +/agent-note-user-patch-tests-control-filesystem-event-delivery: + en: c2c70a16f6deea8b + zh: 3b11c81b87910ce7 +/agent-note-user-patch-tests-control-filesystem-event-delivery/problem: + en: 3f8862080b8c3c89 + zh: 0e83c485f02c10f1 +/agent-note-user-patch-tests-control-filesystem-event-delivery/decision: + en: a49b4a6e76725b7e + zh: 9813f60c40a19f83 +/agent-note-user-patch-tests-control-filesystem-event-delivery/alternatives-considered: + en: 5d559ee291e2e15e + zh: 828e7def587d71e8 +/agent-note-user-patch-tests-control-filesystem-event-delivery/consequences: + en: da9f64f4d269cece + zh: 6bbbcc771c5fbcde diff --git a/.agents/notes/implemented/testing/2026-09-10-desktop-local-updater-qualification.i18n.yaml b/.agents/notes/implemented/testing/2026-09-10-desktop-local-updater-qualification.i18n.yaml index 55faf9d686..f61ba057a5 100644 --- a/.agents/notes/implemented/testing/2026-09-10-desktop-local-updater-qualification.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-10-desktop-local-updater-qualification.i18n.yaml @@ -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-09-10-desktop-local-updater-qualification.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/testing/2026-09-10-desktop-local-updater-qualification.md -2026-09-10-desktop-local-updater-qualification.md: 10c0a384106cc06aaae50d8782b58114ea86fb79 -2026-09-10-desktop-local-updater-qualification.zh.md: 9d554bc5001fc53f60ba9cd0d08b02e975f8261f +/agent-note-qualify-desktop-update-downloads-with-an-isolated-local-server: + en: 71382ca7e306c188 + zh: ee13377b994ff06a +/agent-note-qualify-desktop-update-downloads-with-an-isolated-local-server/problem: + en: a621d24f1336bf19 + zh: 56dc14cda197b301 +/agent-note-qualify-desktop-update-downloads-with-an-isolated-local-server/decision: + en: b8e5f482693b9213 + zh: 4ac670ae629d3fd1 +/agent-note-qualify-desktop-update-downloads-with-an-isolated-local-server/alternatives-considered: + en: f93809633864e337 + zh: 4bd2141c2a36e1ac +/agent-note-qualify-desktop-update-downloads-with-an-isolated-local-server/consequences: + en: 4ef44c91915206b5 + zh: f4ecf7b2d6df4932 diff --git a/.agents/notes/implemented/testing/2026-09-10-hosted-image-test-assumptions.i18n.yaml b/.agents/notes/implemented/testing/2026-09-10-hosted-image-test-assumptions.i18n.yaml index b745447152..72274416f8 100644 --- a/.agents/notes/implemented/testing/2026-09-10-hosted-image-test-assumptions.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-10-hosted-image-test-assumptions.i18n.yaml @@ -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-09-10-hosted-image-test-assumptions.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/testing/2026-09-10-hosted-image-test-assumptions.md -2026-09-10-hosted-image-test-assumptions.md: e6fe4e35848c48462e7bb9c99bc898b6ebc907c9 -2026-09-10-hosted-image-test-assumptions.zh.md: 4fe8bf2a3764b0f95268e20eb379a69c7e44ced6 +/agent-note-hosted-image-assumptions-in-the-coverage-suite: + en: b9e6c590cb18c637 + zh: 02591776cec956ea +/agent-note-hosted-image-assumptions-in-the-coverage-suite/problem: + en: c1299114bcbbbbc2 + zh: 1b38aa9c8b0a4eef +/agent-note-hosted-image-assumptions-in-the-coverage-suite/decision: + en: 00b0e2ef25435ad3 + zh: 9bf59f5ca765a94b +/agent-note-hosted-image-assumptions-in-the-coverage-suite/alternatives-considered: + en: 7cc99ab98600ed3f + zh: c302b579791a403d +/agent-note-hosted-image-assumptions-in-the-coverage-suite/consequences: + en: 96ad46667a025f85 + zh: ba04b1436b82a620 diff --git a/.agents/notes/implemented/testing/2026-09-12-connection-and-compaction-fixture-preconditions.i18n.yaml b/.agents/notes/implemented/testing/2026-09-12-connection-and-compaction-fixture-preconditions.i18n.yaml index efdce8aa1b..52fcc8494f 100644 --- a/.agents/notes/implemented/testing/2026-09-12-connection-and-compaction-fixture-preconditions.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-12-connection-and-compaction-fixture-preconditions.i18n.yaml @@ -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-09-12-connection-and-compaction-fixture-preconditions.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/testing/2026-09-12-connection-and-compaction-fixture-preconditions.md -2026-09-12-connection-and-compaction-fixture-preconditions.md: 9b97657c7742bb37a8a70b04350d5e6b43868f6c -2026-09-12-connection-and-compaction-fixture-preconditions.zh.md: bc73a0e84ab4f60b7f3091f60a5217dcc950cb20 +/agent-note-connection-and-compaction-fixture-preconditions: + en: ea762fbdd18bdce3 + zh: 5795a728fd210f69 +/agent-note-connection-and-compaction-fixture-preconditions/problem: + en: 43949801eda059d6 + zh: 83b579735b9d3e3f +/agent-note-connection-and-compaction-fixture-preconditions/decision: + en: 4e7091381ce185cf + zh: 6e36499f5b5e46f9 +/agent-note-connection-and-compaction-fixture-preconditions/alternatives-considered: + en: b8842654dbe80f4c + zh: e4b80e80d89203b0 +/agent-note-connection-and-compaction-fixture-preconditions/consequences: + en: 054ce1f776693cc9 + zh: dd542b1ccb1cc07d diff --git a/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-journal.i18n.yaml b/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-journal.i18n.yaml index 6ebebc30d8..ba9ba30f89 100644 --- a/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-journal.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-journal.i18n.yaml @@ -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-09-14-desktop-installed-update-journal.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/testing/2026-09-14-desktop-installed-update-journal.md -2026-09-14-desktop-installed-update-journal.md: 2a0ecbde408d1207102ba206ada333de6d123711 -2026-09-14-desktop-installed-update-journal.zh.md: 129efa7c123b6945e857e55e3632b18850ceb67d +/agent-note-preserve-installed-desktop-update-evidence-across-restarts: + en: 813f856f3457732c + zh: 4f88103f6402d309 +/agent-note-preserve-installed-desktop-update-evidence-across-restarts/problem: + en: 5401829797ce63d2 + zh: 8a05a7d216aba56d +/agent-note-preserve-installed-desktop-update-evidence-across-restarts/decision: + en: 07386e0ad4b17ea2 + zh: 8424f276161376e4 +/agent-note-preserve-installed-desktop-update-evidence-across-restarts/alternatives-considered: + en: bd3c8ebb1d8e2360 + zh: db38b0725b7eae9c +/agent-note-preserve-installed-desktop-update-evidence-across-restarts/consequences: + en: 08918c2d6d6ec745 + zh: 239edd387dba4a58 diff --git a/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-materials.i18n.yaml b/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-materials.i18n.yaml index 0c1184b114..17cae8945a 100644 --- a/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-materials.i18n.yaml +++ b/.agents/notes/implemented/testing/2026-09-14-desktop-installed-update-materials.i18n.yaml @@ -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-09-14-desktop-installed-update-materials.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/testing/2026-09-14-desktop-installed-update-materials.md -2026-09-14-desktop-installed-update-materials.md: 1813c6d9bbdf12697e32f7440e4b654a33bb2384 -2026-09-14-desktop-installed-update-materials.zh.md: b92bb70b32e6549b8f2aed48f6aa9b2b8364fe54 +/agent-note-isolate-installed-update-materials-from-releases-and-user-data: + en: 9cb68e389e43373b + zh: c355d3df1f94a1a2 +/agent-note-isolate-installed-update-materials-from-releases-and-user-data/problem: + en: 8d63b992ff6d3161 + zh: 86d333255a5400d3 +/agent-note-isolate-installed-update-materials-from-releases-and-user-data/decision: + en: 7778333c76ab9b5d + zh: fa35b0a12a31ea23 +/agent-note-isolate-installed-update-materials-from-releases-and-user-data/alternatives-considered: + en: c608f186cc94a9d3 + zh: 39750c8347e8bece +/agent-note-isolate-installed-update-materials-from-releases-and-user-data/consequences: + en: e04b056cebbbba29 + zh: 5868709735abda3e diff --git a/.agents/notes/proposed/architecture/2026-07-19-required-cancellation-through-tool-capability-seams.i18n.yaml b/.agents/notes/proposed/architecture/2026-07-19-required-cancellation-through-tool-capability-seams.i18n.yaml index 48b4108c99..88e45a77c2 100644 --- a/.agents/notes/proposed/architecture/2026-07-19-required-cancellation-through-tool-capability-seams.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-07-19-required-cancellation-through-tool-capability-seams.i18n.yaml @@ -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-19-required-cancellation-through-tool-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/proposed/architecture/2026-07-19-required-cancellation-through-tool-capability-seams.md -2026-07-19-required-cancellation-through-tool-capability-seams.md: 722eefc3c79d3c1c589696bc1876d10ccbce77ea -2026-07-19-required-cancellation-through-tool-capability-seams.zh.md: 80d751e22cebd16d878f09ae9a5c15996c337603 +/agent-note-required-cancellation-through-tool-reachable-capability-seams: + en: 7999f4da8ee4fe80 + zh: ea49c90e2bbaacb8 +/agent-note-required-cancellation-through-tool-reachable-capability-seams/problem: + en: c244ddd6aadf87ad + zh: d30d623e9bf25c6b +/agent-note-required-cancellation-through-tool-reachable-capability-seams/proposal: + en: 20ed2d4cacc14f0c + zh: 19ee19bcf3596048 +/agent-note-required-cancellation-through-tool-reachable-capability-seams/proposal/scope-boundary: + en: c9df2c946d26f728 + zh: cc5bcd1710a864ef +/agent-note-required-cancellation-through-tool-reachable-capability-seams/alternatives-considered: + en: 0f2e31037bb1071c + zh: 6c654c553300ceb5 +/agent-note-required-cancellation-through-tool-reachable-capability-seams/acceptance-criteria: + en: a439a907dc6b2457 + zh: a693d1b8bb05b67f +/agent-note-required-cancellation-through-tool-reachable-capability-seams/risks: + en: c071970c88e73cb7 + zh: 58eaf135ac19ecc9 diff --git a/.agents/notes/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.i18n.yaml b/.agents/notes/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.i18n.yaml index 7d7f43420a..714d3ca25a 100644 --- a/.agents/notes/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.i18n.yaml @@ -1,6 +1,49 @@ -# 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-domain-kv-storage-and-workspace.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/proposed/architecture/2026-07-24-domain-kv-storage-and-workspace.md -2026-07-24-domain-kv-storage-and-workspace.md: dc14648c703f60b391cf4dba947c3cb0ddeb8ccb -2026-07-24-domain-kv-storage-and-workspace.zh.md: 1cf72809193b40ab540deaa171b8df1b0d39defb +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity: + en: e1792a25ca5d684d + zh: ddb20d72b56eebf8 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/problem: + en: 9a6abd0305f2e2bb + zh: 7c3f1132c0fa7b56 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal: + en: 34e5bde1535a2bb1 + zh: 559deb25b2ec50ba +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/dsh-storage-the-storage-hub: + en: 191afc01a150e4a0 + zh: da3fbc33875a4f60 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/dsh-storage-json: + en: a18ec1e534a5488b + zh: 2f5beb445e30554b +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/dsh-storage-sqlite: + en: 6a26dd7ef357db74 + zh: 951b31136e2415f9 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/dsh-domain-the-domain-data-form: + en: d51c71c793c26834 + zh: 3aab9f9695a0e225 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/future-work-session-side-deletion-design-settled-not-implemented-this-phase: + en: a3824326587b6539 + zh: 9736e3060bd57651 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/dsh-workspace: + en: 71351e042512c03a + zh: 965622f09f135d37 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/reuse-and-the-session-backend-migration-outlook: + en: e586acdb16085b91 + zh: 4fae53c5b9e4fd5b +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/test-matrix: + en: 4f8560110ec03322 + zh: 574d611d6e086e96 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/proposal/out-of-scope-list: + en: 6a8b96b362f8a742 + zh: 4ba5c96353ae46f5 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/alternatives-considered: + en: 159649c838437048 + zh: 286e2f61c796cb1c +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/acceptance-criteria: + en: ec4f2e69de32577b + zh: 64a4d049a3b75004 +/agent-note-domain-kv-storage-capability-seam-and-the-workspace-entity/risks: + en: d5d49b31afe6cfab + zh: 19606893bbde5b03 diff --git a/.agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml b/.agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml index f6a8f29476..7207445070 100644 --- a/.agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-07-27-session-projection-and-command-log.i18n.yaml @@ -1,6 +1,49 @@ -# 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-session-projection-and-command-log.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/proposed/architecture/2026-07-27-session-projection-and-command-log.md -2026-07-27-session-projection-and-command-log.md: fb329a4117fdea8f4aa0e98548982c3197d9c8f6 -2026-07-27-session-projection-and-command-log.zh.md: eb359058a74c6ed53959253ae80f2002cb67a351 +/agent-note-session-projections-and-command-lifecycle-logging: + en: c4b22a24c549feb8 + zh: 4e4921326e0cd13a +/agent-note-session-projections-and-command-lifecycle-logging/problem: + en: 017166a86aa35cad + zh: b6a2e826fbed2474 +/agent-note-session-projections-and-command-lifecycle-logging/proposal: + en: d13f906be5b62374 + zh: 1cf74760f668902a +/agent-note-session-projections-and-command-lifecycle-logging/proposal/whole-value-event-rule: + en: e6c93d89a25f0d03 + zh: 65e1f5842bc74008 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/host-projection-registry-dsh-session-projection-new-package: + en: 6068eb6aba54b102 + zh: 20e91466baf6ad11 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/shipped-consumer-the-subagent-identity-unit: + en: 10093535660c3cae + zh: a7f4ff9e71ee6751 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/wire-projections-block-on-the-history-tail-page: + en: 1a6357e8821e7951 + zh: b4b75959af4f3910 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/push-frame-and-the-client-value-store-domains-write-zero-client-code: + en: e95962f82eefed51 + zh: d2b3dfa8a23c8f0f +/agent-note-session-projections-and-command-lifecycle-logging/proposal/plan-through-the-standard-command-channel-worked-example: + en: be319089ba75cae5 + zh: 2cf0ec8d0ef79564 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/react-useprojection-the-fifth-framework-hook-seat: + en: 7b536bd8a51cc5dc + zh: 1ead63f6358b3799 +/agent-note-session-projections-and-command-lifecycle-logging/proposal/command-lifecycle-in-the-log: + en: a7e04451f3ed417c + zh: fb60c8729200b825 +/agent-note-session-projections-and-command-lifecycle-logging/delivery-plan: + en: 64ad8d08a8ab44e0 + zh: fb0a0f7369d0bd23 +/agent-note-session-projections-and-command-lifecycle-logging/alternatives-considered: + en: e945e84e8360e0c4 + zh: becdeb100a4c5b6b +/agent-note-session-projections-and-command-lifecycle-logging/acceptance-criteria: + en: 9dfcca30fffda225 + zh: 0beddb81d32e0ca7 +/agent-note-session-projections-and-command-lifecycle-logging/risks: + en: f0eb219b4119ca7d + zh: de870016c1623895 diff --git a/.agents/notes/proposed/architecture/2026-07-28-storage-root-and-derived-medium-recovery.i18n.yaml b/.agents/notes/proposed/architecture/2026-07-28-storage-root-and-derived-medium-recovery.i18n.yaml index f8b3f81ba2..db04c28547 100644 --- a/.agents/notes/proposed/architecture/2026-07-28-storage-root-and-derived-medium-recovery.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-07-28-storage-root-and-derived-medium-recovery.i18n.yaml @@ -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-28-storage-root-and-derived-medium-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/proposed/architecture/2026-07-28-storage-root-and-derived-medium-recovery.md -2026-07-28-storage-root-and-derived-medium-recovery.md: 3a4124e577b79b6775c40aed0adc63ab0c130dad -2026-07-28-storage-root-and-derived-medium-recovery.zh.md: f8d91402ba682bef616274d1a4c4fe00360271fc +/agent-note-storage-root-placement-and-derived-medium-recovery: + en: 9ebb460b39f06952 + zh: 0fc0480869566600 +/agent-note-storage-root-placement-and-derived-medium-recovery/problem: + en: e94be80df86b1da9 + zh: fe9b9dad3299562e +/agent-note-storage-root-placement-and-derived-medium-recovery/proposal: + en: bd212f50ff01960a + zh: de2c69ef9be74629 +/agent-note-storage-root-placement-and-derived-medium-recovery/proposal/one-global-storage-root-shipped-amended-form-resolved-once-at-construction-still-open: + en: 0d6497184e9ce8a0 + zh: 0e339979075c9a0e +/agent-note-storage-root-placement-and-derived-medium-recovery/proposal/declared-derived-media-reset-instead-of-reject: + en: 11e9dd194e73921f + zh: 48fbb156396dc7ec +/agent-note-storage-root-placement-and-derived-medium-recovery/alternatives-considered: + en: b5fab4b550256e96 + zh: 1d13d4de6b70e2df +/agent-note-storage-root-placement-and-derived-medium-recovery/acceptance-criteria: + en: 9d15489c12c5a23a + zh: 305a74fd2cc75aa1 +/agent-note-storage-root-placement-and-derived-medium-recovery/risks: + en: be70695cbd77824b + zh: 163ffebf285d7e5b diff --git a/.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.i18n.yaml b/.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.i18n.yaml index 0466c8f8cc..bab183a3a2 100644 --- a/.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-07-29-durable-last-activity-index.i18n.yaml @@ -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-29-durable-last-activity-index.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/proposed/architecture/2026-07-29-durable-last-activity-index.md -2026-07-29-durable-last-activity-index.md: f007f01bf34c830ef9c0093e58ca86f07416d68c -2026-07-29-durable-last-activity-index.zh.md: c3259f47bcf02f6214ea6081730ee1e850c27e77 +/agent-note-record-last-activity-in-the-session-index: + en: f64dc6aee10c755f + zh: a28d8450c78b0c01 +/agent-note-record-last-activity-in-the-session-index/problem: + en: 332469396acd98d4 + zh: c9e4d587628fc0e7 +/agent-note-record-last-activity-in-the-session-index/proposal: + en: 2260380e10b59eb6 + zh: dcf5a7f2d6003021 +/agent-note-record-last-activity-in-the-session-index/alternatives-considered: + en: 9034b95d80405f9c + zh: 573e1dcd10b62344 +/agent-note-record-last-activity-in-the-session-index/acceptance-criteria: + en: ec546e4feceb77a7 + zh: a29c9268e1c189c7 +/agent-note-record-last-activity-in-the-session-index/risks: + en: 9aaf88097b46e9b6 + zh: d16e5bbbe221b139 +/agent-note-record-last-activity-in-the-session-index/related: + en: 3fde35c997f273f8 + zh: 2d063c34cc9fe0bb diff --git a/.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.i18n.yaml b/.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.i18n.yaml index 2345992ba4..311038880f 100644 --- a/.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-08-08-semantic-composer-chain-phases.i18n.yaml @@ -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-08-semantic-composer-chain-phases.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/proposed/architecture/2026-08-08-semantic-composer-chain-phases.md -2026-08-08-semantic-composer-chain-phases.md: 8dab5afcdd8025467ba2eeb55406d2464376a8fa -2026-08-08-semantic-composer-chain-phases.zh.md: d00332b1552cf83eb969c764a33a56e2f61b1633 +/agent-note-semantic-phases-for-composer-chain-election: + en: b083187ad8ead004 + zh: b22a0dd83c37c557 +/agent-note-semantic-phases-for-composer-chain-election/problem: + en: 45193c3a6f3d29bf + zh: 7f508649dbe65db5 +/agent-note-semantic-phases-for-composer-chain-election/proposal: + en: 9dc3866376b4590b + zh: 93c2208fe9a43d91 +/agent-note-semantic-phases-for-composer-chain-election/alternatives-considered: + en: 966a5082d8c2fe35 + zh: 6a384edcdec8495e +/agent-note-semantic-phases-for-composer-chain-election/acceptance-criteria: + en: 7ecfc42bcf0be41a + zh: 4efae40db6e6768b +/agent-note-semantic-phases-for-composer-chain-election/risks: + en: 06969296bb3bd8d6 + zh: f90e5cc35d52c53a diff --git a/.agents/notes/proposed/architecture/2026-09-06-logical-session-storage-rebuild.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-06-logical-session-storage-rebuild.i18n.yaml index 9fa4bb0ea1..831a010177 100644 --- a/.agents/notes/proposed/architecture/2026-09-06-logical-session-storage-rebuild.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-06-logical-session-storage-rebuild.i18n.yaml @@ -1,6 +1,55 @@ -# 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-09-06-logical-session-storage-rebuild.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/proposed/architecture/2026-09-06-logical-session-storage-rebuild.md -2026-09-06-logical-session-storage-rebuild.md: 66a7163085e61418f18fcfd6b91c8bfcdde1d626 -2026-09-06-logical-session-storage-rebuild.zh.md: cf37e88f45ed62a9eddc533acca8806a2def3491 +/agent-note-logical-session-and-storage-rebuild: + en: 035f8aa28d4fb486 + zh: 4fa5eef40371cf2f +/agent-note-logical-session-and-storage-rebuild/problem: + en: fe3de6c728124b77 + zh: a28e89b8fee09662 +/agent-note-logical-session-and-storage-rebuild/proposal: + en: 68347f4cef24d57d + zh: e11eaec209be63c6 +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface: + en: 27e8e604c508ca73 + zh: 70247d9608e139a4 +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface/public-model: + en: add476512bd9ef36 + zh: a8a5225ccd22ec07 +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface/stage-1-substages: + en: 9b28d667b2fd1b28 + zh: be44f9f96f698bf2 +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface/stage-progress: + en: 4903b4362660063e + zh: ba06aeb34539ef8d +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface/invariants: + en: 81fc51ad0abe4f65 + zh: a9dad4cb9d5905a1 +/agent-note-logical-session-and-storage-rebuild/stage-1-one-public-logical-session-interface/enforcement-and-completion: + en: ca6c3e02033b0d01 + zh: 54a89a7e47c2d282 +/agent-note-logical-session-and-storage-rebuild/destination-architecture: + en: e0b4199ec0d5a669 + zh: abc06df82b3f357e +/agent-note-logical-session-and-storage-rebuild/destination-architecture/ownership-rules: + en: cf9d6e20f25929ff + zh: 46c0f13a1f562e0f +/agent-note-logical-session-and-storage-rebuild/destination-architecture/later-stages: + en: d61edd7e232bcb44 + zh: f9065dd60d49bc13 +/agent-note-logical-session-and-storage-rebuild/compatibility-and-non-goals: + en: bf81660f7d4638fa + zh: 4d59310d2e6476fd +/agent-note-logical-session-and-storage-rebuild/references: + en: 32c7669fd961ad1a + zh: 09dca97558a3e7b0 +/agent-note-logical-session-and-storage-rebuild/alternatives-considered: + en: 4bc014b676d93c13 + zh: 1e0a04856da60bb0 +/agent-note-logical-session-and-storage-rebuild/acceptance-criteria: + en: 1a9dfc903efe9627 + zh: f23ff556ffa33f64 +/agent-note-logical-session-and-storage-rebuild/risks: + en: 0916205231867aff + zh: 6efe11a2375d5459 diff --git a/.agents/notes/proposed/architecture/2026-09-10-session-capability-protocols.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-10-session-capability-protocols.i18n.yaml index 70f55ab524..39ee8dfa14 100644 --- a/.agents/notes/proposed/architecture/2026-09-10-session-capability-protocols.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-10-session-capability-protocols.i18n.yaml @@ -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-09-10-session-capability-protocols.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/proposed/architecture/2026-09-10-session-capability-protocols.md -2026-09-10-session-capability-protocols.md: 6cdc920745d6c98aa10326d1f8e5a4acec3b523d -2026-09-10-session-capability-protocols.zh.md: a242edd419ecbb36556f85aa2d537fe78f68afff +/agent-note-session-capability-protocols: + en: ca990e74165b25e8 + zh: f6749481ec3787e9 +/agent-note-session-capability-protocols/problem: + en: dc259b9d03444112 + zh: 3f7ea3fc166f4f8d +/agent-note-session-capability-protocols/proposal: + en: 31089a7378fdbbae + zh: e4aa40eb444526d0 +/agent-note-session-capability-protocols/proposal/developer-convention-during-migration: + en: 0756ce3afbe3837a + zh: 22ab431cb95405a7 +/agent-note-session-capability-protocols/proposal/logicalsession: + en: f20d151670c882c5 + zh: 91eeebffb10341b8 +/agent-note-session-capability-protocols/proposal/sessionservice: + en: ab0c6458dc1b1fc6 + zh: bf42ff2c99045342 +/agent-note-session-capability-protocols/proposal/sessionstorage: + en: 2090c7003fe92f52 + zh: 4d84b58cc91b73cc +/agent-note-session-capability-protocols/proposal/sessionprojectionport: + en: 030ee3198b7b9e68 + zh: 4267622d67cfd5a1 +/agent-note-session-capability-protocols/proposal/sessionquery: + en: 6da206b02c1eb698 + zh: 347248e3fa322df9 +/agent-note-session-capability-protocols/proposal/overall-architecture: + en: 68e046f0f22eb8d6 + zh: 851c3034df623b3a +/agent-note-session-capability-protocols/proposal/dependency-rule: + en: 6ce178b8e50dbbf4 + zh: 60e0a37b1caa2d3f +/agent-note-session-capability-protocols/alternatives-considered: + en: 4dd5911de0859b8f + zh: 5ba12aa6ba4effbb +/agent-note-session-capability-protocols/acceptance-criteria: + en: 82bfc842f7a0e82e + zh: 1d7bcd72be514e25 +/agent-note-session-capability-protocols/risks: + en: f8c5864d4518322b + zh: 619ef9e236515bf8 diff --git a/.agents/notes/proposed/architecture/2026-09-10-session-data-compatibility.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-10-session-data-compatibility.i18n.yaml index ecc2f6cbfa..7d4523b550 100644 --- a/.agents/notes/proposed/architecture/2026-09-10-session-data-compatibility.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-10-session-data-compatibility.i18n.yaml @@ -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-09-10-session-data-compatibility.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/proposed/architecture/2026-09-10-session-data-compatibility.md -2026-09-10-session-data-compatibility.md: 5784ca2a3ae3bae91030c177a8eca3c08f93c8af -2026-09-10-session-data-compatibility.zh.md: 39e5e071703653d9a83d38420d929c0b8a310f68 +/agent-note-session-historical-data-compatibility: + en: bcc2d17eb800361c + zh: 8f74cc9e1c9f3729 +/agent-note-session-historical-data-compatibility/problem: + en: d125f39227dc17ee + zh: ab83089486d70796 +/agent-note-session-historical-data-compatibility/proposal: + en: 986dd8097aac4d3d + zh: 986dd8097aac4d3d +/agent-note-session-historical-data-compatibility/proposal/start-with-0-1-5-rc-1-v3: + en: c0f09bb8e2c3aac5 + zh: 4b7c8d3b1d1a0f76 +/agent-note-session-historical-data-compatibility/proposal/effect-on-ordinary-users: + en: 7e8616cc65f825e3 + zh: db9e5a3e1090985e +/agent-note-session-historical-data-compatibility/proposal/invariants-after-provider-replacement: + en: c3a8bb8665ca6d95 + zh: 96a4b52c31fcc19d +/agent-note-session-historical-data-compatibility/alternatives-considered: + en: 8d34713ac1ca54ea + zh: 25b01743baa11434 +/agent-note-session-historical-data-compatibility/acceptance-criteria: + en: abd8b41ca33f4398 + zh: 54865a11723b670f +/agent-note-session-historical-data-compatibility/risks: + en: 2cb87e77f846c8fe + zh: e4e2f7eae02e0a7e diff --git a/.agents/notes/proposed/architecture/2026-09-10-session-developer-transition.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-10-session-developer-transition.i18n.yaml index 5c8fb0f4fb..074a3d3a03 100644 --- a/.agents/notes/proposed/architecture/2026-09-10-session-developer-transition.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-10-session-developer-transition.i18n.yaml @@ -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-09-10-session-developer-transition.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/proposed/architecture/2026-09-10-session-developer-transition.md -2026-09-10-session-developer-transition.md: cde78cbc2005435c48c823b2902da5e9e129d131 -2026-09-10-session-developer-transition.zh.md: a20cb8d4ef0c10fe0abfe25c7189d2f0eb43333c +/agent-note-session-developer-transition-rules: + en: e5554b1d8a98818d + zh: e1ed935f755924b6 +/agent-note-session-developer-transition-rules/problem: + en: bc0c73010718f890 + zh: a8e3ea46366c1c7a +/agent-note-session-developer-transition-rules/proposal: + en: 1f1df17eaf8f96d8 + zh: 1b767d61d3e2e641 +/agent-note-session-developer-transition-rules/proposal/maintenance-rules: + en: 269be7b0b4066b52 + zh: f61684ac468d00ef +/agent-note-session-developer-transition-rules/proposal/common-operation-migrations: + en: 62cc198142f1477f + zh: 37e806f78817e5e3 +/agent-note-session-developer-transition-rules/proposal/how-a-new-contributor-starts: + en: 0fcd7c50d5659978 + zh: 8ada6e3a6f3d6cb3 +/agent-note-session-developer-transition-rules/alternatives-considered: + en: dc22bb7bfbf8cb80 + zh: 8c3bcbe5b1caf20e +/agent-note-session-developer-transition-rules/acceptance-criteria: + en: 630c5d3985fee1e2 + zh: cd107c748ec702ef +/agent-note-session-developer-transition-rules/risks: + en: 4719bc8122ee39fa + zh: 30eaecfd796deba8 diff --git a/.agents/notes/proposed/architecture/2026-09-10-session-refactor-faq.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-10-session-refactor-faq.i18n.yaml index f6433da311..649538063a 100644 --- a/.agents/notes/proposed/architecture/2026-09-10-session-refactor-faq.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-10-session-refactor-faq.i18n.yaml @@ -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-09-10-session-refactor-faq.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/proposed/architecture/2026-09-10-session-refactor-faq.md -2026-09-10-session-refactor-faq.md: cae6dbaaf0354836c34d1414da16f7b274da382e -2026-09-10-session-refactor-faq.zh.md: b0d5099250d439a133ca80b6f555d78541906367 +/agent-note-session-refactor-faq: + en: e51be5edaac914bc + zh: 2e3ef4006e0ab07d +/agent-note-session-refactor-faq/problem: + en: dd6312b4ffd1f4b4 + zh: 16d132992aaf81fc +/agent-note-session-refactor-faq/proposal: + en: 986dd8097aac4d3d + zh: 986dd8097aac4d3d +/agent-note-session-refactor-faq/proposal/why-logicalsession: + en: f3826d6dba15dd3f + zh: c5f63ae9322dd924 +/agent-note-session-refactor-faq/proposal/is-concrete-session-forbidden-immediately: + en: 129c7ac82e23e811 + zh: 834033794db12916 +/agent-note-session-refactor-faq/proposal/how-do-sessionservice-and-sessionstorage-differ: + en: 2dec5b2809ca1ea8 + zh: d6446f78a2da0e0d +/agent-note-session-refactor-faq/proposal/where-does-projection-fit: + en: 6b2ce6773bdd958b + zh: c59f2e6fcea57417 +/agent-note-session-refactor-faq/proposal/why-no-sessionsearch-or-sessionstats: + en: 49016cb52c419fa0 + zh: 1d7ad3a8d23a7d0c +/agent-note-session-refactor-faq/proposal/must-ordinary-users-migrate: + en: 561adffeb62beb3e + zh: bc11f602e9bc6a87 +/agent-note-session-refactor-faq/proposal/what-is-complete: + en: 7693e479cc3d69f2 + zh: ed827338c03c0c01 +/agent-note-session-refactor-faq/proposal/how-can-i-contribute: + en: 4fb0e060d2a6648b + zh: 03f0039e1bc32437 +/agent-note-session-refactor-faq/alternatives-considered: + en: bd143e9bcef3df2c + zh: c20c997563d10d6a +/agent-note-session-refactor-faq/acceptance-criteria: + en: a78f08bcf0c0af46 + zh: 5aa2b6952969705d +/agent-note-session-refactor-faq/risks: + en: e0db80998e7b18b4 + zh: fd6b75e582d743ed diff --git a/.agents/notes/proposed/architecture/2026-09-14-composer-model-and-draft-editor.i18n.yaml b/.agents/notes/proposed/architecture/2026-09-14-composer-model-and-draft-editor.i18n.yaml index 19ee105187..25000b2e09 100644 --- a/.agents/notes/proposed/architecture/2026-09-14-composer-model-and-draft-editor.i18n.yaml +++ b/.agents/notes/proposed/architecture/2026-09-14-composer-model-and-draft-editor.i18n.yaml @@ -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-09-14-composer-model-and-draft-editor.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/proposed/architecture/2026-09-14-composer-model-and-draft-editor.md -2026-09-14-composer-model-and-draft-editor.md: 3f66ab2c73da0a8f66bf43a821cbe5f85363867a -2026-09-14-composer-model-and-draft-editor.zh.md: aa040b0fa68961d4d5884d73791c4986b8bfab50 +/agent-note-two-stage-composer-and-drafteditor-isolation: + en: 28f1ad8c58451112 + zh: f54f43862019e385 +/agent-note-two-stage-composer-and-drafteditor-isolation/problem: + en: 6316522fcd01a9bc + zh: aa6e339e8b528a5b +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal: + en: fbd8d96d050a288c + zh: d312590845174596 +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-one-five-mechanical-responsibility-extractions: + en: 3add548b95979d3c + zh: c6eab5274037e6b5 +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-one-five-mechanical-responsibility-extractions/stage-one-invariants: + en: b61469dcd7c9e0fe + zh: 345fca4cb1dc717b +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-one-five-mechanical-responsibility-extractions/isolation-actually-achieved-in-stage-one: + en: e1e3c2479f2a7e0c + zh: be094599bb90868b +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-two-behavior-changes-only: + en: 15c72b9d93a8b1bc + zh: a565969f4ec3b00a +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-two-behavior-changes-only/final-state-ownership: + en: fc9cb7b515ed6fd6 + zh: ca7ac114f93852b9 +/agent-note-two-stage-composer-and-drafteditor-isolation/proposal/stage-two-behavior-changes-only/shared-content-and-synchronization-requirements: + en: 60385537149da946 + zh: 80f4aa1454efdf43 +/agent-note-two-stage-composer-and-drafteditor-isolation/alternatives-considered: + en: e0a41f0e65c4c94c + zh: fac372d2c4c2c740 +/agent-note-two-stage-composer-and-drafteditor-isolation/acceptance-criteria: + en: f9a42d215fc000fa + zh: e6f1735e6ed73279 +/agent-note-two-stage-composer-and-drafteditor-isolation/risks: + en: e01daa84a5d58247 + zh: 41def722300784a8 diff --git a/.agents/notes/proposed/bug-fix/2026-08-20-attachment-read-quarantine.i18n.yaml b/.agents/notes/proposed/bug-fix/2026-08-20-attachment-read-quarantine.i18n.yaml index b53d43cdc7..387e34fc96 100644 --- a/.agents/notes/proposed/bug-fix/2026-08-20-attachment-read-quarantine.i18n.yaml +++ b/.agents/notes/proposed/bug-fix/2026-08-20-attachment-read-quarantine.i18n.yaml @@ -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-20-attachment-read-quarantine.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/proposed/bug-fix/2026-08-20-attachment-read-quarantine.md -2026-08-20-attachment-read-quarantine.md: 28e0f26cee2ec1e257fd4d43b4edc4300e2c6f23 -2026-08-20-attachment-read-quarantine.zh.md: 7f4ceae4e1fe9e656ed762de9828e14145976dc3 +/agent-note-quarantine-unreadable-historical-attachments: + en: 044cc37c349ad018 + zh: ba3336ebf923aeeb +/agent-note-quarantine-unreadable-historical-attachments/problem: + en: 8652fbd5afd34170 + zh: b6399f48311b0a7d +/agent-note-quarantine-unreadable-historical-attachments/proposal: + en: 2a7c272551d37bba + zh: cf58b062d716d301 +/agent-note-quarantine-unreadable-historical-attachments/alternatives-considered: + en: bac910fed94331cd + zh: 6e9ea388c407e3a7 +/agent-note-quarantine-unreadable-historical-attachments/acceptance-criteria: + en: 862b6f6077457010 + zh: 0b4fad8dc4cb0f46 +/agent-note-quarantine-unreadable-historical-attachments/risks: + en: 17a076b575e981e9 + zh: 15961b94d93cffac diff --git a/.agents/notes/proposed/feature/2026-06-30-pre-tool-input-rewrite.i18n.yaml b/.agents/notes/proposed/feature/2026-06-30-pre-tool-input-rewrite.i18n.yaml index fff61a1e56..8d5b683f9e 100644 --- a/.agents/notes/proposed/feature/2026-06-30-pre-tool-input-rewrite.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-06-30-pre-tool-input-rewrite.i18n.yaml @@ -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-06-30-pre-tool-input-rewrite.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/proposed/feature/2026-06-30-pre-tool-input-rewrite.md -2026-06-30-pre-tool-input-rewrite.md: a42b05ac7d2b4d5808807a5810b9e0c4354333a5 -2026-06-30-pre-tool-input-rewrite.zh.md: 8ef07ea7b6ca446b796c3977d5c87a1e7c49917a +/agent-note-pre-tool-input-rewrite-a-consistent-design: + en: 28be5a60d0f8f70d + zh: 2ade899f45347755 +/agent-note-pre-tool-input-rewrite-a-consistent-design/problem: + en: 1e84d54d317750ed + zh: 5436c2f44569ab52 +/agent-note-pre-tool-input-rewrite-a-consistent-design/the-problem-three-readers-of-pre-execution-arguments: + en: bdc0958b87dbd888 + zh: 0364cad8a5727306 +/agent-note-pre-tool-input-rewrite-a-consistent-design/proposal: + en: b08ad378beb60572 + zh: cb6797c7a0021e9d +/agent-note-pre-tool-input-rewrite-a-consistent-design/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 76136ef5249c23eb +/agent-note-pre-tool-input-rewrite-a-consistent-design/alternatives-considered/why-not-mutate-the-execution-object: + en: 4ef997690f716c9a + zh: f73cdc2154aa5596 +/agent-note-pre-tool-input-rewrite-a-consistent-design/acceptance-criteria: + en: 4e2d12fbc5ad21b3 + zh: fe3a0dace0073283 +/agent-note-pre-tool-input-rewrite-a-consistent-design/risks: + en: ed597673c0102d5c + zh: 2c0fafaa9a093fd0 +/agent-note-pre-tool-input-rewrite-a-consistent-design/open-questions: + en: abf5adcd6d2effbd + zh: 5fdb48fefd55e2c0 diff --git a/.agents/notes/proposed/feature/2026-07-06-recallable-compaction.i18n.yaml b/.agents/notes/proposed/feature/2026-07-06-recallable-compaction.i18n.yaml index d324ff433c..0c37e50f9c 100644 --- a/.agents/notes/proposed/feature/2026-07-06-recallable-compaction.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-07-06-recallable-compaction.i18n.yaml @@ -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-06-recallable-compaction.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/proposed/feature/2026-07-06-recallable-compaction.md -2026-07-06-recallable-compaction.md: 07b89116b72a1c1aac2d79ee5aa41ff6e5d02a4c -2026-07-06-recallable-compaction.zh.md: 7347cb08c94665a6e5bb88655ec08d04921d08eb +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall: + en: 597e215825c64eb9 + zh: 1986c2ec32437386 +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/problem: + en: 98419c56fc9d4f6f + zh: 30271b2ad21dc596 +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal: + en: d9f2a7ca462c8ee8 + zh: fa029cf95c64e6e6 +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/frozen-index-checkpoints: + en: 8325d916c340ce7e + zh: 8fa9e02b9736c5de +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/the-state-checkpoint: + en: 58fa7358424ce606 + zh: 37e3e0d908c9804c +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/pass-execution: + en: 0bbddf585af7054d + zh: 6a1d4cb86fe1609a +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/the-recall-tools: + en: 650caf9087704463 + zh: 8b1ba814af60e92e +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/cache-and-cost: + en: 5478157a8990200d + zh: 248d5a948cd980bf +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/packaging: + en: be69bf9a59318b82 + zh: 8ba115c958a760ad +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/relation-to-in-flight-work: + en: 649b2f91f7ec6bf0 + zh: e6868d911560ddbd +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/proposal/follow-ups: + en: ddef3c8ee8af0a71 + zh: 4d242940dbb34e50 +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/alternatives-considered: + en: 927ef2505cfd6596 + zh: 9c84668ec8e7cbdd +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/acceptance-criteria: + en: 05c76d5a5decad92 + zh: dd7f5d352e08942e +/agent-note-recallable-compaction-index-checkpoints-a-state-checkpoint-and-in-session-history-recall/risks: + en: f505f9cf132d577f + zh: e68dfd7273f71b21 diff --git a/.agents/notes/proposed/feature/2026-07-08-interactive-side-sessions.i18n.yaml b/.agents/notes/proposed/feature/2026-07-08-interactive-side-sessions.i18n.yaml index 80b3caab4e..a142187273 100644 --- a/.agents/notes/proposed/feature/2026-07-08-interactive-side-sessions.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-07-08-interactive-side-sessions.i18n.yaml @@ -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-08-interactive-side-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/proposed/feature/2026-07-08-interactive-side-sessions.md -2026-07-08-interactive-side-sessions.md: 53b21497c92a77f075dd146151a6d953ecfc7a8b -2026-07-08-interactive-side-sessions.zh.md: 439d9c4d1a275255f5962028be2bd24d5f829bc6 +/agent-note-interactive-side-sessions-and-merge-back: + en: a200e33a65a4f530 + zh: 47d02d3736310892 +/agent-note-interactive-side-sessions-and-merge-back/problem: + en: 181d0078a702fdf2 + zh: ad1bff4f82fafdf3 +/agent-note-interactive-side-sessions-and-merge-back/proposal: + en: 5fa7d2000db6b265 + zh: a892b74299e0f984 +/agent-note-interactive-side-sessions-and-merge-back/alternatives-considered: + en: de50cab213a61b91 + zh: 85b912193092dfe2 +/agent-note-interactive-side-sessions-and-merge-back/acceptance-criteria: + en: 17d0937a1f28b1ac + zh: 9710ab0af3268da1 +/agent-note-interactive-side-sessions-and-merge-back/risks: + en: 86f12d62580d8d98 + zh: 8c39be21a1e3958f diff --git a/.agents/notes/proposed/feature/2026-08-04-task-surface.i18n.yaml b/.agents/notes/proposed/feature/2026-08-04-task-surface.i18n.yaml index d5cb5514e9..faa5a8965e 100644 --- a/.agents/notes/proposed/feature/2026-08-04-task-surface.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-08-04-task-surface.i18n.yaml @@ -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-04-task-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/proposed/feature/2026-08-04-task-surface.md -2026-08-04-task-surface.md: 749ce9e40eea7aeb7a813dc6b2d4c139cf00ac44 -2026-08-04-task-surface.zh.md: 4a63e671ffe05c80dd8bc8ed3a49ab6ff5c44b7e +/agent-note-task-surface-for-structured-session-interaction: + en: fd53b5c7554236fc + zh: 6ff988716b5624cf +/agent-note-task-surface-for-structured-session-interaction/problem: + en: a4c96dae864a027e + zh: 432e6de734832966 +/agent-note-task-surface-for-structured-session-interaction/proposal: + en: 7f8d02649159a3a6 + zh: f63982864b6ad943 +/agent-note-task-surface-for-structured-session-interaction/declarative-model: + en: 9650ef8f65049b7d + zh: c0925b701a6b681c +/agent-note-task-surface-for-structured-session-interaction/tool-and-presentation-contract: + en: 836a14533a918d95 + zh: 0522d458992c5355 +/agent-note-task-surface-for-structured-session-interaction/submission-contract: + en: 480c434bc0825063 + zh: bbcace61f8d82188 +/agent-note-task-surface-for-structured-session-interaction/lifecycle-and-recovery: + en: 26beff219ebb0ce9 + zh: 664d4c76adf56175 +/agent-note-task-surface-for-structured-session-interaction/package-boundaries-and-dependencies: + en: 02aad87dd24d822f + zh: 9d49b5fa588e5e11 +/agent-note-task-surface-for-structured-session-interaction/delivery-stages: + en: 25d0951356cf412d + zh: 994619aaab7c2348 +/agent-note-task-surface-for-structured-session-interaction/alternatives-considered: + en: 121ceb5920763980 + zh: 7d7c1576faf4f331 +/agent-note-task-surface-for-structured-session-interaction/acceptance-criteria: + en: e5db6c885617dd5d + zh: 0a54a00d2a195bfb +/agent-note-task-surface-for-structured-session-interaction/risks: + en: 84a297fcdef9aaad + zh: a9ce38547d650e55 diff --git a/.agents/notes/proposed/feature/2026-09-08-desktop-mandatory-update-api.i18n.yaml b/.agents/notes/proposed/feature/2026-09-08-desktop-mandatory-update-api.i18n.yaml index a928ba5315..d49e11a253 100644 --- a/.agents/notes/proposed/feature/2026-09-08-desktop-mandatory-update-api.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-09-08-desktop-mandatory-update-api.i18n.yaml @@ -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-09-08-desktop-mandatory-update-api.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/proposed/feature/2026-09-08-desktop-mandatory-update-api.md -2026-09-08-desktop-mandatory-update-api.md: f88216065fe09221c7a14805e4d25fb97a259abc -2026-09-08-desktop-mandatory-update-api.zh.md: cb3e631040d221b87979b7fcd379c8881dba36bd +/agent-note-desktop-mandatory-update-api: + en: c0ea3f7826d8e253 + zh: 89feec8209a54f26 +/agent-note-desktop-mandatory-update-api/problem: + en: cc14e499c0f87586 + zh: 4cf849710b782d4b +/agent-note-desktop-mandatory-update-api/proposal: + en: 264c54ffe91f3193 + zh: 005512e1c498ccc1 +/agent-note-desktop-mandatory-update-api/proposal/endpoint-and-access: + en: 6c82820724930bb5 + zh: 5f6a0bbfd6fb6b16 +/agent-note-desktop-mandatory-update-api/proposal/request: + en: d015126512123574 + zh: a77e66d4f1808402 +/agent-note-desktop-mandatory-update-api/proposal/no-mandatory-update: + en: 4814b1bd7002d6ed + zh: 3f0d77beb046e2fc +/agent-note-desktop-mandatory-update-api/proposal/mandatory-update: + en: d3ae240665143695 + zh: 486115cd2fdf35ed +/agent-note-desktop-mandatory-update-api/proposal/errors-and-policy-matching: + en: 5da5e6a38a739201 + zh: 5af5743f9f162dd4 +/agent-note-desktop-mandatory-update-api/proposal/policy-publication-and-current-decisions: + en: d4d70e1541b2c2d1 + zh: a1b6e62a05b239be +/agent-note-desktop-mandatory-update-api/proposal/capacity-and-caching: + en: d176fc8d0eb355db + zh: b9f60de3e4f0a3fc +/agent-note-desktop-mandatory-update-api/alternatives-considered: + en: 1b69fd084869fb38 + zh: 90efcd2484f5a175 +/agent-note-desktop-mandatory-update-api/acceptance-criteria: + en: 6708b52f0c474ca7 + zh: 0ce9c9d3aa2e82c7 +/agent-note-desktop-mandatory-update-api/risks: + en: a5689674032b188e + zh: 06b83a878fba55b3 diff --git a/.agents/notes/proposed/feature/2026-09-08-desktop-update-extensions.i18n.yaml b/.agents/notes/proposed/feature/2026-09-08-desktop-update-extensions.i18n.yaml index 7119122de4..ce51330f2a 100644 --- a/.agents/notes/proposed/feature/2026-09-08-desktop-update-extensions.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-09-08-desktop-update-extensions.i18n.yaml @@ -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-09-08-desktop-update-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/proposed/feature/2026-09-08-desktop-update-extensions.md -2026-09-08-desktop-update-extensions.md: 6c8a2ebe4a38809f6c3a7fb4741b3520111402c6 -2026-09-08-desktop-update-extensions.zh.md: 06096c8b28136ab2e22325857021926e06b3b17e +/agent-note-deferred-desktop-update-extensions: + en: 01b20c9e8c51f739 + zh: 2b2ef6d0d38d3d19 +/agent-note-deferred-desktop-update-extensions/problem: + en: da98b267b01e4829 + zh: 0ae373bd57094e74 +/agent-note-deferred-desktop-update-extensions/proposal: + en: eb4ae06bfef53a90 + zh: f40702aa6a557792 +/agent-note-deferred-desktop-update-extensions/proposal/independent-revisions: + en: 403bd786a8411349 + zh: c44584e8a7e5b74a +/agent-note-deferred-desktop-update-extensions/proposal/stable-subscription-and-channel-switching: + en: f39b1ed0d941d372 + zh: 05b9a006c9ec0d3c +/agent-note-deferred-desktop-update-extensions/proposal/automatic-installation-setting: + en: 758d49f0a7dc6707 + zh: ddb0bfe616eb93bc +/agent-note-deferred-desktop-update-extensions/proposal/next-launch-installation: + en: 606f1eea66d829f7 + zh: d72108d762a58957 +/agent-note-deferred-desktop-update-extensions/proposal/updater-dependency-qualification: + en: c1a508d15bbc37e8 + zh: 63e7648130377fbb +/agent-note-deferred-desktop-update-extensions/proposal/multiple-pending-versions: + en: e6cf3f78703ebd25 + zh: 63e473e8949df81a +/agent-note-deferred-desktop-update-extensions/proposal/cache-invalidation-and-revocation: + en: 22c2d3aa60611f71 + zh: 27c6c0128effac56 +/agent-note-deferred-desktop-update-extensions/alternatives-considered: + en: 699aca5ea4c3e894 + zh: 2306f90a6819d711 +/agent-note-deferred-desktop-update-extensions/acceptance-criteria: + en: cc1a2d1972f483ce + zh: 8f9d654387e76df0 +/agent-note-deferred-desktop-update-extensions/risks: + en: 1422bf65f3ea6e3b + zh: bc6d7c1a39ffbbf5 diff --git a/.agents/notes/proposed/feature/2026-09-08-desktop-update-policy-and-installation.i18n.yaml b/.agents/notes/proposed/feature/2026-09-08-desktop-update-policy-and-installation.i18n.yaml index 838cbee511..11052cfad3 100644 --- a/.agents/notes/proposed/feature/2026-09-08-desktop-update-policy-and-installation.i18n.yaml +++ b/.agents/notes/proposed/feature/2026-09-08-desktop-update-policy-and-installation.i18n.yaml @@ -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-09-08-desktop-update-policy-and-installation.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/proposed/feature/2026-09-08-desktop-update-policy-and-installation.md -2026-09-08-desktop-update-policy-and-installation.md: fa88a7dd798e050d658969ad586bd86e0ac323df -2026-09-08-desktop-update-policy-and-installation.zh.md: d9dc74f66a72dceeafd119fac9e491b3c2a29aa1 +/agent-note-desktop-update-policy-and-installation: + en: 250865822f42a08a + zh: f7fab178a4835c04 +/agent-note-desktop-update-policy-and-installation/problem: + en: 96e7c7a206e06f15 + zh: 189133653543a98c +/agent-note-desktop-update-policy-and-installation/proposal: + en: 73b06c4b868250d5 + zh: 947419d367f6c7e9 +/agent-note-desktop-update-policy-and-installation/proposal/release-and-backend-qualification: + en: 03612a65e4a65939 + zh: 4d45467930e9f364 +/agent-note-desktop-update-policy-and-installation/proposal/open-product-choices: + en: 1ced7c2ababf429f + zh: 9879fba6f288236c +/agent-note-desktop-update-policy-and-installation/proposal/cdn-and-capacity-qualification: + en: a857e8c566e0cbd2 + zh: 6b4fd99b7482c2b1 +/agent-note-desktop-update-policy-and-installation/alternatives-considered: + en: ff419f29cfc6702b + zh: dc79b9d3d9bef98f +/agent-note-desktop-update-policy-and-installation/acceptance-criteria: + en: db7d20578a44d2ca + zh: 81b71132c9c08725 +/agent-note-desktop-update-policy-and-installation/risks: + en: c518abbbfd98b9ca + zh: 0d325d2b825eee87 diff --git a/.agents/notes/proposed/process/2026-06-11-api-extractor-reports.i18n.yaml b/.agents/notes/proposed/process/2026-06-11-api-extractor-reports.i18n.yaml index 834ddaf3ac..e1f8080e43 100644 --- a/.agents/notes/proposed/process/2026-06-11-api-extractor-reports.i18n.yaml +++ b/.agents/notes/proposed/process/2026-06-11-api-extractor-reports.i18n.yaml @@ -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-11-api-extractor-reports.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/proposed/process/2026-06-11-api-extractor-reports.md -2026-06-11-api-extractor-reports.md: 2aee524596a5b798591fecded539a8d2236a3d96 -2026-06-11-api-extractor-reports.zh.md: e62b6168efac5c8296b55ff8ee0c7861d1849d31 +/agent-note-api-extractor-reports: + en: 5bf55ca547e54ed9 + zh: 62bc2de82f342803 +/agent-note-api-extractor-reports/problem: + en: 1155ed0bd1964b95 + zh: 4d00955e7602b8b4 +/agent-note-api-extractor-reports/proposal: + en: bdf121c8a35a7cf6 + zh: 106d7be6dba363cf +/agent-note-api-extractor-reports/alternatives-considered: + en: 36a7bef28b50f0a1 + zh: 1051720fd8c30f7a +/agent-note-api-extractor-reports/acceptance-criteria: + en: b3dd74eab1781311 + zh: 63fd46fd11656832 +/agent-note-api-extractor-reports/risks: + en: 21838e31d29b87fb + zh: c72c81ef53b090e0 +/agent-note-api-extractor-reports/why-deferred: + en: e2a8a7c13f4db704 + zh: aeae101a9a77d677 diff --git a/.agents/notes/proposed/process/2026-06-11-supply-chain-and-vendor-drift.i18n.yaml b/.agents/notes/proposed/process/2026-06-11-supply-chain-and-vendor-drift.i18n.yaml index adce053a55..d5fe12dd4d 100644 --- a/.agents/notes/proposed/process/2026-06-11-supply-chain-and-vendor-drift.i18n.yaml +++ b/.agents/notes/proposed/process/2026-06-11-supply-chain-and-vendor-drift.i18n.yaml @@ -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-11-supply-chain-and-vendor-drift.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/proposed/process/2026-06-11-supply-chain-and-vendor-drift.md -2026-06-11-supply-chain-and-vendor-drift.md: aecab81292e8d6eb59fe13a5530ba78de9b307a5 -2026-06-11-supply-chain-and-vendor-drift.zh.md: ba55b3b1815c8164650dd4aa5022dd4f98efd6a4 +/agent-note-supply-chain-checks-and-vendor-drift-verification: + en: 14763706c0292472 + zh: bc846b9df1cd559c +/agent-note-supply-chain-checks-and-vendor-drift-verification/problem: + en: 2668c33c520ba25e + zh: 5dbb2e8a25cc50cd +/agent-note-supply-chain-checks-and-vendor-drift-verification/proposal: + en: c9f9e2ebf0e66922 + zh: 2c1ed4bc35bc2d90 +/agent-note-supply-chain-checks-and-vendor-drift-verification/plan: + en: c52921928996b2f0 + zh: 6c0ae36667b1bf44 +/agent-note-supply-chain-checks-and-vendor-drift-verification/alternatives-considered: + en: 39f18421ca3a9c3d + zh: 5923ddb6c420e56f +/agent-note-supply-chain-checks-and-vendor-drift-verification/acceptance-criteria: + en: e770eb9ebced47d1 + zh: df915bb02264be7a +/agent-note-supply-chain-checks-and-vendor-drift-verification/risks: + en: 515f9c9dd5ef7c20 + zh: a8358875334b2c64 diff --git a/.agents/notes/proposed/process/2026-06-20-discover-package-inventory.i18n.yaml b/.agents/notes/proposed/process/2026-06-20-discover-package-inventory.i18n.yaml index f673045a49..1a93b05ba6 100644 --- a/.agents/notes/proposed/process/2026-06-20-discover-package-inventory.i18n.yaml +++ b/.agents/notes/proposed/process/2026-06-20-discover-package-inventory.i18n.yaml @@ -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-20-discover-package-inventory.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/proposed/process/2026-06-20-discover-package-inventory.md -2026-06-20-discover-package-inventory.md: 81674dd4d1e6f1ca15491754fbb35f5262be9581 -2026-06-20-discover-package-inventory.zh.md: 2a782d07ddbefc1d80eef2825220de179428377b +/agent-note-discover-package-inventories-instead-of-maintaining-static-lists: + en: 3e6f3d4389b83ace + zh: dc84644418444fe6 +/agent-note-discover-package-inventories-instead-of-maintaining-static-lists/problem: + en: 3331c27d7f05a293 + zh: d3f87bd458a65f1d +/agent-note-discover-package-inventories-instead-of-maintaining-static-lists/proposal: + en: ce955aa355c15117 + zh: 4d6f464bd5336981 +/agent-note-discover-package-inventories-instead-of-maintaining-static-lists/acceptance-criteria: + en: 99944a56114596df + zh: ec13f47fb2deef94 +/agent-note-discover-package-inventories-instead-of-maintaining-static-lists/risks: + en: e2876e76daf10637 + zh: 01126163c6f15960 diff --git a/.agents/notes/proposed/process/2026-07-13-human-review-skill-maintenance.i18n.yaml b/.agents/notes/proposed/process/2026-07-13-human-review-skill-maintenance.i18n.yaml index 25abf497a8..766efdc8d0 100644 --- a/.agents/notes/proposed/process/2026-07-13-human-review-skill-maintenance.i18n.yaml +++ b/.agents/notes/proposed/process/2026-07-13-human-review-skill-maintenance.i18n.yaml @@ -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-13-human-review-skill-maintenance.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/proposed/process/2026-07-13-human-review-skill-maintenance.md -2026-07-13-human-review-skill-maintenance.md: b741c8b595fcd36613cb246af483863d1e056697 -2026-07-13-human-review-skill-maintenance.zh.md: b43e05c79b60056f3f38eabb00dd5af9a3611c6e +/agent-note-periodic-human-review-maintenance-for-dsh-code-review: + en: 7c3dc085ce13a5e9 + zh: e24659d5088e7e46 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/problem: + en: 7525ad5821b12c44 + zh: 7daef3ed8aa176e9 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal: + en: ea478f77c2f26d85 + zh: dc6208e15615d5af +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/acquisition-contract: + en: a95dea3f6b37af6f + zh: 29cfc8f03a8b487b +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/adoption-evidence: + en: f61dfd9e11b1e5a5 + zh: c87f245097c39fc7 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/dual-reviewer-classification-and-drafting: + en: fe1f6987e5a7d4f7 + zh: 74d990935316e69b +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/reviewer-adapter-protocol: + en: baa824361e643e80 + zh: 15d5efb0a1ca2c11 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/promotion-contract: + en: dd6810cf423430bc + zh: 0c81e470f64af150 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/proposal/where-the-mechanism-lives: + en: 2f9ffbf8619445a9 + zh: 1dd0144e9a00d8fe +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/alternatives-considered: + en: 1673a2138ddd34c2 + zh: 81c91a50ea0703d6 +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/acceptance-criteria: + en: a9354faa1dc793a3 + zh: f0b8da665facaecc +/agent-note-periodic-human-review-maintenance-for-dsh-code-review/risks: + en: b26ffb43c1c35b3a + zh: c2c8b81a8317cd55 diff --git a/.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.i18n.yaml b/.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.i18n.yaml index 282663d336..de3a6b948b 100644 --- a/.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.i18n.yaml +++ b/.agents/notes/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.i18n.yaml @@ -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-26-remove-packed-session-fixture-migrator.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/proposed/process/2026-07-26-remove-packed-session-fixture-migrator.md -2026-07-26-remove-packed-session-fixture-migrator.md: 0a29ef98828ac07d291392d637b0508937c9a9a6 -2026-07-26-remove-packed-session-fixture-migrator.zh.md: aa9aece710587cef6c84ad9cf078821a2506deb1 +/agent-note-remove-the-packed-session-fixture-branch-migrator: + en: 0a308bd6231fb8ad + zh: c72bd0f6f327fadd +/agent-note-remove-the-packed-session-fixture-branch-migrator/problem: + en: 26671139b244f2ad + zh: fb2bbcc283b6f108 +/agent-note-remove-the-packed-session-fixture-branch-migrator/proposal: + en: 6e9555d667a64807 + zh: 7d7d59ae0f8859c9 +/agent-note-remove-the-packed-session-fixture-branch-migrator/alternatives-considered: + en: 7066942e7b78faba + zh: 6174e50357d868c5 +/agent-note-remove-the-packed-session-fixture-branch-migrator/acceptance-criteria: + en: 2ea0da4f97ecec97 + zh: 308aed4607df56af +/agent-note-remove-the-packed-session-fixture-branch-migrator/risks: + en: ee7d26eb7287179b + zh: 96f2cf320cc1adc8 diff --git a/.agents/notes/proposed/process/2026-08-20-audience-first-documentation-quality.i18n.yaml b/.agents/notes/proposed/process/2026-08-20-audience-first-documentation-quality.i18n.yaml index 5f57698abb..e1371258e1 100644 --- a/.agents/notes/proposed/process/2026-08-20-audience-first-documentation-quality.i18n.yaml +++ b/.agents/notes/proposed/process/2026-08-20-audience-first-documentation-quality.i18n.yaml @@ -1,6 +1,52 @@ -# 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-audience-first-documentation-quality.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/proposed/process/2026-08-20-audience-first-documentation-quality.md -2026-08-20-audience-first-documentation-quality.md: 9e0c4a61408449100b79148a571cd740e4044040 -2026-08-20-audience-first-documentation-quality.zh.md: 0b6f1da54380f1d2d44afbe948131233def513cd +/agent-note-audience-first-documentation-quality-criteria: + en: 5fd84aa1a097f80f + zh: 073d973331b00ca4 +/agent-note-audience-first-documentation-quality-criteria/problem: + en: 86ee1c395115b7d2 + zh: 7fea995569331599 +/agent-note-audience-first-documentation-quality-criteria/problem/semantic-correctness-can-pass-without-a-current-owner: + en: d752be65975937fa + zh: f0c9a94ccff8e059 +/agent-note-audience-first-documentation-quality-criteria/problem/reader-success-is-implicit-rather-than-testable: + en: 9d7c94e84fdeea18 + zh: e315ae5d470d576b +/agent-note-audience-first-documentation-quality-criteria/problem/generated-accuracy-and-retrieval-quality-are-conflated: + en: ebca610981ca8519 + zh: df367b6ad77db2bd +/agent-note-audience-first-documentation-quality-criteria/problem/the-standard-has-no-room-for-its-next-rule: + en: 08014cdc897e21c2 + zh: b3fdc5236ee7144f +/agent-note-audience-first-documentation-quality-criteria/problem/baseline: + en: 43bd2079e17f92a0 + zh: 7f0553e1417eb759 +/agent-note-audience-first-documentation-quality-criteria/proposal: + en: 1f28c04d5002af94 + zh: 4d4dfea99fc6aee2 +/agent-note-audience-first-documentation-quality-criteria/proposal/prototype-rules: + en: 6ee5714bc0b33cda + zh: 587bd85f6f712868 +/agent-note-audience-first-documentation-quality-criteria/proposal/criteria-by-document-job: + en: 9abbe4f2d5038284 + zh: 45d30352d9cce4b5 +/agent-note-audience-first-documentation-quality-criteria/proposal/generated-reference-entry-and-detail-layers: + en: 2641ca1307c3308f + zh: 15fd0415d40a9190 +/agent-note-audience-first-documentation-quality-criteria/proposal/enforcement-slices: + en: c2f6617cf8b3bab4 + zh: b9ad3dae2fc50ddf +/agent-note-audience-first-documentation-quality-criteria/proposal/non-goals: + en: e8633d73b0273bfd + zh: 516e6d805158d303 +/agent-note-audience-first-documentation-quality-criteria/alternatives-considered: + en: 5f09627b84bf112b + zh: b0f1845df90e5f1a +/agent-note-audience-first-documentation-quality-criteria/acceptance-criteria: + en: 696ff7205b3362d0 + zh: a62a50cf3ceadac6 +/agent-note-audience-first-documentation-quality-criteria/risks: + en: b920900d3ff05073 + zh: 05b2a0271b825260 diff --git a/.agents/notes/proposed/process/2026-08-27-port-tool-owned-render.i18n.yaml b/.agents/notes/proposed/process/2026-08-27-port-tool-owned-render.i18n.yaml index 542aa17c63..38917672a7 100644 --- a/.agents/notes/proposed/process/2026-08-27-port-tool-owned-render.i18n.yaml +++ b/.agents/notes/proposed/process/2026-08-27-port-tool-owned-render.i18n.yaml @@ -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-port-tool-owned-render.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/proposed/process/2026-08-27-port-tool-owned-render.md -2026-08-27-port-tool-owned-render.md: 4ab27142fdc2d13d7d152c21c2f246e340fb4711 -2026-08-27-port-tool-owned-render.zh.md: fe8a018235db59b6f3bf80eae45d3a25181f37ec +/agent-note-port-tool-owned-render-into-current-dsh-apis: + en: a13180eec1968793 + zh: e47a83ddb329de88 +/agent-note-port-tool-owned-render-into-current-dsh-apis/problem: + en: 3a3ceea534efabd1 + zh: f13f8531d1819b8a +/agent-note-port-tool-owned-render-into-current-dsh-apis/proposal: + en: a51c0e6f23d8d4d4 + zh: 1eecd0ed06685c40 +/agent-note-port-tool-owned-render-into-current-dsh-apis/alternatives-considered: + en: a2364e3fca0a06e5 + zh: a76370082e218154 +/agent-note-port-tool-owned-render-into-current-dsh-apis/acceptance-criteria: + en: 5e2815d18df000f9 + zh: 97845472646b1881 +/agent-note-port-tool-owned-render-into-current-dsh-apis/risks: + en: 4fa51a62af0a3fc5 + zh: d6f555a8a5d9120c diff --git a/.agents/notes/proposed/simplification/2026-09-17-defer-office-background-scheduling.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-17-defer-office-background-scheduling.i18n.yaml index 35fe5b54d9..0374d8ce64 100644 --- a/.agents/notes/proposed/simplification/2026-09-17-defer-office-background-scheduling.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-17-defer-office-background-scheduling.i18n.yaml @@ -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-09-17-defer-office-background-scheduling.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/proposed/simplification/2026-09-17-defer-office-background-scheduling.md -2026-09-17-defer-office-background-scheduling.md: 82311022a015671b9fb4cf3a0f3eba2714f325cd -2026-09-17-defer-office-background-scheduling.zh.md: ada0146f204fa40e71d48251c231c1b68c5fa5a1 +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it: + en: 9966b1c4fdb2585b + zh: 4eb24c283facf38d +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it/problem: + en: bb725ab25ff39f86 + zh: d198514119b31a61 +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it/proposal: + en: e33db390dbbcc86c + zh: 890df8891260103a +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it/alternatives-considered: + en: 597346036314c907 + zh: 91661d961623c7cd +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it/acceptance-criteria: + en: b475d4e83972fa02 + zh: 43de8f23a9346708 +/agent-note-defer-office-background-scheduling-until-a-consumer-needs-it/risks: + en: 4c2324c00381cbc7 + zh: dfe6d1068ac7560c diff --git a/.agents/notes/proposed/simplification/2026-09-19-config-only-hmr.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-config-only-hmr.i18n.yaml index c959db81ed..3b2501788a 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-config-only-hmr.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-config-only-hmr.i18n.yaml @@ -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-09-19-config-only-hmr.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/proposed/simplification/2026-09-19-config-only-hmr.md -2026-09-19-config-only-hmr.md: a5f447a8a426e9f2831a1292cae1132acab99023 -2026-09-19-config-only-hmr.zh.md: 24651aa310994b3fec4d925a84fe5d88ae6a5851 +/agent-note-limit-dsh-hmr-to-live-profile-configuration: + en: c46e2d07a9e6143f + zh: f75300d70300c324 +/agent-note-limit-dsh-hmr-to-live-profile-configuration/problem: + en: e81dd5edb54b05ad + zh: 601b28ef74134ac1 +/agent-note-limit-dsh-hmr-to-live-profile-configuration/proposal: + en: 15a88d4c7db728e2 + zh: 6fb1a28c03930a5e +/agent-note-limit-dsh-hmr-to-live-profile-configuration/alternatives-considered: + en: 9ca293c37f4df4af + zh: c8e1a8815e1c9d3f +/agent-note-limit-dsh-hmr-to-live-profile-configuration/acceptance-criteria: + en: ea1dbf4681f60fcf + zh: fa7b9f7888bfc24f +/agent-note-limit-dsh-hmr-to-live-profile-configuration/risks: + en: de00ca4e66cff7d0 + zh: fb82e77bd554c1f6 diff --git a/.agents/notes/proposed/simplification/2026-09-19-omit-fs-payload-invariant.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-omit-fs-payload-invariant.i18n.yaml index e582498d41..30d37e8252 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-omit-fs-payload-invariant.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-omit-fs-payload-invariant.i18n.yaml @@ -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-09-19-omit-fs-payload-invariant.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/proposed/simplification/2026-09-19-omit-fs-payload-invariant.md -2026-09-19-omit-fs-payload-invariant.md: e91fa1784aa99869e3d457f7fc25a330fbc43088 -2026-09-19-omit-fs-payload-invariant.zh.md: ba81baed5f7d7051ef22218d9d59180ac87c8a21 +/agent-note-omit-the-filesystem-payload-only-invariant-companion: + en: 6385aa079529c4f4 + zh: 602b99cea351125c +/agent-note-omit-the-filesystem-payload-only-invariant-companion/problem: + en: 4568d53b3ef69254 + zh: 66c9aea2ae3645e7 +/agent-note-omit-the-filesystem-payload-only-invariant-companion/proposal: + en: 2bfceaa480b6645d + zh: 3ad1060bf91ded74 +/agent-note-omit-the-filesystem-payload-only-invariant-companion/alternatives-considered: + en: d12fd1577a308af3 + zh: 56271794646f5a87 +/agent-note-omit-the-filesystem-payload-only-invariant-companion/acceptance-criteria: + en: 253009b93ce34c5b + zh: 2268e0303bd025d6 +/agent-note-omit-the-filesystem-payload-only-invariant-companion/risks: + en: 70c52f193d72d02d + zh: f30844e865ac4c27 diff --git a/.agents/notes/proposed/simplification/2026-09-19-provider-only-instruction-reads.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-provider-only-instruction-reads.i18n.yaml index 46510688ef..47b5014e29 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-provider-only-instruction-reads.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-provider-only-instruction-reads.i18n.yaml @@ -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-09-19-provider-only-instruction-reads.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/proposed/simplification/2026-09-19-provider-only-instruction-reads.md -2026-09-19-provider-only-instruction-reads.md: 26d004c136cff8deb155007cf8d7743bc8bba95a -2026-09-19-provider-only-instruction-reads.zh.md: 82f3451f96578f1ee596bf9291a1a3c935d5f698 +/agent-note-read-instruction-files-only-through-a-filesystem-provider: + en: 522a0143262cd96a + zh: 667e48df6cd37c61 +/agent-note-read-instruction-files-only-through-a-filesystem-provider/problem: + en: 5426489eed9b447e + zh: 97132891bfff4b41 +/agent-note-read-instruction-files-only-through-a-filesystem-provider/proposal: + en: 1f6d8ce78f5ab682 + zh: c71c97c0268ac165 +/agent-note-read-instruction-files-only-through-a-filesystem-provider/alternatives-considered: + en: c942573554ef1d63 + zh: 7af89ae9434f7521 +/agent-note-read-instruction-files-only-through-a-filesystem-provider/acceptance-criteria: + en: ea8f9800cfbea9e6 + zh: a3c07d3a09d0fff4 +/agent-note-read-instruction-files-only-through-a-filesystem-provider/risks: + en: f8b63ab7c6a924ab + zh: 753472b8491105f0 diff --git a/.agents/notes/proposed/simplification/2026-09-19-prune-stream-visibility-helpers.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-prune-stream-visibility-helpers.i18n.yaml index 6360d57daa..51801755e1 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-prune-stream-visibility-helpers.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-prune-stream-visibility-helpers.i18n.yaml @@ -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-09-19-prune-stream-visibility-helpers.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/proposed/simplification/2026-09-19-prune-stream-visibility-helpers.md -2026-09-19-prune-stream-visibility-helpers.md: e44716fe15eb0ff09020ff4417b1dd9f4e9c29f4 -2026-09-19-prune-stream-visibility-helpers.zh.md: 60d010f260a6cadc99a15bde164bb0717dd7502a +/agent-note-prune-unused-stream-visibility-helpers: + en: 5d82ce82cac8a687 + zh: 4cfc68fceb215e35 +/agent-note-prune-unused-stream-visibility-helpers/problem: + en: da5bf344b0d704c1 + zh: 6826b064d8b66373 +/agent-note-prune-unused-stream-visibility-helpers/proposal: + en: b6cec09bd23a2f5a + zh: ac348bbe47ea7cc9 +/agent-note-prune-unused-stream-visibility-helpers/alternatives-considered: + en: 1a190cf86a9f7ec9 + zh: 2a30aa235c69bdc7 +/agent-note-prune-unused-stream-visibility-helpers/acceptance-criteria: + en: ee2de1dbabc60983 + zh: d01c9f1e399266af +/agent-note-prune-unused-stream-visibility-helpers/risks: + en: 466ed8d1fb426011 + zh: 1c0765622c9fdf32 diff --git a/.agents/notes/proposed/simplification/2026-09-19-python-sdk-directional-client.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-python-sdk-directional-client.i18n.yaml index 3920961bcf..df72997d92 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-python-sdk-directional-client.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-python-sdk-directional-client.i18n.yaml @@ -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-09-19-python-sdk-directional-client.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/proposed/simplification/2026-09-19-python-sdk-directional-client.md -2026-09-19-python-sdk-directional-client.md: 287126d65cc9e81e240c2b18081b2935c107760a -2026-09-19-python-sdk-directional-client.zh.md: caf9b7c73a00b8865b6d189fe512f96afb20dad9 +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction: + en: 29c6b53f7f81bfd8 + zh: 94139164373cda91 +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction/problem: + en: e8779fc70adce0e4 + zh: 288565d427fe65ae +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction/proposal: + en: 508671a9a29a8f2a + zh: 750587c118eb7450 +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction/alternatives-considered: + en: 2fb93911daacf365 + zh: 4c2e2599283cab94 +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction/acceptance-criteria: + en: bbfd9485fbe4e523 + zh: 283486f66c96b447 +/agent-note-remove-the-python-sdk-s-unused-reverse-rpc-direction/risks: + en: d0a75f4fa88d4bf7 + zh: 9a7635d8040d8068 diff --git a/.agents/notes/proposed/simplification/2026-09-19-retire-app-bin-boot-helpers.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-retire-app-bin-boot-helpers.i18n.yaml index d11c6bed98..9b077fc6d1 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-retire-app-bin-boot-helpers.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-retire-app-bin-boot-helpers.i18n.yaml @@ -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-09-19-retire-app-bin-boot-helpers.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/proposed/simplification/2026-09-19-retire-app-bin-boot-helpers.md -2026-09-19-retire-app-bin-boot-helpers.md: c67013bfae8569d0f750b3c8be5e56c57a2a66aa -2026-09-19-retire-app-bin-boot-helpers.zh.md: 5ef68ff3d8666e8b74d36c50eacbcf5048a4438a +/agent-note-retire-app-boot-helpers-used-only-by-fixtures: + en: db7c1d105d67279e + zh: 299512664ce8a27f +/agent-note-retire-app-boot-helpers-used-only-by-fixtures/problem: + en: f617e973b4e5c136 + zh: 90a32c3023bd4bbb +/agent-note-retire-app-boot-helpers-used-only-by-fixtures/proposal: + en: 9887763c3f2362ad + zh: 00a5fdaf4ea5f438 +/agent-note-retire-app-boot-helpers-used-only-by-fixtures/alternatives-considered: + en: 3fdc33ab9299103d + zh: 79f42a6b79d90b8a +/agent-note-retire-app-boot-helpers-used-only-by-fixtures/acceptance-criteria: + en: a8cedd0cdfe6526d + zh: cb08fcd8117f9ddf +/agent-note-retire-app-boot-helpers-used-only-by-fixtures/risks: + en: caf3a0c07667e4ae + zh: 41195542888a3e83 diff --git a/.agents/notes/proposed/simplification/2026-09-19-retire-prompt-registry-change-event.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-retire-prompt-registry-change-event.i18n.yaml index 625e054ecf..1f094f2d6f 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-retire-prompt-registry-change-event.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-retire-prompt-registry-change-event.i18n.yaml @@ -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-09-19-retire-prompt-registry-change-event.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/proposed/simplification/2026-09-19-retire-prompt-registry-change-event.md -2026-09-19-retire-prompt-registry-change-event.md: 1103675525e30c7f6c345a1fe92f07cbd0bcce4a -2026-09-19-retire-prompt-registry-change-event.zh.md: a49df2eebad7134b7b038ee2e6ab54610bd4c635 +/agent-note-retire-the-prompt-registry-change-event: + en: 081a6a1f8f256c6e + zh: c49dd9c0e7e42f24 +/agent-note-retire-the-prompt-registry-change-event/problem: + en: 22259f002f329483 + zh: d5a9c78a80af5187 +/agent-note-retire-the-prompt-registry-change-event/proposal: + en: dba84cfd3aa5f719 + zh: d3f6eece6f2f8148 +/agent-note-retire-the-prompt-registry-change-event/alternatives-considered: + en: 768edcebf26d1af4 + zh: 7c009a2f1513061e +/agent-note-retire-the-prompt-registry-change-event/acceptance-criteria: + en: 1ca375eac1e970f7 + zh: 741e1d56ec2bc89b +/agent-note-retire-the-prompt-registry-change-event/risks: + en: 0a86fce4d2962eef + zh: cecb538a90fdd5ea diff --git a/.agents/notes/proposed/simplification/2026-09-19-shell-env-key-declarations.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-shell-env-key-declarations.i18n.yaml index bed94c3f36..06790c6cff 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-shell-env-key-declarations.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-shell-env-key-declarations.i18n.yaml @@ -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-09-19-shell-env-key-declarations.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/proposed/simplification/2026-09-19-shell-env-key-declarations.md -2026-09-19-shell-env-key-declarations.md: 7b74e55e6b8602cb488d16040d57fe41d16e14da -2026-09-19-shell-env-key-declarations.zh.md: 03d7ed9fdee1c1181c529c2b2dd26ceb7c791ef2 +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership: + en: 45ac68010d497bfd + zh: 388e4f51893c4615 +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership/problem: + en: ff308f45fc6f5242 + zh: 025b58883a3e175b +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership/proposal: + en: ffd78167917dfa4b + zh: dbcb1004009ea9f5 +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership/alternatives-considered: + en: 476de18c44f2ad86 + zh: a0a15da6c5e7fbf7 +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership/acceptance-criteria: + en: 3196e83f9ae22f45 + zh: 0766bf5914672572 +/agent-note-keep-shell-environment-declarations-focused-on-key-ownership/risks: + en: 55e2677a8d48d759 + zh: ff97043cc6a6a31b diff --git a/.agents/notes/proposed/simplification/2026-09-19-trim-session-query-convenience-api.i18n.yaml b/.agents/notes/proposed/simplification/2026-09-19-trim-session-query-convenience-api.i18n.yaml index 676a701835..5cb6a84212 100644 --- a/.agents/notes/proposed/simplification/2026-09-19-trim-session-query-convenience-api.i18n.yaml +++ b/.agents/notes/proposed/simplification/2026-09-19-trim-session-query-convenience-api.i18n.yaml @@ -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-09-19-trim-session-query-convenience-api.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/proposed/simplification/2026-09-19-trim-session-query-convenience-api.md -2026-09-19-trim-session-query-convenience-api.md: 1a3d558c9be5e16b5e9e84a59a9731b55174114c -2026-09-19-trim-session-query-convenience-api.zh.md: 63c3ae309edee8366eae4d5db10cc59f0b72e843 +/agent-note-trim-unused-sessionquery-convenience-methods: + en: 0639096a41a3eeb4 + zh: f5ff6ed78687b440 +/agent-note-trim-unused-sessionquery-convenience-methods/problem: + en: 62f49ae402951c28 + zh: 95985e67cbb5b6ac +/agent-note-trim-unused-sessionquery-convenience-methods/proposal: + en: 3848c7dcdbf70815 + zh: d2ae878e6057afc8 +/agent-note-trim-unused-sessionquery-convenience-methods/alternatives-considered: + en: 431cc99fec52f696 + zh: ee5bcfe54f7f703c +/agent-note-trim-unused-sessionquery-convenience-methods/acceptance-criteria: + en: 44741d711dff0e30 + zh: be1e6f9547dabc74 +/agent-note-trim-unused-sessionquery-convenience-methods/risks: + en: 2095fdf1f2beaa26 + zh: 0152ac808e52fd08 diff --git a/.agents/notes/proposed/testing/2026-06-11-deterministic-and-stress-testing.i18n.yaml b/.agents/notes/proposed/testing/2026-06-11-deterministic-and-stress-testing.i18n.yaml index b6e4d8e0cd..76b8746242 100644 --- a/.agents/notes/proposed/testing/2026-06-11-deterministic-and-stress-testing.i18n.yaml +++ b/.agents/notes/proposed/testing/2026-06-11-deterministic-and-stress-testing.i18n.yaml @@ -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-11-deterministic-and-stress-testing.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/proposed/testing/2026-06-11-deterministic-and-stress-testing.md -2026-06-11-deterministic-and-stress-testing.md: d4264663178829c6e6e309ce940926bd94778755 -2026-06-11-deterministic-and-stress-testing.zh.md: 2d349682caa4f57b6d0d093d1b48c24ae431a5a5 +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress: + en: 542fbe788af50a46 + zh: ac3cd25980079e57 +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress/problem: + en: f53f96fa64894350 + zh: cb24d89ce7ed6d23 +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress/proposal: + en: 634037df9edd48bd + zh: 5b0533bfbe315e89 +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress/plan: + en: 35540eefb6f19904 + zh: 7212368b41786ffc +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress/acceptance-criteria: + en: e88b12f0cdc2748a + zh: 3a918218fe6e89a7 +/agent-note-deterministic-tests-the-replay-invariant-fixture-and-race-stress/risks: + en: 072c15d39395fbde + zh: a21a7a21a7879f56 diff --git a/.agents/notes/proposed/testing/2026-06-11-mutation-testing.i18n.yaml b/.agents/notes/proposed/testing/2026-06-11-mutation-testing.i18n.yaml index d31176617a..c1c40758be 100644 --- a/.agents/notes/proposed/testing/2026-06-11-mutation-testing.i18n.yaml +++ b/.agents/notes/proposed/testing/2026-06-11-mutation-testing.i18n.yaml @@ -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-11-mutation-testing.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/proposed/testing/2026-06-11-mutation-testing.md -2026-06-11-mutation-testing.md: 591d9012644a19ee2c67a916b63092d79f78db1f -2026-06-11-mutation-testing.zh.md: a8e786ab6566d12762c55bc559b436a13f3b32b2 +/agent-note-mutation-testing-as-the-coverage-counterweight: + en: 521fac2a2df2498e + zh: 9a508486144b2e74 +/agent-note-mutation-testing-as-the-coverage-counterweight/problem: + en: f67a5e8beb51c898 + zh: 9f997eaf27491ea4 +/agent-note-mutation-testing-as-the-coverage-counterweight/proposal: + en: 4aa172d4d1c7e419 + zh: dae8a42d5693e509 +/agent-note-mutation-testing-as-the-coverage-counterweight/plan: + en: e5b6fbdf1fbdde82 + zh: e3d050014107519f +/agent-note-mutation-testing-as-the-coverage-counterweight/acceptance-criteria: + en: 3671f37e25e586f7 + zh: e6af9b37fe92f775 +/agent-note-mutation-testing-as-the-coverage-counterweight/risks: + en: b1c2fce21adc8388 + zh: b9c2292f55c3292b diff --git a/.agents/notes/rejected/architecture/2026-06-16-typed-event-schemas.i18n.yaml b/.agents/notes/rejected/architecture/2026-06-16-typed-event-schemas.i18n.yaml index 9a28742fb7..a1a2f350fc 100644 --- a/.agents/notes/rejected/architecture/2026-06-16-typed-event-schemas.i18n.yaml +++ b/.agents/notes/rejected/architecture/2026-06-16-typed-event-schemas.i18n.yaml @@ -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-06-16-typed-event-schemas.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/rejected/architecture/2026-06-16-typed-event-schemas.md -2026-06-16-typed-event-schemas.md: 5912c39016acb4bc44089af16bf46edffe3023d0 -2026-06-16-typed-event-schemas.zh.md: 67d0c1be31e56ae6f109b5cc4402629c2b6f868f +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern: + en: 63685a0c0afc3f07 + zh: 8f7e06562771ee1d +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/problem: + en: 6bea9eb883f324d2 + zh: 2bef9b9fa5233d09 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/why-this-is-not-a-persistence-change: + en: 42d48e48d694d3de + zh: f556f4624b55a480 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/blast-radius-measured: + en: ec70e76b82ba21b5 + zh: 25fb4a60f8da5cb5 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/alternatives-considered: + en: 6119e2aff3b6be5a + zh: 76136ef5249c23eb +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/alternatives-considered/a-status-quo-merge-extensible-types-isjsonvalue-at-the-durable-boundary: + en: d5ea1b3124b341a7 + zh: 766ed3689efc1802 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/alternatives-considered/b-header-closed-shape-validation-only-schemastery-events-stay-opaque: + en: 5120fc56473696d1 + zh: 611d6f53efa282f0 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/alternatives-considered/c-runtime-schema-registry-for-the-whole-vocabulary-zod-or-schemastery: + en: db3cebf2efcf1fcd + zh: 631a39e8900c0e1d +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/proposal: + en: 33078a5945dc2aa3 + zh: 32baff49e47e9823 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/acceptance-criteria: + en: 37626ef8a2dcd7e0 + zh: 0b215089ce58e65d +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/risks: + en: 79e720cfffe60257 + zh: b4aea0d52f3ee072 +/agent-note-runtime-schemas-for-the-event-vocabulary-zod-vs-the-merge-extensible-map-pattern/open-questions: + en: afc8275e1598eb34 + zh: f3684ee3aba33cf1 diff --git a/.agents/notes/rejected/architecture/2026-07-25-client-settings-locale-theme.i18n.yaml b/.agents/notes/rejected/architecture/2026-07-25-client-settings-locale-theme.i18n.yaml index 76a82753fc..0d568431e3 100644 --- a/.agents/notes/rejected/architecture/2026-07-25-client-settings-locale-theme.i18n.yaml +++ b/.agents/notes/rejected/architecture/2026-07-25-client-settings-locale-theme.i18n.yaml @@ -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-25-client-settings-locale-theme.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/rejected/architecture/2026-07-25-client-settings-locale-theme.md -2026-07-25-client-settings-locale-theme.md: e7f4b64ab0d44492435b63a066abca9d0ae1394d -2026-07-25-client-settings-locale-theme.zh.md: 9edd7395afd48fd7088e0c64d74d1c704a584b15 +/agent-note-client-settings-locale-and-theme-layering: + en: ebeba4110da742d5 + zh: 3cfc57b1eb553185 +/agent-note-client-settings-locale-and-theme-layering/problem: + en: 4cec7e053c53607b + zh: 3796b79366e7ea58 +/agent-note-client-settings-locale-and-theme-layering/proposal: + en: 3dd489ca0eab19bd + zh: a57d5dd4d2496f04 +/agent-note-client-settings-locale-and-theme-layering/proposal/first-phase-registration-surfaces: + en: 7a4890dffd207a66 + zh: 4353be1cf48bf68d +/agent-note-client-settings-locale-and-theme-layering/proposal/slot-topology: + en: bc2aba013c52fca5 + zh: 734e5ef05792bdf9 +/agent-note-client-settings-locale-and-theme-layering/proposal/slot-declarations-are-first-class-injectable-waits: + en: 9df71cdd33cd691d + zh: 9ac3eba3d89192d9 +/agent-note-client-settings-locale-and-theme-layering/proposal/service-contracts: + en: 30c49423999492e5 + zh: bce71328fdd946c5 +/agent-note-client-settings-locale-and-theme-layering/alternatives-considered: + en: 258859f30f0b9784 + zh: 70d48285033c3d8f +/agent-note-client-settings-locale-and-theme-layering/acceptance-criteria: + en: 9ff6ce8ea22dab22 + zh: c8dd20442b50df21 +/agent-note-client-settings-locale-and-theme-layering/risks: + en: fb649d6c5a86bc09 + zh: cb5520268d365ca9 diff --git a/.agents/notes/rejected/architecture/2026-08-08-cordis-web-dynamic-packages.i18n.yaml b/.agents/notes/rejected/architecture/2026-08-08-cordis-web-dynamic-packages.i18n.yaml index d2969612cb..ede08a7406 100644 --- a/.agents/notes/rejected/architecture/2026-08-08-cordis-web-dynamic-packages.i18n.yaml +++ b/.agents/notes/rejected/architecture/2026-08-08-cordis-web-dynamic-packages.i18n.yaml @@ -1,6 +1,73 @@ -# 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-08-cordis-web-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/rejected/architecture/2026-08-08-cordis-web-dynamic-packages.md -2026-08-08-cordis-web-dynamic-packages.md: e6c7b9135198ae4f3c21f0b5116e99c521ede185 -2026-08-08-cordis-web-dynamic-packages.zh.md: 269f0f279f5415c6506bb509bfb54c3b819637d6 +/agent-note-cordis-host-client-dynamic-plugin-runtime: + en: f89118c354fe715d + zh: dcee1e4dd9bbb250 +/agent-note-cordis-host-client-dynamic-plugin-runtime/problem: + en: 19617f888995a1ec + zh: e4abb5efa2b77571 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal: + en: 986dd8097aac4d3d + zh: 986dd8097aac4d3d +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/core-principles: + en: 400bacbc13cc4ca2 + zh: efb84f4257ebf13c +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/package-responsibilities-and-dependency-direction: + en: 60b7a0c8880e579c + zh: d85388f9e9d34589 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/domain-objects: + en: fb29437ba7cc624a + zh: 2c2322991e282f7c +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/domain-objects/plugin: + en: 84d17d0aa91fa20c + zh: 354cf1a6531e2353 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/domain-objects/package: + en: 950f4e014a7fa6df + zh: 9641809a80ddbb9f +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/domain-objects/plugin-run: + en: f5cc71352e3f2eea + zh: 6933e78a031bb3e1 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/domain-objects/version-pointers: + en: 0d17a946a46eb645 + zh: 0d82d5287cd227af +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/host-authority-and-persistence: + en: 02a605a63f0b9d06 + zh: 3918b603de86ad4b +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/define-run-and-version-switching: + en: dce63bf4526ae240 + zh: 32898ea25290fd35 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/client-approval-and-authorization: + en: d3c874acd464c5da + zh: 04ffde8db6a0daa9 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/client-activation-orchestration: + en: 58708703b5069952 + zh: c378e4398b8d8063 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/package-private-client-to-host-communication: + en: 02f6557f8f3f1155 + zh: 33e2f26f371f20b6 +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/dynamic-code-guard-and-lifecycle: + en: 601f8cc278c10286 + zh: 31aa97d5c66b086c +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/inspect-providers-and-catalogs: + en: 8febbabca425cce7 + zh: 078461769a69719f +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/model-guidance-layers: + en: 879ad6fef8ca4ae7 + zh: 38ec8d838628bacd +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/pluginid-and-tool-ui: + en: 03c501a6503961fc + zh: 4e5b6633a393f8ca +/agent-note-cordis-host-client-dynamic-plugin-runtime/proposal/errors-and-model-feedback: + en: ec2d9dedbe2cd9d5 + zh: 005260a95cda020c +/agent-note-cordis-host-client-dynamic-plugin-runtime/alternatives-considered: + en: ef5f387f4019d7ad + zh: 4d5da887bafc5f22 +/agent-note-cordis-host-client-dynamic-plugin-runtime/acceptance-criteria: + en: 3a4b3100f19377d6 + zh: c36d31e04f7d4b2d +/agent-note-cordis-host-client-dynamic-plugin-runtime/risks: + en: 3ec21c3758ab98a8 + zh: e949a28f8e38042c diff --git a/.agents/notes/rejected/process/2026-06-11-architectural-conformance.i18n.yaml b/.agents/notes/rejected/process/2026-06-11-architectural-conformance.i18n.yaml index 1d03942760..0e5a8660a4 100644 --- a/.agents/notes/rejected/process/2026-06-11-architectural-conformance.i18n.yaml +++ b/.agents/notes/rejected/process/2026-06-11-architectural-conformance.i18n.yaml @@ -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-11-architectural-conformance.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/rejected/process/2026-06-11-architectural-conformance.md -2026-06-11-architectural-conformance.md: 631b032235aba3ecd0045cdfc72e719265efc867 -2026-06-11-architectural-conformance.zh.md: 74af5a377c0f80a6c53ecf2a1a8935c1e2f92f4c +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit: + en: 708fe0c94db3e25a + zh: 07437d3cb67a9240 +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit/problem: + en: 2d5d19405f22920b + zh: 8ca48379706cbe35 +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit/proposal: + en: 81d30d5657ece906 + zh: 1e7c61e5b9229ef6 +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit/plan: + en: 56bb9b7b97ba6bf5 + zh: 2e3f0a70ce391029 +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit/acceptance-criteria: + en: 2953797008c6c120 + zh: 42fd01df8a2a8f0b +/agent-note-architectural-conformance-dependency-rules-and-the-adapter-kit/risks: + en: 09eb0e6924573fe0 + zh: 60ca8648ec25afca diff --git a/.agents/notes/rejected/process/2026-08-04-artifact-first-npm-baseline-publication.i18n.yaml b/.agents/notes/rejected/process/2026-08-04-artifact-first-npm-baseline-publication.i18n.yaml index c0c61084e3..e0c297bfc5 100644 --- a/.agents/notes/rejected/process/2026-08-04-artifact-first-npm-baseline-publication.i18n.yaml +++ b/.agents/notes/rejected/process/2026-08-04-artifact-first-npm-baseline-publication.i18n.yaml @@ -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-04-artifact-first-npm-baseline-publication.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/rejected/process/2026-08-04-artifact-first-npm-baseline-publication.md -2026-08-04-artifact-first-npm-baseline-publication.md: 1c317176521afd2e11707f954520039a3f229a44 -2026-08-04-artifact-first-npm-baseline-publication.zh.md: c2822ed0b572b60fe23cab7c5dc1ebfbe02230f7 +/agent-note-artifact-first-npm-baseline-publication: + en: d0656ef5ec966473 + zh: 3d7930c502e0fa0a +/agent-note-artifact-first-npm-baseline-publication/problem: + en: 262109304a235ff0 + zh: 0399026e9afa9403 +/agent-note-artifact-first-npm-baseline-publication/proposal: + en: e3324fac080bfa55 + zh: 89e385b4d37df216 +/agent-note-artifact-first-npm-baseline-publication/current-implementation-boundary: + en: 49678acc335339b1 + zh: fdebfb169e49d34d +/agent-note-artifact-first-npm-baseline-publication/publication-payload-contract: + en: 6ad6a8829fe06538 + zh: 70e1507b7c85cb8a +/agent-note-artifact-first-npm-baseline-publication/artifact-plane-integration-test: + en: 129d1df710a8c8f7 + zh: 208002598644da1b +/agent-note-artifact-first-npm-baseline-publication/publication-and-recovery: + en: f45f84678f8184ae + zh: 5f87157df6e828b5 +/agent-note-artifact-first-npm-baseline-publication/github-actions-integration: + en: c376aca1e297c9d2 + zh: 2902f72e6d16e9ae +/agent-note-artifact-first-npm-baseline-publication/alternatives-considered: + en: d3b5794ac85b0a19 + zh: 222d054cbb7c8354 +/agent-note-artifact-first-npm-baseline-publication/acceptance-criteria: + en: fc56f357e3ef7cc5 + zh: ba108d552935f6bc +/agent-note-artifact-first-npm-baseline-publication/risks: + en: 7939117bb1674385 + zh: 9768d75303b04bc1 diff --git a/.agents/notes/rejected/simplification/2026-06-20-drop-durable-step-boundaries.i18n.yaml b/.agents/notes/rejected/simplification/2026-06-20-drop-durable-step-boundaries.i18n.yaml index bd6f2c6d48..088c91091b 100644 --- a/.agents/notes/rejected/simplification/2026-06-20-drop-durable-step-boundaries.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-06-20-drop-durable-step-boundaries.i18n.yaml @@ -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-20-drop-durable-step-boundaries.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/rejected/simplification/2026-06-20-drop-durable-step-boundaries.md -2026-06-20-drop-durable-step-boundaries.md: c5c4f269a378e334c4dc509d1288146d77d9a520 -2026-06-20-drop-durable-step-boundaries.zh.md: 2ee8abb3a57ed1a702530e9952d2d776c90554a4 +/agent-note-drop-durable-step-boundary-events: + en: 0b9830ce816f2850 + zh: 5e937fff837261f4 +/agent-note-drop-durable-step-boundary-events/problem: + en: d9011152056a58c3 + zh: 5989ef2a4f6bf5ab +/agent-note-drop-durable-step-boundary-events/proposal: + en: 3ef7c3e871cde268 + zh: fd762265542e0614 +/agent-note-drop-durable-step-boundary-events/acceptance-criteria: + en: 05d9927015af73ae + zh: a32f893355f95797 +/agent-note-drop-durable-step-boundary-events/what-we-give-up: + en: 280d1d43670d7b99 + zh: 92a21a61242694c1 diff --git a/.agents/notes/rejected/simplification/2026-06-20-fold-session-persistence-interface.i18n.yaml b/.agents/notes/rejected/simplification/2026-06-20-fold-session-persistence-interface.i18n.yaml index 47d6125e0d..7e9de72fc1 100644 --- a/.agents/notes/rejected/simplification/2026-06-20-fold-session-persistence-interface.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-06-20-fold-session-persistence-interface.i18n.yaml @@ -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-20-fold-session-persistence-interface.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/rejected/simplification/2026-06-20-fold-session-persistence-interface.md -2026-06-20-fold-session-persistence-interface.md: 58c6aa8f5b3b77f146e18d285ebf3fe1e36b0778 -2026-06-20-fold-session-persistence-interface.zh.md: 9fb53d16fced3d17ee0a76a05df04628ac9d8c95 +/agent-note-fold-the-persistence-interface-into-dsh-session: + en: ec1120bc953f18db + zh: 905c9fcee9a2ab8c +/agent-note-fold-the-persistence-interface-into-dsh-session/problem: + en: 132b1c96f4d271a0 + zh: 52f235f23160cb1b +/agent-note-fold-the-persistence-interface-into-dsh-session/proposal: + en: 8eecfc7bd6c83608 + zh: 658fc8e8eac425b7 +/agent-note-fold-the-persistence-interface-into-dsh-session/acceptance-criteria: + en: a141343494939ee4 + zh: 2b9a95f1aadd319f +/agent-note-fold-the-persistence-interface-into-dsh-session/what-we-give-up: + en: 595671143eb17f28 + zh: a6f019fb64ba3a90 diff --git a/.agents/notes/rejected/simplification/2026-06-20-truncate-interrupted-turns.i18n.yaml b/.agents/notes/rejected/simplification/2026-06-20-truncate-interrupted-turns.i18n.yaml index d460dbd142..d1a8821362 100644 --- a/.agents/notes/rejected/simplification/2026-06-20-truncate-interrupted-turns.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-06-20-truncate-interrupted-turns.i18n.yaml @@ -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-20-truncate-interrupted-turns.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/rejected/simplification/2026-06-20-truncate-interrupted-turns.md -2026-06-20-truncate-interrupted-turns.md: c4b0084de537927a27829eb78990c6559bd1df7d -2026-06-20-truncate-interrupted-turns.zh.md: ad6c85fc62077be45b1f3bb55c31cf4b4a7fd1d1 +/agent-note-truncate-interrupted-final-turns-on-load: + en: 71d2ea22bb13721d + zh: 8c215ff52de9ba0d +/agent-note-truncate-interrupted-final-turns-on-load/problem: + en: d96af2be3caa1b54 + zh: 02cb84c44916fab9 +/agent-note-truncate-interrupted-final-turns-on-load/proposal: + en: 764ee72b3b2b654a + zh: 92ea690926ff99a4 +/agent-note-truncate-interrupted-final-turns-on-load/acceptance-criteria: + en: 5aeb3cf919f6d9c7 + zh: 8cc171e48d5c0761 +/agent-note-truncate-interrupted-final-turns-on-load/what-we-give-up: + en: 583aa8d003225c57 + zh: 2d90befccf8be0ca +/agent-note-truncate-interrupted-final-turns-on-load/related: + en: a2af11959bf10ac3 + zh: 402cf5f0c4f019d8 diff --git a/.agents/notes/rejected/simplification/2026-07-04-prune-dead-core-spine-api.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-04-prune-dead-core-spine-api.i18n.yaml index 52d12170a2..810e07aad4 100644 --- a/.agents/notes/rejected/simplification/2026-07-04-prune-dead-core-spine-api.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-04-prune-dead-core-spine-api.i18n.yaml @@ -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-04-prune-dead-core-spine-api.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/rejected/simplification/2026-07-04-prune-dead-core-spine-api.md -2026-07-04-prune-dead-core-spine-api.md: 35130b1af2a2245ff575604466e098dcae7776cc -2026-07-04-prune-dead-core-spine-api.zh.md: d2782b733b76a29b48f74e81d4a76a0f90575fdb +/agent-note-prune-dead-public-api-and-result-fields: + en: 787501dcdb05bf03 + zh: cf13583535e5a444 +/agent-note-prune-dead-public-api-and-result-fields/problem: + en: 277564591633536c + zh: ddfbc0231a04b51d +/agent-note-prune-dead-public-api-and-result-fields/problem/grouped-helper-export-inventory: + en: 84cb62303daf31bf + zh: 3478dd10d2a761fc +/agent-note-prune-dead-public-api-and-result-fields/proposal: + en: 414aca8de0a22c38 + zh: 9458a8db0cea11e7 +/agent-note-prune-dead-public-api-and-result-fields/alternatives-considered: + en: e8eecc41540c8d67 + zh: 60110bcdfaba5dad +/agent-note-prune-dead-public-api-and-result-fields/acceptance-criteria: + en: ef426fe8180fdfe8 + zh: 7e7f4cdb5d2ce655 +/agent-note-prune-dead-public-api-and-result-fields/risks: + en: c88948f52999d392 + zh: 3b1b98c54d082ae1 diff --git a/.agents/notes/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.i18n.yaml index fdadd105b9..334f3c3c9b 100644 --- a/.agents/notes/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.i18n.yaml @@ -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-12-prune-unused-skill-registry-api.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/rejected/simplification/2026-07-12-prune-unused-skill-registry-api.md -2026-07-12-prune-unused-skill-registry-api.md: 23fb0163296a1cf6cd8700ad745f60e52371a3b1 -2026-07-12-prune-unused-skill-registry-api.zh.md: e1496aab7bc77dc04600a95bea8a5db3f8955053 +/agent-note-prune-unused-skill-registry-api: + en: ff5d0311e8e1e032 + zh: a5c7ab3f62dc41b3 +/agent-note-prune-unused-skill-registry-api/problem: + en: dcd820314b04d01c + zh: c2131cbda05d276c +/agent-note-prune-unused-skill-registry-api/proposal: + en: 803833583cc47fe4 + zh: f9cc914a2b1acb07 +/agent-note-prune-unused-skill-registry-api/alternatives-considered: + en: b8f81e90df8b47c2 + zh: 04d7b9c5fef53f6d +/agent-note-prune-unused-skill-registry-api/acceptance-criteria: + en: 601e07918e345279 + zh: 36f81302639503b5 +/agent-note-prune-unused-skill-registry-api/risks: + en: 81cbe6895b2dd805 + zh: a52ce97e9e47d177 diff --git a/.agents/notes/rejected/simplification/2026-07-19-fold-compaction-package-split.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-19-fold-compaction-package-split.i18n.yaml index d524222cb5..7f181e0cc6 100644 --- a/.agents/notes/rejected/simplification/2026-07-19-fold-compaction-package-split.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-19-fold-compaction-package-split.i18n.yaml @@ -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-19-fold-compaction-package-split.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/rejected/simplification/2026-07-19-fold-compaction-package-split.md -2026-07-19-fold-compaction-package-split.md: 17d2ff5b8b663131eb3548dbf32d9489ca174f6b -2026-07-19-fold-compaction-package-split.zh.md: a981e0096516d51481360f95a0d72720a9023c5e +/agent-note-fold-the-single-compaction-backend-into-its-service-package: + en: 22e69a4c9159be12 + zh: c68cd8f8f536dc03 +/agent-note-fold-the-single-compaction-backend-into-its-service-package/problem: + en: 272d8d731bdf45b7 + zh: 7502a76b7d3cd367 +/agent-note-fold-the-single-compaction-backend-into-its-service-package/proposal: + en: 4db8bc2ee4039e44 + zh: e1a8c9714d1c4de0 +/agent-note-fold-the-single-compaction-backend-into-its-service-package/alternatives-considered: + en: 0c7f4bd4b7745c96 + zh: 9bf5a98dd485dbbd +/agent-note-fold-the-single-compaction-backend-into-its-service-package/acceptance-criteria: + en: 40a7d8d774a68237 + zh: 004e8b40effa2f8d +/agent-note-fold-the-single-compaction-backend-into-its-service-package/risks: + en: 899ebc22beb60647 + zh: ae23733b92c2ae36 diff --git a/.agents/notes/rejected/simplification/2026-07-19-make-jsonrpc-directional.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-19-make-jsonrpc-directional.i18n.yaml index 1f91fccbb3..a90825c6c8 100644 --- a/.agents/notes/rejected/simplification/2026-07-19-make-jsonrpc-directional.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-19-make-jsonrpc-directional.i18n.yaml @@ -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-19-make-jsonrpc-directional.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/rejected/simplification/2026-07-19-make-jsonrpc-directional.md -2026-07-19-make-jsonrpc-directional.md: 0a4660bbf12ab6a71f08547b69458bd25881bd64 -2026-07-19-make-jsonrpc-directional.zh.md: 706a342d6ef32c00d014033b314cbbe82314ce30 +/agent-note-make-json-rpc-completion-and-transport-directional: + en: ee6e55930abd711c + zh: 8f42bc9a2ae73653 +/agent-note-make-json-rpc-completion-and-transport-directional/problem: + en: d464014520aeb2ba + zh: 8d5b916ec1e52ae2 +/agent-note-make-json-rpc-completion-and-transport-directional/proposal: + en: 1877df56f4a6c009 + zh: 88945feba13fd7f2 +/agent-note-make-json-rpc-completion-and-transport-directional/implementation-plan: + en: 98d36962531961b4 + zh: 732397d5ac3e9da5 +/agent-note-make-json-rpc-completion-and-transport-directional/alternatives-considered: + en: aa128111a837e3ce + zh: e2e70c0e7ca577f4 +/agent-note-make-json-rpc-completion-and-transport-directional/acceptance-criteria: + en: c003617f26b1b309 + zh: a0c92fd01a820b9d +/agent-note-make-json-rpc-completion-and-transport-directional/risks: + en: 2a4ab79704013a71 + zh: 17722ca6beff0536 diff --git a/.agents/notes/rejected/simplification/2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.i18n.yaml index 5f4b4e03cb..2dc7fcd734 100644 --- a/.agents/notes/rejected/simplification/2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.i18n.yaml @@ -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-26-builtin-timer-promises-for-hand-rolled-sleeps.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/rejected/simplification/2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.md -2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.md: d925222c6c1f07707815353caa15b2ff51212e7f -2026-07-26-builtin-timer-promises-for-hand-rolled-sleeps.zh.md: 34128c671e898d7a6729ca3fa132585c7b53bdbe +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps: + en: 375b81101ea10ffd + zh: 4e63456174643d83 +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps/problem: + en: 88cc75cbfeb9bb8d + zh: 945620a5e6c4982d +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps/proposal: + en: dc6c2a587810f627 + zh: 42f5e2e23cc2d1e2 +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps/alternatives-considered: + en: 1897b5c8c6179b6a + zh: e39724cb2160c679 +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps/acceptance-criteria: + en: 47f2700d922cfed9 + zh: 78ee3b0e20ac9f86 +/agent-note-use-node-timers-promises-for-hand-rolled-cancellable-sleeps/risks: + en: a63132fb74c49961 + zh: 166a88d947d555e3 diff --git a/.agents/notes/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.i18n.yaml b/.agents/notes/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.i18n.yaml index 5b19f5d40c..0b54901ab4 100644 --- a/.agents/notes/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.i18n.yaml +++ b/.agents/notes/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.i18n.yaml @@ -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-07-26-dependency-swaps-rejected-by-nih-audit.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/rejected/simplification/2026-07-26-dependency-swaps-rejected-by-nih-audit.md -2026-07-26-dependency-swaps-rejected-by-nih-audit.md: 1ea01d96c5e817440c1daca871603d9cec78c06a -2026-07-26-dependency-swaps-rejected-by-nih-audit.zh.md: d7140b88a75d1af045fd32e4b1048554071d68e8 +/agent-note-dependency-swaps-rejected-by-the-2026-07-nih-audit: + en: 4c5b109a95f79af5 + zh: f6d451c5d5ddae94 +/agent-note-dependency-swaps-rejected-by-the-2026-07-nih-audit/problem: + en: 7b7248fc12313b69 + zh: a55e2c3376c401a7 +/agent-note-dependency-swaps-rejected-by-the-2026-07-nih-audit/proposal: + en: 0a8ed95bec08cf62 + zh: 06de9cab1c862ac4 +/agent-note-dependency-swaps-rejected-by-the-2026-07-nih-audit/alternatives-considered: + en: 229a0110ca47384e + zh: 3f86f858d56190c5 diff --git a/.agents/skills/dsh-doc/references/metadata-links-i18n.md b/.agents/skills/dsh-doc/references/metadata-links-i18n.md index 31f44bc79a..19ee5dde40 100644 --- a/.agents/skills/dsh-doc/references/metadata-links-i18n.md +++ b/.agents/skills/dsh-doc/references/metadata-links-i18n.md @@ -70,7 +70,7 @@ Line equality is a structural check, not proof of faithful meaning. Review still ## Bilingual consistency records -Keep the `*.i18n.yaml` sidecar for every bilingual pair. `verify-translation-pairing` consumes its Git blob hashes for last-confirmed-text recovery, verifies structure and exact line alignment, supports automatic merging, records generated regions, and seals archives. Re-record it with `pnpm run verify-translation-pairing --write ` after either language changes. Do not copy content hashes into README frontmatter: independent edits would change the same header line and turn otherwise mergeable prose into an owner-file conflict. +Keep the `*.i18n.yaml` sidecar for every bilingual pair. It records a hash pair per heading section, excluding fenced code blocks and generated regions, so edits to different sections merge with Git's default text merge; generated data belongs in generated regions that the generator writes into both pages; `verify-translation-pairing` compares those entries with the current contents and verifies structure. Re-record it with `pnpm run verify-translation-pairing --write ` after either language changes. Do not copy content hashes into README frontmatter: independent edits would change the same header line and turn otherwise mergeable prose into an owner-file conflict. ## Dev Note diff --git a/.agents/skills/dsh-translate-docs/SKILL.md b/.agents/skills/dsh-translate-docs/SKILL.md index 5e5ec7d871..6ff2650c74 100644 --- a/.agents/skills/dsh-translate-docs/SKILL.md +++ b/.agents/skills/dsh-translate-docs/SKILL.md @@ -39,7 +39,7 @@ When translations need to be written from scratch, the orchestrating agent does ### Sources of truth (read, don't re-summarize) -- **[docs/i18n/README.md](../../../docs/i18n/README.md)** — the pairing contract: the three-file pair (`foo.md`, `foo.zh.md`, `foo.i18n.yaml`), the consistency record's both-side blob hashes, the language-switcher lines, scope, and exclusions. +- **[docs/i18n/README.md](../../../docs/i18n/README.md)** — the pairing contract: the three-file pair (`foo.md`, `foo.zh.md`, `foo.i18n.yaml`), the consistency record's per-section hashes, the language-switcher lines, scope, and exclusions. - **[docs/i18n/translation-rules.md](../../../docs/i18n/translation-rules.md)** — how to translate: faithfulness, structure preservation, terminology discipline, typography (MUST/SHOULD levels). - **[docs/i18n/terminology.md](../../../docs/i18n/terminology.md)** — the terminology table, binding in both directions. Load it BEFORE translating, not when a term feels uncertain; the terms you don't notice are the ones that drift. - **[docs/i18n/translation-prompt.md](../../../docs/i18n/translation-prompt.md)** — the automated pipeline's calibrated machine-consumed template. Agents using this skill do not render it; the terminology table is the only repository file the automated renderer injects, while this skill and `translation-rules.md` remain binding for agent-authored translations. @@ -64,7 +64,7 @@ When translations need to be written from scratch, the orchestrating agent does ## Finish the pair 1. Switcher: `[English](foo.md) | 中文` immediately after the Chinese file's H1, `English | [中文](foo.zh.md)` after the English file's H1 — add both if this is a new pair, except that a generator-owned English source stays byte-identical to generator output and omits its switcher while the Chinese counterpart still links back. -2. Record consistency: `pnpm run verify-translation-pairing --write ` recomputes and records both sides' full blob hashes in `foo.i18n.yaml`. The yaml diff in your PR is the reviewable statement "I confirmed these two say the same thing" — only run it after you actually have. +2. Record consistency: `pnpm run verify-translation-pairing --write ` recomputes and records the per-section hashes in `foo.i18n.yaml`. The yaml diff in your PR is the reviewable statement "I confirmed these two say the same thing" — only run it after you actually have. 3. No manifest entry is needed for an ordinary document: every in-scope source requires a pair. Change [scripts/translation-pairing.manifest.json](../../../scripts/translation-pairing.manifest.json) only when the owning policy documents a genuine generated, instructional, or bilingual-by-construction exclusion. 4. Before the PR: the touched pairs are green under the scoped check; `pnpm run doc-sync` (which includes the corpus-wide pairing check plus `verify-md-wrap`/`verify-md-links`) runs once at PR level per [dsh-pre-push-checks](../dsh-pre-push-checks/SKILL.md), not inside each translation task. 5. Keep the PR reviewable: state which pairs are new versus minimally updated and list 「待定术语」 prominently. diff --git a/.gitattributes b/.gitattributes index ed321c2b18..e878c9db19 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,10 +8,6 @@ *.pdf binary -# Pairing records are generated from the three confirmed owner-blob pairs. -# The worktree-local installer registers the fail-closed driver command. -*.i18n.yaml merge=dsh-translation-pairing - # The persistence catalog is the readable projection of these generated schemas. docs/persistence-schema.json linguist-generated=true docs/persistence-changes/*.schema.json linguist-generated=true diff --git a/.github/issue-management/README.i18n.yaml b/.github/issue-management/README.i18n.yaml index beaf888252..0d62118377 100644 --- a/.github/issue-management/README.i18n.yaml +++ b/.github/issue-management/README.i18n.yaml @@ -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 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 .github/issue-management/README.md -README.md: 49e91859f4b22fda13d0e93c6e6ea492272f6951 -README.zh.md: 8424f90cd2e3a59ba1212f64f3f1081a984b55f8 +/: + en: d5e0fd5da06b95ab + zh: db4281526c40cc1d +/issue-management: + en: 44fb5f74b6908794 + zh: cc25f420bac7d40b +/issue-management/summary: + en: b3f6f5f011516611 + zh: 7e6c83caf28ea807 +/issue-management/table-of-contents: + en: cff988027897ee0d + zh: 36a444b895dfdc48 +/issue-management/pull-request-policy: + en: ad11184112771cc8 + zh: cc8c112a76dcf62e +/issue-management/lifecycle-events: + en: 62bca299f0a5e213 + zh: 8853e01a9e3776ec +/issue-management/configuration-and-limitations: + en: 3ef00734bb83737f + zh: 9d91319c953496dd +/issue-management/module-ownership: + en: e83f694e0be99e69 + zh: 85fb201f86af2ce8 +/issue-management/verification: + en: b52fe10bcb063600 + zh: 3362170645a58eff +/issue-management/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/.github/preview-sizing/README.i18n.yaml b/.github/preview-sizing/README.i18n.yaml index cd5241c300..d2372d8529 100644 --- a/.github/preview-sizing/README.i18n.yaml +++ b/.github/preview-sizing/README.i18n.yaml @@ -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 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 .github/preview-sizing/README.md -README.md: 142854e582523eb1ed48924a73fbe29ea6164bf6 -README.zh.md: a71325189dc7966df87e14bbb591af3c76a3d498 +/pr-preview-runner-sizing: + en: 3c780cfadb127740 + zh: 07de037f824d70c6 +/pr-preview-runner-sizing/summary: + en: a6a48d1e702098d2 + zh: 69b246b95e09e638 +/pr-preview-runner-sizing/table-of-contents: + en: 0395d2bbce9a9532 + zh: a05a2ed9b0eb8476 +/pr-preview-runner-sizing/comparison-requirements: + en: 2374f332d040ece2 + zh: 7f914fb83cfb5caa +/pr-preview-runner-sizing/publication-semantics: + en: 25ee2f4b26ef7770 + zh: 788b7fb4bee6e159 +/pr-preview-runner-sizing/dev-note: + en: 85ac56719e30a350 + zh: f53f31c1b8553cc0 diff --git a/BRAND_GUIDELINES.i18n.yaml b/BRAND_GUIDELINES.i18n.yaml index c7147b4425..2f7eb7ceab 100644 --- a/BRAND_GUIDELINES.i18n.yaml +++ b/BRAND_GUIDELINES.i18n.yaml @@ -1,6 +1,7 @@ -# 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 BRAND_GUIDELINES.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 BRAND_GUIDELINES.md -BRAND_GUIDELINES.md: 900cf7bcec70ff78c6f55ed535897239cd4648df -BRAND_GUIDELINES.zh.md: 94b239b6f6f4021f52da233cbefd23b4cc11f675 +/deepseek-harness-brand-asset-usage-guidelines: + en: 23933888033edf18 + zh: eaa5afb9e2cb4d25 diff --git a/CONTRIBUTING.i18n.yaml b/CONTRIBUTING.i18n.yaml index a7dabc2fff..eaafcdccad 100644 --- a/CONTRIBUTING.i18n.yaml +++ b/CONTRIBUTING.i18n.yaml @@ -1,6 +1,7 @@ -# 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 CONTRIBUTING.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 CONTRIBUTING.md -CONTRIBUTING.md: 9f30e23a6d9567db7d6097cb82e481b16dda299e -CONTRIBUTING.zh.md: 35eb0b87fc4d9af11bef616039570dc5e6a1b309 +/contributing: + en: 08d2f421ff3617f4 + zh: 9d060d70ad186dc5 diff --git a/README.i18n.yaml b/README.i18n.yaml index ce6f75b18d..7f314d80ef 100644 --- a/README.i18n.yaml +++ b/README.i18n.yaml @@ -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 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 README.md -README.md: 423bccd7d9352dbc48f1705f37d35642e74f5b41 -README.zh.md: c760f87e4ac3b7dbb7bb55d733e31db5ab379836 +/deepseek-harness: + en: f68c4f080ce55ff2 + zh: 88a76d7f7f0b260e +/deepseek-harness/developer-preview: + en: 4ef4d8a71ac143f0 + zh: 1bfc3149ba8e5543 +/deepseek-harness/run: + en: 4e0248e4c6474fc6 + zh: eb2fb8d78c7d6bc0 +/deepseek-harness/run/run-from-npm: + en: e22005cd42e6cbad + zh: 0f536f4208df1d60 +/deepseek-harness/run/run-from-source: + en: 819e3f7c144d0d64 + zh: de815f040975dba7 +/deepseek-harness/community-and-support: + en: 42848f543aff6e02 + zh: d46a07bdc6f36629 +/deepseek-harness/contributing: + en: cabc2d3e9f8898bd + zh: 83b6d238bae29ce3 +/deepseek-harness/development: + en: 803ca2b11b497bed + zh: 8b4071eb0e7783ef +/deepseek-harness/citation: + en: 6704e9e5a8d49a91 + zh: 85c9cdd8d56f8e9d +/deepseek-harness/license: + en: 926995344fc1c72b + zh: c92fab5abf85932f diff --git a/SAFETY.i18n.yaml b/SAFETY.i18n.yaml index 6010fd783e..148ee39597 100644 --- a/SAFETY.i18n.yaml +++ b/SAFETY.i18n.yaml @@ -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 SAFETY.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 SAFETY.md -SAFETY.md: 2b76f00e0619ee69553afdc507df361080f4d3ac -SAFETY.zh.md: 6f7dae47b3e47ddfb155adb9c8c868b516d75360 +/safety: + en: a374f70c56b3f221 + zh: a07f7a9ba9af40fc +/safety/experimental-status: + en: 39a995a6c819f73e + zh: e577df19392736ac +/safety/sandbox-limitations: + en: a2b6cf1311f3abb6 + zh: c3694663312f4d6c +/safety/responsible-use: + en: ca3e9da7c0b360fe + zh: c0a6891a197d48cd +/safety/no-warranty-or-liability: + en: 71a2989f530f2018 + zh: e90e55f11068a91f diff --git a/apps/cli/README.i18n.yaml b/apps/cli/README.i18n.yaml index 430fd91f46..e585c5c6f2 100644 --- a/apps/cli/README.i18n.yaml +++ b/apps/cli/README.i18n.yaml @@ -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 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 apps/cli/README.md -README.md: 765440438175083d2dbd765592731df5ec148bcf -README.zh.md: 08db105b160199cb9a64276f273b8b00f0d21c09 +/deepseek-ai-dsh: + en: ebdc75fa0da18801 + zh: 5c6cd2554b8f8a98 +/deepseek-ai-dsh/entry-modes: + en: 093936b9e1a59bea + zh: 12be7d2d931d9671 +/deepseek-ai-dsh/app-arguments: + en: cc03e6b75206661b + zh: 99e41f4143198352 +/deepseek-ai-dsh/profiles: + en: 79cad979b0f7895c + zh: b0f922a4b43accf8 +/deepseek-ai-dsh/optional-overlays: + en: c1b3ea3b79a975e4 + zh: 61070ee19b59f7e6 +/deepseek-ai-dsh/development: + en: 99a36e4f7ea3f9c7 + zh: 07ca2934de700caa diff --git a/apps/cli/reference/README.i18n.yaml b/apps/cli/reference/README.i18n.yaml index 3d7319ec04..96646ef29a 100644 --- a/apps/cli/reference/README.i18n.yaml +++ b/apps/cli/reference/README.i18n.yaml @@ -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 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 apps/cli/reference/README.md -README.md: 094d8ba5bfaa851429adbfa872105550e8b63fe2 -README.zh.md: 2bd6abde1cb854ec9598f8f7cc10cc0a7538d2f9 +/dsh-cli-behavior-reference: + en: d25712a65d21ab45 + zh: b1c57b706bc64085 +/dsh-cli-behavior-reference/profile-boot: + en: e3a159750f5f9ed3 + zh: e02d9004fcc239f9 +/dsh-cli-behavior-reference/profile-boot/app-arguments: + en: 241e5525aa09a33b + zh: 398f853143097154 +/dsh-cli-behavior-reference/profile-boot/config-schema-dump: + en: a356f8a68f3b3685 + zh: c718713b5d709295 +/dsh-cli-behavior-reference/startup-diagnostics: + en: d6368bf97a02bd57 + zh: 2ab7888a108961ce +/dsh-cli-behavior-reference/plugin-management: + en: 9980ff1600fa9460 + zh: cc66ba45e27b5540 +/dsh-cli-behavior-reference/web-profile: + en: 12bba432c07573bf + zh: ab6b365cfb95003f +/dsh-cli-behavior-reference/shared-deployment-behavior: + en: 24e3da3716d261fe + zh: 060611966db4ca69 +/dsh-cli-behavior-reference/source-execution: + en: 05c2b23790f7b296 + zh: 51f809020fb230a1 diff --git a/apps/desktop/README.i18n.yaml b/apps/desktop/README.i18n.yaml index 6a224c8ba2..b4f6e3304b 100644 --- a/apps/desktop/README.i18n.yaml +++ b/apps/desktop/README.i18n.yaml @@ -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 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 apps/desktop/README.md -README.md: fb83b0fc66c281a596d743b561e0ee33f32b2c04 -README.zh.md: 490eff4b35a3e7b52108ff529ed9d3b432f68bb3 +/deepseek-harness-desktop: + en: 907e8bc5ebef2678 + zh: f23af881b27cad94 +/deepseek-harness-desktop/key-technical-decisions: + en: 47ec880441223749 + zh: 3be7731db888b4a4 +/deepseek-harness-desktop/key-technical-decisions/bundled-workspace-dependencies: + en: c2eb16f568cd8554 + zh: 686d64af17b10375 +/deepseek-harness-desktop/installation-ownership: + en: 3fe85101acf17b0a + zh: 70cd207cadc85b94 +/deepseek-harness-desktop/installation-ownership/runtime-and-plugin-activation: + en: 0d11af8639977a6d + zh: 86b086b12d2210d3 +/deepseek-harness-desktop/develop: + en: 99f5299ebcf69b97 + zh: 0411074daee0cd79 +/deepseek-harness-desktop/develop/startup-onboarding: + en: f01d0dbafe8b1613 + zh: 91ad92f5d7e505c4 +/deepseek-harness-desktop/develop/welcome-window-appearance: + en: 7220801ccc3b2e6b + zh: 042dc97976aef979 +/deepseek-harness-desktop/package: + en: 4cd8a8da6977928d + zh: 9f624855a2edac37 +/deepseek-harness-desktop/package/release-versions: + en: f461b255133384cc + zh: 2b9db718f22fdd04 +/deepseek-harness-desktop/package/runtime-file-selection: + en: 7d72469be4975afe + zh: 2f644b582cb581be +/deepseek-harness-desktop/package/upload-updates: + en: 7828da306d42ed2e + zh: 0b8bc61c5f612dcb +/deepseek-harness-desktop/package/unsigned-windows-test-installer: + en: cfd5780dd26a8e46 + zh: f7a16b1ede793b7b +/deepseek-harness-desktop/package/windows-installer-interface: + en: f176a8b1c7de3064 + zh: 6ea2dbe6bb808c34 +/deepseek-harness-desktop/package/windows-ev-signing: + en: 8efe3498dbe8686d + zh: a88c16f20a9430f3 +/deepseek-harness-desktop/updates: + en: 8ce8647a3ff94b9a + zh: 93250420c9d6f4ce +/deepseek-harness-desktop/updates/mandatory-update-policy: + en: b99d35abf25d5347 + zh: ed250334da3f149d +/deepseek-harness-desktop/updates/local-updater-qualification: + en: bf34de891411c618 + zh: aa6923fd5060174b +/deepseek-harness-desktop/low-level-development-overrides: + en: 0b225f914142ef0b + zh: 9ffd07768d37824e +/deepseek-harness-desktop/known-limitations: + en: e084ae80b7ebfaf1 + zh: f20ba012b4330a3f +/deepseek-harness-desktop/dev-note: + en: 8e26b460ba31f21b + zh: fbcd0307b3867125 diff --git a/apps/desktop/tests/README.i18n.yaml b/apps/desktop/tests/README.i18n.yaml index 6dd6065d3b..b74175fd52 100644 --- a/apps/desktop/tests/README.i18n.yaml +++ b/apps/desktop/tests/README.i18n.yaml @@ -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 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 apps/desktop/tests/README.md -README.md: a2684a2bced4326bdc316ff56d80003061d0136d -README.zh.md: fba5b65aa41aa14b9971f80676c8f0fef4d7be9e +/desktop-local-update-verification: + en: 194f1f0f1ca90743 + zh: 773ca28e04c8911f +/desktop-local-update-verification/summary: + en: 94559f431b0b2151 + zh: 1a22166a2bc59686 +/desktop-local-update-verification/table-of-contents: + en: ee11b5279fb8c29b + zh: f9520fd7adfcd2fd +/desktop-local-update-verification/manual-walkthrough: + en: c4b4ee8763d8464a + zh: ee2159bc08966592 +/desktop-local-update-verification/evidence: + en: bc4634c9a9ceddca + zh: 21370a4c088b50df +/desktop-local-update-verification/open-verification: + en: 20e9ea47acb1ff50 + zh: acce24b56d57e12c diff --git a/apps/desktop/tests/installed-update/README.i18n.yaml b/apps/desktop/tests/installed-update/README.i18n.yaml index 036b9a3a62..1ac20fbb75 100644 --- a/apps/desktop/tests/installed-update/README.i18n.yaml +++ b/apps/desktop/tests/installed-update/README.i18n.yaml @@ -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 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 apps/desktop/tests/installed-update/README.md -README.md: b847960862931a8c7ef769908d046cfb0f893d41 -README.zh.md: ac2bed4e2a0304f0362c36504128ff17fc5ba693 +/: + en: e509b9908db08b9b + zh: d01d0d95db36098c +/windows-installed-update-walkthrough: + en: c6901185a4200bc7 + zh: 202158cb8abc9d94 +/windows-installed-update-walkthrough/summary: + en: a462606fa87984c1 + zh: c40305ba98d9cd6a +/windows-installed-update-walkthrough/table-of-contents: + en: bd61ff806d57cbb1 + zh: 8b09719bc3b247c8 +/windows-installed-update-walkthrough/prepare-materials: + en: 1f7d9426be57a23a + zh: 9f2be099d3d1a026 +/windows-installed-update-walkthrough/operator-sequence: + en: 8a7f275812dbe11f + zh: 24dbf32328f9c0dd +/windows-installed-update-walkthrough/evidence-and-recovery: + en: 97da316608766d0e + zh: 22a32a16b4677477 +/windows-installed-update-walkthrough/dev-note: + en: 550335915d9ca83b + zh: f6fa7989e835b029 diff --git a/apps/desktop/tests/installed-update/network/README.i18n.yaml b/apps/desktop/tests/installed-update/network/README.i18n.yaml index cc8eafa073..c8725e467b 100644 --- a/apps/desktop/tests/installed-update/network/README.i18n.yaml +++ b/apps/desktop/tests/installed-update/network/README.i18n.yaml @@ -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 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 apps/desktop/tests/installed-update/network/README.md -README.md: 51b75c9985de8a01274ffee504c778e581adbfe3 -README.zh.md: 2a1003f980a8eb729a2443081c4728eb829adcfb +/: + en: ff33c1d52077d4b7 + zh: d82f73667883db1d +/test-application-network-fault: + en: 4aee13c0f4d9b27b + zh: 925cd9bf0cc662a8 +/test-application-network-fault/summary: + en: 04c1e1ee9a99d15f + zh: b618af65f0be079c +/test-application-network-fault/table-of-contents: + en: 8cdb903f0292dff0 + zh: 2d94d8b3d46e9d75 +/test-application-network-fault/prepare: + en: 013ceb8d01e604e2 + zh: 9ca5a8d75e3db8b6 +/test-application-network-fault/block-and-restore: + en: 8754037c16032fca + zh: 844e28c5b3d2de26 +/test-application-network-fault/evidence-and-limitations: + en: 0325ef6b06fd3518 + zh: 20123cfc13fc488e +/test-application-network-fault/dev-note: + en: 10c2c43f94c40d8a + zh: dea0798ceb5553c1 diff --git a/apps/desktop/tests/installed-update/publication/README.i18n.yaml b/apps/desktop/tests/installed-update/publication/README.i18n.yaml index 22d7b5eb5c..5839acca4a 100644 --- a/apps/desktop/tests/installed-update/publication/README.i18n.yaml +++ b/apps/desktop/tests/installed-update/publication/README.i18n.yaml @@ -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 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 apps/desktop/tests/installed-update/publication/README.md -README.md: ae91020f4d14cb6d9190562c873afc5ee2c7d072 -README.zh.md: fa119a23718dedc341bc0d6150ef22b902696251 +/: + en: d68b29f85e3467f2 + zh: ab8af9ba530dbf58 +/test-update-upload-and-publication: + en: b2901cea239d33b8 + zh: fc9e86660a05c9a7 +/test-update-upload-and-publication/summary: + en: 1bfd00a24050f90f + zh: baecac1b319c7474 +/test-update-upload-and-publication/table-of-contents: + en: 852cb727f419695e + zh: 4923ccde4b312dc6 +/test-update-upload-and-publication/prerequisites: + en: e435e427e38756b5 + zh: 0a3fc104c7ea024d +/test-update-upload-and-publication/operator-sequence: + en: ec62412e0327ba5b + zh: 90fe517535d8a116 +/test-update-upload-and-publication/evidence-and-recovery: + en: a34627fc81e143e3 + zh: 5069e86f05987f4c +/test-update-upload-and-publication/dev-note: + en: 6eb02d896722c4ca + zh: 9d08782425e6f1b0 diff --git a/apps/web/tests/README.i18n.yaml b/apps/web/tests/README.i18n.yaml index 6828bcc5ae..d667d87ac0 100644 --- a/apps/web/tests/README.i18n.yaml +++ b/apps/web/tests/README.i18n.yaml @@ -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 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 apps/web/tests/README.md -README.md: 1dce900ab2ffa16850fe50573f9177088c8201db -README.zh.md: fd14377bc01897e7d330d36603601f9dce16e295 +/apps-web-browser-e2e: + en: e1c3082481d0cace + zh: 28cc4c5e63c0219c +/apps-web-browser-e2e/completion-observations: + en: 47f5168d5f93be53 + zh: 79fc78415e76950c +/apps-web-browser-e2e/these-are-host-face-tests: + en: 8c406d423c8e2137 + zh: a66a144fd146f56c +/apps-web-browser-e2e/do-not-import-deepseek-ai-dsh-client-here: + en: 4ec4978cd394dc0d + zh: 431e8dfd98e99917 diff --git a/apps/web/tests/fixtures/office/README.i18n.yaml b/apps/web/tests/fixtures/office/README.i18n.yaml index c997788ced..b6b2611a10 100644 --- a/apps/web/tests/fixtures/office/README.i18n.yaml +++ b/apps/web/tests/fixtures/office/README.i18n.yaml @@ -1,6 +1,7 @@ -# 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 apps/web/tests/fixtures/office/README.md -README.md: affa0b57b72414beb4b8e75f19481a92b8745d27 -README.zh.md: ff49b01c51754ae00c613a45ebc8d14f142da9c1 +/binary-office-fixtures: + en: 285c49550e034ce9 + zh: 1d9b91573398456d diff --git a/benchmarks/active-stream-reconnect/README.i18n.yaml b/benchmarks/active-stream-reconnect/README.i18n.yaml index 2480afa39a..25d326e31e 100644 --- a/benchmarks/active-stream-reconnect/README.i18n.yaml +++ b/benchmarks/active-stream-reconnect/README.i18n.yaml @@ -1,6 +1,7 @@ -# 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 benchmarks/active-stream-reconnect/README.md -README.md: e75a41eba3952bb4db343c2018e217e6f5e88f96 -README.zh.md: 3d831208144e3810d353fb64fc5ae4adae766bdd +/active-assistant-reconnect-benchmark: + en: 74be7a07bbc676b8 + zh: e6aeac1f27343c24 diff --git a/benchmarks/agent-continuation/README.i18n.yaml b/benchmarks/agent-continuation/README.i18n.yaml index 3e8b5a92e3..8ffb9342d0 100644 --- a/benchmarks/agent-continuation/README.i18n.yaml +++ b/benchmarks/agent-continuation/README.i18n.yaml @@ -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 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 benchmarks/agent-continuation/README.md -README.md: 98a8f837b9021ee7efbf40c2275362185a215ca9 -README.zh.md: 1b7d0d3efd9b8ee4be8f4acf48fc97af11d3fd3e +/backend-continuation-benchmarks: + en: 5617153059c8a2da + zh: ea0f0023d3c9dd63 +/backend-continuation-benchmarks/summary: + en: 211ad192bd000827 + zh: a7b9422642a21f9e +/backend-continuation-benchmarks/table-of-contents: + en: 66a769ce60d49ff3 + zh: 7e0bfa7c598157fa +/backend-continuation-benchmarks/run: + en: 5140630cdc1a6fc2 + zh: e52b94c4d5a5f80f +/backend-continuation-benchmarks/measurements: + en: c57e024b6732b27f + zh: 93357b93fdd7f975 +/backend-continuation-benchmarks/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/benchmarks/long-session-browser/README.i18n.yaml b/benchmarks/long-session-browser/README.i18n.yaml index 44bf2e5720..98e2b68a58 100644 --- a/benchmarks/long-session-browser/README.i18n.yaml +++ b/benchmarks/long-session-browser/README.i18n.yaml @@ -1,6 +1,13 @@ -# 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 benchmarks/long-session-browser/README.md -README.md: 600ac50a66fa9f680b6b05b5599109c954dc69da -README.zh.md: dd2dc914cd129286f8205b90d2f63cb9a57d99d2 +/long-session-browser-benchmark: + en: ef462d52a73e1f6c + zh: 51e7e99cb2b1d47b +/long-session-browser-benchmark/run: + en: e52e52132fec9fbd + zh: fd2265d32153358a +/long-session-browser-benchmark/measurements: + en: 5182df5387e843a9 + zh: 3e67d96252c27400 diff --git a/docs/agent-lifecycle.i18n.yaml b/docs/agent-lifecycle.i18n.yaml index 0a03ee7f38..cb75783c9c 100644 --- a/docs/agent-lifecycle.i18n.yaml +++ b/docs/agent-lifecycle.i18n.yaml @@ -1,6 +1,10 @@ -# 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 agent-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 docs/agent-lifecycle.md -agent-lifecycle.md: 6ffe3c2b47e766ac985b3192a1c08787821fc46e -agent-lifecycle.zh.md: c4b2fa70dbdb0487c3871b6e65227eac8b062e24 +/: + en: 41d772192075e133 + zh: 305a6826a598b96d +/agent-turn-and-step-lifecycle: + en: a1389c8ed7e37324 + zh: c2944b9192af4ec9 diff --git a/docs/api-gateway.i18n.yaml b/docs/api-gateway.i18n.yaml index e11ee881f4..3823aee1cd 100644 --- a/docs/api-gateway.i18n.yaml +++ b/docs/api-gateway.i18n.yaml @@ -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 api-gateway.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 docs/api-gateway.md -api-gateway.md: 957f40775857d8f57af436a44690fd5a453aeeae -api-gateway.zh.md: 1062adcc89909d5ce3701ac82b55c5d0ece21ab0 +/api-gateway: + en: 735eb4f22d5f6f71 + zh: 1ca2759961efdc06 +/api-gateway/programming-model: + en: ea12b64211f0d377 + zh: 032e5c0d799c7529 +/api-gateway/component-responsibilities: + en: e29f1d7026291075 + zh: 15e361e797d44fce +/api-gateway/strict-generation-pipeline: + en: 06c84cb25fb6c940 + zh: d639c6e0bd271759 +/api-gateway/runtime-invocation: + en: 2a2fed340aaa926c + zh: 46bb1f500c870a76 +/api-gateway/src-development-fallback: + en: 9570ffe7a348e5ac + zh: 2b70b61b1ff1fbb0 +/api-gateway/development-mode: + en: ba090d76471dd663 + zh: fcddcb232de98248 +/api-gateway/boundaries: + en: e6befc5f8c90f97b + zh: 3ade08102542a894 diff --git a/docs/architecture.i18n.yaml b/docs/architecture.i18n.yaml index 133e6d9aa0..8fb35b34ba 100644 --- a/docs/architecture.i18n.yaml +++ b/docs/architecture.i18n.yaml @@ -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 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 docs/architecture.md -architecture.md: 634214943c14fe049f141350cad6518167f52bb1 -architecture.zh.md: 6082c5c86a900c03017fbf15f6c4abd41a48a9f9 +/deepseek-harness-architecture: + en: 2125f3ec236bc7b2 + zh: 23d8815579592ec4 +/deepseek-harness-architecture/cordis: + en: da5060e577578ea7 + zh: 2e77d570e32d8938 +/deepseek-harness-architecture/profiles-and-bundles: + en: 8ef4912295aa32f3 + zh: cf8848a83743f3cc +/deepseek-harness-architecture/application-launch: + en: 334b4f390b6e376b + zh: ce094f24c6162be3 +/deepseek-harness-architecture/desktop-application: + en: 8df40913a953f497 + zh: c46278a7813661ce +/deepseek-harness-architecture/core-packages: + en: b4a221ac2910600a + zh: 341046d3c9a9c9cd +/deepseek-harness-architecture/events: + en: 214c3c81c21df6f9 + zh: 75d2cdc3c9fc9930 +/deepseek-harness-architecture/turn-flow: + en: 0ea92353b5344090 + zh: 46ec58a8e6259335 +/deepseek-harness-architecture/session-log: + en: 03a4394c86b18d91 + zh: f5df5939f9b42990 +/deepseek-harness-architecture/capability-seams: + en: 93d1dc2eeda4aec2 + zh: ee7a9da89151ea17 +/deepseek-harness-architecture/where-new-behavior-goes: + en: 9b2eb0539a9cd0d6 + zh: 4f575277b91d4e5c diff --git a/docs/capability-seams.i18n.yaml b/docs/capability-seams.i18n.yaml index 13405e808b..424540985a 100644 --- a/docs/capability-seams.i18n.yaml +++ b/docs/capability-seams.i18n.yaml @@ -1,6 +1,10 @@ -# 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 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 docs/capability-seams.md -capability-seams.md: 2914231ceaaa243b0c918a9477e554aa1641ad91 -capability-seams.zh.md: a1223a351c26d668705df327102ac5e7e521f9ec +/: + en: 41d772192075e133 + zh: 5ef3da69b4de1d8a +/capability-seams-and-core-services: + en: ea114a5c950fa88f + zh: 1d42873021ba511d diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 669913fd69..355b83b670 100644 --- a/docs/config-catalog.i18n.yaml +++ b/docs/config-catalog.i18n.yaml @@ -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 config-catalog.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 docs/config-catalog.md -config-catalog.md: e3161d1e72e5a586b9b9662e1f8005caa8d320ad -config-catalog.zh.md: eeba33336e3a6d3d699068835521d13867a34427 +/: + en: 0977df2d5eaa10e9 + zh: de18ef966e262873 +/plugin-config-catalog: + en: e372950a550bc4a7 + zh: 43ac5df440879eb1 +/plugin-config-catalog/loadable-plugins-with-no-config: + en: 171d45e5a8385abc + zh: 0fc1aa514caea442 +/plugin-config-catalog/seam-packages-not-directly-loadable: + en: 4555f0e0510d8c80 + zh: b05727ed838f4570 +/plugin-config-catalog/library-packages-no-plugin-entry: + en: 2efa9041cc87895c + zh: d5f13c9c77bd5593 diff --git a/docs/config-catalog.md b/docs/config-catalog.md index e3161d1e72..3a1128fded 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -5,15 +5,18 @@ Every `config:` block a `cordis.yml` entry can set: for each loadable harness package, the verbatim config declaration (JSDoc included) its `apply` function or service constructor receives, with every referenced type pasted alongside (package-local types) or linked (everything else). The paste is the plugin's full declared config type — a field the runtime schema deliberately excludes is a runtime-only seam (its own JSDoc says so) and is not settable from `cordis.yml`. This is the **deployment**-axis reference — the wiring a plugin author works against is the generated Cordis API region on each [subsystem page](subsystems/core.md), the model-facing tool schemas are the [tool catalog](tool-catalog.md), and [subsystems/](subsystems/core.md) documents the types these declarations reference. -This file is GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit it by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field. +Both language versions of this file are GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit them by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field. -A `Requires:` line lists the service keys the plugin `inject`s: its `cordis.yml` tree must also load providers for those services. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here. +Each package entry labels its data with three identifiers: `inject` lists the service keys the plugin injects, so its `cordis.yml` tree must also load providers for those services; `refs` lists the referenced types that are not pasted here; `source` links the file that declares the config. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here. + ## `@deepseek-ai/dsh-acp` -Requires: `agents` · `llm` · `sessionPersistence` · `sessions` +- `inject`: `agents` · `llm` · `sessionPersistence` · `sessions` +- `refs`: `Stream` (`@agentclientprotocol/sdk`) +- `source`: [`packages/acp/acp/src/index.ts:75`](../packages/acp/acp/src/index.ts) ```ts config-catalog /** Plugin config: the provider/model selection used for each ACP-created agent. */ @@ -28,15 +31,16 @@ export interface AcpConfig { stream?: Stream } ``` + -Depends on: `Stream` (`@agentclientprotocol/sdk`) - -Source: [`packages/acp/acp/src/index.ts:75`](../packages/acp/acp/src/index.ts) - + ## `@deepseek-ai/dsh-agent-default-model` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/core/agent-default-model/src/index.ts:24`](../packages/core/agent-default-model/src/index.ts) + ```ts config-catalog /** Default model selection supplied by plugin configuration. */ export interface Config { @@ -48,16 +52,15 @@ export interface Config { reasoningEffort: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/core/agent-default-model/src/index.ts:24`](../packages/core/agent-default-model/src/index.ts) - + ## `@deepseek-ai/dsh-agent-instructions` -Requires: `sessionProjections` +- `inject`: `sessionProjections` +- `source`: [`packages/context/agent-instructions/src/config.ts:18`](../packages/context/agent-instructions/src/config.ts) ```ts config-catalog /** User-facing workspace instruction loader configuration. */ @@ -82,14 +85,16 @@ export interface Config { localInstructionFileCandidates?: string[] } ``` + -Source: [`packages/context/agent-instructions/src/config.ts:18`](../packages/context/agent-instructions/src/config.ts) - + ## `@deepseek-ai/dsh-agent-loop` -Requires: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` +- `refs`: [`AgentOptions`](subsystems/core.md) · [`SessionId`](subsystems/core.md) · `Volatile` (`@deepseek-ai/cosmokit`) +- `source`: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) ```ts config-catalog /** Agent-loop plugin configuration. */ @@ -112,31 +117,31 @@ export interface Config { })[] } ``` + -Depends on: [`AgentOptions`](subsystems/core.md) · [`SessionId`](subsystems/core.md) · `Volatile` (`@deepseek-ai/cosmokit`) - -Source: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) - + ## `@deepseek-ai/dsh-agent-preset` -Requires: `agentPresets` +- `inject`: `agentPresets` +- `refs`: [`PresetDefinition`](../packages/preset/agent-preset-registry/src/index.ts) +- `source`: [`packages/preset/agent-preset/src/index.ts:9`](../packages/preset/agent-preset/src/index.ts) ```ts config-catalog /** Definition submitted to the preset registry. */ export type Config = PresetDefinition ``` + -Depends on: [`PresetDefinition`](../packages/preset/agent-preset-registry/src/index.ts) - -Source: [`packages/preset/agent-preset/src/index.ts:9`](../packages/preset/agent-preset/src/index.ts) - + ## `@deepseek-ai/dsh-agent-preset-registry` -Requires: `loader` · `sessionProjections` +- `inject`: `loader` · `sessionProjections` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/preset/agent-preset-registry/src/preset.ts:13`](../packages/preset/agent-preset-registry/src/preset.ts) ```ts config-catalog /** Registry selection policy. */ @@ -149,16 +154,16 @@ export interface Config { modeSelectionEnabled: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/preset/agent-preset-registry/src/preset.ts:13`](../packages/preset/agent-preset-registry/src/preset.ts) - + ## `@deepseek-ai/dsh-agent-tool-presentation` -Requires: `tools` +- `inject`: `tools` +- `refs`: [`ToolPresentationMode`](subsystems/tools.md) +- `source`: [`packages/core/agent-tool-presentation/src/index.ts:38`](../packages/core/agent-tool-presentation/src/index.ts) ```ts config-catalog /** Plugin config. */ @@ -173,16 +178,15 @@ export interface Config { mode: ToolPresentationMode } ``` + -Depends on: [`ToolPresentationMode`](subsystems/tools.md) - -Source: [`packages/core/agent-tool-presentation/src/index.ts:38`](../packages/core/agent-tool-presentation/src/index.ts) - + ## `@deepseek-ai/dsh-api-gateway` -Requires: `typert` +- `inject`: `typert` +- `source`: [`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) ```ts config-catalog /** Gateway transport configuration. */ @@ -193,14 +197,15 @@ export interface Config { readonly streamInboxBytes?: number } ``` + -Source: [`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) - + ## `@deepseek-ai/dsh-api-job-controller` -Requires: `jobs` · `typert` +- `inject`: `jobs` · `typert` +- `source`: [`packages/api/job-controller/src/index.ts:35`](../packages/api/job-controller/src/index.ts) ```ts config-catalog /** Job Controller deployment policy. */ @@ -211,14 +216,15 @@ export interface Config { readonly observeMaxFrameBytes?: number } ``` + -Source: [`packages/api/job-controller/src/index.ts:35`](../packages/api/job-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-session-controller` -Requires: `agentDefaultModel` · `agents` · `attachments` · `fileUploads` · `fs` · `llm` · `sessions` · `sessionProjections` · `sessionQuery` · `typert` · `workspaceRegistry` +- `inject`: `agentDefaultModel` · `agents` · `attachments` · `fileUploads` · `fs` · `llm` · `sessions` · `sessionProjections` · `sessionQuery` · `typert` · `workspaceRegistry` +- `source`: [`packages/api/session-controller/src/index.ts:79`](../packages/api/session-controller/src/index.ts) ```ts config-catalog /** Session Controller deployment policy. */ @@ -227,13 +233,15 @@ export interface Config { readonly nativeOpen?: boolean } ``` + -Source: [`packages/api/session-controller/src/index.ts:79`](../packages/api/session-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-settings-controller` +- `source`: [`packages/api/settings-controller/src/index.ts:35`](../packages/api/settings-controller/src/index.ts) + ```ts config-catalog /** Host integrations replaceable by direct unit tests. */ export interface SettingsControllerInternals { @@ -241,14 +249,15 @@ export interface SettingsControllerInternals { readonly openTextFile?: (path: string, signal: AbortSignal) => Promise } ``` + -Source: [`packages/api/settings-controller/src/index.ts:35`](../packages/api/settings-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-terminal-controller` -Requires: `subprocess` · `sandboxPolicy` · `typert` +- `inject`: `subprocess` · `sandboxPolicy` · `typert` +- `source`: [`packages/api/terminal-controller/src/index.ts:26`](../packages/api/terminal-controller/src/index.ts) ```ts config-catalog /** Deployment limits and an optional shell profile. */ @@ -286,14 +295,15 @@ export interface Config { readonly cleanupRetryMs: number } ``` + -Source: [`packages/api/terminal-controller/src/index.ts:26`](../packages/api/terminal-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-workspace-controller` -Requires: `typert` · `workspaceRegistry` +- `inject`: `typert` · `workspaceRegistry` +- `source`: [`packages/api/workspace-controller/src/index.ts:34`](../packages/api/workspace-controller/src/index.ts) ```ts config-catalog /** First-use directory policy for the Host account. */ @@ -304,14 +314,15 @@ export interface Config { documentsLookupTimeoutMs?: number } ``` + -Source: [`packages/api/workspace-controller/src/index.ts:34`](../packages/api/workspace-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-workspace-files` -Requires: `fs` · `sandboxPolicy` · `sessions` · `typert` +- `inject`: `fs` · `sandboxPolicy` · `sessions` · `typert` +- `source`: [`packages/api/workspace-files/src/index.ts:70`](../packages/api/workspace-files/src/index.ts) ```ts config-catalog /** Deployment caps on one page or one listing. */ @@ -332,13 +343,15 @@ export interface Config { readonly maxEntries: number } ``` + -Source: [`packages/api/workspace-files/src/index.ts:70`](../packages/api/workspace-files/src/index.ts) - + ## `@deepseek-ai/dsh-attachment-local` +- `source`: [`packages/attachment/attachment-local/src/index.ts:61`](../packages/attachment/attachment-local/src/index.ts) + ```ts config-catalog /** Local attachment backend configuration. */ export interface Config { @@ -367,14 +380,16 @@ export interface Config { imageCompressionConcurrency?: number } ``` + -Source: [`packages/attachment/attachment-local/src/index.ts:61`](../packages/attachment/attachment-local/src/index.ts) - + ## `@deepseek-ai/dsh-bash-local` -Requires: `subprocess` +- `inject`: `subprocess` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/shell/bash-local/src/index.ts:41`](../packages/shell/bash-local/src/index.ts) ```ts config-catalog /** Validated plugin configuration with live command budgets. */ @@ -393,16 +408,16 @@ export interface Config { graceMs: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/shell/bash-local/src/index.ts:41`](../packages/shell/bash-local/src/index.ts) - + ## `@deepseek-ai/dsh-bash-sandbox` -Requires: `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `subprocess` · `sandbox` · `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-bash-local) +- `source`: [`packages/shell/bash-sandbox/src/index.ts:36`](../packages/shell/bash-sandbox/src/index.ts) ```ts config-catalog /** @@ -414,16 +429,15 @@ Requires: `subprocess` · `sandbox` · `sandboxPolicy` */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local) - -Source: [`packages/shell/bash-sandbox/src/index.ts:36`](../packages/shell/bash-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-client-connection` -Requires: `credentials` +- `inject`: `credentials` +- `source`: [`packages/client/connection/src/index.ts:92`](../packages/client/connection/src/index.ts) ```ts config-catalog /** Browser authentication, request limits, and connection recovery configuration. */ @@ -462,14 +476,15 @@ export interface ConnectionRecoveryConfig { generationReadyTimeoutMs?: number } ``` + -Source: [`packages/client/connection/src/index.ts:92`](../packages/client/connection/src/index.ts) - + ## `@deepseek-ai/dsh-client-hmr` -Requires: `clientModules` · `webServer` +- `inject`: `clientModules` · `webServer` +- `source`: [`packages/client/hmr/src/index.ts:30`](../packages/client/hmr/src/index.ts) ```ts config-catalog /** Plugin config, validated by the same-named schemastery schema. */ @@ -478,13 +493,15 @@ export interface Config { pollIntervalMs?: number } ``` + -Source: [`packages/client/hmr/src/index.ts:30`](../packages/client/hmr/src/index.ts) - + ## `@deepseek-ai/dsh-client-ui-plugin-manager` +- `source`: [`packages/client/ui-plugin-manager/src/index.ts:15`](../packages/client/ui-plugin-manager/src/index.ts) + ```ts config-catalog /** Registry-probe deadline and process-local cache policy. */ export interface Config { @@ -496,13 +513,15 @@ export interface Config { registryProbeCacheTtlMs: number } ``` + -Source: [`packages/client/ui-plugin-manager/src/index.ts:15`](../packages/client/ui-plugin-manager/src/index.ts) - + ## `@deepseek-ai/dsh-client-ui-settings-account` +- `source`: [`packages/client/ui-settings-account/src/contact-config.ts:5`](../packages/client/ui-settings-account/src/contact-config.ts) + ```ts config-catalog /** Questionnaire destination and its supported source option. */ export interface Config { @@ -512,13 +531,15 @@ export interface Config { contactSource: string } ``` + -Source: [`packages/client/ui-settings-account/src/contact-config.ts:5`](../packages/client/ui-settings-account/src/contact-config.ts) - + ## `@deepseek-ai/dsh-client-ui-settings-models` +- `source`: [`packages/client/ui-settings-models/src/onboarding-config.ts:6`](../packages/client/ui-settings-models/src/onboarding-config.ts) + ```ts config-catalog /** Onboarding options after schema defaults are applied. */ export interface Config { @@ -526,13 +547,15 @@ export interface Config { credentialOnboarding: boolean } ``` + -Source: [`packages/client/ui-settings-models/src/onboarding-config.ts:6`](../packages/client/ui-settings-models/src/onboarding-config.ts) - + ## `@deepseek-ai/dsh-client-ui-sidebar-documentpreview` +- `source`: [`packages/client/ui-sidebar-documentpreview/src/config.ts:5`](../packages/client/ui-sidebar-documentpreview/src/config.ts) + ```ts config-catalog /** Transient Office conversion reuse within one Client connection. */ export interface Config { @@ -558,13 +581,16 @@ export interface Config { } } ``` + -Source: [`packages/client/ui-sidebar-documentpreview/src/config.ts:5`](../packages/client/ui-sidebar-documentpreview/src/config.ts) - + ## `@deepseek-ai/dsh-client-ui-theme` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/client/ui-theme/src/index.ts:22`](../packages/client/ui-theme/src/index.ts) + ```ts config-catalog /** Runtime preferences projected to the browser. */ export interface Config { @@ -577,16 +603,15 @@ export interface Config { /** Theme preference persisted by the product Appearance row. */ export type ThemePreference = typeof THEME_PREFERENCES[number] ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/client/ui-theme/src/index.ts:22`](../packages/client/ui-theme/src/index.ts) - + ## `@deepseek-ai/dsh-compaction-basic` -Requires: `llm` · `tokenMeter` · `sessions` +- `inject`: `llm` · `tokenMeter` · `sessions` +- `source`: [`packages/compaction/compaction-basic/src/types.ts:40`](../packages/compaction/compaction-basic/src/types.ts) ```ts config-catalog /** Basic compaction configuration with an optional exact-target policy table. */ @@ -627,14 +652,15 @@ export interface ModelCompactPolicyConfig extends CompactionPolicyConfig { model: string } ``` + -Source: [`packages/compaction/compaction-basic/src/types.ts:40`](../packages/compaction/compaction-basic/src/types.ts) - + ## `@deepseek-ai/dsh-compaction-tool-result-pruner` -Requires: `tokenMeter` +- `inject`: `tokenMeter` +- `source`: [`packages/compaction/compaction-tool-result-pruner/src/types.ts:5`](../packages/compaction/compaction-tool-result-pruner/src/types.ts) ```ts config-catalog /** Character-budget policy for deterministic tool-result pruning. */ @@ -647,14 +673,15 @@ export interface ToolResultPruneConfig { tailChars?: number } ``` + -Source: [`packages/compaction/compaction-tool-result-pruner/src/types.ts:5`](../packages/compaction/compaction-tool-result-pruner/src/types.ts) - + ## `@deepseek-ai/dsh-cordis-host-runner` -Requires: `tools` +- `inject`: `tools` +- `source`: [`packages/extensions/cordis-host-runner/src/index.ts:93`](../packages/extensions/cordis-host-runner/src/index.ts) ```ts config-catalog /** Runner configuration. */ @@ -663,13 +690,15 @@ export interface Config { vmTimeoutMs?: number } ``` + -Source: [`packages/extensions/cordis-host-runner/src/index.ts:93`](../packages/extensions/cordis-host-runner/src/index.ts) - + ## `@deepseek-ai/dsh-credentials-local` +- `source`: [`packages/credentials/credentials-local/src/index.ts:64`](../packages/credentials/credentials-local/src/index.ts) + ```ts config-catalog /** Plugin config: file location and hot-reload behavior. */ export interface Config { @@ -683,14 +712,15 @@ export interface Config { debounceMs?: number } ``` + -Source: [`packages/credentials/credentials-local/src/index.ts:64`](../packages/credentials/credentials-local/src/index.ts) - + ## `@deepseek-ai/dsh-deepseek-account-platform` -Requires: `credentials` · `authorization` +- `inject`: `credentials` · `authorization` +- `source`: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) ```ts config-catalog /** Deployment-specific platform and request deadlines. */ @@ -721,14 +751,15 @@ export interface Config { attemptTimeoutMs?: number } ``` + -Source: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-agent-team` -Requires: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` +- `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` +- `source`: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ @@ -745,14 +776,15 @@ export interface Config { readonly disposalTimeoutMs?: number } ``` + -Source: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) - + ## `@deepseek-ai/dsh-experimental-api-speech-to-text` -Requires: `speechToText` · `typert` +- `inject`: `speechToText` · `typert` +- `source`: [`packages/experimental/api-speech-to-text/src/index.ts:20`](../packages/experimental/api-speech-to-text/src/index.ts) ```ts config-catalog /** Limits applied before decoding or calling a provider. */ @@ -763,44 +795,46 @@ export interface Config { maxDurationSeconds: number } ``` + -Source: [`packages/experimental/api-speech-to-text/src/index.ts:20`](../packages/experimental/api-speech-to-text/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp` -Requires: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) +- `source`: [`packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts:14`](../packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts) ```ts config-catalog /** Fixed Chromium launch or existing-browser attachment settings. */ export type Config = BrowserMcpConfig ``` + -Depends on: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) - -Source: [`packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts:14`](../packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-playwright-mcp` -Requires: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) +- `source`: [`packages/experimental/browser-use-playwright-mcp/src/index.ts:15`](../packages/experimental/browser-use-playwright-mcp/src/index.ts) ```ts config-catalog /** Fixed Chromium launch or existing-browser attachment settings. */ export type Config = BrowserMcpConfig ``` + -Depends on: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) - -Source: [`packages/experimental/browser-use-playwright-mcp/src/index.ts:15`](../packages/experimental/browser-use-playwright-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` -Requires: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `ModelConfig` (`@browserbasehq/stagehand`) +- `source`: [`packages/experimental/browser-use-stagehand-native/src/index.ts:28`](../packages/experimental/browser-use-stagehand-native/src/index.ts) ```ts config-catalog /** Profile-owned browser connection and independent Stagehand model credentials. */ @@ -833,16 +867,16 @@ export interface StagehandModelConfig { headers?: Record } ``` + -Depends on: `ModelConfig` (`@browserbasehq/stagehand`) - -Source: [`packages/experimental/browser-use-stagehand-native/src/index.ts:28`](../packages/experimental/browser-use-stagehand-native/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp` -Requires: `computerUse` · `tools` +- `inject`: `computerUse` · `tools` +- `refs`: [`McpClient`](../packages/mcp/mcp-client/src/index.ts) +- `source`: [`packages/experimental/computer-use-cua-driver-mcp/src/index.ts:20`](../packages/experimental/computer-use-cua-driver-mcp/src/index.ts) ```ts config-catalog /** Installed executable and MCP connection overrides. */ @@ -857,16 +891,15 @@ export interface Config { reconnect: McpClient.ReconnectConfig } ``` + -Depends on: [`McpClient`](../packages/mcp/mcp-client/src/index.ts) - -Source: [`packages/experimental/computer-use-cua-driver-mcp/src/index.ts:20`](../packages/experimental/computer-use-cua-driver-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-inspector` -Requires: `webServer` +- `inject`: `webServer` +- `source`: [`packages/experimental/inspector/src/index.ts:66`](../packages/experimental/inspector/src/index.ts) ```ts config-catalog /** Host plugin configuration. Fetch capture is enabled by default. */ @@ -927,13 +960,15 @@ export interface InspectorOptions { readonly maxDisconnectedCordisTrees?: number } ``` + -Source: [`packages/experimental/inspector/src/index.ts:66`](../packages/experimental/inspector/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-ptc-runtime-python` +- `source`: [`packages/experimental/ptc-runtime-python/src/index.ts:42`](../packages/experimental/ptc-runtime-python/src/index.ts) + ```ts config-catalog /** Plugin config: every cap, changeable from `cordis.yml` (no hardcoded tunables). */ export interface Config { @@ -993,13 +1028,16 @@ export interface Config { pythonBin?: string } ``` + -Source: [`packages/experimental/ptc-runtime-python/src/index.ts:42`](../packages/experimental/ptc-runtime-python/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-speech-to-text` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/experimental/speech-to-text/src/index.ts:20`](../packages/experimental/speech-to-text/src/index.ts) + ```ts config-catalog /** Live selection read before a transcription starts; `configure()` writes it through the profile. */ export interface Config { @@ -1009,16 +1047,15 @@ export interface Config { language: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/experimental/speech-to-text/src/index.ts:20`](../packages/experimental/speech-to-text/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-speech-to-text-sensevoice` -Requires: `speechToText` · `subprocess` +- `inject`: `speechToText` · `subprocess` +- `source`: [`packages/experimental/speech-to-text-sensevoice/src/config.ts:6`](../packages/experimental/speech-to-text-sensevoice/src/config.ts) ```ts config-catalog /** Local runtime, inference, and retention settings. */ @@ -1069,14 +1106,15 @@ export interface Config { progressIntervalMs: number } ``` + -Source: [`packages/experimental/speech-to-text-sensevoice/src/config.ts:6`](../packages/experimental/speech-to-text-sensevoice/src/config.ts) - + ## `@deepseek-ai/dsh-experimental-tool-agent-team` -Requires: `agents` · `agentTeams` · `tools` · `systemPrompt` +- `inject`: `agents` · `agentTeams` · `tools` · `systemPrompt` +- `source`: [`packages/experimental/tool-agent-team/src/index.ts:17`](../packages/experimental/tool-agent-team/src/index.ts) ```ts config-catalog /** Tool routing configuration. */ @@ -1087,14 +1125,15 @@ export interface Config { readonly forkProvider?: string } ``` + -Source: [`packages/experimental/tool-agent-team/src/index.ts:17`](../packages/experimental/tool-agent-team/src/index.ts) - + ## `@deepseek-ai/dsh-file-reference-local` -Requires: `agents` +- `inject`: `agents` +- `source`: [`packages/context/file-reference-local/src/index.ts:34`](../packages/context/file-reference-local/src/index.ts) ```ts config-catalog /** Local file-reference discovery configuration. */ @@ -1107,13 +1146,15 @@ export interface Config { excludedDirectories?: string[] } ``` + -Source: [`packages/context/file-reference-local/src/index.ts:34`](../packages/context/file-reference-local/src/index.ts) - + ## `@deepseek-ai/dsh-fs-local` +- `source`: [`packages/fs/fs-local/src/index.ts:45`](../packages/fs/fs-local/src/index.ts) + ```ts config-catalog /** Configuration for the local filesystem backend. */ export interface Config { @@ -1126,14 +1167,16 @@ export interface Config { diffBasisMaxBytes?: number } ``` + -Source: [`packages/fs/fs-local/src/index.ts:45`](../packages/fs/fs-local/src/index.ts) - + ## `@deepseek-ai/dsh-fs-sandbox` -Requires: `sandboxPolicy` +- `inject`: `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-fs-local) +- `source`: [`packages/fs/fs-sandbox/src/index.ts:45`](../packages/fs/fs-sandbox/src/index.ts) ```ts config-catalog /** @@ -1144,16 +1187,15 @@ Requires: `sandboxPolicy` */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-fs-local) - -Source: [`packages/fs/fs-sandbox/src/index.ts:45`](../packages/fs/fs-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-goal` -Requires: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/goal/goal/src/index.ts:172`](../packages/goal/goal/src/index.ts) ```ts config-catalog /** Deployment defaults for goal creation. */ @@ -1162,14 +1204,15 @@ export interface Config { defaultMaxGoalRounds?: number } ``` + -Source: [`packages/goal/goal/src/index.ts:172`](../packages/goal/goal/src/index.ts) - + ## `@deepseek-ai/dsh-headless` -Requires: `agentDefaultModel` · `agents` · `sessions` +- `inject`: `agentDefaultModel` · `agents` · `sessions` +- `source`: [`packages/bundle/headless/src/index.ts:42`](../packages/bundle/headless/src/index.ts) ```ts config-catalog /** Plugin config: the task and run options resolved from this app's injected provider service. */ @@ -1182,13 +1225,16 @@ export interface Config { json?: boolean } ``` + -Source: [`packages/bundle/headless/src/index.ts:42`](../packages/bundle/headless/src/index.ts) - + ## `@deepseek-ai/dsh-hmr` +- `refs`: `ChokidarOptions` (`chokidar`) +- `source`: [`packages/boot/hmr/src/index.ts:51`](../packages/boot/hmr/src/index.ts) + ```ts config-catalog /** Module roots and watcher timing, with Chokidar deployment options. */ export interface HmrConfig extends ChokidarOptions { @@ -1202,16 +1248,15 @@ export interface HmrConfig extends ChokidarOptions { ignored: string[] } ``` + -Depends on: `ChokidarOptions` (`chokidar`) - -Source: [`packages/boot/hmr/src/index.ts:51`](../packages/boot/hmr/src/index.ts) - + ## `@deepseek-ai/dsh-hooks-claude-code` -Requires: `shell` · `sessionProjections` +- `inject`: `shell` · `sessionProjections` +- `source`: [`packages/hooks/hooks-claude-code/src/index.ts:51`](../packages/hooks/hooks-claude-code/src/index.ts) ```ts config-catalog /** Plugin config: where the CC hook config lives + substitution roots. */ @@ -1242,14 +1287,15 @@ export interface Config { stderrSummaryMaxChars?: number } ``` + -Source: [`packages/hooks/hooks-claude-code/src/index.ts:51`](../packages/hooks/hooks-claude-code/src/index.ts) - + ## `@deepseek-ai/dsh-hooks-codex` -Requires: `shell` · `sessionProjections` +- `inject`: `shell` · `sessionProjections` +- `source`: [`packages/hooks/hooks-codex/src/index.ts:50`](../packages/hooks/hooks-codex/src/index.ts) ```ts config-catalog /** Plugin config: where the Codex hooks.json lives + the model name for payloads. */ @@ -1269,13 +1315,15 @@ export interface Config { stderrSummaryMaxChars?: number } ``` + -Source: [`packages/hooks/hooks-codex/src/index.ts:50`](../packages/hooks/hooks-codex/src/index.ts) - + ## `@deepseek-ai/dsh-host-directory-picker-browse` +- `source`: [`packages/host/directory-picker-browse/src/index.ts:181`](../packages/host/directory-picker-browse/src/index.ts) + ```ts config-catalog /** Validated plugin configuration. */ export interface Config { @@ -1283,14 +1331,15 @@ export interface Config { maxEntries: number } ``` + -Source: [`packages/host/directory-picker-browse/src/index.ts:181`](../packages/host/directory-picker-browse/src/index.ts) - + ## `@deepseek-ai/dsh-host-frontend-static` -Requires: `webServer` · `connection` +- `inject`: `webServer` · `connection` +- `source`: [`packages/host/frontend-static/src/index.ts:30`](../packages/host/frontend-static/src/index.ts) ```ts config-catalog /** Plugin config: the dist anchor. */ @@ -1299,14 +1348,15 @@ export interface Config { distIndex: string } ``` + -Source: [`packages/host/frontend-static/src/index.ts:30`](../packages/host/frontend-static/src/index.ts) - + ## `@deepseek-ai/dsh-host-open-in-app` -Requires: `webServer` · `connection` · `subprocess` +- `inject`: `webServer` · `connection` · `subprocess` +- `source`: [`packages/host/open-in-app/src/index.ts:50`](../packages/host/open-in-app/src/index.ts) ```ts config-catalog /** Open-in-app host configuration. */ @@ -1330,13 +1380,15 @@ export interface Config { readonly launchWatchMs: number } ``` + -Source: [`packages/host/open-in-app/src/index.ts:50`](../packages/host/open-in-app/src/index.ts) - + ## `@deepseek-ai/dsh-host-product-telemetry-otel` +- `source`: [`packages/host/product-telemetry-otel/src/index.ts:37`](../packages/host/product-telemetry-otel/src/index.ts) + ```ts config-catalog /** Collector routing, application identity, and bounded in-memory batch settings. */ export interface Config { @@ -1364,13 +1416,15 @@ export interface Config { shutdownTimeoutMillis: number } ``` + -Source: [`packages/host/product-telemetry-otel/src/index.ts:37`](../packages/host/product-telemetry-otel/src/index.ts) - + ## `@deepseek-ai/dsh-host-webserver` +- `source`: [`packages/host/webserver/src/index.ts:59`](../packages/host/webserver/src/index.ts) + ```ts config-catalog /** Web server listen and response-compression config. */ export interface Config { @@ -1386,13 +1440,15 @@ export interface Config { compressionThresholdBytes?: number } ``` + -Source: [`packages/host/webserver/src/index.ts:59`](../packages/host/webserver/src/index.ts) - + ## `@deepseek-ai/dsh-invariants` +- `source`: [`packages/runtime-diagnostics/invariants/src/index.ts:15`](../packages/runtime-diagnostics/invariants/src/index.ts) + ```ts config-catalog /** Runtime invariant selection configured on the service plugin. */ export interface Config { @@ -1404,13 +1460,15 @@ export interface Config { readonly package_blocklist?: string[] } ``` + -Source: [`packages/runtime-diagnostics/invariants/src/index.ts:15`](../packages/runtime-diagnostics/invariants/src/index.ts) - + ## `@deepseek-ai/dsh-jobs-local` +- `source`: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) + ```ts config-catalog /** Configuration for the process-local job registry. */ export interface Config { @@ -1431,29 +1489,31 @@ export interface Config { pumpPollMs?: number } ``` + -Source: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) - + ## `@deepseek-ai/dsh-llm-deepseek-account` -Requires: `llm` +- `inject`: `llm` +- `refs`: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) +- `source`: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) ```ts config-catalog /** Account route configuration; authentication comes exclusively from the account service. */ export type Config = ProtocolConfig ``` + -Depends on: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) - -Source: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) - + ## `@deepseek-ai/dsh-llm-deepseek-api-key` -Requires: `llm` +- `inject`: `llm` +- `refs`: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) ```ts config-catalog /** Messages configuration with a per-request API-key reference. */ @@ -1462,16 +1522,16 @@ export interface Config extends ProtocolConfig { apiKeyEnv: Volatile } ``` + -Depends on: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) - + ## `@deepseek-ai/dsh-llm-pi-ai` -Requires: `llm` +- `inject`: `llm` +- `refs`: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/llm/llm-pi-ai/src/config.ts:222`](../packages/llm/llm-pi-ai/src/config.ts) ```ts config-catalog /** Plugin configuration: the provider routes this instance owns. */ @@ -1737,16 +1797,16 @@ export type PiAiThinkingFormat = NonNullable ``` + -Depends on: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`) · `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/llm/llm-pi-ai/src/config.ts:222`](../packages/llm/llm-pi-ai/src/config.ts) - + ## `@deepseek-ai/dsh-llm-replay` -Requires: `llm` +- `inject`: `llm` +- `refs`: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) +- `source`: [`packages/test-support/llm-replay/src/index.ts:1123`](../packages/test-support/llm-replay/src/index.ts) ```ts config-catalog /** Plugin config: the {@link ReplayConfig} inputs, each defaulting to its `DSH_SNAPSHOT_*` env var in `apply`. */ @@ -1816,29 +1876,29 @@ export interface ReplayModelConfig { systemPromptUpdate?: SystemPromptUpdate } ``` + -Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) - -Source: [`packages/test-support/llm-replay/src/index.ts:1123`](../packages/test-support/llm-replay/src/index.ts) - + ## `@deepseek-ai/dsh-llm-retry` -Requires: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/llm/llm-retry/src/index.ts:25`](../packages/llm/llm-retry/src/index.ts) ```ts config-catalog /** This policy executor has no config; providers own `retryPolicy`. */ export type Config = Readonly> ``` + -Source: [`packages/llm/llm-retry/src/index.ts:25`](../packages/llm/llm-retry/src/index.ts) - + ## `@deepseek-ai/dsh-lsp-stdio` -Requires: `fs` · `lsp` · `subprocess` +- `inject`: `fs` · `lsp` · `subprocess` +- `source`: [`packages/lsp/lsp-stdio/src/index.ts:82`](../packages/lsp/lsp-stdio/src/index.ts) ```ts config-catalog /** Plugin configuration: provider id → local language-server configuration. */ @@ -1873,14 +1933,15 @@ export interface LspLocalServerConfig { killGraceMs?: number } ``` + -Source: [`packages/lsp/lsp-stdio/src/index.ts:82`](../packages/lsp/lsp-stdio/src/index.ts) - + ## `@deepseek-ai/dsh-mcp-client` -Requires: `tools` +- `inject`: `tools` +- `source`: [`packages/mcp/mcp-client/src/index.ts:104`](../packages/mcp/mcp-client/src/index.ts) ```ts config-catalog /** Configuration for one stdio or Streamable HTTP MCP server. */ @@ -1950,14 +2011,15 @@ export interface ReconnectConfig { maxAttempts?: number } ``` + -Source: [`packages/mcp/mcp-client/src/index.ts:104`](../packages/mcp/mcp-client/src/index.ts) - + ## `@deepseek-ai/dsh-message-feedback` -Requires: `sessionPersistence` · `sessions` +- `inject`: `sessionPersistence` · `sessions` +- `source`: [`packages/feedback/message-feedback/src/index.ts:40`](../packages/feedback/message-feedback/src/index.ts) ```ts config-catalog /** Required deployment policy for optional notes. */ @@ -1966,13 +2028,15 @@ export interface Config { readonly maxNoteBytes: number } ``` + -Source: [`packages/feedback/message-feedback/src/index.ts:40`](../packages/feedback/message-feedback/src/index.ts) - + ## `@deepseek-ai/dsh-office-to-pdf` +- `source`: [`packages/document/office-to-pdf/src/index.ts:31`](../packages/document/office-to-pdf/src/index.ts) + ```ts config-catalog /** Provider concurrency and kit rendering/font configuration. */ export interface Config { @@ -2016,14 +2080,16 @@ export interface Config { maxLoadedFontBytes: number } ``` + -Source: [`packages/document/office-to-pdf/src/index.ts:31`](../packages/document/office-to-pdf/src/index.ts) - + ## `@deepseek-ai/dsh-permission-presets` -Requires: `shell` · `approval` · `sessions` · `sessionProjections` +- `inject`: `shell` · `approval` · `sessions` · `sessionProjections` +- `refs`: [`ApprovalPolicy`](subsystems/approval.md) · [`SandboxMode`](subsystems/sandbox.md) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/interaction/permission-presets/src/index.ts:155`](../packages/interaction/permission-presets/src/index.ts) ```ts config-catalog /** The {@link PermissionPresetService} config: preset table and composition default. */ @@ -2054,16 +2120,15 @@ export interface PresetSpec { description?: string } ``` + -Depends on: [`ApprovalPolicy`](subsystems/approval.md) · [`SandboxMode`](subsystems/sandbox.md) · `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/interaction/permission-presets/src/index.ts:155`](../packages/interaction/permission-presets/src/index.ts) - + ## `@deepseek-ai/dsh-persona` -Requires: `systemPrompt` +- `inject`: `systemPrompt` +- `source`: [`packages/preset/persona/src/index.ts:30`](../packages/preset/persona/src/index.ts) ```ts config-catalog /** Plugin config: the persona text this composition contributes. */ @@ -2085,14 +2150,15 @@ export interface Config { includeRuntimeContext?: boolean } ``` + -Source: [`packages/preset/persona/src/index.ts:30`](../packages/preset/persona/src/index.ts) - + ## `@deepseek-ai/dsh-plan-mode` -Requires: `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `tools` · `systemPrompt` · `sessionProjections` +- `source`: [`packages/plan/plan-mode/src/index.ts:70`](../packages/plan/plan-mode/src/index.ts) ```ts config-catalog /** Deployment-owned plan guidance. */ @@ -2101,14 +2167,15 @@ export interface PlanModeConfig { section: string } ``` + -Source: [`packages/plan/plan-mode/src/index.ts:70`](../packages/plan/plan-mode/src/index.ts) - + ## `@deepseek-ai/dsh-plugin-manager` -Requires: `loader` · `profileContext` +- `inject`: `loader` · `profileContext` +- `source`: [`packages/boot/plugin-manager/src/index.ts:40`](../packages/boot/plugin-manager/src/index.ts) ```ts config-catalog /** The pnpm executable, registries, and limits for diagnostics, lookups and connection checks. */ @@ -2135,14 +2202,15 @@ export interface Config { fallbackRegistries?: string[] } ``` + -Source: [`packages/boot/plugin-manager/src/index.ts:40`](../packages/boot/plugin-manager/src/index.ts) - + ## `@deepseek-ai/dsh-plugin-package-inventory-deepseek` -Requires: `agents` · `deepseekLlmApiExtensions` · `loader` +- `inject`: `agents` · `deepseekLlmApiExtensions` · `loader` +- `source`: [`packages/llm/plugin-package-inventory-deepseek/src/index.ts:32`](../packages/llm/plugin-package-inventory-deepseek/src/index.ts) ```ts config-catalog /** Plugin-package request contribution configuration. */ @@ -2151,14 +2219,15 @@ export interface Config { enabled?: boolean } ``` + -Source: [`packages/llm/plugin-package-inventory-deepseek/src/index.ts:32`](../packages/llm/plugin-package-inventory-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-ptc-runtime-node` -Requires: `fs` · `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `fs` · `subprocess` · `sandbox` · `sandboxPolicy` +- `source`: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) ```ts config-catalog /** Deployment-varying runtime bounds and launch choices. */ @@ -2187,14 +2256,16 @@ export interface LaunchConfig { bootstrapPath?: string } ``` + -Source: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) - + ## `@deepseek-ai/dsh-pwsh-local` -Requires: `subprocess` +- `inject`: `subprocess` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/shell/pwsh-local/src/index.ts:58`](../packages/shell/pwsh-local/src/index.ts) ```ts config-catalog /** Validated plugin configuration with live command budgets. */ @@ -2220,16 +2291,16 @@ export interface Config { pwshPath: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/shell/pwsh-local/src/index.ts:58`](../packages/shell/pwsh-local/src/index.ts) - + ## `@deepseek-ai/dsh-pwsh-sandbox` -Requires: `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `subprocess` · `sandbox` · `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-pwsh-local) +- `source`: [`packages/shell/pwsh-sandbox/src/index.ts:40`](../packages/shell/pwsh-sandbox/src/index.ts) ```ts config-catalog /** @@ -2242,15 +2313,15 @@ Requires: `subprocess` · `sandbox` · `sandboxPolicy` */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-pwsh-local) - -Source: [`packages/shell/pwsh-sandbox/src/index.ts:40`](../packages/shell/pwsh-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-repeat-tool-reminder` +- `source`: [`packages/guard/repeat-tool-reminder/src/index.ts:35`](../packages/guard/repeat-tool-reminder/src/index.ts) + ```ts config-catalog /** * Plugin config, validated by the same-named schemastery schema plus the @@ -2278,13 +2349,15 @@ export interface Config { argumentsPreviewChars?: number } ``` + -Source: [`packages/guard/repeat-tool-reminder/src/index.ts:35`](../packages/guard/repeat-tool-reminder/src/index.ts) - + ## `@deepseek-ai/dsh-sandbox-local` +- `source`: [`packages/sandbox/sandbox-local/src/index.ts:45`](../packages/sandbox/sandbox-local/src/index.ts) + ```ts config-catalog /** Plugin config. All optional — `static Config` supplies the defaults. */ export interface Config { @@ -2310,14 +2383,16 @@ export interface Config { probeTimeoutMs?: number } ``` + -Source: [`packages/sandbox/sandbox-local/src/index.ts:45`](../packages/sandbox/sandbox-local/src/index.ts) - + ## `@deepseek-ai/dsh-sandbox-policy` -Requires: `sessionProjections` +- `inject`: `sessionProjections` +- `refs`: [`SandboxMode`](subsystems/sandbox.md) +- `source`: [`packages/sandbox/sandbox-policy/src/index.ts:71`](../packages/sandbox/sandbox-policy/src/index.ts) ```ts config-catalog /** @@ -2337,16 +2412,15 @@ export interface Config { workspaceRoot?: string } ``` + -Depends on: [`SandboxMode`](subsystems/sandbox.md) - -Source: [`packages/sandbox/sandbox-policy/src/index.ts:71`](../packages/sandbox/sandbox-policy/src/index.ts) - + ## `@deepseek-ai/dsh-sdk-app` -Requires: `cmdlineArgs` +- `inject`: `cmdlineArgs` +- `source`: [`packages/bundle/sdk-app/src/index.ts:23`](../packages/bundle/sdk-app/src/index.ts) ```ts config-catalog /** SDK stdio startup configuration. */ @@ -2355,14 +2429,16 @@ export interface Config { profile?: string } ``` + -Source: [`packages/bundle/sdk-app/src/index.ts:23`](../packages/bundle/sdk-app/src/index.ts) - + ## `@deepseek-ai/dsh-sdk-jsonrpc-server` -Requires: `agents` +- `inject`: `agents` +- `refs`: `Readable` (`node:stream`) · `Writable` (`node:stream`) +- `source`: [`packages/sdk/server/src/index.ts:25`](../packages/sdk/server/src/index.ts) ```ts config-catalog /** JSON-RPC deployment config plus runtime-only test hooks. */ @@ -2377,16 +2453,15 @@ export interface JsonRpcConfig { exit?: (code: number) => void } ``` + -Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`) - -Source: [`packages/sdk/server/src/index.ts:25`](../packages/sdk/server/src/index.ts) - + ## `@deepseek-ai/dsh-session-log-deepseek` -Requires: `deepseekLlmApiExtensions` · `sessions` +- `inject`: `deepseekLlmApiExtensions` · `sessions` +- `source`: [`packages/session/session-log-deepseek/src/index.ts:38`](../packages/session/session-log-deepseek/src/index.ts) ```ts config-catalog /** Session-log request contribution configuration. */ @@ -2395,14 +2470,15 @@ export interface Config { enabled?: boolean } ``` + -Source: [`packages/session/session-log-deepseek/src/index.ts:38`](../packages/session/session-log-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-session-log-export` -Requires: `commands` · `connection` +- `inject`: `commands` · `connection` +- `source`: [`packages/session-query/session-log-export/src/index.ts:46`](../packages/session-query/session-log-export/src/index.ts) ```ts config-catalog /** Session-log archive policy. */ @@ -2414,13 +2490,15 @@ export interface Config { /** Valid fflate DEFLATE levels accepted by session-log export. */ export type SessionLogCompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ``` + -Source: [`packages/session-query/session-log-export/src/index.ts:46`](../packages/session-query/session-log-export/src/index.ts) - + ## `@deepseek-ai/dsh-session-persistence-jsonl` +- `source`: [`packages/session/session-persistence-jsonl/src/index.ts:90`](../packages/session/session-persistence-jsonl/src/index.ts) + ```ts config-catalog /** Plugin config for the JSONL backend's root and physical encoding. */ export interface Config { @@ -2439,14 +2517,15 @@ export interface Config { /** Physical encoding selected for JSONL session artifacts. */ export type JsonlCompression = 'zstd' | 'none' ``` + -Source: [`packages/session/session-persistence-jsonl/src/index.ts:90`](../packages/session/session-persistence-jsonl/src/index.ts) - + ## `@deepseek-ai/dsh-session-projection-cache` -Requires: `storageDomain` · `sessionProjections` · `sessions` +- `inject`: `storageDomain` · `sessionProjections` · `sessions` +- `source`: [`packages/session/session-projection-cache/src/index.ts:75`](../packages/session/session-projection-cache/src/index.ts) ```ts config-catalog /** @@ -2463,14 +2542,16 @@ export interface Config { writeIntervalMs: number } ``` + -Source: [`packages/session/session-projection-cache/src/index.ts:75`](../packages/session/session-projection-cache/src/index.ts) - + ## `@deepseek-ai/dsh-session-query-sqlite` -Requires: `sessions` +- `inject`: `sessions` +- `refs`: [`SessionQueryConfig`](../packages/session-query/session-query/src/index.ts) +- `source`: [`packages/session-query/session-query-sqlite/src/index.ts:92`](../packages/session-query/session-query-sqlite/src/index.ts) ```ts config-catalog /** Combined session-query configuration backed by SQLite full-text search. */ @@ -2509,16 +2590,15 @@ export type OpenAt = 'startup' | 'first-search' | 'never' /** Supported SQLite journal modes. */ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' ``` + -Depends on: [`SessionQueryConfig`](../packages/session-query/session-query/src/index.ts) - -Source: [`packages/session-query/session-query-sqlite/src/index.ts:92`](../packages/session-query/session-query-sqlite/src/index.ts) - + ## `@deepseek-ai/dsh-session-reference` -Requires: `sessionQuery` +- `inject`: `sessionQuery` +- `source`: [`packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts) ```ts config-catalog /** Session-reference service configuration. */ @@ -2533,14 +2613,16 @@ export interface Config { referenceContextFraction?: number } ``` + -Source: [`packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts) - + ## `@deepseek-ai/dsh-session-telemetry-otel` -Requires: `sessions` +- `inject`: `sessions` +- `refs`: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`) +- `source`: [`packages/session/session-telemetry-otel/src/index.ts:100`](../packages/session/session-telemetry-otel/src/index.ts) ```ts config-catalog /** @@ -2576,16 +2658,15 @@ export enum SessionTelemetryMode { DISABLED = 'DISABLED', } ``` + -Depends on: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`) - -Source: [`packages/session/session-telemetry-otel/src/index.ts:100`](../packages/session/session-telemetry-otel/src/index.ts) - + ## `@deepseek-ai/dsh-session-title` -Requires: `sessions` · `sessionProjections` +- `inject`: `sessions` · `sessionProjections` +- `source`: [`packages/session/session-title/src/index.ts:56`](../packages/session/session-title/src/index.ts) ```ts config-catalog /** Required deterministic fallback and accepted-title limits. */ @@ -2598,43 +2679,45 @@ export interface Config { readonly maxTitleBytes: number } ``` + -Source: [`packages/session/session-title/src/index.ts:56`](../packages/session/session-title/src/index.ts) - + ## `@deepseek-ai/dsh-session-title-all-prompts-llm` -Requires: `sessionTitle` · `llm` · `sessions` +- `inject`: `sessionTitle` · `llm` · `sessions` +- `refs`: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) +- `source`: [`packages/session/session-title-all-prompts-llm/src/index.ts:15`](../packages/session/session-title-all-prompts-llm/src/index.ts) ```ts config-catalog /** Required LLM policy; this plugin adds no defaults. */ export type Config = SessionTitleLlmConfig ``` + -Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) - -Source: [`packages/session/session-title-all-prompts-llm/src/index.ts:15`](../packages/session/session-title-all-prompts-llm/src/index.ts) - + ## `@deepseek-ai/dsh-session-title-first-prompt-llm` -Requires: `sessionTitle` · `llm` · `sessions` +- `inject`: `sessionTitle` · `llm` · `sessions` +- `refs`: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) +- `source`: [`packages/session/session-title-first-prompt-llm/src/index.ts:15`](../packages/session/session-title-first-prompt-llm/src/index.ts) ```ts config-catalog /** Required LLM policy; this plugin adds no defaults. */ export type Config = SessionTitleLlmConfig ``` + -Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) - -Source: [`packages/session/session-title-first-prompt-llm/src/index.ts:15`](../packages/session/session-title-first-prompt-llm/src/index.ts) - + ## `@deepseek-ai/dsh-shell-env` +- `source`: [`packages/shell/shell-env/src/index.ts:30`](../packages/shell/shell-env/src/index.ts) + ```ts config-catalog /** Plugin config (all optional — the built-in facts resolve without defaults). */ export interface Config { @@ -2642,13 +2725,15 @@ export interface Config { dshHome?: string } ``` + -Source: [`packages/shell/shell-env/src/index.ts:30`](../packages/shell/shell-env/src/index.ts) - + ## `@deepseek-ai/dsh-skill` +- `source`: [`packages/skill/skill/src/index.ts:278`](../packages/skill/skill/src/index.ts) + ```ts config-catalog /** Skill registry configuration. */ export interface Config { @@ -2656,14 +2741,15 @@ export interface Config { readonly collectCacheMaxEntries?: number } ``` + -Source: [`packages/skill/skill/src/index.ts:278`](../packages/skill/skill/src/index.ts) - + ## `@deepseek-ai/dsh-skill-filesystem` -Requires: `skills` +- `inject`: `skills` +- `source`: [`packages/skill/skill-filesystem/src/index.ts:49`](../packages/skill/skill-filesystem/src/index.ts) ```ts config-catalog /** Local filesystem skill provider configuration. */ @@ -2694,14 +2780,15 @@ export interface Config { bundledSkillDir?: string } ``` + -Source: [`packages/skill/skill-filesystem/src/index.ts:49`](../packages/skill/skill-filesystem/src/index.ts) - + ## `@deepseek-ai/dsh-skill-office` -Requires: `skills` +- `inject`: `skills` +- `source`: [`packages/skill/skill-office/src/index.ts:16`](../packages/skill/skill-office/src/index.ts) ```ts config-catalog /** Office skill resource location. */ @@ -2714,13 +2801,15 @@ export interface Config { cli?: string | false } ``` + -Source: [`packages/skill/skill-office/src/index.ts:16`](../packages/skill/skill-office/src/index.ts) - + ## `@deepseek-ai/dsh-spill-local` +- `source`: [`packages/spill/spill-local/src/index.ts:31`](../packages/spill/spill-local/src/index.ts) + ```ts config-catalog /** Plugin config (all optional — `static Config` supplies the defaults). */ export interface Config { @@ -2743,14 +2832,15 @@ export interface Config { cleanupPeriodDays?: number } ``` + -Source: [`packages/spill/spill-local/src/index.ts:31`](../packages/spill/spill-local/src/index.ts) - + ## `@deepseek-ai/dsh-spill-policy` -Requires: `tools` +- `inject`: `tools` +- `source`: [`packages/spill/spill-policy/src/index.ts:25`](../packages/spill/spill-policy/src/index.ts) ```ts config-catalog /** Optional result-retention budget. */ @@ -2759,13 +2849,15 @@ export interface Config { maxInlineTokens?: number } ``` + -Source: [`packages/spill/spill-policy/src/index.ts:25`](../packages/spill/spill-policy/src/index.ts) - + ## `@deepseek-ai/dsh-ssh` +- `source`: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) + ```ts config-catalog /** Deployment-owned SSH identity and installed helper; no model argument selects these values. */ export interface Config { @@ -2793,14 +2885,15 @@ export interface Config { leaseMs?: number } ``` + -Source: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) - + ## `@deepseek-ai/dsh-storage-domain` -Requires: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts) ```ts config-catalog /** @@ -2816,14 +2909,15 @@ export interface Config { routes?: Record } ``` + -Source: [`packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts) - + ## `@deepseek-ai/dsh-storage-json` -Requires: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-json/src/index.ts:28`](../packages/storage/storage-json/src/index.ts) ```ts config-catalog /** @@ -2837,14 +2931,15 @@ export interface Config { root: string } ``` + -Source: [`packages/storage/storage-json/src/index.ts:28`](../packages/storage/storage-json/src/index.ts) - + ## `@deepseek-ai/dsh-storage-sqlite` -Requires: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts) ```ts config-catalog /** Plugin configuration. */ @@ -2877,13 +2972,16 @@ export interface Config { */ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' ``` + -Source: [`packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts) - + ## `@deepseek-ai/dsh-subagent` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/subagent/subagent/src/index.ts:192`](../packages/subagent/subagent/src/index.ts) + ```ts config-catalog /** Host configuration for continuable subagent capacity. */ export interface Config { @@ -2893,16 +2991,15 @@ export interface Config { maxDepth: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/subagent/subagent/src/index.ts:192`](../packages/subagent/subagent/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-acp` -Requires: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-acp/src/index.ts:27`](../packages/subagent/subagent-acp/src/index.ts) ```ts config-catalog /** Config: how to spawn and drive the child ACP agent process. */ @@ -2948,14 +3045,15 @@ export interface Config { /** Fixed response to child permission requests: reject by default, or select the first allow option. */ export type PermissionPolicy = 'allow' | 'reject' ``` + -Source: [`packages/subagent/subagent-acp/src/index.ts:27`](../packages/subagent/subagent-acp/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-claude-code` -Requires: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-claude-code/src/index.ts:38`](../packages/subagent/subagent-claude-code/src/index.ts) ```ts config-catalog /** Deployment-owned model, permission, environment, and process-release settings. */ @@ -2983,14 +3081,15 @@ export interface Config { /** Profile-selectable non-interactive Claude Code permission mode. */ export type ClaudeCodePermissionMode = typeof CLAUDE_CODE_PERMISSION_MODES[number] ``` + -Source: [`packages/subagent/subagent-claude-code/src/index.ts:38`](../packages/subagent/subagent-claude-code/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-codex` -Requires: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-codex/src/index.ts:36`](../packages/subagent/subagent-codex/src/index.ts) ```ts config-catalog /** Deployment-owned model, permission, environment, and process-release settings. */ @@ -3016,14 +3115,15 @@ export type CodexPermissionMode = | 'approve-for-me' | 'dangerously-bypass-approvals-and-sandbox' ``` + -Source: [`packages/subagent/subagent-codex/src/index.ts:36`](../packages/subagent/subagent-codex/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-dsh-sdk` -Requires: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-dsh-sdk/src/index.ts:34`](../packages/subagent/subagent-dsh-sdk/src/index.ts) ```ts config-catalog /** Config: how to spawn and drive the child SDK runtime process. */ @@ -3072,14 +3172,15 @@ export interface Config { disposeGraceMs?: number } ``` + -Source: [`packages/subagent/subagent-dsh-sdk/src/index.ts:34`](../packages/subagent/subagent-dsh-sdk/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-fork-in-process` -Requires: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-fork-in-process/src/index.ts:31`](../packages/subagent/subagent-fork-in-process/src/index.ts) ```ts config-catalog /** Config: the registry name to register the provider under. */ @@ -3088,14 +3189,15 @@ export interface Config { providerName: string } ``` + -Source: [`packages/subagent/subagent-fork-in-process/src/index.ts:31`](../packages/subagent/subagent-fork-in-process/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-spawn-in-process` -Requires: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-spawn-in-process/src/index.ts:25`](../packages/subagent/subagent-spawn-in-process/src/index.ts) ```ts config-catalog /** Config: the registry name to register the provider under. */ @@ -3104,13 +3206,15 @@ export interface Config { providerName: string } ``` + -Source: [`packages/subagent/subagent-spawn-in-process/src/index.ts:25`](../packages/subagent/subagent-spawn-in-process/src/index.ts) - + ## `@deepseek-ai/dsh-system-prompt` +- `source`: [`packages/core/system-prompt/src/index.ts:247`](../packages/core/system-prompt/src/index.ts) + ```ts config-catalog /** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.personaPrefix} for its contract). */ export interface Config { @@ -3136,14 +3240,15 @@ export interface Config { toolOrder?: string[] } ``` + -Source: [`packages/core/system-prompt/src/index.ts:247`](../packages/core/system-prompt/src/index.ts) - + ## `@deepseek-ai/dsh-terminal-bash` -Requires: `terminals` · `sandboxPolicy` · `sessionProjections` · `subprocess` +- `inject`: `terminals` · `sandboxPolicy` · `sessionProjections` · `subprocess` +- `source`: [`packages/terminal/terminal-bash/src/config.ts:10`](../packages/terminal/terminal-bash/src/config.ts) ```ts config-catalog /** Public plugin configuration. */ @@ -3186,14 +3291,15 @@ export interface Config { /** One supported interactive shell dialect. */ export type ShellDialect = 'bash' | 'pwsh' ``` + -Source: [`packages/terminal/terminal-bash/src/config.ts:10`](../packages/terminal/terminal-bash/src/config.ts) - + ## `@deepseek-ai/dsh-time-context` -Requires: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/context/time-context/src/index.ts:56`](../packages/context/time-context/src/index.ts) ```ts config-catalog /** Request-preparation clock formatting and append scheduling. Invalid values fail plugin load. */ @@ -3204,14 +3310,15 @@ export interface Config { refreshIntervalMs?: number } ``` + -Source: [`packages/context/time-context/src/index.ts:56`](../packages/context/time-context/src/index.ts) - + ## `@deepseek-ai/dsh-tmux-context` -Requires: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/context/tmux-context/src/index.ts:47`](../packages/context/tmux-context/src/index.ts) ```ts config-catalog /** Per-turn tmux-location scheduling. Invalid values fail plugin load. */ @@ -3220,27 +3327,29 @@ export interface Config { refreshIntervalMs?: number } ``` + -Source: [`packages/context/tmux-context/src/index.ts:47`](../packages/context/tmux-context/src/index.ts) - + ## `@deepseek-ai/dsh-token-meter` -Requires: `sessionProjections` +- `inject`: `sessionProjections` +- `source`: [`packages/llm/token-meter/src/types.ts:13`](../packages/llm/token-meter/src/types.ts) ```ts config-catalog /** Token-meter plugin configuration; the fixed estimator has no settings. */ export type TokenMeterConfig = Record ``` + -Source: [`packages/llm/token-meter/src/types.ts:13`](../packages/llm/token-meter/src/types.ts) - + ## `@deepseek-ai/dsh-tool-bash` -Requires: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `inject`: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `source`: [`packages/shell/tool-bash/src/index.ts:37`](../packages/shell/tool-bash/src/index.ts) ```ts config-catalog /** Configuration for the bash tool. */ @@ -3262,14 +3371,15 @@ export interface Config { promoteOnTimeout?: boolean } ``` + -Source: [`packages/shell/tool-bash/src/index.ts:37`](../packages/shell/tool-bash/src/index.ts) - + ## `@deepseek-ai/dsh-tool-bash-persistent` -Requires: `tools` · `terminals` +- `inject`: `tools` · `terminals` +- `source`: [`packages/shell/tool-bash-persistent/src/index.ts:443`](../packages/shell/tool-bash-persistent/src/index.ts) ```ts config-catalog /** Configuration for the persistent Bash tool. */ @@ -3284,14 +3394,15 @@ export interface Config { description?: string } ``` + -Source: [`packages/shell/tool-bash-persistent/src/index.ts:443`](../packages/shell/tool-bash-persistent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-fs` -Requires: `tools` · `fs` · `systemPrompt` +- `inject`: `tools` · `fs` · `systemPrompt` +- `source`: [`packages/fs/tool-fs/src/index.ts:25`](../packages/fs/tool-fs/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `Config` supplies the defaults). */ @@ -3306,14 +3417,15 @@ export interface Config { readStreamMinSize?: number } ``` + -Source: [`packages/fs/tool-fs/src/index.ts:25`](../packages/fs/tool-fs/src/index.ts) - + ## `@deepseek-ai/dsh-tool-fs-search` -Requires: `tools` · `systemPrompt` · `subprocess` +- `inject`: `tools` · `systemPrompt` · `subprocess` +- `source`: [`packages/fs/tool-fs-search/src/index.ts:73`](../packages/fs/tool-fs-search/src/index.ts) ```ts config-catalog /** Plugin config; over-cap glob sampling is an explicit deployment choice and the remaining fields have defaults. */ @@ -3341,14 +3453,15 @@ export interface Config { timeoutMs?: number } ``` + -Source: [`packages/fs/tool-fs-search/src/index.ts:73`](../packages/fs/tool-fs-search/src/index.ts) - + ## `@deepseek-ai/dsh-tool-goal` -Requires: `agents` · `goals` · `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `agents` · `goals` · `tools` · `systemPrompt` · `sessionProjections` +- `source`: [`packages/goal/tool-goal/src/index.ts:32`](../packages/goal/tool-goal/src/index.ts) ```ts config-catalog /** Model policy and hard lower bounds for goal-state updates. */ @@ -3357,14 +3470,15 @@ export interface Config { blockedAfterConsecutiveRounds?: number } ``` + -Source: [`packages/goal/tool-goal/src/index.ts:32`](../packages/goal/tool-goal/src/index.ts) - + ## `@deepseek-ai/dsh-tool-jobs` -Requires: `tools` · `jobs` · `systemPrompt` +- `inject`: `tools` · `jobs` · `systemPrompt` +- `source`: [`packages/jobs/tool-jobs/src/index.ts:41`](../packages/jobs/tool-jobs/src/index.ts) ```ts config-catalog /** Configures bounded `job_output` waits and completion-notice delivery. */ @@ -3393,14 +3507,15 @@ export interface Config { */ export type CompletionDelivery = 'quiet' | 'wakeup' ``` + -Source: [`packages/jobs/tool-jobs/src/index.ts:41`](../packages/jobs/tool-jobs/src/index.ts) - + ## `@deepseek-ai/dsh-tool-lsp` -Requires: `tools` · `lsp` · `systemPrompt` +- `inject`: `tools` · `lsp` · `systemPrompt` +- `source`: [`packages/lsp/tool-lsp/src/index.ts:57`](../packages/lsp/tool-lsp/src/index.ts) ```ts config-catalog /** Plugin configuration: result caps and the timeout budget. */ @@ -3413,14 +3528,15 @@ export interface Config { timeoutMs?: number } ``` + -Source: [`packages/lsp/tool-lsp/src/index.ts:57`](../packages/lsp/tool-lsp/src/index.ts) - + ## `@deepseek-ai/dsh-tool-present` -Requires: `tools` · `fs` · `sessionProjections` +- `inject`: `tools` · `fs` · `sessionProjections` +- `source`: [`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) ```ts config-catalog /** Per-call delivery limit. */ @@ -3429,14 +3545,15 @@ export interface Config { maxFiles: number } ``` + -Source: [`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) - + ## `@deepseek-ai/dsh-tool-pwsh` -Requires: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `inject`: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `source`: [`packages/shell/tool-pwsh/src/index.ts:54`](../packages/shell/tool-pwsh/src/index.ts) ```ts config-catalog /** Configuration for the pwsh tool. */ @@ -3458,14 +3575,15 @@ export interface Config { promoteOnTimeout?: boolean } ``` + -Source: [`packages/shell/tool-pwsh/src/index.ts:54`](../packages/shell/tool-pwsh/src/index.ts) - + ## `@deepseek-ai/dsh-tool-pwsh-persistent` -Requires: `tools` · `terminals` +- `inject`: `tools` · `terminals` +- `source`: [`packages/shell/tool-pwsh-persistent/src/index.ts:455`](../packages/shell/tool-pwsh-persistent/src/index.ts) ```ts config-catalog /** Configuration for the persistent pwsh tool. */ @@ -3480,14 +3598,15 @@ export interface Config { description?: string } ``` + -Source: [`packages/shell/tool-pwsh-persistent/src/index.ts:455`](../packages/shell/tool-pwsh-persistent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-ralph` -Requires: `tools` · `workflowEngine` · `subagents` · `systemPrompt` +- `inject`: `tools` · `workflowEngine` · `subagents` · `systemPrompt` +- `source`: [`packages/workflow/tool-ralph/src/index.ts:21`](../packages/workflow/tool-ralph/src/index.ts) ```ts config-catalog /** Deployment policy for the fixed Ralph workflow. */ @@ -3502,14 +3621,15 @@ export interface Config { maxResultChars?: number } ``` + -Source: [`packages/workflow/tool-ralph/src/index.ts:21`](../packages/workflow/tool-ralph/src/index.ts) - + ## `@deepseek-ai/dsh-tool-session-query` -Requires: `tools` · `systemPrompt` · `sessionQuery` · `sessionProjections` +- `inject`: `tools` · `systemPrompt` · `sessionQuery` · `sessionProjections` +- `source`: [`packages/session-query/tool-session-query/src/index.ts:28`](../packages/session-query/tool-session-query/src/index.ts) ```ts config-catalog /** Deployment-owned search count and timeout bounds. */ @@ -3520,14 +3640,15 @@ export interface Config { searchTimeoutMs?: number } ``` + -Source: [`packages/session-query/tool-session-query/src/index.ts:28`](../packages/session-query/tool-session-query/src/index.ts) - + ## `@deepseek-ai/dsh-tool-skill` -Requires: `agents` · `tools` · `skills` +- `inject`: `agents` · `tools` · `skills` +- `source`: [`packages/skill/tool-skill/src/index.ts:61`](../packages/skill/tool-skill/src/index.ts) ```ts config-catalog /** Model-facing skill catalog configuration. */ @@ -3536,14 +3657,15 @@ export interface Config { catalogDescriptionMaxLength?: number } ``` + -Source: [`packages/skill/tool-skill/src/index.ts:61`](../packages/skill/tool-skill/src/index.ts) - + ## `@deepseek-ai/dsh-tool-str-replace-editor` -Requires: `tools` · `fs` +- `inject`: `tools` · `fs` +- `source`: [`packages/fs/tool-str-replace-editor/src/index.ts:505`](../packages/fs/tool-str-replace-editor/src/index.ts) ```ts config-catalog /** Configuration for the string-replacement editor tool. */ @@ -3554,14 +3676,16 @@ export interface Config { description?: string } ``` + -Source: [`packages/fs/tool-str-replace-editor/src/index.ts:505`](../packages/fs/tool-str-replace-editor/src/index.ts) - + ## `@deepseek-ai/dsh-tool-subagent` -Requires: `tools` · `subagents` · `systemPrompt` · `sessionProjections` +- `inject`: `tools` · `subagents` · `systemPrompt` · `sessionProjections` +- `refs`: [`AgentOptions`](subsystems/core.md) +- `source`: [`packages/subagent/tool-subagent/src/index.ts:48`](../packages/subagent/tool-subagent/src/index.ts) ```ts config-catalog /** Config: which registered provider this tool delegates to, plus child defaults. */ @@ -3623,16 +3747,15 @@ export interface Config { maxDepth?: number | 'provider-managed' } ``` + -Depends on: [`AgentOptions`](subsystems/core.md) - -Source: [`packages/subagent/tool-subagent/src/index.ts:48`](../packages/subagent/tool-subagent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-terminal` -Requires: `terminals` · `tools` · `systemPrompt` +- `inject`: `terminals` · `tools` · `systemPrompt` +- `source`: [`packages/terminal/tool-terminal/src/index.ts:36`](../packages/terminal/tool-terminal/src/index.ts) ```ts config-catalog /** Model-facing terminal tool configuration. */ @@ -3643,14 +3766,15 @@ export interface Config { maxResultBytes?: number } ``` + -Source: [`packages/terminal/tool-terminal/src/index.ts:36`](../packages/terminal/tool-terminal/src/index.ts) - + ## `@deepseek-ai/dsh-tool-todo` -Requires: `tools` · `sessionProjections` +- `inject`: `tools` · `sessionProjections` +- `source`: [`packages/todo/tool-todo/src/index.ts:29`](../packages/todo/tool-todo/src/index.ts) ```ts config-catalog /** Model-facing todo tool configuration. */ @@ -3665,14 +3789,15 @@ export interface Config { allowParallelInProgress: boolean } ``` + -Source: [`packages/todo/tool-todo/src/index.ts:29`](../packages/todo/tool-todo/src/index.ts) - + ## `@deepseek-ai/dsh-tool-web` -Requires: `tools` · `web` · `systemPrompt` +- `inject`: `tools` · `web` · `systemPrompt` +- `source`: [`packages/web/tool-web/src/index.ts:37`](../packages/web/tool-web/src/index.ts) ```ts config-catalog /** Plugin config: which web tools to register, search bounds, per-tool budgets, and the fetch output cap. */ @@ -3693,14 +3818,15 @@ export interface Config { fetchMaxOutputChars?: number } ``` + -Source: [`packages/web/tool-web/src/index.ts:37`](../packages/web/tool-web/src/index.ts) - + ## `@deepseek-ai/dsh-tool-workflow` -Requires: `tools` · `workflowEngine` · `systemPrompt` +- `inject`: `tools` · `workflowEngine` · `systemPrompt` +- `source`: [`packages/workflow/tool-workflow/src/index.ts:44`](../packages/workflow/tool-workflow/src/index.ts) ```ts config-catalog /** Config: the model-facing tool name plus result rendering caps. */ @@ -3719,14 +3845,15 @@ export interface Config { enableRunInBackground?: boolean } ``` + -Source: [`packages/workflow/tool-workflow/src/index.ts:44`](../packages/workflow/tool-workflow/src/index.ts) - + ## `@deepseek-ai/dsh-tool-workspace-dependencies` -Requires: `tools` +- `inject`: `tools` +- `source`: [`packages/skill/tool-workspace-dependencies/src/index.ts:15`](../packages/skill/tool-workspace-dependencies/src/index.ts) ```ts config-catalog /** Payload location and optional installation directory. */ @@ -3741,14 +3868,15 @@ export interface Config { readonly root?: string } ``` + -Source: [`packages/skill/tool-workspace-dependencies/src/index.ts:15`](../packages/skill/tool-workspace-dependencies/src/index.ts) - + ## `@deepseek-ai/dsh-tools` -Requires: `systemPrompt` +- `inject`: `systemPrompt` +- `source`: [`packages/core/tools/src/index.ts:673`](../packages/core/tools/src/index.ts) ```ts config-catalog /** Plugin config: how the registered tools are presented to the model. */ @@ -3777,14 +3905,15 @@ export interface Config { /** How the registry presents its tools to the model (see {@link Config.mode}). */ export type ToolPresentationMode = 'native' | 'ptc' | 'both' ``` + -Source: [`packages/core/tools/src/index.ts:673`](../packages/core/tools/src/index.ts) - + ## `@deepseek-ai/dsh-typert-loader` -Requires: `typert` · `loader` +- `inject`: `typert` · `loader` +- `source`: [`packages/typert/loader/src/index.ts:48`](../packages/typert/loader/src/index.ts) ```ts config-catalog /** Additional package artifacts whose owning plugins are nested behind another Loader entry. */ @@ -3793,13 +3922,15 @@ export interface Config { packages?: string[] } ``` + -Source: [`packages/typert/loader/src/index.ts:48`](../packages/typert/loader/src/index.ts) - + ## `@deepseek-ai/dsh-user-approval` +- `source`: [`packages/interaction/user-approval/src/index.ts:135`](../packages/interaction/user-approval/src/index.ts) + ```ts config-catalog /** Plugin config. All optional — `static Config` supplies the defaults. */ export interface Config { @@ -3824,13 +3955,15 @@ export interface Config { */ export type ApprovalPolicy = 'ask' | 'never' ``` + -Source: [`packages/interaction/user-approval/src/index.ts:135`](../packages/interaction/user-approval/src/index.ts) - + ## `@deepseek-ai/dsh-web` +- `source`: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts) + ```ts config-catalog /** * Config for the web seam. `searchProvider` / `fetchProvider` pin which provider @@ -3845,14 +3978,15 @@ export interface WebRuntimeConfig { readonly fetchProvider?: string } ``` + -Source: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts) - + ## `@deepseek-ai/dsh-web-app` -Requires: `webServer` +- `inject`: `webServer` +- `source`: [`packages/bundle/web-app/src/index.ts:44`](../packages/bundle/web-app/src/index.ts) ```ts config-catalog /** Plugin config: composed deployment settings plus per-invocation command-line values. */ @@ -3872,14 +4006,15 @@ export interface Config { trustedHosts: string[] } ``` + -Source: [`packages/bundle/web-app/src/index.ts:44`](../packages/bundle/web-app/src/index.ts) - + ## `@deepseek-ai/dsh-web-fetch-http` -Requires: `web` +- `inject`: `web` +- `source`: [`packages/web/web-fetch-http/src/index.ts:32`](../packages/web/web-fetch-http/src/index.ts) ```ts config-catalog /** Plugin config: the provider's transport and size limits plus its `User-Agent` (all defaulted). */ @@ -3896,14 +4031,16 @@ export interface Config { userAgent?: string } ``` + -Source: [`packages/web/web-fetch-http/src/index.ts:32`](../packages/web/web-fetch-http/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-deepseek` -Requires: `web` +- `inject`: `web` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/web/web-search-deepseek/src/index.ts:46`](../packages/web/web-search-deepseek/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3924,16 +4061,15 @@ export interface Config { maxUses: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -Source: [`packages/web/web-search-deepseek/src/index.ts:46`](../packages/web/web-search-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-exa` -Requires: `web` +- `inject`: `web` +- `source`: [`packages/web/web-search-exa/src/index.ts:35`](../packages/web/web-search-exa/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3950,14 +4086,15 @@ export interface Config { highlightsPerResult?: number } ``` + -Source: [`packages/web/web-search-exa/src/index.ts:35`](../packages/web/web-search-exa/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-perplexity` -Requires: `web` +- `inject`: `web` +- `source`: [`packages/web/web-search-perplexity/src/index.ts:30`](../packages/web/web-search-perplexity/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3974,14 +4111,15 @@ export interface Config { searchRecency?: 'day' | 'week' | 'month' | 'year' } ``` + -Source: [`packages/web/web-search-perplexity/src/index.ts:30`](../packages/web/web-search-perplexity/src/index.ts) - + ## `@deepseek-ai/dsh-webhook-github` -Requires: `webServer` · `webhookRuntime` · `credentials` +- `inject`: `webServer` · `webhookRuntime` · `credentials` +- `source`: [`packages/webhook/webhook-github/src/index.ts:17`](../packages/webhook/webhook-github/src/index.ts) ```ts config-catalog /** Required GitHub ingress configuration. */ @@ -3996,14 +4134,15 @@ export interface Config { readonly maxBodyBytes: number } ``` + -Source: [`packages/webhook/webhook-github/src/index.ts:17`](../packages/webhook/webhook-github/src/index.ts) - + ## `@deepseek-ai/dsh-workflow-ptc` -Requires: `subagents` · `ptcRuntime` · `sandboxPolicy` +- `inject`: `subagents` · `ptcRuntime` · `sandboxPolicy` +- `source`: [`packages/workflow/workflow-ptc/src/index.ts:32`](../packages/workflow/workflow-ptc/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `static Config` supplies the defaults). */ @@ -4020,14 +4159,15 @@ export interface Config { syncTimeoutMs?: number } ``` + -Source: [`packages/workflow/workflow-ptc/src/index.ts:32`](../packages/workflow/workflow-ptc/src/index.ts) - + ## `@deepseek-ai/dsh-workspace-changes` -Requires: `subprocess` +- `inject`: `subprocess` +- `source`: [`packages/deliverables/workspace-changes/src/index.ts:33`](../packages/deliverables/workspace-changes/src/index.ts) ```ts config-catalog /** Snapshot, capture, and comparison bounds. Invalid values fail plugin load. */ @@ -4047,188 +4187,199 @@ export interface Config { diffTimeoutMs: number } ``` - -Source: [`packages/deliverables/workspace-changes/src/index.ts:33`](../packages/deliverables/workspace-changes/src/index.ts) + ## Loadable plugins with no config These load from a `cordis.yml` entry with no `config:` block; they declare no configuration API. -- `@deepseek-ai/dsh-acp-app` — requires `cmdlineArgs` ([`packages/bundle/acp-app/src/index.ts`](../packages/bundle/acp-app/src/index.ts)) -- `@deepseek-ai/dsh-agent` ([`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts)) -- `@deepseek-ai/dsh-api-account-controller` — requires `deepseekAccount` · `agents` ([`packages/api/account-controller/src/index.ts`](../packages/api/account-controller/src/index.ts)) -- `@deepseek-ai/dsh-api-remotes` — requires `typertGateway` ([`packages/api/remotes/src/index.ts`](../packages/api/remotes/src/index.ts)) -- `@deepseek-ai/dsh-authorization` — requires `credentials` ([`packages/credentials/authorization/src/index.ts`](../packages/credentials/authorization/src/index.ts)) -- `@deepseek-ai/dsh-browser-use` ([`packages/browser-use/browser-use/src/index.ts`](../packages/browser-use/browser-use/src/index.ts)) -- `@deepseek-ai/dsh-client-file-upload` — requires `agents` · `attachments` · `commands` · `connection` ([`packages/client/file-upload/src/index.ts`](../packages/client/file-upload/src/index.ts)) -- `@deepseek-ai/dsh-client-locale` ([`packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts)) -- `@deepseek-ai/dsh-client-modules` — requires `loader` ([`packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts)) -- `@deepseek-ai/dsh-client-resources` ([`packages/client/resources/src/index.ts`](../packages/client/resources/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-agent-preset` ([`packages/client/ui-agent-preset/src/index.ts`](../packages/client/ui-agent-preset/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-approval` ([`packages/client/ui-approval/src/index.ts`](../packages/client/ui-approval/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-attachment` ([`packages/client/ui-attachment/src/index.ts`](../packages/client/ui-attachment/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-brand-official` ([`packages/client/ui-brand-official/src/index.ts`](../packages/client/ui-brand-official/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-chat` ([`packages/client/ui-chat/src/index.ts`](../packages/client/ui-chat/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-commands` ([`packages/client/ui-commands/src/index.ts`](../packages/client/ui-commands/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-conversation` ([`packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-cordis` ([`packages/extensions/ui-cordis/src/index.ts`](../packages/extensions/ui-cordis/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-deliverables` — requires `systemPrompt` · `connection` · `sessionQuery` · `sessionController` · `workspaceFiles` · `fs` · `sandboxPolicy` · `workspaceChanges` ([`packages/client/ui-deliverables/src/index.ts`](../packages/client/ui-deliverables/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-directory-picker-browse` ([`packages/client/ui-directory-picker-browse/src/index.ts`](../packages/client/ui-directory-picker-browse/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-directory-picker-native` ([`packages/client/ui-directory-picker-native/src/index.ts`](../packages/client/ui-directory-picker-native/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-goal` ([`packages/client/ui-goal/src/index.ts`](../packages/client/ui-goal/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-input-trigger` ([`packages/client/ui-input-trigger/src/index.ts`](../packages/client/ui-input-trigger/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-jobs` ([`packages/client/ui-jobs/src/index.ts`](../packages/client/ui-jobs/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-layout` ([`packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-message-feedback` ([`packages/client/ui-message-feedback/src/index.ts`](../packages/client/ui-message-feedback/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-model-selection` ([`packages/client/ui-model-selection/src/index.ts`](../packages/client/ui-model-selection/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-open-in-app` ([`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-permission-presets` ([`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-plan` ([`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-reference` ([`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-renderer` ([`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-schedule` ([`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-session` ([`packages/client/ui-session/src/index.ts`](../packages/client/ui-session/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings` ([`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-agent-loop` ([`packages/client/ui-settings-agent-loop/src/index.ts`](../packages/client/ui-settings-agent-loop/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-general` ([`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-plugin-inventory` ([`packages/client/ui-settings-plugin-inventory/src/index.ts`](../packages/client/ui-settings-plugin-inventory/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-plugins` ([`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-shell` ([`packages/client/ui-settings-shell/src/index.ts`](../packages/client/ui-settings-shell/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-subagent` ([`packages/client/ui-settings-subagent/src/index.ts`](../packages/client/ui-settings-subagent/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-web-search` ([`packages/client/ui-settings-web-search/src/index.ts`](../packages/client/ui-settings-web-search/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar` ([`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-browser` ([`packages/client/ui-sidebar-browser/src/index.ts`](../packages/client/ui-sidebar-browser/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-files` ([`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-right` ([`packages/client/ui-sidebar-right/src/index.ts`](../packages/client/ui-sidebar-right/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-terminal` ([`packages/client/ui-sidebar-terminal/src/index.ts`](../packages/client/ui-sidebar-terminal/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-skill` ([`packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-subagent` ([`packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-tool` ([`packages/client/ui-tool/src/index.ts`](../packages/client/ui-tool/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-trajectory` ([`packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-user-questions` ([`packages/client/ui-user-questions/src/index.ts`](../packages/client/ui-user-questions/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-workflow-run` ([`packages/client/ui-workflow-run/src/index.ts`](../packages/client/ui-workflow-run/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-workspace` ([`packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts)) -- `@deepseek-ai/dsh-command-compact` — requires `commands` · `compaction` ([`packages/compaction/command-compact/src/index.ts`](../packages/compaction/command-compact/src/index.ts)) -- `@deepseek-ai/dsh-command-feedback` — requires `commands` ([`packages/feedback/command-feedback/src/index.ts`](../packages/feedback/command-feedback/src/index.ts)) -- `@deepseek-ai/dsh-command-goal` — requires `commands` · `goals` ([`packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts)) -- `@deepseek-ai/dsh-commands` ([`packages/interaction/commands/src/index.ts`](../packages/interaction/commands/src/index.ts)) -- `@deepseek-ai/dsh-compaction-image-offload` — requires `agents` · `sessions` ([`packages/compaction/compaction-image-offload/src/index.ts`](../packages/compaction/compaction-image-offload/src/index.ts)) -- `@deepseek-ai/dsh-computer-use` ([`packages/computer-use/computer-use/src/index.ts`](../packages/computer-use/computer-use/src/index.ts)) -- `@deepseek-ai/dsh-config-editor` — requires `loader` · `profileContext` ([`packages/boot/config-editor/src/index.ts`](../packages/boot/config-editor/src/index.ts)) -- `@deepseek-ai/dsh-cordis-client-runner` ([`packages/extensions/cordis-client-runner/src/index.ts`](../packages/extensions/cordis-client-runner/src/index.ts)) -- `@deepseek-ai/dsh-deepseek-llm-api-extensions` ([`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts)) -- `@deepseek-ai/dsh-experimental-auto-review` — requires `llm` · `permissionPresets` · `sessions` · `tools` ([`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts)) -- `@deepseek-ai/dsh-experimental-client-ui-agent-team` ([`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts)) -- `@deepseek-ai/dsh-experimental-client-ui-voice-input` ([`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts)) -- `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` — requires `computerUse` · `tools` · `systemPrompt` ([`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts)) -- `@deepseek-ai/dsh-fs-observation-policy` ([`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts)) -- `@deepseek-ai/dsh-fs-ssh` — requires `ssh` · `sandboxPolicy` ([`packages/ssh/fs-ssh/src/index.ts`](../packages/ssh/fs-ssh/src/index.ts)) -- `@deepseek-ai/dsh-goal-round-driver` — requires `agents` · `goals` · `sessions` ([`packages/goal/goal-round-driver/src/index.ts`](../packages/goal/goal-round-driver/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker-auto` — requires `webServer` · `loader` ([`packages/host/directory-picker-auto/src/index.ts`](../packages/host/directory-picker-auto/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker-native` ([`packages/host/directory-picker-native/src/index.ts`](../packages/host/directory-picker-native/src/index.ts)) -- `@deepseek-ai/dsh-host-plugin-inventory` — requires `loader` ([`packages/host/plugin-inventory/src/index.ts`](../packages/host/plugin-inventory/src/index.ts)) -- `@deepseek-ai/dsh-llm` ([`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts)) -- `@deepseek-ai/dsh-lsp` ([`packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts)) -- `@deepseek-ai/dsh-mcp-resources` — requires `tools` ([`packages/mcp/mcp-resources/src/index.ts`](../packages/mcp/mcp-resources/src/index.ts)) -- `@deepseek-ai/dsh-sandbox-ssh` — requires `ssh` ([`packages/ssh/sandbox-ssh/src/index.ts`](../packages/ssh/sandbox-ssh/src/index.ts)) -- `@deepseek-ai/dsh-schedule` — requires `agents` · `sessions` · `tools` · `sessionPersistence` ([`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts)) -- `@deepseek-ai/dsh-session` ([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts)) -- `@deepseek-ai/dsh-session-checkpoint-policy` — requires `llm` · `sessionPersistence` · `sessions` · `tools` ([`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts)) -- `@deepseek-ai/dsh-session-projection` ([`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts)) -- `@deepseek-ai/dsh-session-stats` — requires `sessionProjections` ([`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts)) -- `@deepseek-ai/dsh-session-turn-outline` — requires `sessionProjections` ([`packages/session/session-turn-outline/src/index.ts`](../packages/session/session-turn-outline/src/index.ts)) -- `@deepseek-ai/dsh-settings` — requires `configEditor` · `profileContext` ([`packages/settings/settings/src/index.ts`](../packages/settings/settings/src/index.ts)) -- `@deepseek-ai/dsh-skill-badge` — requires `skills` ([`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts)) -- `@deepseek-ai/dsh-storage` ([`packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts)) -- `@deepseek-ai/dsh-subprocess-local` ([`packages/subprocess/subprocess-local/src/index.ts`](../packages/subprocess/subprocess-local/src/index.ts)) -- `@deepseek-ai/dsh-subprocess-ssh` — requires `ssh` ([`packages/ssh/subprocess-ssh/src/index.ts`](../packages/ssh/subprocess-ssh/src/index.ts)) -- `@deepseek-ai/dsh-terminal` ([`packages/terminal/terminal/src/index.ts`](../packages/terminal/terminal/src/index.ts)) -- `@deepseek-ai/dsh-tool-ask-user` — requires `tools` · `userQuestions` ([`packages/interaction/tool-ask-user/src/index.ts`](../packages/interaction/tool-ask-user/src/index.ts)) -- `@deepseek-ai/dsh-tool-call-timeout-policy` — requires `tools` ([`packages/guard/timeout-policy/src/index.ts`](../packages/guard/timeout-policy/src/index.ts)) -- `@deepseek-ai/dsh-tool-cordis` — requires `tools` · `cordisInspect` ([`packages/extensions/tool-cordis/src/index.ts`](../packages/extensions/tool-cordis/src/index.ts)) -- `@deepseek-ai/dsh-tool-subagent-control` — requires `tools` · `subagents` ([`packages/subagent/tool-subagent-control/src/index.ts`](../packages/subagent/tool-subagent-control/src/index.ts)) -- `@deepseek-ai/dsh-user-questions` ([`packages/interaction/user-questions/src/index.ts`](../packages/interaction/user-questions/src/index.ts)) -- `@deepseek-ai/dsh-webhook` — requires `agents` · `agentDefaultModel` · `agentPresets` · `permissionPresets` · `sessionTitle` · `workspaceRegistry` ([`packages/webhook/webhook/src/index.ts`](../packages/webhook/webhook/src/index.ts)) -- `@deepseek-ai/dsh-workspace` — requires `storageDomain` · `sessionPersistence` ([`packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts)) + +| `package` | `inject` | `source` | +| --- | --- | --- | +| `@deepseek-ai/dsh-acp-app` | `cmdlineArgs` | [`packages/bundle/acp-app/src/index.ts`](../packages/bundle/acp-app/src/index.ts) | +| `@deepseek-ai/dsh-agent` | — | [`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts) | +| `@deepseek-ai/dsh-api-account-controller` | `deepseekAccount` · `agents` | [`packages/api/account-controller/src/index.ts`](../packages/api/account-controller/src/index.ts) | +| `@deepseek-ai/dsh-api-remotes` | `typertGateway` | [`packages/api/remotes/src/index.ts`](../packages/api/remotes/src/index.ts) | +| `@deepseek-ai/dsh-authorization` | `credentials` | [`packages/credentials/authorization/src/index.ts`](../packages/credentials/authorization/src/index.ts) | +| `@deepseek-ai/dsh-browser-use` | — | [`packages/browser-use/browser-use/src/index.ts`](../packages/browser-use/browser-use/src/index.ts) | +| `@deepseek-ai/dsh-client-file-upload` | `agents` · `attachments` · `commands` · `connection` | [`packages/client/file-upload/src/index.ts`](../packages/client/file-upload/src/index.ts) | +| `@deepseek-ai/dsh-client-locale` | — | [`packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts) | +| `@deepseek-ai/dsh-client-modules` | `loader` | [`packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts) | +| `@deepseek-ai/dsh-client-resources` | — | [`packages/client/resources/src/index.ts`](../packages/client/resources/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-agent-preset` | — | [`packages/client/ui-agent-preset/src/index.ts`](../packages/client/ui-agent-preset/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-approval` | — | [`packages/client/ui-approval/src/index.ts`](../packages/client/ui-approval/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-attachment` | — | [`packages/client/ui-attachment/src/index.ts`](../packages/client/ui-attachment/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-brand-official` | — | [`packages/client/ui-brand-official/src/index.ts`](../packages/client/ui-brand-official/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-chat` | — | [`packages/client/ui-chat/src/index.ts`](../packages/client/ui-chat/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-commands` | — | [`packages/client/ui-commands/src/index.ts`](../packages/client/ui-commands/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-conversation` | — | [`packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-cordis` | — | [`packages/extensions/ui-cordis/src/index.ts`](../packages/extensions/ui-cordis/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-deliverables` | `systemPrompt` · `connection` · `sessionQuery` · `sessionController` · `workspaceFiles` · `fs` · `sandboxPolicy` · `workspaceChanges` | [`packages/client/ui-deliverables/src/index.ts`](../packages/client/ui-deliverables/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-directory-picker-browse` | — | [`packages/client/ui-directory-picker-browse/src/index.ts`](../packages/client/ui-directory-picker-browse/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-directory-picker-native` | — | [`packages/client/ui-directory-picker-native/src/index.ts`](../packages/client/ui-directory-picker-native/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-goal` | — | [`packages/client/ui-goal/src/index.ts`](../packages/client/ui-goal/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-input-trigger` | — | [`packages/client/ui-input-trigger/src/index.ts`](../packages/client/ui-input-trigger/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-jobs` | — | [`packages/client/ui-jobs/src/index.ts`](../packages/client/ui-jobs/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-layout` | — | [`packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-message-feedback` | — | [`packages/client/ui-message-feedback/src/index.ts`](../packages/client/ui-message-feedback/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-model-selection` | — | [`packages/client/ui-model-selection/src/index.ts`](../packages/client/ui-model-selection/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-open-in-app` | — | [`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-permission-presets` | — | [`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-plan` | — | [`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-reference` | — | [`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-renderer` | — | [`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-schedule` | — | [`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-session` | — | [`packages/client/ui-session/src/index.ts`](../packages/client/ui-session/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings` | — | [`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-agent-loop` | — | [`packages/client/ui-settings-agent-loop/src/index.ts`](../packages/client/ui-settings-agent-loop/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-general` | — | [`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-plugin-inventory` | — | [`packages/client/ui-settings-plugin-inventory/src/index.ts`](../packages/client/ui-settings-plugin-inventory/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-plugins` | — | [`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-shell` | — | [`packages/client/ui-settings-shell/src/index.ts`](../packages/client/ui-settings-shell/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-subagent` | — | [`packages/client/ui-settings-subagent/src/index.ts`](../packages/client/ui-settings-subagent/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-web-search` | — | [`packages/client/ui-settings-web-search/src/index.ts`](../packages/client/ui-settings-web-search/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar` | — | [`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-browser` | — | [`packages/client/ui-sidebar-browser/src/index.ts`](../packages/client/ui-sidebar-browser/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-files` | — | [`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-right` | — | [`packages/client/ui-sidebar-right/src/index.ts`](../packages/client/ui-sidebar-right/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-terminal` | — | [`packages/client/ui-sidebar-terminal/src/index.ts`](../packages/client/ui-sidebar-terminal/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-skill` | — | [`packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-subagent` | — | [`packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-tool` | — | [`packages/client/ui-tool/src/index.ts`](../packages/client/ui-tool/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-trajectory` | — | [`packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-user-questions` | — | [`packages/client/ui-user-questions/src/index.ts`](../packages/client/ui-user-questions/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-workflow-run` | — | [`packages/client/ui-workflow-run/src/index.ts`](../packages/client/ui-workflow-run/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-workspace` | — | [`packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts) | +| `@deepseek-ai/dsh-command-compact` | `commands` · `compaction` | [`packages/compaction/command-compact/src/index.ts`](../packages/compaction/command-compact/src/index.ts) | +| `@deepseek-ai/dsh-command-feedback` | `commands` | [`packages/feedback/command-feedback/src/index.ts`](../packages/feedback/command-feedback/src/index.ts) | +| `@deepseek-ai/dsh-command-goal` | `commands` · `goals` | [`packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts) | +| `@deepseek-ai/dsh-commands` | — | [`packages/interaction/commands/src/index.ts`](../packages/interaction/commands/src/index.ts) | +| `@deepseek-ai/dsh-compaction-image-offload` | `agents` · `sessions` | [`packages/compaction/compaction-image-offload/src/index.ts`](../packages/compaction/compaction-image-offload/src/index.ts) | +| `@deepseek-ai/dsh-computer-use` | — | [`packages/computer-use/computer-use/src/index.ts`](../packages/computer-use/computer-use/src/index.ts) | +| `@deepseek-ai/dsh-config-editor` | `loader` · `profileContext` | [`packages/boot/config-editor/src/index.ts`](../packages/boot/config-editor/src/index.ts) | +| `@deepseek-ai/dsh-cordis-client-runner` | — | [`packages/extensions/cordis-client-runner/src/index.ts`](../packages/extensions/cordis-client-runner/src/index.ts) | +| `@deepseek-ai/dsh-deepseek-llm-api-extensions` | — | [`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts) | +| `@deepseek-ai/dsh-experimental-auto-review` | `llm` · `permissionPresets` · `sessions` · `tools` | [`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts) | +| `@deepseek-ai/dsh-experimental-client-ui-agent-team` | — | [`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts) | +| `@deepseek-ai/dsh-experimental-client-ui-voice-input` | — | [`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts) | +| `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` | `computerUse` · `tools` · `systemPrompt` | [`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts) | +| `@deepseek-ai/dsh-fs-observation-policy` | — | [`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts) | +| `@deepseek-ai/dsh-fs-ssh` | `ssh` · `sandboxPolicy` | [`packages/ssh/fs-ssh/src/index.ts`](../packages/ssh/fs-ssh/src/index.ts) | +| `@deepseek-ai/dsh-goal-round-driver` | `agents` · `goals` · `sessions` | [`packages/goal/goal-round-driver/src/index.ts`](../packages/goal/goal-round-driver/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker-auto` | `webServer` · `loader` | [`packages/host/directory-picker-auto/src/index.ts`](../packages/host/directory-picker-auto/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker-native` | — | [`packages/host/directory-picker-native/src/index.ts`](../packages/host/directory-picker-native/src/index.ts) | +| `@deepseek-ai/dsh-host-plugin-inventory` | `loader` | [`packages/host/plugin-inventory/src/index.ts`](../packages/host/plugin-inventory/src/index.ts) | +| `@deepseek-ai/dsh-llm` | — | [`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts) | +| `@deepseek-ai/dsh-lsp` | — | [`packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts) | +| `@deepseek-ai/dsh-mcp-resources` | `tools` | [`packages/mcp/mcp-resources/src/index.ts`](../packages/mcp/mcp-resources/src/index.ts) | +| `@deepseek-ai/dsh-sandbox-ssh` | `ssh` | [`packages/ssh/sandbox-ssh/src/index.ts`](../packages/ssh/sandbox-ssh/src/index.ts) | +| `@deepseek-ai/dsh-schedule` | `agents` · `sessions` · `tools` · `sessionPersistence` | [`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts) | +| `@deepseek-ai/dsh-session` | — | [`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts) | +| `@deepseek-ai/dsh-session-checkpoint-policy` | `llm` · `sessionPersistence` · `sessions` · `tools` | [`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts) | +| `@deepseek-ai/dsh-session-projection` | — | [`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts) | +| `@deepseek-ai/dsh-session-stats` | `sessionProjections` | [`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts) | +| `@deepseek-ai/dsh-session-turn-outline` | `sessionProjections` | [`packages/session/session-turn-outline/src/index.ts`](../packages/session/session-turn-outline/src/index.ts) | +| `@deepseek-ai/dsh-settings` | `configEditor` · `profileContext` | [`packages/settings/settings/src/index.ts`](../packages/settings/settings/src/index.ts) | +| `@deepseek-ai/dsh-skill-badge` | `skills` | [`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts) | +| `@deepseek-ai/dsh-storage` | — | [`packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts) | +| `@deepseek-ai/dsh-subprocess-local` | — | [`packages/subprocess/subprocess-local/src/index.ts`](../packages/subprocess/subprocess-local/src/index.ts) | +| `@deepseek-ai/dsh-subprocess-ssh` | `ssh` | [`packages/ssh/subprocess-ssh/src/index.ts`](../packages/ssh/subprocess-ssh/src/index.ts) | +| `@deepseek-ai/dsh-terminal` | — | [`packages/terminal/terminal/src/index.ts`](../packages/terminal/terminal/src/index.ts) | +| `@deepseek-ai/dsh-tool-ask-user` | `tools` · `userQuestions` | [`packages/interaction/tool-ask-user/src/index.ts`](../packages/interaction/tool-ask-user/src/index.ts) | +| `@deepseek-ai/dsh-tool-call-timeout-policy` | `tools` | [`packages/guard/timeout-policy/src/index.ts`](../packages/guard/timeout-policy/src/index.ts) | +| `@deepseek-ai/dsh-tool-cordis` | `tools` · `cordisInspect` | [`packages/extensions/tool-cordis/src/index.ts`](../packages/extensions/tool-cordis/src/index.ts) | +| `@deepseek-ai/dsh-tool-subagent-control` | `tools` · `subagents` | [`packages/subagent/tool-subagent-control/src/index.ts`](../packages/subagent/tool-subagent-control/src/index.ts) | +| `@deepseek-ai/dsh-user-questions` | — | [`packages/interaction/user-questions/src/index.ts`](../packages/interaction/user-questions/src/index.ts) | +| `@deepseek-ai/dsh-webhook` | `agents` · `agentDefaultModel` · `agentPresets` · `permissionPresets` · `sessionTitle` · `workspaceRegistry` | [`packages/webhook/webhook/src/index.ts`](../packages/webhook/webhook/src/index.ts) | +| `@deepseek-ai/dsh-workspace` | `storageDomain` · `sessionPersistence` | [`packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts) | + ## Seam packages (not directly loadable) Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md)). -- `@deepseek-ai/dsh-attachment` — abstract `AttachmentStore` ([`packages/attachment/attachment/src/index.ts`](../packages/attachment/attachment/src/index.ts)) -- `@deepseek-ai/dsh-compaction` — abstract `CompactionEngine` ([`packages/compaction/compaction/src/index.ts`](../packages/compaction/compaction/src/index.ts)) -- `@deepseek-ai/dsh-credentials` — abstract `CredentialProvider` ([`packages/credentials/credentials/src/index.ts`](../packages/credentials/credentials/src/index.ts)) -- `@deepseek-ai/dsh-deepseek-account` — abstract `DeepSeekAccount` ([`packages/credentials/deepseek-account/src/index.ts`](../packages/credentials/deepseek-account/src/index.ts)) -- `@deepseek-ai/dsh-file-reference` — abstract `FileReferenceService` ([`packages/context/file-reference/src/index.ts`](../packages/context/file-reference/src/index.ts)) -- `@deepseek-ai/dsh-fs` — abstract `FileSystem` ([`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker` — abstract `DirectoryPicker` ([`packages/host/directory-picker/src/index.ts`](../packages/host/directory-picker/src/index.ts)) -- `@deepseek-ai/dsh-jobs` — abstract `JobRegistry` ([`packages/jobs/jobs/src/index.ts`](../packages/jobs/jobs/src/index.ts)) -- `@deepseek-ai/dsh-ptc-runtime` — abstract `PtcRuntime` ([`packages/ptc-runtime/ptc-runtime/src/index.ts`](../packages/ptc-runtime/ptc-runtime/src/index.ts)) -- `@deepseek-ai/dsh-sandbox` — abstract `SandboxProvider` ([`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts)) -- `@deepseek-ai/dsh-session-persistence` — abstract `SessionPersistence` ([`packages/session/session-persistence/src/index.ts`](../packages/session/session-persistence/src/index.ts)) -- `@deepseek-ai/dsh-session-query` — abstract `SessionQueryEngine` ([`packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts)) -- `@deepseek-ai/dsh-shell` — abstract `ShellExecutor` ([`packages/shell/shell/src/index.ts`](../packages/shell/shell/src/index.ts)) -- `@deepseek-ai/dsh-spill` — abstract `SpillStore` ([`packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts)) -- `@deepseek-ai/dsh-subprocess` — abstract `SubprocessRuntime` ([`packages/subprocess/subprocess/src/index.ts`](../packages/subprocess/subprocess/src/index.ts)) -- `@deepseek-ai/dsh-workflow` — abstract `WorkflowEngine` ([`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts)) + +| `package` | `class` | `inject` | `source` | +| --- | --- | --- | --- | +| `@deepseek-ai/dsh-attachment` | `AttachmentStore` | — | [`packages/attachment/attachment/src/index.ts`](../packages/attachment/attachment/src/index.ts) | +| `@deepseek-ai/dsh-compaction` | `CompactionEngine` | — | [`packages/compaction/compaction/src/index.ts`](../packages/compaction/compaction/src/index.ts) | +| `@deepseek-ai/dsh-credentials` | `CredentialProvider` | — | [`packages/credentials/credentials/src/index.ts`](../packages/credentials/credentials/src/index.ts) | +| `@deepseek-ai/dsh-deepseek-account` | `DeepSeekAccount` | — | [`packages/credentials/deepseek-account/src/index.ts`](../packages/credentials/deepseek-account/src/index.ts) | +| `@deepseek-ai/dsh-file-reference` | `FileReferenceService` | — | [`packages/context/file-reference/src/index.ts`](../packages/context/file-reference/src/index.ts) | +| `@deepseek-ai/dsh-fs` | `FileSystem` | — | [`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker` | `DirectoryPicker` | — | [`packages/host/directory-picker/src/index.ts`](../packages/host/directory-picker/src/index.ts) | +| `@deepseek-ai/dsh-jobs` | `JobRegistry` | — | [`packages/jobs/jobs/src/index.ts`](../packages/jobs/jobs/src/index.ts) | +| `@deepseek-ai/dsh-ptc-runtime` | `PtcRuntime` | — | [`packages/ptc-runtime/ptc-runtime/src/index.ts`](../packages/ptc-runtime/ptc-runtime/src/index.ts) | +| `@deepseek-ai/dsh-sandbox` | `SandboxProvider` | — | [`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts) | +| `@deepseek-ai/dsh-session-persistence` | `SessionPersistence` | — | [`packages/session/session-persistence/src/index.ts`](../packages/session/session-persistence/src/index.ts) | +| `@deepseek-ai/dsh-session-query` | `SessionQueryEngine` | — | [`packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts) | +| `@deepseek-ai/dsh-shell` | `ShellExecutor` | — | [`packages/shell/shell/src/index.ts`](../packages/shell/shell/src/index.ts) | +| `@deepseek-ai/dsh-spill` | `SpillStore` | — | [`packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts) | +| `@deepseek-ai/dsh-subprocess` | `SubprocessRuntime` | — | [`packages/subprocess/subprocess/src/index.ts`](../packages/subprocess/subprocess/src/index.ts) | +| `@deepseek-ai/dsh-workflow` | `WorkflowEngine` | — | [`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts) | + ## Library packages (no plugin entry) Imported as libraries by other packages; a `cordis.yml` cannot load them. -- `@deepseek-ai/dsh-agent-loop-testkit` ([`packages/test-support/agent-loop-testkit/src/index.ts`](../packages/test-support/agent-loop-testkit/src/index.ts)) -- `@deepseek-ai/dsh-anonymous-user-id` ([`packages/identity/anonymous-user-id/src/index.ts`](../packages/identity/anonymous-user-id/src/index.ts)) -- `@deepseek-ai/dsh-app-boot` ([`packages/boot/app-boot/src/index.ts`](../packages/boot/app-boot/src/index.ts)) -- `@deepseek-ai/dsh-atomic-write` ([`packages/util/atomic-write/src/index.ts`](../packages/util/atomic-write/src/index.ts)) -- `@deepseek-ai/dsh-base` ([`packages/bundle/base/src/index.ts`](../packages/bundle/base/src/index.ts)) -- `@deepseek-ai/dsh-brand` ([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts)) -- `@deepseek-ai/dsh-chunked-list` ([`packages/util/chunked-list/src/index.ts`](../packages/util/chunked-list/src/index.ts)) -- `@deepseek-ai/dsh-client-store` ([`packages/client/store/src/index.ts`](../packages/client/store/src/index.ts)) -- `@deepseek-ai/dsh-client-test-runtime` ([`packages/test-support/client-runtime/src/index.ts`](../packages/test-support/client-runtime/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-dockkit` ([`packages/client/ui-dockkit/src/index.ts`](../packages/client/ui-dockkit/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-primitives` ([`packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-slots` ([`packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts)) -- `@deepseek-ai/dsh-client-web` ([`packages/client/web/src/index.ts`](../packages/client/web/src/index.ts)) -- `@deepseek-ai/dsh-cmdline` ([`packages/boot/cmdline/src/index.ts`](../packages/boot/cmdline/src/index.ts)) -- `@deepseek-ai/dsh-deque` ([`packages/util/deque/src/index.ts`](../packages/util/deque/src/index.ts)) -- `@deepseek-ai/dsh-experimental-agent-team-profile` ([`packages/experimental/agent-team-profile/src/index.ts`](../packages/experimental/agent-team-profile/src/index.ts)) -- `@deepseek-ai/dsh-experimental-browser-use-runtime` ([`packages/experimental/browser-use-runtime/src/index.ts`](../packages/experimental/browser-use-runtime/src/index.ts)) -- `@deepseek-ai/dsh-experimental-voice-input-bundle` ([`packages/experimental/voice-input-bundle/src/index.ts`](../packages/experimental/voice-input-bundle/src/index.ts)) -- `@deepseek-ai/dsh-experimental-webworker-packer` ([`packages/experimental/webworker-packer/src/index.ts`](../packages/experimental/webworker-packer/src/index.ts)) -- `@deepseek-ai/dsh-experimental-webworker-runtime` ([`packages/experimental/webworker-runtime/src/index.ts`](../packages/experimental/webworker-runtime/src/index.ts)) -- `@deepseek-ai/dsh-home-paths` ([`packages/util/home-paths/src/index.ts`](../packages/util/home-paths/src/index.ts)) -- `@deepseek-ai/dsh-hook-protocol` ([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts)) -- `@deepseek-ai/dsh-http-proxy` ([`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts)) -- `@deepseek-ai/dsh-launch-environment` ([`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts)) -- `@deepseek-ai/dsh-lazy-require` ([`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts)) -- `@deepseek-ai/dsh-llm-deepseek` ([`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts)) -- `@deepseek-ai/dsh-llm-mock-server` ([`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts)) -- `@deepseek-ai/dsh-loader-smoke` ([`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts)) -- `@deepseek-ai/dsh-native-command` ([`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts)) -- `@deepseek-ai/dsh-output-retention` ([`packages/util/output-retention/src/index.ts`](../packages/util/output-retention/src/index.ts)) -- `@deepseek-ai/dsh-package-manifest` ([`packages/util/package-manifest/src/index.ts`](../packages/util/package-manifest/src/index.ts)) -- `@deepseek-ai/dsh-remote-mock` ([`packages/test-support/remote-mock/src/index.ts`](../packages/test-support/remote-mock/src/index.ts)) -- `@deepseek-ai/dsh-sandbox-windows-acl` ([`packages/sandbox/sandbox-windows-acl/src/index.ts`](../packages/sandbox/sandbox-windows-acl/src/index.ts)) -- `@deepseek-ai/dsh-scope` ([`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts)) -- `@deepseek-ai/dsh-sdk-client` ([`packages/sdk/client/src/index.ts`](../packages/sdk/client/src/index.ts)) -- `@deepseek-ai/dsh-sdk-minimal` ([`packages/bundle/sdk-minimal/src/index.ts`](../packages/bundle/sdk-minimal/src/index.ts)) -- `@deepseek-ai/dsh-sdk-protocol` ([`packages/sdk/protocol/src/index.ts`](../packages/sdk/protocol/src/index.ts)) -- `@deepseek-ai/dsh-session-format` ([`packages/session/session-format/src/index.ts`](../packages/session/session-format/src/index.ts)) -- `@deepseek-ai/dsh-session-format-catalog` ([`packages/session/session-format-catalog/src/index.ts`](../packages/session/session-format-catalog/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v0-to-v1` ([`packages/session/session-format-v0-to-v1/src/index.ts`](../packages/session/session-format-v0-to-v1/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v1-to-v2` ([`packages/session/session-format-v1-to-v2/src/index.ts`](../packages/session/session-format-v1-to-v2/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v2-to-v3` ([`packages/session/session-format-v2-to-v3/src/index.ts`](../packages/session/session-format-v2-to-v3/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v3-to-v4` ([`packages/session/session-format-v3-to-v4/src/index.ts`](../packages/session/session-format-v3-to-v4/src/index.ts)) -- `@deepseek-ai/dsh-session-snapshot` ([`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts)) -- `@deepseek-ai/dsh-session-telemetry` ([`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts)) -- `@deepseek-ai/dsh-session-title-llm` ([`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts)) -- `@deepseek-ai/dsh-subagent-in-process-driver` ([`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts)) -- `@deepseek-ai/dsh-timeout` ([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts)) -- `@deepseek-ai/dsh-typert-generator` ([`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts)) -- `@deepseek-ai/dsh-typert-protocol` ([`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts)) -- `@deepseek-ai/dsh-typert-registry` ([`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts)) -- `@deepseek-ai/dsh-util-crypto` ([`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts)) -- `@deepseek-ai/dsh-util-time` ([`packages/util/time/src/index.ts`](../packages/util/time/src/index.ts)) -- `@deepseek-ai/dsh-util-values` ([`packages/util/values/src/index.ts`](../packages/util/values/src/index.ts)) -- `@deepseek-ai/dsh-util-workspace-path` ([`packages/util/workspace-path/src/index.ts`](../packages/util/workspace-path/src/index.ts)) -- `@deepseek-ai/dsh-win32-process` ([`packages/subprocess/win32-process/src/index.ts`](../packages/subprocess/win32-process/src/index.ts)) + +| `package` | `inject` | `source` | +| --- | --- | --- | +| `@deepseek-ai/dsh-agent-loop-testkit` | — | [`packages/test-support/agent-loop-testkit/src/index.ts`](../packages/test-support/agent-loop-testkit/src/index.ts) | +| `@deepseek-ai/dsh-anonymous-user-id` | — | [`packages/identity/anonymous-user-id/src/index.ts`](../packages/identity/anonymous-user-id/src/index.ts) | +| `@deepseek-ai/dsh-app-boot` | — | [`packages/boot/app-boot/src/index.ts`](../packages/boot/app-boot/src/index.ts) | +| `@deepseek-ai/dsh-atomic-write` | — | [`packages/util/atomic-write/src/index.ts`](../packages/util/atomic-write/src/index.ts) | +| `@deepseek-ai/dsh-base` | — | [`packages/bundle/base/src/index.ts`](../packages/bundle/base/src/index.ts) | +| `@deepseek-ai/dsh-brand` | — | [`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts) | +| `@deepseek-ai/dsh-chunked-list` | — | [`packages/util/chunked-list/src/index.ts`](../packages/util/chunked-list/src/index.ts) | +| `@deepseek-ai/dsh-client-store` | — | [`packages/client/store/src/index.ts`](../packages/client/store/src/index.ts) | +| `@deepseek-ai/dsh-client-test-runtime` | — | [`packages/test-support/client-runtime/src/index.ts`](../packages/test-support/client-runtime/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-dockkit` | — | [`packages/client/ui-dockkit/src/index.ts`](../packages/client/ui-dockkit/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-primitives` | — | [`packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-slots` | — | [`packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts) | +| `@deepseek-ai/dsh-client-web` | — | [`packages/client/web/src/index.ts`](../packages/client/web/src/index.ts) | +| `@deepseek-ai/dsh-cmdline` | — | [`packages/boot/cmdline/src/index.ts`](../packages/boot/cmdline/src/index.ts) | +| `@deepseek-ai/dsh-deque` | — | [`packages/util/deque/src/index.ts`](../packages/util/deque/src/index.ts) | +| `@deepseek-ai/dsh-experimental-agent-team-profile` | — | [`packages/experimental/agent-team-profile/src/index.ts`](../packages/experimental/agent-team-profile/src/index.ts) | +| `@deepseek-ai/dsh-experimental-browser-use-runtime` | — | [`packages/experimental/browser-use-runtime/src/index.ts`](../packages/experimental/browser-use-runtime/src/index.ts) | +| `@deepseek-ai/dsh-experimental-voice-input-bundle` | — | [`packages/experimental/voice-input-bundle/src/index.ts`](../packages/experimental/voice-input-bundle/src/index.ts) | +| `@deepseek-ai/dsh-experimental-webworker-packer` | — | [`packages/experimental/webworker-packer/src/index.ts`](../packages/experimental/webworker-packer/src/index.ts) | +| `@deepseek-ai/dsh-experimental-webworker-runtime` | — | [`packages/experimental/webworker-runtime/src/index.ts`](../packages/experimental/webworker-runtime/src/index.ts) | +| `@deepseek-ai/dsh-home-paths` | — | [`packages/util/home-paths/src/index.ts`](../packages/util/home-paths/src/index.ts) | +| `@deepseek-ai/dsh-hook-protocol` | — | [`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts) | +| `@deepseek-ai/dsh-http-proxy` | — | [`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts) | +| `@deepseek-ai/dsh-launch-environment` | — | [`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts) | +| `@deepseek-ai/dsh-lazy-require` | — | [`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts) | +| `@deepseek-ai/dsh-llm-deepseek` | — | [`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts) | +| `@deepseek-ai/dsh-llm-mock-server` | — | [`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts) | +| `@deepseek-ai/dsh-loader-smoke` | — | [`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts) | +| `@deepseek-ai/dsh-native-command` | — | [`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts) | +| `@deepseek-ai/dsh-output-retention` | — | [`packages/util/output-retention/src/index.ts`](../packages/util/output-retention/src/index.ts) | +| `@deepseek-ai/dsh-package-manifest` | — | [`packages/util/package-manifest/src/index.ts`](../packages/util/package-manifest/src/index.ts) | +| `@deepseek-ai/dsh-remote-mock` | — | [`packages/test-support/remote-mock/src/index.ts`](../packages/test-support/remote-mock/src/index.ts) | +| `@deepseek-ai/dsh-sandbox-windows-acl` | — | [`packages/sandbox/sandbox-windows-acl/src/index.ts`](../packages/sandbox/sandbox-windows-acl/src/index.ts) | +| `@deepseek-ai/dsh-scope` | — | [`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts) | +| `@deepseek-ai/dsh-sdk-client` | — | [`packages/sdk/client/src/index.ts`](../packages/sdk/client/src/index.ts) | +| `@deepseek-ai/dsh-sdk-minimal` | — | [`packages/bundle/sdk-minimal/src/index.ts`](../packages/bundle/sdk-minimal/src/index.ts) | +| `@deepseek-ai/dsh-sdk-protocol` | — | [`packages/sdk/protocol/src/index.ts`](../packages/sdk/protocol/src/index.ts) | +| `@deepseek-ai/dsh-session-format` | — | [`packages/session/session-format/src/index.ts`](../packages/session/session-format/src/index.ts) | +| `@deepseek-ai/dsh-session-format-catalog` | — | [`packages/session/session-format-catalog/src/index.ts`](../packages/session/session-format-catalog/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v0-to-v1` | — | [`packages/session/session-format-v0-to-v1/src/index.ts`](../packages/session/session-format-v0-to-v1/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v1-to-v2` | — | [`packages/session/session-format-v1-to-v2/src/index.ts`](../packages/session/session-format-v1-to-v2/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v2-to-v3` | — | [`packages/session/session-format-v2-to-v3/src/index.ts`](../packages/session/session-format-v2-to-v3/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v3-to-v4` | — | [`packages/session/session-format-v3-to-v4/src/index.ts`](../packages/session/session-format-v3-to-v4/src/index.ts) | +| `@deepseek-ai/dsh-session-snapshot` | — | [`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts) | +| `@deepseek-ai/dsh-session-telemetry` | — | [`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts) | +| `@deepseek-ai/dsh-session-title-llm` | — | [`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts) | +| `@deepseek-ai/dsh-subagent-in-process-driver` | — | [`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts) | +| `@deepseek-ai/dsh-timeout` | — | [`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts) | +| `@deepseek-ai/dsh-typert-generator` | — | [`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts) | +| `@deepseek-ai/dsh-typert-protocol` | — | [`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts) | +| `@deepseek-ai/dsh-typert-registry` | — | [`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts) | +| `@deepseek-ai/dsh-util-crypto` | — | [`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts) | +| `@deepseek-ai/dsh-util-time` | — | [`packages/util/time/src/index.ts`](../packages/util/time/src/index.ts) | +| `@deepseek-ai/dsh-util-values` | — | [`packages/util/values/src/index.ts`](../packages/util/values/src/index.ts) | +| `@deepseek-ai/dsh-util-workspace-path` | — | [`packages/util/workspace-path/src/index.ts`](../packages/util/workspace-path/src/index.ts) | +| `@deepseek-ai/dsh-win32-process` | — | [`packages/subprocess/win32-process/src/index.ts`](../packages/subprocess/win32-process/src/index.ts) | + diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index eeba33336e..5127238f58 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -1,5 +1,5 @@ - + # 插件配置目录 @@ -7,15 +7,18 @@ 每个 `config:` 块均可由 `cordis.yml` 条目设置:针对每个可加载的 harness 包,原样列出其 `apply` 函数或服务构造函数接收的配置声明(包括 JSDoc),并附上所有引用类型——包内类型直接粘贴,其他类型则提供链接。粘贴的内容是插件声明的完整配置类型——运行时 schema 有意排除的字段是仅供运行时使用的 seam(其自身的 JSDoc 会如此说明),不能通过 `cordis.yml` 设置。这是以**部署**为轴的参考文档——插件作者所依据的连接方式请参阅各[子系统页面](subsystems/core.zh.md)中的生成 `cordis-surface` 区域,面向模型的工具 schema 请参阅[工具目录](tool-catalog.zh.md),而 [subsystems/](subsystems/core.zh.md) 则记录了这些声明所引用的类型。 -英文源文件由源代码(`scripts/gen-config-catalog.ts`)生成,并通过 `pnpm run verify-config-catalog`(`doc-sync` 的一部分)验证新鲜度;本中文文件作为经评审对侧通过双语配对维护。声明块使用 `ts config-catalog` 围栏(doc-typecheck 会跳过它,因为单独引用导入项的声明无法独立编译)。英文生成器还会将运行时 schemastery schema 与粘贴的声明进行交叉核对——每个经 schema 验证的键(包括嵌套键)都必须能在声明的配置类型中找到——因此,粘贴内容无法隐藏加载器接受的字段。 +本文件的两种语言版本都由源代码(`scripts/gen-config-catalog.ts`)生成,并通过 `pnpm run verify-config-catalog`(`doc-sync` 的一部分)验证新鲜度——请勿手工编辑。声明块使用 `ts config-catalog` 围栏(doc-typecheck 会跳过它,因为单独引用导入项的声明无法独立编译)。生成器还会将运行时 schemastery schema 与粘贴的声明进行交叉核对——每个经 schema 验证的键(包括嵌套键)都必须能在声明的配置类型中找到——因此,粘贴内容无法隐藏加载器接受的字段。 -`Requires:` 行列出插件通过 `inject` 注入的服务键:其 `cordis.yml` 树还必须加载这些服务的提供者。范围限定为 harness 层级(`packages/`);配置树还可能加载的 vendored cordis 插件(控制台日志记录器等)固定为上游源代码(参见 [vendoring policy](../vendor/README.md)),未收录于此目录。 +每个包的条目用三个标识符标注:`inject` 列出插件注入的服务键,其 `cordis.yml` 树还必须加载这些服务的提供者;`refs` 列出声明引用、但未粘贴在此处的类型;`source` 链接到声明配置的源文件。范围限定为 harness 层级(`packages/`);配置树还可能加载的 vendored cordis 插件(控制台日志记录器等)固定为上游源代码(参见 [vendoring policy](../vendor/README.md)),未收录于此目录。 + ## `@deepseek-ai/dsh-acp` -需要: `agents` · `llm` · `sessionPersistence` · `sessions` +- `inject`: `agents` · `llm` · `sessionPersistence` · `sessions` +- `refs`: `Stream` (`@agentclientprotocol/sdk`) +- `source`: [`packages/acp/acp/src/index.ts:75`](../packages/acp/acp/src/index.ts) ```ts config-catalog /** Plugin config: the provider/model selection used for each ACP-created agent. */ @@ -30,15 +33,16 @@ export interface AcpConfig { stream?: Stream } ``` + -Depends on: `Stream` (`@agentclientprotocol/sdk`) - -来源: [`packages/acp/acp/src/index.ts:75`](../packages/acp/acp/src/index.ts) - + ## `@deepseek-ai/dsh-agent-default-model` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/core/agent-default-model/src/index.ts:24`](../packages/core/agent-default-model/src/index.ts) + ```ts config-catalog /** Default model selection supplied by plugin configuration. */ export interface Config { @@ -50,16 +54,15 @@ export interface Config { reasoningEffort: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/core/agent-default-model/src/index.ts:24`](../packages/core/agent-default-model/src/index.ts) - + ## `@deepseek-ai/dsh-agent-instructions` -需要: `sessionProjections` +- `inject`: `sessionProjections` +- `source`: [`packages/context/agent-instructions/src/config.ts:18`](../packages/context/agent-instructions/src/config.ts) ```ts config-catalog /** User-facing workspace instruction loader configuration. */ @@ -84,14 +87,16 @@ export interface Config { localInstructionFileCandidates?: string[] } ``` + -来源: [`packages/context/agent-instructions/src/config.ts:18`](../packages/context/agent-instructions/src/config.ts) - + ## `@deepseek-ai/dsh-agent-loop` -需要: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `agents` · `sessions` · `llm` · `tools` · `systemPrompt` · `sessionProjections` +- `refs`: [`AgentOptions`](subsystems/core.zh.md) · [`SessionId`](subsystems/core.zh.md) · `Volatile` (`@deepseek-ai/cosmokit`) +- `source`: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) ```ts config-catalog /** Agent-loop plugin configuration. */ @@ -114,31 +119,31 @@ export interface Config { })[] } ``` + -Depends on: [`AgentOptions`](subsystems/core.zh.md) · [`SessionId`](subsystems/core.zh.md) · `Volatile` (`@deepseek-ai/cosmokit`) - -来源: [`packages/core/agent-loop/src/index.ts:292`](../packages/core/agent-loop/src/index.ts) - + ## `@deepseek-ai/dsh-agent-preset` -需要: `agentPresets` +- `inject`: `agentPresets` +- `refs`: [`PresetDefinition`](../packages/preset/agent-preset-registry/src/index.ts) +- `source`: [`packages/preset/agent-preset/src/index.ts:9`](../packages/preset/agent-preset/src/index.ts) ```ts config-catalog /** Definition submitted to the preset registry. */ export type Config = PresetDefinition ``` + -依赖: [`PresetDefinition`](../packages/preset/agent-preset-registry/src/index.ts) - -来源: [`packages/preset/agent-preset/src/index.ts:9`](../packages/preset/agent-preset/src/index.ts) - + ## `@deepseek-ai/dsh-agent-preset-registry` -需要: `loader` · `sessionProjections` +- `inject`: `loader` · `sessionProjections` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/preset/agent-preset-registry/src/preset.ts:13`](../packages/preset/agent-preset-registry/src/preset.ts) ```ts config-catalog /** Registry selection policy. */ @@ -151,16 +156,16 @@ export interface Config { modeSelectionEnabled: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/preset/agent-preset-registry/src/preset.ts:13`](../packages/preset/agent-preset-registry/src/preset.ts) - + ## `@deepseek-ai/dsh-agent-tool-presentation` -需要: `tools` +- `inject`: `tools` +- `refs`: [`ToolPresentationMode`](subsystems/tools.zh.md) +- `source`: [`packages/core/agent-tool-presentation/src/index.ts:38`](../packages/core/agent-tool-presentation/src/index.ts) ```ts config-catalog /** Plugin config. */ @@ -175,16 +180,15 @@ export interface Config { mode: ToolPresentationMode } ``` + -Depends on: [`ToolPresentationMode`](subsystems/tools.zh.md) - -来源: [`packages/core/agent-tool-presentation/src/index.ts:38`](../packages/core/agent-tool-presentation/src/index.ts) - + ## `@deepseek-ai/dsh-api-gateway` -需要: `typert` +- `inject`: `typert` +- `source`: [`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) ```ts config-catalog /** Gateway transport configuration. */ @@ -195,14 +199,15 @@ export interface Config { readonly streamInboxBytes?: number } ``` + -来源:[`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) - + ## `@deepseek-ai/dsh-api-job-controller` -需要:`jobs` · `typert` +- `inject`: `jobs` · `typert` +- `source`: [`packages/api/job-controller/src/index.ts:35`](../packages/api/job-controller/src/index.ts) ```ts config-catalog /** Job Controller deployment policy. */ @@ -213,14 +218,15 @@ export interface Config { readonly observeMaxFrameBytes?: number } ``` + -Source: [`packages/api/job-controller/src/index.ts:35`](../packages/api/job-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-session-controller` -需要: `agentDefaultModel` · `agents` · `attachments` · `fileUploads` · `fs` · `llm` · `sessions` · `sessionProjections` · `sessionQuery` · `typert` · `workspaceRegistry` +- `inject`: `agentDefaultModel` · `agents` · `attachments` · `fileUploads` · `fs` · `llm` · `sessions` · `sessionProjections` · `sessionQuery` · `typert` · `workspaceRegistry` +- `source`: [`packages/api/session-controller/src/index.ts:79`](../packages/api/session-controller/src/index.ts) ```ts config-catalog /** Session Controller deployment policy. */ @@ -229,13 +235,15 @@ export interface Config { readonly nativeOpen?: boolean } ``` + -来源: [`packages/api/session-controller/src/index.ts:79`](../packages/api/session-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-settings-controller` +- `source`: [`packages/api/settings-controller/src/index.ts:35`](../packages/api/settings-controller/src/index.ts) + ```ts config-catalog /** Host integrations replaceable by direct unit tests. */ export interface SettingsControllerInternals { @@ -243,14 +251,15 @@ export interface SettingsControllerInternals { readonly openTextFile?: (path: string, signal: AbortSignal) => Promise } ``` + -来源: [`packages/api/settings-controller/src/index.ts:35`](../packages/api/settings-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-terminal-controller` -需要: `subprocess` · `sandboxPolicy` · `typert` +- `inject`: `subprocess` · `sandboxPolicy` · `typert` +- `source`: [`packages/api/terminal-controller/src/index.ts:26`](../packages/api/terminal-controller/src/index.ts) ```ts config-catalog /** Deployment limits and an optional shell profile. */ @@ -288,14 +297,15 @@ export interface Config { readonly cleanupRetryMs: number } ``` + -来源: [`packages/api/terminal-controller/src/index.ts:26`](../packages/api/terminal-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-workspace-controller` -需要:`typert` · `workspaceRegistry` +- `inject`: `typert` · `workspaceRegistry` +- `source`: [`packages/api/workspace-controller/src/index.ts:34`](../packages/api/workspace-controller/src/index.ts) ```ts config-catalog /** First-use directory policy for the Host account. */ @@ -306,14 +316,15 @@ export interface Config { documentsLookupTimeoutMs?: number } ``` + -源码:[`packages/api/workspace-controller/src/index.ts:34`](../packages/api/workspace-controller/src/index.ts) - + ## `@deepseek-ai/dsh-api-workspace-files` -需要: `fs` · `sandboxPolicy` · `sessions` · `typert` +- `inject`: `fs` · `sandboxPolicy` · `sessions` · `typert` +- `source`: [`packages/api/workspace-files/src/index.ts:70`](../packages/api/workspace-files/src/index.ts) ```ts config-catalog /** Deployment caps on one page or one listing. */ @@ -334,13 +345,15 @@ export interface Config { readonly maxEntries: number } ``` + -来源: [`packages/api/workspace-files/src/index.ts:70`](../packages/api/workspace-files/src/index.ts) - + ## `@deepseek-ai/dsh-attachment-local` +- `source`: [`packages/attachment/attachment-local/src/index.ts:61`](../packages/attachment/attachment-local/src/index.ts) + ```ts config-catalog /** Local attachment backend configuration. */ export interface Config { @@ -369,14 +382,16 @@ export interface Config { imageCompressionConcurrency?: number } ``` + -来源: [`packages/attachment/attachment-local/src/index.ts:61`](../packages/attachment/attachment-local/src/index.ts) - + ## `@deepseek-ai/dsh-bash-local` -需要: `subprocess` +- `inject`: `subprocess` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/shell/bash-local/src/index.ts:41`](../packages/shell/bash-local/src/index.ts) ```ts config-catalog /** Validated plugin configuration with live command budgets. */ @@ -395,16 +410,16 @@ export interface Config { graceMs: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/shell/bash-local/src/index.ts:41`](../packages/shell/bash-local/src/index.ts) - + ## `@deepseek-ai/dsh-bash-sandbox` -需要: `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `subprocess` · `sandbox` · `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-bash-local) +- `source`: [`packages/shell/bash-sandbox/src/index.ts:36`](../packages/shell/bash-sandbox/src/index.ts) ```ts config-catalog /** @@ -416,16 +431,15 @@ Depends on: `Volatile` (`@deepseek-ai/cordis`) */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-bash-local) - -来源: [`packages/shell/bash-sandbox/src/index.ts:36`](../packages/shell/bash-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-client-connection` -需要: `credentials` +- `inject`: `credentials` +- `source`: [`packages/client/connection/src/index.ts:92`](../packages/client/connection/src/index.ts) ```ts config-catalog /** Browser authentication, request limits, and connection recovery configuration. */ @@ -464,14 +478,15 @@ export interface ConnectionRecoveryConfig { generationReadyTimeoutMs?: number } ``` + -来源: [`packages/client/connection/src/index.ts:92`](../packages/client/connection/src/index.ts) - + ## `@deepseek-ai/dsh-client-hmr` -需要: `clientModules` · `webServer` +- `inject`: `clientModules` · `webServer` +- `source`: [`packages/client/hmr/src/index.ts:30`](../packages/client/hmr/src/index.ts) ```ts config-catalog /** Plugin config, validated by the same-named schemastery schema. */ @@ -480,13 +495,15 @@ export interface Config { pollIntervalMs?: number } ``` + -来源: [`packages/client/hmr/src/index.ts:30`](../packages/client/hmr/src/index.ts) - + ## `@deepseek-ai/dsh-client-ui-plugin-manager` +- `source`: [`packages/client/ui-plugin-manager/src/index.ts:15`](../packages/client/ui-plugin-manager/src/index.ts) + ```ts config-catalog /** Registry-probe deadline and process-local cache policy. */ export interface Config { @@ -498,13 +515,15 @@ export interface Config { registryProbeCacheTtlMs: number } ``` + -来源: [`packages/client/ui-plugin-manager/src/index.ts:15`](../packages/client/ui-plugin-manager/src/index.ts) - + ## `@deepseek-ai/dsh-client-ui-settings-account` +- `source`: [`packages/client/ui-settings-account/src/contact-config.ts:5`](../packages/client/ui-settings-account/src/contact-config.ts) + ```ts config-catalog /** Questionnaire destination and its supported source option. */ export interface Config { @@ -514,13 +533,15 @@ export interface Config { contactSource: string } ``` + -来源: [`packages/client/ui-settings-account/src/contact-config.ts:5`](../packages/client/ui-settings-account/src/contact-config.ts) - + ## `@deepseek-ai/dsh-client-ui-settings-models` +- `source`: [`packages/client/ui-settings-models/src/onboarding-config.ts:6`](../packages/client/ui-settings-models/src/onboarding-config.ts) + ```ts config-catalog /** Onboarding options after schema defaults are applied. */ export interface Config { @@ -528,13 +549,15 @@ export interface Config { credentialOnboarding: boolean } ``` + -来源: [`packages/client/ui-settings-models/src/onboarding-config.ts:6`](../packages/client/ui-settings-models/src/onboarding-config.ts) - + ## `@deepseek-ai/dsh-client-ui-sidebar-documentpreview` +- `source`: [`packages/client/ui-sidebar-documentpreview/src/config.ts:5`](../packages/client/ui-sidebar-documentpreview/src/config.ts) + ```ts config-catalog /** Transient Office conversion reuse within one Client connection. */ export interface Config { @@ -560,13 +583,16 @@ export interface Config { } } ``` + -来源: [`packages/client/ui-sidebar-documentpreview/src/config.ts:5`](../packages/client/ui-sidebar-documentpreview/src/config.ts) - + ## `@deepseek-ai/dsh-client-ui-theme` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/client/ui-theme/src/index.ts:22`](../packages/client/ui-theme/src/index.ts) + ```ts config-catalog /** Runtime preferences projected to the browser. */ export interface Config { @@ -579,16 +605,15 @@ export interface Config { /** Theme preference persisted by the product Appearance row. */ export type ThemePreference = typeof THEME_PREFERENCES[number] ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/client/ui-theme/src/index.ts:22`](../packages/client/ui-theme/src/index.ts) - + ## `@deepseek-ai/dsh-compaction-basic` -需要: `llm` · `tokenMeter` · `sessions` +- `inject`: `llm` · `tokenMeter` · `sessions` +- `source`: [`packages/compaction/compaction-basic/src/types.ts:40`](../packages/compaction/compaction-basic/src/types.ts) ```ts config-catalog /** Basic compaction configuration with an optional exact-target policy table. */ @@ -629,14 +654,15 @@ export interface ModelCompactPolicyConfig extends CompactionPolicyConfig { model: string } ``` + -来源: [`packages/compaction/compaction-basic/src/types.ts:40`](../packages/compaction/compaction-basic/src/types.ts) - + ## `@deepseek-ai/dsh-compaction-tool-result-pruner` -需要: `tokenMeter` +- `inject`: `tokenMeter` +- `source`: [`packages/compaction/compaction-tool-result-pruner/src/types.ts:5`](../packages/compaction/compaction-tool-result-pruner/src/types.ts) ```ts config-catalog /** Character-budget policy for deterministic tool-result pruning. */ @@ -649,14 +675,15 @@ export interface ToolResultPruneConfig { tailChars?: number } ``` + -来源: [`packages/compaction/compaction-tool-result-pruner/src/types.ts:5`](../packages/compaction/compaction-tool-result-pruner/src/types.ts) - + ## `@deepseek-ai/dsh-cordis-host-runner` -需要: `tools` +- `inject`: `tools` +- `source`: [`packages/extensions/cordis-host-runner/src/index.ts:93`](../packages/extensions/cordis-host-runner/src/index.ts) ```ts config-catalog /** Runner configuration. */ @@ -665,13 +692,15 @@ export interface Config { vmTimeoutMs?: number } ``` + -来源: [`packages/extensions/cordis-host-runner/src/index.ts:93`](../packages/extensions/cordis-host-runner/src/index.ts) - + ## `@deepseek-ai/dsh-credentials-local` +- `source`: [`packages/credentials/credentials-local/src/index.ts:64`](../packages/credentials/credentials-local/src/index.ts) + ```ts config-catalog /** Plugin config: file location and hot-reload behavior. */ export interface Config { @@ -685,14 +714,15 @@ export interface Config { debounceMs?: number } ``` + -来源: [`packages/credentials/credentials-local/src/index.ts:64`](../packages/credentials/credentials-local/src/index.ts) - + ## `@deepseek-ai/dsh-deepseek-account-platform` -需要: `credentials` · `authorization` +- `inject`: `credentials` · `authorization` +- `source`: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) ```ts config-catalog /** Deployment-specific platform and request deadlines. */ @@ -723,14 +753,15 @@ export interface Config { attemptTimeoutMs?: number } ``` + -来源: [`packages/credentials/deepseek-account-platform/src/index.ts:23`](../packages/credentials/deepseek-account-platform/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-agent-team` -需要: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` +- `inject`: `agents` · `sessions` · `sessionPersistence` · `sessionProjections` · `subagents` +- `source`: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) ```ts config-catalog /** Team-service deployment limits. */ @@ -747,14 +778,15 @@ export interface Config { readonly disposalTimeoutMs?: number } ``` + -来源: [`packages/experimental/agent-team/src/types.ts:152`](../packages/experimental/agent-team/src/types.ts) - + ## `@deepseek-ai/dsh-experimental-api-speech-to-text` -需要: `speechToText` · `typert` +- `inject`: `speechToText` · `typert` +- `source`: [`packages/experimental/api-speech-to-text/src/index.ts:20`](../packages/experimental/api-speech-to-text/src/index.ts) ```ts config-catalog /** Limits applied before decoding or calling a provider. */ @@ -765,44 +797,46 @@ export interface Config { maxDurationSeconds: number } ``` + -来源: [`packages/experimental/api-speech-to-text/src/index.ts:20`](../packages/experimental/api-speech-to-text/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp` -需要: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) +- `source`: [`packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts:14`](../packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts) ```ts config-catalog /** Fixed Chromium launch or existing-browser attachment settings. */ export type Config = BrowserMcpConfig ``` + -Depends on: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) - -来源: [`packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts:14`](../packages/experimental/browser-use-chrome-devtools-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-playwright-mcp` -需要: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) +- `source`: [`packages/experimental/browser-use-playwright-mcp/src/index.ts:15`](../packages/experimental/browser-use-playwright-mcp/src/index.ts) ```ts config-catalog /** Fixed Chromium launch or existing-browser attachment settings. */ export type Config = BrowserMcpConfig ``` + -Depends on: `BrowserMcpConfig` (`@deepseek-ai/dsh-experimental-browser-use-runtime/mcp`) - -来源: [`packages/experimental/browser-use-playwright-mcp/src/index.ts:15`](../packages/experimental/browser-use-playwright-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` -需要: `browserUse` · `agents` · `tools` · `systemPrompt` +- `inject`: `browserUse` · `agents` · `tools` · `systemPrompt` +- `refs`: `ModelConfig` (`@browserbasehq/stagehand`) +- `source`: [`packages/experimental/browser-use-stagehand-native/src/index.ts:28`](../packages/experimental/browser-use-stagehand-native/src/index.ts) ```ts config-catalog /** Profile-owned browser connection and independent Stagehand model credentials. */ @@ -835,16 +869,16 @@ export interface StagehandModelConfig { headers?: Record } ``` + -Depends on: `ModelConfig` (`@browserbasehq/stagehand`) - -来源: [`packages/experimental/browser-use-stagehand-native/src/index.ts:28`](../packages/experimental/browser-use-stagehand-native/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp` -需要: `computerUse` · `tools` +- `inject`: `computerUse` · `tools` +- `refs`: [`McpClient`](../packages/mcp/mcp-client/src/index.ts) +- `source`: [`packages/experimental/computer-use-cua-driver-mcp/src/index.ts:20`](../packages/experimental/computer-use-cua-driver-mcp/src/index.ts) ```ts config-catalog /** Installed executable and MCP connection overrides. */ @@ -859,16 +893,15 @@ export interface Config { reconnect: McpClient.ReconnectConfig } ``` + -Depends on: [`McpClient`](../packages/mcp/mcp-client/src/index.ts) - -来源: [`packages/experimental/computer-use-cua-driver-mcp/src/index.ts:20`](../packages/experimental/computer-use-cua-driver-mcp/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-inspector` -需要: `webServer` +- `inject`: `webServer` +- `source`: [`packages/experimental/inspector/src/index.ts:66`](../packages/experimental/inspector/src/index.ts) ```ts config-catalog /** Host plugin configuration. Fetch capture is enabled by default. */ @@ -929,13 +962,15 @@ export interface InspectorOptions { readonly maxDisconnectedCordisTrees?: number } ``` + -来源: [`packages/experimental/inspector/src/index.ts:66`](../packages/experimental/inspector/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-ptc-runtime-python` +- `source`: [`packages/experimental/ptc-runtime-python/src/index.ts:42`](../packages/experimental/ptc-runtime-python/src/index.ts) + ```ts config-catalog /** Plugin config: every cap, changeable from `cordis.yml` (no hardcoded tunables). */ export interface Config { @@ -995,13 +1030,16 @@ export interface Config { pythonBin?: string } ``` + -来源: [`packages/experimental/ptc-runtime-python/src/index.ts:42`](../packages/experimental/ptc-runtime-python/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-speech-to-text` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/experimental/speech-to-text/src/index.ts:20`](../packages/experimental/speech-to-text/src/index.ts) + ```ts config-catalog /** Live selection read before a transcription starts; `configure()` writes it through the profile. */ export interface Config { @@ -1011,16 +1049,15 @@ export interface Config { language: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/experimental/speech-to-text/src/index.ts:20`](../packages/experimental/speech-to-text/src/index.ts) - + ## `@deepseek-ai/dsh-experimental-speech-to-text-sensevoice` -需要: `speechToText` · `subprocess` +- `inject`: `speechToText` · `subprocess` +- `source`: [`packages/experimental/speech-to-text-sensevoice/src/config.ts:6`](../packages/experimental/speech-to-text-sensevoice/src/config.ts) ```ts config-catalog /** Local runtime, inference, and retention settings. */ @@ -1071,14 +1108,15 @@ export interface Config { progressIntervalMs: number } ``` + -来源: [`packages/experimental/speech-to-text-sensevoice/src/config.ts:6`](../packages/experimental/speech-to-text-sensevoice/src/config.ts) - + ## `@deepseek-ai/dsh-experimental-tool-agent-team` -需要: `agents` · `agentTeams` · `tools` · `systemPrompt` +- `inject`: `agents` · `agentTeams` · `tools` · `systemPrompt` +- `source`: [`packages/experimental/tool-agent-team/src/index.ts:17`](../packages/experimental/tool-agent-team/src/index.ts) ```ts config-catalog /** Tool routing configuration. */ @@ -1089,14 +1127,15 @@ export interface Config { readonly forkProvider?: string } ``` + -来源: [`packages/experimental/tool-agent-team/src/index.ts:17`](../packages/experimental/tool-agent-team/src/index.ts) - + ## `@deepseek-ai/dsh-file-reference-local` -需要: `agents` +- `inject`: `agents` +- `source`: [`packages/context/file-reference-local/src/index.ts:34`](../packages/context/file-reference-local/src/index.ts) ```ts config-catalog /** Local file-reference discovery configuration. */ @@ -1109,13 +1148,15 @@ export interface Config { excludedDirectories?: string[] } ``` + -来源: [`packages/context/file-reference-local/src/index.ts:34`](../packages/context/file-reference-local/src/index.ts) - + ## `@deepseek-ai/dsh-fs-local` +- `source`: [`packages/fs/fs-local/src/index.ts:45`](../packages/fs/fs-local/src/index.ts) + ```ts config-catalog /** Configuration for the local filesystem backend. */ export interface Config { @@ -1128,14 +1169,16 @@ export interface Config { diffBasisMaxBytes?: number } ``` + -来源: [`packages/fs/fs-local/src/index.ts:45`](../packages/fs/fs-local/src/index.ts) - + ## `@deepseek-ai/dsh-fs-sandbox` -需要: `sandboxPolicy` +- `inject`: `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-fs-local) +- `source`: [`packages/fs/fs-sandbox/src/index.ts:45`](../packages/fs/fs-sandbox/src/index.ts) ```ts config-catalog /** @@ -1146,16 +1189,15 @@ export interface Config { */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-fs-local) - -来源: [`packages/fs/fs-sandbox/src/index.ts:45`](../packages/fs/fs-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-goal` -需要: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/goal/goal/src/index.ts:172`](../packages/goal/goal/src/index.ts) ```ts config-catalog /** Deployment defaults for goal creation. */ @@ -1164,14 +1206,15 @@ export interface Config { defaultMaxGoalRounds?: number } ``` + -来源: [`packages/goal/goal/src/index.ts:172`](../packages/goal/goal/src/index.ts) - + ## `@deepseek-ai/dsh-headless` -需要: `agentDefaultModel` · `agents` · `sessions` +- `inject`: `agentDefaultModel` · `agents` · `sessions` +- `source`: [`packages/bundle/headless/src/index.ts:42`](../packages/bundle/headless/src/index.ts) ```ts config-catalog /** Plugin config: the task and run options resolved from this app's injected provider service. */ @@ -1184,13 +1227,16 @@ export interface Config { json?: boolean } ``` + -来源: [`packages/bundle/headless/src/index.ts:42`](../packages/bundle/headless/src/index.ts) - + ## `@deepseek-ai/dsh-hmr` +- `refs`: `ChokidarOptions` (`chokidar`) +- `source`: [`packages/boot/hmr/src/index.ts:51`](../packages/boot/hmr/src/index.ts) + ```ts config-catalog /** Module roots and watcher timing, with Chokidar deployment options. */ export interface HmrConfig extends ChokidarOptions { @@ -1204,16 +1250,15 @@ export interface HmrConfig extends ChokidarOptions { ignored: string[] } ``` + -Depends on: `ChokidarOptions` (`chokidar`) - -来源: [`packages/boot/hmr/src/index.ts:51`](../packages/boot/hmr/src/index.ts) - + ## `@deepseek-ai/dsh-hooks-claude-code` -需要: `shell` · `sessionProjections` +- `inject`: `shell` · `sessionProjections` +- `source`: [`packages/hooks/hooks-claude-code/src/index.ts:51`](../packages/hooks/hooks-claude-code/src/index.ts) ```ts config-catalog /** Plugin config: where the CC hook config lives + substitution roots. */ @@ -1244,14 +1289,15 @@ export interface Config { stderrSummaryMaxChars?: number } ``` + -来源: [`packages/hooks/hooks-claude-code/src/index.ts:51`](../packages/hooks/hooks-claude-code/src/index.ts) - + ## `@deepseek-ai/dsh-hooks-codex` -需要: `shell` · `sessionProjections` +- `inject`: `shell` · `sessionProjections` +- `source`: [`packages/hooks/hooks-codex/src/index.ts:50`](../packages/hooks/hooks-codex/src/index.ts) ```ts config-catalog /** Plugin config: where the Codex hooks.json lives + the model name for payloads. */ @@ -1271,13 +1317,15 @@ export interface Config { stderrSummaryMaxChars?: number } ``` + -来源: [`packages/hooks/hooks-codex/src/index.ts:50`](../packages/hooks/hooks-codex/src/index.ts) - + ## `@deepseek-ai/dsh-host-directory-picker-browse` +- `source`: [`packages/host/directory-picker-browse/src/index.ts:181`](../packages/host/directory-picker-browse/src/index.ts) + ```ts config-catalog /** Validated plugin configuration. */ export interface Config { @@ -1285,14 +1333,15 @@ export interface Config { maxEntries: number } ``` + -来源: [`packages/host/directory-picker-browse/src/index.ts:181`](../packages/host/directory-picker-browse/src/index.ts) - + ## `@deepseek-ai/dsh-host-frontend-static` -需要: `webServer` · `connection` +- `inject`: `webServer` · `connection` +- `source`: [`packages/host/frontend-static/src/index.ts:30`](../packages/host/frontend-static/src/index.ts) ```ts config-catalog /** Plugin config: the dist anchor. */ @@ -1301,14 +1350,15 @@ export interface Config { distIndex: string } ``` + -来源: [`packages/host/frontend-static/src/index.ts:30`](../packages/host/frontend-static/src/index.ts) - + ## `@deepseek-ai/dsh-host-open-in-app` -需要: `webServer` · `connection` · `subprocess` +- `inject`: `webServer` · `connection` · `subprocess` +- `source`: [`packages/host/open-in-app/src/index.ts:50`](../packages/host/open-in-app/src/index.ts) ```ts config-catalog /** Open-in-app host configuration. */ @@ -1332,13 +1382,15 @@ export interface Config { readonly launchWatchMs: number } ``` + -来源: [`packages/host/open-in-app/src/index.ts:50`](../packages/host/open-in-app/src/index.ts) - + ## `@deepseek-ai/dsh-host-product-telemetry-otel` +- `source`: [`packages/host/product-telemetry-otel/src/index.ts:37`](../packages/host/product-telemetry-otel/src/index.ts) + ```ts config-catalog /** Collector routing, application identity, and bounded in-memory batch settings. */ export interface Config { @@ -1366,13 +1418,15 @@ export interface Config { shutdownTimeoutMillis: number } ``` + -来源: [`packages/host/product-telemetry-otel/src/index.ts:37`](../packages/host/product-telemetry-otel/src/index.ts) - + ## `@deepseek-ai/dsh-host-webserver` +- `source`: [`packages/host/webserver/src/index.ts:59`](../packages/host/webserver/src/index.ts) + ```ts config-catalog /** Web server listen and response-compression config. */ export interface Config { @@ -1388,13 +1442,15 @@ export interface Config { compressionThresholdBytes?: number } ``` + -来源: [`packages/host/webserver/src/index.ts:59`](../packages/host/webserver/src/index.ts) - + ## `@deepseek-ai/dsh-invariants` +- `source`: [`packages/runtime-diagnostics/invariants/src/index.ts:15`](../packages/runtime-diagnostics/invariants/src/index.ts) + ```ts config-catalog /** Runtime invariant selection configured on the service plugin. */ export interface Config { @@ -1406,13 +1462,15 @@ export interface Config { readonly package_blocklist?: string[] } ``` + -来源: [`packages/runtime-diagnostics/invariants/src/index.ts:15`](../packages/runtime-diagnostics/invariants/src/index.ts) - + ## `@deepseek-ai/dsh-jobs-local` +- `source`: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) + ```ts config-catalog /** Configuration for the process-local job registry. */ export interface Config { @@ -1433,29 +1491,31 @@ export interface Config { pumpPollMs?: number } ``` + -来源: [`packages/jobs/jobs-local/src/index.ts:45`](../packages/jobs/jobs-local/src/index.ts) - + ## `@deepseek-ai/dsh-llm-deepseek-account` -需要: `llm` +- `inject`: `llm` +- `refs`: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) +- `source`: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) ```ts config-catalog /** Account route configuration; authentication comes exclusively from the account service. */ export type Config = ProtocolConfig ``` + -依赖: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) - -来源: [`packages/llm/llm-deepseek-account/src/config.ts:5`](../packages/llm/llm-deepseek-account/src/config.ts) - + ## `@deepseek-ai/dsh-llm-deepseek-api-key` -需要: `llm` +- `inject`: `llm` +- `refs`: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) ```ts config-catalog /** Messages configuration with a per-request API-key reference. */ @@ -1464,16 +1524,16 @@ export interface Config extends ProtocolConfig { apiKeyEnv: Volatile } ``` + -依赖: [`ProtocolConfig`](../packages/llm/llm-deepseek/src/index.ts) · `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/llm/llm-deepseek-api-key/src/config.ts:10`](../packages/llm/llm-deepseek-api-key/src/config.ts) - + ## `@deepseek-ai/dsh-llm-pi-ai` -需要: `llm` +- `inject`: `llm` +- `refs`: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/llm/llm-pi-ai/src/config.ts:222`](../packages/llm/llm-pi-ai/src/config.ts) ```ts config-catalog /** Plugin configuration: the provider routes this instance owns. */ @@ -1739,16 +1799,16 @@ export type PiAiThinkingFormat = NonNullable ``` + -Depends on: `Api` (`@earendil-works/pi-ai`) · `CacheRetention` (`@earendil-works/pi-ai`) · `Model` (`@earendil-works/pi-ai`) · `ModelThinkingLevel` (`@earendil-works/pi-ai`) · `OpenAICompletionsCompat` (`@earendil-works/pi-ai`) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · `ThinkingBudgets` (`@earendil-works/pi-ai`) · `Transport` (`@earendil-works/pi-ai`) · `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/llm/llm-pi-ai/src/config.ts:222`](../packages/llm/llm-pi-ai/src/config.ts) - + ## `@deepseek-ai/dsh-llm-replay` -需要: `llm` +- `inject`: `llm` +- `refs`: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) +- `source`: [`packages/test-support/llm-replay/src/index.ts:1123`](../packages/test-support/llm-replay/src/index.ts) ```ts config-catalog /** Plugin config: the {@link ReplayConfig} inputs, each defaulting to its `DSH_SNAPSHOT_*` env var in `apply`. */ @@ -1818,29 +1878,29 @@ export interface ReplayModelConfig { systemPromptUpdate?: SystemPromptUpdate } ``` + -Depends on: [`ModelModality`](../packages/llm/llm/src/index.ts) · [`RetryPolicyConfig`](../packages/llm/llm/src/index.ts) · [`SystemPromptUpdate`](../packages/llm/llm/src/index.ts) - -来源: [`packages/test-support/llm-replay/src/index.ts:1123`](../packages/test-support/llm-replay/src/index.ts) - + ## `@deepseek-ai/dsh-llm-retry` -需要: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/llm/llm-retry/src/index.ts:25`](../packages/llm/llm-retry/src/index.ts) ```ts config-catalog /** This policy executor has no config; providers own `retryPolicy`. */ export type Config = Readonly> ``` + -来源: [`packages/llm/llm-retry/src/index.ts:25`](../packages/llm/llm-retry/src/index.ts) - + ## `@deepseek-ai/dsh-lsp-stdio` -需要: `fs` · `lsp` · `subprocess` +- `inject`: `fs` · `lsp` · `subprocess` +- `source`: [`packages/lsp/lsp-stdio/src/index.ts:82`](../packages/lsp/lsp-stdio/src/index.ts) ```ts config-catalog /** Plugin configuration: provider id → local language-server configuration. */ @@ -1875,14 +1935,15 @@ export interface LspLocalServerConfig { killGraceMs?: number } ``` + -来源: [`packages/lsp/lsp-stdio/src/index.ts:82`](../packages/lsp/lsp-stdio/src/index.ts) - + ## `@deepseek-ai/dsh-mcp-client` -需要: `tools` +- `inject`: `tools` +- `source`: [`packages/mcp/mcp-client/src/index.ts:104`](../packages/mcp/mcp-client/src/index.ts) ```ts config-catalog /** Configuration for one stdio or Streamable HTTP MCP server. */ @@ -1952,14 +2013,15 @@ export interface ReconnectConfig { maxAttempts?: number } ``` + -来源: [`packages/mcp/mcp-client/src/index.ts:104`](../packages/mcp/mcp-client/src/index.ts) - + ## `@deepseek-ai/dsh-message-feedback` -需要: `sessionPersistence` · `sessions` +- `inject`: `sessionPersistence` · `sessions` +- `source`: [`packages/feedback/message-feedback/src/index.ts:40`](../packages/feedback/message-feedback/src/index.ts) ```ts config-catalog /** Required deployment policy for optional notes. */ @@ -1968,13 +2030,15 @@ export interface Config { readonly maxNoteBytes: number } ``` + -来源: [`packages/feedback/message-feedback/src/index.ts:40`](../packages/feedback/message-feedback/src/index.ts) - + ## `@deepseek-ai/dsh-office-to-pdf` +- `source`: [`packages/document/office-to-pdf/src/index.ts:31`](../packages/document/office-to-pdf/src/index.ts) + ```ts config-catalog /** Provider concurrency and kit rendering/font configuration. */ export interface Config { @@ -2018,14 +2082,16 @@ export interface Config { maxLoadedFontBytes: number } ``` + -来源: [`packages/document/office-to-pdf/src/index.ts:31`](../packages/document/office-to-pdf/src/index.ts) - + ## `@deepseek-ai/dsh-permission-presets` -需要: `shell` · `approval` · `sessions` · `sessionProjections` +- `inject`: `shell` · `approval` · `sessions` · `sessionProjections` +- `refs`: [`ApprovalPolicy`](subsystems/approval.zh.md) · [`SandboxMode`](subsystems/sandbox.zh.md) · `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/interaction/permission-presets/src/index.ts:155`](../packages/interaction/permission-presets/src/index.ts) ```ts config-catalog /** The {@link PermissionPresetService} config: preset table and composition default. */ @@ -2056,16 +2122,15 @@ export interface PresetSpec { description?: string } ``` + -Depends on: [`ApprovalPolicy`](subsystems/approval.zh.md) · [`SandboxMode`](subsystems/sandbox.zh.md) · `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/interaction/permission-presets/src/index.ts:155`](../packages/interaction/permission-presets/src/index.ts) - + ## `@deepseek-ai/dsh-persona` -需要: `systemPrompt` +- `inject`: `systemPrompt` +- `source`: [`packages/preset/persona/src/index.ts:30`](../packages/preset/persona/src/index.ts) ```ts config-catalog /** Plugin config: the persona text this composition contributes. */ @@ -2087,14 +2152,15 @@ export interface Config { includeRuntimeContext?: boolean } ``` + -来源: [`packages/preset/persona/src/index.ts:30`](../packages/preset/persona/src/index.ts) - + ## `@deepseek-ai/dsh-plan-mode` -需要: `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `tools` · `systemPrompt` · `sessionProjections` +- `source`: [`packages/plan/plan-mode/src/index.ts:70`](../packages/plan/plan-mode/src/index.ts) ```ts config-catalog /** Deployment-owned plan guidance. */ @@ -2103,14 +2169,15 @@ export interface PlanModeConfig { section: string } ``` + -来源: [`packages/plan/plan-mode/src/index.ts:70`](../packages/plan/plan-mode/src/index.ts) - + ## `@deepseek-ai/dsh-plugin-manager` -需要: `loader` · `profileContext` +- `inject`: `loader` · `profileContext` +- `source`: [`packages/boot/plugin-manager/src/index.ts:40`](../packages/boot/plugin-manager/src/index.ts) ```ts config-catalog /** The pnpm executable, registries, and limits for diagnostics, lookups and connection checks. */ @@ -2137,14 +2204,15 @@ export interface Config { fallbackRegistries?: string[] } ``` + -来源: [`packages/boot/plugin-manager/src/index.ts:40`](../packages/boot/plugin-manager/src/index.ts) - + ## `@deepseek-ai/dsh-plugin-package-inventory-deepseek` -需要: `agents` · `deepseekLlmApiExtensions` · `loader` +- `inject`: `agents` · `deepseekLlmApiExtensions` · `loader` +- `source`: [`packages/llm/plugin-package-inventory-deepseek/src/index.ts:32`](../packages/llm/plugin-package-inventory-deepseek/src/index.ts) ```ts config-catalog /** Plugin-package request contribution configuration. */ @@ -2153,14 +2221,15 @@ export interface Config { enabled?: boolean } ``` + -来源: [`packages/llm/plugin-package-inventory-deepseek/src/index.ts:32`](../packages/llm/plugin-package-inventory-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-ptc-runtime-node` -需要: `fs` · `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `fs` · `subprocess` · `sandbox` · `sandboxPolicy` +- `source`: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) ```ts config-catalog /** Deployment-varying runtime bounds and launch choices. */ @@ -2189,14 +2258,16 @@ export interface LaunchConfig { bootstrapPath?: string } ``` + -来源: [`packages/ptc-runtime/ptc-runtime-node/src/index.ts:26`](../packages/ptc-runtime/ptc-runtime-node/src/index.ts) - + ## `@deepseek-ai/dsh-pwsh-local` -需要: `subprocess` +- `inject`: `subprocess` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/shell/pwsh-local/src/index.ts:58`](../packages/shell/pwsh-local/src/index.ts) ```ts config-catalog /** Validated plugin configuration with live command budgets. */ @@ -2222,16 +2293,16 @@ export interface Config { pwshPath: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/shell/pwsh-local/src/index.ts:58`](../packages/shell/pwsh-local/src/index.ts) - + ## `@deepseek-ai/dsh-pwsh-sandbox` -需要: `subprocess` · `sandbox` · `sandboxPolicy` +- `inject`: `subprocess` · `sandbox` · `sandboxPolicy` +- `refs`: [`LocalConfig`](#deepseek-aidsh-pwsh-local) +- `source`: [`packages/shell/pwsh-sandbox/src/index.ts:40`](../packages/shell/pwsh-sandbox/src/index.ts) ```ts config-catalog /** @@ -2244,15 +2315,15 @@ Depends on: `Volatile` (`@deepseek-ai/cordis`) */ export type Config = LocalConfig ``` + -Depends on: [`LocalConfig`](#deepseek-aidsh-pwsh-local) - -来源: [`packages/shell/pwsh-sandbox/src/index.ts:40`](../packages/shell/pwsh-sandbox/src/index.ts) - + ## `@deepseek-ai/dsh-repeat-tool-reminder` +- `source`: [`packages/guard/repeat-tool-reminder/src/index.ts:35`](../packages/guard/repeat-tool-reminder/src/index.ts) + ```ts config-catalog /** * Plugin config, validated by the same-named schemastery schema plus the @@ -2280,13 +2351,15 @@ export interface Config { argumentsPreviewChars?: number } ``` + -来源: [`packages/guard/repeat-tool-reminder/src/index.ts:35`](../packages/guard/repeat-tool-reminder/src/index.ts) - + ## `@deepseek-ai/dsh-sandbox-local` +- `source`: [`packages/sandbox/sandbox-local/src/index.ts:45`](../packages/sandbox/sandbox-local/src/index.ts) + ```ts config-catalog /** Plugin config. All optional — `static Config` supplies the defaults. */ export interface Config { @@ -2312,14 +2385,16 @@ export interface Config { probeTimeoutMs?: number } ``` + -来源: [`packages/sandbox/sandbox-local/src/index.ts:45`](../packages/sandbox/sandbox-local/src/index.ts) - + ## `@deepseek-ai/dsh-sandbox-policy` -需要: `sessionProjections` +- `inject`: `sessionProjections` +- `refs`: [`SandboxMode`](subsystems/sandbox.zh.md) +- `source`: [`packages/sandbox/sandbox-policy/src/index.ts:71`](../packages/sandbox/sandbox-policy/src/index.ts) ```ts config-catalog /** @@ -2339,16 +2414,15 @@ export interface Config { workspaceRoot?: string } ``` + -Depends on: [`SandboxMode`](subsystems/sandbox.zh.md) - -来源: [`packages/sandbox/sandbox-policy/src/index.ts:71`](../packages/sandbox/sandbox-policy/src/index.ts) - + ## `@deepseek-ai/dsh-sdk-app` -需要: `cmdlineArgs` +- `inject`: `cmdlineArgs` +- `source`: [`packages/bundle/sdk-app/src/index.ts:23`](../packages/bundle/sdk-app/src/index.ts) ```ts config-catalog /** SDK stdio startup configuration. */ @@ -2357,14 +2431,16 @@ export interface Config { profile?: string } ``` + -来源: [`packages/bundle/sdk-app/src/index.ts:23`](../packages/bundle/sdk-app/src/index.ts) - + ## `@deepseek-ai/dsh-sdk-jsonrpc-server` -需要: `agents` +- `inject`: `agents` +- `refs`: `Readable` (`node:stream`) · `Writable` (`node:stream`) +- `source`: [`packages/sdk/server/src/index.ts:25`](../packages/sdk/server/src/index.ts) ```ts config-catalog /** JSON-RPC deployment config plus runtime-only test hooks. */ @@ -2379,16 +2455,15 @@ export interface JsonRpcConfig { exit?: (code: number) => void } ``` + -Depends on: `Readable` (`node:stream`) · `Writable` (`node:stream`) - -来源: [`packages/sdk/server/src/index.ts:25`](../packages/sdk/server/src/index.ts) - + ## `@deepseek-ai/dsh-session-log-deepseek` -需要: `deepseekLlmApiExtensions` · `sessions` +- `inject`: `deepseekLlmApiExtensions` · `sessions` +- `source`: [`packages/session/session-log-deepseek/src/index.ts:38`](../packages/session/session-log-deepseek/src/index.ts) ```ts config-catalog /** Session-log request contribution configuration. */ @@ -2397,14 +2472,15 @@ export interface Config { enabled?: boolean } ``` + -来源: [`packages/session/session-log-deepseek/src/index.ts:38`](../packages/session/session-log-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-session-log-export` -需要: `commands` · `connection` +- `inject`: `commands` · `connection` +- `source`: [`packages/session-query/session-log-export/src/index.ts:46`](../packages/session-query/session-log-export/src/index.ts) ```ts config-catalog /** Session-log archive policy. */ @@ -2416,13 +2492,15 @@ export interface Config { /** Valid fflate DEFLATE levels accepted by session-log export. */ export type SessionLogCompressionLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ``` + -来源: [`packages/session-query/session-log-export/src/index.ts:46`](../packages/session-query/session-log-export/src/index.ts) - + ## `@deepseek-ai/dsh-session-persistence-jsonl` +- `source`: [`packages/session/session-persistence-jsonl/src/index.ts:90`](../packages/session/session-persistence-jsonl/src/index.ts) + ```ts config-catalog /** Plugin config for the JSONL backend's root and physical encoding. */ export interface Config { @@ -2441,14 +2519,15 @@ export interface Config { /** Physical encoding selected for JSONL session artifacts. */ export type JsonlCompression = 'zstd' | 'none' ``` + -来源: [`packages/session/session-persistence-jsonl/src/index.ts:90`](../packages/session/session-persistence-jsonl/src/index.ts) - + ## `@deepseek-ai/dsh-session-projection-cache` -需要: `storageDomain` · `sessionProjections` · `sessions` +- `inject`: `storageDomain` · `sessionProjections` · `sessions` +- `source`: [`packages/session/session-projection-cache/src/index.ts:75`](../packages/session/session-projection-cache/src/index.ts) ```ts config-catalog /** @@ -2465,14 +2544,16 @@ export interface Config { writeIntervalMs: number } ``` + -来源: [`packages/session/session-projection-cache/src/index.ts:75`](../packages/session/session-projection-cache/src/index.ts) - + ## `@deepseek-ai/dsh-session-query-sqlite` -需要: `sessions` +- `inject`: `sessions` +- `refs`: [`SessionQueryConfig`](../packages/session-query/session-query/src/index.ts) +- `source`: [`packages/session-query/session-query-sqlite/src/index.ts:92`](../packages/session-query/session-query-sqlite/src/index.ts) ```ts config-catalog /** Combined session-query configuration backed by SQLite full-text search. */ @@ -2511,16 +2592,15 @@ export type OpenAt = 'startup' | 'first-search' | 'never' /** Supported SQLite journal modes. */ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' ``` + -Depends on: [`SessionQueryConfig`](../packages/session-query/session-query/src/index.ts) - -来源: [`packages/session-query/session-query-sqlite/src/index.ts:92`](../packages/session-query/session-query-sqlite/src/index.ts) - + ## `@deepseek-ai/dsh-session-reference` -需要: `sessionQuery` +- `inject`: `sessionQuery` +- `source`: [`packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts) ```ts config-catalog /** Session-reference service configuration. */ @@ -2535,14 +2615,16 @@ export interface Config { referenceContextFraction?: number } ``` + -来源: [`packages/context/session-reference/src/config.ts:11`](../packages/context/session-reference/src/config.ts) - + ## `@deepseek-ai/dsh-session-telemetry-otel` -需要: `sessions` +- `inject`: `sessions` +- `refs`: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`) +- `source`: [`packages/session/session-telemetry-otel/src/index.ts:100`](../packages/session/session-telemetry-otel/src/index.ts) ```ts config-catalog /** @@ -2578,16 +2660,15 @@ export enum SessionTelemetryMode { DISABLED = 'DISABLED', } ``` + -Depends on: `BatchLogRecordProcessorOptions` (`@opentelemetry/sdk-logs`) · `OTLPExporterNodeConfigBase` (`@opentelemetry/otlp-exporter-base`) - -来源: [`packages/session/session-telemetry-otel/src/index.ts:100`](../packages/session/session-telemetry-otel/src/index.ts) - + ## `@deepseek-ai/dsh-session-title` -需要: `sessions` · `sessionProjections` +- `inject`: `sessions` · `sessionProjections` +- `source`: [`packages/session/session-title/src/index.ts:56`](../packages/session/session-title/src/index.ts) ```ts config-catalog /** Required deterministic fallback and accepted-title limits. */ @@ -2600,43 +2681,45 @@ export interface Config { readonly maxTitleBytes: number } ``` + -来源: [`packages/session/session-title/src/index.ts:56`](../packages/session/session-title/src/index.ts) - + ## `@deepseek-ai/dsh-session-title-all-prompts-llm` -需要: `sessionTitle` · `llm` · `sessions` +- `inject`: `sessionTitle` · `llm` · `sessions` +- `refs`: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) +- `source`: [`packages/session/session-title-all-prompts-llm/src/index.ts:15`](../packages/session/session-title-all-prompts-llm/src/index.ts) ```ts config-catalog /** Required LLM policy; this plugin adds no defaults. */ export type Config = SessionTitleLlmConfig ``` + -Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) - -来源: [`packages/session/session-title-all-prompts-llm/src/index.ts:15`](../packages/session/session-title-all-prompts-llm/src/index.ts) - + ## `@deepseek-ai/dsh-session-title-first-prompt-llm` -需要: `sessionTitle` · `llm` · `sessions` +- `inject`: `sessionTitle` · `llm` · `sessions` +- `refs`: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) +- `source`: [`packages/session/session-title-first-prompt-llm/src/index.ts:15`](../packages/session/session-title-first-prompt-llm/src/index.ts) ```ts config-catalog /** Required LLM policy; this plugin adds no defaults. */ export type Config = SessionTitleLlmConfig ``` + -Depends on: [`SessionTitleLlmConfig`](../packages/session/session-title-llm/src/index.ts) - -来源: [`packages/session/session-title-first-prompt-llm/src/index.ts:15`](../packages/session/session-title-first-prompt-llm/src/index.ts) - + ## `@deepseek-ai/dsh-shell-env` +- `source`: [`packages/shell/shell-env/src/index.ts:30`](../packages/shell/shell-env/src/index.ts) + ```ts config-catalog /** Plugin config (all optional — the built-in facts resolve without defaults). */ export interface Config { @@ -2644,13 +2727,15 @@ export interface Config { dshHome?: string } ``` + -来源: [`packages/shell/shell-env/src/index.ts:30`](../packages/shell/shell-env/src/index.ts) - + ## `@deepseek-ai/dsh-skill` +- `source`: [`packages/skill/skill/src/index.ts:278`](../packages/skill/skill/src/index.ts) + ```ts config-catalog /** Skill registry configuration. */ export interface Config { @@ -2658,14 +2743,15 @@ export interface Config { readonly collectCacheMaxEntries?: number } ``` + -来源: [`packages/skill/skill/src/index.ts:278`](../packages/skill/skill/src/index.ts) - + ## `@deepseek-ai/dsh-skill-filesystem` -需要: `skills` +- `inject`: `skills` +- `source`: [`packages/skill/skill-filesystem/src/index.ts:49`](../packages/skill/skill-filesystem/src/index.ts) ```ts config-catalog /** Local filesystem skill provider configuration. */ @@ -2696,14 +2782,15 @@ export interface Config { bundledSkillDir?: string } ``` + -来源: [`packages/skill/skill-filesystem/src/index.ts:49`](../packages/skill/skill-filesystem/src/index.ts) - + ## `@deepseek-ai/dsh-skill-office` -需要: `skills` +- `inject`: `skills` +- `source`: [`packages/skill/skill-office/src/index.ts:16`](../packages/skill/skill-office/src/index.ts) ```ts config-catalog /** Office skill resource location. */ @@ -2716,13 +2803,15 @@ export interface Config { cli?: string | false } ``` + -来源: [`packages/skill/skill-office/src/index.ts:16`](../packages/skill/skill-office/src/index.ts) - + ## `@deepseek-ai/dsh-spill-local` +- `source`: [`packages/spill/spill-local/src/index.ts:31`](../packages/spill/spill-local/src/index.ts) + ```ts config-catalog /** Plugin config (all optional — `static Config` supplies the defaults). */ export interface Config { @@ -2745,14 +2834,15 @@ export interface Config { cleanupPeriodDays?: number } ``` + -来源: [`packages/spill/spill-local/src/index.ts:31`](../packages/spill/spill-local/src/index.ts) - + ## `@deepseek-ai/dsh-spill-policy` -需要: `tools` +- `inject`: `tools` +- `source`: [`packages/spill/spill-policy/src/index.ts:25`](../packages/spill/spill-policy/src/index.ts) ```ts config-catalog /** Optional result-retention budget. */ @@ -2761,13 +2851,15 @@ export interface Config { maxInlineTokens?: number } ``` + -来源: [`packages/spill/spill-policy/src/index.ts:25`](../packages/spill/spill-policy/src/index.ts) - + ## `@deepseek-ai/dsh-ssh` +- `source`: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) + ```ts config-catalog /** Deployment-owned SSH identity and installed helper; no model argument selects these values. */ export interface Config { @@ -2795,14 +2887,15 @@ export interface Config { leaseMs?: number } ``` + -来源: [`packages/ssh/ssh/src/index.ts:17`](../packages/ssh/ssh/src/index.ts) - + ## `@deepseek-ai/dsh-storage-domain` -需要: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts) ```ts config-catalog /** @@ -2818,14 +2911,15 @@ export interface Config { routes?: Record } ``` + -来源: [`packages/storage/storage-domain/src/index.ts:52`](../packages/storage/storage-domain/src/index.ts) - + ## `@deepseek-ai/dsh-storage-json` -需要: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-json/src/index.ts:28`](../packages/storage/storage-json/src/index.ts) ```ts config-catalog /** @@ -2839,14 +2933,15 @@ export interface Config { root: string } ``` + -来源: [`packages/storage/storage-json/src/index.ts:28`](../packages/storage/storage-json/src/index.ts) - + ## `@deepseek-ai/dsh-storage-sqlite` -需要: `storage` +- `inject`: `storage` +- `source`: [`packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts) ```ts config-catalog /** Plugin configuration. */ @@ -2879,13 +2974,16 @@ export interface Config { */ export type JournalMode = 'wal' | 'delete' | 'truncate' | 'persist' ``` + -来源: [`packages/storage/storage-sqlite/src/index.ts:24`](../packages/storage/storage-sqlite/src/index.ts) - + ## `@deepseek-ai/dsh-subagent` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/subagent/subagent/src/index.ts:192`](../packages/subagent/subagent/src/index.ts) + ```ts config-catalog /** Host configuration for continuable subagent capacity. */ export interface Config { @@ -2895,16 +2993,15 @@ export interface Config { maxDepth: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/subagent/subagent/src/index.ts:192`](../packages/subagent/subagent/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-acp` -需要: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-acp/src/index.ts:27`](../packages/subagent/subagent-acp/src/index.ts) ```ts config-catalog /** Config: how to spawn and drive the child ACP agent process. */ @@ -2950,14 +3047,15 @@ export interface Config { /** Fixed response to child permission requests: reject by default, or select the first allow option. */ export type PermissionPolicy = 'allow' | 'reject' ``` + -来源: [`packages/subagent/subagent-acp/src/index.ts:27`](../packages/subagent/subagent-acp/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-claude-code` -需要: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-claude-code/src/index.ts:38`](../packages/subagent/subagent-claude-code/src/index.ts) ```ts config-catalog /** Deployment-owned model, permission, environment, and process-release settings. */ @@ -2985,14 +3083,15 @@ export interface Config { /** Profile-selectable non-interactive Claude Code permission mode. */ export type ClaudeCodePermissionMode = typeof CLAUDE_CODE_PERMISSION_MODES[number] ``` + -来源: [`packages/subagent/subagent-claude-code/src/index.ts:38`](../packages/subagent/subagent-claude-code/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-codex` -需要: `subagents` · `subprocess` +- `inject`: `subagents` · `subprocess` +- `source`: [`packages/subagent/subagent-codex/src/index.ts:36`](../packages/subagent/subagent-codex/src/index.ts) ```ts config-catalog /** Deployment-owned model, permission, environment, and process-release settings. */ @@ -3018,14 +3117,15 @@ export type CodexPermissionMode = | 'approve-for-me' | 'dangerously-bypass-approvals-and-sandbox' ``` + -来源: [`packages/subagent/subagent-codex/src/index.ts:36`](../packages/subagent/subagent-codex/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-dsh-sdk` -需要: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-dsh-sdk/src/index.ts:34`](../packages/subagent/subagent-dsh-sdk/src/index.ts) ```ts config-catalog /** Config: how to spawn and drive the child SDK runtime process. */ @@ -3074,14 +3174,15 @@ export interface Config { disposeGraceMs?: number } ``` + -来源: [`packages/subagent/subagent-dsh-sdk/src/index.ts:34`](../packages/subagent/subagent-dsh-sdk/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-fork-in-process` -需要: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-fork-in-process/src/index.ts:31`](../packages/subagent/subagent-fork-in-process/src/index.ts) ```ts config-catalog /** Config: the registry name to register the provider under. */ @@ -3090,14 +3191,15 @@ export interface Config { providerName: string } ``` + -来源: [`packages/subagent/subagent-fork-in-process/src/index.ts:31`](../packages/subagent/subagent-fork-in-process/src/index.ts) - + ## `@deepseek-ai/dsh-subagent-spawn-in-process` -需要: `subagents` +- `inject`: `subagents` +- `source`: [`packages/subagent/subagent-spawn-in-process/src/index.ts:25`](../packages/subagent/subagent-spawn-in-process/src/index.ts) ```ts config-catalog /** Config: the registry name to register the provider under. */ @@ -3106,13 +3208,15 @@ export interface Config { providerName: string } ``` + -来源: [`packages/subagent/subagent-spawn-in-process/src/index.ts:25`](../packages/subagent/subagent-spawn-in-process/src/index.ts) - + ## `@deepseek-ai/dsh-system-prompt` +- `source`: [`packages/core/system-prompt/src/index.ts:247`](../packages/core/system-prompt/src/index.ts) + ```ts config-catalog /** Plugin config: the deployment-authored fragment of the system prompt (see {@link Config.personaPrefix} for its contract). */ export interface Config { @@ -3138,14 +3242,15 @@ export interface Config { toolOrder?: string[] } ``` + -来源: [`packages/core/system-prompt/src/index.ts:247`](../packages/core/system-prompt/src/index.ts) - + ## `@deepseek-ai/dsh-terminal-bash` -需要: `terminals` · `sandboxPolicy` · `sessionProjections` · `subprocess` +- `inject`: `terminals` · `sandboxPolicy` · `sessionProjections` · `subprocess` +- `source`: [`packages/terminal/terminal-bash/src/config.ts:10`](../packages/terminal/terminal-bash/src/config.ts) ```ts config-catalog /** Public plugin configuration. */ @@ -3188,14 +3293,15 @@ export interface Config { /** One supported interactive shell dialect. */ export type ShellDialect = 'bash' | 'pwsh' ``` + -来源: [`packages/terminal/terminal-bash/src/config.ts:10`](../packages/terminal/terminal-bash/src/config.ts) - + ## `@deepseek-ai/dsh-time-context` -需要: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/context/time-context/src/index.ts:56`](../packages/context/time-context/src/index.ts) ```ts config-catalog /** Request-preparation clock formatting and append scheduling. Invalid values fail plugin load. */ @@ -3206,14 +3312,15 @@ export interface Config { refreshIntervalMs?: number } ``` + -来源: [`packages/context/time-context/src/index.ts:56`](../packages/context/time-context/src/index.ts) - + ## `@deepseek-ai/dsh-tmux-context` -需要: `agents` · `sessionProjections` +- `inject`: `agents` · `sessionProjections` +- `source`: [`packages/context/tmux-context/src/index.ts:47`](../packages/context/tmux-context/src/index.ts) ```ts config-catalog /** Per-turn tmux-location scheduling. Invalid values fail plugin load. */ @@ -3222,27 +3329,29 @@ export interface Config { refreshIntervalMs?: number } ``` + -来源: [`packages/context/tmux-context/src/index.ts:47`](../packages/context/tmux-context/src/index.ts) - + ## `@deepseek-ai/dsh-token-meter` -需要: `sessionProjections` +- `inject`: `sessionProjections` +- `source`: [`packages/llm/token-meter/src/types.ts:13`](../packages/llm/token-meter/src/types.ts) ```ts config-catalog /** Token-meter plugin configuration; the fixed estimator has no settings. */ export type TokenMeterConfig = Record ``` + -来源: [`packages/llm/token-meter/src/types.ts:13`](../packages/llm/token-meter/src/types.ts) - + ## `@deepseek-ai/dsh-tool-bash` -需要: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `inject`: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `source`: [`packages/shell/tool-bash/src/index.ts:37`](../packages/shell/tool-bash/src/index.ts) ```ts config-catalog /** Configuration for the bash tool. */ @@ -3264,14 +3373,15 @@ export interface Config { promoteOnTimeout?: boolean } ``` + -来源: [`packages/shell/tool-bash/src/index.ts:37`](../packages/shell/tool-bash/src/index.ts) - + ## `@deepseek-ai/dsh-tool-bash-persistent` -需要: `tools` · `terminals` +- `inject`: `tools` · `terminals` +- `source`: [`packages/shell/tool-bash-persistent/src/index.ts:443`](../packages/shell/tool-bash-persistent/src/index.ts) ```ts config-catalog /** Configuration for the persistent Bash tool. */ @@ -3286,14 +3396,15 @@ export interface Config { description?: string } ``` + -来源: [`packages/shell/tool-bash-persistent/src/index.ts:443`](../packages/shell/tool-bash-persistent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-fs` -需要: `tools` · `fs` · `systemPrompt` +- `inject`: `tools` · `fs` · `systemPrompt` +- `source`: [`packages/fs/tool-fs/src/index.ts:25`](../packages/fs/tool-fs/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `Config` supplies the defaults). */ @@ -3308,14 +3419,15 @@ export interface Config { readStreamMinSize?: number } ``` + -来源: [`packages/fs/tool-fs/src/index.ts:25`](../packages/fs/tool-fs/src/index.ts) - + ## `@deepseek-ai/dsh-tool-fs-search` -需要: `tools` · `systemPrompt` · `subprocess` +- `inject`: `tools` · `systemPrompt` · `subprocess` +- `source`: [`packages/fs/tool-fs-search/src/index.ts:73`](../packages/fs/tool-fs-search/src/index.ts) ```ts config-catalog /** Plugin config; over-cap glob sampling is an explicit deployment choice and the remaining fields have defaults. */ @@ -3343,14 +3455,15 @@ export interface Config { timeoutMs?: number } ``` + -来源: [`packages/fs/tool-fs-search/src/index.ts:73`](../packages/fs/tool-fs-search/src/index.ts) - + ## `@deepseek-ai/dsh-tool-goal` -需要: `agents` · `goals` · `tools` · `systemPrompt` · `sessionProjections` +- `inject`: `agents` · `goals` · `tools` · `systemPrompt` · `sessionProjections` +- `source`: [`packages/goal/tool-goal/src/index.ts:32`](../packages/goal/tool-goal/src/index.ts) ```ts config-catalog /** Model policy and hard lower bounds for goal-state updates. */ @@ -3359,14 +3472,15 @@ export interface Config { blockedAfterConsecutiveRounds?: number } ``` + -来源: [`packages/goal/tool-goal/src/index.ts:32`](../packages/goal/tool-goal/src/index.ts) - + ## `@deepseek-ai/dsh-tool-jobs` -需要: `tools` · `jobs` · `systemPrompt` +- `inject`: `tools` · `jobs` · `systemPrompt` +- `source`: [`packages/jobs/tool-jobs/src/index.ts:41`](../packages/jobs/tool-jobs/src/index.ts) ```ts config-catalog /** Configures bounded `job_output` waits and completion-notice delivery. */ @@ -3395,14 +3509,15 @@ export interface Config { */ export type CompletionDelivery = 'quiet' | 'wakeup' ``` + -来源: [`packages/jobs/tool-jobs/src/index.ts:41`](../packages/jobs/tool-jobs/src/index.ts) - + ## `@deepseek-ai/dsh-tool-lsp` -需要: `tools` · `lsp` · `systemPrompt` +- `inject`: `tools` · `lsp` · `systemPrompt` +- `source`: [`packages/lsp/tool-lsp/src/index.ts:57`](../packages/lsp/tool-lsp/src/index.ts) ```ts config-catalog /** Plugin configuration: result caps and the timeout budget. */ @@ -3415,14 +3530,15 @@ export interface Config { timeoutMs?: number } ``` + -来源: [`packages/lsp/tool-lsp/src/index.ts:57`](../packages/lsp/tool-lsp/src/index.ts) - + ## `@deepseek-ai/dsh-tool-present` -需要: `tools` · `fs` · `sessionProjections` +- `inject`: `tools` · `fs` · `sessionProjections` +- `source`: [`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) ```ts config-catalog /** Per-call delivery limit. */ @@ -3431,14 +3547,15 @@ export interface Config { maxFiles: number } ``` + -来源: [`packages/deliverables/tool-present/src/index.ts:15`](../packages/deliverables/tool-present/src/index.ts) - + ## `@deepseek-ai/dsh-tool-pwsh` -需要: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `inject`: `tools` · `shell` · `systemPrompt` · `shellEnv` +- `source`: [`packages/shell/tool-pwsh/src/index.ts:54`](../packages/shell/tool-pwsh/src/index.ts) ```ts config-catalog /** Configuration for the pwsh tool. */ @@ -3460,14 +3577,15 @@ export interface Config { promoteOnTimeout?: boolean } ``` + -来源: [`packages/shell/tool-pwsh/src/index.ts:54`](../packages/shell/tool-pwsh/src/index.ts) - + ## `@deepseek-ai/dsh-tool-pwsh-persistent` -需要: `tools` · `terminals` +- `inject`: `tools` · `terminals` +- `source`: [`packages/shell/tool-pwsh-persistent/src/index.ts:455`](../packages/shell/tool-pwsh-persistent/src/index.ts) ```ts config-catalog /** Configuration for the persistent pwsh tool. */ @@ -3482,14 +3600,15 @@ export interface Config { description?: string } ``` + -来源: [`packages/shell/tool-pwsh-persistent/src/index.ts:455`](../packages/shell/tool-pwsh-persistent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-ralph` -需要: `tools` · `workflowEngine` · `subagents` · `systemPrompt` +- `inject`: `tools` · `workflowEngine` · `subagents` · `systemPrompt` +- `source`: [`packages/workflow/tool-ralph/src/index.ts:21`](../packages/workflow/tool-ralph/src/index.ts) ```ts config-catalog /** Deployment policy for the fixed Ralph workflow. */ @@ -3504,14 +3623,15 @@ export interface Config { maxResultChars?: number } ``` + -来源: [`packages/workflow/tool-ralph/src/index.ts:21`](../packages/workflow/tool-ralph/src/index.ts) - + ## `@deepseek-ai/dsh-tool-session-query` -需要: `tools` · `systemPrompt` · `sessionQuery` · `sessionProjections` +- `inject`: `tools` · `systemPrompt` · `sessionQuery` · `sessionProjections` +- `source`: [`packages/session-query/tool-session-query/src/index.ts:28`](../packages/session-query/tool-session-query/src/index.ts) ```ts config-catalog /** Deployment-owned search count and timeout bounds. */ @@ -3522,14 +3642,15 @@ export interface Config { searchTimeoutMs?: number } ``` + -来源: [`packages/session-query/tool-session-query/src/index.ts:28`](../packages/session-query/tool-session-query/src/index.ts) - + ## `@deepseek-ai/dsh-tool-skill` -需要: `agents` · `tools` · `skills` +- `inject`: `agents` · `tools` · `skills` +- `source`: [`packages/skill/tool-skill/src/index.ts:61`](../packages/skill/tool-skill/src/index.ts) ```ts config-catalog /** Model-facing skill catalog configuration. */ @@ -3538,14 +3659,15 @@ export interface Config { catalogDescriptionMaxLength?: number } ``` + -来源: [`packages/skill/tool-skill/src/index.ts:61`](../packages/skill/tool-skill/src/index.ts) - + ## `@deepseek-ai/dsh-tool-str-replace-editor` -需要: `tools` · `fs` +- `inject`: `tools` · `fs` +- `source`: [`packages/fs/tool-str-replace-editor/src/index.ts:505`](../packages/fs/tool-str-replace-editor/src/index.ts) ```ts config-catalog /** Configuration for the string-replacement editor tool. */ @@ -3556,14 +3678,16 @@ export interface Config { description?: string } ``` + -来源: [`packages/fs/tool-str-replace-editor/src/index.ts:505`](../packages/fs/tool-str-replace-editor/src/index.ts) - + ## `@deepseek-ai/dsh-tool-subagent` -需要: `tools` · `subagents` · `systemPrompt` · `sessionProjections` +- `inject`: `tools` · `subagents` · `systemPrompt` · `sessionProjections` +- `refs`: [`AgentOptions`](subsystems/core.zh.md) +- `source`: [`packages/subagent/tool-subagent/src/index.ts:48`](../packages/subagent/tool-subagent/src/index.ts) ```ts config-catalog /** Config: which registered provider this tool delegates to, plus child defaults. */ @@ -3625,16 +3749,15 @@ export interface Config { maxDepth?: number | 'provider-managed' } ``` + -Depends on: [`AgentOptions`](subsystems/core.zh.md) - -来源: [`packages/subagent/tool-subagent/src/index.ts:48`](../packages/subagent/tool-subagent/src/index.ts) - + ## `@deepseek-ai/dsh-tool-terminal` -需要: `terminals` · `tools` · `systemPrompt` +- `inject`: `terminals` · `tools` · `systemPrompt` +- `source`: [`packages/terminal/tool-terminal/src/index.ts:36`](../packages/terminal/tool-terminal/src/index.ts) ```ts config-catalog /** Model-facing terminal tool configuration. */ @@ -3645,14 +3768,15 @@ export interface Config { maxResultBytes?: number } ``` + -来源: [`packages/terminal/tool-terminal/src/index.ts:36`](../packages/terminal/tool-terminal/src/index.ts) - + ## `@deepseek-ai/dsh-tool-todo` -需要: `tools` · `sessionProjections` +- `inject`: `tools` · `sessionProjections` +- `source`: [`packages/todo/tool-todo/src/index.ts:29`](../packages/todo/tool-todo/src/index.ts) ```ts config-catalog /** Model-facing todo tool configuration. */ @@ -3667,14 +3791,15 @@ export interface Config { allowParallelInProgress: boolean } ``` + -来源: [`packages/todo/tool-todo/src/index.ts:29`](../packages/todo/tool-todo/src/index.ts) - + ## `@deepseek-ai/dsh-tool-web` -需要: `tools` · `web` · `systemPrompt` +- `inject`: `tools` · `web` · `systemPrompt` +- `source`: [`packages/web/tool-web/src/index.ts:37`](../packages/web/tool-web/src/index.ts) ```ts config-catalog /** Plugin config: which web tools to register, search bounds, per-tool budgets, and the fetch output cap. */ @@ -3695,14 +3820,15 @@ export interface Config { fetchMaxOutputChars?: number } ``` + -来源: [`packages/web/tool-web/src/index.ts:37`](../packages/web/tool-web/src/index.ts) - + ## `@deepseek-ai/dsh-tool-workflow` -需要: `tools` · `workflowEngine` · `systemPrompt` +- `inject`: `tools` · `workflowEngine` · `systemPrompt` +- `source`: [`packages/workflow/tool-workflow/src/index.ts:44`](../packages/workflow/tool-workflow/src/index.ts) ```ts config-catalog /** Config: the model-facing tool name plus result rendering caps. */ @@ -3721,14 +3847,15 @@ export interface Config { enableRunInBackground?: boolean } ``` + -来源: [`packages/workflow/tool-workflow/src/index.ts:44`](../packages/workflow/tool-workflow/src/index.ts) - + ## `@deepseek-ai/dsh-tool-workspace-dependencies` -需要:`tools` +- `inject`: `tools` +- `source`: [`packages/skill/tool-workspace-dependencies/src/index.ts:15`](../packages/skill/tool-workspace-dependencies/src/index.ts) ```ts config-catalog /** Payload location and optional installation directory. */ @@ -3743,14 +3870,15 @@ export interface Config { readonly root?: string } ``` + -来源:[`packages/skill/tool-workspace-dependencies/src/index.ts:15`](../packages/skill/tool-workspace-dependencies/src/index.ts) - + ## `@deepseek-ai/dsh-tools` -需要: `systemPrompt` +- `inject`: `systemPrompt` +- `source`: [`packages/core/tools/src/index.ts:673`](../packages/core/tools/src/index.ts) ```ts config-catalog /** Plugin config: how the registered tools are presented to the model. */ @@ -3779,14 +3907,15 @@ export interface Config { /** How the registry presents its tools to the model (see {@link Config.mode}). */ export type ToolPresentationMode = 'native' | 'ptc' | 'both' ``` + -来源: [`packages/core/tools/src/index.ts:663`](../packages/core/tools/src/index.ts) - + ## `@deepseek-ai/dsh-typert-loader` -需要: `typert` · `loader` +- `inject`: `typert` · `loader` +- `source`: [`packages/typert/loader/src/index.ts:48`](../packages/typert/loader/src/index.ts) ```ts config-catalog /** Additional package artifacts whose owning plugins are nested behind another Loader entry. */ @@ -3795,13 +3924,15 @@ export interface Config { packages?: string[] } ``` + -来源: [`packages/typert/loader/src/index.ts:48`](../packages/typert/loader/src/index.ts) - + ## `@deepseek-ai/dsh-user-approval` +- `source`: [`packages/interaction/user-approval/src/index.ts:135`](../packages/interaction/user-approval/src/index.ts) + ```ts config-catalog /** Plugin config. All optional — `static Config` supplies the defaults. */ export interface Config { @@ -3826,13 +3957,15 @@ export interface Config { */ export type ApprovalPolicy = 'ask' | 'never' ``` + -来源: [`packages/interaction/user-approval/src/index.ts:135`](../packages/interaction/user-approval/src/index.ts) - + ## `@deepseek-ai/dsh-web` +- `source`: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts) + ```ts config-catalog /** * Config for the web seam. `searchProvider` / `fetchProvider` pin which provider @@ -3847,14 +3980,15 @@ export interface WebRuntimeConfig { readonly fetchProvider?: string } ``` + -来源: [`packages/web/web/src/index.ts:55`](../packages/web/web/src/index.ts) - + ## `@deepseek-ai/dsh-web-app` -需要: `webServer` +- `inject`: `webServer` +- `source`: [`packages/bundle/web-app/src/index.ts:44`](../packages/bundle/web-app/src/index.ts) ```ts config-catalog /** Plugin config: composed deployment settings plus per-invocation command-line values. */ @@ -3874,14 +4008,15 @@ export interface Config { trustedHosts: string[] } ``` + -来源: [`packages/bundle/web-app/src/index.ts:44`](../packages/bundle/web-app/src/index.ts) - + ## `@deepseek-ai/dsh-web-fetch-http` -需要: `web` +- `inject`: `web` +- `source`: [`packages/web/web-fetch-http/src/index.ts:32`](../packages/web/web-fetch-http/src/index.ts) ```ts config-catalog /** Plugin config: the provider's transport and size limits plus its `User-Agent` (all defaulted). */ @@ -3898,14 +4033,16 @@ export interface Config { userAgent?: string } ``` + -来源: [`packages/web/web-fetch-http/src/index.ts:32`](../packages/web/web-fetch-http/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-deepseek` -需要: `web` +- `inject`: `web` +- `refs`: `Volatile` (`@deepseek-ai/cordis`) +- `source`: [`packages/web/web-search-deepseek/src/index.ts:46`](../packages/web/web-search-deepseek/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3926,16 +4063,15 @@ export interface Config { maxUses: Volatile } ``` + -Depends on: `Volatile` (`@deepseek-ai/cordis`) - -来源: [`packages/web/web-search-deepseek/src/index.ts:46`](../packages/web/web-search-deepseek/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-exa` -需要: `web` +- `inject`: `web` +- `source`: [`packages/web/web-search-exa/src/index.ts:35`](../packages/web/web-search-exa/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3952,14 +4088,15 @@ export interface Config { highlightsPerResult?: number } ``` + -来源: [`packages/web/web-search-exa/src/index.ts:35`](../packages/web/web-search-exa/src/index.ts) - + ## `@deepseek-ai/dsh-web-search-perplexity` -需要: `web` +- `inject`: `web` +- `source`: [`packages/web/web-search-perplexity/src/index.ts:30`](../packages/web/web-search-perplexity/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `apply` fills env-var and constant defaults). */ @@ -3976,14 +4113,15 @@ export interface Config { searchRecency?: 'day' | 'week' | 'month' | 'year' } ``` + -来源: [`packages/web/web-search-perplexity/src/index.ts:30`](../packages/web/web-search-perplexity/src/index.ts) - + ## `@deepseek-ai/dsh-webhook-github` -需要: `webServer` · `webhookRuntime` · `credentials` +- `inject`: `webServer` · `webhookRuntime` · `credentials` +- `source`: [`packages/webhook/webhook-github/src/index.ts:17`](../packages/webhook/webhook-github/src/index.ts) ```ts config-catalog /** Required GitHub ingress configuration. */ @@ -3998,14 +4136,15 @@ export interface Config { readonly maxBodyBytes: number } ``` + -来源: [`packages/webhook/webhook-github/src/index.ts:17`](../packages/webhook/webhook-github/src/index.ts) - + ## `@deepseek-ai/dsh-workflow-ptc` -需要: `subagents` · `ptcRuntime` · `sandboxPolicy` +- `inject`: `subagents` · `ptcRuntime` · `sandboxPolicy` +- `source`: [`packages/workflow/workflow-ptc/src/index.ts:32`](../packages/workflow/workflow-ptc/src/index.ts) ```ts config-catalog /** Plugin config (all optional — `static Config` supplies the defaults). */ @@ -4022,14 +4161,15 @@ export interface Config { syncTimeoutMs?: number } ``` + -来源: [`packages/workflow/workflow-ptc/src/index.ts:32`](../packages/workflow/workflow-ptc/src/index.ts) - + ## `@deepseek-ai/dsh-workspace-changes` -需要: `subprocess` +- `inject`: `subprocess` +- `source`: [`packages/deliverables/workspace-changes/src/index.ts:33`](../packages/deliverables/workspace-changes/src/index.ts) ```ts config-catalog /** Snapshot, capture, and comparison bounds. Invalid values fail plugin load. */ @@ -4049,188 +4189,199 @@ export interface Config { diffTimeoutMs: number } ``` - -来源: [`packages/deliverables/workspace-changes/src/index.ts:36`](../packages/deliverables/workspace-changes/src/index.ts) + ## 无配置的可加载插件 这些插件通过 `cordis.yml` 中不含 `config:` 块的条目加载;它们未声明任何配置接口。 -- `@deepseek-ai/dsh-acp-app` — 需要 `cmdlineArgs`([`packages/bundle/acp-app/src/index.ts`](../packages/bundle/acp-app/src/index.ts)) -- `@deepseek-ai/dsh-agent`([`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts)) -- `@deepseek-ai/dsh-api-account-controller` — 需要 `deepseekAccount` · `agents` ([`packages/api/account-controller/src/index.ts`](../packages/api/account-controller/src/index.ts)) -- `@deepseek-ai/dsh-api-remotes` — 需要 `typertGateway`([`packages/api/remotes/src/index.ts`](../packages/api/remotes/src/index.ts)) -- `@deepseek-ai/dsh-authorization` — 需要 `credentials`([`packages/credentials/authorization/src/index.ts`](../packages/credentials/authorization/src/index.ts)) -- `@deepseek-ai/dsh-browser-use`([`packages/browser-use/browser-use/src/index.ts`](../packages/browser-use/browser-use/src/index.ts)) -- `@deepseek-ai/dsh-client-file-upload` — 需要 `agents` · `attachments` · `commands` · `connection`([`packages/client/file-upload/src/index.ts`](../packages/client/file-upload/src/index.ts)) -- `@deepseek-ai/dsh-client-locale`([`packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts)) -- `@deepseek-ai/dsh-client-modules` — 需要 `loader`([`packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts)) -- `@deepseek-ai/dsh-client-resources`([`packages/client/resources/src/index.ts`](../packages/client/resources/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-agent-preset`([`packages/client/ui-agent-preset/src/index.ts`](../packages/client/ui-agent-preset/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-approval`([`packages/client/ui-approval/src/index.ts`](../packages/client/ui-approval/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-attachment`([`packages/client/ui-attachment/src/index.ts`](../packages/client/ui-attachment/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-brand-official`([`packages/client/ui-brand-official/src/index.ts`](../packages/client/ui-brand-official/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-chat`([`packages/client/ui-chat/src/index.ts`](../packages/client/ui-chat/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-commands`([`packages/client/ui-commands/src/index.ts`](../packages/client/ui-commands/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-conversation`([`packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-cordis`([`packages/extensions/ui-cordis/src/index.ts`](../packages/extensions/ui-cordis/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-deliverables` — 需要 `systemPrompt` · `connection` · `sessionQuery` · `sessionController`([`packages/client/ui-deliverables/src/index.ts`](../packages/client/ui-deliverables/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-directory-picker-browse`([`packages/client/ui-directory-picker-browse/src/index.ts`](../packages/client/ui-directory-picker-browse/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-directory-picker-native`([`packages/client/ui-directory-picker-native/src/index.ts`](../packages/client/ui-directory-picker-native/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-goal`([`packages/client/ui-goal/src/index.ts`](../packages/client/ui-goal/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-input-trigger`([`packages/client/ui-input-trigger/src/index.ts`](../packages/client/ui-input-trigger/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-jobs`([`packages/client/ui-jobs/src/index.ts`](../packages/client/ui-jobs/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-layout`([`packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-message-feedback`([`packages/client/ui-message-feedback/src/index.ts`](../packages/client/ui-message-feedback/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-model-selection`([`packages/client/ui-model-selection/src/index.ts`](../packages/client/ui-model-selection/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-open-in-app`([`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-permission-presets`([`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-plan`([`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-reference`([`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-renderer`([`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-schedule`([`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-session`([`packages/client/ui-session/src/index.ts`](../packages/client/ui-session/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings`([`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-agent-loop`([`packages/client/ui-settings-agent-loop/src/index.ts`](../packages/client/ui-settings-agent-loop/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-general`([`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-plugin-inventory`([`packages/client/ui-settings-plugin-inventory/src/index.ts`](../packages/client/ui-settings-plugin-inventory/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-plugins`([`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-shell`([`packages/client/ui-settings-shell/src/index.ts`](../packages/client/ui-settings-shell/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-subagent`([`packages/client/ui-settings-subagent/src/index.ts`](../packages/client/ui-settings-subagent/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-settings-web-search`([`packages/client/ui-settings-web-search/src/index.ts`](../packages/client/ui-settings-web-search/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar`([`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-browser`([`packages/client/ui-sidebar-browser/src/index.ts`](../packages/client/ui-sidebar-browser/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-files`([`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-right`([`packages/client/ui-sidebar-right/src/index.ts`](../packages/client/ui-sidebar-right/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-sidebar-terminal`([`packages/client/ui-sidebar-terminal/src/index.ts`](../packages/client/ui-sidebar-terminal/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-skill`([`packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-subagent`([`packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-tool`([`packages/client/ui-tool/src/index.ts`](../packages/client/ui-tool/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-trajectory`([`packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-user-questions`([`packages/client/ui-user-questions/src/index.ts`](../packages/client/ui-user-questions/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-workflow-run`([`packages/client/ui-workflow-run/src/index.ts`](../packages/client/ui-workflow-run/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-workspace`([`packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts)) -- `@deepseek-ai/dsh-command-compact` — 需要 `commands` · `compact`([`packages/compaction/command-compact/src/index.ts`](../packages/compaction/command-compact/src/index.ts)) -- `@deepseek-ai/dsh-command-feedback` — 需要 `commands`([`packages/feedback/command-feedback/src/index.ts`](../packages/feedback/command-feedback/src/index.ts)) -- `@deepseek-ai/dsh-command-goal` — 需要 `commands` · `goals`([`packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts)) -- `@deepseek-ai/dsh-commands`([`packages/interaction/commands/src/index.ts`](../packages/interaction/commands/src/index.ts)) -- `@deepseek-ai/dsh-compaction-image-offload`,需要 `agents` 和 `sessions`([`packages/compaction/compaction-image-offload/src/index.ts`](../packages/compaction/compaction-image-offload/src/index.ts)) -- `@deepseek-ai/dsh-computer-use`([`packages/computer-use/computer-use/src/index.ts`](../packages/computer-use/computer-use/src/index.ts)) -- `@deepseek-ai/dsh-config-editor` — requires `loader` · `profileContext`([`packages/boot/config-editor/src/index.ts`](../packages/boot/config-editor/src/index.ts)) -- `@deepseek-ai/dsh-cordis-client-runner`([`packages/extensions/cordis-client-runner/src/index.ts`](../packages/extensions/cordis-client-runner/src/index.ts)) -- `@deepseek-ai/dsh-deepseek-llm-api-extensions`([`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts)) -- `@deepseek-ai/dsh-experimental-auto-review` — 需要 `llm` · `permissionPresets` · `sessions` · `tools`([`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts)) -- `@deepseek-ai/dsh-experimental-client-ui-agent-team`([`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts)) -- `@deepseek-ai/dsh-experimental-client-ui-voice-input`([`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts)) -- `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` — requires `computerUse` · `tools` · `systemPrompt`([`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts)) -- `@deepseek-ai/dsh-fs-observation-policy`([`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts)) -- `@deepseek-ai/dsh-fs-ssh` — 需要 `ssh` · `sandboxPolicy`([`packages/ssh/fs-ssh/src/index.ts`](../packages/ssh/fs-ssh/src/index.ts)) -- `@deepseek-ai/dsh-goal-round-driver` — 需要 `agents` · `goals` · `sessions`([`packages/goal/goal-round-driver/src/index.ts`](../packages/goal/goal-round-driver/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker-auto` — 需要 `webServer` · `loader`([`packages/host/directory-picker-auto/src/index.ts`](../packages/host/directory-picker-auto/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker-native`([`packages/host/directory-picker-native/src/index.ts`](../packages/host/directory-picker-native/src/index.ts)) -- `@deepseek-ai/dsh-host-plugin-inventory` — 需要 `loader`([`packages/host/plugin-inventory/src/index.ts`](../packages/host/plugin-inventory/src/index.ts)) -- `@deepseek-ai/dsh-llm`([`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts)) -- `@deepseek-ai/dsh-lsp`([`packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts)) -- `@deepseek-ai/dsh-mcp-resources` — 需要 `tools`([`packages/mcp/mcp-resources/src/index.ts`](../packages/mcp/mcp-resources/src/index.ts)) -- `@deepseek-ai/dsh-sandbox-ssh` — 需要 `ssh`([`packages/ssh/sandbox-ssh/src/index.ts`](../packages/ssh/sandbox-ssh/src/index.ts)) -- `@deepseek-ai/dsh-schedule` — 需要 `agents` · `sessions` · `tools` · `sessionPersistence`([`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts)) -- `@deepseek-ai/dsh-session`([`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts)) -- `@deepseek-ai/dsh-session-checkpoint-policy` — 需要 `llm` · `sessionPersistence` · `sessions` · `tools`([`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts)) -- `@deepseek-ai/dsh-session-projection`([`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts)) -- `@deepseek-ai/dsh-session-stats` — 需要 `sessionProjections`([`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts)) -- `@deepseek-ai/dsh-session-turn-outline` — 需要 `sessionProjections`([`packages/session/session-turn-outline/src/index.ts`](../packages/session/session-turn-outline/src/index.ts)) -- `@deepseek-ai/dsh-settings` — requires `configEditor` · `profileContext`([`packages/settings/settings/src/index.ts`](../packages/settings/settings/src/index.ts)) -- `@deepseek-ai/dsh-skill-badge` — 需要 `skills`([`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts)) -- `@deepseek-ai/dsh-storage`([`packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts)) -- `@deepseek-ai/dsh-subprocess-local`([`packages/subprocess/subprocess-local/src/index.ts`](../packages/subprocess/subprocess-local/src/index.ts)) -- `@deepseek-ai/dsh-subprocess-ssh` — 需要 `ssh`([`packages/ssh/subprocess-ssh/src/index.ts`](../packages/ssh/subprocess-ssh/src/index.ts)) -- `@deepseek-ai/dsh-terminal`([`packages/terminal/terminal/src/index.ts`](../packages/terminal/terminal/src/index.ts)) -- `@deepseek-ai/dsh-tool-ask-user` — 需要 `tools` · `userInteraction`([`packages/interaction/tool-ask-user/src/index.ts`](../packages/interaction/tool-ask-user/src/index.ts)) -- `@deepseek-ai/dsh-tool-call-timeout-policy` — 需要 `tools`([`packages/guard/timeout-policy/src/index.ts`](../packages/guard/timeout-policy/src/index.ts)) -- `@deepseek-ai/dsh-tool-cordis` — 需要 `tools` · `systemPrompt` · `cordisInspect`([`packages/extensions/tool-cordis/src/index.ts`](../packages/extensions/tool-cordis/src/index.ts)) -- `@deepseek-ai/dsh-tool-subagent-control` — 需要 `tools` · `subagents`([`packages/subagent/tool-subagent-control/src/index.ts`](../packages/subagent/tool-subagent-control/src/index.ts)) -- `@deepseek-ai/dsh-user-questions`([`packages/interaction/user-questions/src/index.ts`](../packages/interaction/user-questions/src/index.ts)) -- `@deepseek-ai/dsh-webhook` — 需要 `agents` · `agentDefaultModel` · `agentPresets` · `permissionPresets` · `sessionTitle` · `workspaceRegistry`([`packages/webhook/webhook/src/index.ts`](../packages/webhook/webhook/src/index.ts)) -- `@deepseek-ai/dsh-workspace` — 需要 `storageDomain` · `sessionPersistence`([`packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts)) + +| `package` | `inject` | `source` | +| --- | --- | --- | +| `@deepseek-ai/dsh-acp-app` | `cmdlineArgs` | [`packages/bundle/acp-app/src/index.ts`](../packages/bundle/acp-app/src/index.ts) | +| `@deepseek-ai/dsh-agent` | — | [`packages/core/agent/src/index.ts`](../packages/core/agent/src/index.ts) | +| `@deepseek-ai/dsh-api-account-controller` | `deepseekAccount` · `agents` | [`packages/api/account-controller/src/index.ts`](../packages/api/account-controller/src/index.ts) | +| `@deepseek-ai/dsh-api-remotes` | `typertGateway` | [`packages/api/remotes/src/index.ts`](../packages/api/remotes/src/index.ts) | +| `@deepseek-ai/dsh-authorization` | `credentials` | [`packages/credentials/authorization/src/index.ts`](../packages/credentials/authorization/src/index.ts) | +| `@deepseek-ai/dsh-browser-use` | — | [`packages/browser-use/browser-use/src/index.ts`](../packages/browser-use/browser-use/src/index.ts) | +| `@deepseek-ai/dsh-client-file-upload` | `agents` · `attachments` · `commands` · `connection` | [`packages/client/file-upload/src/index.ts`](../packages/client/file-upload/src/index.ts) | +| `@deepseek-ai/dsh-client-locale` | — | [`packages/client/locale/src/index.ts`](../packages/client/locale/src/index.ts) | +| `@deepseek-ai/dsh-client-modules` | `loader` | [`packages/client/modules/src/index.ts`](../packages/client/modules/src/index.ts) | +| `@deepseek-ai/dsh-client-resources` | — | [`packages/client/resources/src/index.ts`](../packages/client/resources/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-agent-preset` | — | [`packages/client/ui-agent-preset/src/index.ts`](../packages/client/ui-agent-preset/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-approval` | — | [`packages/client/ui-approval/src/index.ts`](../packages/client/ui-approval/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-attachment` | — | [`packages/client/ui-attachment/src/index.ts`](../packages/client/ui-attachment/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-brand-official` | — | [`packages/client/ui-brand-official/src/index.ts`](../packages/client/ui-brand-official/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-chat` | — | [`packages/client/ui-chat/src/index.ts`](../packages/client/ui-chat/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-commands` | — | [`packages/client/ui-commands/src/index.ts`](../packages/client/ui-commands/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-conversation` | — | [`packages/client/ui-conversation/src/index.ts`](../packages/client/ui-conversation/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-cordis` | — | [`packages/extensions/ui-cordis/src/index.ts`](../packages/extensions/ui-cordis/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-deliverables` | `systemPrompt` · `connection` · `sessionQuery` · `sessionController` · `workspaceFiles` · `fs` · `sandboxPolicy` · `workspaceChanges` | [`packages/client/ui-deliverables/src/index.ts`](../packages/client/ui-deliverables/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-directory-picker-browse` | — | [`packages/client/ui-directory-picker-browse/src/index.ts`](../packages/client/ui-directory-picker-browse/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-directory-picker-native` | — | [`packages/client/ui-directory-picker-native/src/index.ts`](../packages/client/ui-directory-picker-native/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-goal` | — | [`packages/client/ui-goal/src/index.ts`](../packages/client/ui-goal/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-input-trigger` | — | [`packages/client/ui-input-trigger/src/index.ts`](../packages/client/ui-input-trigger/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-jobs` | — | [`packages/client/ui-jobs/src/index.ts`](../packages/client/ui-jobs/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-layout` | — | [`packages/client/ui-layout/src/index.ts`](../packages/client/ui-layout/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-message-feedback` | — | [`packages/client/ui-message-feedback/src/index.ts`](../packages/client/ui-message-feedback/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-model-selection` | — | [`packages/client/ui-model-selection/src/index.ts`](../packages/client/ui-model-selection/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-open-in-app` | — | [`packages/client/ui-open-in-app/src/index.ts`](../packages/client/ui-open-in-app/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-permission-presets` | — | [`packages/client/ui-permission-presets/src/index.ts`](../packages/client/ui-permission-presets/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-plan` | — | [`packages/client/ui-plan/src/index.ts`](../packages/client/ui-plan/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-reference` | — | [`packages/client/ui-reference/src/index.ts`](../packages/client/ui-reference/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-renderer` | — | [`packages/client/ui-renderer/src/index.ts`](../packages/client/ui-renderer/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-schedule` | — | [`packages/client/ui-schedule/src/index.ts`](../packages/client/ui-schedule/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-session` | — | [`packages/client/ui-session/src/index.ts`](../packages/client/ui-session/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings` | — | [`packages/client/ui-settings/src/index.ts`](../packages/client/ui-settings/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-agent-loop` | — | [`packages/client/ui-settings-agent-loop/src/index.ts`](../packages/client/ui-settings-agent-loop/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-general` | — | [`packages/client/ui-settings-general/src/index.ts`](../packages/client/ui-settings-general/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-plugin-inventory` | — | [`packages/client/ui-settings-plugin-inventory/src/index.ts`](../packages/client/ui-settings-plugin-inventory/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-plugins` | — | [`packages/client/ui-settings-plugins/src/index.ts`](../packages/client/ui-settings-plugins/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-shell` | — | [`packages/client/ui-settings-shell/src/index.ts`](../packages/client/ui-settings-shell/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-subagent` | — | [`packages/client/ui-settings-subagent/src/index.ts`](../packages/client/ui-settings-subagent/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-settings-web-search` | — | [`packages/client/ui-settings-web-search/src/index.ts`](../packages/client/ui-settings-web-search/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar` | — | [`packages/client/ui-sidebar/src/index.ts`](../packages/client/ui-sidebar/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-browser` | — | [`packages/client/ui-sidebar-browser/src/index.ts`](../packages/client/ui-sidebar-browser/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-files` | — | [`packages/client/ui-sidebar-files/src/index.ts`](../packages/client/ui-sidebar-files/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-right` | — | [`packages/client/ui-sidebar-right/src/index.ts`](../packages/client/ui-sidebar-right/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-sidebar-terminal` | — | [`packages/client/ui-sidebar-terminal/src/index.ts`](../packages/client/ui-sidebar-terminal/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-skill` | — | [`packages/client/ui-skill/src/index.ts`](../packages/client/ui-skill/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-subagent` | — | [`packages/client/ui-subagent/src/index.ts`](../packages/client/ui-subagent/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-tool` | — | [`packages/client/ui-tool/src/index.ts`](../packages/client/ui-tool/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-trajectory` | — | [`packages/client/ui-trajectory/src/index.ts`](../packages/client/ui-trajectory/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-user-questions` | — | [`packages/client/ui-user-questions/src/index.ts`](../packages/client/ui-user-questions/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-workflow-run` | — | [`packages/client/ui-workflow-run/src/index.ts`](../packages/client/ui-workflow-run/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-workspace` | — | [`packages/client/ui-workspace/src/index.ts`](../packages/client/ui-workspace/src/index.ts) | +| `@deepseek-ai/dsh-command-compact` | `commands` · `compaction` | [`packages/compaction/command-compact/src/index.ts`](../packages/compaction/command-compact/src/index.ts) | +| `@deepseek-ai/dsh-command-feedback` | `commands` | [`packages/feedback/command-feedback/src/index.ts`](../packages/feedback/command-feedback/src/index.ts) | +| `@deepseek-ai/dsh-command-goal` | `commands` · `goals` | [`packages/goal/command-goal/src/index.ts`](../packages/goal/command-goal/src/index.ts) | +| `@deepseek-ai/dsh-commands` | — | [`packages/interaction/commands/src/index.ts`](../packages/interaction/commands/src/index.ts) | +| `@deepseek-ai/dsh-compaction-image-offload` | `agents` · `sessions` | [`packages/compaction/compaction-image-offload/src/index.ts`](../packages/compaction/compaction-image-offload/src/index.ts) | +| `@deepseek-ai/dsh-computer-use` | — | [`packages/computer-use/computer-use/src/index.ts`](../packages/computer-use/computer-use/src/index.ts) | +| `@deepseek-ai/dsh-config-editor` | `loader` · `profileContext` | [`packages/boot/config-editor/src/index.ts`](../packages/boot/config-editor/src/index.ts) | +| `@deepseek-ai/dsh-cordis-client-runner` | — | [`packages/extensions/cordis-client-runner/src/index.ts`](../packages/extensions/cordis-client-runner/src/index.ts) | +| `@deepseek-ai/dsh-deepseek-llm-api-extensions` | — | [`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts) | +| `@deepseek-ai/dsh-experimental-auto-review` | `llm` · `permissionPresets` · `sessions` · `tools` | [`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts) | +| `@deepseek-ai/dsh-experimental-client-ui-agent-team` | — | [`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts) | +| `@deepseek-ai/dsh-experimental-client-ui-voice-input` | — | [`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts) | +| `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` | `computerUse` · `tools` · `systemPrompt` | [`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts) | +| `@deepseek-ai/dsh-fs-observation-policy` | — | [`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts) | +| `@deepseek-ai/dsh-fs-ssh` | `ssh` · `sandboxPolicy` | [`packages/ssh/fs-ssh/src/index.ts`](../packages/ssh/fs-ssh/src/index.ts) | +| `@deepseek-ai/dsh-goal-round-driver` | `agents` · `goals` · `sessions` | [`packages/goal/goal-round-driver/src/index.ts`](../packages/goal/goal-round-driver/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker-auto` | `webServer` · `loader` | [`packages/host/directory-picker-auto/src/index.ts`](../packages/host/directory-picker-auto/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker-native` | — | [`packages/host/directory-picker-native/src/index.ts`](../packages/host/directory-picker-native/src/index.ts) | +| `@deepseek-ai/dsh-host-plugin-inventory` | `loader` | [`packages/host/plugin-inventory/src/index.ts`](../packages/host/plugin-inventory/src/index.ts) | +| `@deepseek-ai/dsh-llm` | — | [`packages/llm/llm/src/index.ts`](../packages/llm/llm/src/index.ts) | +| `@deepseek-ai/dsh-lsp` | — | [`packages/lsp/lsp/src/index.ts`](../packages/lsp/lsp/src/index.ts) | +| `@deepseek-ai/dsh-mcp-resources` | `tools` | [`packages/mcp/mcp-resources/src/index.ts`](../packages/mcp/mcp-resources/src/index.ts) | +| `@deepseek-ai/dsh-sandbox-ssh` | `ssh` | [`packages/ssh/sandbox-ssh/src/index.ts`](../packages/ssh/sandbox-ssh/src/index.ts) | +| `@deepseek-ai/dsh-schedule` | `agents` · `sessions` · `tools` · `sessionPersistence` | [`packages/schedule/schedule/src/index.ts`](../packages/schedule/schedule/src/index.ts) | +| `@deepseek-ai/dsh-session` | — | [`packages/core/session/src/index.ts`](../packages/core/session/src/index.ts) | +| `@deepseek-ai/dsh-session-checkpoint-policy` | `llm` · `sessionPersistence` · `sessions` · `tools` | [`packages/session/session-checkpoint-policy/src/index.ts`](../packages/session/session-checkpoint-policy/src/index.ts) | +| `@deepseek-ai/dsh-session-projection` | — | [`packages/session/session-projection/src/index.ts`](../packages/session/session-projection/src/index.ts) | +| `@deepseek-ai/dsh-session-stats` | `sessionProjections` | [`packages/session/session-stats/src/index.ts`](../packages/session/session-stats/src/index.ts) | +| `@deepseek-ai/dsh-session-turn-outline` | `sessionProjections` | [`packages/session/session-turn-outline/src/index.ts`](../packages/session/session-turn-outline/src/index.ts) | +| `@deepseek-ai/dsh-settings` | `configEditor` · `profileContext` | [`packages/settings/settings/src/index.ts`](../packages/settings/settings/src/index.ts) | +| `@deepseek-ai/dsh-skill-badge` | `skills` | [`packages/skill/skill-badge/src/index.ts`](../packages/skill/skill-badge/src/index.ts) | +| `@deepseek-ai/dsh-storage` | — | [`packages/storage/storage/src/index.ts`](../packages/storage/storage/src/index.ts) | +| `@deepseek-ai/dsh-subprocess-local` | — | [`packages/subprocess/subprocess-local/src/index.ts`](../packages/subprocess/subprocess-local/src/index.ts) | +| `@deepseek-ai/dsh-subprocess-ssh` | `ssh` | [`packages/ssh/subprocess-ssh/src/index.ts`](../packages/ssh/subprocess-ssh/src/index.ts) | +| `@deepseek-ai/dsh-terminal` | — | [`packages/terminal/terminal/src/index.ts`](../packages/terminal/terminal/src/index.ts) | +| `@deepseek-ai/dsh-tool-ask-user` | `tools` · `userQuestions` | [`packages/interaction/tool-ask-user/src/index.ts`](../packages/interaction/tool-ask-user/src/index.ts) | +| `@deepseek-ai/dsh-tool-call-timeout-policy` | `tools` | [`packages/guard/timeout-policy/src/index.ts`](../packages/guard/timeout-policy/src/index.ts) | +| `@deepseek-ai/dsh-tool-cordis` | `tools` · `cordisInspect` | [`packages/extensions/tool-cordis/src/index.ts`](../packages/extensions/tool-cordis/src/index.ts) | +| `@deepseek-ai/dsh-tool-subagent-control` | `tools` · `subagents` | [`packages/subagent/tool-subagent-control/src/index.ts`](../packages/subagent/tool-subagent-control/src/index.ts) | +| `@deepseek-ai/dsh-user-questions` | — | [`packages/interaction/user-questions/src/index.ts`](../packages/interaction/user-questions/src/index.ts) | +| `@deepseek-ai/dsh-webhook` | `agents` · `agentDefaultModel` · `agentPresets` · `permissionPresets` · `sessionTitle` · `workspaceRegistry` | [`packages/webhook/webhook/src/index.ts`](../packages/webhook/webhook/src/index.ts) | +| `@deepseek-ai/dsh-workspace` | `storageDomain` · `sessionPersistence` | [`packages/workspace/workspace/src/index.ts`](../packages/workspace/workspace/src/index.ts) | + ## Seam 包(不可直接加载) 抽象服务类——部署时应改为加载具体的实现包(参见[能力 seam](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.zh.md))。 -- `@deepseek-ai/dsh-attachment` — 抽象 `AttachmentStore`([`packages/attachment/attachment/src/index.ts`](../packages/attachment/attachment/src/index.ts)) -- `@deepseek-ai/dsh-compaction` — 抽象 `CompactionEngine`([`packages/compaction/compaction/src/index.ts`](../packages/compaction/compaction/src/index.ts)) -- `@deepseek-ai/dsh-credentials` — 抽象 `CredentialProvider`([`packages/credentials/credentials/src/index.ts`](../packages/credentials/credentials/src/index.ts)) -- `@deepseek-ai/dsh-deepseek-account` — 抽象类 `DeepSeekAccount` ([`packages/credentials/deepseek-account/src/index.ts`](../packages/credentials/deepseek-account/src/index.ts)) -- `@deepseek-ai/dsh-file-reference` — 抽象 `FileReferenceService`([`packages/context/file-reference/src/index.ts`](../packages/context/file-reference/src/index.ts)) -- `@deepseek-ai/dsh-fs` — 抽象 `FileSystem`([`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts)) -- `@deepseek-ai/dsh-host-directory-picker` — 抽象 `DirectoryPicker`([`packages/host/directory-picker/src/index.ts`](../packages/host/directory-picker/src/index.ts)) -- `@deepseek-ai/dsh-jobs` — 抽象 `JobRegistry`([`packages/jobs/jobs/src/index.ts`](../packages/jobs/jobs/src/index.ts)) -- `@deepseek-ai/dsh-ptc-runtime` — 抽象 `PtcRuntime`([`packages/ptc-runtime/ptc-runtime/src/index.ts`](../packages/ptc-runtime/ptc-runtime/src/index.ts)) -- `@deepseek-ai/dsh-sandbox` — 抽象 `SandboxProvider`([`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts)) -- `@deepseek-ai/dsh-session-persistence` — 抽象 `SessionPersistence`([`packages/session/session-persistence/src/index.ts`](../packages/session/session-persistence/src/index.ts)) -- `@deepseek-ai/dsh-session-query` — 抽象 `SessionQueryEngine`([`packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts)) -- `@deepseek-ai/dsh-shell` — 抽象 `ShellExecutor`([`packages/shell/shell/src/index.ts`](../packages/shell/shell/src/index.ts)) -- `@deepseek-ai/dsh-spill` — 抽象 `SpillStore`([`packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts)) -- `@deepseek-ai/dsh-subprocess` — 抽象 `SubprocessRuntime`([`packages/subprocess/subprocess/src/index.ts`](../packages/subprocess/subprocess/src/index.ts)) -- `@deepseek-ai/dsh-workflow` — 抽象 `WorkflowEngine`([`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts)) + +| `package` | `class` | `inject` | `source` | +| --- | --- | --- | --- | +| `@deepseek-ai/dsh-attachment` | `AttachmentStore` | — | [`packages/attachment/attachment/src/index.ts`](../packages/attachment/attachment/src/index.ts) | +| `@deepseek-ai/dsh-compaction` | `CompactionEngine` | — | [`packages/compaction/compaction/src/index.ts`](../packages/compaction/compaction/src/index.ts) | +| `@deepseek-ai/dsh-credentials` | `CredentialProvider` | — | [`packages/credentials/credentials/src/index.ts`](../packages/credentials/credentials/src/index.ts) | +| `@deepseek-ai/dsh-deepseek-account` | `DeepSeekAccount` | — | [`packages/credentials/deepseek-account/src/index.ts`](../packages/credentials/deepseek-account/src/index.ts) | +| `@deepseek-ai/dsh-file-reference` | `FileReferenceService` | — | [`packages/context/file-reference/src/index.ts`](../packages/context/file-reference/src/index.ts) | +| `@deepseek-ai/dsh-fs` | `FileSystem` | — | [`packages/fs/fs/src/index.ts`](../packages/fs/fs/src/index.ts) | +| `@deepseek-ai/dsh-host-directory-picker` | `DirectoryPicker` | — | [`packages/host/directory-picker/src/index.ts`](../packages/host/directory-picker/src/index.ts) | +| `@deepseek-ai/dsh-jobs` | `JobRegistry` | — | [`packages/jobs/jobs/src/index.ts`](../packages/jobs/jobs/src/index.ts) | +| `@deepseek-ai/dsh-ptc-runtime` | `PtcRuntime` | — | [`packages/ptc-runtime/ptc-runtime/src/index.ts`](../packages/ptc-runtime/ptc-runtime/src/index.ts) | +| `@deepseek-ai/dsh-sandbox` | `SandboxProvider` | — | [`packages/sandbox/sandbox/src/index.ts`](../packages/sandbox/sandbox/src/index.ts) | +| `@deepseek-ai/dsh-session-persistence` | `SessionPersistence` | — | [`packages/session/session-persistence/src/index.ts`](../packages/session/session-persistence/src/index.ts) | +| `@deepseek-ai/dsh-session-query` | `SessionQueryEngine` | — | [`packages/session-query/session-query/src/index.ts`](../packages/session-query/session-query/src/index.ts) | +| `@deepseek-ai/dsh-shell` | `ShellExecutor` | — | [`packages/shell/shell/src/index.ts`](../packages/shell/shell/src/index.ts) | +| `@deepseek-ai/dsh-spill` | `SpillStore` | — | [`packages/spill/spill/src/index.ts`](../packages/spill/spill/src/index.ts) | +| `@deepseek-ai/dsh-subprocess` | `SubprocessRuntime` | — | [`packages/subprocess/subprocess/src/index.ts`](../packages/subprocess/subprocess/src/index.ts) | +| `@deepseek-ai/dsh-workflow` | `WorkflowEngine` | — | [`packages/workflow/workflow/src/index.ts`](../packages/workflow/workflow/src/index.ts) | + ## 库包(无插件入口) 由其他包作为库导入;`cordis.yml` 无法加载它们。 -- `@deepseek-ai/dsh-agent-loop-testkit`([`packages/test-support/agent-loop-testkit/src/index.ts`](../packages/test-support/agent-loop-testkit/src/index.ts)) -- `@deepseek-ai/dsh-anonymous-user-id`([`packages/identity/anonymous-user-id/src/index.ts`](../packages/identity/anonymous-user-id/src/index.ts)) -- `@deepseek-ai/dsh-app-boot`([`packages/boot/app-boot/src/index.ts`](../packages/boot/app-boot/src/index.ts)) -- `@deepseek-ai/dsh-atomic-write`([`packages/util/atomic-write/src/index.ts`](../packages/util/atomic-write/src/index.ts)) -- `@deepseek-ai/dsh-base`([`packages/bundle/base/src/index.ts`](../packages/bundle/base/src/index.ts)) -- `@deepseek-ai/dsh-brand`([`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts)) -- `@deepseek-ai/dsh-chunked-list`([`packages/util/chunked-list/src/index.ts`](../packages/util/chunked-list/src/index.ts)) -- `@deepseek-ai/dsh-client-store`([`packages/client/store/src/index.ts`](../packages/client/store/src/index.ts)) -- `@deepseek-ai/dsh-client-test-runtime`([`packages/test-support/client-runtime/src/index.ts`](../packages/test-support/client-runtime/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-dockkit`([`packages/client/ui-dockkit/src/index.ts`](../packages/client/ui-dockkit/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-primitives`([`packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts)) -- `@deepseek-ai/dsh-client-ui-slots`([`packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts)) -- `@deepseek-ai/dsh-client-web`([`packages/client/web/src/index.ts`](../packages/client/web/src/index.ts)) -- `@deepseek-ai/dsh-cmdline`([`packages/boot/cmdline/src/index.ts`](../packages/boot/cmdline/src/index.ts)) -- `@deepseek-ai/dsh-deque`([`packages/util/deque/src/index.ts`](../packages/util/deque/src/index.ts)) -- `@deepseek-ai/dsh-experimental-agent-team-profile`([`packages/experimental/agent-team-profile/src/index.ts`](../packages/experimental/agent-team-profile/src/index.ts)) -- `@deepseek-ai/dsh-experimental-browser-use-runtime`([`packages/experimental/browser-use-runtime/src/index.ts`](../packages/experimental/browser-use-runtime/src/index.ts)) -- `@deepseek-ai/dsh-experimental-voice-input-bundle`([`packages/experimental/voice-input-bundle/src/index.ts`](../packages/experimental/voice-input-bundle/src/index.ts)) -- `@deepseek-ai/dsh-experimental-webworker-packer`([`packages/experimental/webworker-packer/src/index.ts`](../packages/experimental/webworker-packer/src/index.ts)) -- `@deepseek-ai/dsh-experimental-webworker-runtime`([`packages/experimental/webworker-runtime/src/index.ts`](../packages/experimental/webworker-runtime/src/index.ts)) -- `@deepseek-ai/dsh-home-paths`([`packages/util/home-paths/src/index.ts`](../packages/util/home-paths/src/index.ts)) -- `@deepseek-ai/dsh-hook-protocol`([`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts)) -- `@deepseek-ai/dsh-http-proxy`([`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts)) -- `@deepseek-ai/dsh-launch-environment`([`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts)) -- `@deepseek-ai/dsh-lazy-require`([`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts)) -- `@deepseek-ai/dsh-llm-deepseek`([`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts)) -- `@deepseek-ai/dsh-llm-mock-server`([`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts)) -- `@deepseek-ai/dsh-loader-smoke`([`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts)) -- `@deepseek-ai/dsh-native-command`([`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts)) -- `@deepseek-ai/dsh-output-retention`([`packages/util/output-retention/src/index.ts`](../packages/util/output-retention/src/index.ts)) -- `@deepseek-ai/dsh-package-manifest`([`packages/util/package-manifest/src/index.ts`](../packages/util/package-manifest/src/index.ts)) -- `@deepseek-ai/dsh-remote-mock`([`packages/test-support/remote-mock/src/index.ts`](../packages/test-support/remote-mock/src/index.ts)) -- `@deepseek-ai/dsh-sandbox-windows-acl`([`packages/sandbox/sandbox-windows-acl/src/index.ts`](../packages/sandbox/sandbox-windows-acl/src/index.ts)) -- `@deepseek-ai/dsh-scope`([`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts)) -- `@deepseek-ai/dsh-sdk-client`([`packages/sdk/client/src/index.ts`](../packages/sdk/client/src/index.ts)) -- `@deepseek-ai/dsh-sdk-minimal`([`packages/bundle/sdk-minimal/src/index.ts`](../packages/bundle/sdk-minimal/src/index.ts)) -- `@deepseek-ai/dsh-sdk-protocol`([`packages/sdk/protocol/src/index.ts`](../packages/sdk/protocol/src/index.ts)) -- `@deepseek-ai/dsh-session-format`([`packages/session/session-format/src/index.ts`](../packages/session/session-format/src/index.ts)) -- `@deepseek-ai/dsh-session-format-catalog`([`packages/session/session-format-catalog/src/index.ts`](../packages/session/session-format-catalog/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v0-to-v1`([`packages/session/session-format-v0-to-v1/src/index.ts`](../packages/session/session-format-v0-to-v1/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v1-to-v2`([`packages/session/session-format-v1-to-v2/src/index.ts`](../packages/session/session-format-v1-to-v2/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v2-to-v3`([`packages/session/session-format-v2-to-v3/src/index.ts`](../packages/session/session-format-v2-to-v3/src/index.ts)) -- `@deepseek-ai/dsh-session-format-v3-to-v4`([`packages/session/session-format-v3-to-v4/src/index.ts`](../packages/session/session-format-v3-to-v4/src/index.ts)) -- `@deepseek-ai/dsh-session-snapshot`([`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts)) -- `@deepseek-ai/dsh-session-telemetry`([`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts)) -- `@deepseek-ai/dsh-session-title-llm`([`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts)) -- `@deepseek-ai/dsh-subagent-in-process-driver`([`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts)) -- `@deepseek-ai/dsh-timeout`([`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts)) -- `@deepseek-ai/dsh-typert-generator`([`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts)) -- `@deepseek-ai/dsh-typert-protocol`([`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts)) -- `@deepseek-ai/dsh-typert-registry`([`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts)) -- `@deepseek-ai/dsh-util-crypto`([`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts)) -- `@deepseek-ai/dsh-util-time`([`packages/util/time/src/index.ts`](../packages/util/time/src/index.ts)) -- `@deepseek-ai/dsh-util-values`([`packages/util/values/src/index.ts`](../packages/util/values/src/index.ts)) -- `@deepseek-ai/dsh-util-workspace-path`([`packages/util/workspace-path/src/index.ts`](../packages/util/workspace-path/src/index.ts)) -- `@deepseek-ai/dsh-win32-process`([`packages/subprocess/win32-process/src/index.ts`](../packages/subprocess/win32-process/src/index.ts)) + +| `package` | `inject` | `source` | +| --- | --- | --- | +| `@deepseek-ai/dsh-agent-loop-testkit` | — | [`packages/test-support/agent-loop-testkit/src/index.ts`](../packages/test-support/agent-loop-testkit/src/index.ts) | +| `@deepseek-ai/dsh-anonymous-user-id` | — | [`packages/identity/anonymous-user-id/src/index.ts`](../packages/identity/anonymous-user-id/src/index.ts) | +| `@deepseek-ai/dsh-app-boot` | — | [`packages/boot/app-boot/src/index.ts`](../packages/boot/app-boot/src/index.ts) | +| `@deepseek-ai/dsh-atomic-write` | — | [`packages/util/atomic-write/src/index.ts`](../packages/util/atomic-write/src/index.ts) | +| `@deepseek-ai/dsh-base` | — | [`packages/bundle/base/src/index.ts`](../packages/bundle/base/src/index.ts) | +| `@deepseek-ai/dsh-brand` | — | [`packages/util/brand/src/index.ts`](../packages/util/brand/src/index.ts) | +| `@deepseek-ai/dsh-chunked-list` | — | [`packages/util/chunked-list/src/index.ts`](../packages/util/chunked-list/src/index.ts) | +| `@deepseek-ai/dsh-client-store` | — | [`packages/client/store/src/index.ts`](../packages/client/store/src/index.ts) | +| `@deepseek-ai/dsh-client-test-runtime` | — | [`packages/test-support/client-runtime/src/index.ts`](../packages/test-support/client-runtime/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-dockkit` | — | [`packages/client/ui-dockkit/src/index.ts`](../packages/client/ui-dockkit/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-primitives` | — | [`packages/client/ui-primitives/src/index.ts`](../packages/client/ui-primitives/src/index.ts) | +| `@deepseek-ai/dsh-client-ui-slots` | — | [`packages/client/ui-slots/src/index.ts`](../packages/client/ui-slots/src/index.ts) | +| `@deepseek-ai/dsh-client-web` | — | [`packages/client/web/src/index.ts`](../packages/client/web/src/index.ts) | +| `@deepseek-ai/dsh-cmdline` | — | [`packages/boot/cmdline/src/index.ts`](../packages/boot/cmdline/src/index.ts) | +| `@deepseek-ai/dsh-deque` | — | [`packages/util/deque/src/index.ts`](../packages/util/deque/src/index.ts) | +| `@deepseek-ai/dsh-experimental-agent-team-profile` | — | [`packages/experimental/agent-team-profile/src/index.ts`](../packages/experimental/agent-team-profile/src/index.ts) | +| `@deepseek-ai/dsh-experimental-browser-use-runtime` | — | [`packages/experimental/browser-use-runtime/src/index.ts`](../packages/experimental/browser-use-runtime/src/index.ts) | +| `@deepseek-ai/dsh-experimental-voice-input-bundle` | — | [`packages/experimental/voice-input-bundle/src/index.ts`](../packages/experimental/voice-input-bundle/src/index.ts) | +| `@deepseek-ai/dsh-experimental-webworker-packer` | — | [`packages/experimental/webworker-packer/src/index.ts`](../packages/experimental/webworker-packer/src/index.ts) | +| `@deepseek-ai/dsh-experimental-webworker-runtime` | — | [`packages/experimental/webworker-runtime/src/index.ts`](../packages/experimental/webworker-runtime/src/index.ts) | +| `@deepseek-ai/dsh-home-paths` | — | [`packages/util/home-paths/src/index.ts`](../packages/util/home-paths/src/index.ts) | +| `@deepseek-ai/dsh-hook-protocol` | — | [`packages/hooks/hook-protocol/src/index.ts`](../packages/hooks/hook-protocol/src/index.ts) | +| `@deepseek-ai/dsh-http-proxy` | — | [`packages/util/http-proxy/src/index.ts`](../packages/util/http-proxy/src/index.ts) | +| `@deepseek-ai/dsh-launch-environment` | — | [`packages/util/launch-environment/src/index.ts`](../packages/util/launch-environment/src/index.ts) | +| `@deepseek-ai/dsh-lazy-require` | — | [`packages/util/lazy-require/src/index.ts`](../packages/util/lazy-require/src/index.ts) | +| `@deepseek-ai/dsh-llm-deepseek` | — | [`packages/llm/llm-deepseek/src/index.ts`](../packages/llm/llm-deepseek/src/index.ts) | +| `@deepseek-ai/dsh-llm-mock-server` | — | [`packages/test-support/llm-mock-server/src/index.ts`](../packages/test-support/llm-mock-server/src/index.ts) | +| `@deepseek-ai/dsh-loader-smoke` | — | [`packages/test-support/loader-smoke/src/index.ts`](../packages/test-support/loader-smoke/src/index.ts) | +| `@deepseek-ai/dsh-native-command` | — | [`packages/util/native-command/src/index.ts`](../packages/util/native-command/src/index.ts) | +| `@deepseek-ai/dsh-output-retention` | — | [`packages/util/output-retention/src/index.ts`](../packages/util/output-retention/src/index.ts) | +| `@deepseek-ai/dsh-package-manifest` | — | [`packages/util/package-manifest/src/index.ts`](../packages/util/package-manifest/src/index.ts) | +| `@deepseek-ai/dsh-remote-mock` | — | [`packages/test-support/remote-mock/src/index.ts`](../packages/test-support/remote-mock/src/index.ts) | +| `@deepseek-ai/dsh-sandbox-windows-acl` | — | [`packages/sandbox/sandbox-windows-acl/src/index.ts`](../packages/sandbox/sandbox-windows-acl/src/index.ts) | +| `@deepseek-ai/dsh-scope` | — | [`packages/core/scope/src/index.ts`](../packages/core/scope/src/index.ts) | +| `@deepseek-ai/dsh-sdk-client` | — | [`packages/sdk/client/src/index.ts`](../packages/sdk/client/src/index.ts) | +| `@deepseek-ai/dsh-sdk-minimal` | — | [`packages/bundle/sdk-minimal/src/index.ts`](../packages/bundle/sdk-minimal/src/index.ts) | +| `@deepseek-ai/dsh-sdk-protocol` | — | [`packages/sdk/protocol/src/index.ts`](../packages/sdk/protocol/src/index.ts) | +| `@deepseek-ai/dsh-session-format` | — | [`packages/session/session-format/src/index.ts`](../packages/session/session-format/src/index.ts) | +| `@deepseek-ai/dsh-session-format-catalog` | — | [`packages/session/session-format-catalog/src/index.ts`](../packages/session/session-format-catalog/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v0-to-v1` | — | [`packages/session/session-format-v0-to-v1/src/index.ts`](../packages/session/session-format-v0-to-v1/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v1-to-v2` | — | [`packages/session/session-format-v1-to-v2/src/index.ts`](../packages/session/session-format-v1-to-v2/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v2-to-v3` | — | [`packages/session/session-format-v2-to-v3/src/index.ts`](../packages/session/session-format-v2-to-v3/src/index.ts) | +| `@deepseek-ai/dsh-session-format-v3-to-v4` | — | [`packages/session/session-format-v3-to-v4/src/index.ts`](../packages/session/session-format-v3-to-v4/src/index.ts) | +| `@deepseek-ai/dsh-session-snapshot` | — | [`packages/test-support/session-snapshot/src/index.ts`](../packages/test-support/session-snapshot/src/index.ts) | +| `@deepseek-ai/dsh-session-telemetry` | — | [`packages/session/session-telemetry/src/index.ts`](../packages/session/session-telemetry/src/index.ts) | +| `@deepseek-ai/dsh-session-title-llm` | — | [`packages/session/session-title-llm/src/index.ts`](../packages/session/session-title-llm/src/index.ts) | +| `@deepseek-ai/dsh-subagent-in-process-driver` | — | [`packages/subagent/subagent-in-process-driver/src/index.ts`](../packages/subagent/subagent-in-process-driver/src/index.ts) | +| `@deepseek-ai/dsh-timeout` | — | [`packages/util/timeout/src/index.ts`](../packages/util/timeout/src/index.ts) | +| `@deepseek-ai/dsh-typert-generator` | — | [`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts) | +| `@deepseek-ai/dsh-typert-protocol` | — | [`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts) | +| `@deepseek-ai/dsh-typert-registry` | — | [`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts) | +| `@deepseek-ai/dsh-util-crypto` | — | [`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts) | +| `@deepseek-ai/dsh-util-time` | — | [`packages/util/time/src/index.ts`](../packages/util/time/src/index.ts) | +| `@deepseek-ai/dsh-util-values` | — | [`packages/util/values/src/index.ts`](../packages/util/values/src/index.ts) | +| `@deepseek-ai/dsh-util-workspace-path` | — | [`packages/util/workspace-path/src/index.ts`](../packages/util/workspace-path/src/index.ts) | +| `@deepseek-ai/dsh-win32-process` | — | [`packages/subprocess/win32-process/src/index.ts`](../packages/subprocess/win32-process/src/index.ts) | + diff --git a/docs/cookbook/adding-a-package.i18n.yaml b/docs/cookbook/adding-a-package.i18n.yaml index 8c94de4306..a5f3e9fba3 100644 --- a/docs/cookbook/adding-a-package.i18n.yaml +++ b/docs/cookbook/adding-a-package.i18n.yaml @@ -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 adding-a-package.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 docs/cookbook/adding-a-package.md -adding-a-package.md: 60b5d6e047da5f9cdfab3ab504104a0f29b208f7 -adding-a-package.zh.md: 44a613bcf002009c4c58a34c0f68cab85ef097f3 +/cookbook-adding-a-workspace-package: + en: b94bcdbebcd6355e + zh: 9fd61c2b986da759 +/cookbook-adding-a-workspace-package/1-create-the-package: + en: 3499082415478cc5 + zh: 65d3120abd646b64 +/cookbook-adding-a-workspace-package/2-register-it-in-the-root-configs: + en: 12b985dee93a47a7 + zh: 1027db3d251cd860 +/cookbook-adding-a-workspace-package/3-decide-the-package-topology: + en: 455fd18c17d2e813 + zh: 610f17d2ca673492 +/cookbook-adding-a-workspace-package/3-decide-the-package-topology/name-the-role-that-exists: + en: 995813ee34abfbd6 + zh: 328d78e65599e0cc +/cookbook-adding-a-workspace-package/4-write-the-package-readme: + en: 519b4adbef7b0b91 + zh: b0b857ec6ee50ad7 +/cookbook-adding-a-workspace-package/5-add-optional-plugin-display-metadata: + en: c883c460403c2b15 + zh: 07f3269cb0d404dd +/cookbook-adding-a-workspace-package/6-verify: + en: 80c7fb90b1175aae + zh: 2ba37962dbc57299 diff --git a/docs/cookbook/adding-a-remote-api.i18n.yaml b/docs/cookbook/adding-a-remote-api.i18n.yaml index 0aef34d3f2..f11c6fe08a 100644 --- a/docs/cookbook/adding-a-remote-api.i18n.yaml +++ b/docs/cookbook/adding-a-remote-api.i18n.yaml @@ -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 adding-a-remote-api.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 docs/cookbook/adding-a-remote-api.md -adding-a-remote-api.md: a36fe1aecd1e134686d9f1b583c56e9648d21f23 -adding-a-remote-api.zh.md: c1f56a865bc49512a50eb67d53e4190d98f5a176 +/cookbook-adding-a-remote-api: + en: 246576de000498de + zh: 421cf6609455390b +/cookbook-adding-a-remote-api/1-declare-the-api: + en: 59e2a48bf15a8789 + zh: 4c5e469e718a7da1 +/cookbook-adding-a-remote-api/2-declare-the-failures: + en: 1083ef8c3a7f88a4 + zh: c3dee91a1222d217 +/cookbook-adding-a-remote-api/3-register-it-on-the-package: + en: 8094987f6720ab2c + zh: 305c9fee378491cc +/cookbook-adding-a-remote-api/4-consume-it-on-the-client: + en: e731407eac4052b8 + zh: 7524dadfc4383db4 +/cookbook-adding-a-remote-api/5-test-it: + en: e9cc8025b9032332 + zh: d3b290ade3b62462 +/cookbook-adding-a-remote-api/verify: + en: e9a191d462935571 + zh: d906d01236dfa9ff diff --git a/docs/cookbook/adding-a-session-format-version.i18n.yaml b/docs/cookbook/adding-a-session-format-version.i18n.yaml index e07df83cb9..f0c70b2798 100644 --- a/docs/cookbook/adding-a-session-format-version.i18n.yaml +++ b/docs/cookbook/adding-a-session-format-version.i18n.yaml @@ -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 adding-a-session-format-version.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 docs/cookbook/adding-a-session-format-version.md -adding-a-session-format-version.md: b962ffb1c14b9ce95741071821e601ea483061dd -adding-a-session-format-version.zh.md: 398d77adddfcf28c794fea5c516ae09e2b4fa03c +/cookbook-adding-a-session-log-format-version: + en: 71132d61e41cb40b + zh: 0b56ed8893bf8d0a +/cookbook-adding-a-session-log-format-version/summary: + en: 76b76c19e0889ab3 + zh: 1ddc1afa5c2333f0 +/cookbook-adding-a-session-log-format-version/table-of-contents: + en: 6977fff29f49e4a4 + zh: 7ffb6f5490831dce +/cookbook-adding-a-session-log-format-version/1-choose-the-version-and-release-base: + en: 3205409b918b891d + zh: 98f17c19045954d5 +/cookbook-adding-a-session-log-format-version/2-add-an-identity-edge: + en: 77c9c26d94fb33ca + zh: 313c54c45cfc7dbc +/cookbook-adding-a-session-log-format-version/3-implement-per-artifact-stages-and-validation: + en: 2bea8b93ac9b359a + zh: 2c24e71680f66ef7 +/cookbook-adding-a-session-log-format-version/4-update-current-version-consumers: + en: a285126945d02c12 + zh: e039c77cf7866ad2 +/cookbook-adding-a-session-log-format-version/5-create-snapshot-successors: + en: 7f865673d550a949 + zh: 8bde6a9ef29f382a +/cookbook-adding-a-session-log-format-version/6-validate-the-integrated-result: + en: fb1c6d23599659c5 + zh: b51e4ee8c0d1daeb +/cookbook-adding-a-session-log-format-version/6-validate-the-integrated-result/developer-v4-corpus-trial: + en: f22ab2d7b089a6d2 + zh: 0a47f543899f0161 +/cookbook-adding-a-session-log-format-version/6-validate-the-integrated-result/final-v3-event-vocabulary-before-v4-publication: + en: a6ed1788dc64efbe + zh: 9ca3382f92df986b +/cookbook-adding-a-session-log-format-version/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/cookbook/adding-a-settings-card.i18n.yaml b/docs/cookbook/adding-a-settings-card.i18n.yaml index 0f8a5b63ed..7165774217 100644 --- a/docs/cookbook/adding-a-settings-card.i18n.yaml +++ b/docs/cookbook/adding-a-settings-card.i18n.yaml @@ -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 adding-a-settings-card.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 docs/cookbook/adding-a-settings-card.md -adding-a-settings-card.md: 3e473d8bbc52d0bbfddcabc2512dbef1b23a8fb4 -adding-a-settings-card.zh.md: fd2c71366112b7f89c1a7f3de000a28778c44ee7 +/cookbook-live-configuration-forms: + en: ce4e603c0a07dd43 + zh: 8609e754f25bdc0c +/cookbook-live-configuration-forms/1-declare-live-fields: + en: a758ea63530ecf34 + zh: 0ce644333a8a4e85 +/cookbook-live-configuration-forms/2-compose-the-plugin: + en: 9c2680c175632a58 + zh: 46927fca484b5df0 +/cookbook-live-configuration-forms/3-verify-editing: + en: dc5dc7ab4c211b97 + zh: 88f8af745c576a6d +/cookbook-live-configuration-forms/4-contribute-to-another-plugin-s-page: + en: 0abb582a1a25b3d9 + zh: 6078a707324ec515 +/cookbook-live-configuration-forms/5-where-the-browser-half-rides: + en: 9f0f3808b442dd35 + zh: a6082cbbe8be3aa6 diff --git a/docs/cookbook/adding-a-tool.i18n.yaml b/docs/cookbook/adding-a-tool.i18n.yaml index e6cf6f864d..93b9c89422 100644 --- a/docs/cookbook/adding-a-tool.i18n.yaml +++ b/docs/cookbook/adding-a-tool.i18n.yaml @@ -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 adding-a-tool.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 docs/cookbook/adding-a-tool.md -adding-a-tool.md: 2deb608fb3f25cb3c816150ed678fa685892ef66 -adding-a-tool.zh.md: 5ad488c8b4c7f4678f11f31ea3669c425e3ea1b7 +/tool-authoring-reference: + en: 97ed54443f2a4464 + zh: 09c294f281c0de75 +/tool-authoring-reference/the-minimal-shape: + en: 2cc80a2a79e23005 + zh: 87e43383055890ce +/tool-authoring-reference/rules-of-the-execute-contract: + en: 110fa68298c53f96 + zh: f5762893eb615ddf +/tool-authoring-reference/long-running-work: + en: d81167332dfd05b7 + zh: 1c878b60f70728c2 +/tool-authoring-reference/execution-policy-and-observation: + en: 9f894e50199d7ec5 + zh: 934e4526f34c27fe +/tool-authoring-reference/ptc-mode-reaches-your-tool-for-free: + en: b1c249d7dde7fbad + zh: ff183efd4871340a +/tool-authoring-reference/how-your-tool-renders-in-a-ui: + en: e4520ce47c43ef22 + zh: 13971ee10f90d30b +/tool-authoring-reference/web-client-presentation: + en: 4a8bc6993ec4dcc1 + zh: 9cf5f5cb2bf1d08a +/tool-authoring-reference/verification: + en: 834e4936552af0a7 + zh: ece3d791dc1e2a26 diff --git a/docs/cookbook/adding-a-vendored-package.i18n.yaml b/docs/cookbook/adding-a-vendored-package.i18n.yaml index ab705f7f7c..6ea2db1edc 100644 --- a/docs/cookbook/adding-a-vendored-package.i18n.yaml +++ b/docs/cookbook/adding-a-vendored-package.i18n.yaml @@ -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 adding-a-vendored-package.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 docs/cookbook/adding-a-vendored-package.md -adding-a-vendored-package.md: 0f8b9f38de8f0d2ae19f40b339529afbb40d90ed -adding-a-vendored-package.zh.md: 2668b874eee845f6a505ae2e7d2ead5e63642ce2 +/cookbook-adding-a-vendored-package: + en: f4eda20eb37f2d46 + zh: ecf2b59d40f63275 +/cookbook-adding-a-vendored-package/1-copy-the-source-in: + en: 4cde59b8108d03e2 + zh: 39b842dcdc678a45 +/cookbook-adding-a-vendored-package/2-register-it-in-the-root-configs: + en: 5c29db234af3eb3b + zh: 7cea907bf30e2043 +/cookbook-adding-a-vendored-package/3-mind-the-manifest-guard: + en: 04f0b9d516b61910 + zh: 919a32ce8cb5536a +/cookbook-adding-a-vendored-package/4-verify: + en: d73b1b6a5aa6353f + zh: 15b3a4241e3b65ff diff --git a/docs/cookbook/adding-an-llm-adapter.i18n.yaml b/docs/cookbook/adding-an-llm-adapter.i18n.yaml index adb0aaf1f8..0b8756d63d 100644 --- a/docs/cookbook/adding-an-llm-adapter.i18n.yaml +++ b/docs/cookbook/adding-an-llm-adapter.i18n.yaml @@ -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 adding-an-llm-adapter.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 docs/cookbook/adding-an-llm-adapter.md -adding-an-llm-adapter.md: bbe4428155f2b2ed5279c5a159e9446f28068a5c -adding-an-llm-adapter.zh.md: 114745b7e07e807cbdd894ed69014455914ca68f +/cookbook-adding-an-llm-adapter: + en: 27a78fc5fb65725b + zh: c40c4f5848ef0f92 +/cookbook-adding-an-llm-adapter/the-shape: + en: 52a0bbb65eaadf28 + zh: 106021dc36e12533 +/cookbook-adding-an-llm-adapter/protocol-obligations-the-contract-two-implementations-verified: + en: 2702a60f5670dd27 + zh: 5ac992d0a8a61818 +/cookbook-adding-an-llm-adapter/implementation-structure: + en: 00c0560e1cef749b + zh: 86af574891125d83 +/cookbook-adding-an-llm-adapter/verification: + en: 104cc3ad431dc19d + zh: cfa5cb6ef7152912 diff --git a/docs/cookbook/extension-cookbook.i18n.yaml b/docs/cookbook/extension-cookbook.i18n.yaml index 676aefa070..497fc2fedc 100644 --- a/docs/cookbook/extension-cookbook.i18n.yaml +++ b/docs/cookbook/extension-cookbook.i18n.yaml @@ -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 extension-cookbook.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 docs/cookbook/extension-cookbook.md -extension-cookbook.md: b54f0191b48c109b21e111cac27020efcb37174a -extension-cookbook.zh.md: c03e92b21e156a82d51d2afd742f1dd880e32a47 +/cookbook-extension-plugin-shapes: + en: 1d31f2923d4b4e42 + zh: 194aaeceaa020e8e +/cookbook-extension-plugin-shapes/a-tool-plugin: + en: 39704ef102f2f2f7 + zh: 8771f9c19450b347 +/cookbook-extension-plugin-shapes/a-hook-plugin-permission-gate-example: + en: 9e67a75370812101 + zh: e8a77dd7bd758ea8 +/cookbook-extension-plugin-shapes/a-ui-plugin: + en: 0084c11d8d57beba + zh: ba867efbd90908d3 +/cookbook-extension-plugin-shapes/an-external-protocol-driver: + en: fc5e0d074214eaaf + zh: aac2bf67d6e7b30a +/cookbook-extension-plugin-shapes/runnable-wirings: + en: f0a28d07c0bb4d1b + zh: 840962f512cb4031 +/cookbook-extension-plugin-shapes/the-feature-mechanism-map: + en: 2d4511fc000afc42 + zh: d4875bf1e3f2808f diff --git a/docs/cookbook/maintaining-dsh-code-review.i18n.yaml b/docs/cookbook/maintaining-dsh-code-review.i18n.yaml index a8c842d9ff..a4a08abe1e 100644 --- a/docs/cookbook/maintaining-dsh-code-review.i18n.yaml +++ b/docs/cookbook/maintaining-dsh-code-review.i18n.yaml @@ -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 maintaining-dsh-code-review.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 docs/cookbook/maintaining-dsh-code-review.md -maintaining-dsh-code-review.md: a8c2a66c065aaec5c03f0ab6965377d1d1eb14bd -maintaining-dsh-code-review.zh.md: fca56ffeb35309660ac5284cb8e877eb8648405a +/maintaining-the-dsh-code-review-skill: + en: 7356eb0a9cc41144 + zh: 3194fbcf27f4fac1 +/maintaining-the-dsh-code-review-skill/what-the-maintainer-receives: + en: 1c4d0f340591ca39 + zh: 81bd728a7c2296cb +/maintaining-the-dsh-code-review-skill/what-the-operator-does-with-a-candidate-diff: + en: 1423d67e7c440cc6 + zh: bc6d30d6615377f5 +/maintaining-the-dsh-code-review-skill/when-a-run-produces-no-candidate: + en: feb6d261939d6c19 + zh: 044d8238cd6537d3 +/maintaining-the-dsh-code-review-skill/interruptions-and-handoff: + en: f6e8cab2266e6a3e + zh: e6e950fa8807bfb4 +/maintaining-the-dsh-code-review-skill/where-the-operator-s-private-setup-lives: + en: ae06145764738c16 + zh: d527b944db8c52be diff --git a/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml b/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml index c3ada35706..a974d598d1 100644 --- a/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml +++ b/docs/cookbook/responding-to-pr-review-on-a-stack.i18n.yaml @@ -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 responding-to-pr-review-on-a-stack.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 docs/cookbook/responding-to-pr-review-on-a-stack.md -responding-to-pr-review-on-a-stack.md: 61b15fd5e7b3a528957ef3c9e958aac0e11eb43b -responding-to-pr-review-on-a-stack.zh.md: a33418d342e57dd3c920008a4b12b2f33d6f31da +/responding-to-review-across-a-stacked-pr-chain: + en: f41561de1c6dbfef + zh: 83b863e1ac91d913 +/responding-to-review-across-a-stacked-pr-chain/ground-rules: + en: 5545e41aea74b5d6 + zh: 7105f51939753a1a +/responding-to-review-across-a-stacked-pr-chain/resolve-comments-through-the-stack: + en: 4d58b207c8ecbcaa + zh: 38673a460674b8d6 +/responding-to-review-across-a-stacked-pr-chain/verify: + en: 07cfbae7602fc30e + zh: 19782f06ee3c4a74 diff --git a/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml b/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml index 94277ee348..3d9e7a19fd 100644 --- a/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +++ b/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml @@ -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 reviewing-persistence-type-changes.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 docs/cookbook/reviewing-persistence-type-changes.md -reviewing-persistence-type-changes.md: 7baa6e5d9ee2d5ba72f9a3cc7c962153424010bc -reviewing-persistence-type-changes.zh.md: fec7494121ae8e500500c7a987b8c5221ebe35f8 +/: + en: 81db5d0ea2dbd0e2 + zh: 2eb04cd5b470fd53 +/cookbook-reviewing-persistence-type-changes: + en: 50fa0e1367687c7d + zh: cd76f6e9649351c9 +/cookbook-reviewing-persistence-type-changes/summary: + en: 58040d6422d9ef9d + zh: 7deda8fc45752e8c +/cookbook-reviewing-persistence-type-changes/table-of-contents: + en: 5fca19ac2bb1ddac + zh: 00d78fe7e80ba4f7 +/cookbook-reviewing-persistence-type-changes/optional-inspect-the-change: + en: 6e2c03bf51b3c400 + zh: 2545a193c89bbf1c +/cookbook-reviewing-persistence-type-changes/1-record-the-change: + en: 342bd49412db070e + zh: a8d14958e9a637d9 +/cookbook-reviewing-persistence-type-changes/2-check-commit-and-push: + en: 91d39719ec40b0f7 + zh: 405116ae4c91b100 +/cookbook-reviewing-persistence-type-changes/update-an-unaccepted-record: + en: 4fd3f48761f7909f + zh: 69af35c41656fa17 +/cookbook-reviewing-persistence-type-changes/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/docs/cordis-api/context.i18n.yaml b/docs/cordis-api/context.i18n.yaml index 5e32e2c820..0a43065531 100644 --- a/docs/cordis-api/context.i18n.yaml +++ b/docs/cordis-api/context.i18n.yaml @@ -1,6 +1,73 @@ -# 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 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 docs/cordis-api/context.md -context.md: 320b23de1c8d19e2dacdf0ec9f2361037bcf8048 -context.zh.md: b97fe51eb8afdd5c2235ac9cf8586c3ff68830d4 +/: + en: d2c0c5bce430d1be + zh: a317d7ff7fc9f112 +/context: + en: fc6fd9ae25b8e9e5 + zh: 1a2407d299404ace +/context/ctx-extend-meta: + en: 2c407cb9589b001f + zh: 70dc8650250cd4c5 +/context/ctx-isolate-name-label: + en: ab77052c3bf31e2b + zh: 686ca829ea5b8170 +/context/ctx-intercept-name-config: + en: 1bd1e349f5c8687d + zh: 7634b27d2c9bade4 +/context/ctx-root: + en: eb89a7f0d2bc1753 + zh: 263219126a310d3b +/context/ctx-baseurl: + en: 29c28e7558cea0ad + zh: 9b591e449c1bfd72 +/context/ctx-events: + en: 6ce1e444e9dc3c48 + zh: d4ca16ff2aeaa9f4 +/context/ctx-logger: + en: da8400d2e8dac772 + zh: 8dd6fea850dd3b90 +/context/ctx-reflect: + en: 31e86abee38e9040 + zh: 77ab752a7e69ccfe +/context/ctx-registry: + en: d2f27d281bbf9f56 + zh: 9193074fac7e9bfc +/context/static-members: + en: ceb197529207a8ed + zh: 7d444c03f8be0f0d +/context/static-members/context-effect: + en: 19f4aaef44a7e8eb + zh: 2179cf28a7ee3f6a +/context/static-members/context-filter: + en: e8ca384b9a1ea98b + zh: 82189892bf0afcb0 +/context/static-members/context-isolate: + en: b8673b719837ce51 + zh: 83892f9f96c3ac28 +/context/static-members/context-intercept: + en: f3ebe6568cc9a863 + zh: bb51ab61a4e47d33 +/context/static-members/context-is-value: + en: 7425e0ee4bc1ada7 + zh: 93dee27133ded9e0 +/context/service-store-and-mixins: + en: 9f7ca8a6a0f80512 + zh: 05e8cbc30e5709fc +/context/service-store-and-mixins/ctx-get-name-strict: + en: 5a9a1212850a136f + zh: 2b6f287c8bbcc0c6 +/context/service-store-and-mixins/ctx-set-name-value: + en: a04668f00e1cbe91 + zh: 8e8444e6b393358e +/context/service-store-and-mixins/ctx-provide-name-value: + en: 5887dc4233a37a5b + zh: 810dcde64664170b +/context/service-store-and-mixins/ctx-accessor-name-options: + en: 82ccb33229d3cf32 + zh: d969904f023380b4 +/context/service-store-and-mixins/ctx-mixin-name-mixins: + en: 777f36aed85fa512 + zh: 47b809ad5f799134 diff --git a/docs/cordis-api/events.i18n.yaml b/docs/cordis-api/events.i18n.yaml index 8bea17afa0..68421a5f2c 100644 --- a/docs/cordis-api/events.i18n.yaml +++ b/docs/cordis-api/events.i18n.yaml @@ -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 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 docs/cordis-api/events.md -events.md: 8b8eb2358e10a250f581aecc725ba32360d338d3 -events.zh.md: 60b0580496926e56c1d2f803d84fbf649f37d972 +/: + en: d2c0c5bce430d1be + zh: af1ac3203cdfdad2 +/events: + en: 9d809e3de33dd783 + zh: b965aee4a65c6c1a +/events/ctx-parallel-name-args: + en: e583c71acb606915 + zh: 0560679b20f8d7f0 +/events/ctx-emit-name-args: + en: ff6f4023b66f8164 + zh: af16d24d663a7eb7 +/events/ctx-serial-name-args: + en: c431c0e3ac72e854 + zh: c43b7d899ea8161c +/events/ctx-bail-name-args: + en: 85b8b2178c3e3c33 + zh: ad8af3e0743e231c +/events/ctx-waterfall-name-args: + en: 3b32d0511b7da48b + zh: e0ac62e59d8e2152 +/events/ctx-on-name-listener-options: + en: 74a1fe55f4a47ec8 + zh: 87d37038af3bab0e +/events/ctx-once-name-listener-options: + en: 64802f0580705984 + zh: 3f6ce2d7ce1e760d +/events/eventoptions: + en: 937453f689836c80 + zh: ebf0cc0f28127245 +/events/dispatchmode: + en: 1c8548fb249ed794 + zh: 86b92a28f39b2a12 diff --git a/docs/cordis-api/fiber.i18n.yaml b/docs/cordis-api/fiber.i18n.yaml index 98b54791f3..acc84e2f3a 100644 --- a/docs/cordis-api/fiber.i18n.yaml +++ b/docs/cordis-api/fiber.i18n.yaml @@ -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 fiber.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 docs/cordis-api/fiber.md -fiber.md: 3044301effde267bf580c3a5138481b10513f755 -fiber.zh.md: bee2f523f1fa2a2add2afc3a3fc322903f1ef6f0 +/: + en: d2c0c5bce430d1be + zh: 2173e2f1a2a3a13a +/fiber: + en: b5b3510f4b6dd13a + zh: a0c70471b6d779b5 +/fiber/ctx-effect-execute-label: + en: ef3418fd5ffbe86d + zh: c98935435da8bc7e +/fiber/ctx-fiber: + en: a10e38bf26b4ecfe + zh: 7c91817984c95c99 +/fiber/the-fiber-class: + en: 0e0fcb134ed44957 + zh: 326f4232aa0e65d1 +/fiber/the-fiber-class/fiber-uid: + en: 2f0eb3658bb8497e + zh: 65d3c17ca8bd4f95 +/fiber/the-fiber-class/fiber-ctx: + en: 1b527d85759324f9 + zh: 54aa40db2705b95c +/fiber/the-fiber-class/fiber-config: + en: ee804c03c39e7806 + zh: 4353ba7817ec61ec +/fiber/the-fiber-class/fiber-state: + en: 999ad29dfc29661b + zh: 20245d11c338e3f1 +/fiber/the-fiber-class/fiber-dispose: + en: 29e304d183eb9104 + zh: 9ac5023f518e06c4 +/fiber/the-fiber-class/fiber-store: + en: c4185e5d051136a2 + zh: 5714d9e4f5461ca3 +/fiber/the-fiber-class/fiber-inertia: + en: 2a3b1d3bc37bf986 + zh: 83bd257ee685d38b +/fiber/the-fiber-class/fiber-name: + en: e5c2ecca13167a32 + zh: 284a461f0f1cd35b +/fiber/the-fiber-class/fiber-assertactive: + en: cceb503899634d09 + zh: a8381af1a23436f3 +/fiber/the-fiber-class/fiber-effect-execute-label: + en: 55dcfacf295bbcf2 + zh: 6e3ec27bb8da5a3d +/fiber/the-fiber-class/fiber-geteffects: + en: 4d739a9c186fd9c2 + zh: f80fd3b87e79b004 +/fiber/the-fiber-class/fiber-await: + en: 1d6258cbea61cd18 + zh: 2f10dda8918dadc5 +/fiber/the-fiber-class/fiber-restart: + en: 62d68dedb20b4fa9 + zh: 5a735ae0ff1266f4 +/fiber/the-fiber-class/fiber-update-config-nosave: + en: b57ce0f6260c2cb8 + zh: 3bfb6c5bc252a2c2 +/fiber/effect: + en: 007d5b214e8a8610 + zh: d74c26fbb1b8aeb6 +/fiber/disposable: + en: 56e4218392fa7234 + zh: 8fea671180cacf6f +/fiber/effectmeta: + en: 849aa91b8e67809f + zh: 4b31d7e2acd2a008 +/fiber/cordiserror: + en: d276771958d3c05f + zh: 0141656ade938d55 +/fiber/validationerror: + en: 178782124cc15210 + zh: 2b226f43f48af555 diff --git a/docs/cordis-api/registry.i18n.yaml b/docs/cordis-api/registry.i18n.yaml index aee4e243ba..3eabd875d2 100644 --- a/docs/cordis-api/registry.i18n.yaml +++ b/docs/cordis-api/registry.i18n.yaml @@ -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 registry.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 docs/cordis-api/registry.md -registry.md: e6ddce5700ab071c2a4fedae19d99e2cb6e994ec -registry.zh.md: d928ff20c9d764a36d84ce0d0aec0af7f41b630f +/: + en: d2c0c5bce430d1be + zh: 24c4f62d45c2be68 +/registry: + en: 002c10f39db567b7 + zh: 4bfdc14c16c43162 +/registry/ctx-inject-deps-callback: + en: 3e7b7ded1bf8ddf0 + zh: 41d9e9dcd32df991 +/registry/ctx-plugin-plugin-args: + en: 9963e1dac2483850 + zh: c56bfa38d1802a0e +/registry/plugin: + en: 403f61a503ccf2ab + zh: 8c31f71930e984e2 +/registry/inject: + en: 6e730d459d7d5663 + zh: f7ce147d927c83ad diff --git a/docs/cordis-api/service.i18n.yaml b/docs/cordis-api/service.i18n.yaml index 7779d5fef6..f1c4076c35 100644 --- a/docs/cordis-api/service.i18n.yaml +++ b/docs/cordis-api/service.i18n.yaml @@ -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 service.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 docs/cordis-api/service.md -service.md: d4b0f06da16decf31e0d348a88e0360b46ee9d35 -service.zh.md: ec0b443a0eae2787e0a3db919583d8092414c52d +/: + en: d2c0c5bce430d1be + zh: 124ab2656ea6d044 +/service: + en: a163fe605c4a8045 + zh: 060a6f4ce086c5c2 +/service/service-name: + en: 32a75e66b17c0b79 + zh: 0a5ff9fc45b3bea0 +/service/static-members: + en: ceb197529207a8ed + zh: 7d444c03f8be0f0d +/service/static-members/service-init: + en: ade1a1c4543fac8c + zh: b7a4b616ee930b5b +/service/static-members/service-check: + en: 111351ada5972a9a + zh: 1537da7793a6a02c +/service/static-members/service-config: + en: 93d8ff69722f9b46 + zh: 9ba1532d164c2231 +/service/static-members/service-invoke: + en: 6d87f35f8cf52b05 + zh: 278dbce6025b2834 +/service/static-members/service-extend: + en: 5b78b68d8de8cef9 + zh: 6df27f37da11a104 +/service/static-members/service-tracker: + en: 52071ebded7ec026 + zh: 4647fa3f989b5deb +/service/static-members/service-resolveconfig: + en: ad62f59468d1a765 + zh: 4a31b52f61e1af6e diff --git a/docs/cordis-primer.i18n.yaml b/docs/cordis-primer.i18n.yaml index b56974c548..cae0a1fcad 100644 --- a/docs/cordis-primer.i18n.yaml +++ b/docs/cordis-primer.i18n.yaml @@ -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 cordis-primer.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 docs/cordis-primer.md -cordis-primer.md: 2e5a48745cf96068bec9e31b0c6f1bf9d84b0e34 -cordis-primer.zh.md: 3706173ddb6b097a59d7b85d08f04df7d0bd372f +/cordis-primer: + en: 065178153a059ae3 + zh: d1c5c429a8c35ac2 +/cordis-primer/cordis-in-five-ideas: + en: c11cc0f2927f7bad + zh: 4fc01f41da6b1c3e +/cordis-primer/dispatch-modes: + en: 7adc1e4cc7a7a471 + zh: 879bf8afcd8f7c9f +/cordis-primer/cordis-waterfall-semantics: + en: 34055815ef4034ee + zh: a7e0c9c8cf12959a +/cordis-primer/loader-configuration: + en: affe2b40ba1aa67d + zh: 34ed011226c6488b +/cordis-primer/practical-rules: + en: 94846dacd018f8a1 + zh: 2bae19522ab2e33f diff --git a/docs/cordis-tutorial/01-first-plugin.i18n.yaml b/docs/cordis-tutorial/01-first-plugin.i18n.yaml index 9c9ff3fbe7..0932a77b80 100644 --- a/docs/cordis-tutorial/01-first-plugin.i18n.yaml +++ b/docs/cordis-tutorial/01-first-plugin.i18n.yaml @@ -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 01-first-plugin.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 docs/cordis-tutorial/01-first-plugin.md -01-first-plugin.md: 79df2f42df1f34a7ef32cc81607e1b926a1854ae -01-first-plugin.zh.md: b7cfce290e86cebb12d99bcc438a281d4a988b4b +/1-your-first-plugin: + en: 2b4f2febdeebdc74 + zh: 98bc166d6cfd188a +/1-your-first-plugin/write-the-plugin: + en: e2ec9e26bfd71d59 + zh: 7c0d2b90a711ae4b +/1-your-first-plugin/compose-the-app: + en: 529a55fb5ee74567 + zh: f4b447fc0a68c0dd +/1-your-first-plugin/run-it: + en: 7c55b7ecb982e94e + zh: dec70eb3ef18faec +/1-your-first-plugin/the-two-other-plugin-shapes: + en: 39b0764924d85146 + zh: 801fb0297e282df1 +/1-your-first-plugin/try-breaking-it: + en: 127d7a0916de2b66 + zh: 86d4616c7a6aa82a diff --git a/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml b/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml index 3bc893b451..1c717ccd83 100644 --- a/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml +++ b/docs/cordis-tutorial/02-lifecycle-and-effects.i18n.yaml @@ -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 02-lifecycle-and-effects.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 docs/cordis-tutorial/02-lifecycle-and-effects.md -02-lifecycle-and-effects.md: 8e75708eb0cba1aceb7fa3dae5ae334995eb113f -02-lifecycle-and-effects.zh.md: b5f8bc18ed242784528574a861c57bedae6fa880 +/2-lifecycle-and-effects: + en: d8936e9239303f91 + zh: ee5a15bead15f7fa +/2-lifecycle-and-effects/effects: + en: 2405133f23696f0e + zh: 30bcd69cba560176 +/2-lifecycle-and-effects/the-fiber-state-machine: + en: fe65d99ee289a273 + zh: ee5cc95f67a2bc4c +/2-lifecycle-and-effects/what-is-already-an-effect: + en: e986a639aac5eaff + zh: 8f907581f5725119 diff --git a/docs/cordis-tutorial/03-services.i18n.yaml b/docs/cordis-tutorial/03-services.i18n.yaml index 1ed1d4e802..2cd176e048 100644 --- a/docs/cordis-tutorial/03-services.i18n.yaml +++ b/docs/cordis-tutorial/03-services.i18n.yaml @@ -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 03-services.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 docs/cordis-tutorial/03-services.md -03-services.md: ebfc400dbbc701a3c164c7d30c371dec879d7d73 -03-services.zh.md: 8a4881eb41a9be09f531a58b528a2b64500b209a +/3-services: + en: 15915c1948e99dcd + zh: 769f50dcd06a1c6e +/3-services/provide-a-service: + en: dafc130ada001863 + zh: 820921c32e8ce5fe +/3-services/consume-a-service-with-inject: + en: 1b4faa79ebc5e3d7 + zh: 5170a8291e4aaf34 +/3-services/dependencies-are-tracked-after-load: + en: 5cadb845bd8ebdb3 + zh: cce559c73d7bda66 +/3-services/optional-dependencies: + en: f765739ab1e2061a + zh: 71ddc054022b66a9 +/3-services/naming: + en: 11dfa5c4f8aed0e0 + zh: d28f7c86f58cdf3e diff --git a/docs/cordis-tutorial/04-events.i18n.yaml b/docs/cordis-tutorial/04-events.i18n.yaml index 16232bae82..a85c7593aa 100644 --- a/docs/cordis-tutorial/04-events.i18n.yaml +++ b/docs/cordis-tutorial/04-events.i18n.yaml @@ -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 04-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 docs/cordis-tutorial/04-events.md -04-events.md: db911b9a06d7304d73030a2020de3d465fde2f9c -04-events.zh.md: 0125f81c5521ed62da790ee7033ca4b715311ee1 +/4-events: + en: c0d426252aeee143 + zh: a9d91f2ef46e2d3b +/4-events/declare-emit-listen: + en: a5b9207a435caf1f + zh: 3e06d12249fb712e +/4-events/dispatch-modes: + en: 24799f579b04b2d4 + zh: 97d4d82dc3a02c75 +/4-events/waterfall-transform-or-short-circuit: + en: 8309aea415b395c3 + zh: 480ee4a163543dd0 diff --git a/docs/cordis-tutorial/05-config.i18n.yaml b/docs/cordis-tutorial/05-config.i18n.yaml index 3eb71ac95b..731bb6a4f5 100644 --- a/docs/cordis-tutorial/05-config.i18n.yaml +++ b/docs/cordis-tutorial/05-config.i18n.yaml @@ -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 05-config.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 docs/cordis-tutorial/05-config.md -05-config.md: f278e8d06ef867d2944c279d067c36970582167f -05-config.zh.md: 65e9ea73a5ce31776dc1603339fa7c1c0250f856 +/5-configuration: + en: 6867b9ed15839cf1 + zh: 97425aab3396a458 +/5-configuration/a-configurable-plugin: + en: 1fcc4b1a64c6e6bb + zh: 85444447b593f18f +/5-configuration/fail-loud: + en: 261253c9d96b0fc1 + zh: 3f4ea5f34aa2637d +/5-configuration/volatile-fields: + en: ee367f4db7e8598c + zh: c1f17caebad9cc0a +/5-configuration/computed-config-values: + en: dbd47e8aa99fb2e0 + zh: dc441f610416909d diff --git a/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml b/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml index e0d3972364..e7294125c1 100644 --- a/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml +++ b/docs/cordis-tutorial/06-composition-and-hmr.i18n.yaml @@ -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 06-composition-and-hmr.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 docs/cordis-tutorial/06-composition-and-hmr.md -06-composition-and-hmr.md: 286e0fb58aad5619e83c018708af64be23fb67bd -06-composition-and-hmr.zh.md: 49d80e3ff3d4d73922076cddf3ea74a56c38e70f +/6-composition-and-hmr: + en: 628a6175275ee566 + zh: 0880eb3d5a90be9e +/6-composition-and-hmr/entries-are-more-than-a-name: + en: bdbf57b5166d37e5 + zh: 9b3b38f52be1dbd9 +/6-composition-and-hmr/hot-module-replacement: + en: 3ee3fbb053f19118 + zh: 35145132c1c01a37 +/6-composition-and-hmr/diagnosing-a-plugin-that-never-loads: + en: 25907bb752af3a02 + zh: 7b8fefc7567d9aef diff --git a/docs/cordis-tutorial/07-into-the-harness.i18n.yaml b/docs/cordis-tutorial/07-into-the-harness.i18n.yaml index 07d8646e6d..cc7f9f38e5 100644 --- a/docs/cordis-tutorial/07-into-the-harness.i18n.yaml +++ b/docs/cordis-tutorial/07-into-the-harness.i18n.yaml @@ -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 07-into-the-harness.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 docs/cordis-tutorial/07-into-the-harness.md -07-into-the-harness.md: a1285e63edcc94f119c64ddef6827c6d8dc4d5c6 -07-into-the-harness.zh.md: 30c91c8e40d80d0c5c25a0b64ca3568f23a16591 +/7-into-the-harness: + en: 470ff1f9eadc2663 + zh: d92a95cc0058ed3b +/7-into-the-harness/a-tool-plugin: + en: 00ae7d882a28622d + zh: 6386dcfac5df1a70 +/7-into-the-harness/an-observer-plugin: + en: 144e0445e183588a + zh: f02cfb7e91fdbd24 +/7-into-the-harness/compose-and-run: + en: 64a9d7a1430b3d0e + zh: 034e95c7f08bd70c +/7-into-the-harness/from-here-to-a-full-agent: + en: a758f5739e30667b + zh: 3f9e0e2cc38af87b diff --git a/docs/cordis-tutorial/index.i18n.yaml b/docs/cordis-tutorial/index.i18n.yaml index 0a4a4e8f83..4b942567a3 100644 --- a/docs/cordis-tutorial/index.i18n.yaml +++ b/docs/cordis-tutorial/index.i18n.yaml @@ -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 index.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 docs/cordis-tutorial/index.md -index.md: c51965e186ce8d78b577c1005c1c3e1831b91be1 -index.zh.md: 05f5469af53afdfb309fcbdf7b47d00258d127c0 +/cordis-tutorial: + en: 07671d53f483c796 + zh: 495179dd609bf5a9 +/cordis-tutorial/setup: + en: beffc06ab58daf2d + zh: a0a2dd15e4a3989e +/cordis-tutorial/chapters: + en: 1b72d8e48e2688f3 + zh: a4beaacdca936766 +/cordis-tutorial/typescript-notes: + en: 60a3f108ca98e532 + zh: 1cd4aabf471a576a diff --git a/docs/deepseek-llm-api-wire-extensions.i18n.yaml b/docs/deepseek-llm-api-wire-extensions.i18n.yaml index 547583134d..3510441d73 100644 --- a/docs/deepseek-llm-api-wire-extensions.i18n.yaml +++ b/docs/deepseek-llm-api-wire-extensions.i18n.yaml @@ -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 deepseek-llm-api-wire-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 docs/deepseek-llm-api-wire-extensions.md -deepseek-llm-api-wire-extensions.md: 47ecc9db5438d5992f3b84c1ba3cc9b15561dc2b -deepseek-llm-api-wire-extensions.zh.md: d79f97fc3a029cce04801cdf58eb713007b2eb43 +/official-deepseek-llm-api-wire-extensions: + en: 39729b071744e94b + zh: f3a1913295e78b5f +/official-deepseek-llm-api-wire-extensions/wire-namespaces-and-versioning: + en: 1da81051addc4b47 + zh: 3e8d7cd3f8c1cdba +/official-deepseek-llm-api-wire-extensions/request-headers: + en: 740e92e903ecb594 + zh: f934d3c9e5c56bfe +/official-deepseek-llm-api-wire-extensions/body-extension-transaction: + en: 8c05b525a3f1358e + zh: 4c5bccf12f000038 +/official-deepseek-llm-api-wire-extensions/dsh-plugin-packages: + en: 49d6f011e9d985a7 + zh: bbf61b4e4480c555 +/official-deepseek-llm-api-wire-extensions/dsh-session-log: + en: 5dc19f72ee3db8ab + zh: df9997b805cd01fa +/official-deepseek-llm-api-wire-extensions/dsh-session-log/wire-session-header: + en: ccd8fcd773df21c4 + zh: 7ea020068ad093ae +/official-deepseek-llm-api-wire-extensions/dsh-session-log/canonical-event-envelopes: + en: 008a21df5e314154 + zh: 8855710a37542ec5 +/official-deepseek-llm-api-wire-extensions/dsh-session-log/acceptance-watermark-and-at-least-once-delivery: + en: 64ba792a2a6af122 + zh: 0f560c3610e07e81 +/official-deepseek-llm-api-wire-extensions/exposure-and-receiver-requirements: + en: 9000a8295ff540ac + zh: b56802d83a04175d diff --git a/docs/defensive-patterns.i18n.yaml b/docs/defensive-patterns.i18n.yaml index f5cfd00abb..d9a68ffae5 100644 --- a/docs/defensive-patterns.i18n.yaml +++ b/docs/defensive-patterns.i18n.yaml @@ -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 defensive-patterns.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 docs/defensive-patterns.md -defensive-patterns.md: 9db582354628a13abd43c5bd052dbbfd6e52f79f -defensive-patterns.zh.md: 11b2a34a40957acf6bfc97a36c1e9b9b9633cf9b +/defensive-patterns: + en: 6316b1da0ae4561b + zh: f059647429c707d5 +/defensive-patterns/report-orthogonal-outcomes-independently: + en: 09cdbaa7cf763dc9 + zh: 11e5c13d77b2a563 +/defensive-patterns/honor-public-contracts-on-both-sides: + en: 157f966db7329171 + zh: 80da311819125f36 +/defensive-patterns/async-state-is-not-synchronous-state: + en: 33085f2b58bab16c + zh: be38e69a9c7d3f0e +/defensive-patterns/dispose-must-reach-quiescence-not-just-request-it: + en: 5c906be504b88a65 + zh: 8f428f59a87bb1a8 +/defensive-patterns/contain-callback-exceptions-in-the-dispatcher: + en: ae1788e76190db2c + zh: a55ab7473bb0c8dd +/defensive-patterns/never-hand-untrusted-output-the-ambient-environment-or-predictable-paths: + en: 09ad9d6433026468 + zh: cc0ba1a52859bb08 +/defensive-patterns/unlink-link-shaped-paths: + en: 644e6b1a9bd7b7d7 + zh: 823600c76c81ead1 diff --git a/docs/development.i18n.yaml b/docs/development.i18n.yaml index fd6198a8ca..8a17204de9 100644 --- a/docs/development.i18n.yaml +++ b/docs/development.i18n.yaml @@ -1,6 +1,49 @@ -# 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 development.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 docs/development.md -development.md: 7e8d0ded70ca880ce986cb3879d959fbe2a04304 -development.zh.md: 84d0d76d8c76f829c0ed928d28336df3e58ed7f0 +/development-guide: + en: dd46df776b6c0a69 + zh: 1a46cfc92cca2266 +/development-guide/setup-tutorial: + en: 5207d17725c07a27 + zh: 258884c4300ac63a +/development-guide/setup-tutorial/prerequisites: + en: 6078798f0fda1347 + zh: ea73704c4ec4f2a9 +/development-guide/setup-tutorial/windows-and-wsl-2: + en: e86be579be6f1813 + zh: 14f6a220337d0861 +/development-guide/setup-tutorial/first-time-setup: + en: f82b635837db9627 + zh: ca23888533b0ffc1 +/development-guide/contributor-reference: + en: 3221d1076554001f + zh: 29f166be6a5c04d9 +/development-guide/contributor-reference/typescript-project-layout: + en: 37441690bae1ebf4 + zh: 498777f8f25b6940 +/development-guide/contributor-reference/environment-variables: + en: dba2c72ee6ffa930 + zh: b65c27fbb9129ec8 +/development-guide/contributor-reference/git-integrations: + en: dc98eda4f4021feb + zh: b08766708803cf10 +/development-guide/contributor-reference/ci-gates: + en: 731fcaffe9210a72 + zh: d682e221a71b0ef6 +/development-guide/contributor-reference/daily-commands: + en: 08aa6ec1cdabfeb7 + zh: dcce5ae9d3c829d0 +/development-guide/contributor-reference/profile-runs: + en: 7ce6264a6a06dc4a + zh: e12b684f2bef942b +/development-guide/contributor-reference/application-commands: + en: 28a029c8768f0880 + zh: 67c17256e046624e +/development-guide/contributor-reference/todo-markers: + en: 85b38f78d87fc88f + zh: 00d5eb625e7dfb61 +/development-guide/contributor-reference/documenting-types-verbatim-ts-type-equiv: + en: 9d578b6797be921b + zh: 823cbfcfd9a75c17 diff --git a/docs/development.md b/docs/development.md index 7e8d0ded70..6adc1ef566 100644 --- a/docs/development.md +++ b/docs/development.md @@ -29,9 +29,9 @@ Install dependencies from the repo root: pnpm install ``` -The install also configures worktree-local Lefthook hooks and the `dsh-translation-pairing` Git merge driver through `scripts/install-lefthook.mjs`. The [worktree-local hooks Agent Note](../.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.md) owns the hook-path safety contract; the [automatic pairing merges Agent Note](../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md) owns the merge driver. +The install also configures worktree-local Lefthook hooks through `scripts/install-lefthook.mjs`. The [worktree-local hooks Agent Note](../.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.md) owns the hook-path safety contract. -If either integration is missing because dependencies were restored from cache or `postinstall` was skipped, install them manually: +If the hooks are missing because dependencies were restored from cache or `postinstall` was skipped, install them manually: ```sh node scripts/install-lefthook.mjs @@ -110,9 +110,7 @@ DEEPSEEK_BASE_URL=https://... # optional ### Git integrations -The pairing merge driver derives a conflicted `.i18n.yaml` record from the confirmed ancestor, current, and other owner blobs when both language files use Git's default text strategy and merge cleanly. It fails closed on owner conflicts, non-text merge configuration, or invalid records; after an already-stopped merge, run `pnpm run resolve-translation-pairing-conflicts`, which stages every safe pairing record and exits unsuccessfully if other pairing conflicts still need manual work. See the [bilingual documentation contract](i18n/README.md#the-pairing-contract) for the exact files and states the driver accepts. - -The installer probes the exact Node/tsx driver entrypoint before publishing its worktree configuration. If that runtime later becomes unavailable, the Node-independent launcher writes Git's ordinary text result, leaves the sidecar unresolved, and prints the recovery path; restore dependencies and run `pnpm run resolve-translation-pairing-conflicts`, or run `git merge --abort`. If `pre-merge-commit` rejects an otherwise clean merge, Git leaves the complete result staged without a commit; repair the failure and run `git commit`, or abort. The [automatic pairing merges Agent Note](../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md#failure-contract) owns the exact index and `MERGE_HEAD` states. +`.i18n.yaml` records use Git's default text merge. A record conflicts only when both branches changed language-specific content in the same heading section; resolve the Markdown, then rerun `pnpm run verify-translation-pairing --write `. If `pre-merge-commit` rejects an otherwise clean merge, Git leaves the complete result staged without a commit; repair the failure and run `git commit`, or run `git merge --abort`. lefthook is configured in `lefthook.yml` as a fast local checkpoint: diff --git a/docs/development.zh.md b/docs/development.zh.md index 84d0d76d8c..6e757bd416 100644 --- a/docs/development.zh.md +++ b/docs/development.zh.md @@ -31,9 +31,9 @@ pnpm install ``` -安装过程还会通过 `scripts/install-lefthook.mjs` 配置 worktree 本地的 Lefthook 钩子和 `dsh-translation-pairing` Git 合并驱动。[worktree 本地钩子 Agent Note](../.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.zh.md) 负责钩子路径的安全约定;[自动配对合并 Agent Note](../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md) 负责合并驱动。 +安装过程还会通过 `scripts/install-lefthook.mjs` 配置 worktree 本地的 Lefthook 钩子。[worktree 本地钩子 Agent Note](../.agents/notes/implemented/process/2026-07-27-worktree-local-lefthook.zh.md) 负责钩子路径的安全约定。 -如果依赖是从缓存恢复或 `postinstall` 被跳过而导致任一集成缺失,请手动安装: +如果依赖是从缓存恢复或 `postinstall` 被跳过而导致钩子缺失,请手动安装: ```sh node scripts/install-lefthook.mjs @@ -114,9 +114,7 @@ DEEPSEEK_BASE_URL=https://... # optional ### Git 集成 -当两种语言的文件都使用 Git 默认文本策略且能干净合并时,配对合并驱动会根据已确认的祖先、当前和另一侧的配对文档 blob,推导出发生冲突的 `.i18n.yaml` 记录。配对文档发生冲突、存在非文本合并配置或记录无效时,它会拒绝处理并保留冲突;如果合并已经因冲突而停止,请运行 `pnpm run resolve-translation-pairing-conflicts`,该命令会暂存每份可安全生成的配对记录;如果其他配对冲突仍需手工处理,则以非零状态退出。[双语文档约定](i18n/README.zh.md#the-pairing-contract)列出该驱动接受的确切文件和状态。 - -安装脚本在发布 worktree 配置前,会探测确切的 Node/tsx 驱动入口点。如果该运行时之后变得不可用,不依赖 Node 的启动器会写入 Git 的普通文本合并结果、让伴随文件保持未解决状态,并打印恢复路径;请恢复依赖后运行 `pnpm run resolve-translation-pairing-conflicts`,或运行 `git merge --abort`。如果 `pre-merge-commit` 拒绝原本能干净完成的合并,Git 会把完整结果留在暂存区但不创建提交;请修复失败后运行 `git commit`,或中止合并。确切的索引与 `MERGE_HEAD` 状态由[自动配对合并 Agent Note](../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md#failure-contract)负责记录。 +`.i18n.yaml` 记录使用 Git 默认文本合并。只有当两个分支都修改了同一标题分节中的语言特有内容时,记录才会冲突;先解决 Markdown 冲突,再重新运行 `pnpm run verify-translation-pairing --write `。如果 `pre-merge-commit` 拒绝原本能干净完成的合并,Git 会把完整结果留在暂存区但不创建提交;请修复失败后运行 `git commit`,或运行 `git merge --abort`。 lefthook 在 `lefthook.yml` 中配置,作为快速的本地检查点: diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index 1cd7be3dca..090e0d726d 100644 --- a/docs/event-producer-consumer.i18n.yaml +++ b/docs/event-producer-consumer.i18n.yaml @@ -1,6 +1,13 @@ -# 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 event-producer-consumer.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 docs/event-producer-consumer.md -event-producer-consumer.md: ff9fc19ab364e61e3dd1847531bfac3377676a3b -event-producer-consumer.zh.md: f1f8d5cd80dd20037d0caba3b3061924c280fb55 +/: + en: 41d772192075e133 + zh: dda91c6c670cfd9d +/event-producer-and-consumer-matrix: + en: 19f30fda81e73345 + zh: a8505006244f5619 +/event-producer-and-consumer-matrix/non-harness-or-undeclared-event-strings-seen-in-package-source: + en: 96dc0ff1580e5741 + zh: f076e3afa8fbc57c diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index ff9fc19ab3..8b6a9b2318 100644 --- a/docs/event-producer-consumer.md +++ b/docs/event-producer-consumer.md @@ -5,6 +5,7 @@ This matrix shows which packages dispatch each harness-owned event and which packages listen to it. Events are many-to-many, so the dense relation data is presented as a table rather than one large graph. Receiver and event-name types also cover contained dispatch sites that deliberately bypass `ctx.emit`, such as subagent lifecycle containment. + | Event | Mode | Declared in | Dispatchers | Listeners | | --- | --- | --- | --- | --- | | `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | @@ -87,9 +88,11 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `workflow/start` | `emit` | [`packages/workflow/workflow/src/index.ts:43`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`workflow`](../packages/workflow/workflow) | | `workspace/session-activity` | `waterfall` | [`packages/workspace/workspace/src/index.ts:129`](../packages/workspace/workspace/src/index.ts) | [`workspace`](../packages/workspace/workspace) (`waterfall`) | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`schedule`](../packages/schedule/schedule), [`subagent`](../packages/subagent/subagent) | | `workspace/session-stop` | `parallel` | [`packages/workspace/workspace/src/index.ts:147`](../packages/workspace/workspace/src/index.ts) | [`workspace`](../packages/workspace/workspace) (`parallel`) | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`schedule`](../packages/schedule/schedule), [`subagent`](../packages/subagent/subagent) | + ## Non-harness or undeclared event strings seen in package source + | Event string | Dispatchers | Listeners | | --- | --- | --- | | `internal/config` | [`config-editor`](../packages/boot/config-editor) (`waterfall`) | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | @@ -100,5 +103,6 @@ This matrix shows which packages dispatch each harness-owned event and which pac | `internal/update` | - | [`app-boot`](../packages/boot/app-boot) | | `loader/volatile-update` | - | [`llm-deepseek`](../packages/llm/llm-deepseek), [`llm-pi-ai`](../packages/llm/llm-pi-ai), `speech-to-text` | | `slots/changed` | `ui-renderer` (`emit`) | - | + Maintenance mode: generated: Cordis event declarations and producer/listener edges are resolved from the repository TypeScript Program. diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index f1f8d5cd80..b0c5b5b382 100644 --- a/docs/event-producer-consumer.zh.md +++ b/docs/event-producer-consumer.zh.md @@ -7,6 +7,7 @@ 本矩阵展示哪些包会派发各个 harness 自有事件,以及哪些包会监听这些事件。事件之间存在多对多关系,因此密集的关系数据以表格而非一张大型关系图呈现。接收方和事件名称类型还涵盖有意绕过 `ctx.emit` 的内含派发位置,例如 subagent 生命周期封装。 + | Event | Mode | Declared in | Dispatchers | Listeners | | --- | --- | --- | --- | --- | | `agent-loop/config-start-failed` | `emit` | [`packages/core/agent-loop/src/index.ts:238`](../packages/core/agent-loop/src/index.ts) | [`agent-loop`](../packages/core/agent-loop) (`events.dispatch`) | - | @@ -89,9 +90,11 @@ | `workflow/start` | `emit` | [`packages/workflow/workflow/src/index.ts:43`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`workflow`](../packages/workflow/workflow) | | `workspace/session-activity` | `waterfall` | [`packages/workspace/workspace/src/index.ts:129`](../packages/workspace/workspace/src/index.ts) | [`workspace`](../packages/workspace/workspace) (`waterfall`) | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`schedule`](../packages/schedule/schedule), [`subagent`](../packages/subagent/subagent) | | `workspace/session-stop` | `parallel` | [`packages/workspace/workspace/src/index.ts:147`](../packages/workspace/workspace/src/index.ts) | [`workspace`](../packages/workspace/workspace) (`parallel`) | [`agent`](../packages/core/agent), [`jobs`](../packages/jobs/jobs), [`schedule`](../packages/schedule/schedule), [`subagent`](../packages/subagent/subagent) | + ## Non-harness or undeclared event strings seen in package source + | Event string | Dispatchers | Listeners | | --- | --- | --- | | `internal/config` | [`config-editor`](../packages/boot/config-editor) (`waterfall`) | [`llm-pi-ai`](../packages/llm/llm-pi-ai) | @@ -102,5 +105,6 @@ | `internal/update` | - | [`app-boot`](../packages/boot/app-boot) | | `loader/volatile-update` | - | [`llm-deepseek`](../packages/llm/llm-deepseek), [`llm-pi-ai`](../packages/llm/llm-pi-ai), `speech-to-text` | | `slots/changed` | `ui-renderer` (`emit`) | - | + 维护模式:自动生成:Cordis 事件声明及生产方/监听方关系从仓库 TypeScript Program 中解析。 diff --git a/docs/glossary.i18n.yaml b/docs/glossary.i18n.yaml index a9beea5d35..e2e49e31f5 100644 --- a/docs/glossary.i18n.yaml +++ b/docs/glossary.i18n.yaml @@ -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 glossary.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 docs/glossary.md -glossary.md: 1a9ac39a73526833be3cdc191d67f519bdf8fc90 -glossary.zh.md: cd41876d41148082ddc18a08c49cf2abba882c79 +/glossary: + en: 9b364904616b2266 + zh: 934b9d189a4f34a2 +/glossary/capability-seam: + en: 18eea8301b73be7e + zh: 50f1adf512543a7e +/glossary/agent-scope: + en: 893655aaaa6a9db4 + zh: 48b699fd15fa7ba6 +/glossary/goal: + en: c64d9e91d54c6315 + zh: a2918c9d276af8a1 +/glossary/human-command: + en: 38a55fc61b359ace + zh: 567cae201b3a1bdf +/glossary/loop-hierarchy: + en: 343a7cb31b8191c2 + zh: 6831415a7fe1726a +/glossary/ralph: + en: 5059f8a377980b9d + zh: 39bf11c10e5c0a84 diff --git a/docs/graph-atlas.i18n.yaml b/docs/graph-atlas.i18n.yaml index f4b1916e47..a7da92c97d 100644 --- a/docs/graph-atlas.i18n.yaml +++ b/docs/graph-atlas.i18n.yaml @@ -1,6 +1,10 @@ -# 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 graph-atlas.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 docs/graph-atlas.md -graph-atlas.md: e37719c45e164aa004257c53afc0e996e1880619 -graph-atlas.zh.md: a24727e6bbd1656e720cd1cdf94772c5da821101 +/: + en: 41d772192075e133 + zh: e29afb84a07b179e +/documentation-graph-index: + en: 8ade539585a97cc2 + zh: 3a7195b400fd3203 diff --git a/docs/i18n/README.i18n.yaml b/docs/i18n/README.i18n.yaml index c56c4c2954..4c794f49bd 100644 --- a/docs/i18n/README.i18n.yaml +++ b/docs/i18n/README.i18n.yaml @@ -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 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 docs/i18n/README.md -README.md: f9b6b97d51541a12315c8b4503bd9b4399220888 -README.zh.md: 1f0ab74d3fbb8301dedb3c396c1b65334ffc8503 +/bilingual-documentation: + en: f9829ce537be0f72 + zh: 5ab1c534d35fb0b3 +/bilingual-documentation/the-pairing-contract: + en: 218dd8d0cdf826e4 + zh: 8df922ca48c52387 +/bilingual-documentation/the-gate-verify-translation-pairing: + en: 08386e96eebf06d9 + zh: c6d2b41199b0c466 +/bilingual-documentation/scope-and-exclusions: + en: db70e758813d339b + zh: 3dcea283a08c47cb +/bilingual-documentation/division-of-labor: + en: 88097c97cb72f3ba + zh: 78a18000626cc818 diff --git a/docs/i18n/README.md b/docs/i18n/README.md index f9b6b97d51..4c23fac67e 100644 --- a/docs/i18n/README.md +++ b/docs/i18n/README.md @@ -8,16 +8,20 @@ This repo's documentation is read by people and agents both inside and outside t - **Both languages carry equal authority.** A document may be authored and reviewed in either language first — a Chinese-first Agent Note is as legitimate as an English-first one — and the counterpart is translated from it. Neither file outranks the other; what binds them is that they must say the same thing. - **A pair is three sibling files.** The English `foo.md`, the Chinese `foo.zh.md`, and a consistency record `foo.i18n.yaml`, all in the same directory. No locale directories, no separate translation repo, no interleaved bilingual files. Pairs merge whole: a PR never lands one language without the other two files. -- **The consistency record.** `foo.i18n.yaml` holds the full git blob hash of each side as of the last time the two were confirmed to say the same thing: +- **The consistency record.** `foo.i18n.yaml` holds one entry per heading section that still contains language-specific content. The key is the section's English heading-slug path (`/` for text before the first heading; a repeated path gets `~2`, `~3`, …), and the entry holds a hash of the English and of the Chinese blocks in that section that differ between the two sides: ```yaml - foo.md: 3f786850e387550fdab836ed7e6dc881de23001b - foo.zh.md: 89e6c98d92887913cadf06b2adb97f26cde4849b + /foo: + en: 41d772192075e133 + zh: dda91c6c670cfd9d + /foo/usage: + en: 86940bea4a3c7ed6 + zh: de78429597783c7f ``` - Blob hashes, not commit hashes, so the record is computable for files edited in the same PR (`git hash-object foo.md`) and consistency is a pure content comparison. `--write` stores those snapshots in the local Git object database before recording them, including uncommitted working-tree contents, and pins every distinct stored blob under a content-addressed `refs/dsh/translation-pairing/snapshots/` ref so garbage collection cannot invalidate a recorded recovery pointer. The recorded hashes recover the exact last-confirmed text of either side, so an out-of-sync pair is updated by patching the counterpart minimally against the edited side's diff — never by re-translating whole files. Routine work makes that patch directly; when the user explicitly invokes the extended workflow, `pnpm run gen-translation-brief ` can instead assemble the update at the narrowest safely aligned granularity and `--apply` can splice a code-fence-only change after structural validation. After bringing the pair back in line, `pnpm run verify-translation-pairing --write ` re-records both hashes; that yaml diff is the reviewable act of confirming consistency, which is why `--write` requires naming the pairs you confirmed (`--write --all` is the explicit corpus-wide form). + Section `i` of one side corresponds to section `i` of the other. Each side's hash covers every top-level block of the section except fenced code blocks and generated regions, the two kinds of content the gate already requires to be identical on both sides; content that merely happens to be identical is still hashed. A section with no remaining blocks has no entry. Regenerating a region or editing a code block on both sides leaves the record unchanged, and edits to different sections change separate record lines, so Git's default text merge, including GitHub's, composes them. A record conflicts only when both branches changed hashed content in the same section; resolve the Markdown and re-record the pair. An out-of-sync pair is updated by patching the counterpart minimally against the edited side's diff, never by re-translating whole files; the gate names each changed section. Routine work makes that patch directly; when the user explicitly invokes the extended workflow, `pnpm run gen-translation-brief ` recovers the last-confirmed text from the newest commit whose contents produce the recorded entries, assembles the update at the narrowest safely aligned granularity, and `--apply` can splice a code-fence-only change after structural validation. After bringing the pair back in line, `pnpm run verify-translation-pairing --write ` re-records the entries; that yaml diff is the reviewable act of confirming consistency, which is why `--write` requires naming the pairs you confirmed (`--write --all` is the explicit corpus-wide form). - When two branches contain valid confirmations of the same pair, the installed `dsh-translation-pairing` Git merge driver composes a new record only if Git's default text merge succeeds for both recorded owner-blob triplets and the merged pair retains its required switchers and structural signature. The Chinese file must retain its English backlink; an authored English source must retain its Chinese link, while a listed generated English source is exempt. Any structure the driver cannot verify remains an ordinary conflict; `pnpm run resolve-translation-pairing-conflicts` applies the same fail-closed operation to a merge that has already stopped, stages every safe pairing record, and exits unsuccessfully when other pairing conflicts remain. The [automatic pairing merges Agent Note](../../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.md) owns the mechanism and alternatives. + The Chinese file must retain its English backlink; an authored English source must retain its Chinese link, while a listed generated English source is exempt. The [section-keyed pairing records Agent Note](../../.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.md) owns the record format and its alternatives. - **Language switcher.** The Chinese file always links back immediately after its H1 heading with `[English](foo.md) | 中文`. An authored English file reciprocates there with `English | [中文](foo.zh.md)`; a listed generated English source omits that line so it remains byte-identical to generator output. A README published outside GitHub, such as PyPI project metadata, may use the canonical `https://github.com/deepseek-ai/deepseek-harness/blob/master/` URL to the same counterpart so the switcher still resolves there. - **Structure mirrors the counterpart.** Heading depths and order, list kinds, ordered-list starts, list item counts, table row and column counts, semantic link targets with exact query/fragment suffixes, and verbatim code blocks match one to one across the pair. When a relative document link targets the active bilingual corpus, the English side uses its `.md` path and the Chinese side uses its `.zh.md` path. A missing counterpart in that corpus is a pair-completeness error rather than a fallback; targets outside the active corpus keep the authored path. See [translation-rules.md](translation-rules.md) for the full preservation rules. Existing Markdown gates apply to `.zh.md` files unchanged (`verify-md-wrap`, `verify-md-links`). @@ -26,7 +30,7 @@ This repo's documentation is read by people and agents both inside and outside t `pnpm run verify-translation-pairing` (part of `doc-sync`, which contributors run locally for documentation changes and CI runs exhaustively) enforces the contract mechanically: 1. Every document in scope has a complete pair. README discovery is case-insensitive on the basename, so `missions/readme.md` is in scope alongside the other documentation roots. -2. Every pair artifact that exists at all is complete and consistent: all three files present, each side's current blob hash equals the recorded one (editing either side without re-confirming the pair goes red), the Chinese side and every authored English source carry their language switchers (listed generated English sources are exempt), every ordinary relative document link uses its source side's target locale, and the structural signatures match in order — heading depths, verbatim code blocks (info string and content), table row and column counts, list kinds, ordered-list starts, item counts, and semantic link targets with exact query/fragment suffixes apart from the switcher. +2. Every pair artifact that exists at all is complete and consistent: all three files present, the record is canonical and its entries equal the entries computed from the current contents (changing language-specific content on either side without re-confirming the pair goes red), the Chinese side and every authored English source carry their language switchers (listed generated English sources are exempt), every ordinary relative document link uses its source side's target locale, and the structural signatures match in order — heading depths, verbatim code blocks (info string and content), table row and column counts, list kinds, ordered-list starts, item counts, and semantic link targets with exact query/fragment suffixes apart from the switcher. 3. Files listed as `excluded` have no `.zh.md` and no `.i18n.yaml` at all. Frozen Agent Notes under `.agents/notes/archived/` are outside this evolving gate; their dedicated verifier requires and seals the complete existing triplet instead. Source-oriented code gates consume an exact `.zh.md` fence sequence as a derivative of its unsuffixed sibling instead of compiling or manifesting the same code twice. The sequence must match in length, order, fence kind, and byte-exact body; otherwise both copies remain independently checked and the pairing gate reports the structural mismatch. @@ -43,9 +47,9 @@ The gate's limit, stated plainly: **a green gate means the pair was confirmed co **Scope**: the root `CONTRIBUTING.md`, `BRAND_GUIDELINES.md`, and `SAFETY.md` documents, every non-vendor README, and every active document under `.agents/notes/**`, `docs/**`, and `python/**`. README matching is case-insensitive on the basename and covers future directories without another manifest edit. Dependency and ignored build-output trees and the frozen `.agents/notes/archived/` tree are discovery exclusions, not evolving translation source. -Generated English references and graphs participate in pairing when a reviewed Chinese counterpart is available. When a generator owns only English, it remains that source of truth; regeneration that changes English leaves the pair out of sync until the reviewed Chinese counterpart is updated and re-recorded. Freshness and pairing gates enforce their respective invariants independently. +Generated English references and graphs participate in pairing when a reviewed Chinese counterpart is available. A generator puts its generated data in generated regions and writes each region into both pages, so regeneration never requires a manual Chinese update or a new record; only the prose outside the regions is translated and recorded. Freshness and pairing gates enforce their respective invariants independently. -Shared generated regions, such as the Cordis subsystem regions, keep every generated byte identical across languages except localized paired-document paths. A full-page generator can instead render source-owned paired prose, such as [persistence-catalog-text.ts](../../scripts/persistence-catalog-text.ts), from the same structural data with matching Markdown structure and identical code blocks. It regenerates both pages and their consistency record together; review still verifies the paired prose's meaning and terminology. +Shared generated regions, such as the Cordis subsystem regions and the per-package regions of the [config catalog](../config-catalog.md), keep every generated byte identical across languages except localized paired-document paths; labels inside a region are code identifiers rather than translated words. A full-page generator can also render source-owned paired prose, such as [persistence-catalog-text.ts](../../scripts/persistence-catalog-text.ts), from the same structural data with matching Markdown structure and identical code blocks. It regenerates both pages and their consistency record together; review still verifies the paired prose's meaning and terminology. Generated English sources omit the language switcher that ordinary authored sources carry, because adding it would make the generator stale; their Chinese counterparts still link back to the English source. A manually maintained Chinese counterpart may rewrite only self-referential generation and maintenance statements that would otherwise be false for the reviewed translation; all technical content remains subject to the ordinary faithfulness rules. diff --git a/docs/i18n/README.zh.md b/docs/i18n/README.zh.md index 1f0ab74d3f..a905a0bdae 100644 --- a/docs/i18n/README.zh.md +++ b/docs/i18n/README.zh.md @@ -10,16 +10,20 @@ - **两种语言同权。** 一篇文档可以先用任一语言撰写和评审(先写中文的 Agent Note 与先写英文的一样正当),另一侧由它翻译而来。两个文件谁也不高于谁;约束它们的是二者必须说同样的话。 - **一对文档是三个同目录文件。** 英文 `foo.md`、中文 `foo.zh.md`,加一份一致性记录 `foo.i18n.yaml`,都在同一目录。不用语言目录,不用独立翻译仓库,不用中英混排的单文件。配对必须整体合并:PR(Pull Request)永远不会只带一种语言而缺其余两个文件。 -- **一致性记录。**`foo.i18n.yaml` 保存两侧文件在上一次被确认「说同样的话」时各自的完整 Git blob hash: +- **一致性记录。**`foo.i18n.yaml` 为每个仍含语言特有内容的标题分节保存一个条目。键是该分节英文标题 slug 组成的路径(第一个标题之前的文本为 `/`;重复路径依次加 `~2`、`~3`……),条目保存该分节中两侧不同的英文块与中文块各自的 hash: ```yaml - foo.md: 3f786850e387550fdab836ed7e6dc881de23001b - foo.zh.md: 89e6c98d92887913cadf06b2adb97f26cde4849b + /foo: + en: 41d772192075e133 + zh: dda91c6c670cfd9d + /foo/usage: + en: 86940bea4a3c7ed6 + zh: de78429597783c7f ``` - 用 blob hash 而不是 commit hash,这样同一个 PR 里改动的文件也能算出记录(`git hash-object foo.md`),一致性是纯内容比较。`--write` 会先把这些快照存入本地 Git 对象库再写下记录,未提交的 worktree 内容也不例外;它还会在内容寻址的 `refs/dsh/translation-pairing/snapshots/` ref 下固定每个不同的已存 blob,使垃圾回收无法让已记录的恢复指针失效。记录的 hash 能还原任一侧上次确认时的确切文本,所以失去同步的配对是「按被改一侧的 diff 最小化地修补另一侧」,从不整篇重译。日常工作会直接完成这份修补;用户显式调用扩展工作流时,可改由 `pnpm run gen-translation-brief ` 以能安全对齐的最窄粒度汇集这次更新,并由 `--apply` 在结构校验后拼接仅涉及围栏代码块的改动。两侧对齐后,`pnpm run verify-translation-pairing --write ` 重新记录两个 hash;那份 YAML diff 就是「确认一致」这个动作本身,可以被评审,也正因如此,`--write` 要求点名你确认过的配对(`--write --all` 是显式的全语料形式)。 + 一侧的第 `i` 个分节对应另一侧的第 `i` 个分节。每侧的 hash 覆盖该分节的全部顶层块,只排除围栏代码块和生成区域——门禁已要求这两类内容在两侧一致;只是碰巧相同的内容仍计入 hash。没有剩余块的分节没有条目。重新生成区域或在两侧同时修改代码块不会改变记录;修改不同分节会改动记录中不同的行,因此 Git 默认文本合并(包括 GitHub 的合并)能组合它们。只有两个分支都修改了同一分节中计入 hash 的内容时,记录才会冲突;解决 Markdown 冲突后重新记录该配对。失去同步的配对是「按被改一侧的 diff 最小化地修补另一侧」,从不整篇重译;门禁会指出每个发生变化的分节。日常工作会直接完成这份修补;用户显式调用扩展工作流时,`pnpm run gen-translation-brief ` 会从内容能生成所记录条目的最新提交中还原上次确认的文本,以能安全对齐的最窄粒度汇集这次更新,并可由 `--apply` 在结构校验后拼接仅涉及围栏代码块的改动。两侧对齐后,`pnpm run verify-translation-pairing --write ` 重新记录这些条目;那份 YAML diff 就是「确认一致」这个动作本身,可以被评审,也正因如此,`--write` 要求点名你确认过的配对(`--write --all` 是显式的全语料形式)。 - 当两个分支都包含同一配对的有效确认时,已安装的 `dsh-translation-pairing` Git 合并驱动只会在 Git 默认文本合并能分别干净合并记录所指向的英文三方 blob 与中文三方 blob,且合并后的配对仍保留必需的语言切换行和结构签名时,组合出一份新记录。中文文件必须保留指向英文的反向链接;普通撰写的英文源必须保留指向中文的链接,而清单内的生成英文源不作此要求。任何合并驱动无法验证的结构都保留为普通冲突;`pnpm run resolve-translation-pairing-conflicts` 会对已经停止的合并执行同一套遇错即保留冲突的操作,暂存每份可安全生成的配对记录,并在还有其他配对冲突时以非零状态退出。[自动配对合并 Agent Note](../../.agents/notes/implemented/process/2026-08-08-automatic-translation-pairing-merges.zh.md) 负责记录该机制与备选方案。 + 中文文件必须保留指向英文的反向链接;普通撰写的英文源必须保留指向中文的链接,而清单内的生成英文源不作此要求。[按分节记录配对 Agent Note](../../.agents/notes/implemented/process/2026-09-23-section-keyed-translation-pairing-records.zh.md) 负责记录该记录格式与备选方案。 - **语言切换行。** 中文文件一律在 H1 标题后立即以 `[English](foo.md) | 中文` 链回英文。普通撰写的英文文件在同一位置以 `English | [中文](foo.zh.md)` 互链;清单内的生成英文源省略此行,以便与生成器输出逐字节一致。发布到 GitHub 以外位置的 README(例如 PyPI 项目元数据)可以改用指向同一对侧文件的规范 `https://github.com/deepseek-ai/deepseek-harness/blob/master/` URL,使切换行在该位置仍可访问。 - **结构与另一侧一一对应。** 标题深度与顺序、列表类型、有序列表起始编号、列表项数量、表格行列数、保留原样 query/fragment 后缀的语义链接目标,以及逐字节一致的代码块在配对两侧一一对应。相对文档链接的目标属于活跃双语语料时,英文侧使用其 `.md` 路径,中文侧使用其 `.zh.md` 路径。该范围内缺少对侧属于配对完整性错误,不得回退;范围外的目标保留原路径。完整保持规则见 [translation-rules.md](translation-rules.zh.md)。既有 Markdown 门禁对 `.zh.md` 文件原样生效(`verify-md-wrap`、`verify-md-links`)。 @@ -28,7 +32,7 @@ `pnpm run verify-translation-pairing`(`doc-sync`(文档同步门禁)的一环,贡献者会针对文档变更在本地运行,CI 则会完整运行)机械地强制执行这份约定: 1. 范围内的每篇文档都有完整配对。发现 README 时,basename 不区分大小写,因此 `missions/readme.md` 与其他文档根一样属于范围。 -2. 任何已存在的配对产物都完整且一致:三个文件齐全、每一侧的当前 blob hash 等于记录值(改了任一侧而没重新确认配对就变红)、中文侧和所有普通撰写的英文源都带语言切换行(清单内的生成英文源除外)、每条普通相对文档链接都使用源文件一侧对应的目标 locale,且结构签名按序一致:标题深度、逐字节一致的代码块(信息字符串与内容)、表格行列数、列表类型、有序列表起始编号、列表项数量,以及除切换行之外保留原样 query/fragment 后缀的语义链接目标。 +2. 任何已存在的配对产物都完整且一致:三个文件齐全、记录为规范形式,且其条目等于根据当前内容计算出的条目(任一侧的语言特有内容改了而没重新确认配对就变红)、中文侧和所有普通撰写的英文源都带语言切换行(清单内的生成英文源除外)、每条普通相对文档链接都使用源文件一侧对应的目标 locale,且结构签名按序一致:标题深度、逐字节一致的代码块(信息字符串与内容)、表格行列数、列表类型、有序列表起始编号、列表项数量,以及除切换行之外保留原样 query/fragment 后缀的语义链接目标。 3. 列为 `excluded` 的文件完全没有 `.zh.md`,也没有 `.i18n.yaml`。`.agents/notes/archived/` 下冻结的 Agent Note 不受这个持续演进的门禁约束;专用校验器会要求其现有的三个配对文件完整,并将其封存。 面向源码的代码门禁会把精确的 `.zh.md` 围栏序列视为其无后缀兄弟文件的派生内容,而不会再次编译相同代码或在 manifest(元数据清单)中重复登记。该序列必须在长度、顺序、围栏类型和按字节精确的正文上一致;否则两份副本仍会独立受检,配对门禁也会报告结构不匹配。 @@ -45,9 +49,9 @@ **范围**:根目录 `CONTRIBUTING.md`、`BRAND_GUIDELINES.md` 与 `SAFETY.md` 文档、除 vendor 源码外的全部 README,以及 `.agents/notes/**`、`docs/**` 与 `python/**` 下的全部活跃文档。匹配 README 时只看文件名且不区分大小写,因此今后新增的目录无需再修改 manifest。依赖目录、被忽略的构建产物目录以及冻结的 `.agents/notes/archived/` 目录树只在发现阶段排除,不属于持续演进的翻译源文档。 -有经评审的中文对侧的生成英文参考文档和图文档遵循配对规则。生成器只负责英文时,它仍是该语言的真源;重新生成导致英文变化后,配对会保持失去同步状态,直至经评审的中文对侧完成更新并重新记录。新鲜度门禁与配对门禁各自独立强制其约束。 +有经评审的中文对侧的生成英文参考文档和图文档遵循配对规则。生成器把生成数据放在生成区域中,并把每个区域写入两种语言的页面,因此重新生成不需要手工更新中文,也不需要重新记录;只有区域外的说明文字需要翻译并计入记录。新鲜度门禁与配对门禁各自独立强制其约束。 -共享生成区域(例如 Cordis 子系统区域)在两种语言间保持每个生成字节相同,仅配对文档路径按语言本地化。整页生成器则可以从相同的结构数据渲染源码维护的双语说明,例如 [persistence-catalog-text.ts](../../scripts/persistence-catalog-text.ts),并保持 Markdown 结构对应、代码块完全相同。它同时重新生成两页及其一致性记录;评审仍须验证双语说明的含义与术语。 +共享生成区域(例如 Cordis 子系统区域和[配置目录](../config-catalog.zh.md)中每个包的区域)在两种语言间保持每个生成字节相同,仅配对文档路径按语言本地化;区域内的标签使用代码标识符而非译文。整页生成器也可以从相同的结构数据渲染源码维护的双语说明,例如 [persistence-catalog-text.ts](../../scripts/persistence-catalog-text.ts),并保持 Markdown 结构对应、代码块完全相同。它同时重新生成两页及其一致性记录;评审仍须验证双语说明的含义与术语。 生成的英文源文件不含普通撰写文档所带的语言切换行,因为添加该行会使生成器新鲜度检查失败;中文对侧仍链接回英文源。人工维护的中文对侧只能改写若直译便不再符合经评审译文事实的自指生成与维护说明;所有技术内容仍受普通忠实性规则约束。 diff --git a/docs/i18n/terminology.md b/docs/i18n/terminology.md index 10e0a602c4..cf7009ff7f 100644 --- a/docs/i18n/terminology.md +++ b/docs/i18n/terminology.md @@ -134,7 +134,7 @@ | extension point | 扩展点 | | | 注意与 `seam` 区分 | | fail-fast | 快速失败 | | | | | fenced code block | 围栏代码块 | | | 沿用 MDN 中文翻译 | -| fingerprint | 指纹 | | | 通用内容指纹;双语配对机制使用 sidecar record 记录两侧 blob hash | +| fingerprint | 指纹 | | | 通用内容指纹;双语配对机制使用 sidecar record 按分节记录两侧 hash | | finish reason | 结束原因 | | | | | fold | 折叠区 | | | 配置界面语境:默认收起的字段分区(collapsed →「收起」)| | foreground run | 前台运行 | | | | diff --git a/docs/i18n/translation-rules.i18n.yaml b/docs/i18n/translation-rules.i18n.yaml index 358bd24fa3..eede2bb930 100644 --- a/docs/i18n/translation-rules.i18n.yaml +++ b/docs/i18n/translation-rules.i18n.yaml @@ -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 translation-rules.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 docs/i18n/translation-rules.md -translation-rules.md: f268a09cf02e1a079065441271ffb304eb81d3ee -translation-rules.zh.md: 7daa639ce390d109649f16edf6935d2d80edfbb4 +/translation-rules: + en: 3c1986ac40089c83 + zh: 77018b198ab87218 +/translation-rules/faithfulness: + en: 8ce28f619f598d6e + zh: 2d594d5c48dca50e +/translation-rules/voice: + en: 141f316ff4118081 + zh: ee7d3584c213cd00 +/translation-rules/structure-preservation: + en: 923089613a4d7ccb + zh: 69ee213924eef4f1 +/translation-rules/terminology: + en: f99cf0e192e4a77f + zh: 2a716cf90873fe1d +/translation-rules/typography: + en: f80b5b382300a979 + zh: eb5f4ec2808e7222 +/translation-rules/quality-bar: + en: f6220091b7ad5eed + zh: 5e62a15a87463672 +/translation-rules/references: + en: 31d651937c72a2c5 + zh: 54d424132cf6c4c9 diff --git a/docs/module-graph.i18n.yaml b/docs/module-graph.i18n.yaml index aef79e8af5..aaacb3c1c5 100644 --- a/docs/module-graph.i18n.yaml +++ b/docs/module-graph.i18n.yaml @@ -1,6 +1,10 @@ -# 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 module-graph.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 docs/module-graph.md -module-graph.md: 946692fd4b0528444391fca6aa8bffec46eb455c -module-graph.zh.md: 5048c2deab70b62ce9795dc7f6f9e14bae2ca732 +/: + en: 6b06a1af5ffbdefb + zh: 3718d990c23682de +/shared-instance-dependency-graph: + en: 01a7953b2e010af0 + zh: cc94c6ec51e5c1e0 diff --git a/docs/module-graph.md b/docs/module-graph.md index 946692fd4b..fdb697461a 100644 --- a/docs/module-graph.md +++ b/docs/module-graph.md @@ -1354,7 +1354,8 @@ flowchart TD pkg_subagent_dsh_sdk --> pkg_subprocess ``` -| Package | Group | Peer dependencies | + +| `package` | `group` | `peerDependencies` | | --- | --- | --- | | [`atomic-write`](../packages/util/atomic-write) | `util` | — | | [`brand`](../packages/util/brand) | `util` | — | @@ -1665,3 +1666,4 @@ flowchart TD | [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | | [`client-test-runtime`](../packages/test-support/client-runtime) | `test-support` | [`api-gateway`](../packages/api/gateway), [`api-session-controller`](../packages/api/session-controller), [`api-workspace-controller`](../packages/api/workspace-controller), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-hmr`](../packages/client/hmr), [`client-modules`](../packages/client/modules), [`client-store`](../packages/client/store), [`client-ui-chat`](../packages/client/ui-chat), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`client-web`](../packages/client/web), [`remote-mock`](../packages/test-support/remote-mock), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol) | | [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | `subagent` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`sdk-client`](../packages/sdk/client), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`subprocess`](../packages/subprocess/subprocess) | + diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md index 5048c2deab..22d75fe61c 100644 --- a/docs/module-graph.zh.md +++ b/docs/module-graph.zh.md @@ -1356,7 +1356,8 @@ flowchart TD pkg_subagent_dsh_sdk --> pkg_subprocess ``` -| 包 | 分组 | Peer 依赖 | + +| `package` | `group` | `peerDependencies` | | --- | --- | --- | | [`atomic-write`](../packages/util/atomic-write) | `util` | — | | [`brand`](../packages/util/brand) | `util` | — | @@ -1667,3 +1668,4 @@ flowchart TD | [`sdk-jsonrpc-server`](../packages/sdk/server) | `sdk` | [`agent`](../packages/core/agent), [`attachment`](../packages/attachment/attachment), [`llm`](../packages/llm/llm), [`llm-deepseek-api-key`](../packages/llm/llm-deepseek-api-key), [`scope`](../packages/core/scope), [`sdk-protocol`](../packages/sdk/protocol), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent) | | [`client-test-runtime`](../packages/test-support/client-runtime) | `test-support` | [`api-gateway`](../packages/api/gateway), [`api-session-controller`](../packages/api/session-controller), [`api-workspace-controller`](../packages/api/workspace-controller), [`attachment`](../packages/attachment/attachment), [`client-connection`](../packages/client/connection), [`client-hmr`](../packages/client/hmr), [`client-modules`](../packages/client/modules), [`client-store`](../packages/client/store), [`client-ui-chat`](../packages/client/ui-chat), [`client-ui-conversation`](../packages/client/ui-conversation), [`client-ui-renderer`](../packages/client/ui-renderer), [`client-ui-session`](../packages/client/ui-session), [`client-ui-settings`](../packages/client/ui-settings), [`client-ui-slots`](../packages/client/ui-slots), [`client-web`](../packages/client/web), [`remote-mock`](../packages/test-support/remote-mock), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`typert-protocol`](../packages/typert/protocol) | | [`subagent-dsh-sdk`](../packages/subagent/subagent-dsh-sdk) | `subagent` | [`agent`](../packages/core/agent), [`llm`](../packages/llm/llm), [`sdk-client`](../packages/sdk/client), [`session`](../packages/core/session), [`subagent`](../packages/subagent/subagent), [`subprocess`](../packages/subprocess/subprocess) | + diff --git a/docs/persistence-catalog.i18n.yaml b/docs/persistence-catalog.i18n.yaml index 500813ca2b..0eb4bb9107 100644 --- a/docs/persistence-catalog.i18n.yaml +++ b/docs/persistence-catalog.i18n.yaml @@ -1,6 +1,2056 @@ -# 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 persistence-catalog.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 docs/persistence-catalog.md -persistence-catalog.md: e654091bce16893d1d0121add5d83cba88ccf859 -persistence-catalog.zh.md: 744bc3e42db5ab98f9af3821a913f1d651cbd219 +/: + en: a11f106978c9dce7 + zh: a11f106978c9dce7 +/session-persistence-event-catalog: + en: e7c80d1de4d328b4 + zh: d9f368c27fd9f998 +/session-persistence-event-catalog/persistence-type-fingerprints: + en: 42ad01cbefcc0966 + zh: c21832fd903f4d6e +/session-persistence-event-catalog/event-envelope: + en: 7ebb1a2e0dd1f916 + zh: 8946f415dda5c1b8 +/session-persistence-event-catalog/events: + en: f4776ba3d0fd53ce + zh: e86769f50a69055a +/session-persistence-event-catalog/events/agent: + en: 9188862058c6986b + zh: 9188862058c6986b +/session-persistence-event-catalog/events/agent/agent-inbox-spliced-log-only: + en: bc3be962bc8738b1 + zh: e538aa8ff144468f +/session-persistence-event-catalog/events/agent-preset: + en: 49891ca9be5ac123 + zh: 49891ca9be5ac123 +/session-persistence-event-catalog/events/agent-preset/agent-preset-selected-log-only: + en: 0cb4079706a5395b + zh: 9f1a0d8564c54d98 +/session-persistence-event-catalog/events/approval: + en: 9d2ec4c4c3664b9f + zh: 9d2ec4c4c3664b9f +/session-persistence-event-catalog/events/approval/approval-asked-log-only: + en: 505ab9e383babcae + zh: f6b29ec434746160 +/session-persistence-event-catalog/events/approval/approval-decided-log-only: + en: 1e65aa4c24a595ee + zh: fe7f527c5e45d6a6 +/session-persistence-event-catalog/events/approval/approval-policy-log-only: + en: d520080fbb669b54 + zh: a4459a534c1c96c5 +/session-persistence-event-catalog/events/assistant: + en: 44426b6cd0dc01cf + zh: 44426b6cd0dc01cf +/session-persistence-event-catalog/events/assistant/assistant-attempt-log-only: + en: 6baf474f8c4a905e + zh: b92f1c041441ba98 +/session-persistence-event-catalog/events/assistant/assistant-message-surface: + en: 70721b64d98f892e + zh: ad5091727753c698 +/session-persistence-event-catalog/events/command: + en: 2cecb5b0ee955732 + zh: 2cecb5b0ee955732 +/session-persistence-event-catalog/events/command/command-done-log-only: + en: 1c5c463592a7efb8 + zh: cfe7affebc269a69 +/session-persistence-event-catalog/events/command/command-run-log-only: + en: c82cc66e4f05ee0a + zh: bfdba9f49baca386 +/session-persistence-event-catalog/events/compaction: + en: 880f15be2fc5852a + zh: 880f15be2fc5852a +/session-persistence-event-catalog/events/compaction/compaction-end-log-only: + en: ece48ed752df3e98 + zh: 3143dd8ca601b918 +/session-persistence-event-catalog/events/compaction/compaction-prune-log-only: + en: 4c30767cbce7c15a + zh: 3a4acbcb0e0eb85f +/session-persistence-event-catalog/events/compaction/compaction-start-log-only: + en: 5050e06fc9816475 + zh: 06ac4a38fb30c287 +/session-persistence-event-catalog/events/compaction/compaction-summary-log-only: + en: ed9405189dc8c5e6 + zh: f078e8d2cae4d0ca +/session-persistence-event-catalog/events/deliverables: + en: 501dcee7db8f8117 + zh: 501dcee7db8f8117 +/session-persistence-event-catalog/events/deliverables/deliverables-presented-log-only: + en: 55a7f405e7897e8a + zh: 566943cfd1abbe4a +/session-persistence-event-catalog/events/developer: + en: 3344204b1858edb1 + zh: 3344204b1858edb1 +/session-persistence-event-catalog/events/developer/developer-message-surface: + en: d1ef5d25c01a725e + zh: eea5a11e0c4516ee +/session-persistence-event-catalog/events/feedback: + en: f50dbac6867fa64d + zh: f50dbac6867fa64d +/session-persistence-event-catalog/events/feedback/feedback-message-delete-log-only: + en: 0edbee9488f7e7ca + zh: db9905ab91196000 +/session-persistence-event-catalog/events/feedback/feedback-message-put-log-only: + en: 538878b8565e6c85 + zh: 39a20bbf72813cff +/session-persistence-event-catalog/events/feedback/feedback-record-log-only: + en: 5cfdf53497a15afe + zh: 058207035184655d +/session-persistence-event-catalog/events/goal: + en: d990c355971ee24c + zh: d990c355971ee24c +/session-persistence-event-catalog/events/goal/goal-change-log-only: + en: 7e0afb095dd19448 + zh: 03f4adce713dc24a +/session-persistence-event-catalog/events/hook: + en: 8d6fa78d450a0e56 + zh: 8d6fa78d450a0e56 +/session-persistence-event-catalog/events/hook/hook-invoked-log-only: + en: 7e87780c1e9328b7 + zh: 79b535ed8a26bc4f +/session-persistence-event-catalog/events/hook/hook-result-log-only: + en: 5479d86486adbc40 + zh: b9df61258535c7da +/session-persistence-event-catalog/events/image: + en: 4378f94cd30a2ba8 + zh: 4378f94cd30a2ba8 +/session-persistence-event-catalog/events/image/image-offload-log-only: + en: 5b3bba4fc4261208 + zh: 6d5f536c3ca92710 +/session-persistence-event-catalog/events/llm: + en: 8a5c09e48ec0a6ae + zh: 8a5c09e48ec0a6ae +/session-persistence-event-catalog/events/llm/llm-retry-log-only: + en: a530fc0c1f664155 + zh: 227c8d6303e37c26 +/session-persistence-event-catalog/events/llm/llm-retry-started-log-only: + en: a2f8cab2fa650793 + zh: b0425971d17cf10c +/session-persistence-event-catalog/events/model: + en: 9edf4ef31e60e880 + zh: 9edf4ef31e60e880 +/session-persistence-event-catalog/events/model/model-selection-log-only: + en: ea963e9ec025c667 + zh: f6eea77d22442cd8 +/session-persistence-event-catalog/events/permission: + en: 19917bc5438e60af + zh: 19917bc5438e60af +/session-persistence-event-catalog/events/permission/permission-preset-log-only: + en: 41de5f6e1dad8620 + zh: 92cb5d5e87a23405 +/session-persistence-event-catalog/events/plan: + en: 4294f78d26ed985b + zh: 4294f78d26ed985b +/session-persistence-event-catalog/events/plan/plan-mode-log-only: + en: 9ae5537eeae238de + zh: 6be761c7fd83fdce +/session-persistence-event-catalog/events/request: + en: a8df82440ebdf5f8 + zh: a8df82440ebdf5f8 +/session-persistence-event-catalog/events/request/request-context-log-only: + en: e1a46fbd7273e666 + zh: e3390b27a540e353 +/session-persistence-event-catalog/events/request/request-header-log-only: + en: 897d315d9a0489d2 + zh: 98726636aa3c4ae1 +/session-persistence-event-catalog/events/sandbox: + en: ec841ab8439335b0 + zh: ec841ab8439335b0 +/session-persistence-event-catalog/events/sandbox/sandbox-mode-log-only: + en: a7d4d90d43861111 + zh: 2b87b4dcfe438bda +/session-persistence-event-catalog/events/schedule: + en: e5b55405bd2b69f5 + zh: e5b55405bd2b69f5 +/session-persistence-event-catalog/events/schedule/schedule-change-log-only: + en: 1d23d6738a98fbde + zh: 3da1dfebfe2f1d2e +/session-persistence-event-catalog/events/session: + en: a1ac8f2660a4f61e + zh: a1ac8f2660a4f61e +/session-persistence-event-catalog/events/session/session-end-seed-log-only: + en: 53b95ea8a0fd3bd5 + zh: c5a0d2f068637efa +/session-persistence-event-catalog/events/session/session-title-log-only: + en: 6c6a27578dff5828 + zh: 9a5add2bc0df2d0a +/session-persistence-event-catalog/events/session/session-title-llm-request-log-only: + en: 201b220320c466ab + zh: 2823df91f681793d +/session-persistence-event-catalog/events/session-log-deepseek: + en: 7b827672c80aecdd + zh: 7b827672c80aecdd +/session-persistence-event-catalog/events/session-log-deepseek/session-log-deepseek-delivery-accepted-log-only: + en: 4e9ce9182ec05808 + zh: 7f643a6756ec8f76 +/session-persistence-event-catalog/events/step: + en: bd0dcbbc352b771a + zh: bd0dcbbc352b771a +/session-persistence-event-catalog/events/step/step-end-log-only: + en: e24b5dd8b2b806aa + zh: a02bc5c3d7b07168 +/session-persistence-event-catalog/events/step/step-start-log-only: + en: 71b35276d634c512 + zh: b1b7f063cffac1de +/session-persistence-event-catalog/events/subagent: + en: 9630752e97ddbfbc + zh: 9630752e97ddbfbc +/session-persistence-event-catalog/events/subagent/subagent-catalog-log-only: + en: b0d8c66ca02aea4d + zh: 74adeca7962a61ed +/session-persistence-event-catalog/events/subagent/subagent-descriptor-log-only: + en: f5d53639dc5afdfc + zh: 8c553e7397d08832 +/session-persistence-event-catalog/events/subagent/subagent-model-selection-policy-log-only: + en: cdf085d18fae747a + zh: 83cd5cf56fef4050 +/session-persistence-event-catalog/events/system: + en: 8cac41d2fb575975 + zh: 8cac41d2fb575975 +/session-persistence-event-catalog/events/system/system-message-surface: + en: 59abc66d6a56e861 + zh: cc2d67c879079151 +/session-persistence-event-catalog/events/team: + en: a640800a38b3c874 + zh: a640800a38b3c874 +/session-persistence-event-catalog/events/team/team-member-log-only: + en: 7f6c8a45dc35091f + zh: 47060fd1344a5ea3 +/session-persistence-event-catalog/events/team/team-message-delivered-log-only: + en: 951c0d2655ede111 + zh: 05d5c77fc656b918 +/session-persistence-event-catalog/events/team/team-message-queued-log-only: + en: 02ac91734cd032da + zh: 91fae1059caa59b4 +/session-persistence-event-catalog/events/team/team-task-log-only: + en: ee2efdbe3f7b8978 + zh: a3829e506d9e81d1 +/session-persistence-event-catalog/events/todo: + en: 308d4bb4b6b96e35 + zh: 308d4bb4b6b96e35 +/session-persistence-event-catalog/events/todo/todo-write-log-only: + en: 371e378bc5dc27c3 + zh: 4e12a6d2ec1bd139 +/session-persistence-event-catalog/events/tool: + en: 28a24430609494b2 + zh: 28a24430609494b2 +/session-persistence-event-catalog/events/tool/tool-call-log-only: + en: 96cc0c05d3a2d01b + zh: f6f86d5bd29db6a5 +/session-persistence-event-catalog/events/tool/tool-ptc-dispatch-log-only: + en: 1c5fbea27fd81894 + zh: 0188fe2faf5b263c +/session-persistence-event-catalog/events/tool/tool-ptc-dispatch-start-log-only: + en: 14548299cbb98be3 + zh: 3b081f53e8591fc0 +/session-persistence-event-catalog/events/tool/tool-result-surface: + en: 2857bd718f6e7264 + zh: 61aac43cff6451b6 +/session-persistence-event-catalog/events/tool-workflow: + en: 1eac7deac6af15f3 + zh: 1eac7deac6af15f3 +/session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-end-log-only: + en: 77bc3650fec776c4 + zh: 423c11a52cb11e1a +/session-persistence-event-catalog/events/tool-workflow/tool-workflow-agent-start-log-only: + en: 8e131e9c8210d334 + zh: 65059ec0c2f5dc95 +/session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-end-log-only: + en: 7d4f9675b83814d3 + zh: 5bfd2fdd82b2f85d +/session-persistence-event-catalog/events/tool-workflow/tool-workflow-run-start-log-only: + en: b96c096b5ff3e03c + zh: ec6b06357cbc3398 +/session-persistence-event-catalog/events/turn: + en: d7e8c999a0851a0c + zh: d7e8c999a0851a0c +/session-persistence-event-catalog/events/turn/turn-end-log-only: + en: db0b56bc4d2959d1 + zh: 4587a42273da90d0 +/session-persistence-event-catalog/events/turn/turn-start-log-only: + en: 09ef649bb3c92015 + zh: 69244b81c8c1f614 +/session-persistence-event-catalog/events/user: + en: d864a88c03e8971c + zh: d864a88c03e8971c +/session-persistence-event-catalog/events/user/user-message-surface: + en: 6d302c03787ebb1f + zh: d53f597a8b651309 +/session-persistence-event-catalog/events/web: + en: d278748103cf1640 + zh: d278748103cf1640 +/session-persistence-event-catalog/events/web/web-deepseek-search-llm-request-log-only: + en: f12c598242992aa3 + zh: 08609553e15a91f3 +/session-persistence-event-catalog/events/workspace: + en: 63ee1a85e4b59ae3 + zh: 63ee1a85e4b59ae3 +/session-persistence-event-catalog/events/workspace/workspace-changes-log-only: + en: ee6b592f9e2193a7 + zh: 7a7a69ae52aa714a +/session-persistence-event-catalog/resolved-persistence-types: + en: 3493ecf0993e5397 + zh: ec95688f593a4ed4 +/session-persistence-event-catalog/resolved-persistence-types/aborted: + en: d716fb9ee9baa564 + zh: d716fb9ee9baa564 +/session-persistence-event-catalog/resolved-persistence-types/active: + en: 6b343e390ae7d7a7 + zh: 6b343e390ae7d7a7 +/session-persistence-event-catalog/resolved-persistence-types/after: + en: 5bb3dfb05cb37efb + zh: 5bb3dfb05cb37efb +/session-persistence-event-catalog/resolved-persistence-types/agent-instructions: + en: 2917a152adbe8256 + zh: 2917a152adbe8256 +/session-persistence-event-catalog/resolved-persistence-types/agent-message: + en: 81e342aa8769e5a9 + zh: 81e342aa8769e5a9 +/session-persistence-event-catalog/resolved-persistence-types/agent-preset-selected: + en: b3b528acadd04168 + zh: b3b528acadd04168 +/session-persistence-event-catalog/resolved-persistence-types/agent-inbox-spliced: + en: 8f6d91375141d923 + zh: 8f6d91375141d923 +/session-persistence-event-catalog/resolved-persistence-types/allowed-once: + en: 6c3effe2abc1aa53 + zh: 6c3effe2abc1aa53 +/session-persistence-event-catalog/resolved-persistence-types/always: + en: e318559064b455fb + zh: e318559064b455fb +/session-persistence-event-catalog/resolved-persistence-types/append: + en: 02f63fd38e94120b + zh: 02f63fd38e94120b +/session-persistence-event-catalog/resolved-persistence-types/approval-asked: + en: d44b6944cfd7fb6e + zh: d44b6944cfd7fb6e +/session-persistence-event-catalog/resolved-persistence-types/approval-decided: + en: b76aa7cbaf40ae93 + zh: b76aa7cbaf40ae93 +/session-persistence-event-catalog/resolved-persistence-types/approval-policy: + en: 8fa056f72e75785d + zh: 8fa056f72e75785d +/session-persistence-event-catalog/resolved-persistence-types/ask: + en: 03348e1de9c490b4 + zh: 03348e1de9c490b4 +/session-persistence-event-catalog/resolved-persistence-types/assistant: + en: 3463aef2d75fcd2b + zh: 3463aef2d75fcd2b +/session-persistence-event-catalog/resolved-persistence-types/assistant-attempt: + en: bab77f5188240971 + zh: bab77f5188240971 +/session-persistence-event-catalog/resolved-persistence-types/assistant-message: + en: 78cdcbc1f9150822 + zh: 78cdcbc1f9150822 +/session-persistence-event-catalog/resolved-persistence-types/at: + en: e9c7351a4bef61c2 + zh: e9c7351a4bef61c2 +/session-persistence-event-catalog/resolved-persistence-types/block: + en: e63bdf41a006d2bd + zh: e63bdf41a006d2bd +/session-persistence-event-catalog/resolved-persistence-types/block-end: + en: 222cd21c54458ff2 + zh: 222cd21c54458ff2 +/session-persistence-event-catalog/resolved-persistence-types/block-start: + en: 38537c1d5622fcba + zh: 38537c1d5622fcba +/session-persistence-event-catalog/resolved-persistence-types/blocked: + en: 28fefc908b5d7330 + zh: 28fefc908b5d7330 +/session-persistence-event-catalog/resolved-persistence-types/canceled: + en: ca11cf750de3da5f + zh: ca11cf750de3da5f +/session-persistence-event-catalog/resolved-persistence-types/cancelled: + en: 11b6cb6173f7188b + zh: 11b6cb6173f7188b +/session-persistence-event-catalog/resolved-persistence-types/catalog: + en: 594cca6fb38e6174 + zh: 594cca6fb38e6174 +/session-persistence-event-catalog/resolved-persistence-types/change: + en: fe91ec2f26aef57b + zh: fe91ec2f26aef57b +/session-persistence-event-catalog/resolved-persistence-types/chunk: + en: 491d3885b56f0ecd + zh: 491d3885b56f0ecd +/session-persistence-event-catalog/resolved-persistence-types/claude-code: + en: 6c96d71d5948c1fb + zh: 6c96d71d5948c1fb +/session-persistence-event-catalog/resolved-persistence-types/clear: + en: ae48fcd465c67547 + zh: ae48fcd465c67547 +/session-persistence-event-catalog/resolved-persistence-types/codex: + en: cd907982df03b4d9 + zh: cd907982df03b4d9 +/session-persistence-event-catalog/resolved-persistence-types/command-done: + en: 5f2dcf7e9c3787ab + zh: 5f2dcf7e9c3787ab +/session-persistence-event-catalog/resolved-persistence-types/command-run: + en: 7cab953688bc278a + zh: 7cab953688bc278a +/session-persistence-event-catalog/resolved-persistence-types/compact-checkpoint: + en: 90bf4683bc14e420 + zh: 90bf4683bc14e420 +/session-persistence-event-catalog/resolved-persistence-types/compaction-end: + en: f0f199460b4830b8 + zh: f0f199460b4830b8 +/session-persistence-event-catalog/resolved-persistence-types/compaction-prune: + en: 62e77f208ee6bfb3 + zh: 62e77f208ee6bfb3 +/session-persistence-event-catalog/resolved-persistence-types/compaction-start: + en: b36627755f067b37 + zh: b36627755f067b37 +/session-persistence-event-catalog/resolved-persistence-types/compaction-summary: + en: 2133eb81dd29f664 + zh: 2133eb81dd29f664 +/session-persistence-event-catalog/resolved-persistence-types/complete: + en: dd92732acbe2ec3a + zh: dd92732acbe2ec3a +/session-persistence-event-catalog/resolved-persistence-types/completed: + en: d93f8643892c6cfc + zh: d93f8643892c6cfc +/session-persistence-event-catalog/resolved-persistence-types/continuable: + en: 36e1cf82ed9683c4 + zh: 36e1cf82ed9683c4 +/session-persistence-event-catalog/resolved-persistence-types/cordis-host-runner: + en: 1139922866668927 + zh: 1139922866668927 +/session-persistence-event-catalog/resolved-persistence-types/create: + en: 43008071d7f2787a + zh: 43008071d7f2787a +/session-persistence-event-catalog/resolved-persistence-types/danger-full-access: + en: f7c17b7b2874f5f4 + zh: f7c17b7b2874f5f4 +/session-persistence-event-catalog/resolved-persistence-types/delegation: + en: d0f200fc842d9e7f + zh: d0f200fc842d9e7f +/session-persistence-event-catalog/resolved-persistence-types/delete: + en: 2e9a2d4dc600bd79 + zh: 2e9a2d4dc600bd79 +/session-persistence-event-catalog/resolved-persistence-types/deleted: + en: 5438fe40594dfb8c + zh: 5438fe40594dfb8c +/session-persistence-event-catalog/resolved-persistence-types/deliverables-presented: + en: bda51cbd520b2685 + zh: bda51cbd520b2685 +/session-persistence-event-catalog/resolved-persistence-types/developer: + en: 42389e30f99e210f + zh: 42389e30f99e210f +/session-persistence-event-catalog/resolved-persistence-types/developer-message: + en: e9a6abc2549ddf91 + zh: e9a6abc2549ddf91 +/session-persistence-event-catalog/resolved-persistence-types/dispatch: + en: aae8924fd5eb9013 + zh: aae8924fd5eb9013 +/session-persistence-event-catalog/resolved-persistence-types/disposed: + en: d951a060b1ab706f + zh: d951a060b1ab706f +/session-persistence-event-catalog/resolved-persistence-types/dsh-session-title-llm: + en: 96f8cc5bfe68cf1e + zh: 96f8cc5bfe68cf1e +/session-persistence-event-catalog/resolved-persistence-types/edit: + en: a08ecadc79d2d6d6 + zh: a08ecadc79d2d6d6 +/session-persistence-event-catalog/resolved-persistence-types/error: + en: 0a0098cf30464dcf + zh: 0a0098cf30464dcf +/session-persistence-event-catalog/resolved-persistence-types/every: + en: eeb0f1af5d02bc22 + zh: eeb0f1af5d02bc22 +/session-persistence-event-catalog/resolved-persistence-types/failed: + en: 43330e69d3defaab + zh: 43330e69d3defaab +/session-persistence-event-catalog/resolved-persistence-types/fallback: + en: 4c54ed9dd216101b + zh: 4c54ed9dd216101b +/session-persistence-event-catalog/resolved-persistence-types/feedback-message-delete: + en: ed322aeef9bb9337 + zh: ed322aeef9bb9337 +/session-persistence-event-catalog/resolved-persistence-types/feedback-message-put: + en: c8b4a15631542f0e + zh: c8b4a15631542f0e +/session-persistence-event-catalog/resolved-persistence-types/feedback-record: + en: 3b7dcd2661d75ae6 + zh: 3b7dcd2661d75ae6 +/session-persistence-event-catalog/resolved-persistence-types/file: + en: cdfea924b8acbc8b + zh: cdfea924b8acbc8b +/session-persistence-event-catalog/resolved-persistence-types/finish: + en: e0c84b3ca6c186d5 + zh: e0c84b3ca6c186d5 +/session-persistence-event-catalog/resolved-persistence-types/fork: + en: 00c5b9f8486d43c9 + zh: 00c5b9f8486d43c9 +/session-persistence-event-catalog/resolved-persistence-types/forked: + en: 29e44d39740419c3 + zh: 29e44d39740419c3 +/session-persistence-event-catalog/resolved-persistence-types/fresh: + en: cd0194228cfffc53 + zh: cd0194228cfffc53 +/session-persistence-event-catalog/resolved-persistence-types/goal: + en: cd3559a4804fcba8 + zh: cd3559a4804fcba8 +/session-persistence-event-catalog/resolved-persistence-types/goal-change: + en: 088434094948c287 + zh: 088434094948c287 +/session-persistence-event-catalog/resolved-persistence-types/hook: + en: eb614396259fcf54 + zh: eb614396259fcf54 +/session-persistence-event-catalog/resolved-persistence-types/hook-invoked: + en: b0ba67e95a5d640e + zh: b0ba67e95a5d640e +/session-persistence-event-catalog/resolved-persistence-types/hook-result: + en: a895d092b115882c + zh: a895d092b115882c +/session-persistence-event-catalog/resolved-persistence-types/hooks-claude-code: + en: 074796bd0f1328cb + zh: 074796bd0f1328cb +/session-persistence-event-catalog/resolved-persistence-types/hooks-codex: + en: b9715e7b4ae357fc + zh: b9715e7b4ae357fc +/session-persistence-event-catalog/resolved-persistence-types/image: + en: 9b99fe6cfcc45e10 + zh: 9b99fe6cfcc45e10 +/session-persistence-event-catalog/resolved-persistence-types/image-gif: + en: ad805a678a9b22fd + zh: ad805a678a9b22fd +/session-persistence-event-catalog/resolved-persistence-types/image-jpeg: + en: 7b931b249d35cc72 + zh: 7b931b249d35cc72 +/session-persistence-event-catalog/resolved-persistence-types/image-offload: + en: 7a35a9497208ecba + zh: 7a35a9497208ecba +/session-persistence-event-catalog/resolved-persistence-types/image-png: + en: fad80f6c2c280966 + zh: fad80f6c2c280966 +/session-persistence-event-catalog/resolved-persistence-types/image-webp: + en: 028791baa24a6a0a + zh: 028791baa24a6a0a +/session-persistence-event-catalog/resolved-persistence-types/in-history: + en: 81e6913fffa3c12a + zh: 806ed52e823cc08f +/session-persistence-event-catalog/resolved-persistence-types/in-progress: + en: 61de2b0c9de8c15b + zh: 61de2b0c9de8c15b +/session-persistence-event-catalog/resolved-persistence-types/initial: + en: 7bd0aa240f51541f + zh: 7bd0aa240f51541f +/session-persistence-event-catalog/resolved-persistence-types/instruction-following: + en: b434faee183024c4 + zh: b434faee183024c4 +/session-persistence-event-catalog/resolved-persistence-types/instructions: + en: 759b0bea643a3f2b + zh: 759b0bea643a3f2b +/session-persistence-event-catalog/resolved-persistence-types/interrupted: + en: 69a7a30a4e43ff35 + zh: 69a7a30a4e43ff35 +/session-persistence-event-catalog/resolved-persistence-types/legacy: + en: 1fc6c6420d6eb307 + zh: 1fc6c6420d6eb307 +/session-persistence-event-catalog/resolved-persistence-types/llm-retry: + en: 4a95312d3d196240 + zh: 4a95312d3d196240 +/session-persistence-event-catalog/resolved-persistence-types/llm-retry-started: + en: 3112837754975a3d + zh: 3112837754975a3d +/session-persistence-event-catalog/resolved-persistence-types/max-tokens: + en: d5ada3d6acfc416b + zh: d5ada3d6acfc416b +/session-persistence-event-catalog/resolved-persistence-types/model: + en: 723c81c82a20b283 + zh: 723c81c82a20b283 +/session-persistence-event-catalog/resolved-persistence-types/model-selection: + en: b7d9d333c28657df + zh: b7d9d333c28657df +/session-persistence-event-catalog/resolved-persistence-types/model-selection~2: + en: 1a41ceeedc2fb781 + zh: 1a41ceeedc2fb781 +/session-persistence-event-catalog/resolved-persistence-types/negative: + en: 7458f962f2b3807d + zh: 7458f962f2b3807d +/session-persistence-event-catalog/resolved-persistence-types/never: + en: 9dd78e376d79fce5 + zh: 9dd78e376d79fce5 +/session-persistence-event-catalog/resolved-persistence-types/next-step: + en: 94be52959bb8480d + zh: 94be52959bb8480d +/session-persistence-event-catalog/resolved-persistence-types/next-turn: + en: 3f8e2f458d4229de + zh: 3f8e2f458d4229de +/session-persistence-event-catalog/resolved-persistence-types/normal: + en: 005dea2ea78fc1d6 + zh: 005dea2ea78fc1d6 +/session-persistence-event-catalog/resolved-persistence-types/notice: + en: 00df59bcc5c6edbb + zh: 00df59bcc5c6edbb +/session-persistence-event-catalog/resolved-persistence-types/one-shot: + en: afd1613dd3d4da80 + zh: afd1613dd3d4da80 +/session-persistence-event-catalog/resolved-persistence-types/other: + en: 588a8f46adda6707 + zh: 588a8f46adda6707 +/session-persistence-event-catalog/resolved-persistence-types/parent: + en: 83af3e4fc9243790 + zh: 83af3e4fc9243790 +/session-persistence-event-catalog/resolved-persistence-types/pause: + en: 00b0fdde64967856 + zh: 00b0fdde64967856 +/session-persistence-event-catalog/resolved-persistence-types/paused: + en: 6dc555b1c5eeaa7c + zh: 6dc555b1c5eeaa7c +/session-persistence-event-catalog/resolved-persistence-types/pending: + en: fb56d51ac7afdf53 + zh: fb56d51ac7afdf53 +/session-persistence-event-catalog/resolved-persistence-types/permission-preset: + en: 94b174792f651370 + zh: 94b174792f651370 +/session-persistence-event-catalog/resolved-persistence-types/plan-mode: + en: 5d6a48242bde2682 + zh: 5d6a48242bde2682 +/session-persistence-event-catalog/resolved-persistence-types/plan-mode~2: + en: de774562ec890a6c + zh: de774562ec890a6c +/session-persistence-event-catalog/resolved-persistence-types/positive: + en: 2a01e347d9604ac6 + zh: 2a01e347d9604ac6 +/session-persistence-event-catalog/resolved-persistence-types/product-interaction: + en: 05fe435810456683 + zh: 05fe435810456683 +/session-persistence-event-catalog/resolved-persistence-types/provider: + en: 26661d2c01f6ccba + zh: 26661d2c01f6ccba +/session-persistence-event-catalog/resolved-persistence-types/provisioning: + en: df0da28d34d1a219 + zh: df0da28d34d1a219 +/session-persistence-event-catalog/resolved-persistence-types/ptc-mode: + en: 65ded8110df157f0 + zh: 65ded8110df157f0 +/session-persistence-event-catalog/resolved-persistence-types/read-only: + en: 4b925dedc53192ce + zh: 4b925dedc53192ce +/session-persistence-event-catalog/resolved-persistence-types/reasoning: + en: 910faceaca0ab4e3 + zh: 910faceaca0ab4e3 +/session-persistence-event-catalog/resolved-persistence-types/reasoning-chunks: + en: 1bb7173d90a130aa + zh: 1bb7173d90a130aa +/session-persistence-event-catalog/resolved-persistence-types/reasoning-delta: + en: 49351fa0be662888 + zh: 49351fa0be662888 +/session-persistence-event-catalog/resolved-persistence-types/recall: + en: 5c5a7a7e6517bdf0 + zh: 5c5a7a7e6517bdf0 +/session-persistence-event-catalog/resolved-persistence-types/rejected: + en: b982810b4d04978d + zh: b982810b4d04978d +/session-persistence-event-catalog/resolved-persistence-types/relay: + en: 0e06334d9bd4504d + zh: 0e06334d9bd4504d +/session-persistence-event-catalog/resolved-persistence-types/remove: + en: 6cd590cf8512cc5e + zh: 6cd590cf8512cc5e +/session-persistence-event-catalog/resolved-persistence-types/repeat-tool-reminder: + en: 2727d267683babd5 + zh: 2727d267683babd5 +/session-persistence-event-catalog/resolved-persistence-types/replace: + en: 90be60848afccb52 + zh: 90be60848afccb52 +/session-persistence-event-catalog/resolved-persistence-types/request-context: + en: fe34ed0bde832d9e + zh: fe34ed0bde832d9e +/session-persistence-event-catalog/resolved-persistence-types/request-header: + en: 334f58ec5e0835a3 + zh: 334f58ec5e0835a3 +/session-persistence-event-catalog/resolved-persistence-types/resource-cost: + en: ade80ed58d3b63b2 + zh: ade80ed58d3b63b2 +/session-persistence-event-catalog/resolved-persistence-types/resume: + en: e27772872766bd6d + zh: e27772872766bd6d +/session-persistence-event-catalog/resolved-persistence-types/runtime-context: + en: 784f0d4afdaaa472 + zh: 784f0d4afdaaa472 +/session-persistence-event-catalog/resolved-persistence-types/sandbox-mode: + en: a1db200a19cfa795 + zh: a1db200a19cfa795 +/session-persistence-event-catalog/resolved-persistence-types/schedule: + en: 08a38ae985857609 + zh: 08a38ae985857609 +/session-persistence-event-catalog/resolved-persistence-types/schedule-change: + en: ef03783c4ee6bb82 + zh: ef03783c4ee6bb82 +/session-persistence-event-catalog/resolved-persistence-types/security-privacy-permission: + en: 7f1202a519bfe629 + zh: 7f1202a519bfe629 +/session-persistence-event-catalog/resolved-persistence-types/series: + en: b3b186ace0571a3d + zh: b3b186ace0571a3d +/session-persistence-event-catalog/resolved-persistence-types/service-stability: + en: 976a231fef2d7833 + zh: 976a231fef2d7833 +/session-persistence-event-catalog/resolved-persistence-types/session: + en: 9d51b9c7435951b2 + zh: 9d51b9c7435951b2 +/session-persistence-event-catalog/resolved-persistence-types/session-log-deepseek-delivery-accepted: + en: 5e407647029b05dd + zh: 5e407647029b05dd +/session-persistence-event-catalog/resolved-persistence-types/session-reference: + en: 327b1b006be788bb + zh: 327b1b006be788bb +/session-persistence-event-catalog/resolved-persistence-types/session-end-seed: + en: 11d7c85934440b31 + zh: 11d7c85934440b31 +/session-persistence-event-catalog/resolved-persistence-types/session-title: + en: 62b8205afbee4ff1 + zh: 62b8205afbee4ff1 +/session-persistence-event-catalog/resolved-persistence-types/session-title-llm-request: + en: 1e5fb67af2382e55 + zh: 1e5fb67af2382e55 +/session-persistence-event-catalog/resolved-persistence-types/set: + en: b2a724cef8d97ef7 + zh: b2a724cef8d97ef7 +/session-persistence-event-catalog/resolved-persistence-types/skill-catalog: + en: 9483a26e4c21d639 + zh: 9483a26e4c21d639 +/session-persistence-event-catalog/resolved-persistence-types/skill-invocation: + en: 5d66ecf0027bdfbb + zh: 5d66ecf0027bdfbb +/session-persistence-event-catalog/resolved-persistence-types/snapshot: + en: e1786a57a7c40bf4 + zh: e1786a57a7c40bf4 +/session-persistence-event-catalog/resolved-persistence-types/step-end: + en: f7c2f7aa4107cd6f + zh: f7c2f7aa4107cd6f +/session-persistence-event-catalog/resolved-persistence-types/step-start: + en: 05a422497949089d + zh: 05a422497949089d +/session-persistence-event-catalog/resolved-persistence-types/stop: + en: a47689c9fcc1045c + zh: a47689c9fcc1045c +/session-persistence-event-catalog/resolved-persistence-types/subagent: + en: 8f1cd1eb572c9fc8 + zh: 8f1cd1eb572c9fc8 +/session-persistence-event-catalog/resolved-persistence-types/subagent-settled: + en: 50f7e0fd99eeed4c + zh: 50f7e0fd99eeed4c +/session-persistence-event-catalog/resolved-persistence-types/subagent-catalog: + en: 01d8ff1fa6b75417 + zh: 01d8ff1fa6b75417 +/session-persistence-event-catalog/resolved-persistence-types/subagent-descriptor: + en: e932f06c949f5f6c + zh: e932f06c949f5f6c +/session-persistence-event-catalog/resolved-persistence-types/subagent-model-selection-policy: + en: 25ccd80df944ac00 + zh: 25ccd80df944ac00 +/session-persistence-event-catalog/resolved-persistence-types/success: + en: 801923015f7dc7e4 + zh: 801923015f7dc7e4 +/session-persistence-event-catalog/resolved-persistence-types/system: + en: 62c9262fb0fe60b2 + zh: 62c9262fb0fe60b2 +/session-persistence-event-catalog/resolved-persistence-types/system-prompt: + en: 6e289deee6644b61 + zh: 6e289deee6644b61 +/session-persistence-event-catalog/resolved-persistence-types/system-message: + en: 8442f20011af77e3 + zh: 8442f20011af77e3 +/session-persistence-event-catalog/resolved-persistence-types/task-result: + en: 1fa929a15e4a96ea + zh: 1fa929a15e4a96ea +/session-persistence-event-catalog/resolved-persistence-types/team-message: + en: b2c69bdf83f09bdf + zh: b2c69bdf83f09bdf +/session-persistence-event-catalog/resolved-persistence-types/team-member: + en: 8cf0f09cbf885f71 + zh: 8cf0f09cbf885f71 +/session-persistence-event-catalog/resolved-persistence-types/team-message-delivered: + en: 6795a23aa9bc8d2e + zh: 6795a23aa9bc8d2e +/session-persistence-event-catalog/resolved-persistence-types/team-message-queued: + en: d683235390472024 + zh: d683235390472024 +/session-persistence-event-catalog/resolved-persistence-types/team-task: + en: f8a5fe2380e1a4c4 + zh: f8a5fe2380e1a4c4 +/session-persistence-event-catalog/resolved-persistence-types/text: + en: 20b696e15c9cf906 + zh: 20b696e15c9cf906 +/session-persistence-event-catalog/resolved-persistence-types/text-chunks: + en: f05e2c4e99d8fa22 + zh: f05e2c4e99d8fa22 +/session-persistence-event-catalog/resolved-persistence-types/text-delta: + en: 05970244a311504a + zh: 05970244a311504a +/session-persistence-event-catalog/resolved-persistence-types/time-context: + en: 39e4344458945026 + zh: 39e4344458945026 +/session-persistence-event-catalog/resolved-persistence-types/tmux-context: + en: 2223b9a0ed3505e6 + zh: 2223b9a0ed3505e6 +/session-persistence-event-catalog/resolved-persistence-types/todo-write: + en: a337e8788d500ab7 + zh: a337e8788d500ab7 +/session-persistence-event-catalog/resolved-persistence-types/tool: + en: 177128f47ebb1ed9 + zh: 177128f47ebb1ed9 +/session-persistence-event-catalog/resolved-persistence-types/tool-addition: + en: 39de02daa750e662 + zh: 39de02daa750e662 +/session-persistence-event-catalog/resolved-persistence-types/tool-call: + en: e383cf12143c901e + zh: e383cf12143c901e +/session-persistence-event-catalog/resolved-persistence-types/tool-call-chunks: + en: fc79be3c86da7ea2 + zh: fc79be3c86da7ea2 +/session-persistence-event-catalog/resolved-persistence-types/tool-call-delta: + en: ef2f63cbe02acf3f + zh: ef2f63cbe02acf3f +/session-persistence-event-catalog/resolved-persistence-types/tool-calls: + en: d1ed76228567acdc + zh: d1ed76228567acdc +/session-persistence-event-catalog/resolved-persistence-types/tool-goal: + en: 1b1e89a3225a6e1b + zh: 1b1e89a3225a6e1b +/session-persistence-event-catalog/resolved-persistence-types/tool-jobs: + en: f16a948d47528504 + zh: f16a948d47528504 +/session-persistence-event-catalog/resolved-persistence-types/tool-registry: + en: 9d867d1bd8b39a24 + zh: 9d867d1bd8b39a24 +/session-persistence-event-catalog/resolved-persistence-types/tool-removal: + en: 5c34a5c80ac2fc2c + zh: 5c34a5c80ac2fc2c +/session-persistence-event-catalog/resolved-persistence-types/tool-workflow-agent-end: + en: 2f748dc5ac5f1d00 + zh: 2f748dc5ac5f1d00 +/session-persistence-event-catalog/resolved-persistence-types/tool-workflow-agent-start: + en: 5b98a9c5d099b4ca + zh: 5b98a9c5d099b4ca +/session-persistence-event-catalog/resolved-persistence-types/tool-workflow-run-end: + en: 4ca5bfd22fbb8b61 + zh: 4ca5bfd22fbb8b61 +/session-persistence-event-catalog/resolved-persistence-types/tool-workflow-run-start: + en: 0502a869e1e3cb98 + zh: 0502a869e1e3cb98 +/session-persistence-event-catalog/resolved-persistence-types/tool-call~2: + en: dcd492c78cb8ce03 + zh: dcd492c78cb8ce03 +/session-persistence-event-catalog/resolved-persistence-types/tool-ptc-dispatch: + en: 0330aa2e380e5e26 + zh: 0330aa2e380e5e26 +/session-persistence-event-catalog/resolved-persistence-types/tool-ptc-dispatch-start: + en: b435db2043144ead + zh: b435db2043144ead +/session-persistence-event-catalog/resolved-persistence-types/tool-result: + en: 7c09d82526a56353 + zh: 7c09d82526a56353 +/session-persistence-event-catalog/resolved-persistence-types/turn-end: + en: 8f57c2c5c1d63d7b + zh: 8f57c2c5c1d63d7b +/session-persistence-event-catalog/resolved-persistence-types/turn-start: + en: 2b33625be57a224d + zh: 2b33625be57a224d +/session-persistence-event-catalog/resolved-persistence-types/unavailable: + en: c3e92ccf5aaedb84 + zh: c3e92ccf5aaedb84 +/session-persistence-event-catalog/resolved-persistence-types/unknown: + en: 0be808b8a5d831d7 + zh: 0be808b8a5d831d7 +/session-persistence-event-catalog/resolved-persistence-types/usage: + en: 1157f47210f114a3 + zh: 1157f47210f114a3 +/session-persistence-event-catalog/resolved-persistence-types/user: + en: f01476bd214bb78f + zh: f01476bd214bb78f +/session-persistence-event-catalog/resolved-persistence-types/user-approval: + en: 7c6de40d31cf20a5 + zh: 7c6de40d31cf20a5 +/session-persistence-event-catalog/resolved-persistence-types/user-message: + en: ecc3b25a07772288 + zh: ecc3b25a07772288 +/session-persistence-event-catalog/resolved-persistence-types/web-deepseek-search-llm-request: + en: 1b4a805f3d1632e6 + zh: 1b4a805f3d1632e6 +/session-persistence-event-catalog/resolved-persistence-types/web-search: + en: 5eedfe6714e3b5f9 + zh: 5eedfe6714e3b5f9 +/session-persistence-event-catalog/resolved-persistence-types/web-search-20250305: + en: a773058b4f0685f6 + zh: a773058b4f0685f6 +/session-persistence-event-catalog/resolved-persistence-types/webhook: + en: 390b9ebc0521ee93 + zh: 390b9ebc0521ee93 +/session-persistence-event-catalog/resolved-persistence-types/workspace-write: + en: a529f422b9889f7d + zh: a529f422b9889f7d +/session-persistence-event-catalog/resolved-persistence-types/workspace-changes: + en: 2ccca267c17d621a + zh: 2ccca267c17d621a +/session-persistence-event-catalog/resolved-persistence-types/0: + en: 8d5ca18b2abcd40e + zh: 8d5ca18b2abcd40e +/session-persistence-event-catalog/resolved-persistence-types/1: + en: 6884d3e0e7f31048 + zh: 6884d3e0e7f31048 +/session-persistence-event-catalog/resolved-persistence-types/2: + en: d462b9a5e0855776 + zh: d462b9a5e0855776 +/session-persistence-event-catalog/resolved-persistence-types/4: + en: 1be6fa10b6117b5c + zh: 1be6fa10b6117b5c +/session-persistence-event-catalog/resolved-persistence-types/afterschedulerecord: + en: fa6f933b0bd06745 + zh: b66de9881c47473e +/session-persistence-event-catalog/resolved-persistence-types/agentinstructionchange: + en: c79fd9b4b7a0a5ba + zh: d196895911636220 +/session-persistence-event-catalog/resolved-persistence-types/agentinstructionchange~2: + en: dba6b1babdde0cfe + zh: 99b209824b99b693 +/session-persistence-event-catalog/resolved-persistence-types/agentinstructionsource: + en: 4b46cc6c412c939d + zh: 77fc7f61972ab194 +/session-persistence-event-catalog/resolved-persistence-types/agentmessagesource: + en: 69385a93c3abf7f5 + zh: 0adbb7fd29dccb2e +/session-persistence-event-catalog/resolved-persistence-types/approvaloutcome: + en: bb7b3652609ac651 + zh: bdde4e652413c5eb +/session-persistence-event-catalog/resolved-persistence-types/approvalpolicy: + en: 670f484e05d50fa7 + zh: 7c107f338ea6cf81 +/session-persistence-event-catalog/resolved-persistence-types/assistantmessage: + en: 2a8bc13a30855b26 + zh: 87f1f5fd2882a411 +/session-persistence-event-catalog/resolved-persistence-types/assistantstreamrecord: + en: 144fc40c557c39fb + zh: 93edf73620f690bc +/session-persistence-event-catalog/resolved-persistence-types/assistantstreamrecord~2: + en: 92d1cfcb2e6460c7 + zh: 709b94be1f8b7270 +/session-persistence-event-catalog/resolved-persistence-types/atschedulerecord: + en: 8b2f283ddc7660ac + zh: f449d9579770fae3 +/session-persistence-event-catalog/resolved-persistence-types/commandsource: + en: 86c7e2b4ae099661 + zh: 2ffe1bd3f25b96fd +/session-persistence-event-catalog/resolved-persistence-types/compactioncheckpointsource: + en: 87f2aaf2b23a5249 + zh: 3d6c5ed6603bee31 +/session-persistence-event-catalog/resolved-persistence-types/contentblock: + en: e13fed596c512f6c + zh: 516df9e1d246151b +/session-persistence-event-catalog/resolved-persistence-types/contentblocktype: + en: 7569a19f6b02eaff + zh: aca4414298167b81 +/session-persistence-event-catalog/resolved-persistence-types/contentblock~2: + en: 9207aa0489ccf8db + zh: 850dd92da6769998 +/session-persistence-event-catalog/resolved-persistence-types/contextsnapshotsection: + en: 09c25cb603f1253e + zh: be9ac4ac394dc1fc +/session-persistence-event-catalog/resolved-persistence-types/contextsnapshotsection~2: + en: 6e11a7855b002f20 + zh: d752566bb2b75948 +/session-persistence-event-catalog/resolved-persistence-types/continuablesubagentdescriptordata: + en: 586743dfeab78c55 + zh: 26ccef4a02dd7a58 +/session-persistence-event-catalog/resolved-persistence-types/deepseeksearchllmrequest: + en: b3df6dce576b01a2 + zh: f9c67e338cc6e449 +/session-persistence-event-catalog/resolved-persistence-types/developermessage: + en: 3df6e6aaeb92c0fa + zh: 29988ebcdd9e62e1 +/session-persistence-event-catalog/resolved-persistence-types/epochheader: + en: d31020fa1fda6fa4 + zh: 77984c4bf09443fb +/session-persistence-event-catalog/resolved-persistence-types/everyscheduledispatchchange: + en: 89ddd311d931d6de + zh: 721587f81b40511b +/session-persistence-event-catalog/resolved-persistence-types/everyschedulerecord: + en: 936195016fec40d5 + zh: 60b2c64f544a2d2a +/session-persistence-event-catalog/resolved-persistence-types/feedbackrecord: + en: 3b6931556cfe6b9e + zh: ce5a5b1d92ce9eac +/session-persistence-event-catalog/resolved-persistence-types/fileattachmentref: + en: 0bf0caf488d14011 + zh: 734501852de79a21 +/session-persistence-event-catalog/resolved-persistence-types/fileblock: + en: 4cab6c6ed2abedd8 + zh: a6cdd344e6c36c24 +/session-persistence-event-catalog/resolved-persistence-types/finishreason: + en: a140f3c2ab4f213f + zh: 2d90532ca0327934 +/session-persistence-event-catalog/resolved-persistence-types/goalblockreason: + en: b1589f9578a585dd + zh: 3783dbbd8793bb37 +/session-persistence-event-catalog/resolved-persistence-types/goalchangemeta: + en: abeb64a4abb15503 + zh: 509bee62dbb91895 +/session-persistence-event-catalog/resolved-persistence-types/goalclearchangemeta: + en: 1b451369cc1c136a + zh: b52d9cba2858db17 +/session-persistence-event-catalog/resolved-persistence-types/goalmessagesource: + en: f9a3ed34f912bd19 + zh: 0905db374aa7ac83 +/session-persistence-event-catalog/resolved-persistence-types/goalphase: + en: 6b2f60724a155529 + zh: 72bd825dc2b2b0e5 +/session-persistence-event-catalog/resolved-persistence-types/goalref: + en: 11c28049de2f2f90 + zh: 9ba78901f200233c +/session-persistence-event-catalog/resolved-persistence-types/goalsnapshot: + en: 591bb793e7bfc74b + zh: 5c1347295621f142 +/session-persistence-event-catalog/resolved-persistence-types/goalsnapshotchangemeta: + en: d13de5c951afd4e5 + zh: 44069b6d0f3b8303 +/session-persistence-event-catalog/resolved-persistence-types/headerline: + en: 0228dc7dcff3ff5a + zh: bfab168767453f00 +/session-persistence-event-catalog/resolved-persistence-types/hookdialect: + en: c8420c48f6167ad9 + zh: a6dc3dc1ee50ea81 +/session-persistence-event-catalog/resolved-persistence-types/imageattachmentref: + en: 76ee1e266cd651da + zh: 55c7c95a223ccbed +/session-persistence-event-catalog/resolved-persistence-types/imageblock: + en: ccafbcae37570ce2 + zh: fbf43a8c7ff26154 +/session-persistence-event-catalog/resolved-persistence-types/imagemediatype: + en: 32d86426192176d5 + zh: c86291efc19bdc91 +/session-persistence-event-catalog/resolved-persistence-types/imageoffloadtarget: + en: 6e5b854c0ede1444 + zh: 648b5801868593cc +/session-persistence-event-catalog/resolved-persistence-types/imageoffloadtarget~2: + en: a3087ab7bebe9371 + zh: abf6afc2f9f5b692 +/session-persistence-event-catalog/resolved-persistence-types/inboxtarget: + en: 49855060f429f597 + zh: 19d1db4ab892ba44 +/session-persistence-event-catalog/resolved-persistence-types/jsonvalue: + en: c239aa9c90226c35 + zh: 3561e77832c7c8b5 +/session-persistence-event-catalog/resolved-persistence-types/jsonvalue~2: + en: 11f46fc45dcbe604 + zh: 2661bc7ebf7b6152 +/session-persistence-event-catalog/resolved-persistence-types/llmcallconfig: + en: aa3a91341bf04b9e + zh: d767b45d45846333 +/session-persistence-event-catalog/resolved-persistence-types/llmcallconfigadapterdefaults: + en: 5cdc7289f276f93e + zh: 11b399ac1a145e9c +/session-persistence-event-catalog/resolved-persistence-types/llmfailure: + en: a18d2091f7e64726 + zh: 550fc25036bd096e +/session-persistence-event-catalog/resolved-persistence-types/llmretryeventdata: + en: 6dbe099c62f7c226 + zh: 6fd788f63c038c91 +/session-persistence-event-catalog/resolved-persistence-types/llmretrystartedeventdata: + en: 7854b9694cc84c3a + zh: 319ec2e2e6ffdaec +/session-persistence-event-catalog/resolved-persistence-types/message: + en: 45a296c31664de87 + zh: 8f235285b2f985f9 +/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackdelete: + en: c582953270d4ca44 + zh: 966ccfe2e7660a2a +/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackitem: + en: f9754a7c755bca3a + zh: 9024f4911531c271 +/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackput: + en: f58575a1fc96df42 + zh: 9f0c6ed9033e5c9d +/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackrating: + en: 490a91f1da1fc870 + zh: 2f2b9e972e22d51f +/session-persistence-event-catalog/resolved-persistence-types/messagesource: + en: 7d0eda01d2c3076f + zh: ce3dbfc1bd7fd176 +/session-persistence-event-catalog/resolved-persistence-types/message~2: + en: 8e53b2a339808ffc + zh: d453e93e45f9e752 +/session-persistence-event-catalog/resolved-persistence-types/modelmessagesource: + en: 3b677f021d7dd4d3 + zh: 2a875742b22879a2 +/session-persistence-event-catalog/resolved-persistence-types/modelselection: + en: 771e9ab3e64076bc + zh: 30d5095a93549d55 +/session-persistence-event-catalog/resolved-persistence-types/oneshotscheduledispatchchange: + en: f96aaab863f77802 + zh: 3d6f70473794ee06 +/session-persistence-event-catalog/resolved-persistence-types/oneshotsubagentdescriptordata: + en: 9ba0cfd5ee9d6a38 + zh: 1414fd7468c42651 +/session-persistence-event-catalog/resolved-persistence-types/optionalsessionseq: + en: 7baa520fa984480e + zh: 6f809a83a720416d +/session-persistence-event-catalog/resolved-persistence-types/presentedfile: + en: 3e36e2f29ff1b506 + zh: 3dcc1a1dced59d9f +/session-persistence-event-catalog/resolved-persistence-types/presentedfile~2: + en: 45eec434ea27986c + zh: c8d52b34de4df04f +/session-persistence-event-catalog/resolved-persistence-types/ptcdispatcheventdata: + en: 78e72b973fe1c580 + zh: 9947fbdb2ad284d8 +/session-persistence-event-catalog/resolved-persistence-types/ptcdispatchstarteventdata: + en: 3e120cbeff3f99ac + zh: 19cf00f4b5ef2121 +/session-persistence-event-catalog/resolved-persistence-types/reasoningblock: + en: 07e04c3e336f880f + zh: 6f8986ede9994fa1 +/session-persistence-event-catalog/resolved-persistence-types/replayenvelope: + en: 6d1a36d68e868f6b + zh: 8a4235fb147cd8f4 +/session-persistence-event-catalog/resolved-persistence-types/requestcontext: + en: cc8bb7075d546941 + zh: 77209abf30744be0 +/session-persistence-event-catalog/resolved-persistence-types/requestheaderreason: + en: 93c4403f94ecdc14 + zh: 2b2eb0c400881d71 +/session-persistence-event-catalog/resolved-persistence-types/sandboxmode: + en: 15c400d874e75ff1 + zh: ebcd2df0ba05f0db +/session-persistence-event-catalog/resolved-persistence-types/schedulechange: + en: 6a8be1d4040fb88c + zh: fe5430a81d577932 +/session-persistence-event-catalog/resolved-persistence-types/schedulecreatechange: + en: 2ade6ccef730c278 + zh: 9fe4aec379fc45d9 +/session-persistence-event-catalog/resolved-persistence-types/scheduledeletechange: + en: 59231642e68b813a + zh: 80be1173e96d670f +/session-persistence-event-catalog/resolved-persistence-types/schedulerecord: + en: f9867069eed2d3fb + zh: 391a44aba281b0e4 +/session-persistence-event-catalog/resolved-persistence-types/sessionheader: + en: 0f60d736cd9d6c94 + zh: 205b8833a4efc5e5 +/session-persistence-event-catalog/resolved-persistence-types/sessionreferencesource: + en: 9a54c4478ad3b620 + zh: 02c4c1fd7e252770 +/session-persistence-event-catalog/resolved-persistence-types/sessiontitleeventdata: + en: 415ce281c096b4c3 + zh: 39c5bf9dfaa95579 +/session-persistence-event-catalog/resolved-persistence-types/sessiontitlellmrequesteventdata: + en: 0e539718e4bc8ed8 + zh: 060007f55759f065 +/session-persistence-event-catalog/resolved-persistence-types/sessiontitlemodelidentity: + en: 9531468264499498 + zh: 9da23c0ad2776563 +/session-persistence-event-catalog/resolved-persistence-types/sessiontitlemodelidentity~2: + en: 13de8e35b749db45 + zh: 01e4f3bcb6784fc8 +/session-persistence-event-catalog/resolved-persistence-types/sessiontitlesource: + en: 2642015fb4518c8c + zh: 152b294f41fbdcca +/session-persistence-event-catalog/resolved-persistence-types/skillcatalogsource: + en: 3e76d9f3d5bf82a0 + zh: fd037f5c12ee6330 +/session-persistence-event-catalog/resolved-persistence-types/skillinvocationsource: + en: ecc15ebadb77afdf + zh: 97ac27d6a4175f6f +/session-persistence-event-catalog/resolved-persistence-types/streamchunk: + en: 8682019620da1958 + zh: c4b8ba8f3c432194 +/session-persistence-event-catalog/resolved-persistence-types/subagentcatalogevent: + en: e9c8f82e0497e5a5 + zh: 55ab13b1a5067759 +/session-persistence-event-catalog/resolved-persistence-types/subagentdescriptordata: + en: c56821e57987ae9e + zh: 0364f59a472d51da +/session-persistence-event-catalog/resolved-persistence-types/subagentsettledmessagesource: + en: a5e19707264c7449 + zh: 4c619e931997d3f0 +/session-persistence-event-catalog/resolved-persistence-types/surfaceop: + en: 4f3349f21317ba18 + zh: 508c26670085953a +/session-persistence-event-catalog/resolved-persistence-types/systemmessage: + en: 94876079d6696df9 + zh: d25c7ad9f5054eb7 +/session-persistence-event-catalog/resolved-persistence-types/systempromptmessagesource: + en: a3eabd0e9fc565dd + zh: fa763aefdbc1bdb8 +/session-persistence-event-catalog/resolved-persistence-types/teammemberphase: + en: 5457d6872347310b + zh: e0d5946902c3e933 +/session-persistence-event-catalog/resolved-persistence-types/teammembersnapshot: + en: f6ee72fe168139ff + zh: d28586070ab7b118 +/session-persistence-event-catalog/resolved-persistence-types/teammessagesnapshot: + en: 31fb7e4f07b49012 + zh: 15fd933a217dadee +/session-persistence-event-catalog/resolved-persistence-types/teammessagesource: + en: 11bec13073c76f30 + zh: e90deecb47471c74 +/session-persistence-event-catalog/resolved-persistence-types/teamtasksnapshot: + en: 336a17d99a56859f + zh: 51c252b4f4add812 +/session-persistence-event-catalog/resolved-persistence-types/teamtaskstatus: + en: 498986242f41c79a + zh: 4d219bd7d9a3ac7c +/session-persistence-event-catalog/resolved-persistence-types/textblock: + en: c5fcd2cdd37ea387 + zh: 9c678fbdea0bf25c +/session-persistence-event-catalog/resolved-persistence-types/todoitem: + en: 06a9fe36dd3ff120 + zh: bf8f6fdeb666c1df +/session-persistence-event-catalog/resolved-persistence-types/todoitem~2: + en: 8bf023246cbd0887 + zh: dbf7113574c1bf59 +/session-persistence-event-catalog/resolved-persistence-types/tokenusage: + en: bdf729b844aa389c + zh: c086d4fbc87c79c0 +/session-persistence-event-catalog/resolved-persistence-types/tooladditionblock: + en: 7ba7c600fc529015 + zh: 94b69e9d5bd1fcfd +/session-persistence-event-catalog/resolved-persistence-types/toolcallblock: + en: 78482b09dc227306 + zh: fb5852ac93beb20e +/session-persistence-event-catalog/resolved-persistence-types/toolmessagesource: + en: 036b2595215410bb + zh: 41792808ebac1fa3 +/session-persistence-event-catalog/resolved-persistence-types/toolremovalblock: + en: f43a635a14568780 + zh: 8d22226b045122eb +/session-persistence-event-catalog/resolved-persistence-types/toolrestriction: + en: 6dfef3196845f287 + zh: cc9adf5c47cdea85 +/session-persistence-event-catalog/resolved-persistence-types/toolresultmessage: + en: 2258683c3cfa4ce3 + zh: 5663aa76c911761b +/session-persistence-event-catalog/resolved-persistence-types/toolschema: + en: 9c8dae9974f1670f + zh: f1f10c58059fc868 +/session-persistence-event-catalog/resolved-persistence-types/toolschema~2: + en: 12c14727bb7834e2 + zh: b0f3c877873c36db +/session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentenddata: + en: ac394442db02e075 + zh: 3782191860f095f1 +/session-persistence-event-catalog/resolved-persistence-types/toolworkflowagentstartdata: + en: b30d7b45639c4d48 + zh: 97cca691e6952c88 +/session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunenddata: + en: 4905fd20255fab76 + zh: 46ebc17868537607 +/session-persistence-event-catalog/resolved-persistence-types/toolworkflowrunstartdata: + en: 54090e169899c573 + zh: 530ea8d0d0f8cf68 +/session-persistence-event-catalog/resolved-persistence-types/turnendcancelcause: + en: 544292eddeff5faa + zh: 4e36e575a5030fb2 +/session-persistence-event-catalog/resolved-persistence-types/turnendreason: + en: 083f0fef130bb976 + zh: dafd261a95708bec +/session-persistence-event-catalog/resolved-persistence-types/usermessage: + en: 88b294a9b0bdf0e4 + zh: 0597f465b9d45b27 +/session-persistence-event-catalog/resolved-persistence-types/usermessage~2: + en: 31aaab9c9f53ed9c + zh: c5cd866b3f2b27e0 +/session-persistence-event-catalog/resolved-persistence-types/workflowagentoutcome: + en: d0a3f9aab18c3de5 + zh: 76ac69a835ca4e29 +/session-persistence-event-catalog/resolved-persistence-types/workflowstopreason: + en: a0d0018c68abc564 + zh: 299d86dbba56b528 +/session-persistence-event-catalog/resolved-persistence-types/boolean: + en: 40616917f0b8f9cc + zh: 40616917f0b8f9cc +/session-persistence-event-catalog/resolved-persistence-types/false: + en: 0e3a8e3c2c62bdd7 + zh: 0e3a8e3c2c62bdd7 +/session-persistence-event-catalog/resolved-persistence-types/never~2: + en: a35333b49c104e92 + zh: a35333b49c104e92 +/session-persistence-event-catalog/resolved-persistence-types/null: + en: bccefcfce00a211f + zh: bccefcfce00a211f +/session-persistence-event-catalog/resolved-persistence-types/number: + en: 5e7d82a493a1d4d8 + zh: d2d785891dd766fc +/session-persistence-event-catalog/resolved-persistence-types/number~2: + en: 38211d71372021e4 + zh: c0305af81a67e285 +/session-persistence-event-catalog/resolved-persistence-types/string: + en: 8f788be68a2720c8 + zh: 67ec07a9c8699f6f +/session-persistence-event-catalog/resolved-persistence-types/string~2: + en: 0089620bf4638263 + zh: 1922bef1713094bb +/session-persistence-event-catalog/resolved-persistence-types/true: + en: 56221be1d4f4a6a6 + zh: 56221be1d4f4a6a6 +/session-persistence-event-catalog/resolved-persistence-types/tuple-1-positions: + en: 8a9bdfde2d7290c9 + zh: adc940e2c6d6c543 +/session-persistence-event-catalog/resolved-persistence-types/tuple-1-positions~2: + en: 399ef28f15cf04c1 + zh: b5a628ec61a2184a +/session-persistence-event-catalog/resolved-persistence-types/tuple-1-positions~3: + en: d4d63e6e0832fd5b + zh: 3af90f9fc14f48da +/session-persistence-event-catalog/resolved-persistence-types/union-2-variants: + en: f692844b29923b2e + zh: 72f12bca08d63267 +/session-persistence-event-catalog/resolved-persistence-types/union-2-variants~2: + en: 69d360cf5a1ae6b4 + zh: f23faf39a2a0e6f1 +/session-persistence-event-catalog/resolved-persistence-types/union-2-variants~3: + en: 5a1af9849b0967ea + zh: 1085d793bbc47360 +/session-persistence-event-catalog/resolved-persistence-types/union-3-variants: + en: ab07ee7c506483d4 + zh: 299e31a106d93dfe +/session-persistence-event-catalog/resolved-persistence-types/union-3-variants~2: + en: faa507a889e1c476 + zh: b5f13f6f0590152f +/session-persistence-event-catalog/resolved-persistence-types/union-3-variants~3: + en: 5fc89a7ec1cecd78 + zh: dc66aa8e4aae1847 +/session-persistence-event-catalog/resolved-persistence-types/union-6-variants: + en: ca99faddb359b6bb + zh: 5c7ac9b445d9e5be +/session-persistence-event-catalog/resolved-persistence-types/union-7-variants: + en: 4641ec724d91ec15 + zh: b70cfb5803f630d1 +/session-persistence-event-catalog/resolved-persistence-types/unknown~2: + en: 4676bed983bd5a2f + zh: 6841261163f71033 +/session-persistence-event-catalog/resolved-persistence-types/unknown~3: + en: a74e3dfa51c987af + zh: 6c3c87974d7a7260 +/session-persistence-event-catalog/resolved-persistence-types/active~2: + en: c861888d6239b700 + zh: a9b2271d3c6b8737 +/session-persistence-event-catalog/resolved-persistence-types/agentpreset: + en: b8a0f8aac9708056 + zh: f5f004bd205b41e1 +/session-persistence-event-catalog/resolved-persistence-types/allowedmodels: + en: 6178321110ceb69d + zh: 0a9d94cab9d57487 +/session-persistence-event-catalog/resolved-persistence-types/args-commandid-name-source: + en: a117573a5d58cb3c + zh: d5ad59e17a3a815d +/session-persistence-event-catalog/resolved-persistence-types/arguments-callid-name-step: + en: bbb8322870e4695e + zh: dc90a029bf156604 +/session-persistence-event-catalog/resolved-persistence-types/callid-files-turn: + en: 5f4d3f66ed86a14d + zh: 7c729360fa1279e6 +/session-persistence-event-catalog/resolved-persistence-types/callid-id-reason-toolname: + en: 3d45df7b2e937457 + zh: 26060efd3e2f6320 +/session-persistence-event-catalog/resolved-persistence-types/capturedformatversion-capturedthroughseq-compacted-inputindex: + en: 4c4656bdb9474d3d + zh: 3585f5d187dcc494 +/session-persistence-event-catalog/resolved-persistence-types/capturedformatversion-capturedthroughseq-compacted-inputindex~2: + en: de1d59e9edd58a7d + zh: 0e29b8e80db664dc +/session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode: + en: 2ef977cb4a83bb0a + zh: 893fded259888650 +/session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~2: + en: 669e284c656449c7 + zh: e40ac8cb904bd983 +/session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~3: + en: 1dc667423caefb33 + zh: bd38fa2473673d14 +/session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~4: + en: dc8738014c719f4e + zh: c773fd60c0090231 +/session-persistence-event-catalog/resolved-persistence-types/childcreatedat-childid-label-mode~5: + en: 296001b5c7359a11 + zh: b5fdd40b7068497e +/session-persistence-event-catalog/resolved-persistence-types/code-name-reason: + en: 9615c513ac256ad8 + zh: a492b49c787d4549 +/session-persistence-event-catalog/resolved-persistence-types/commandid-kind-sourceeventseq-text: + en: 87b03e1c73d2a326 + zh: d7b9f06863cad891 +/session-persistence-event-catalog/resolved-persistence-types/compactionid-error-sourcecommandid-turn: + en: 96152fe81878819f + zh: 4500b4175f1a75f1 +/session-persistence-event-catalog/resolved-persistence-types/compactionid-llmstreamcall-maxtokens-model: + en: e09878c92be35a9e + zh: cfae949bc46d026a +/session-persistence-event-catalog/resolved-persistence-types/compactionid-maxtokens-model-provider: + en: 45f1d815198508e1 + zh: 5c2818b0e38e1356 +/session-persistence-event-catalog/resolved-persistence-types/compactionid-sourcecommandid-turn: + en: 4ba70efccc268763 + zh: 06ba9b3e824c80a7 +/session-persistence-event-catalog/resolved-persistence-types/decision-durationms-exitcode-handlerid: + en: ed8ca43bb7622393 + zh: 697e1ccbe9439aa9 +/session-persistence-event-catalog/resolved-persistence-types/delayms-failure-maxretries-mode: + en: 27987dc154def5d8 + zh: 7dd493f04daa654f +/session-persistence-event-catalog/resolved-persistence-types/delayms-failure-mode-policykey: + en: 10a2d594b106f6fe + zh: 8408379e744ad987 +/session-persistence-event-catalog/resolved-persistence-types/description-name: + en: 024bacc58243ccc7 + zh: 0672c4360841916f +/session-persistence-event-catalog/resolved-persistence-types/description-name~2: + en: a07969828eed2e6f + zh: e06893743af544b5 +/session-persistence-event-catalog/resolved-persistence-types/dialect-handlerid-matcher-point: + en: afb33a900f77ddf6 + zh: 90edc32643550430 +/session-persistence-event-catalog/resolved-persistence-types/end-start: + en: 4b7a8793663d3fef + zh: 249459c825d330c3 +/session-persistence-event-catalog/resolved-persistence-types/endseq-op-startseq: + en: ba27e6f100b73e81 + zh: 82a12774bf5611f8 +/session-persistence-event-catalog/resolved-persistence-types/error-kind-error: + en: b24398b25f46a94f + zh: 40640447d21ba296 +/session-persistence-event-catalog/resolved-persistence-types/error-message-meta-step: + en: 423077da59c080a5 + zh: ea8a92a786603279 +/session-persistence-event-catalog/resolved-persistence-types/failure-kind-aborted: + en: f0e715f0fdaf08fa + zh: ab28e85aad591d69 +/session-persistence-event-catalog/resolved-persistence-types/failure-kind-error: + en: 821ba2489295bff5 + zh: b5682cea9895aff7 +/session-persistence-event-catalog/resolved-persistence-types/header-reason-startsseries: + en: 62ca405eba4d2757 + zh: c6a8861533363ae9 +/session-persistence-event-catalog/resolved-persistence-types/headerseq-message-step-turn: + en: 76e7be9a80a4082c + zh: c06aaa42a8488aea +/session-persistence-event-catalog/resolved-persistence-types/height-width: + en: a5df50710083ac25 + zh: aad3ccf6f6de70e4 +/session-persistence-event-catalog/resolved-persistence-types/id-outcome: + en: 6a4a45ec415442ee + zh: 360f6ed2f30d16b1 +/session-persistence-event-catalog/resolved-persistence-types/ignorable-seq-sourceeventseqs-surfaceop: + en: 26ee37a85c770942 + zh: 0ae916ed57cb8470 +/session-persistence-event-catalog/resolved-persistence-types/ignorable-seq-surfaceop-time: + en: 71fbaa763cbae723 + zh: 4ec1ad349994b1cc +/session-persistence-event-catalog/resolved-persistence-types/ignorable-seq-time-type: + en: 41f73c58a77dfa28 + zh: af77f4aee3cb4a40 +/session-persistence-event-catalog/resolved-persistence-types/inherited: + en: f538b60f99becc0a + zh: 0c8efa059a1e6569 +/session-persistence-event-catalog/resolved-persistence-types/inserted-outcome-removedcount-start: + en: 3985827b3ead1d92 + zh: c535166ccae6c8a3 +/session-persistence-event-catalog/resolved-persistence-types/interrupted-message-step-stream: + en: f460572284c92755 + zh: bae7561ce887b040 +/session-persistence-event-catalog/resolved-persistence-types/kind-aborted-reason: + en: c7755cbd343d67ee + zh: e00a7477cd664cb5 +/session-persistence-event-catalog/resolved-persistence-types/kind-blocked: + en: 46465e6fa6292ec3 + zh: b8ed143600bf51d2 +/session-persistence-event-catalog/resolved-persistence-types/kind-completed: + en: 2f3ffb879c568b64 + zh: ffc7d0f2b64494fc +/session-persistence-event-catalog/resolved-persistence-types/kind-cordis-host-runner: + en: fb7b8207a6ef3b81 + zh: 9d6f112181d90701 +/session-persistence-event-catalog/resolved-persistence-types/kind-disposed: + en: 70d5bdb48ced0ea9 + zh: fc950fee2c166ff0 +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm: + en: 428529e5dedc761d + zh: 3ca0b54c9c521ea0 +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-catalog: + en: cdfb0eb31ef0d09b + zh: 414343b77acf9420 +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-instructions: + en: 49e11fba42b43286 + zh: b1ba49504fbad67b +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-notice: + en: c06edb76106d154b + zh: 2548300ec417f887 +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-recall: + en: 22f8d8163871b64c + zh: 3786a2304b51637f +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-relay: + en: 6f35856ebaec9add + zh: 605b9489095fe691 +/session-persistence-event-catalog/resolved-persistence-types/kind-dsh-session-title-llm-form-snapshot: + en: 29c21a6572c4e3e9 + zh: f107d7c6342ae5d0 +/session-persistence-event-catalog/resolved-persistence-types/kind-fallback: + en: 78e34e6d0d70339e + zh: 072127e40cfb9686 +/session-persistence-event-catalog/resolved-persistence-types/kind-forked: + en: 4b299abd1cf27c78 + zh: dce75fa13b690720 +/session-persistence-event-catalog/resolved-persistence-types/kind-hook: + en: 965c99cedd28afdf + zh: 15d8f9991883bd5c +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code: + en: 5eb383a67f11ac4d + zh: 1943747cb4995dbc +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-catalog: + en: 5206015bc8cb2e58 + zh: 032fa4649c29f2ae +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-instructions: + en: ebe8bbd75879dfca + zh: 3e08ea5df6ab219b +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-notice: + en: f6d4afa6baac103f + zh: 30e58f34f78c219d +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-recall: + en: 260e0af8fa0d91ed + zh: bcee5e2053027ece +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-relay: + en: 6304e01a4cdec984 + zh: 68fb2ca271bbd81d +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-claude-code-form-snapshot: + en: 8a7bdd082dba74aa + zh: 2375f4e32d418865 +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex: + en: fb9e9ace035356cf + zh: 5952cd2da42b9f5d +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-catalog: + en: f6ae10ada8bc08a7 + zh: fd53a8532de4e9ad +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-instructions: + en: d1c3f4c69e409b0a + zh: e4b1ea8c0b1121f8 +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-notice: + en: 4b0b9a6b6c1d1b16 + zh: 9f7606ce4d7a8601 +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-recall: + en: c74b6a99e0ad7c3d + zh: e200d431273c7a15 +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-relay: + en: b6dbe8e8ef702fe0 + zh: 7cc57b8693014b74 +/session-persistence-event-catalog/resolved-persistence-types/kind-hooks-codex-form-snapshot: + en: a8a338be3b91008f + zh: c7632c42c869c2f6 +/session-persistence-event-catalog/resolved-persistence-types/kind-interrupted: + en: 9e87f168b322c617 + zh: bf81e0aa69f46c08 +/session-persistence-event-catalog/resolved-persistence-types/kind-legacy: + en: 7c000bffbf0c567e + zh: b3210306a125820b +/session-persistence-event-catalog/resolved-persistence-types/kind-max-tokens: + en: 1fb4225e5c5c6384 + zh: 3489785e7ae800f5 +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection: + en: a5165486dca91116 + zh: b7051ca8167806ef +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-catalog: + en: dd432676fbcba942 + zh: 38a5c6034bd3e629 +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-instructions: + en: bb7cf248109992fd + zh: cbd1cc7828e9bfc9 +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-notice: + en: 612c3b04c531c53e + zh: 9c179451d0e173a4 +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-recall: + en: 83d8777832b56127 + zh: 2e0d2269a0c3f29c +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-relay: + en: 3c986a3b9cbc4f95 + zh: 875bc0c6d786f80e +/session-persistence-event-catalog/resolved-persistence-types/kind-model-selection-form-snapshot: + en: 509f9a91aedb2da1 + zh: db1071678bfb98d1 +/session-persistence-event-catalog/resolved-persistence-types/kind-parent: + en: 96dec53b9a43815a + zh: 4163af6bc636ecc9 +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode: + en: 9758304800b717df + zh: dccf14f3a5d0d861 +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-catalog: + en: c5a151c1ccb46166 + zh: 551f16f7d4b7296e +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-instructions: + en: 06920963b68fab5a + zh: 94745adfe1129b6e +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-notice: + en: e4a6a5e445dca980 + zh: 32a5f60a568b0a11 +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-recall: + en: cd76d44e4cfb08b6 + zh: c7670514ba75110a +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-relay: + en: 82227ec9729e2a94 + zh: 72fbb89e9ec9123f +/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-snapshot: + en: 4271e26aca9e9bf8 + zh: 288e9cd452a9eee3 +/session-persistence-event-catalog/resolved-persistence-types/kind-provider: + en: c53129cf7214286c + zh: 8c5183b6dabbf714 +/session-persistence-event-catalog/resolved-persistence-types/kind-ptc-mode: + en: 26b3b9239392dcc9 + zh: f4c6c0195c9119fc +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder: + en: e3a0ef98a197374e + zh: 95e9363529a62cc3 +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-catalog: + en: 38a96f5c2ac235db + zh: f7a75eeb6953600f +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-instructions: + en: acea1da45598b823 + zh: dd6c888d3ed3f484 +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-notice: + en: 07cefa370e5958b0 + zh: eec410ede7aa67c7 +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-recall: + en: bd47aa796529fd0c + zh: 256ad5e3b1fec3cf +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-relay: + en: 1f6dbdbf5d923df0 + zh: aea576e5ec34c0fc +/session-persistence-event-catalog/resolved-persistence-types/kind-repeat-tool-reminder-form-snapshot: + en: e9c88cceef2d8432 + zh: 14fb0897543b6960 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context: + en: 68b5598e21cf8ba2 + zh: 95ef1685af64a5f4 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-catalog: + en: 7becd2b43cd3288a + zh: ad05deb1235c4a47 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-instructions: + en: 6685d97e7aba5961 + zh: 834945f4240c3948 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-notice: + en: 62f2b5a8999cef36 + zh: a9c2a2082b984ba1 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-recall: + en: 3a81b593682bdba3 + zh: 7d6c27f1c0096724 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-relay: + en: 6d2e8e4d36e7f744 + zh: 9e2f73bdb0aa2863 +/session-persistence-event-catalog/resolved-persistence-types/kind-runtime-context-form-snapshot: + en: d9260b0bd7aeb3ab + zh: 2c416cc6fba491e3 +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule: + en: 3fc00c80aca5abbf + zh: dc3a14c9fb5aadf4 +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-catalog: + en: 686cf375c39f171f + zh: 21a74f6f25e827bc +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-instructions: + en: aeb6881c08577c04 + zh: 848500f178537176 +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-notice: + en: b8a35d7ae1898aaf + zh: 75c7a43de8322e6f +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-recall: + en: acd0fbf85ff2805b + zh: fddb63eb00a2db47 +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-relay: + en: 5edd4c65e880e092 + zh: b508d6411b8ea636 +/session-persistence-event-catalog/resolved-persistence-types/kind-schedule-form-snapshot: + en: c99d8a67438771ff + zh: 070f6160fc419fa5 +/session-persistence-event-catalog/resolved-persistence-types/kind-stop: + en: 01db92f4780227c2 + zh: e04e2eeb4af38d5c +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context: + en: 5733addfc8b12a47 + zh: aaf60d5396e30971 +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-catalog: + en: cb4f0a688a7f7bb4 + zh: 5d3b535a63a222ae +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-instructions: + en: f1926bf4b6b2a544 + zh: f3aba776c5d18632 +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-notice: + en: 12f8785e5e352d03 + zh: 680a9f01709aef60 +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-recall: + en: 09edb8d3bcbbe5f5 + zh: d6725e080f074d66 +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-relay: + en: 826f9e0ca9e4ac9f + zh: e579306d19b75295 +/session-persistence-event-catalog/resolved-persistence-types/kind-time-context-form-snapshot: + en: d234ce9da6c0eceb + zh: ae961482f41dc0bc +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context: + en: 50e59709e9369d1b + zh: 330dde38ce176da0 +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-catalog: + en: a722628c897868b5 + zh: f3983b85130c2ad3 +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-instructions: + en: 8591cbd7356d980d + zh: 0e6b77311f873e78 +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-notice: + en: f80004c29f49e4d0 + zh: 0efe5b71f2f6980e +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-recall: + en: ac1b388a86958377 + zh: 3bad017fda6ef3ec +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-relay: + en: cf9fa9b1d333d34c + zh: aa55aaf7d02c8176 +/session-persistence-event-catalog/resolved-persistence-types/kind-tmux-context-form-snapshot: + en: b05115b92a176f3a + zh: 22ba93572bd0209a +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-calls: + en: d09c7fcfd1693606 + zh: a04e0bd15f5b87ea +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal: + en: e11ea3169004ae33 + zh: 7d6a3a77cb9bf205 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-catalog: + en: 4f70cc26febdac50 + zh: 60dbbafb401c745e +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-instructions: + en: 913ffe53fb26a608 + zh: 93b6c9f6d8f29fa8 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-notice: + en: d9c3ea7043235401 + zh: 361dd1b2d359378b +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-recall: + en: 1b072e30c0e3a924 + zh: 39e83f32e2d4a2f0 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-relay: + en: 874e9ec8cf567c98 + zh: e82eb3200390af77 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-goal-form-snapshot: + en: bbf2d822dfdaa6d9 + zh: 2aacf47ccd999f90 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs: + en: 66016c42d8e8dbde + zh: eb068cdc630d06ba +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-catalog: + en: 83109bb14c8c74df + zh: f15c86fedef3d7c5 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-instructions: + en: 71e1b8f88acaf31b + zh: c003019046a58b51 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-notice: + en: aaf85dfdcdbb44ae + zh: 9209ba3d4a97486d +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-recall: + en: a46f2426b03f4abb + zh: 3bb050978e7d3d4a +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-relay: + en: dbc0e6954d530af8 + zh: 40da42e3d6102d48 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-jobs-form-snapshot: + en: 08be4349548406a9 + zh: 8e7cf9966198ef78 +/session-persistence-event-catalog/resolved-persistence-types/kind-tool-registry: + en: 77a2e15c8413b18c + zh: 91d39eed9dfd96d1 +/session-persistence-event-catalog/resolved-persistence-types/kind-user: + en: aacb77f1cead58ba + zh: e6ce9dac4bdd07b7 +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval: + en: a52d2dfbaf844127 + zh: 4c5306ca40f20873 +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-catalog: + en: 15880353827a9046 + zh: df49ad5f8be28fea +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-instructions: + en: d2b2165d470e054b + zh: b5941b1c629aa599 +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-notice: + en: e191c2d5d5af1b9f + zh: bb7ed7cd5e7c632d +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-recall: + en: b40dd2e0349f505e + zh: 107702fb83032167 +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-relay: + en: eaffa616c5b9dc9a + zh: 2eb138fcf5936e20 +/session-persistence-event-catalog/resolved-persistence-types/kind-user-approval-form-snapshot: + en: 58c4ff5b5d70cc02 + zh: 080be72a31b3205e +/session-persistence-event-catalog/resolved-persistence-types/kind-webhook-form-notice: + en: 4cd5dc7523fefebb + zh: f467561fbd0ae394 +/session-persistence-event-catalog/resolved-persistence-types/max-tokens-messages-model-tools: + en: afedf4a31a67eb14 + zh: 98d3bc882f2b61c3 +/session-persistence-event-catalog/resolved-persistence-types/member-teamid-version: + en: a0a3339a63f2bc4f + zh: fd6512ef11c36bde +/session-persistence-event-catalog/resolved-persistence-types/message-step-turn: + en: 7cc30865737643f2 + zh: 512c6c81ed10a9b6 +/session-persistence-event-catalog/resolved-persistence-types/message-teamid-version: + en: 7960b689af537cf6 + zh: e5b044052e009a98 +/session-persistence-event-catalog/resolved-persistence-types/messageid-targetid-teamid-version: + en: 22665480d164fdc7 + zh: aa2c96be4a4fe468 +/session-persistence-event-catalog/resolved-persistence-types/mode-source: + en: 3028b222670ce5ad + zh: cae4c9437e560d61 +/session-persistence-event-catalog/resolved-persistence-types/policy-source: + en: 00f1d435f82d2753 + zh: c2ab108ad2748a6c +/session-persistence-event-catalog/resolved-persistence-types/preset: + en: f60ecbd156c6f063 + zh: c9149679bbacff21 +/session-persistence-event-catalog/resolved-persistence-types/reason-turn: + en: 168c2ac7db7371b4 + zh: f851223c95582eb9 +/session-persistence-event-catalog/resolved-persistence-types/role-user: + en: 04b34b8ffe7e7764 + zh: a792d5371516fd9d +/session-persistence-event-catalog/resolved-persistence-types/sessionformatversion-sessionid-throughseq: + en: 8aaa02b06896492d + zh: 4dd0e1ee40d8f22d +/session-persistence-event-catalog/resolved-persistence-types/shadowedrange-shadowedseqs-shadowedtokencount: + en: 7a2ab7b62244f43b + zh: 1084e3f8876feebc +/session-persistence-event-catalog/resolved-persistence-types/step-stream-turn: + en: 9d436c515695f35d + zh: 247a7c0bb24337d3 +/session-persistence-event-catalog/resolved-persistence-types/step-turn: + en: 6c9cd916657e052e + zh: ed60789608cee181 +/session-persistence-event-catalog/resolved-persistence-types/targets: + en: 5360af614fe753e3 + zh: 96427c489cc71de6 +/session-persistence-event-catalog/resolved-persistence-types/task-teamid-version: + en: bc6a4d5b483d4845 + zh: 839703c23f628d6b +/session-persistence-event-catalog/resolved-persistence-types/todos: + en: 06e6c1837e2b5d50 + zh: 37cebfe3e41294ec +/session-persistence-event-catalog/resolved-persistence-types/turn: + en: a79b2ab16b9ed215 + zh: 764cd1400ee8db63 +/session-persistence-event-catalog/resolved-persistence-types/type-agent-preset-selected: + en: d59bb505610b862f + zh: e2637fbbb8365bdf +/session-persistence-event-catalog/resolved-persistence-types/type-agent-inbox-spliced: + en: 109d942de30d9227 + zh: 6c6fc06634ad7945 +/session-persistence-event-catalog/resolved-persistence-types/type-approval-asked: + en: 9c77f18b0dad22f0 + zh: 8894cf2878fe90db +/session-persistence-event-catalog/resolved-persistence-types/type-approval-decided: + en: 5ded6f8ecbb0bc7d + zh: 0165bc0d0f247f74 +/session-persistence-event-catalog/resolved-persistence-types/type-approval-policy: + en: 93fd7b4fd905626a + zh: fce49536f66811a6 +/session-persistence-event-catalog/resolved-persistence-types/type-assistant-attempt: + en: ef1ac690c3017dd1 + zh: b0286eb153ca853c +/session-persistence-event-catalog/resolved-persistence-types/type-assistant-message: + en: bb507524bcc39c53 + zh: 8314898562437473 +/session-persistence-event-catalog/resolved-persistence-types/type-block-end: + en: 51aab19ee8c0d679 + zh: 1a6b88cf5a137de4 +/session-persistence-event-catalog/resolved-persistence-types/type-block-start: + en: 239cf3971f4cfc3f + zh: 0da0583120e7f271 +/session-persistence-event-catalog/resolved-persistence-types/type-chunk: + en: 2186ede3e9917aea + zh: 0cfef64045dce95b +/session-persistence-event-catalog/resolved-persistence-types/type-command-done: + en: 1a28f9fcd1818880 + zh: 6d1ed0ec06272e65 +/session-persistence-event-catalog/resolved-persistence-types/type-command-run: + en: d34d5e34ca1df11f + zh: cfe60f3974e0a6f3 +/session-persistence-event-catalog/resolved-persistence-types/type-compaction-end: + en: 4fe43b168566ae84 + zh: 1a041890f87409f3 +/session-persistence-event-catalog/resolved-persistence-types/type-compaction-prune: + en: 65d2a09449403f70 + zh: 7aa4063a4f997092 +/session-persistence-event-catalog/resolved-persistence-types/type-compaction-start: + en: 184ea1eef46cb0cc + zh: ad2a7b77040a0448 +/session-persistence-event-catalog/resolved-persistence-types/type-compaction-summary: + en: ba73fb10b7e2ffc9 + zh: 8d5c97e63e5f16da +/session-persistence-event-catalog/resolved-persistence-types/type-deliverables-presented: + en: 49de6f547778d916 + zh: ce2a1af1ae934f68 +/session-persistence-event-catalog/resolved-persistence-types/type-developer-message: + en: 686d26ced9945d4b + zh: 535b9e92eb7535fb +/session-persistence-event-catalog/resolved-persistence-types/type-feedback-message-delete: + en: 204561e2311db97e + zh: 77264396bd5e25c4 +/session-persistence-event-catalog/resolved-persistence-types/type-feedback-message-put: + en: f79ad008869ca3ba + zh: 1bef5b4e99d80a35 +/session-persistence-event-catalog/resolved-persistence-types/type-feedback-record: + en: 14e4b48d856bcf57 + zh: 72ba176535dc7f3f +/session-persistence-event-catalog/resolved-persistence-types/type-finish: + en: b3add00734cb9911 + zh: 377548efe8ef9a31 +/session-persistence-event-catalog/resolved-persistence-types/type-goal-change: + en: aad2516b62d3ee83 + zh: e7204c4dc4e8e408 +/session-persistence-event-catalog/resolved-persistence-types/type-hook-invoked: + en: 842db5f476294b7c + zh: d32a12954b73ef9a +/session-persistence-event-catalog/resolved-persistence-types/type-hook-result: + en: 8b523e0be5327519 + zh: 86ec891087b8bf24 +/session-persistence-event-catalog/resolved-persistence-types/type-image-offload: + en: 06230b6290fa9826 + zh: 11930bfa355b70fa +/session-persistence-event-catalog/resolved-persistence-types/type-llm-retry: + en: 6d026baeac30a0f1 + zh: 55131683e3d5ed27 +/session-persistence-event-catalog/resolved-persistence-types/type-llm-retry-started: + en: c0ad371b1f636530 + zh: 6b79634088e8d9da +/session-persistence-event-catalog/resolved-persistence-types/type-model-selection: + en: 0c6a1ef6a38ac10b + zh: 0522b4477e992088 +/session-persistence-event-catalog/resolved-persistence-types/type-permission-preset: + en: 965e836b012404b3 + zh: 0ab923cc8a41e7f2 +/session-persistence-event-catalog/resolved-persistence-types/type-plan-mode: + en: 8cfacba0b814f1aa + zh: a9ee7804452fef23 +/session-persistence-event-catalog/resolved-persistence-types/type-reasoning-chunks: + en: 34e5591d75322649 + zh: a216839f305c9796 +/session-persistence-event-catalog/resolved-persistence-types/type-reasoning-delta: + en: db3a10d417867d7b + zh: 4378e4b03c05067b +/session-persistence-event-catalog/resolved-persistence-types/type-request-context: + en: f8addb1a01da9ca1 + zh: 4ef11ebddd302c05 +/session-persistence-event-catalog/resolved-persistence-types/type-request-header: + en: f34ce1d84ad0fb1e + zh: c1c49f37c1e33f8c +/session-persistence-event-catalog/resolved-persistence-types/type-sandbox-mode: + en: 590152834b153366 + zh: 1d051321572572a7 +/session-persistence-event-catalog/resolved-persistence-types/type-schedule-change: + en: 6c114aa51492ebf0 + zh: 1270e031f482c587 +/session-persistence-event-catalog/resolved-persistence-types/type-session-log-deepseek-delivery-accepted: + en: d4dbca005a27b78b + zh: b5792c3f38a6ba75 +/session-persistence-event-catalog/resolved-persistence-types/type-session-end-seed: + en: acf7e21e4d21ebff + zh: fb83a853634d204a +/session-persistence-event-catalog/resolved-persistence-types/type-session-title: + en: ba2f901c9981835f + zh: ce0358c7d16b0beb +/session-persistence-event-catalog/resolved-persistence-types/type-session-title-llm-request: + en: 7515d391badb4d0a + zh: 9eb19def7a3ed752 +/session-persistence-event-catalog/resolved-persistence-types/type-step-end: + en: 7fc233c4a569dae2 + zh: bc2b3fed4a397c00 +/session-persistence-event-catalog/resolved-persistence-types/type-step-start: + en: 55ec9a3f52280221 + zh: bf2afb135514eb45 +/session-persistence-event-catalog/resolved-persistence-types/type-subagent-catalog: + en: 85475a5c4198d213 + zh: 16a71daeb92288db +/session-persistence-event-catalog/resolved-persistence-types/type-subagent-descriptor: + en: 2adab4361a5b558d + zh: 7f2a8da669f9e117 +/session-persistence-event-catalog/resolved-persistence-types/type-subagent-model-selection-policy: + en: 9dd6539f4a5d9d16 + zh: d886630b70a4bce8 +/session-persistence-event-catalog/resolved-persistence-types/type-system-message: + en: 7fb45f52932f268b + zh: 5019109b99274589 +/session-persistence-event-catalog/resolved-persistence-types/type-team-member: + en: d21fd23a5254e74f + zh: effe5a8971aaeef5 +/session-persistence-event-catalog/resolved-persistence-types/type-team-message-delivered: + en: 2a00c9dbe70dcd8e + zh: 96573157cd613c91 +/session-persistence-event-catalog/resolved-persistence-types/type-team-message-queued: + en: 3baf69fe52f2d751 + zh: 185be1b973fac77e +/session-persistence-event-catalog/resolved-persistence-types/type-team-task: + en: 872aad5b748d70d5 + zh: 396f986a703b76fd +/session-persistence-event-catalog/resolved-persistence-types/type-text-chunks: + en: 1484738718de5312 + zh: 3e6fbe9c64068225 +/session-persistence-event-catalog/resolved-persistence-types/type-text-delta: + en: f32f07d70ae189ff + zh: 615eae6be0834444 +/session-persistence-event-catalog/resolved-persistence-types/type-todo-write: + en: 2fa7ba77598a95b4 + zh: 50972b51d77e9155 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-call-chunks: + en: 32f732b97739e4d2 + zh: f288e48e356969c0 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-call-delta: + en: e8023bce4c9a3c15 + zh: 73308ba59a8ca17a +/session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-agent-end: + en: 8eb5e1eb95722bc7 + zh: 8dd5980029600648 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-agent-start: + en: 557cbf925d0d118a + zh: cdea625fa2ad1c33 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-end: + en: bb5da0ee7d289b9c + zh: 2e6703d11142f065 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-workflow-run-start: + en: 939c100f8a590003 + zh: b372827fffc17b1c +/session-persistence-event-catalog/resolved-persistence-types/type-tool-call: + en: 2dc168f9f2bd25d6 + zh: d75bd24319468403 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-ptc-dispatch: + en: 4c950143ed9318b0 + zh: 2a0cfcaf190a01a9 +/session-persistence-event-catalog/resolved-persistence-types/type-tool-ptc-dispatch-start: + en: 11e3a2031948dd55 + zh: a3666d1a2f08bb8c +/session-persistence-event-catalog/resolved-persistence-types/type-tool-result: + en: e8762230633e1b5d + zh: b89d9e9097a07433 +/session-persistence-event-catalog/resolved-persistence-types/type-turn-end: + en: 809c38c14e6f1052 + zh: 1b0460248455385e +/session-persistence-event-catalog/resolved-persistence-types/type-turn-start: + en: 1b045de96172be4b + zh: 8a15c6f35b576b37 +/session-persistence-event-catalog/resolved-persistence-types/type-usage: + en: d15bdc3a5b652790 + zh: 6b78c1388fba47d6 +/session-persistence-event-catalog/resolved-persistence-types/type-user-message: + en: 58d3e616db84f840 + zh: 9aed64a03347caad +/session-persistence-event-catalog/resolved-persistence-types/type-web-deepseek-search-llm-request: + en: f109997e295af37d + zh: b2dcfd599f73b61c +/session-persistence-event-catalog/resolved-persistence-types/type-web-search-20250305: + en: a5ffa4a988ead0df + zh: fb8aa9a4fb0a264b +/session-persistence-event-catalog/resolved-persistence-types/type-workspace-changes: + en: 411ecd58c4405c8a + zh: e53709d457a1f118 +/session-persistence-event-catalog/resolved-persistence-types/section: + en: 762ba6afa8d1774b + zh: 11bd0f051f176ac9 +/session-persistence-event-catalog/resolved-persistence-types/section~2: + en: bec6dc13ad29f1a7 + zh: 1d7ff0535364d8e9 diff --git a/docs/persistence-changes/2026-09-11-initial.i18n.yaml b/docs/persistence-changes/2026-09-11-initial.i18n.yaml index 975877b8fb..5ae157c693 100644 --- a/docs/persistence-changes/2026-09-11-initial.i18n.yaml +++ b/docs/persistence-changes/2026-09-11-initial.i18n.yaml @@ -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-09-11-initial.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 docs/persistence-changes/2026-09-11-initial.md -2026-09-11-initial.md: a919aba314a7e94242ab831a588e2112997edd8f -2026-09-11-initial.zh.md: e37d0c48219e8ac4d5d30d84cca441c150210a0b +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/initial-persistence-type-baseline: + en: 20020fb3f2a53b66 + zh: 98aed11422799717 +/initial-persistence-type-baseline/summary: + en: 0d176ac18dbd47d8 + zh: 7f83b2b9e7b81455 +/initial-persistence-type-baseline/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/initial-persistence-type-baseline/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/initial-persistence-type-baseline/compatibility: + en: 8b8755f4a777f974 + zh: 273fd0d7637e39e6 +/initial-persistence-type-baseline/verification: + en: 74d67f0c3e2ae717 + zh: 993cb7b95ed09852 +/initial-persistence-type-baseline/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml b/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml index 091781d060..dbe50e105e 100644 --- a/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml +++ b/docs/persistence-changes/2026-09-12-auto-review-error-metadata.i18n.yaml @@ -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-09-12-auto-review-error-metadata.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 docs/persistence-changes/2026-09-12-auto-review-error-metadata.md -2026-09-12-auto-review-error-metadata.md: d66595ec9c90fccf84cc6ad66742bc12d96a04db -2026-09-12-auto-review-error-metadata.zh.md: 74543743ea054d8ed6af10cf6ebfe7cc5371769c +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-12-auto-review-error-metadata: + en: 8b0643c4a09d3e45 + zh: 5261e431711664e3 +/2026-09-12-auto-review-error-metadata/summary: + en: 52d047afc26892fa + zh: 392d397daf7c5eab +/2026-09-12-auto-review-error-metadata/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-12-auto-review-error-metadata/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-12-auto-review-error-metadata/compatibility: + en: 0fbc992ed4149fb1 + zh: fd446f4210964b1e +/2026-09-12-auto-review-error-metadata/verification: + en: 59b830b1b9229362 + zh: d73423fbabe6a8ad +/2026-09-12-auto-review-error-metadata/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml b/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml index 11fc8092c4..6f2776382e 100644 --- a/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml +++ b/docs/persistence-changes/2026-09-14-image-offload.i18n.yaml @@ -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-09-14-image-offload.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 docs/persistence-changes/2026-09-14-image-offload.md -2026-09-14-image-offload.md: 1d4f47f5a25cc9dd39ad16f111af7f30d906a297 -2026-09-14-image-offload.zh.md: b184b32e96d04a425eda6faf9f5d50f815a9c32a +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-14-image-offload: + en: 7628bc0bd8620f3d + zh: 3fc5d55ce02d199c +/2026-09-14-image-offload/summary: + en: 798e2d62e41e244c + zh: 49cbb41d2f8e0760 +/2026-09-14-image-offload/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-14-image-offload/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-14-image-offload/compatibility: + en: 746db8940f232b0a + zh: 1cf1e720bdb4bbb9 +/2026-09-14-image-offload/verification: + en: e9e881607a71fba6 + zh: 8f6eb03617cd6133 +/2026-09-14-image-offload/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml b/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml index f640f5e25b..f62b7f643d 100644 --- a/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml +++ b/docs/persistence-changes/2026-09-14-workspace-changes-event.i18n.yaml @@ -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-09-14-workspace-changes-event.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 docs/persistence-changes/2026-09-14-workspace-changes-event.md -2026-09-14-workspace-changes-event.md: 5d8a4ff6526dc67444d5dce0076b005d96b3b059 -2026-09-14-workspace-changes-event.zh.md: fa2d037dc50dae2bfb7ba4b3801558559b73fd7c +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-14-workspace-changes-event: + en: 26ab5b62b8108a0f + zh: 8914ac35bb8726be +/2026-09-14-workspace-changes-event/summary: + en: dc8a100acdf87cb3 + zh: d345afd67b00a057 +/2026-09-14-workspace-changes-event/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-14-workspace-changes-event/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-14-workspace-changes-event/compatibility: + en: 27e62c14c209cf6c + zh: 16f08efcd6a12154 +/2026-09-14-workspace-changes-event/verification: + en: fb7f954e862c47a7 + zh: 76ec9f48f51b17ce +/2026-09-14-workspace-changes-event/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml b/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml index b90b3160e5..22adb806b0 100644 --- a/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +++ b/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml @@ -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-09-16-session-format-v4.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 docs/persistence-changes/2026-09-16-session-format-v4.md -2026-09-16-session-format-v4.md: 187acab093b319856ed9971da3ddac08bc02c06f -2026-09-16-session-format-v4.zh.md: 16a17937979ea5a02d7ede9282183a10e879cde7 +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-16-session-format-v4: + en: eb866e6ff81b18d6 + zh: 1689de18c9b69db7 +/2026-09-16-session-format-v4/summary: + en: d941a7e0957adc5c + zh: bc3848a302d6497e +/2026-09-16-session-format-v4/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-16-session-format-v4/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-16-session-format-v4/compatibility: + en: 62d76f6b66d04dc4 + zh: 736b1b7cc2f6084f +/2026-09-16-session-format-v4/verification: + en: f917c71292c98b17 + zh: 974c65afde0adb22 +/2026-09-16-session-format-v4/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml b/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml index 60ad1d8f73..07ef33fe8d 100644 --- a/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml +++ b/docs/persistence-changes/2026-09-20-unknown-child-catalog.i18n.yaml @@ -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-09-20-unknown-child-catalog.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 docs/persistence-changes/2026-09-20-unknown-child-catalog.md -2026-09-20-unknown-child-catalog.md: ba729661d60856ff948854641a1520339ab30210 -2026-09-20-unknown-child-catalog.zh.md: 468b4c9a3d3afab56ec8a9b03359016c9c0307e0 +/: + en: 3d5a424ae7d7e46b + zh: c22a8e4a62d8cc1a +/2026-09-20-unknown-child-catalog: + en: bf0eed877450b875 + zh: 76cc12e1c6e1efec +/2026-09-20-unknown-child-catalog/summary: + en: af6ba3bddd431d70 + zh: 0daa9e83ea3ab376 +/2026-09-20-unknown-child-catalog/table-of-contents: + en: 6cf314a069ceb451 + zh: 9adff678e9ecab3b +/2026-09-20-unknown-child-catalog/declaration: + en: 6907136f28e48c90 + zh: 02f8298485f3d8e7 +/2026-09-20-unknown-child-catalog/compatibility: + en: fc032425397b984e + zh: c85930e504d29cba +/2026-09-20-unknown-child-catalog/verification: + en: 8c5a5cdbc15c3a47 + zh: 06b6419920d89443 +/2026-09-20-unknown-child-catalog/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/README.i18n.yaml b/docs/persistence-changes/README.i18n.yaml index c2d80f8829..92e983bcc1 100644 --- a/docs/persistence-changes/README.i18n.yaml +++ b/docs/persistence-changes/README.i18n.yaml @@ -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 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 docs/persistence-changes/README.md -README.md: 2f3d2dd50adee751d9dce9ab250649ae13e45521 -README.zh.md: d2cec933b2210cc5652a7aa6c725517e1baff948 +/: + en: 10d173d8956e12a0 + zh: 3c32dcdb66727fed +/persistence-type-change-records: + en: 9054f01380aa9207 + zh: 10e27fb51600cd08 +/persistence-type-change-records/summary: + en: 272d85bc8ddda7b6 + zh: 01614508fc8f332e +/persistence-type-change-records/table-of-contents: + en: 1ba6efaa0b5d6e47 + zh: 6e216391ad24c541 +/persistence-type-change-records/files-and-ownership: + en: 6cd0f79a9455bdf2 + zh: a5978b7834c0802b +/persistence-type-change-records/compatibility-rules: + en: 7d5ce8c14e387922 + zh: 9106c78283ad932c +/persistence-type-change-records/history-and-limitations: + en: 10a426d36c41548b + zh: ef03b693d9d9be26 +/persistence-type-change-records/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/docs/persistence-changes/historical-formats/README.i18n.yaml b/docs/persistence-changes/historical-formats/README.i18n.yaml index 1f6bfd547a..4579af471a 100644 --- a/docs/persistence-changes/historical-formats/README.i18n.yaml +++ b/docs/persistence-changes/historical-formats/README.i18n.yaml @@ -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 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 docs/persistence-changes/historical-formats/README.md -README.md: a1064e815879d709fe466441bb4e8441c10b3aae -README.zh.md: 87c9d32fa6ca5248886dad663a926afc6983406f +/: + en: 1257a74512f9daed + zh: 74e1378126c7dd99 +/session-persistence-formats: + en: a740a4786e0488d6 + zh: c17883a78695cf67 +/session-persistence-formats/summary: + en: f1592445394a7daf + zh: 2a1c5f7fa307db45 +/session-persistence-formats/table-of-contents: + en: 14c57f30e676f6e3 + zh: b1a0ccf26fab3727 +/session-persistence-formats/format-references: + en: 45dba01dd6d69c80 + zh: c366d1a3991118c9 +/session-persistence-formats/scope-and-evidence: + en: b220062139ddac1e + zh: 7c4c0efe05dafa9c +/session-persistence-formats/maintain-coverage: + en: 0be8010f3fd20d2d + zh: b6e3af11c81e8702 +/session-persistence-formats/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/historical-formats/v0.i18n.yaml b/docs/persistence-changes/historical-formats/v0.i18n.yaml index 53935b02a0..2235b7c152 100644 --- a/docs/persistence-changes/historical-formats/v0.i18n.yaml +++ b/docs/persistence-changes/historical-formats/v0.i18n.yaml @@ -1,6 +1,1285 @@ -# 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 v0.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 docs/persistence-changes/historical-formats/v0.md -v0.md: 91b8c239307c2ac721aa4879a4cb9857cd0396ce -v0.zh.md: 735ac81c461e7dcb89aac05cf1ae3997e5e0fd25 +/: + en: 13d883c2a842875a + zh: 6b6792b05e810088 +/session-v0-persistence-format: + en: 1649aeeb4b17ecd7 + zh: afa254351b37fbc1 +/session-v0-persistence-format/summary: + en: cc1cf85b7dd1d642 + zh: 44efa094832b978d +/session-v0-persistence-format/table-of-contents: + en: e7feb612882a1520 + zh: 28e81ddf50d4b242 +/session-v0-persistence-format/source-evidence: + en: 747dbf51b84a21d4 + zh: 6bbf8a875b8cf540 +/session-v0-persistence-format/format-characteristics: + en: cc0554b6e7f2c524 + zh: f21dc3b3d939acbb +/session-v0-persistence-format/declaration: + en: 91cf0205aa5ce100 + zh: 164ea0f31127645c +/session-v0-persistence-format/complete-schemas: + en: a082960d58e6e23a + zh: 98bed283956b0b84 +/session-v0-persistence-format/complete-schemas/persistence-type-fingerprints: + en: 9622901690183c69 + zh: 41a473e11e031f53 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types: + en: b8f551dec51d8dc7 + zh: a004c2a176e44d37 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/1: + en: 0d3bfc18c580ea9f + zh: 0d3bfc18c580ea9f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/aborted: + en: e250e361c2cfc6b3 + zh: e250e361c2cfc6b3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/active: + en: d188185641b6d076 + zh: d188185641b6d076 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/after: + en: 22b913fe56ac8226 + zh: 22b913fe56ac8226 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/agent-instructions: + en: f83d99fa490a32e4 + zh: f83d99fa490a32e4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/agent-message: + en: 833d1a5a60a277d5 + zh: 833d1a5a60a277d5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/agent-preset-selected: + en: 399bbb8b47b4c42c + zh: 399bbb8b47b4c42c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/agent-inbox-spliced: + en: bec55272af567f64 + zh: bec55272af567f64 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/allowed-once: + en: ea0eb66aee54ca47 + zh: ea0eb66aee54ca47 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/always: + en: ed838315dbbc93c9 + zh: ed838315dbbc93c9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/append: + en: d4a8289f20c370ba + zh: d4a8289f20c370ba +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/approval-asked: + en: 0d5f12a9775a2ee4 + zh: 0d5f12a9775a2ee4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/approval-decided: + en: 7b2781cdf31b22fb + zh: 7b2781cdf31b22fb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/approval-policy: + en: 94f10413eddbecb0 + zh: 94f10413eddbecb0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/ask: + en: f62c1a03b55a17fe + zh: f62c1a03b55a17fe +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/assistant: + en: 13916b30d3515680 + zh: 13916b30d3515680 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/assistant-chunk: + en: 308808b0a35c9755 + zh: 308808b0a35c9755 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/assistant-message: + en: 236f19fd8c1f3fac + zh: 236f19fd8c1f3fac +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/at: + en: 8c6aaa696ae105d7 + zh: 8c6aaa696ae105d7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/block: + en: 784ca3e7ac724495 + zh: 784ca3e7ac724495 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/block-end: + en: 4d012513a3a69a1d + zh: 4d012513a3a69a1d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/block-start: + en: 0d8d3b25f8d41c7d + zh: 0d8d3b25f8d41c7d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/blocked: + en: 2441252fd2f2f610 + zh: 2441252fd2f2f610 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/boolean: + en: a71c6a870d0e5644 + zh: a71c6a870d0e5644 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/canceled: + en: d76f449c560d60ea + zh: d76f449c560d60ea +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/cancelled: + en: 846f994e5779f4df + zh: 846f994e5779f4df +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/catalog: + en: 871a46b7f22deed4 + zh: 871a46b7f22deed4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/change: + en: f82cf18dec98da2f + zh: f82cf18dec98da2f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/claude-code: + en: 5078780cad778727 + zh: 5078780cad778727 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/clear: + en: cf346da1c71650c9 + zh: cf346da1c71650c9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/codex: + en: c7537bafe02ae9e3 + zh: c7537bafe02ae9e3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/command-done: + en: f3b07f41730ba043 + zh: f3b07f41730ba043 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/command-run: + en: da41772ac0129a00 + zh: da41772ac0129a00 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/compaction-end: + en: ee2c2f7cc1b47796 + zh: ee2c2f7cc1b47796 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/compaction-prune: + en: 8d9d285edd3832ef + zh: 8d9d285edd3832ef +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/compaction-start: + en: 76b15fdde7ccbc44 + zh: 76b15fdde7ccbc44 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/compaction-summary: + en: d989a4b96d0be485 + zh: d989a4b96d0be485 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/complete: + en: 6e41ba49ef0a4576 + zh: 6e41ba49ef0a4576 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/completed: + en: 47c55824c32fa217 + zh: 47c55824c32fa217 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/continuable: + en: fc856412f156c726 + zh: fc856412f156c726 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/create: + en: 0f283be27812d545 + zh: 0f283be27812d545 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/danger-full-access: + en: 9a8bf8688932871a + zh: 9a8bf8688932871a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/delegation: + en: 56b80179b43c08e8 + zh: 56b80179b43c08e8 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/delete: + en: 9fff834c5e7c08d4 + zh: 9fff834c5e7c08d4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/deleted: + en: 1860d7529e5550b9 + zh: 1860d7529e5550b9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/dispatch: + en: 700b762d388963ee + zh: 700b762d388963ee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/disposed: + en: a7c3ac84c05c078c + zh: a7c3ac84c05c078c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/edit: + en: 2d4b7de3576a7449 + zh: 2d4b7de3576a7449 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/error: + en: 414c53999fd5b83b + zh: 414c53999fd5b83b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected: + en: c1a26b63c0f4ac65 + zh: 34ef0fb0448250e8 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected-0-data: + en: a8965b961b89317f + zh: 5658601a8577cfb9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced: + en: 4b2f76eddf1bb4b0 + zh: 0ae76132afb73db5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data: + en: 37dc023c395295a1 + zh: 51a6f8f5544fd30b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted: + en: a3d30f6fe2d9278f + zh: 5d2f03b66a6cf43a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content: + en: a9e1a1014e3d7da1 + zh: 42435ddacf445543 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content-0-2-attachment-originaldimensions: + en: a7e7ee08313a9d4d + zh: 8aa85e29f98b16a4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-0: + en: 8e95d4505a63522d + zh: 2b3d24af8f276246 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-1: + en: d1d323c3fce06625 + zh: 1387b75f79284367 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-10: + en: d51703b4abfc06b4 + zh: 4b401addf904c97a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references: + en: 9f90fab0ba0871b1 + zh: f13576ab3573c97e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references-0: + en: 475233af77f6a547 + zh: 25d10cc5d9926241 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries: + en: 63630ec677b237d1 + zh: 09356e9204907336 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries-0: + en: 6e490754b31dfa54 + zh: e2c020b1b4596edd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes: + en: 1d6d10efc4089925 + zh: 600566dda597d154 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes-0-action: + en: f64dd2b7b63cef7d + zh: 90d34368ed07f1ba +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-19: + en: 709bc35a1600e5ac + zh: c5589708c152a638 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-2: + en: d7661da2aeb0df22 + zh: 051ae40f3425884a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-3: + en: 7638d5f099cda059 + zh: 0a529ba36a138a92 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4: + en: 44b1ff53603bca5c + zh: 08538e884dc575b2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4-sections: + en: 1635c3f392c3ae6f + zh: 0976b45411f54446 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-5: + en: 103ab4a0e516070a + zh: 02e2c5b5cbe09a4f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-6: + en: 7f12f16e552dbc3e + zh: 2727483036193db3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-7: + en: 66bcf53022fd4d7e + zh: 38060f4d3d2d2731 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked: + en: 8190df824cb01b73 + zh: 4dab315a2202c148 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked-0-data: + en: 8a61b07653c46891 + zh: 520efe5bc909fc11 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided: + en: 8db14f9096672bc3 + zh: 6d1d184bd96ac527 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided-0-data: + en: 04293c18046f57a8 + zh: b78c584b872d17b3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy: + en: 888474174bdf2ca9 + zh: f7cf8d7d81ffe4ad +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy-0-data: + en: cfa908da2f194cbf + zh: e6a2d252a2cecd6c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk: + en: aec71da4381d803f + zh: 9a1d5180f8541796 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data: + en: a667530c56c840ea + zh: db809ef57ecd42e7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-0: + en: 07211a07af2224d3 + zh: 49a1082d8ef02816 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-1: + en: 1ada5be8884192fe + zh: 50882a45205d4251 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-2: + en: 43396101fab19c2b + zh: 8324e5e273ffd461 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-3: + en: 6003728b7373dbf4 + zh: 48128f5e518a4dee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-4: + en: 413384847b2fcf6f + zh: 2538c380769a8458 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-5: + en: 6202873390b0c5b0 + zh: 24997441bb0d5878 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6: + en: 94cf5d5e96598c97 + zh: f0757891d77e0f37 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-0: + en: 6d8fb80933fe70b1 + zh: 3fa2529b15e82120 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-1: + en: a54de2333cd59fab + zh: fe35c1ccbb4f4b68 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-2: + en: e0ccb28db2b77ad3 + zh: 98a48b9c36a44b7b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-3: + en: 2fb6da9fc238ab28 + zh: 7db86492ab4d6699 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-4: + en: c10855f074d1d642 + zh: 9b555c9c8169a983 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-replaystate-blocks: + en: 5b90ba57141287da + zh: 54f33280dca88dcc +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message: + en: dbbf2614b012046f + zh: 41acec43fb0970f1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message-data: + en: 34e73bef7eb42920 + zh: f7c9bcb96a3045f4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-command-done: + en: 3596e06faad385f2 + zh: 8feb2c89a57176ff +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data: + en: c73bebb5d1f23818 + zh: ab8e7a18a1aae1bf +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data-kind: + en: 9d70d772eaf91bc4 + zh: 87136b9f8f49be51 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-command-run: + en: df23852c38c27d4c + zh: c87f3047015d1728 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-command-run-0-data: + en: 142412d3816cc147 + zh: 839d5285dcc80d00 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end: + en: adb899d513b04b85 + zh: 57c7aa321fcc8a0a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data: + en: 2c5427b65e2fbda6 + zh: ec54cbb57ff07b77 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data-turn: + en: 78372c0fb32ee47a + zh: bf2ea077f0a90fb3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune: + en: dd830cbd4e50e8dc + zh: 09c29e09f0c18329 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data: + en: 4bb368a7a3e024f6 + zh: 4563113bee9647fb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data-shadowedrange: + en: 88d667fc6e025ffe + zh: 5c617da59429b428 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start: + en: aa32265db4888784 + zh: 19e2396c7b677d9c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start-0-data: + en: b8ab7a9a177a8bcc + zh: e5211fb93cc9937f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary: + en: 5d798a5412311c4d + zh: db790aa8774eb1b4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data: + en: 6d6a631c2b6cba64 + zh: f27a08cc6348bfdd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-0: + en: f9646bd98739f10f + zh: ef5a6b092ecb91bd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-1: + en: 262b8a2749858a15 + zh: 6339d87fe0ddd8a9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record: + en: e9c4df3f83f3b43c + zh: 61b7321691944dd9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record-0-data: + en: a50914064af3f4e9 + zh: d8897e507c9a5ee5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change: + en: 70be93a4eb3dc7ee + zh: 6a429a3ba21e51da +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change-0-data-0-operation: + en: 921b396a0fc10bf3 + zh: 08a2d63946f5fe8b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked: + en: ec073510d9a38e16 + zh: 07fa3f750291878e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked-0-data: + en: 5af8bcbd9a0c6f8c + zh: bab6ee04f300641b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result: + en: d5131191697486de + zh: ea2ac0dc591703f5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result-0-data: + en: 682776bea8e140ac + zh: fd0f388bb57dd6a2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry: + en: 7df8c82a65a03cfa + zh: b8c5f30cc5fe9b2a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-started: + en: 7417e80152a2072f + zh: 285c30ffc6e5653c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-0: + en: 8411acca54606bae + zh: 07ec6d54a8ab8c7c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-1: + en: 103af568ba9415ab + zh: b546bda06d3aaa64 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-model-selection: + en: 5f14789be2791853 + zh: 676c250e88e2d516 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset: + en: 44ee48b2303bb057 + zh: f27bb2b6df93dd3f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset-0-data: + en: 3813f99e9a16521a + zh: 3df37c8ae20894d1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode: + en: 12029b700a139f57 + zh: d38d31a8ee3d1b51 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode-0-data: + en: 556466a17c7c3bec + zh: 5e69ee389e57d8c7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-context: + en: 2007a43baec1851d + zh: 9f861fe8b79ec6a4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-header: + en: 8b41be53bf3da24d + zh: e2545092c23b3c98 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data: + en: 866bea9abb664e28 + zh: 7b1661cb02dff7d2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-config-stop: + en: 4c5ca6323042f8fb + zh: 55ea5d5d2c9867b5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools: + en: 14d69bec03917623 + zh: 2a2bdb086d81f395 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools-0-parameters: + en: 3cbf596abcc069c7 + zh: 48ed1c20a9e43782 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode: + en: 3645c689724b70e8 + zh: 80fdce8c3fe846fd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode-0-data: + en: 2d2f04c7b696776e + zh: 45ed5049f8fef75d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-schedule-change: + en: 616eb4ccc6035bda + zh: 9f8ac1aff9ecd528 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted: + en: 11e3a3521c804795 + zh: 9e114a359b90c29d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted-0-data: + en: 75fb9f5bc9965202 + zh: d9ff2a02aee4c97c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed: + en: e18e8e5abc2c8caa + zh: 8a83da012734201b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed-0-data: + en: 2ea29e7f2188a531 + zh: e0e85c05380f9a08 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title: + en: 3a3ccf19428de1f9 + zh: 86efd0288576cedf +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request: + en: 878c6274c2a3c921 + zh: 262ac3565196f459 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages: + en: 30b155c6c1c5b5d2 + zh: 860329fbe38fc73d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages-0-role: + en: 3bd736b88c51a6a9 + zh: 970bf305d2ffa2f9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-0: + en: bd0793d47846a971 + zh: 09cba95ac91aa96c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-1: + en: 372898891057137f + zh: b08a11163a1ea14a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-step-end: + en: 6630487acd01e8f9 + zh: df7ae8a98a88255e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-step-end-0-data: + en: 3bfb706083262259 + zh: fd47a21677bff75e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-step-start: + en: 90d6a0844983d65e + zh: 2b073499b9d57745 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-descriptor: + en: 46636916f7c3dafa + zh: 17224855c9a1a31e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy: + en: efad70e276a00c44 + zh: 7126efded470fca1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data: + en: 579ab4f055fda154 + zh: be1bc1474eacfb56 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data-allowedmodels: + en: 2e03a99ebce59cbe + zh: 8fc58a409026a038 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-member: + en: d467639a6b33ea89 + zh: eae9d8ae9961290e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data: + en: a393843965430a71 + zh: 45bc528b3a4c90c8 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data-member-context: + en: 738c6cf7ce1029d2 + zh: 588afe1c1065c9f5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered: + en: 4b1c7ca06c9e3c09 + zh: 8670aad3d72ae4bf +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered-0-data: + en: cae29b88c795ef55 + zh: 99612d3ebba6051e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued: + en: 745dd60939965052 + zh: cc3f6e43cb7c705f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-0-data: + en: cec907db68ad9f5b + zh: b75c011c271fd222 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-0-data-message-delivery: + en: 7fa4d6fb177f8972 + zh: 9bcdc77cb0978efd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-task: + en: 4040eae193ca0117 + zh: 668e5b1a1dd50e93 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-team-task-0-data: + en: 440ff3b8fa9ab5aa + zh: caf73f74acbd6742 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write: + en: db164cde15cb855e + zh: 11fabe3f117240db +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data: + en: 9aa1529619586eb5 + zh: 1ef39f8ed4b21fdb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos: + en: 452eafa7144b6cca + zh: 619b9a73d1cc6f7b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos-0-status: + en: 520fcd9d58051e1d + zh: 5caee5e3abb71ff4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-end: + en: 8d3d782377a821a3 + zh: 159108902eb3ea8f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-start: + en: c510fe4425e612ae + zh: 5900024fd109ab27 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-end: + en: 3a81402e95482efc + zh: 79ce393bb76c0312 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-start: + en: a1737e75832db662 + zh: 35c31cf5995763be +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call: + en: a162139a0313fef6 + zh: b61e6a2d302e97f8 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call-0-data: + en: 1fb24ba0613f975c + zh: da8eea88d8440807 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch: + en: b819eaf573684454 + zh: 1c1aa44c67b6930d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch-start: + en: f448c2cd9f5982da + zh: d8b4b8a38cf6ce8d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result: + en: 369762d4bdddfe38 + zh: fd315782713f5bbb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data: + en: ecb2926039013925 + zh: 387adec9e193b8e8 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-error: + en: d1e08acc6c5dab19 + zh: 4f788374c1e57c3c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-message-content: + en: 488873df302f51bd + zh: ba93c044c82007c5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta: + en: 17a9ba15cc12b018 + zh: d802a1cae6c1dba0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5: + en: b9192c6dda03f92f + zh: db8550f22f2e8039 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5-0-6: + en: 5bc101560ddf46f7 + zh: 42a0bf1dc15cda4d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end: + en: 96e6bcec8e5fd1eb + zh: 2bb4bba24ea70dd6 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data: + en: ae96fbf9f73cc6d9 + zh: 73dd9ee995991373 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-0: + en: 3dfb13f77e2cb7cc + zh: c6faa03063ca8983 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1: + en: 0aaf972fdffaca64 + zh: 4ccf44f7bf5a7479 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-1: + en: 84f101fd689219eb + zh: f5193da36ccde80e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-2: + en: dc1d6eb8e9a0041b + zh: 830ae1f36f216986 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-3: + en: 6d8cc31eeb7125d9 + zh: 7421bcc2025dd6e6 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-4: + en: c50286bf3aeb39bc + zh: 51aceecb93c2b0ef +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-2: + en: 3cd80a0df778877e + zh: 7e696294ed3cf75f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-3: + en: e0ba53b8079dc9df + zh: a4b644421b685cb0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-5: + en: f60286cf0c8f3340 + zh: 3c04f62cd0e43096 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start: + en: a9534c00dc731c20 + zh: bb39c42739c4b478 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start-0-data: + en: d430336a428ab570 + zh: 302e664e8febfe7f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-user-message: + en: 8b91a6459bc0e65c + zh: 579ce461dadbfbe2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request: + en: f150a2327ae39e66 + zh: eae62fdd99a8b3b5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body: + en: d296bfa494aa39f4 + zh: f6755293353eec9e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages: + en: 7bc6ebf7746c32f6 + zh: ce03410c4a2af043 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0: + en: b46fbb94b4140ac6 + zh: 7c5768ea21a44b5d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content: + en: 85e64f0ed8c70c63 + zh: fdbbaa6bf695750c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content-0: + en: 559bd65279d98e0d + zh: 48cf8c0d1c68725e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools: + en: b93841ceb27c424a + zh: 326d03c92626ebee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools-0: + en: c4dc73d6e1e1f735 + zh: a1fcd41a46736b2d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/every: + en: 51fd5017d7ffde2a + zh: 51fd5017d7ffde2a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/failed: + en: b575b371da801ea3 + zh: b575b371da801ea3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/fallback: + en: 649112f5242bfaae + zh: 649112f5242bfaae +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/feedback-record: + en: 6b40f9b0139b9993 + zh: 6b40f9b0139b9993 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/finish: + en: 5584d396d3c3e8e7 + zh: 5584d396d3c3e8e7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/fork: + en: 9df39e2322784cc1 + zh: 9df39e2322784cc1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/fresh: + en: 432ea99ec33c85e9 + zh: 432ea99ec33c85e9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/goal: + en: 666f8d9be933a1a0 + zh: 666f8d9be933a1a0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/goal-change: + en: e64d2f9c0eb72e58 + zh: e64d2f9c0eb72e58 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/hook: + en: 3d9e4dceb086f313 + zh: 3d9e4dceb086f313 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/hook-invoked: + en: 0fff5adfca472d26 + zh: 0fff5adfca472d26 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/hook-result: + en: dadff4cb415420c4 + zh: dadff4cb415420c4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/image: + en: 01ccf2962006ecbd + zh: 01ccf2962006ecbd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/image-gif: + en: a1b541c33a91d722 + zh: a1b541c33a91d722 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/image-jpeg: + en: 672bf7bcb15c75d6 + zh: 672bf7bcb15c75d6 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/image-png: + en: 2828d354b5ea048f + zh: 2828d354b5ea048f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/image-webp: + en: 9d5d0ae78ddf215a + zh: 9d5d0ae78ddf215a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/in-progress: + en: 1fb447694017b3b4 + zh: 1fb447694017b3b4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/initial: + en: f6219cba9ec666f7 + zh: f6219cba9ec666f7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/instructions: + en: ab6adeaa2e4f550f + zh: ab6adeaa2e4f550f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/interrupted: + en: 883119e87d7025fb + zh: 883119e87d7025fb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/legacy: + en: 3cf6e62107d1f10a + zh: 3cf6e62107d1f10a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/llm-retry: + en: 2c25737ff5b2795d + zh: 2c25737ff5b2795d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/llm-retry-started: + en: 44190f34fedf9a64 + zh: 44190f34fedf9a64 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/max-tokens: + en: fdf8a83bf94f951a + zh: fdf8a83bf94f951a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/model: + en: 94c2e1d974d97b1b + zh: 94c2e1d974d97b1b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/model-selection: + en: c8447dd314f4245d + zh: c8447dd314f4245d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/never: + en: 0ae37c5148361fd2 + zh: 0ae37c5148361fd2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/never~2: + en: ed68f942446368c7 + zh: ed68f942446368c7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/next-step: + en: d15d41e5c085028c + zh: d15d41e5c085028c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/next-turn: + en: fa758be0e4ccc66f + zh: fa758be0e4ccc66f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/normal: + en: ceaa1aecef1af7a7 + zh: ceaa1aecef1af7a7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/notice: + en: f52681a6f5b56a06 + zh: f52681a6f5b56a06 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/null: + en: b30bc92f3bc4002e + zh: b30bc92f3bc4002e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/number: + en: fa771a5a47afb62f + zh: 1c663adf5e2da66a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/one-shot: + en: 33bf0d6f70941891 + zh: 33bf0d6f70941891 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-api-session-controller-src-types-ts-modelselection: + en: 493847eaba84dc3a + zh: 90e78c08c60e3968 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imageattachmentref: + en: ceb9c32bf4f5dc97 + zh: 110198dd9c5efc8a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imagemediatype: + en: 71584411013d0dd6 + zh: 4802068749131124 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-render-ts-agentinstructionchange: + en: 1917d01bdeec6acf + zh: e1eec30cf49bf1a9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-state-ts-agentinstructionsource: + en: da08ff1ca6cada8a + zh: a60c5c6742c2abb0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-context-session-reference-src-types-ts-sessionreferencesource: + en: ba368f90b915592e + zh: ade3470b139191fd +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-agent-src-types-ts-inboxtarget: + en: e1f2ce53c8f98583 + zh: c562b9b52be497ed +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-epochheader: + en: 38f547363628a60c + zh: e13df967ac93f107 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestcontext: + en: 1113e2bda3b3b8bf + zh: 500fafe35032617a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestheaderreason: + en: 2821bda80068769d + zh: 9c97d95ae312ed77 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-sessionheader: + en: c9227a894e081f20 + zh: 43cc7acbd670eab1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendcancelcause: + en: 6413938994476ab5 + zh: f5dd8819deb5ee6a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendreason: + en: 338033ec9bbfa79f + zh: 97418bc2384aad52 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-index-ts-toolrestriction: + en: 1a2d6b0174511ffd + zh: fa2ed291350d7a84 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatcheventdata: + en: 7fe18456a8074319 + zh: 304580c17952e475 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatchstarteventdata: + en: 937d5f72e9248727 + zh: 99b871fec7f35fcb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammemberphase: + en: a1b5ad35fdbbf2e9 + zh: 32d18494c2a1a25a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammembersnapshot: + en: 976fc16e88943155 + zh: 6a81ba9c93d0e499 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesnapshot: + en: b55f45bc4b5fcb88 + zh: 4de4ec53c3ecfb4c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesource: + en: dced732ef9b7c27a + zh: c679a31a2a4270d5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtasksnapshot: + en: a1bc77fc89efdb8e + zh: 62c4f35a161b83ed +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtaskstatus: + en: 5fcba67ea39da4d9 + zh: bf541ff50d7718df +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalchangemeta: + en: 52f747125b58df06 + zh: 666d71bf837ebf62 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalclearchangemeta: + en: b65e2d2272748f20 + zh: 0737406345989550 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalmessagesource: + en: 5bf53b593fa5c7a8 + zh: 4587c57c04721ee1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalsnapshotchangemeta: + en: a9ade284ff69c5a5 + zh: ed141b013c367860 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalblockreason: + en: a376958c396d7525 + zh: bf1051463954be80 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalphase: + en: ec2dbfe6dc9adca1 + zh: 5a1fbd2e3740f0c0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalref: + en: 0a431de9f8a9f6a5 + zh: b66ef4d2b8ed3bb9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalsnapshot: + en: ff21e17ac1c3a110 + zh: f9c05a92fd47e1f4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-hooks-hook-protocol-src-types-ts-hookdialect: + en: f7d0e7efbac812de + zh: ea5f9f1fdd57ea7d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-index-ts-approvalpolicy: + en: 2044a1198ef4f2b2 + zh: ad773b08c022587f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-types-ts-approvaloutcome: + en: a91accaedb68990d + zh: 3a28e7a839001839 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretryeventdata: + en: 15974e98a64d1b68 + zh: e2f560a1bee67137 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretrystartedeventdata: + en: c85306a885e7e193 + zh: 8b141703c3d6568e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfig: + en: d2e4e915c4f26fd0 + zh: 98eff6c3abe2925c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfigadapterdefaults: + en: 0836b6128069b319 + zh: 3a8d268cbd97ef17 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-assistantmessage: + en: 5b693aa4b613b57c + zh: 6cc530fdc746ee7c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-contextsnapshotsection: + en: cd9a0923ec2dd279 + zh: 69c2b3fc446b8ce9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-message: + en: 8ec1cb0396f96b5b + zh: df187a9e75e5d066 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-messagesource: + en: a8f66848344fe435 + zh: 25231ddee1bb1566 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-modelmessagesource: + en: 304f7bcb50f3fb29 + zh: 69c5deeee138a10e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolmessagesource: + en: 6342327f9ac63e1b + zh: d159ecead223e279 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolresultmessage: + en: 47a81583e71bcf07 + zh: 96ba235c8a64fda7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-usermessage: + en: 5a93a348606a248b + zh: 36232549e093271d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblock: + en: 60d60f02c3333070 + zh: 9d62a795d20922ce +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblocktype: + en: f114a65a39c9e15e + zh: b753f87c963c991a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-finishreason: + en: e386972ab2685db5 + zh: cf023fdabe0c14d1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-imageblock: + en: 88bdeaa3cb99405b + zh: 328d969eb95f911c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-llmfailure: + en: 20d43b9189dc16b6 + zh: 13c889e27cb1f5fb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-reasoningblock: + en: e39fbb169387b33e + zh: faa6e0f164735b05 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-replayenvelope: + en: 552f7b870a76fd0b + zh: b214776e6df1a7c3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-streamchunk: + en: d0c7320647fcff8e + zh: 47a2f0790453d6fa +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-tokenusage: + en: 7250253d00740155 + zh: a69db8b056645a51 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolcallblock: + en: 0f14fe9e4d1c658f + zh: 46f3886b22bb9049 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolresultblock: + en: 19f8878888fdebad + zh: e3b9507d860425ae +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolschema: + en: 76762b72c9dbff65 + zh: ef944df9eeb85be5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-sandbox-sandbox-src-index-ts-sandboxmode: + en: 4d256867ef41502b + zh: 7e63268eb7efeb4e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-afterschedulerecord: + en: 2d007d6563b437d0 + zh: 1750279ef41dddeb +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-atschedulerecord: + en: 5bbd9981e9a7f54d + zh: 18e024928899cb1f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyscheduledispatchchange: + en: 071057beba6ba5f0 + zh: 69d6e8c5e4575b6c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyschedulerecord: + en: 0da520c824c87dd4 + zh: 018ff8be9ebca34a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-oneshotscheduledispatchchange: + en: 5de428c6f4127035 + zh: 5a383261736379ab +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulechange: + en: b9e80bb6bd2ac91e + zh: c6a4c99a4336a59e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulecreatechange: + en: 2d64658c34cda1cc + zh: 1fb263941dafaa96 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-scheduledeletechange: + en: 4fdd5e804bb84bd1 + zh: 84a629aa2ab12c22 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulerecord: + en: 166c94a721d8754d + zh: 81b7fafb2ad44106 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-persistence-jsonl-src-format-ts-headerline: + en: 9c243dc77c9d142a + zh: 2a9ac5b451280671 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-llm-src-index-ts-sessiontitlellmrequesteventdata: + en: c19ffa11fe47e54e + zh: d2ae74cae886a2ac +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitleeventdata: + en: f011034884bac897 + zh: 4a65516a575d49d7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlemodelprovenance: + en: 47e8dbd5749237fd + zh: c8146562f7353e15 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlesource: + en: 61dda3b6cff145f7 + zh: 1750b650436bf8f9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-skill-src-index-ts-skillinvocationsource: + en: 1856fd60d7251651 + zh: b6a45c49d14f1041 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-tool-skill-src-index-ts-skillcatalogsource: + en: 8b3b65e3e03bf592 + zh: 3607f502cc2f4383 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-ts-agentmessagesource: + en: 11a5c05701854c21 + zh: 4855a0864f82897d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-ts-subagentsettledmessagesource: + en: 632b5cb1c2f4629c + zh: 869cc8a532cd04ed +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-continuablesubagentdescriptordata: + en: 38c8e74993edbb98 + zh: 36574175a1d1c5d6 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-oneshotsubagentdescriptordata: + en: 3e5bf40300f8b1a9 + zh: 07e412c1fcddcb7d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-subagentdescriptordata: + en: cf1809183c40b3ea + zh: 6b74af2c94dea3de +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-todo-tool-todo-src-types-ts-todoitem: + en: 0e69a3e398b4614b + zh: dda89947907528ac +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-web-web-search-deepseek-src-provider-ts-deepseeksearchllmrequest: + en: 46739f64ad77c2bd + zh: 448b3d91be7b7381 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentenddata: + en: 59304dd3c0940627 + zh: e1643dbec00a0cc9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentstartdata: + en: fa9dc562eede5de9 + zh: de2b31b6e552e282 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunenddata: + en: 14cad9b03a5e4711 + zh: a74514271b70aaf2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunstartdata: + en: 69bb21d7582bb2b4 + zh: 0aa74aaf62b13665 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowagentoutcome: + en: efb9ea2c4f84fa05 + zh: 1df4ec831fc807d9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowstopreason: + en: d8a79a37d49821c7 + zh: 7726867b41c376b9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/parent: + en: 138ccfb49ca3008f + zh: 138ccfb49ca3008f +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/pause: + en: ca7e406cd0ef4c8b + zh: ca7e406cd0ef4c8b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/paused: + en: 6bf09e8e304d79dc + zh: 6bf09e8e304d79dc +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/pending: + en: bd71499d6cf79f5d + zh: bd71499d6cf79f5d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/permission-preset: + en: afc55750e84562e0 + zh: afc55750e84562e0 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/plan-mode: + en: 5fb58af86d74ea6d + zh: 5fb58af86d74ea6d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/plugin: + en: a98f88ae1609c550 + zh: a98f88ae1609c550 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/provider: + en: 4fbeeac070898211 + zh: 4fbeeac070898211 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/provisioning: + en: 2ac9ccd27b9cd0c2 + zh: 2ac9ccd27b9cd0c2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/quiet: + en: 3cc24a48b0bc33d5 + zh: 3cc24a48b0bc33d5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/read-only: + en: 2855b1c06597641c + zh: 2855b1c06597641c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/reasoning: + en: 590aab976614ab13 + zh: 590aab976614ab13 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/reasoning-delta: + en: b90bb3db67fca7f5 + zh: b90bb3db67fca7f5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/recall: + en: 76399cebf971bf28 + zh: 76399cebf971bf28 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/rejected: + en: c208015c158ef23e + zh: c208015c158ef23e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/relay: + en: 7db0fdc1a7d63d74 + zh: 7db0fdc1a7d63d74 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/remove: + en: 11a78466931d25aa + zh: 11a78466931d25aa +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/replace: + en: b472d3d1e96f970a + zh: b472d3d1e96f970a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/request-context: + en: e2401b5ab5b79c4d + zh: e2401b5ab5b79c4d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/request-header: + en: 059fa0b4904838ac + zh: 059fa0b4904838ac +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/resume: + en: fa76642f444ed47a + zh: fa76642f444ed47a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sandbox-mode: + en: 109998dd842433c9 + zh: 109998dd842433c9 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/schedule-change: + en: e51c1621e48332a7 + zh: e51c1621e48332a7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/series: + en: 201a1f0c2545d484 + zh: 201a1f0c2545d484 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session: + en: 048cb1117c9013a5 + zh: 048cb1117c9013a5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session-log-deepseek-delivery-accepted: + en: ffc8a093c3f86b77 + zh: ffc8a093c3f86b77 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session-reference: + en: 27ac5fc556d28db4 + zh: 27ac5fc556d28db4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session-end-seed: + en: 4b0280a733574017 + zh: 4b0280a733574017 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope: + en: 0a9247329822d24e + zh: 0ac4c2b235032853 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-0: + en: e224ec3b7717b112 + zh: 6e81f89e10ba47d4 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46: + en: d3540bafc0b7af4d + zh: 0bd472618edbf537 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-sourceeventseqs: + en: 5cd3a6078c43ccb0 + zh: f2a1f9cee138526a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-surfaceop: + en: 22cb4ca82f45ede5 + zh: da5e59dfb01ef10b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-surfaceop-1: + en: 5102be6016b3971e + zh: 93b5b3197ef25c01 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session-title: + en: c03d3b602c6286c5 + zh: c03d3b602c6286c5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/session-title-llm-request: + en: 2c21870ea85db0ba + zh: 2c21870ea85db0ba +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/set: + en: 3fecff2d7d8c2446 + zh: 3fecff2d7d8c2446 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/skill-catalog: + en: e6881abff7181f8b + zh: e6881abff7181f8b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/skill-invocation: + en: 0a0abb5d6b6dd8ee + zh: 0a0abb5d6b6dd8ee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/snapshot: + en: dc576ee2c0ff38ee + zh: dc576ee2c0ff38ee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/step-end: + en: 23f7e4121528704d + zh: 23f7e4121528704d +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/step-start: + en: 258c004218f5c5cf + zh: 258c004218f5c5cf +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/stop: + en: 5d836dbb81d9efe7 + zh: 5d836dbb81d9efe7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/string: + en: d1b834b0fae294a2 + zh: 17e30c3ccda15957 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/subagent: + en: 0bdce21b04fc85b7 + zh: 0bdce21b04fc85b7 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/subagent-settled: + en: 1c37561a6e95743a + zh: 1c37561a6e95743a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/subagent-descriptor: + en: cf116d4d04677f5e + zh: cf116d4d04677f5e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/subagent-model-selection-policy: + en: b95ff0ac6eb6fe07 + zh: b95ff0ac6eb6fe07 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/success: + en: f9878ddcde6cbf6c + zh: f9878ddcde6cbf6c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/system: + en: 9a257934a5c024c1 + zh: 9a257934a5c024c1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/team-message: + en: f33fffc365cd3dee + zh: f33fffc365cd3dee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/team-member: + en: 64723754b03404fe + zh: 64723754b03404fe +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/team-message-delivered: + en: bcb920ce77effc35 + zh: bcb920ce77effc35 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/team-message-queued: + en: 96ef7c27ed87f71a + zh: 96ef7c27ed87f71a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/team-task: + en: 67290d348838a6e1 + zh: 67290d348838a6e1 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/text: + en: eca053e36f361c06 + zh: eca053e36f361c06 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/text-delta: + en: b92d346827f57b42 + zh: b92d346827f57b42 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/todo-write: + en: 56b4922b448344c2 + zh: 56b4922b448344c2 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool: + en: 4fe3dbdd8790897e + zh: 4fe3dbdd8790897e +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-call: + en: 948376359765fd97 + zh: 948376359765fd97 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-call-delta: + en: cc93118e927b7681 + zh: cc93118e927b7681 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-calls: + en: ee8cad1294cc1b1a + zh: ee8cad1294cc1b1a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-result: + en: ff329758f7b78d96 + zh: ff329758f7b78d96 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-end: + en: b28e7f3c40a7c3ee + zh: b28e7f3c40a7c3ee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-start: + en: e7e61b03558f2d90 + zh: e7e61b03558f2d90 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-end: + en: 2e6da5ad2eed59cf + zh: 2e6da5ad2eed59cf +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-start: + en: 3007417a998b650c + zh: 3007417a998b650c +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-call~2: + en: e038b6d4a29f44d5 + zh: e038b6d4a29f44d5 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch: + en: 155bcd6a6928153b + zh: 155bcd6a6928153b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch-start: + en: beb7b669a6b8db34 + zh: beb7b669a6b8db34 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/tool-result~2: + en: f426dd9a97d97631 + zh: f426dd9a97d97631 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/true: + en: 8141814fd7986b02 + zh: 8141814fd7986b02 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/turn-end: + en: 94aac556c4be113a + zh: 94aac556c4be113a +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/turn-start: + en: 8fae22745547795b + zh: 8fae22745547795b +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/unavailable: + en: c3e0a238f6e53159 + zh: c3e0a238f6e53159 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/unknown: + en: 528fe3840778b37d + zh: 004bf8cc871e6270 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/usage: + en: 496d552369f72775 + zh: 496d552369f72775 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/user: + en: 8df99d357725f7e3 + zh: 8df99d357725f7e3 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/user-message: + en: 83b747a808721227 + zh: 83b747a808721227 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/wakeup: + en: 42a81c0609551002 + zh: 42a81c0609551002 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/web-search: + en: 5d5f50cfff9b8f73 + zh: 5d5f50cfff9b8f73 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/web-search-20250305: + en: d7bdd7805e7f8acc + zh: d7bdd7805e7f8acc +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/web-deepseek-search-llm-request: + en: c2ac7c44723d7c64 + zh: c2ac7c44723d7c64 +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/webhook: + en: 95280ea5e6be4eee + zh: 95280ea5e6be4eee +/session-v0-persistence-format/complete-schemas/resolved-persistence-types/workspace-write: + en: e1ff2d052fbfd033 + zh: e1ff2d052fbfd033 +/session-v0-persistence-format/verification-and-limitations: + en: c205f8b2bb98c1e7 + zh: ea185ce433734b11 +/session-v0-persistence-format/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/historical-formats/v1.i18n.yaml b/docs/persistence-changes/historical-formats/v1.i18n.yaml index 707343c7f5..89bcee1376 100644 --- a/docs/persistence-changes/historical-formats/v1.i18n.yaml +++ b/docs/persistence-changes/historical-formats/v1.i18n.yaml @@ -1,6 +1,1285 @@ -# 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 v1.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 docs/persistence-changes/historical-formats/v1.md -v1.md: 2cac9741d03659ef7afa80de4dae4e609b1b730e -v1.zh.md: 6eb7a5bc6fef32df2b6182f35272a9d237ffde16 +/: + en: ef1bfbb6f7f25c6a + zh: 265fdaf2368d08dd +/session-v1-persistence-format: + en: b947a823937d9d02 + zh: 3dd90499338fa930 +/session-v1-persistence-format/summary: + en: d1479c279f52e380 + zh: 00896189591933ed +/session-v1-persistence-format/table-of-contents: + en: e7feb612882a1520 + zh: 28e81ddf50d4b242 +/session-v1-persistence-format/source-evidence: + en: 510dd7a54949c2b6 + zh: 579fa9bcfa8e1888 +/session-v1-persistence-format/format-characteristics: + en: a50fec080edc3ee7 + zh: 3f14cd54ca2ad241 +/session-v1-persistence-format/declaration: + en: b500437fe07a0041 + zh: 096416d3251f7e77 +/session-v1-persistence-format/complete-schemas: + en: fa267e8ab0b654c4 + zh: b0118f97f6dba522 +/session-v1-persistence-format/complete-schemas/persistence-type-fingerprints: + en: f1d7a76dc1b1b03c + zh: 2cf67e5fb31bd643 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types: + en: b8f551dec51d8dc7 + zh: a004c2a176e44d37 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/1: + en: 0d3bfc18c580ea9f + zh: 0d3bfc18c580ea9f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/aborted: + en: e250e361c2cfc6b3 + zh: e250e361c2cfc6b3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/active: + en: d188185641b6d076 + zh: d188185641b6d076 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/after: + en: 22b913fe56ac8226 + zh: 22b913fe56ac8226 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/agent-instructions: + en: f83d99fa490a32e4 + zh: f83d99fa490a32e4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/agent-message: + en: 833d1a5a60a277d5 + zh: 833d1a5a60a277d5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/agent-preset-selected: + en: 399bbb8b47b4c42c + zh: 399bbb8b47b4c42c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/agent-inbox-spliced: + en: bec55272af567f64 + zh: bec55272af567f64 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/allowed-once: + en: ea0eb66aee54ca47 + zh: ea0eb66aee54ca47 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/always: + en: ed838315dbbc93c9 + zh: ed838315dbbc93c9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/append: + en: d4a8289f20c370ba + zh: d4a8289f20c370ba +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/approval-asked: + en: 0d5f12a9775a2ee4 + zh: 0d5f12a9775a2ee4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/approval-decided: + en: 7b2781cdf31b22fb + zh: 7b2781cdf31b22fb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/approval-policy: + en: 94f10413eddbecb0 + zh: 94f10413eddbecb0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/ask: + en: f62c1a03b55a17fe + zh: f62c1a03b55a17fe +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/assistant: + en: 13916b30d3515680 + zh: 13916b30d3515680 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/assistant-chunk: + en: 308808b0a35c9755 + zh: 308808b0a35c9755 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/assistant-message: + en: 236f19fd8c1f3fac + zh: 236f19fd8c1f3fac +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/at: + en: 8c6aaa696ae105d7 + zh: 8c6aaa696ae105d7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/block: + en: 784ca3e7ac724495 + zh: 784ca3e7ac724495 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/block-end: + en: 4d012513a3a69a1d + zh: 4d012513a3a69a1d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/block-start: + en: 0d8d3b25f8d41c7d + zh: 0d8d3b25f8d41c7d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/blocked: + en: 2441252fd2f2f610 + zh: 2441252fd2f2f610 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/boolean: + en: a71c6a870d0e5644 + zh: a71c6a870d0e5644 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/canceled: + en: d76f449c560d60ea + zh: d76f449c560d60ea +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/cancelled: + en: 846f994e5779f4df + zh: 846f994e5779f4df +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/catalog: + en: 871a46b7f22deed4 + zh: 871a46b7f22deed4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/change: + en: f82cf18dec98da2f + zh: f82cf18dec98da2f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/claude-code: + en: 5078780cad778727 + zh: 5078780cad778727 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/clear: + en: cf346da1c71650c9 + zh: cf346da1c71650c9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/codex: + en: c7537bafe02ae9e3 + zh: c7537bafe02ae9e3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/command-done: + en: f3b07f41730ba043 + zh: f3b07f41730ba043 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/command-run: + en: da41772ac0129a00 + zh: da41772ac0129a00 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/compaction-end: + en: ee2c2f7cc1b47796 + zh: ee2c2f7cc1b47796 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/compaction-prune: + en: 8d9d285edd3832ef + zh: 8d9d285edd3832ef +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/compaction-start: + en: 76b15fdde7ccbc44 + zh: 76b15fdde7ccbc44 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/compaction-summary: + en: d989a4b96d0be485 + zh: d989a4b96d0be485 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/complete: + en: 6e41ba49ef0a4576 + zh: 6e41ba49ef0a4576 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/completed: + en: 47c55824c32fa217 + zh: 47c55824c32fa217 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/continuable: + en: fc856412f156c726 + zh: fc856412f156c726 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/create: + en: 0f283be27812d545 + zh: 0f283be27812d545 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/danger-full-access: + en: 9a8bf8688932871a + zh: 9a8bf8688932871a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/delegation: + en: 56b80179b43c08e8 + zh: 56b80179b43c08e8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/delete: + en: 9fff834c5e7c08d4 + zh: 9fff834c5e7c08d4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/deleted: + en: 1860d7529e5550b9 + zh: 1860d7529e5550b9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/dispatch: + en: 700b762d388963ee + zh: 700b762d388963ee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/disposed: + en: a7c3ac84c05c078c + zh: a7c3ac84c05c078c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/edit: + en: 2d4b7de3576a7449 + zh: 2d4b7de3576a7449 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/error: + en: 414c53999fd5b83b + zh: 414c53999fd5b83b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected: + en: c1a26b63c0f4ac65 + zh: 34ef0fb0448250e8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected-0-data: + en: a8965b961b89317f + zh: 5658601a8577cfb9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced: + en: 845a28013d511618 + zh: ced51e94de5d8036 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data: + en: 487e83c8b6cc76f1 + zh: a4d4f44cc069c3fc +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted: + en: f8ee8315649401e8 + zh: 24f44ae2aee89310 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content: + en: a9e1a1014e3d7da1 + zh: 42435ddacf445543 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content-0-2-attachment-originaldimensions: + en: a7e7ee08313a9d4d + zh: 8aa85e29f98b16a4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-0: + en: 8e95d4505a63522d + zh: 2b3d24af8f276246 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-1: + en: d1d323c3fce06625 + zh: 1387b75f79284367 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-10: + en: d51703b4abfc06b4 + zh: 4b401addf904c97a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references: + en: 34dc1e0d7ebd1191 + zh: a4094b338868b4f8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references-0: + en: eab69cc7227d7373 + zh: 785fdfe4f748e997 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries: + en: 63630ec677b237d1 + zh: 09356e9204907336 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries-0: + en: 6e490754b31dfa54 + zh: e2c020b1b4596edd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes: + en: 1d6d10efc4089925 + zh: 600566dda597d154 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes-0-action: + en: f64dd2b7b63cef7d + zh: 90d34368ed07f1ba +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-19: + en: 709bc35a1600e5ac + zh: c5589708c152a638 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-2: + en: d7661da2aeb0df22 + zh: 051ae40f3425884a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-3: + en: 7638d5f099cda059 + zh: 0a529ba36a138a92 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4: + en: 44b1ff53603bca5c + zh: 08538e884dc575b2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4-sections: + en: 1635c3f392c3ae6f + zh: 0976b45411f54446 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-5: + en: 103ab4a0e516070a + zh: 02e2c5b5cbe09a4f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-6: + en: 7f12f16e552dbc3e + zh: 2727483036193db3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-7: + en: 66bcf53022fd4d7e + zh: 38060f4d3d2d2731 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked: + en: 8190df824cb01b73 + zh: 4dab315a2202c148 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked-0-data: + en: 8a61b07653c46891 + zh: 520efe5bc909fc11 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided: + en: 8db14f9096672bc3 + zh: 6d1d184bd96ac527 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided-0-data: + en: 04293c18046f57a8 + zh: b78c584b872d17b3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy: + en: 888474174bdf2ca9 + zh: f7cf8d7d81ffe4ad +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy-0-data: + en: cfa908da2f194cbf + zh: e6a2d252a2cecd6c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk: + en: aec71da4381d803f + zh: 9a1d5180f8541796 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data: + en: a667530c56c840ea + zh: db809ef57ecd42e7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-0: + en: 07211a07af2224d3 + zh: 49a1082d8ef02816 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-1: + en: 1ada5be8884192fe + zh: 50882a45205d4251 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-2: + en: 43396101fab19c2b + zh: 8324e5e273ffd461 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-3: + en: 6003728b7373dbf4 + zh: 48128f5e518a4dee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-4: + en: 413384847b2fcf6f + zh: 2538c380769a8458 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-5: + en: 6202873390b0c5b0 + zh: 24997441bb0d5878 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6: + en: 94cf5d5e96598c97 + zh: f0757891d77e0f37 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-0: + en: 6d8fb80933fe70b1 + zh: 3fa2529b15e82120 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-1: + en: a54de2333cd59fab + zh: fe35c1ccbb4f4b68 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-2: + en: e0ccb28db2b77ad3 + zh: 98a48b9c36a44b7b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-3: + en: 2fb6da9fc238ab28 + zh: 7db86492ab4d6699 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-reason-4: + en: c10855f074d1d642 + zh: 9b555c9c8169a983 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-chunk-0-data-chunk-6-replaystate-blocks: + en: 5b90ba57141287da + zh: 54f33280dca88dcc +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message: + en: dbbf2614b012046f + zh: 41acec43fb0970f1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message-data: + en: 34e73bef7eb42920 + zh: f7c9bcb96a3045f4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-command-done: + en: 3596e06faad385f2 + zh: 8feb2c89a57176ff +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data: + en: c73bebb5d1f23818 + zh: ab8e7a18a1aae1bf +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data-kind: + en: 9d70d772eaf91bc4 + zh: 87136b9f8f49be51 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-command-run: + en: df23852c38c27d4c + zh: c87f3047015d1728 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-command-run-0-data: + en: 142412d3816cc147 + zh: 839d5285dcc80d00 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end: + en: adb899d513b04b85 + zh: 57c7aa321fcc8a0a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data: + en: 2c5427b65e2fbda6 + zh: ec54cbb57ff07b77 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data-turn: + en: 78372c0fb32ee47a + zh: bf2ea077f0a90fb3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune: + en: dd830cbd4e50e8dc + zh: 09c29e09f0c18329 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data: + en: 4bb368a7a3e024f6 + zh: 4563113bee9647fb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data-shadowedrange: + en: 88d667fc6e025ffe + zh: 5c617da59429b428 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start: + en: aa32265db4888784 + zh: 19e2396c7b677d9c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start-0-data: + en: b8ab7a9a177a8bcc + zh: e5211fb93cc9937f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary: + en: 5d798a5412311c4d + zh: db790aa8774eb1b4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data: + en: 6d6a631c2b6cba64 + zh: f27a08cc6348bfdd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-0: + en: f9646bd98739f10f + zh: ef5a6b092ecb91bd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-1: + en: 262b8a2749858a15 + zh: 6339d87fe0ddd8a9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record: + en: e9c4df3f83f3b43c + zh: 61b7321691944dd9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record-0-data: + en: a50914064af3f4e9 + zh: d8897e507c9a5ee5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change: + en: 70be93a4eb3dc7ee + zh: 6a429a3ba21e51da +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change-0-data-0-operation: + en: 921b396a0fc10bf3 + zh: 08a2d63946f5fe8b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked: + en: ec073510d9a38e16 + zh: 07fa3f750291878e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked-0-data: + en: 5af8bcbd9a0c6f8c + zh: bab6ee04f300641b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result: + en: d5131191697486de + zh: ea2ac0dc591703f5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result-0-data: + en: 682776bea8e140ac + zh: fd0f388bb57dd6a2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry: + en: 7df8c82a65a03cfa + zh: b8c5f30cc5fe9b2a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-started: + en: 7417e80152a2072f + zh: 285c30ffc6e5653c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-0: + en: 8411acca54606bae + zh: 07ec6d54a8ab8c7c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-1: + en: 103af568ba9415ab + zh: b546bda06d3aaa64 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-model-selection: + en: 5f14789be2791853 + zh: 676c250e88e2d516 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset: + en: 44ee48b2303bb057 + zh: f27bb2b6df93dd3f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset-0-data: + en: 3813f99e9a16521a + zh: 3df37c8ae20894d1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode: + en: 12029b700a139f57 + zh: d38d31a8ee3d1b51 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode-0-data: + en: 556466a17c7c3bec + zh: 5e69ee389e57d8c7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-context: + en: 2007a43baec1851d + zh: 9f861fe8b79ec6a4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-header: + en: 8b41be53bf3da24d + zh: e2545092c23b3c98 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data: + en: 866bea9abb664e28 + zh: 7b1661cb02dff7d2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-config-stop: + en: 4c5ca6323042f8fb + zh: 55ea5d5d2c9867b5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools: + en: 14d69bec03917623 + zh: 2a2bdb086d81f395 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools-0-parameters: + en: 3cbf596abcc069c7 + zh: 48ed1c20a9e43782 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode: + en: 3645c689724b70e8 + zh: 80fdce8c3fe846fd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode-0-data: + en: 2d2f04c7b696776e + zh: 45ed5049f8fef75d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-schedule-change: + en: 616eb4ccc6035bda + zh: 9f8ac1aff9ecd528 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted: + en: d7c30efc4463452e + zh: 27d3894734a824b6 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted-0-data: + en: 206f43f7378d6e42 + zh: 47f8df792e271630 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed: + en: e18e8e5abc2c8caa + zh: 8a83da012734201b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed-0-data: + en: 2ea29e7f2188a531 + zh: e0e85c05380f9a08 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title: + en: 3a3ccf19428de1f9 + zh: 86efd0288576cedf +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request: + en: fac38d7b62525654 + zh: 69ff1ad95cab094b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages: + en: 5e8a69d4d409c56d + zh: 1d5b006ccc68cdf1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages-0-role: + en: 3bd736b88c51a6a9 + zh: 970bf305d2ffa2f9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-0: + en: bd0793d47846a971 + zh: 09cba95ac91aa96c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-1: + en: 372898891057137f + zh: b08a11163a1ea14a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-step-end: + en: 6630487acd01e8f9 + zh: df7ae8a98a88255e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-step-end-0-data: + en: 3bfb706083262259 + zh: fd47a21677bff75e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-step-start: + en: 90d6a0844983d65e + zh: 2b073499b9d57745 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-descriptor: + en: 46636916f7c3dafa + zh: 17224855c9a1a31e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy: + en: efad70e276a00c44 + zh: 7126efded470fca1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data: + en: 579ab4f055fda154 + zh: be1bc1474eacfb56 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data-allowedmodels: + en: 2e03a99ebce59cbe + zh: 8fc58a409026a038 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-member: + en: d467639a6b33ea89 + zh: eae9d8ae9961290e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data: + en: a393843965430a71 + zh: 45bc528b3a4c90c8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data-member-context: + en: 738c6cf7ce1029d2 + zh: 588afe1c1065c9f5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered: + en: 4b1c7ca06c9e3c09 + zh: 8670aad3d72ae4bf +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered-0-data: + en: cae29b88c795ef55 + zh: 99612d3ebba6051e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued: + en: 745dd60939965052 + zh: cc3f6e43cb7c705f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-0-data: + en: cec907db68ad9f5b + zh: b75c011c271fd222 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-0-data-message-delivery: + en: 7fa4d6fb177f8972 + zh: 9bcdc77cb0978efd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-task: + en: 4040eae193ca0117 + zh: 668e5b1a1dd50e93 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-team-task-0-data: + en: 440ff3b8fa9ab5aa + zh: caf73f74acbd6742 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write: + en: db164cde15cb855e + zh: 11fabe3f117240db +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data: + en: 9aa1529619586eb5 + zh: 1ef39f8ed4b21fdb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos: + en: 452eafa7144b6cca + zh: 619b9a73d1cc6f7b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos-0-status: + en: 520fcd9d58051e1d + zh: 5caee5e3abb71ff4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-end: + en: 8d3d782377a821a3 + zh: 159108902eb3ea8f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-start: + en: c510fe4425e612ae + zh: 5900024fd109ab27 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-end: + en: 3a81402e95482efc + zh: 79ce393bb76c0312 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-start: + en: a1737e75832db662 + zh: 35c31cf5995763be +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call: + en: a162139a0313fef6 + zh: b61e6a2d302e97f8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call-0-data: + en: 1fb24ba0613f975c + zh: da8eea88d8440807 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch: + en: b819eaf573684454 + zh: 1c1aa44c67b6930d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch-start: + en: f448c2cd9f5982da + zh: d8b4b8a38cf6ce8d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result: + en: 369762d4bdddfe38 + zh: fd315782713f5bbb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data: + en: ecb2926039013925 + zh: 387adec9e193b8e8 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-error: + en: d1e08acc6c5dab19 + zh: 4f788374c1e57c3c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-message-content: + en: 488873df302f51bd + zh: ba93c044c82007c5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta: + en: 17a9ba15cc12b018 + zh: d802a1cae6c1dba0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5: + en: b9192c6dda03f92f + zh: db8550f22f2e8039 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5-0-6: + en: 5bc101560ddf46f7 + zh: 42a0bf1dc15cda4d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end: + en: 96e6bcec8e5fd1eb + zh: 2bb4bba24ea70dd6 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data: + en: ae96fbf9f73cc6d9 + zh: 73dd9ee995991373 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-0: + en: 3dfb13f77e2cb7cc + zh: c6faa03063ca8983 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1: + en: 0aaf972fdffaca64 + zh: 4ccf44f7bf5a7479 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-1: + en: 84f101fd689219eb + zh: f5193da36ccde80e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-2: + en: dc1d6eb8e9a0041b + zh: 830ae1f36f216986 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-3: + en: 6d8cc31eeb7125d9 + zh: 7421bcc2025dd6e6 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-4: + en: c50286bf3aeb39bc + zh: 51aceecb93c2b0ef +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-2: + en: 3cd80a0df778877e + zh: 7e696294ed3cf75f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-3: + en: e0ba53b8079dc9df + zh: a4b644421b685cb0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-5: + en: f60286cf0c8f3340 + zh: 3c04f62cd0e43096 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start: + en: a9534c00dc731c20 + zh: bb39c42739c4b478 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start-0-data: + en: d430336a428ab570 + zh: 302e664e8febfe7f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-user-message: + en: e680c51e9de36ef6 + zh: 663932a4300b0bda +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request: + en: f150a2327ae39e66 + zh: eae62fdd99a8b3b5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body: + en: d296bfa494aa39f4 + zh: f6755293353eec9e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages: + en: 7bc6ebf7746c32f6 + zh: ce03410c4a2af043 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0: + en: b46fbb94b4140ac6 + zh: 7c5768ea21a44b5d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content: + en: 85e64f0ed8c70c63 + zh: fdbbaa6bf695750c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content-0: + en: 559bd65279d98e0d + zh: 48cf8c0d1c68725e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools: + en: b93841ceb27c424a + zh: 326d03c92626ebee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools-0: + en: c4dc73d6e1e1f735 + zh: a1fcd41a46736b2d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/every: + en: 51fd5017d7ffde2a + zh: 51fd5017d7ffde2a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/failed: + en: b575b371da801ea3 + zh: b575b371da801ea3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/fallback: + en: 649112f5242bfaae + zh: 649112f5242bfaae +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/feedback-record: + en: 6b40f9b0139b9993 + zh: 6b40f9b0139b9993 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/finish: + en: 5584d396d3c3e8e7 + zh: 5584d396d3c3e8e7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/fork: + en: 9df39e2322784cc1 + zh: 9df39e2322784cc1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/fresh: + en: 432ea99ec33c85e9 + zh: 432ea99ec33c85e9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/goal: + en: 666f8d9be933a1a0 + zh: 666f8d9be933a1a0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/goal-change: + en: e64d2f9c0eb72e58 + zh: e64d2f9c0eb72e58 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/hook: + en: 3d9e4dceb086f313 + zh: 3d9e4dceb086f313 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/hook-invoked: + en: 0fff5adfca472d26 + zh: 0fff5adfca472d26 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/hook-result: + en: dadff4cb415420c4 + zh: dadff4cb415420c4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/image: + en: 01ccf2962006ecbd + zh: 01ccf2962006ecbd +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/image-gif: + en: a1b541c33a91d722 + zh: a1b541c33a91d722 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/image-jpeg: + en: 672bf7bcb15c75d6 + zh: 672bf7bcb15c75d6 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/image-png: + en: 2828d354b5ea048f + zh: 2828d354b5ea048f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/image-webp: + en: 9d5d0ae78ddf215a + zh: 9d5d0ae78ddf215a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/in-progress: + en: 1fb447694017b3b4 + zh: 1fb447694017b3b4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/initial: + en: f6219cba9ec666f7 + zh: f6219cba9ec666f7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/instructions: + en: ab6adeaa2e4f550f + zh: ab6adeaa2e4f550f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/interrupted: + en: 883119e87d7025fb + zh: 883119e87d7025fb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/legacy: + en: 3cf6e62107d1f10a + zh: 3cf6e62107d1f10a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/llm-retry: + en: 2c25737ff5b2795d + zh: 2c25737ff5b2795d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/llm-retry-started: + en: 44190f34fedf9a64 + zh: 44190f34fedf9a64 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/max-tokens: + en: fdf8a83bf94f951a + zh: fdf8a83bf94f951a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/model: + en: 94c2e1d974d97b1b + zh: 94c2e1d974d97b1b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/model-selection: + en: c8447dd314f4245d + zh: c8447dd314f4245d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/never: + en: 0ae37c5148361fd2 + zh: 0ae37c5148361fd2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/never~2: + en: ed68f942446368c7 + zh: ed68f942446368c7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/next-step: + en: d15d41e5c085028c + zh: d15d41e5c085028c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/next-turn: + en: fa758be0e4ccc66f + zh: fa758be0e4ccc66f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/normal: + en: ceaa1aecef1af7a7 + zh: ceaa1aecef1af7a7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/notice: + en: f52681a6f5b56a06 + zh: f52681a6f5b56a06 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/null: + en: b30bc92f3bc4002e + zh: b30bc92f3bc4002e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/number: + en: fa771a5a47afb62f + zh: 1c663adf5e2da66a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/one-shot: + en: 33bf0d6f70941891 + zh: 33bf0d6f70941891 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-api-session-controller-src-types-ts-modelselection: + en: 493847eaba84dc3a + zh: 90e78c08c60e3968 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imageattachmentref: + en: ceb9c32bf4f5dc97 + zh: 110198dd9c5efc8a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imagemediatype: + en: 71584411013d0dd6 + zh: 4802068749131124 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-render-ts-agentinstructionchange: + en: 1917d01bdeec6acf + zh: e1eec30cf49bf1a9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-state-ts-agentinstructionsource: + en: da08ff1ca6cada8a + zh: a60c5c6742c2abb0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-context-session-reference-src-types-ts-sessionreferencesource: + en: fedc1418c587d085 + zh: 12046b9119fa85a2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-agent-src-types-ts-inboxtarget: + en: e1f2ce53c8f98583 + zh: c562b9b52be497ed +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-epochheader: + en: 38f547363628a60c + zh: e13df967ac93f107 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestcontext: + en: 1113e2bda3b3b8bf + zh: 500fafe35032617a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestheaderreason: + en: 2821bda80068769d + zh: 9c97d95ae312ed77 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-sessionheader: + en: 59c21c7713633ee0 + zh: 5fd520fdeb86472a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendcancelcause: + en: 6413938994476ab5 + zh: f5dd8819deb5ee6a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendreason: + en: 338033ec9bbfa79f + zh: 97418bc2384aad52 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-index-ts-toolrestriction: + en: 1a2d6b0174511ffd + zh: fa2ed291350d7a84 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatcheventdata: + en: 7fe18456a8074319 + zh: 304580c17952e475 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatchstarteventdata: + en: 937d5f72e9248727 + zh: 99b871fec7f35fcb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammemberphase: + en: a1b5ad35fdbbf2e9 + zh: 32d18494c2a1a25a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammembersnapshot: + en: 976fc16e88943155 + zh: 6a81ba9c93d0e499 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesnapshot: + en: b55f45bc4b5fcb88 + zh: 4de4ec53c3ecfb4c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesource: + en: dced732ef9b7c27a + zh: c679a31a2a4270d5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtasksnapshot: + en: a1bc77fc89efdb8e + zh: 62c4f35a161b83ed +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtaskstatus: + en: 5fcba67ea39da4d9 + zh: bf541ff50d7718df +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalchangemeta: + en: 52f747125b58df06 + zh: 666d71bf837ebf62 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalclearchangemeta: + en: b65e2d2272748f20 + zh: 0737406345989550 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalmessagesource: + en: 5bf53b593fa5c7a8 + zh: 4587c57c04721ee1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalsnapshotchangemeta: + en: a9ade284ff69c5a5 + zh: ed141b013c367860 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalblockreason: + en: a376958c396d7525 + zh: bf1051463954be80 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalphase: + en: ec2dbfe6dc9adca1 + zh: 5a1fbd2e3740f0c0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalref: + en: 0a431de9f8a9f6a5 + zh: b66ef4d2b8ed3bb9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalsnapshot: + en: ff21e17ac1c3a110 + zh: f9c05a92fd47e1f4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-hooks-hook-protocol-src-types-ts-hookdialect: + en: f7d0e7efbac812de + zh: ea5f9f1fdd57ea7d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-index-ts-approvalpolicy: + en: 2044a1198ef4f2b2 + zh: ad773b08c022587f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-types-ts-approvaloutcome: + en: a91accaedb68990d + zh: 3a28e7a839001839 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretryeventdata: + en: 15974e98a64d1b68 + zh: e2f560a1bee67137 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretrystartedeventdata: + en: c85306a885e7e193 + zh: 8b141703c3d6568e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfig: + en: d2e4e915c4f26fd0 + zh: 98eff6c3abe2925c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfigadapterdefaults: + en: 0836b6128069b319 + zh: 3a8d268cbd97ef17 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-assistantmessage: + en: 5b693aa4b613b57c + zh: 6cc530fdc746ee7c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-contextsnapshotsection: + en: cd9a0923ec2dd279 + zh: 69c2b3fc446b8ce9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-message: + en: d5c9c05d91534cc4 + zh: 8012545671239521 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-messagesource: + en: 57e982360db3d1d8 + zh: cf175869fc2fb4f0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-modelmessagesource: + en: 304f7bcb50f3fb29 + zh: 69c5deeee138a10e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolmessagesource: + en: 6342327f9ac63e1b + zh: d159ecead223e279 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolresultmessage: + en: 47a81583e71bcf07 + zh: 96ba235c8a64fda7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-usermessage: + en: aaa6b141ccf50e50 + zh: 8bab27ae7d18bc5b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblock: + en: 60d60f02c3333070 + zh: 9d62a795d20922ce +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblocktype: + en: f114a65a39c9e15e + zh: b753f87c963c991a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-finishreason: + en: e386972ab2685db5 + zh: cf023fdabe0c14d1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-imageblock: + en: 88bdeaa3cb99405b + zh: 328d969eb95f911c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-llmfailure: + en: 20d43b9189dc16b6 + zh: 13c889e27cb1f5fb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-reasoningblock: + en: e39fbb169387b33e + zh: faa6e0f164735b05 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-replayenvelope: + en: 552f7b870a76fd0b + zh: b214776e6df1a7c3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-streamchunk: + en: d0c7320647fcff8e + zh: 47a2f0790453d6fa +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-tokenusage: + en: 7250253d00740155 + zh: a69db8b056645a51 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolcallblock: + en: 0f14fe9e4d1c658f + zh: 46f3886b22bb9049 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolresultblock: + en: 19f8878888fdebad + zh: e3b9507d860425ae +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolschema: + en: 76762b72c9dbff65 + zh: ef944df9eeb85be5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-sandbox-sandbox-src-index-ts-sandboxmode: + en: 4d256867ef41502b + zh: 7e63268eb7efeb4e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-afterschedulerecord: + en: 2d007d6563b437d0 + zh: 1750279ef41dddeb +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-atschedulerecord: + en: 5bbd9981e9a7f54d + zh: 18e024928899cb1f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyscheduledispatchchange: + en: 071057beba6ba5f0 + zh: 69d6e8c5e4575b6c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyschedulerecord: + en: 0da520c824c87dd4 + zh: 018ff8be9ebca34a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-oneshotscheduledispatchchange: + en: 5de428c6f4127035 + zh: 5a383261736379ab +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulechange: + en: b9e80bb6bd2ac91e + zh: c6a4c99a4336a59e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulecreatechange: + en: 2d64658c34cda1cc + zh: 1fb263941dafaa96 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-scheduledeletechange: + en: 4fdd5e804bb84bd1 + zh: 84a629aa2ab12c22 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulerecord: + en: 166c94a721d8754d + zh: 81b7fafb2ad44106 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-persistence-jsonl-src-format-ts-headerline: + en: 9c243dc77c9d142a + zh: 2a9ac5b451280671 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-llm-src-index-ts-sessiontitlellmrequesteventdata: + en: 10a720cdde06a603 + zh: 053476328f5d2177 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitleeventdata: + en: f011034884bac897 + zh: 4a65516a575d49d7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlemodelprovenance: + en: 47e8dbd5749237fd + zh: c8146562f7353e15 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlesource: + en: 61dda3b6cff145f7 + zh: 1750b650436bf8f9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-skill-src-index-ts-skillinvocationsource: + en: 1856fd60d7251651 + zh: b6a45c49d14f1041 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-tool-skill-src-index-ts-skillcatalogsource: + en: 8b3b65e3e03bf592 + zh: 3607f502cc2f4383 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-ts-agentmessagesource: + en: 11a5c05701854c21 + zh: 4855a0864f82897d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-ts-subagentsettledmessagesource: + en: 632b5cb1c2f4629c + zh: 869cc8a532cd04ed +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-continuablesubagentdescriptordata: + en: 38c8e74993edbb98 + zh: 36574175a1d1c5d6 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-oneshotsubagentdescriptordata: + en: 3e5bf40300f8b1a9 + zh: 07e412c1fcddcb7d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-subagentdescriptordata: + en: cf1809183c40b3ea + zh: 6b74af2c94dea3de +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-todo-tool-todo-src-types-ts-todoitem: + en: 0e69a3e398b4614b + zh: dda89947907528ac +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-web-web-search-deepseek-src-provider-ts-deepseeksearchllmrequest: + en: 46739f64ad77c2bd + zh: 448b3d91be7b7381 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentenddata: + en: 59304dd3c0940627 + zh: e1643dbec00a0cc9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentstartdata: + en: fa9dc562eede5de9 + zh: de2b31b6e552e282 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunenddata: + en: 14cad9b03a5e4711 + zh: a74514271b70aaf2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunstartdata: + en: 69bb21d7582bb2b4 + zh: 0aa74aaf62b13665 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowagentoutcome: + en: efb9ea2c4f84fa05 + zh: 1df4ec831fc807d9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowstopreason: + en: d8a79a37d49821c7 + zh: 7726867b41c376b9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/parent: + en: 138ccfb49ca3008f + zh: 138ccfb49ca3008f +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/pause: + en: ca7e406cd0ef4c8b + zh: ca7e406cd0ef4c8b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/paused: + en: 6bf09e8e304d79dc + zh: 6bf09e8e304d79dc +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/pending: + en: bd71499d6cf79f5d + zh: bd71499d6cf79f5d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/permission-preset: + en: afc55750e84562e0 + zh: afc55750e84562e0 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/plan-mode: + en: 5fb58af86d74ea6d + zh: 5fb58af86d74ea6d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/plugin: + en: a98f88ae1609c550 + zh: a98f88ae1609c550 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/provider: + en: 4fbeeac070898211 + zh: 4fbeeac070898211 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/provisioning: + en: 2ac9ccd27b9cd0c2 + zh: 2ac9ccd27b9cd0c2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/quiet: + en: 3cc24a48b0bc33d5 + zh: 3cc24a48b0bc33d5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/read-only: + en: 2855b1c06597641c + zh: 2855b1c06597641c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/reasoning: + en: 590aab976614ab13 + zh: 590aab976614ab13 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/reasoning-delta: + en: b90bb3db67fca7f5 + zh: b90bb3db67fca7f5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/recall: + en: 76399cebf971bf28 + zh: 76399cebf971bf28 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/rejected: + en: c208015c158ef23e + zh: c208015c158ef23e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/relay: + en: 7db0fdc1a7d63d74 + zh: 7db0fdc1a7d63d74 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/remove: + en: 11a78466931d25aa + zh: 11a78466931d25aa +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/replace: + en: b472d3d1e96f970a + zh: b472d3d1e96f970a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/request-context: + en: e2401b5ab5b79c4d + zh: e2401b5ab5b79c4d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/request-header: + en: 059fa0b4904838ac + zh: 059fa0b4904838ac +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/resume: + en: fa76642f444ed47a + zh: fa76642f444ed47a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sandbox-mode: + en: 109998dd842433c9 + zh: 109998dd842433c9 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/schedule-change: + en: e51c1621e48332a7 + zh: e51c1621e48332a7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/series: + en: 201a1f0c2545d484 + zh: 201a1f0c2545d484 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session: + en: 048cb1117c9013a5 + zh: 048cb1117c9013a5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session-log-deepseek-delivery-accepted: + en: ffc8a093c3f86b77 + zh: ffc8a093c3f86b77 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session-reference: + en: 27ac5fc556d28db4 + zh: 27ac5fc556d28db4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session-end-seed: + en: 4b0280a733574017 + zh: 4b0280a733574017 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope: + en: 0a9247329822d24e + zh: 0ac4c2b235032853 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-0: + en: e224ec3b7717b112 + zh: 6e81f89e10ba47d4 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46: + en: d3540bafc0b7af4d + zh: 0bd472618edbf537 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-sourceeventseqs: + en: 5cd3a6078c43ccb0 + zh: f2a1f9cee138526a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-surfaceop: + en: 22cb4ca82f45ede5 + zh: da5e59dfb01ef10b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-46-surfaceop-1: + en: 5102be6016b3971e + zh: 93b5b3197ef25c01 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session-title: + en: c03d3b602c6286c5 + zh: c03d3b602c6286c5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/session-title-llm-request: + en: 2c21870ea85db0ba + zh: 2c21870ea85db0ba +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/set: + en: 3fecff2d7d8c2446 + zh: 3fecff2d7d8c2446 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/skill-catalog: + en: e6881abff7181f8b + zh: e6881abff7181f8b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/skill-invocation: + en: 0a0abb5d6b6dd8ee + zh: 0a0abb5d6b6dd8ee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/snapshot: + en: dc576ee2c0ff38ee + zh: dc576ee2c0ff38ee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/step-end: + en: 23f7e4121528704d + zh: 23f7e4121528704d +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/step-start: + en: 258c004218f5c5cf + zh: 258c004218f5c5cf +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/stop: + en: 5d836dbb81d9efe7 + zh: 5d836dbb81d9efe7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/string: + en: d1b834b0fae294a2 + zh: 17e30c3ccda15957 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/subagent: + en: 0bdce21b04fc85b7 + zh: 0bdce21b04fc85b7 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/subagent-settled: + en: 1c37561a6e95743a + zh: 1c37561a6e95743a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/subagent-descriptor: + en: cf116d4d04677f5e + zh: cf116d4d04677f5e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/subagent-model-selection-policy: + en: b95ff0ac6eb6fe07 + zh: b95ff0ac6eb6fe07 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/success: + en: f9878ddcde6cbf6c + zh: f9878ddcde6cbf6c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/system: + en: 9a257934a5c024c1 + zh: 9a257934a5c024c1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/team-message: + en: f33fffc365cd3dee + zh: f33fffc365cd3dee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/team-member: + en: 64723754b03404fe + zh: 64723754b03404fe +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/team-message-delivered: + en: bcb920ce77effc35 + zh: bcb920ce77effc35 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/team-message-queued: + en: 96ef7c27ed87f71a + zh: 96ef7c27ed87f71a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/team-task: + en: 67290d348838a6e1 + zh: 67290d348838a6e1 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/text: + en: eca053e36f361c06 + zh: eca053e36f361c06 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/text-delta: + en: b92d346827f57b42 + zh: b92d346827f57b42 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/todo-write: + en: 56b4922b448344c2 + zh: 56b4922b448344c2 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool: + en: 4fe3dbdd8790897e + zh: 4fe3dbdd8790897e +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-call: + en: 948376359765fd97 + zh: 948376359765fd97 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-call-delta: + en: cc93118e927b7681 + zh: cc93118e927b7681 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-calls: + en: ee8cad1294cc1b1a + zh: ee8cad1294cc1b1a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-result: + en: ff329758f7b78d96 + zh: ff329758f7b78d96 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-end: + en: b28e7f3c40a7c3ee + zh: b28e7f3c40a7c3ee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-start: + en: e7e61b03558f2d90 + zh: e7e61b03558f2d90 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-end: + en: 2e6da5ad2eed59cf + zh: 2e6da5ad2eed59cf +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-start: + en: 3007417a998b650c + zh: 3007417a998b650c +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-call~2: + en: e038b6d4a29f44d5 + zh: e038b6d4a29f44d5 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch: + en: 155bcd6a6928153b + zh: 155bcd6a6928153b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch-start: + en: beb7b669a6b8db34 + zh: beb7b669a6b8db34 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/tool-result~2: + en: f426dd9a97d97631 + zh: f426dd9a97d97631 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/true: + en: 8141814fd7986b02 + zh: 8141814fd7986b02 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/turn-end: + en: 94aac556c4be113a + zh: 94aac556c4be113a +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/turn-start: + en: 8fae22745547795b + zh: 8fae22745547795b +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/unavailable: + en: c3e0a238f6e53159 + zh: c3e0a238f6e53159 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/unknown: + en: 528fe3840778b37d + zh: 004bf8cc871e6270 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/usage: + en: 496d552369f72775 + zh: 496d552369f72775 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/user: + en: 8df99d357725f7e3 + zh: 8df99d357725f7e3 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/user-message: + en: 83b747a808721227 + zh: 83b747a808721227 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/wakeup: + en: 42a81c0609551002 + zh: 42a81c0609551002 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/web-search: + en: 5d5f50cfff9b8f73 + zh: 5d5f50cfff9b8f73 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/web-search-20250305: + en: d7bdd7805e7f8acc + zh: d7bdd7805e7f8acc +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/web-deepseek-search-llm-request: + en: c2ac7c44723d7c64 + zh: c2ac7c44723d7c64 +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/webhook: + en: 95280ea5e6be4eee + zh: 95280ea5e6be4eee +/session-v1-persistence-format/complete-schemas/resolved-persistence-types/workspace-write: + en: e1ff2d052fbfd033 + zh: e1ff2d052fbfd033 +/session-v1-persistence-format/verification-and-limitations: + en: 278b6f204f2ef42a + zh: aede572758f1dff5 +/session-v1-persistence-format/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/historical-formats/v2.i18n.yaml b/docs/persistence-changes/historical-formats/v2.i18n.yaml index 880df63a56..1a7d94a966 100644 --- a/docs/persistence-changes/historical-formats/v2.i18n.yaml +++ b/docs/persistence-changes/historical-formats/v2.i18n.yaml @@ -1,6 +1,1345 @@ -# 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 v2.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 docs/persistence-changes/historical-formats/v2.md -v2.md: e37a81da6c34dd5936898d9c87c7f1d31e0b03b9 -v2.zh.md: c54170ff050f64c998a4ad3eeeeac216b0dfa913 +/: + en: 22408ba1c572a26c + zh: 386b53dd02871c92 +/session-v2-persistence-format: + en: 932bb0331ea1758d + zh: dce407745ec1036b +/session-v2-persistence-format/summary: + en: ec8ad8b6a8a141ad + zh: 0c448b93ff2f58d3 +/session-v2-persistence-format/table-of-contents: + en: e7feb612882a1520 + zh: 28e81ddf50d4b242 +/session-v2-persistence-format/source-evidence: + en: 69c414834601a76d + zh: 24af397c096e46ee +/session-v2-persistence-format/format-characteristics: + en: 5e09ab966e5b4cb7 + zh: f315f9da2ee53777 +/session-v2-persistence-format/declaration: + en: 6a4ae1e1fefdf017 + zh: 97cfee967cdd3962 +/session-v2-persistence-format/complete-schemas: + en: c6428f1d590e1bc0 + zh: b71bdac7e0ae546a +/session-v2-persistence-format/complete-schemas/persistence-type-fingerprints: + en: 46354bbe7ea8ec68 + zh: 57e9ebe2cd16d6a8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types: + en: b8f551dec51d8dc7 + zh: a004c2a176e44d37 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/1: + en: c3de4bf2df0a2a60 + zh: c3de4bf2df0a2a60 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/2: + en: e3b13e4c44af5974 + zh: e3b13e4c44af5974 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/aborted: + en: e250e361c2cfc6b3 + zh: e250e361c2cfc6b3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/active: + en: d188185641b6d076 + zh: d188185641b6d076 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/after: + en: 22b913fe56ac8226 + zh: 22b913fe56ac8226 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/agent-instructions: + en: f83d99fa490a32e4 + zh: f83d99fa490a32e4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/agent-message: + en: 833d1a5a60a277d5 + zh: 833d1a5a60a277d5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/agent-preset-selected: + en: 399bbb8b47b4c42c + zh: 399bbb8b47b4c42c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/agent-inbox-spliced: + en: bec55272af567f64 + zh: bec55272af567f64 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/allowed-once: + en: ea0eb66aee54ca47 + zh: ea0eb66aee54ca47 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/always: + en: ed838315dbbc93c9 + zh: ed838315dbbc93c9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/append: + en: d4a8289f20c370ba + zh: d4a8289f20c370ba +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/approval-asked: + en: 0d5f12a9775a2ee4 + zh: 0d5f12a9775a2ee4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/approval-decided: + en: 7b2781cdf31b22fb + zh: 7b2781cdf31b22fb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/approval-policy: + en: 94f10413eddbecb0 + zh: 94f10413eddbecb0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/ask: + en: f62c1a03b55a17fe + zh: f62c1a03b55a17fe +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/assistant: + en: 99c01a9de336b849 + zh: 99c01a9de336b849 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/assistant-attempt: + en: f438dafd82b1b0f5 + zh: f438dafd82b1b0f5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/assistant-message: + en: 236f19fd8c1f3fac + zh: 236f19fd8c1f3fac +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/at: + en: 8c6aaa696ae105d7 + zh: 8c6aaa696ae105d7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/block: + en: 784ca3e7ac724495 + zh: 784ca3e7ac724495 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/block-end: + en: 4d012513a3a69a1d + zh: 4d012513a3a69a1d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/block-start: + en: 0d8d3b25f8d41c7d + zh: 0d8d3b25f8d41c7d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/blocked: + en: 2441252fd2f2f610 + zh: 2441252fd2f2f610 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/boolean: + en: a71c6a870d0e5644 + zh: a71c6a870d0e5644 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/canceled: + en: d76f449c560d60ea + zh: d76f449c560d60ea +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/cancelled: + en: 846f994e5779f4df + zh: 846f994e5779f4df +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/catalog: + en: 871a46b7f22deed4 + zh: 871a46b7f22deed4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/change: + en: a7aeaa532cc95482 + zh: a7aeaa532cc95482 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/chunk: + en: 2809c65c1d854d57 + zh: 2809c65c1d854d57 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/claude-code: + en: 5078780cad778727 + zh: 5078780cad778727 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/clear: + en: cf346da1c71650c9 + zh: cf346da1c71650c9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/codex: + en: c7537bafe02ae9e3 + zh: c7537bafe02ae9e3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/command-done: + en: f3b07f41730ba043 + zh: f3b07f41730ba043 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/command-run: + en: da41772ac0129a00 + zh: da41772ac0129a00 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/compaction-end: + en: ee2c2f7cc1b47796 + zh: ee2c2f7cc1b47796 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/compaction-prune: + en: 8d9d285edd3832ef + zh: 8d9d285edd3832ef +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/compaction-start: + en: 76b15fdde7ccbc44 + zh: 76b15fdde7ccbc44 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/compaction-summary: + en: d989a4b96d0be485 + zh: d989a4b96d0be485 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/complete: + en: 6e41ba49ef0a4576 + zh: 6e41ba49ef0a4576 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/completed: + en: 47c55824c32fa217 + zh: 47c55824c32fa217 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/continuable: + en: fc856412f156c726 + zh: fc856412f156c726 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/create: + en: 0f283be27812d545 + zh: 0f283be27812d545 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/danger-full-access: + en: 9a8bf8688932871a + zh: 9a8bf8688932871a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/delegation: + en: 56b80179b43c08e8 + zh: 56b80179b43c08e8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/delete: + en: 9fff834c5e7c08d4 + zh: 9fff834c5e7c08d4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/deleted: + en: 1860d7529e5550b9 + zh: 1860d7529e5550b9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/dispatch: + en: 700b762d388963ee + zh: 700b762d388963ee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/disposed: + en: a7c3ac84c05c078c + zh: a7c3ac84c05c078c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/edit: + en: 2d4b7de3576a7449 + zh: 2d4b7de3576a7449 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/error: + en: 414c53999fd5b83b + zh: 414c53999fd5b83b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected: + en: c1a26b63c0f4ac65 + zh: 34ef0fb0448250e8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected-0-data: + en: a8965b961b89317f + zh: 5658601a8577cfb9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced: + en: bcd96e9287b66ce2 + zh: c2d7a6495e870597 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data: + en: d2d9189786a071a3 + zh: 57625c128cd1c0af +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted: + en: 0e781f0c3a0818e2 + zh: fb92ace5c15f4495 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content: + en: e7f09505bca6bf8e + zh: 1f1d22699217455e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-content-0-2-attachment-originaldimensions: + en: a7e7ee08313a9d4d + zh: 8aa85e29f98b16a4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-0: + en: 8e95d4505a63522d + zh: 2b3d24af8f276246 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-1: + en: d1d323c3fce06625 + zh: 1387b75f79284367 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-10: + en: d51703b4abfc06b4 + zh: 4b401addf904c97a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references: + en: 34dc1e0d7ebd1191 + zh: a4094b338868b4f8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-15-references-0: + en: eab69cc7227d7373 + zh: 785fdfe4f748e997 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries: + en: 63630ec677b237d1 + zh: 09356e9204907336 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-16-entries-0: + en: 6e490754b31dfa54 + zh: e2c020b1b4596edd +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes: + en: 1d6d10efc4089925 + zh: 600566dda597d154 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-17-changes-0-action: + en: f64dd2b7b63cef7d + zh: 90d34368ed07f1ba +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-19: + en: 709bc35a1600e5ac + zh: c5589708c152a638 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-2: + en: d7661da2aeb0df22 + zh: 051ae40f3425884a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-3: + en: 7638d5f099cda059 + zh: 0a529ba36a138a92 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4: + en: 44b1ff53603bca5c + zh: 08538e884dc575b2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-4-sections: + en: 1635c3f392c3ae6f + zh: 0976b45411f54446 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-5: + en: 103ab4a0e516070a + zh: 02e2c5b5cbe09a4f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-6: + en: 7f12f16e552dbc3e + zh: 2727483036193db3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-0-data-inserted-0-source-7: + en: 66bcf53022fd4d7e + zh: 38060f4d3d2d2731 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked: + en: 8190df824cb01b73 + zh: 4dab315a2202c148 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked-0-data: + en: 8a61b07653c46891 + zh: 520efe5bc909fc11 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided: + en: 8db14f9096672bc3 + zh: 6d1d184bd96ac527 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided-0-data: + en: 04293c18046f57a8 + zh: b78c584b872d17b3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy: + en: 888474174bdf2ca9 + zh: f7cf8d7d81ffe4ad +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy-0-data: + en: df63310af0531e86 + zh: 615561608b21d0d4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt: + en: 1e2242564988cc4a + zh: 889ef191d1f34cfd +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data: + en: 0f1b4f74cf541434 + zh: e066fc8c92c055ac +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream: + en: be1b754e7957825b + zh: d5a3fdfc88dcbc87 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-0: + en: 3364fdc14ad79a93 + zh: d857a47c9dd2ef83 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-0-texts: + en: 3217082615acc260 + zh: a147956a3a7fdd7e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-1: + en: 96c2a0e78d21b009 + zh: dad4dfeffdb4459e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-2: + en: 1f3f87a6e039861a + zh: 284770ec53340fdf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3: + en: 46988f2354ed636e + zh: fd5a48385f574031 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-0: + en: 1b58bfe2b87c9f90 + zh: 1147eec8d48e2120 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-1: + en: c4abe74d759de1fe + zh: c40b00b64fb16211 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-2: + en: 848aa8b5dc029e3e + zh: 0bab08af9ead0b2e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-3: + en: 7ea0bc9d23de6cfb + zh: 58d64c1f7c375bf0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-4: + en: efae8e44924ac899 + zh: cf91b8179d2942dc +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-5: + en: 87529f0aeb4f4c3a + zh: 586bf1a803c0f7f2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6: + en: 3b6983faf7613c6c + zh: 1706925bd4250d06 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-reason-0: + en: 6a0252f7309db17e + zh: 46c5ae4ed718d378 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-reason-1: + en: 512c7dd0f5e38ef6 + zh: 323374036aa33f26 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-reason-2: + en: c9a0b463a619d4d0 + zh: 94bd287594eb7d6c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-reason-3: + en: f83bc829e07e4c57 + zh: 715d1a0b23502708 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-reason-4: + en: 5cc506af5a57eb7e + zh: 67224ff530ee9fdd +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-0-data-stream-0-3-chunk-6-replaystate-blocks: + en: 33d99c309b1da8fb + zh: b5dce799b1c0ea0d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message: + en: fa8f7440c01b40ce + zh: 99cc402d8467bb1b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message-data: + en: 1e07b12689aa65cd + zh: b46d8ece31d92a66 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-command-done: + en: 3596e06faad385f2 + zh: 8feb2c89a57176ff +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data: + en: c73bebb5d1f23818 + zh: ab8e7a18a1aae1bf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-0-data-kind: + en: 9d70d772eaf91bc4 + zh: 87136b9f8f49be51 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-command-run: + en: df23852c38c27d4c + zh: c87f3047015d1728 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-command-run-0-data: + en: 142412d3816cc147 + zh: 839d5285dcc80d00 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end: + en: adb899d513b04b85 + zh: 57c7aa321fcc8a0a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data: + en: 2c5427b65e2fbda6 + zh: ec54cbb57ff07b77 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-0-data-turn: + en: 78372c0fb32ee47a + zh: bf2ea077f0a90fb3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune: + en: dd830cbd4e50e8dc + zh: 09c29e09f0c18329 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data: + en: 09aaab6f57950dc7 + zh: 956082a7cdcef059 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-0-data-shadowedrange: + en: 88d667fc6e025ffe + zh: 5c617da59429b428 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start: + en: aa32265db4888784 + zh: 19e2396c7b677d9c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start-0-data: + en: b8ab7a9a177a8bcc + zh: e5211fb93cc9937f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary: + en: 93edcb6a16a696ae + zh: 73c39f816840f2cb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data: + en: d2547a7c788759a1 + zh: 0de56d2b234eecd0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-0: + en: 657d1a1dd6ce5758 + zh: 8f961a1f9f5b827d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-0-data-1: + en: 7d9cd9aaa9cd963c + zh: e615fed63253f8d9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-message-delete: + en: f191656f68399b7e + zh: 4d1a63462bf2c86e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-message-put: + en: 09eeeb7bebd6f156 + zh: 86d77d687fe9e1a8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record: + en: e9c4df3f83f3b43c + zh: 61b7321691944dd9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record-0-data: + en: a50914064af3f4e9 + zh: d8897e507c9a5ee5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change: + en: 70be93a4eb3dc7ee + zh: 6a429a3ba21e51da +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change-0-data-0-operation: + en: 921b396a0fc10bf3 + zh: 08a2d63946f5fe8b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked: + en: ec073510d9a38e16 + zh: 07fa3f750291878e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked-0-data: + en: 5af8bcbd9a0c6f8c + zh: bab6ee04f300641b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result: + en: d5131191697486de + zh: ea2ac0dc591703f5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result-0-data: + en: 682776bea8e140ac + zh: fd0f388bb57dd6a2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry: + en: 7df8c82a65a03cfa + zh: b8c5f30cc5fe9b2a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-started: + en: 7417e80152a2072f + zh: 285c30ffc6e5653c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-0: + en: 8411acca54606bae + zh: 07ec6d54a8ab8c7c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-0-data-1: + en: 103af568ba9415ab + zh: b546bda06d3aaa64 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-model-selection: + en: 5f14789be2791853 + zh: 676c250e88e2d516 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset: + en: 44ee48b2303bb057 + zh: f27bb2b6df93dd3f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset-0-data: + en: 3813f99e9a16521a + zh: 3df37c8ae20894d1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode: + en: 12029b700a139f57 + zh: d38d31a8ee3d1b51 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode-0-data: + en: 556466a17c7c3bec + zh: 5e69ee389e57d8c7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-request-context: + en: 2007a43baec1851d + zh: 9f861fe8b79ec6a4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-request-header: + en: 8b41be53bf3da24d + zh: e2545092c23b3c98 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data: + en: 2779ff0cb0a3bc4d + zh: df0690f67f62d884 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools: + en: 14d69bec03917623 + zh: 2a2bdb086d81f395 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-0-data-header-tools-0-parameters: + en: 3cbf596abcc069c7 + zh: 48ed1c20a9e43782 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode: + en: 3645c689724b70e8 + zh: 80fdce8c3fe846fd +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode-0-data: + en: 2d2f04c7b696776e + zh: 45ed5049f8fef75d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-schedule-change: + en: 616eb4ccc6035bda + zh: 9f8ac1aff9ecd528 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted: + en: d7c30efc4463452e + zh: 27d3894734a824b6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted-0-data: + en: 206f43f7378d6e42 + zh: 47f8df792e271630 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed: + en: f65f98447aa84be8 + zh: f94a47a40535a6f7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed-0-data: + en: 07ed4e1f94f92407 + zh: b2ad7538ae8103b7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title: + en: 3a3ccf19428de1f9 + zh: 86efd0288576cedf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request: + en: 3858aa467f7143de + zh: 4e98f0b465bbf447 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages: + en: 722f2c65354a891a + zh: 1616d2b5f4732040 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-0-data-messages-0-role: + en: 3bd736b88c51a6a9 + zh: 970bf305d2ffa2f9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-0: + en: bd0793d47846a971 + zh: 09cba95ac91aa96c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-0-data-source-1: + en: 372898891057137f + zh: b08a11163a1ea14a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-step-end: + en: 6630487acd01e8f9 + zh: df7ae8a98a88255e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-step-end-0-data: + en: 3bfb706083262259 + zh: fd47a21677bff75e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-step-start: + en: 90d6a0844983d65e + zh: 2b073499b9d57745 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-descriptor: + en: 46636916f7c3dafa + zh: 17224855c9a1a31e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy: + en: efad70e276a00c44 + zh: 7126efded470fca1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data: + en: 579ab4f055fda154 + zh: be1bc1474eacfb56 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-0-data-allowedmodels: + en: 2e03a99ebce59cbe + zh: 8fc58a409026a038 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-member: + en: 91b9cce2c67b12a7 + zh: c7c9c9850422061a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data: + en: a8dcac6cee183ea5 + zh: 1945fed1c6f17535 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-0-data-member-context: + en: 738c6cf7ce1029d2 + zh: 588afe1c1065c9f5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered: + en: 16677908357630d4 + zh: 9196aa98e81f2b4a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered-0-data: + en: eb11ad5a8a2a7817 + zh: 416fd15118a65f83 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued: + en: 23848e9a45262a13 + zh: 128dba1c281a8752 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-0-data: + en: fac16d05b2a9e0ad + zh: 5153a896b739a79c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-task: + en: c2287b12ecd943ce + zh: 2298f6e767cfba0e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-team-task-0-data: + en: c05d6d97e8ed9d6d + zh: 162f8b8121cb8362 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write: + en: db164cde15cb855e + zh: 11fabe3f117240db +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data: + en: 9aa1529619586eb5 + zh: 1ef39f8ed4b21fdb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos: + en: 452eafa7144b6cca + zh: 619b9a73d1cc6f7b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-0-data-todos-0-status: + en: 520fcd9d58051e1d + zh: 5caee5e3abb71ff4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-end: + en: 8d3d782377a821a3 + zh: 159108902eb3ea8f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-start: + en: c510fe4425e612ae + zh: 5900024fd109ab27 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-end: + en: 3a81402e95482efc + zh: 79ce393bb76c0312 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-start: + en: a1737e75832db662 + zh: 35c31cf5995763be +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call: + en: a162139a0313fef6 + zh: b61e6a2d302e97f8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call-0-data: + en: 1fb24ba0613f975c + zh: da8eea88d8440807 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch: + en: b46a4f85a9bcc0f6 + zh: a86696a7291357ce +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-code-dispatch-start: + en: f448c2cd9f5982da + zh: d8b4b8a38cf6ce8d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result: + en: e5c4711601038579 + zh: 8a4d2aba3b20f382 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data: + en: 68b45709a4b5cab6 + zh: b892a5bf09e5368f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-error: + en: d1e08acc6c5dab19 + zh: 4f788374c1e57c3c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-message-content: + en: 01cc19e1340348e7 + zh: 5685f783d029d7f9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta: + en: 17a9ba15cc12b018 + zh: d802a1cae6c1dba0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5: + en: b9192c6dda03f92f + zh: db8550f22f2e8039 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5-0-6: + en: 5bc101560ddf46f7 + zh: 42a0bf1dc15cda4d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end: + en: 96e6bcec8e5fd1eb + zh: 2bb4bba24ea70dd6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data: + en: ae96fbf9f73cc6d9 + zh: 73dd9ee995991373 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-0: + en: 3dfb13f77e2cb7cc + zh: c6faa03063ca8983 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1: + en: 0aaf972fdffaca64 + zh: 4ccf44f7bf5a7479 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-1: + en: 84f101fd689219eb + zh: f5193da36ccde80e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-2: + en: dc1d6eb8e9a0041b + zh: 830ae1f36f216986 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-3: + en: 6d8cc31eeb7125d9 + zh: 7421bcc2025dd6e6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-1-reason-4: + en: c50286bf3aeb39bc + zh: 51aceecb93c2b0ef +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-2: + en: 3cd80a0df778877e + zh: 7e696294ed3cf75f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-3: + en: e0ba53b8079dc9df + zh: a4b644421b685cb0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-0-data-reason-5: + en: f60286cf0c8f3340 + zh: 3c04f62cd0e43096 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start: + en: a9534c00dc731c20 + zh: bb39c42739c4b478 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start-0-data: + en: d430336a428ab570 + zh: 302e664e8febfe7f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-user-message: + en: 5cee91d44709032b + zh: 6279d8bbc1462a94 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request: + en: f150a2327ae39e66 + zh: eae62fdd99a8b3b5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body: + en: d296bfa494aa39f4 + zh: f6755293353eec9e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages: + en: 7bc6ebf7746c32f6 + zh: ce03410c4a2af043 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0: + en: b46fbb94b4140ac6 + zh: 7c5768ea21a44b5d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content: + en: 85e64f0ed8c70c63 + zh: fdbbaa6bf695750c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-messages-0-content-0: + en: 559bd65279d98e0d + zh: 48cf8c0d1c68725e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools: + en: b93841ceb27c424a + zh: 326d03c92626ebee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-0-data-body-tools-0: + en: c4dc73d6e1e1f735 + zh: a1fcd41a46736b2d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/every: + en: 51fd5017d7ffde2a + zh: 51fd5017d7ffde2a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/failed: + en: b575b371da801ea3 + zh: b575b371da801ea3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/fallback: + en: e49ed81b4e17695c + zh: e49ed81b4e17695c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/feedback-message-delete: + en: f40ebfa797f8d352 + zh: f40ebfa797f8d352 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/feedback-message-put: + en: 982e6a3958458ded + zh: 982e6a3958458ded +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/feedback-record: + en: 88ecab66290e7f11 + zh: 88ecab66290e7f11 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/file: + en: b23fa805b21073e8 + zh: b23fa805b21073e8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/finish: + en: 5584d396d3c3e8e7 + zh: 5584d396d3c3e8e7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/fork: + en: 9df39e2322784cc1 + zh: 9df39e2322784cc1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/fresh: + en: 432ea99ec33c85e9 + zh: 432ea99ec33c85e9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/goal: + en: 666f8d9be933a1a0 + zh: 666f8d9be933a1a0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/goal-change: + en: e64d2f9c0eb72e58 + zh: e64d2f9c0eb72e58 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/hook: + en: 3d9e4dceb086f313 + zh: 3d9e4dceb086f313 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/hook-invoked: + en: 0fff5adfca472d26 + zh: 0fff5adfca472d26 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/hook-result: + en: dadff4cb415420c4 + zh: dadff4cb415420c4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/image: + en: 01ccf2962006ecbd + zh: 01ccf2962006ecbd +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/image-gif: + en: a1b541c33a91d722 + zh: a1b541c33a91d722 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/image-jpeg: + en: 672bf7bcb15c75d6 + zh: 672bf7bcb15c75d6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/image-png: + en: 2828d354b5ea048f + zh: 2828d354b5ea048f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/image-webp: + en: 9d5d0ae78ddf215a + zh: 9d5d0ae78ddf215a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/in-progress: + en: 1fb447694017b3b4 + zh: 1fb447694017b3b4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/initial: + en: f6219cba9ec666f7 + zh: f6219cba9ec666f7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/instructions: + en: ab6adeaa2e4f550f + zh: ab6adeaa2e4f550f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/interrupted: + en: 883119e87d7025fb + zh: 883119e87d7025fb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/legacy: + en: 3cf6e62107d1f10a + zh: 3cf6e62107d1f10a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/llm-retry: + en: 2c25737ff5b2795d + zh: 2c25737ff5b2795d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/llm-retry-started: + en: 44190f34fedf9a64 + zh: 44190f34fedf9a64 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/max-tokens: + en: fdf8a83bf94f951a + zh: fdf8a83bf94f951a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/model: + en: 94c2e1d974d97b1b + zh: 94c2e1d974d97b1b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/model-selection: + en: ebdbe24b80bad7c5 + zh: ebdbe24b80bad7c5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/negative: + en: accae7d8ab214073 + zh: accae7d8ab214073 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/never: + en: cdccc0b875c27bf4 + zh: cdccc0b875c27bf4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/next-step: + en: d15d41e5c085028c + zh: d15d41e5c085028c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/next-turn: + en: fa758be0e4ccc66f + zh: fa758be0e4ccc66f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/normal: + en: ceaa1aecef1af7a7 + zh: ceaa1aecef1af7a7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/notice: + en: f52681a6f5b56a06 + zh: f52681a6f5b56a06 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/null: + en: b30bc92f3bc4002e + zh: b30bc92f3bc4002e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/number: + en: fa771a5a47afb62f + zh: 1c663adf5e2da66a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/one-shot: + en: 33bf0d6f70941891 + zh: 33bf0d6f70941891 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-api-session-controller-src-types-ts-modelselection: + en: 89d04e3aa5646241 + zh: bccbf3c983981215 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-fileattachmentref: + en: c487b753693721a6 + zh: 1e0757df3382d07c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imageattachmentref: + en: ceb9c32bf4f5dc97 + zh: 110198dd9c5efc8a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imagemediatype: + en: 71584411013d0dd6 + zh: 4802068749131124 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-render-ts-agentinstructionchange: + en: 1917d01bdeec6acf + zh: e1eec30cf49bf1a9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-state-ts-agentinstructionsource: + en: da08ff1ca6cada8a + zh: a60c5c6742c2abb0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-context-session-reference-src-types-ts-sessionreferencesource: + en: fedc1418c587d085 + zh: 12046b9119fa85a2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-agent-src-types-ts-inboxtarget: + en: e1f2ce53c8f98583 + zh: c562b9b52be497ed +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-epochheader: + en: 38f547363628a60c + zh: e13df967ac93f107 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestcontext: + en: 1113e2bda3b3b8bf + zh: 500fafe35032617a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestheaderreason: + en: 2821bda80068769d + zh: 9c97d95ae312ed77 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-sessionheader: + en: be963ff5c3126883 + zh: c20525be72acc918 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendcancelcause: + en: 6413938994476ab5 + zh: f5dd8819deb5ee6a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendreason: + en: ce42c3f5902bcebf + zh: 790d43b0e0f5497b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-index-ts-toolrestriction: + en: 62a8f5eb28cfd3cb + zh: 4e97016f03e07b01 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatcheventdata: + en: ef8e18558807b66e + zh: d40dae22d5a2c643 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatchstarteventdata: + en: 937d5f72e9248727 + zh: 99b871fec7f35fcb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammemberphase: + en: a1b5ad35fdbbf2e9 + zh: 32d18494c2a1a25a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammembersnapshot: + en: 976fc16e88943155 + zh: 6a81ba9c93d0e499 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesnapshot: + en: 0b1545906b0e07a7 + zh: f74d74e96e0b036c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesource: + en: dced732ef9b7c27a + zh: c679a31a2a4270d5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtasksnapshot: + en: 24fcf00c42c7a8ec + zh: 246f7369db741ee4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtaskstatus: + en: dfc435de6f425354 + zh: ef72a92091285f3d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackdelete: + en: 5813b1f66f2ef5dc + zh: c7b04e6aa8adb3d3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackitem: + en: c1f20d14889a4b7f + zh: c7de432e53c19534 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackput: + en: 40571bd524de4b04 + zh: 2405890c4d9baac3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackrating: + en: 24b41ec262bec21a + zh: e3856d2c80930a11 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalchangemeta: + en: 52f747125b58df06 + zh: 666d71bf837ebf62 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalclearchangemeta: + en: b65e2d2272748f20 + zh: 0737406345989550 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalmessagesource: + en: 5bf53b593fa5c7a8 + zh: 4587c57c04721ee1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalsnapshotchangemeta: + en: a9ade284ff69c5a5 + zh: ed141b013c367860 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalblockreason: + en: a376958c396d7525 + zh: bf1051463954be80 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalphase: + en: ec2dbfe6dc9adca1 + zh: 5a1fbd2e3740f0c0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalref: + en: 0a431de9f8a9f6a5 + zh: b66ef4d2b8ed3bb9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalsnapshot: + en: ff21e17ac1c3a110 + zh: f9c05a92fd47e1f4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-hooks-hook-protocol-src-types-ts-hookdialect: + en: f7d0e7efbac812de + zh: ea5f9f1fdd57ea7d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-index-ts-approvalpolicy: + en: 2044a1198ef4f2b2 + zh: ad773b08c022587f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-types-ts-approvaloutcome: + en: a91accaedb68990d + zh: 3a28e7a839001839 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretryeventdata: + en: 15974e98a64d1b68 + zh: e2f560a1bee67137 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretrystartedeventdata: + en: 3aa0a784c02f9067 + zh: ed468c6a890205ef +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-assistant-stream-ts-assistantstreamrecord: + en: c6f1b7782a9a11f1 + zh: 41fdd40df4b51672 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfig: + en: 8c4e64f4dca288ea + zh: 7c527e5dfa95f7b1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfigadapterdefaults: + en: 0836b6128069b319 + zh: 3a8d268cbd97ef17 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-assistantmessage: + en: 03ba6ddc36150377 + zh: f7548ee652d2ca74 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-contextsnapshotsection: + en: cd9a0923ec2dd279 + zh: 69c2b3fc446b8ce9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-message: + en: b91d9a0950597185 + zh: f726ba7f6eeaf947 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-messagesource: + en: 4a092971f68e5a4b + zh: 59c6e7d7ee665142 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-modelmessagesource: + en: 304f7bcb50f3fb29 + zh: 69c5deeee138a10e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolmessagesource: + en: 6342327f9ac63e1b + zh: d159ecead223e279 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolresultmessage: + en: 5b778898de4f4ca0 + zh: 5415342449874eab +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-usermessage: + en: 2ad4bd62743b295a + zh: 7403f40a87aca6e9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblock: + en: c6bb4cb52d66e5c5 + zh: af0afa04973a6e35 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblocktype: + en: 9f474d2ff8113206 + zh: 6a2fe8f00d3155a6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-fileblock: + en: 14f2c8b1c2c68ef2 + zh: 28298d6a5d8778e8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-finishreason: + en: 83e4a5800a8657e5 + zh: dab418676ae90f04 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-imageblock: + en: 88bdeaa3cb99405b + zh: 328d969eb95f911c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-llmfailure: + en: 20d43b9189dc16b6 + zh: 13c889e27cb1f5fb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-reasoningblock: + en: e39fbb169387b33e + zh: faa6e0f164735b05 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-replayenvelope: + en: de7fab2b6c20803f + zh: 69eee0b3d0fe4885 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-streamchunk: + en: 278abd91c779e58f + zh: 09a85c62849439a4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-tokenusage: + en: 7250253d00740155 + zh: a69db8b056645a51 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolcallblock: + en: 0f14fe9e4d1c658f + zh: 46f3886b22bb9049 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolresultblock: + en: 707aa3f581c97f72 + zh: 6b21646f8d55482d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolschema: + en: 76762b72c9dbff65 + zh: ef944df9eeb85be5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-sandbox-sandbox-src-index-ts-sandboxmode: + en: 4d256867ef41502b + zh: 7e63268eb7efeb4e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-afterschedulerecord: + en: 2d007d6563b437d0 + zh: 1750279ef41dddeb +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-atschedulerecord: + en: 5bbd9981e9a7f54d + zh: 18e024928899cb1f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyscheduledispatchchange: + en: 071057beba6ba5f0 + zh: 69d6e8c5e4575b6c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyschedulerecord: + en: 0da520c824c87dd4 + zh: 018ff8be9ebca34a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-oneshotscheduledispatchchange: + en: 5de428c6f4127035 + zh: 5a383261736379ab +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulechange: + en: b9e80bb6bd2ac91e + zh: c6a4c99a4336a59e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulecreatechange: + en: 2d64658c34cda1cc + zh: 1fb263941dafaa96 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-scheduledeletechange: + en: 4fdd5e804bb84bd1 + zh: 84a629aa2ab12c22 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulerecord: + en: 166c94a721d8754d + zh: 81b7fafb2ad44106 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-persistence-jsonl-src-format-ts-headerline: + en: 08f8b5cd488d81fd + zh: 4bc23daa01acec3b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-llm-src-index-ts-sessiontitlellmrequesteventdata: + en: 0a84830d67f188c3 + zh: 424a823842cd6349 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitleeventdata: + en: 79e572894c1de5e8 + zh: ffcffb681c9f7860 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlemodelprovenance: + en: 47e8dbd5749237fd + zh: c8146562f7353e15 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlesource: + en: 61dda3b6cff145f7 + zh: 1750b650436bf8f9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-skill-src-index-ts-skillinvocationsource: + en: 1856fd60d7251651 + zh: b6a45c49d14f1041 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-tool-skill-src-index-ts-skillcatalogsource: + en: a17bae8c79d8671c + zh: 556f0ab84cf914f9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-messages-ts-agentmessagesource: + en: b30f3b548aa66b26 + zh: a269022d8315c0fc +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-messages-ts-subagentsettledmessagesource: + en: 8a58e8b526caae5c + zh: 8149aaf9a8e0ceaf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-continuablesubagentdescriptordata: + en: 38c8e74993edbb98 + zh: 36574175a1d1c5d6 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-oneshotsubagentdescriptordata: + en: 3e5bf40300f8b1a9 + zh: 07e412c1fcddcb7d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-subagentdescriptordata: + en: cf1809183c40b3ea + zh: 6b74af2c94dea3de +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-todo-tool-todo-src-types-ts-todoitem: + en: 0e69a3e398b4614b + zh: dda89947907528ac +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-web-web-search-deepseek-src-provider-ts-deepseeksearchllmrequest: + en: 46739f64ad77c2bd + zh: 448b3d91be7b7381 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentenddata: + en: 59304dd3c0940627 + zh: e1643dbec00a0cc9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentstartdata: + en: fa9dc562eede5de9 + zh: de2b31b6e552e282 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunenddata: + en: 14cad9b03a5e4711 + zh: a74514271b70aaf2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunstartdata: + en: 69bb21d7582bb2b4 + zh: 0aa74aaf62b13665 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowagentoutcome: + en: efb9ea2c4f84fa05 + zh: 1df4ec831fc807d9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowstopreason: + en: d8a79a37d49821c7 + zh: 7726867b41c376b9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/parent: + en: 138ccfb49ca3008f + zh: 138ccfb49ca3008f +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/pause: + en: ca7e406cd0ef4c8b + zh: ca7e406cd0ef4c8b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/paused: + en: 6bf09e8e304d79dc + zh: 6bf09e8e304d79dc +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/pending: + en: bd71499d6cf79f5d + zh: bd71499d6cf79f5d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/permission-preset: + en: afc55750e84562e0 + zh: afc55750e84562e0 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/plan-mode: + en: 5fb58af86d74ea6d + zh: 5fb58af86d74ea6d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/plugin: + en: 8662e4a721d4110e + zh: 8662e4a721d4110e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/positive: + en: 2288b3974c04913e + zh: 2288b3974c04913e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/provider: + en: 4fbeeac070898211 + zh: 4fbeeac070898211 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/provisioning: + en: 30a589b9ffc65446 + zh: 30a589b9ffc65446 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/read-only: + en: 2855b1c06597641c + zh: 2855b1c06597641c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/reasoning: + en: 440507a2ae70ae20 + zh: 440507a2ae70ae20 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/reasoning-chunks: + en: 33e738d3e42f571a + zh: 33e738d3e42f571a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/reasoning-delta: + en: b90bb3db67fca7f5 + zh: b90bb3db67fca7f5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/recall: + en: 76399cebf971bf28 + zh: 76399cebf971bf28 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/rejected: + en: c208015c158ef23e + zh: c208015c158ef23e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/relay: + en: 7db0fdc1a7d63d74 + zh: 7db0fdc1a7d63d74 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/remove: + en: 11a78466931d25aa + zh: 11a78466931d25aa +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/replace: + en: b472d3d1e96f970a + zh: b472d3d1e96f970a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/request-context: + en: e2401b5ab5b79c4d + zh: e2401b5ab5b79c4d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/request-header: + en: 059fa0b4904838ac + zh: 059fa0b4904838ac +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/resume: + en: fa76642f444ed47a + zh: fa76642f444ed47a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sandbox-mode: + en: 109998dd842433c9 + zh: 109998dd842433c9 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/schedule-change: + en: e51c1621e48332a7 + zh: e51c1621e48332a7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/series: + en: 201a1f0c2545d484 + zh: 201a1f0c2545d484 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session: + en: 048cb1117c9013a5 + zh: 048cb1117c9013a5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session-log-deepseek-delivery-accepted: + en: ffc8a093c3f86b77 + zh: ffc8a093c3f86b77 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session-reference: + en: 27ac5fc556d28db4 + zh: 27ac5fc556d28db4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session-end-seed: + en: 4b0280a733574017 + zh: 4b0280a733574017 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope: + en: 4a8de5e3e7855caa + zh: e330bfb0566b569b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-0: + en: e14f623d19d0352d + zh: 04b9ec0ce5e70e69 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-48: + en: e7bd022d354bb070 + zh: 89afee11479aaee8 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-48-sourceeventseqs: + en: 7efd8be76a0df170 + zh: 29d3ed9e8a8c7794 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-48-surfaceop: + en: 463888c860faaabd + zh: 03a151da7c8abf2a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-48-surfaceop-1: + en: a86c71964c15961f + zh: bf8d24bc32eef6be +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session-title: + en: c03d3b602c6286c5 + zh: c03d3b602c6286c5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/session-title-llm-request: + en: 2c21870ea85db0ba + zh: 2c21870ea85db0ba +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/set: + en: 3fecff2d7d8c2446 + zh: 3fecff2d7d8c2446 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/skill-catalog: + en: e6881abff7181f8b + zh: e6881abff7181f8b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/skill-invocation: + en: 0a0abb5d6b6dd8ee + zh: 0a0abb5d6b6dd8ee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/snapshot: + en: dc576ee2c0ff38ee + zh: dc576ee2c0ff38ee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/step-end: + en: 23f7e4121528704d + zh: 23f7e4121528704d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/step-start: + en: 258c004218f5c5cf + zh: 258c004218f5c5cf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/stop: + en: 5d836dbb81d9efe7 + zh: 5d836dbb81d9efe7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/string: + en: 46474a6921bbb9cc + zh: 0e5e457c4ef74a8a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/subagent: + en: 0bdce21b04fc85b7 + zh: 0bdce21b04fc85b7 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/subagent-settled: + en: 1c37561a6e95743a + zh: 1c37561a6e95743a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/subagent-descriptor: + en: cf116d4d04677f5e + zh: cf116d4d04677f5e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/subagent-model-selection-policy: + en: b95ff0ac6eb6fe07 + zh: b95ff0ac6eb6fe07 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/success: + en: f9878ddcde6cbf6c + zh: f9878ddcde6cbf6c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/system: + en: 9a257934a5c024c1 + zh: 9a257934a5c024c1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/team-message: + en: f33fffc365cd3dee + zh: f33fffc365cd3dee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/team-member: + en: 64723754b03404fe + zh: 64723754b03404fe +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/team-message-delivered: + en: bcb920ce77effc35 + zh: bcb920ce77effc35 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/team-message-queued: + en: 96ef7c27ed87f71a + zh: 96ef7c27ed87f71a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/team-task: + en: 67290d348838a6e1 + zh: 67290d348838a6e1 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/text: + en: d5a6dadc741fcfc4 + zh: d5a6dadc741fcfc4 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/text-chunks: + en: a0a209b67008eae5 + zh: a0a209b67008eae5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/text-delta: + en: b92d346827f57b42 + zh: b92d346827f57b42 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/todo-write: + en: 56b4922b448344c2 + zh: 56b4922b448344c2 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool: + en: 4fe3dbdd8790897e + zh: 4fe3dbdd8790897e +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-call: + en: 56966fb78065ad7d + zh: 56966fb78065ad7d +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-call-chunks: + en: d8b216beaf8d8b96 + zh: d8b216beaf8d8b96 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-call-delta: + en: cc93118e927b7681 + zh: cc93118e927b7681 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-calls: + en: ee8cad1294cc1b1a + zh: ee8cad1294cc1b1a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-result: + en: ff329758f7b78d96 + zh: ff329758f7b78d96 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-end: + en: b28e7f3c40a7c3ee + zh: b28e7f3c40a7c3ee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-start: + en: e7e61b03558f2d90 + zh: e7e61b03558f2d90 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-end: + en: 2e6da5ad2eed59cf + zh: 2e6da5ad2eed59cf +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-start: + en: 3007417a998b650c + zh: 3007417a998b650c +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-call~2: + en: e038b6d4a29f44d5 + zh: e038b6d4a29f44d5 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch: + en: 155bcd6a6928153b + zh: 155bcd6a6928153b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-code-dispatch-start: + en: beb7b669a6b8db34 + zh: beb7b669a6b8db34 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/tool-result~2: + en: f426dd9a97d97631 + zh: f426dd9a97d97631 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/true: + en: 8141814fd7986b02 + zh: 8141814fd7986b02 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/turn-end: + en: 94aac556c4be113a + zh: 94aac556c4be113a +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/turn-start: + en: 8fae22745547795b + zh: 8fae22745547795b +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/unavailable: + en: c3e0a238f6e53159 + zh: c3e0a238f6e53159 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/unknown: + en: 528fe3840778b37d + zh: 004bf8cc871e6270 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/usage: + en: 496d552369f72775 + zh: 496d552369f72775 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/user: + en: 8df99d357725f7e3 + zh: 8df99d357725f7e3 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/user-message: + en: 6a71e08315210462 + zh: 6a71e08315210462 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/web-search: + en: 5d5f50cfff9b8f73 + zh: 5d5f50cfff9b8f73 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/web-search-20250305: + en: d7bdd7805e7f8acc + zh: d7bdd7805e7f8acc +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/web-deepseek-search-llm-request: + en: c2ac7c44723d7c64 + zh: c2ac7c44723d7c64 +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/webhook: + en: 95280ea5e6be4eee + zh: 95280ea5e6be4eee +/session-v2-persistence-format/complete-schemas/resolved-persistence-types/workspace-write: + en: e1ff2d052fbfd033 + zh: e1ff2d052fbfd033 +/session-v2-persistence-format/verification-and-limitations: + en: c205f8b2bb98c1e7 + zh: ea185ce433734b11 +/session-v2-persistence-format/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/historical-formats/v3.i18n.yaml b/docs/persistence-changes/historical-formats/v3.i18n.yaml index d8b64d6969..6391af9cb6 100644 --- a/docs/persistence-changes/historical-formats/v3.i18n.yaml +++ b/docs/persistence-changes/historical-formats/v3.i18n.yaml @@ -1,6 +1,1441 @@ -# 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 v3.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 docs/persistence-changes/historical-formats/v3.md -v3.md: cf9d6d64b08e4e861bdb20e244e1e5d75e297323 -v3.zh.md: b49cbf23a9c66fbe2804e1f2a28ac4e5cfcd7441 +/: + en: 6d937465b9d8b5c1 + zh: d359b07889da1678 +/session-v3-persistence-format: + en: 81fa3368c1deadc8 + zh: 9896af28de89d494 +/session-v3-persistence-format/summary: + en: acaf39f6a762d8c6 + zh: 8e4ea17831da58b8 +/session-v3-persistence-format/table-of-contents: + en: e7feb612882a1520 + zh: 28e81ddf50d4b242 +/session-v3-persistence-format/source-evidence: + en: 55f76ea1868c0588 + zh: 12eb73b93c484c36 +/session-v3-persistence-format/format-characteristics: + en: e6d5c9bb9da5775a + zh: a8d89ccf713c8e43 +/session-v3-persistence-format/declaration: + en: 5c26aeb746b68fc7 + zh: 0586c947bdcbfc1d +/session-v3-persistence-format/complete-schemas: + en: f78f8ba26d4b0b43 + zh: 7d55363a95ffcc02 +/session-v3-persistence-format/complete-schemas/persistence-type-fingerprints: + en: ebf48c459cc46047 + zh: 83a8493e3585dd32 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types: + en: b19212f9f593cb38 + zh: c7ddcacac7192fbf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/0: + en: c960bca060a3c1cd + zh: c960bca060a3c1cd +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/1: + en: c3de4bf2df0a2a60 + zh: c3de4bf2df0a2a60 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/2: + en: c074f60cc719e3b9 + zh: c074f60cc719e3b9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/3: + en: 98618b4a5dadf15a + zh: 98618b4a5dadf15a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/aborted: + en: e250e361c2cfc6b3 + zh: e250e361c2cfc6b3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/active: + en: d188185641b6d076 + zh: d188185641b6d076 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/after: + en: 22b913fe56ac8226 + zh: 22b913fe56ac8226 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/agent-instructions: + en: f83d99fa490a32e4 + zh: f83d99fa490a32e4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/agent-message: + en: 833d1a5a60a277d5 + zh: 833d1a5a60a277d5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/agent-preset-selected: + en: 399bbb8b47b4c42c + zh: 399bbb8b47b4c42c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/agent-inbox-spliced: + en: bec55272af567f64 + zh: bec55272af567f64 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/allowed-once: + en: ea0eb66aee54ca47 + zh: ea0eb66aee54ca47 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/always: + en: ed838315dbbc93c9 + zh: ed838315dbbc93c9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/append: + en: d4a8289f20c370ba + zh: d4a8289f20c370ba +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/approval-asked: + en: 0d5f12a9775a2ee4 + zh: 0d5f12a9775a2ee4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/approval-decided: + en: 7b2781cdf31b22fb + zh: 7b2781cdf31b22fb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/approval-policy: + en: 94f10413eddbecb0 + zh: 94f10413eddbecb0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/ask: + en: f62c1a03b55a17fe + zh: f62c1a03b55a17fe +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/assistant: + en: 99c01a9de336b849 + zh: 99c01a9de336b849 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/assistant-attempt: + en: f438dafd82b1b0f5 + zh: f438dafd82b1b0f5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/assistant-message: + en: 236f19fd8c1f3fac + zh: 236f19fd8c1f3fac +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/at: + en: 8c6aaa696ae105d7 + zh: 8c6aaa696ae105d7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/block: + en: 784ca3e7ac724495 + zh: 784ca3e7ac724495 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/block-end: + en: 4d012513a3a69a1d + zh: 4d012513a3a69a1d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/block-start: + en: 0d8d3b25f8d41c7d + zh: 0d8d3b25f8d41c7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/blocked: + en: 2441252fd2f2f610 + zh: 2441252fd2f2f610 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/boolean: + en: a71c6a870d0e5644 + zh: a71c6a870d0e5644 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/canceled: + en: d76f449c560d60ea + zh: d76f449c560d60ea +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/cancelled: + en: 846f994e5779f4df + zh: 846f994e5779f4df +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/catalog: + en: 871a46b7f22deed4 + zh: 871a46b7f22deed4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/change: + en: a7aeaa532cc95482 + zh: a7aeaa532cc95482 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/chunk: + en: 2809c65c1d854d57 + zh: 2809c65c1d854d57 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/claude-code: + en: 5078780cad778727 + zh: 5078780cad778727 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/clear: + en: cf346da1c71650c9 + zh: cf346da1c71650c9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/codex: + en: c7537bafe02ae9e3 + zh: c7537bafe02ae9e3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/command-done: + en: f3b07f41730ba043 + zh: f3b07f41730ba043 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/command-run: + en: da41772ac0129a00 + zh: da41772ac0129a00 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/compaction-end: + en: ee2c2f7cc1b47796 + zh: ee2c2f7cc1b47796 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/compaction-prune: + en: 8d9d285edd3832ef + zh: 8d9d285edd3832ef +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/compaction-start: + en: 76b15fdde7ccbc44 + zh: 76b15fdde7ccbc44 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/compaction-summary: + en: d989a4b96d0be485 + zh: d989a4b96d0be485 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/complete: + en: 6e41ba49ef0a4576 + zh: 6e41ba49ef0a4576 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/completed: + en: 47c55824c32fa217 + zh: 47c55824c32fa217 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/continuable: + en: fc856412f156c726 + zh: fc856412f156c726 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/create: + en: 0f283be27812d545 + zh: 0f283be27812d545 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/danger-full-access: + en: 9a8bf8688932871a + zh: 9a8bf8688932871a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/delegation: + en: 56b80179b43c08e8 + zh: 56b80179b43c08e8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/delete: + en: 9fff834c5e7c08d4 + zh: 9fff834c5e7c08d4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/deleted: + en: 73c5f3f7ddd4634b + zh: 73c5f3f7ddd4634b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/deliverables-presented: + en: d3c9806fb1e79114 + zh: d3c9806fb1e79114 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/dispatch: + en: 700b762d388963ee + zh: 700b762d388963ee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/disposed: + en: a7c3ac84c05c078c + zh: a7c3ac84c05c078c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/edit: + en: 2d4b7de3576a7449 + zh: 2d4b7de3576a7449 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/error: + en: 414c53999fd5b83b + zh: 414c53999fd5b83b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected: + en: b5aa6864a5165098 + zh: 5ebb1f9263598620 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-preset-selected-data: + en: 4930049554ed8338 + zh: 4d70c6d7fc31d721 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced: + en: 993805e4fafef0d3 + zh: 24ea0565234e37aa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data: + en: d0aee20493a8cfcc + zh: ca19b88fc45e7c7e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted: + en: 5be95d369760f2d7 + zh: d32d84a7b1b77917 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-content: + en: e0aa88418a6365d1 + zh: 0f3d733e35b112f7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-content-0-2-attachment-originaldimensions: + en: cb7a29e412b928c5 + zh: 66951eaf58cc88b9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-0: + en: c4eecb174fccba30 + zh: dc80ce834bfb4573 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-1: + en: 81e382fc76a7ae18 + zh: 32ab97fac3e26b68 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-10: + en: a4fca162d85b7a11 + zh: cf2e1ccab4438d18 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-15-references: + en: 7b1039ee6aea0c7f + zh: 0e7298c9a975d707 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-15-references-0: + en: 80cbe74771c249c3 + zh: e4415af33e7cd2e1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-16-changes: + en: a296bcfbf75b193e + zh: f84dbb77fa3a42c9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-16-changes-0-action: + en: 2dee7acbffb62644 + zh: 79de1004ca767e80 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-17-entries: + en: 084bfbc631f4b183 + zh: 0a6b8747b7cc5ded +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-17-entries-0: + en: 694e17c439d15836 + zh: 98cb3fad39fd83a1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-19: + en: 5095a1904ac79d94 + zh: d564f9829f545384 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-2: + en: e6c86289664b4ad8 + zh: 8adbecb0e54e08a8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-3: + en: 0093d3a06ae967ca + zh: ecca56609241334d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-4: + en: f4bf9ee93a839a9e + zh: 09c3b926a14b788c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-4-sections: + en: 3d7fc52d90a40a8a + zh: aea056245659c14a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-5: + en: 60ccd671386aa5c8 + zh: ed9eea4e53f26b74 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-6: + en: af9f23e4c4e1e7fe + zh: 6841ec5ca1a5dede +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-agent-inbox-spliced-data-inserted-0-source-7: + en: 8d80750e3314aeb1 + zh: a196d7f488619a68 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked: + en: fcd97c86f416448f + zh: fa4e5b734fb044a8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-asked-data: + en: ea5a6cf9ebae4537 + zh: 09af8f73dc963256 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided: + en: 8a4e7d86bd1897d2 + zh: f1fbf42c9a5b03b7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-decided-data: + en: 458ae36efbdcb352 + zh: ae1797bf27c5e001 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy: + en: 05f449f7e55da723 + zh: 19baa0b5e95abd68 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-approval-policy-data: + en: bc649479d979fef3 + zh: 8320b3feafc7bc2e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt: + en: 4154836d74762f17 + zh: f52b27522313f1c4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data: + en: f4adda0cf52366dd + zh: 21a0f63799abd708 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream: + en: 3fe1fd17f4ff63c8 + zh: 0a30e981d6b308fd +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-0: + en: 33168306170fab63 + zh: de8a55362a0819bf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-0-texts: + en: a94d1da13908ec6d + zh: af22e3c257dfa35f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-1: + en: 2ed99f6402ebac5c + zh: edeb59cdb3f6a72b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-2: + en: 8d51bf82116c85e6 + zh: 3d7a403ff36032f8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3: + en: 7df141170b716429 + zh: fa019f68343ce32f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-0: + en: 486f62ea7e91b2c4 + zh: 569cc92cf1f1b0be +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-1: + en: 02ebc14f8e55c9e9 + zh: 91cfed9af7b058e2 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-2: + en: 35895280fd15cc11 + zh: db6a3f860e79b2bd +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-3: + en: 1e7469d4ded396fe + zh: 210d0b2e7ea9fa38 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-4: + en: d7861874dca9b711 + zh: e07f8472906ae920 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-5: + en: 37afe7df817358d2 + zh: a731f9328f5443ff +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6: + en: 87d620abdb5bf36d + zh: a816df82d5bef610 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-reason-0: + en: 322c49bc5cb13929 + zh: c994f1faad5de1a4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-reason-1: + en: 21e6c105ee8c82f0 + zh: 595eb934ae8cb202 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-reason-2: + en: f7f31289e600ef66 + zh: 55870cd7f7bc2735 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-reason-3: + en: 0baf7e418e70e19d + zh: 7bf1e452a43ce6fa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-reason-4: + en: ef23e926c6833b99 + zh: 308c56d33f123176 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-attempt-data-stream-0-3-chunk-6-replaystate-blocks: + en: d4abe4784db0b22a + zh: c507609dd30803cc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message: + en: afee2193a8e48c6b + zh: 68e06da6ff1b0cb1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-assistant-message-data: + en: 14f5fb991f440fb5 + zh: 7db22e34c5e3bfc0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-command-done: + en: 1a7789eb37b568c3 + zh: e1031cd1a9bfe93e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-data: + en: 0145ade09015c503 + zh: b8ff12e12c73499c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-command-done-data-kind: + en: c8a423ae239f4839 + zh: 7410484631d9fe47 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-command-run: + en: 82dbaa5172efb7d9 + zh: 96fdcbc5eb63bb3d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-command-run-data: + en: 871ab98a55126231 + zh: 2cfd6ac0777db6fc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end: + en: 10be359e3c5ada59 + zh: 1f11c92565032e59 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-data: + en: a46edc9f2b15ecb5 + zh: 78fd66f81542c639 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-end-data-turn: + en: 3e37e30d50ff2c19 + zh: aa03e59c68278e2e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune: + en: b6e22d36cf4c3395 + zh: 1798cfb640cae1ea +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-data: + en: 0ef51abf5960d582 + zh: 4ab67eb003d90331 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-prune-data-shadowedrange: + en: ef1fbca55c19f3f2 + zh: a8f174d41a07415c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start: + en: 0ae66bbf813d4840 + zh: bc572799678c4938 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-start-data: + en: e960a720687f57cc + zh: 563190c8575cb6e4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary: + en: 27aab0aaba1ab29e + zh: 9344dcbc694029fa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-data: + en: a25e347e5c257ba0 + zh: b54c532f0a2e771e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-data-0: + en: aebac3311e1ab5bd + zh: 6d7d739dc76fa807 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-compaction-summary-data-1: + en: 0b81265259ec9709 + zh: 17307d5654214520 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-deliverables-presented: + en: 9910b79d690e5e99 + zh: 5203db08b5f9eadf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-deliverables-presented-data: + en: dc69dbb40801b240 + zh: 0231ddce5f7321e2 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-deliverables-presented-data-files: + en: f1ac8674e98ea324 + zh: db5e55ba4b233587 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-message-delete: + en: d7e7cb348119e014 + zh: 764fa08f74544e62 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-message-put: + en: 14ce67e6186366e8 + zh: 38176a2d0805261f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-message-put-data-item-category: + en: a693385d3a767b2f + zh: 5c72344c7d6e9940 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-feedback-record: + en: 09e03f1edc266763 + zh: 2aa9556ce846497c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change: + en: 44353c401b6e4284 + zh: 5c45d894b6296dad +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-goal-change-data-0-operation: + en: ae408104afb4a20d + zh: 48e4c40b28462343 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked: + en: 397dcc4bcb4bc599 + zh: 219cbc291ae80ef1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-hook-invoked-data: + en: bb052f16c932f4f1 + zh: 26f5de2ee212b262 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result: + en: 10fd5b95b4cb85c5 + zh: b84b773df10df7ed +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-hook-result-data: + en: a5ed1ddeb5135af4 + zh: f4b2d38016a3887b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-image-offload: + en: c2a204e46335b7e4 + zh: 50de7e6d42924ee4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-image-offload-data: + en: a63df5a8f9f8540a + zh: ef0e49a7fb8ca32f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-image-offload-data-targets: + en: 3200abea2f715191 + zh: 21f38b11be7edd15 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry: + en: 28e8f12aa71650e1 + zh: c66b51637dd05e07 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-started: + en: 508219d232569ed7 + zh: 0abb799385c7ae00 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-data-0: + en: 7428b7731a694802 + zh: 5a7dabec6c8ade61 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-llm-retry-data-1: + en: bc05ccf97fbf2481 + zh: 9da8a65794022af6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-model-selection: + en: 8cb84d673679f7c6 + zh: 1a8d15861be88583 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset: + en: 4eb278f45155ae0a + zh: f859efa1e371c99b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-permission-preset-data: + en: d908269648bc69bc + zh: 8caba757b06a3277 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode: + en: 75c1b8cb752e738b + zh: a406165a4c79ce65 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-plan-mode-data: + en: dae8d442a36ae8a7 + zh: d8f80943a4902b46 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-request-context: + en: 4c4f5c9360a4b88c + zh: 9ac459eabaa07352 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-request-header: + en: b8849e6778eea8c6 + zh: 610082184081ea9b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-data: + en: db481fade04665d8 + zh: b72b0b731b42efaa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-data-header-tools: + en: c7b281794255ca68 + zh: 12f2e062c105af48 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-request-header-data-header-tools-0-parameters: + en: c908758ad17e7eba + zh: a3a66edbead18f79 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode: + en: 394c9c7d07ded2bc + zh: 001afa4e3aab2f79 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-sandbox-mode-data: + en: b2b182750df05f75 + zh: 074a7f2ee2c14cad +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-schedule-change: + en: 8a1da56ea321cc21 + zh: 47fa2642536b1653 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted: + en: 8f61832bbb68b54c + zh: 1bc9501ef2c58537 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-log-deepseek-delivery-accepted-data: + en: 5fe77de51b9fea24 + zh: 0f76c2efdaf01133 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed: + en: 9c12413d890c386e + zh: e6f6d837e5f073ed +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-end-seed-data: + en: f9f1dd8e6b8b638b + zh: 9f902632a6c37222 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title: + en: e84c9bfc09a0e30f + zh: 64a137eb36be0348 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request: + en: d8efc7075436efc7 + zh: cb6f3da4f9efea3d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-data-messages: + en: 7a734b3af7120e7d + zh: 2555bf6afbba2c9b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-llm-request-data-messages-0-role: + en: 4083c016300aa62c + zh: 9a3038c0b125954a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-data-source-0: + en: b912849f3d505930 + zh: e477584a66bbe75a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-session-title-data-source-1: + en: c4e82984c2959e63 + zh: db918a49399b5979 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-step-end: + en: 0bf0fbf684f6f1c6 + zh: 61fd9b8dc31bd33f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-step-end-data: + en: 81012d9e44dca5c7 + zh: 23669a55083ce3e7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-step-start: + en: e3e8988687031c88 + zh: df2adec4236833b1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-catalog: + en: 6f2bd322f3dd4271 + zh: cb00d30e8889c59a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-catalog-data-0: + en: 6c4e85da34825f18 + zh: 68642d94b9095958 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-catalog-data-1: + en: 0a50317b1029a250 + zh: a538befe49d6e1bc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-descriptor: + en: 84446b8dfbd850eb + zh: 70ef07ebf687ff76 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy: + en: 0aab899d5d39d386 + zh: bdf18f4cea849113 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-data: + en: 9b77a02d267ef3c1 + zh: f00ab3b3063bb20c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-subagent-model-selection-policy-data-allowedmodels: + en: daad84ba1148e0fb + zh: 208749373553dbe0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-system-message: + en: 4c82c2a0a513737b + zh: a8d4358f56ff73c8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-system-message-data: + en: bb5b4f48dac48b82 + zh: 1d1884ea22dffe3a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-system-message-data-message-source: + en: fa9de08ffff4e56b + zh: abc6079c238b229c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-member: + en: 4d743ed698380334 + zh: 46c4bf45318cfe83 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-data: + en: ecd3a44efd775d9f + zh: de5d65477a1749d9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-member-data-member-context: + en: 92782f78c858b114 + zh: 51b2ef9540ee7955 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered: + en: eea6b4ef8c7689b9 + zh: 954e3521f9c3c689 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-delivered-data: + en: b21ce5024f9119a3 + zh: e317baff9373dc14 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued: + en: e44db18facf45d60 + zh: b819c2a9ff2b6507 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-message-queued-data: + en: 48020adbe43bded9 + zh: 6f668c87f8722ad6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-task: + en: 949726e42fbda34a + zh: 50339d1d8f39c681 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-team-task-data: + en: 50269ebd12ab5c8f + zh: b6a9fd1476672e06 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write: + en: aaaedf972c07a069 + zh: 011ecb339d05e43e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-data: + en: 0b85739d8f48d6a6 + zh: f3541ad4c0ef46c9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-data-todos: + en: 1aaeab8caf08c63a + zh: dc133bd7904de612 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-todo-write-data-todos-0-status: + en: e540a89a7ab63f5c + zh: 903259cb9853a04b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-end: + en: e9d030f01f2cdf42 + zh: 16d7962f2d0f2f19 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-agent-start: + en: f5935de95d8685a5 + zh: 6e838afa23c119e6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-end: + en: 2de44e039983c23e + zh: c5b258065f6f65e9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-workflow-run-start: + en: a78520d06db65b1a + zh: a2f68a57242e4f53 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call: + en: 0e2a30e8c552e054 + zh: 867886e02c8bd36a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-call-data: + en: d3555656c96d894e + zh: 0afb2987525197ed +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-ptc-dispatch: + en: 2f185ed4bc123b74 + zh: 550304cd41b0018d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-ptc-dispatch-start: + en: fced05f54c0c4e09 + zh: 32eec4466951e91e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-ptc-dispatch-data-error: + en: 059eeacaa600d8e0 + zh: aa31adfa3285e070 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result: + en: 8643a8fe11455a11 + zh: b9ee3df5d97d62a1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data: + en: 86f9b4c90fa7c98a + zh: 2d4b8e6fcf981bb1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-message-content: + en: dfc77075ff34fcad + zh: e622b158a511b420 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta: + en: 17a9ba15cc12b018 + zh: d802a1cae6c1dba0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5: + en: b9192c6dda03f92f + zh: db8550f22f2e8039 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-tool-result-data-meta-5-0-6: + en: 5bc101560ddf46f7 + zh: 42a0bf1dc15cda4d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end: + en: 208c1a32ba1cf8f9 + zh: 4503fc3036742e68 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data: + en: 137e624c98bd34af + zh: 8acdc4393e34b07d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-0: + en: 020287333931dd96 + zh: c7db107698ab6276 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-1: + en: ee92617973cf406b + zh: ff62154c9797b540 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-1-reason-1: + en: 03e2523b4c1f46de + zh: 0856732c11f02508 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-1-reason-2: + en: 55135fb24bfc529b + zh: ae604fff114904d8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-1-reason-3: + en: e55da9676db31b73 + zh: 26c042851d4d83c0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-1-reason-4: + en: a39c04a55e8b5e7a + zh: 50bb2cae1722704e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-2: + en: a4927a675340fe3b + zh: 158d53d327950caa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-3: + en: 05ea18c297a3e381 + zh: cc0b73b64db8002f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-end-data-reason-5: + en: 6dff58254d5902ff + zh: ba656d161d2df9da +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start: + en: dcb43ffb187097c6 + zh: 1e33765d4fd06395 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-turn-start-data: + en: fc0b3181dc1137e0 + zh: edb2ac5890a1db59 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-user-message: + en: 3d91311d41128448 + zh: 933f7f674d88a6e0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request: + en: 8194dd1be30cfafa + zh: cdedb78885a356f7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body: + en: ec6f04cd497d5a83 + zh: 9ed7846254f0f4a8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-messages: + en: 94c0d00c1438e479 + zh: 0d5ecde42b73399c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-messages-0: + en: 82afd5da1021eafd + zh: 9ff30fb67acb9d47 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-messages-0-content: + en: df62ad03dd879d81 + zh: 03cec7132a7790be +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-messages-0-content-0: + en: f0d4ef434953834f + zh: 5f72b73bca6bfd50 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-tools: + en: 569c3f24ab8092a4 + zh: c44adfa2f1741a0e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/event-web-deepseek-search-llm-request-data-body-tools-0: + en: efaccd67885b7e3f + zh: 5cb69eb46c3b6b30 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/every: + en: 51fd5017d7ffde2a + zh: 51fd5017d7ffde2a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/failed: + en: b575b371da801ea3 + zh: b575b371da801ea3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/fallback: + en: e49ed81b4e17695c + zh: e49ed81b4e17695c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/feedback-message-delete: + en: f40ebfa797f8d352 + zh: f40ebfa797f8d352 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/feedback-message-put: + en: 982e6a3958458ded + zh: 982e6a3958458ded +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/feedback-record: + en: 88ecab66290e7f11 + zh: 88ecab66290e7f11 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/file: + en: b23fa805b21073e8 + zh: b23fa805b21073e8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/finish: + en: 5584d396d3c3e8e7 + zh: 5584d396d3c3e8e7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/fork: + en: 9df39e2322784cc1 + zh: 9df39e2322784cc1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/fresh: + en: 432ea99ec33c85e9 + zh: 432ea99ec33c85e9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/goal: + en: 666f8d9be933a1a0 + zh: 666f8d9be933a1a0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/goal-change: + en: e64d2f9c0eb72e58 + zh: e64d2f9c0eb72e58 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/hook: + en: 3d9e4dceb086f313 + zh: 3d9e4dceb086f313 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/hook-invoked: + en: 0fff5adfca472d26 + zh: 0fff5adfca472d26 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/hook-result: + en: dadff4cb415420c4 + zh: dadff4cb415420c4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image: + en: 01ccf2962006ecbd + zh: 01ccf2962006ecbd +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image-gif: + en: a1b541c33a91d722 + zh: a1b541c33a91d722 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image-jpeg: + en: 89e2b111d77c8e81 + zh: 89e2b111d77c8e81 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image-offload: + en: 796a487ff3190299 + zh: 796a487ff3190299 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image-png: + en: 2828d354b5ea048f + zh: 2828d354b5ea048f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/image-webp: + en: fb3d0326219a3ddb + zh: fb3d0326219a3ddb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/in-history: + en: c44d6046fb6062f7 + zh: 4a4d014f85be3e0e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/in-progress: + en: 1fb447694017b3b4 + zh: 1fb447694017b3b4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/initial: + en: fb1981d8ed19a742 + zh: fb1981d8ed19a742 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/instruction-following: + en: ba82ea47602275eb + zh: ba82ea47602275eb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/instructions: + en: ab6adeaa2e4f550f + zh: ab6adeaa2e4f550f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/interrupted: + en: 883119e87d7025fb + zh: 883119e87d7025fb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/legacy: + en: 3cf6e62107d1f10a + zh: 3cf6e62107d1f10a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/llm-retry: + en: 2c25737ff5b2795d + zh: 2c25737ff5b2795d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/llm-retry-started: + en: 44190f34fedf9a64 + zh: 44190f34fedf9a64 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/max-tokens: + en: fdf8a83bf94f951a + zh: fdf8a83bf94f951a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/model: + en: 94c2e1d974d97b1b + zh: 94c2e1d974d97b1b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/model-selection: + en: ebdbe24b80bad7c5 + zh: ebdbe24b80bad7c5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/negative: + en: accae7d8ab214073 + zh: accae7d8ab214073 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/never: + en: cdccc0b875c27bf4 + zh: cdccc0b875c27bf4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/next-step: + en: d15d41e5c085028c + zh: d15d41e5c085028c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/next-turn: + en: fa758be0e4ccc66f + zh: fa758be0e4ccc66f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/normal: + en: ceaa1aecef1af7a7 + zh: ceaa1aecef1af7a7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/notice: + en: f52681a6f5b56a06 + zh: f52681a6f5b56a06 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/null: + en: b30bc92f3bc4002e + zh: b30bc92f3bc4002e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/number: + en: fa771a5a47afb62f + zh: 1c663adf5e2da66a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/one-shot: + en: 1f7ada8bc59d61b9 + zh: 1f7ada8bc59d61b9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/other: + en: 674c7c162f53be06 + zh: 674c7c162f53be06 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-api-session-controller-src-types-ts-modelselection: + en: 89d04e3aa5646241 + zh: bccbf3c983981215 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-fileattachmentref: + en: c487b753693721a6 + zh: 1e0757df3382d07c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imageattachmentref: + en: bb5ae7f343dc7d90 + zh: 7b53e5ab1acc2610 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-attachment-attachment-src-types-ts-imagemediatype: + en: e750a275151f48a1 + zh: ec0c5230cecc7052 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-compaction-compaction-image-offload-src-projection-ts-imageoffloadtarget: + en: 92d1f3b977d045dc + zh: c43b958310910453 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-render-ts-agentinstructionchange: + en: be491c16b2556fbc + zh: 0be7672506cef27b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-context-agent-instructions-src-state-ts-agentinstructionsource: + en: 401a619de6986ffb + zh: bfaf082bf0392006 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-context-session-reference-src-types-ts-sessionreferencesource: + en: f3b8289c786e11b7 + zh: e7471ea21d86c766 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-agent-src-types-ts-inboxtarget: + en: e1f2ce53c8f98583 + zh: c562b9b52be497ed +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-epochheader: + en: f7b306aa1ba4f6a3 + zh: 8b6e0b265704102e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestcontext: + en: 22aa8f6429757bae + zh: 6cd9cff869d2cc39 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-requestheaderreason: + en: 2821bda80068769d + zh: 9c97d95ae312ed77 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-sessionheader: + en: 2a304a902742db5d + zh: 1a9960d0d94872f3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-surfaceop: + en: 9b66ca653692fbd8 + zh: 0cc1144626035ed2 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendcancelcause: + en: 4743732f020b9e8d + zh: 9df36405921330b5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-session-src-types-ts-turnendreason: + en: edf5a9938681e223 + zh: 7e6ac8445e7636d1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-index-ts-toolrestriction: + en: c3086ca5f988a911 + zh: f1f7731c54e16a45 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatcheventdata: + en: 6bf74508ae48ff89 + zh: 05ff75aab2449978 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-core-tools-src-types-ts-ptcdispatchstarteventdata: + en: 937d5f72e9248727 + zh: 99b871fec7f35fcb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammemberphase: + en: a1b5ad35fdbbf2e9 + zh: 32d18494c2a1a25a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammembersnapshot: + en: 9609c6f8abd7e5c9 + zh: f771dd060a754b8e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesnapshot: + en: 7ad0f22bfc0891e4 + zh: 1ce7a17ef7cb998d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teammessagesource: + en: dced732ef9b7c27a + zh: c679a31a2a4270d5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtasksnapshot: + en: a3bcfab44de7d4ef + zh: a7a6adc9a9e3eee5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-experimental-agent-team-src-types-ts-teamtaskstatus: + en: 1ef09ebd450ff245 + zh: 921ebe6b0db157d5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-command-feedback-src-types-ts-feedbackrecord: + en: 63c23efbe4037a9d + zh: bf6660a66cd5fca6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackdelete: + en: 5813b1f66f2ef5dc + zh: c7b04e6aa8adb3d3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackitem: + en: 1704cf263426ee8c + zh: 1b0367a921ed4045 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackput: + en: 300b790a3d612cc2 + zh: 238e814df6c48b16 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-feedback-message-feedback-src-types-ts-messagefeedbackrating: + en: 64717a140a6b1c94 + zh: ce6b2001caad4b84 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-fs-tool-present-src-types-ts-presentedfile: + en: 8a00de446cee70aa + zh: 3a8107b13c284d2a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalchangemeta: + en: 52f747125b58df06 + zh: 666d71bf837ebf62 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalclearchangemeta: + en: b65e2d2272748f20 + zh: 0737406345989550 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalmessagesource: + en: 5bf53b593fa5c7a8 + zh: 4587c57c04721ee1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-domain-ts-goalsnapshotchangemeta: + en: 79a2856c64885431 + zh: e3de3118db5226d0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalblockreason: + en: a376958c396d7525 + zh: bf1051463954be80 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalphase: + en: ec2dbfe6dc9adca1 + zh: 5a1fbd2e3740f0c0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalref: + en: 0a431de9f8a9f6a5 + zh: b66ef4d2b8ed3bb9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-goal-goal-src-types-ts-goalsnapshot: + en: ff21e17ac1c3a110 + zh: f9c05a92fd47e1f4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-hooks-hook-protocol-src-types-ts-hookdialect: + en: f7d0e7efbac812de + zh: ea5f9f1fdd57ea7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-index-ts-approvalpolicy: + en: 2044a1198ef4f2b2 + zh: ad773b08c022587f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-interaction-user-approval-src-types-ts-approvaloutcome: + en: a91accaedb68990d + zh: 3a28e7a839001839 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretryeventdata: + en: 000c4cd62f198f15 + zh: 789b0bc7d746f460 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-retry-src-types-ts-llmretrystartedeventdata: + en: 3aa0a784c02f9067 + zh: ed468c6a890205ef +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-assistant-stream-ts-assistantstreamrecord: + en: ae828ef3042bb8c0 + zh: d7f1dbab57810c1d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfig: + en: 159f9b8cceac3a57 + zh: 66da2ae8e5f12c21 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-call-config-ts-llmcallconfigadapterdefaults: + en: 0836b6128069b319 + zh: 3a8d268cbd97ef17 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-assistantmessage: + en: 5b1ed01c880f8189 + zh: e779837f8b49eb18 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-contextsnapshotsection: + en: cd9a0923ec2dd279 + zh: 69c2b3fc446b8ce9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-message: + en: 420abc6d1b950043 + zh: 8ddd3fbd29da4113 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-messagesource: + en: ac1fcba7d04aaff8 + zh: 7c2dcd34eb9f6036 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-modelmessagesource: + en: b4c93d6bc02943cb + zh: e44e678e551f0b38 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-systemmessage: + en: fd20ef12d87dc401 + zh: 2197557b418ce711 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolmessagesource: + en: 6342327f9ac63e1b + zh: d159ecead223e279 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-toolresultmessage: + en: 3c4b41e191cecdfa + zh: dbe07b1a9260e814 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-message-ts-usermessage: + en: f8d25792a3744922 + zh: 5f0a5abb9830adb6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblock: + en: 68d78d2df8774b10 + zh: f77a73ea64c3acd3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-contentblocktype: + en: 9f474d2ff8113206 + zh: 6a2fe8f00d3155a6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-fileblock: + en: 14f2c8b1c2c68ef2 + zh: 28298d6a5d8778e8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-finishreason: + en: 2fc244632d2970eb + zh: fe88a577d311f205 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-imageblock: + en: cb037afd5f497c9b + zh: 7ec7e6532380e512 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-llmfailure: + en: 0d70dcdc766b2a2c + zh: b4ff633232ee7bfb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-reasoningblock: + en: e39fbb169387b33e + zh: faa6e0f164735b05 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-replayenvelope: + en: ab887b8c19edc0eb + zh: d548b4c02d0376bc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-streamchunk: + en: 4e536d45f2eb46a6 + zh: 8e594c64737e2f14 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-tokenusage: + en: 7250253d00740155 + zh: a69db8b056645a51 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolcallblock: + en: 0f14fe9e4d1c658f + zh: 46f3886b22bb9049 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolresultblock: + en: 3c69c802d2b95337 + zh: 813320dd7adee669 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-llm-llm-src-types-ts-toolschema: + en: 2835a7685ed60caa + zh: b26a65a07abb8289 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-sandbox-sandbox-src-index-ts-sandboxmode: + en: 4d256867ef41502b + zh: 7e63268eb7efeb4e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-afterschedulerecord: + en: 2d007d6563b437d0 + zh: 1750279ef41dddeb +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-atschedulerecord: + en: 5bbd9981e9a7f54d + zh: 18e024928899cb1f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyscheduledispatchchange: + en: 071057beba6ba5f0 + zh: 69d6e8c5e4575b6c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-everyschedulerecord: + en: 0da520c824c87dd4 + zh: 018ff8be9ebca34a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-oneshotscheduledispatchchange: + en: 5de428c6f4127035 + zh: 5a383261736379ab +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulechange: + en: b9e80bb6bd2ac91e + zh: c6a4c99a4336a59e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulecreatechange: + en: 2d64658c34cda1cc + zh: 1fb263941dafaa96 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-scheduledeletechange: + en: 4fdd5e804bb84bd1 + zh: 84a629aa2ab12c22 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-schedule-schedule-src-types-ts-schedulerecord: + en: 166c94a721d8754d + zh: 81b7fafb2ad44106 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-persistence-jsonl-src-format-ts-headerline: + en: 08f8b5cd488d81fd + zh: 4bc23daa01acec3b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-llm-src-index-ts-sessiontitlellmrequesteventdata: + en: e43897b5ff9896ff + zh: 324fcb379a84b4df +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitleeventdata: + en: d2698b09ea7790a6 + zh: 7f46819e757cbff1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlemodelidentity: + en: 7f35b8704a42702d + zh: fa39a9365cb88da0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-session-session-title-src-types-ts-sessiontitlesource: + en: 9cd8cd4ac948bc6e + zh: 128da2121349076a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-skill-src-index-ts-skillinvocationsource: + en: 1856fd60d7251651 + zh: b6a45c49d14f1041 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-skill-tool-skill-src-index-ts-skillcatalogsource: + en: 2097b1e389b712d2 + zh: dd68ec8c6187311e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-catalog-ts-subagentcatalogevent: + en: 34bb61b9d10c9a42 + zh: b84217c37e4205e3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-messages-ts-agentmessagesource: + en: b30f3b548aa66b26 + zh: a269022d8315c0fc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-continuation-messages-ts-subagentsettledmessagesource: + en: 8a58e8b526caae5c + zh: 8149aaf9a8e0ceaf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-continuablesubagentdescriptordata: + en: 38c8e74993edbb98 + zh: 36574175a1d1c5d6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-oneshotsubagentdescriptordata: + en: 3e5bf40300f8b1a9 + zh: 07e412c1fcddcb7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-subagent-subagent-src-descriptor-ts-subagentdescriptordata: + en: cf1809183c40b3ea + zh: 6b74af2c94dea3de +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-todo-tool-todo-src-types-ts-todoitem: + en: 15c8bda2f0792f31 + zh: 2e700ff542743e3b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-web-web-search-deepseek-src-provider-ts-deepseeksearchllmrequest: + en: c66826952023871a + zh: a9e0d0a450319b73 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentenddata: + en: 59304dd3c0940627 + zh: e1643dbec00a0cc9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowagentstartdata: + en: fa9dc562eede5de9 + zh: de2b31b6e552e282 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunenddata: + en: 14cad9b03a5e4711 + zh: a74514271b70aaf2 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-tool-workflow-src-types-ts-toolworkflowrunstartdata: + en: 69bb21d7582bb2b4 + zh: 0aa74aaf62b13665 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowagentoutcome: + en: efb9ea2c4f84fa05 + zh: 1df4ec831fc807d9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/packages-workflow-workflow-src-types-ts-workflowstopreason: + en: d8a79a37d49821c7 + zh: 7726867b41c376b9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/parent: + en: 138ccfb49ca3008f + zh: 138ccfb49ca3008f +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/pause: + en: ca7e406cd0ef4c8b + zh: ca7e406cd0ef4c8b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/paused: + en: 6bf09e8e304d79dc + zh: 6bf09e8e304d79dc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/pending: + en: bd71499d6cf79f5d + zh: bd71499d6cf79f5d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/permission-preset: + en: afc55750e84562e0 + zh: afc55750e84562e0 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/plan-mode: + en: 5fb58af86d74ea6d + zh: 5fb58af86d74ea6d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/plugin: + en: 8662e4a721d4110e + zh: 8662e4a721d4110e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/positive: + en: c7601559de9d5354 + zh: c7601559de9d5354 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/product-interaction: + en: 0325f2614b6d5e35 + zh: 0325f2614b6d5e35 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/provider: + en: 4fbeeac070898211 + zh: 4fbeeac070898211 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/provisioning: + en: 30a589b9ffc65446 + zh: 30a589b9ffc65446 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/read-only: + en: 2855b1c06597641c + zh: 2855b1c06597641c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/reasoning: + en: 440507a2ae70ae20 + zh: 440507a2ae70ae20 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/reasoning-chunks: + en: 33e738d3e42f571a + zh: 33e738d3e42f571a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/reasoning-delta: + en: b90bb3db67fca7f5 + zh: b90bb3db67fca7f5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/recall: + en: 76399cebf971bf28 + zh: 76399cebf971bf28 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/rejected: + en: c208015c158ef23e + zh: c208015c158ef23e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/relay: + en: 7db0fdc1a7d63d74 + zh: 7db0fdc1a7d63d74 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/remove: + en: 11a78466931d25aa + zh: 11a78466931d25aa +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/replace: + en: b472d3d1e96f970a + zh: b472d3d1e96f970a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/request-context: + en: e2401b5ab5b79c4d + zh: e2401b5ab5b79c4d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/request-header: + en: 3c301c3dd1be5bd8 + zh: 3c301c3dd1be5bd8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/resource-cost: + en: 169d6e60448540ab + zh: 169d6e60448540ab +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/resume: + en: fa76642f444ed47a + zh: fa76642f444ed47a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sandbox-mode: + en: 109998dd842433c9 + zh: 109998dd842433c9 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/schedule-change: + en: 843d5f93a9365d3a + zh: 843d5f93a9365d3a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/security-privacy-permission: + en: 5849dde429010ba6 + zh: 5849dde429010ba6 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/series: + en: 67c08cc8a451d262 + zh: 67c08cc8a451d262 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/service-stability: + en: aa1039ff4c43853b + zh: aa1039ff4c43853b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session: + en: 048cb1117c9013a5 + zh: 048cb1117c9013a5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session-log-deepseek-delivery-accepted: + en: ffc8a093c3f86b77 + zh: ffc8a093c3f86b77 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session-reference: + en: 27ac5fc556d28db4 + zh: 27ac5fc556d28db4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session-end-seed: + en: 4b0280a733574017 + zh: 4b0280a733574017 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope: + en: b093cd947f92fdf1 + zh: 06acaea8faf2c60d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-0: + en: dd8aea941931cf97 + zh: c12131f149fb341b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-39: + en: c9ac57a47e8b625a + zh: aa2a36380a3bea97 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-39-sourceeventseqs: + en: 04d7be17570755d1 + zh: 16f890bf68441be8 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-6: + en: d6432654dfc636c8 + zh: d4ef7c8f87266c7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/sessioneventenvelope-6-surfaceop-1: + en: 1f12d935d73cbc48 + zh: 46f449bf6fff16d1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session-title: + en: c03d3b602c6286c5 + zh: c03d3b602c6286c5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/session-title-llm-request: + en: 2c21870ea85db0ba + zh: 2c21870ea85db0ba +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/set: + en: 3fecff2d7d8c2446 + zh: 3fecff2d7d8c2446 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/skill-catalog: + en: e6881abff7181f8b + zh: e6881abff7181f8b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/skill-invocation: + en: 0a0abb5d6b6dd8ee + zh: 0a0abb5d6b6dd8ee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/snapshot: + en: dc576ee2c0ff38ee + zh: dc576ee2c0ff38ee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/step-end: + en: 23f7e4121528704d + zh: 23f7e4121528704d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/step-start: + en: 258c004218f5c5cf + zh: 258c004218f5c5cf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/stop: + en: 5d836dbb81d9efe7 + zh: 5d836dbb81d9efe7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/string: + en: 46474a6921bbb9cc + zh: 0e5e457c4ef74a8a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/subagent: + en: 0bdce21b04fc85b7 + zh: 0bdce21b04fc85b7 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/subagent-settled: + en: 70505b7ee0ac4bf4 + zh: 70505b7ee0ac4bf4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/subagent-catalog: + en: 5d5b2f8250c0db99 + zh: 5d5b2f8250c0db99 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/subagent-descriptor: + en: cf116d4d04677f5e + zh: cf116d4d04677f5e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/subagent-model-selection-policy: + en: b95ff0ac6eb6fe07 + zh: b95ff0ac6eb6fe07 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/success: + en: f9878ddcde6cbf6c + zh: f9878ddcde6cbf6c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/system: + en: 9fcb0a2a2da1e19d + zh: 9fcb0a2a2da1e19d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/system-message: + en: 52bf75c175063f7d + zh: 52bf75c175063f7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/task-result: + en: 9aac9c96a5c6cb78 + zh: 9aac9c96a5c6cb78 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/team-message: + en: f33fffc365cd3dee + zh: f33fffc365cd3dee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/team-member: + en: 64723754b03404fe + zh: 64723754b03404fe +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/team-message-delivered: + en: bcb920ce77effc35 + zh: bcb920ce77effc35 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/team-message-queued: + en: 96ef7c27ed87f71a + zh: 96ef7c27ed87f71a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/team-task: + en: 67290d348838a6e1 + zh: 67290d348838a6e1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/text: + en: d5a6dadc741fcfc4 + zh: d5a6dadc741fcfc4 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/text-chunks: + en: a0a209b67008eae5 + zh: a0a209b67008eae5 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/text-delta: + en: b92d346827f57b42 + zh: b92d346827f57b42 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/todo-write: + en: 56b4922b448344c2 + zh: 56b4922b448344c2 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool: + en: 4fe3dbdd8790897e + zh: 4fe3dbdd8790897e +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-call: + en: 56966fb78065ad7d + zh: 56966fb78065ad7d +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-call-chunks: + en: d8b216beaf8d8b96 + zh: d8b216beaf8d8b96 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-call-delta: + en: cc93118e927b7681 + zh: cc93118e927b7681 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-calls: + en: ee8cad1294cc1b1a + zh: ee8cad1294cc1b1a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-result: + en: ff329758f7b78d96 + zh: ff329758f7b78d96 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-end: + en: b28e7f3c40a7c3ee + zh: b28e7f3c40a7c3ee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-agent-start: + en: e7e61b03558f2d90 + zh: e7e61b03558f2d90 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-end: + en: 2e6da5ad2eed59cf + zh: 2e6da5ad2eed59cf +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-workflow-run-start: + en: 3007417a998b650c + zh: 3007417a998b650c +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-call~2: + en: 0ebea2d1c19faf28 + zh: 0ebea2d1c19faf28 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-ptc-dispatch: + en: 181bd8815ae211c1 + zh: 181bd8815ae211c1 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-ptc-dispatch-start: + en: 057cff6dff69b1da + zh: 057cff6dff69b1da +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/tool-result~2: + en: f426dd9a97d97631 + zh: f426dd9a97d97631 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/true: + en: 8141814fd7986b02 + zh: 8141814fd7986b02 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/turn-end: + en: 94aac556c4be113a + zh: 94aac556c4be113a +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/turn-start: + en: 8fae22745547795b + zh: 8fae22745547795b +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/unavailable: + en: c3e0a238f6e53159 + zh: c3e0a238f6e53159 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/unknown: + en: 528fe3840778b37d + zh: 004bf8cc871e6270 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/usage: + en: 496d552369f72775 + zh: 496d552369f72775 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/user: + en: 8df99d357725f7e3 + zh: 8df99d357725f7e3 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/user-message: + en: 6a71e08315210462 + zh: 6a71e08315210462 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/web-search: + en: 5d5f50cfff9b8f73 + zh: 5d5f50cfff9b8f73 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/web-search-20250305: + en: d7bdd7805e7f8acc + zh: d7bdd7805e7f8acc +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/web-deepseek-search-llm-request: + en: c2ac7c44723d7c64 + zh: c2ac7c44723d7c64 +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/webhook: + en: 95280ea5e6be4eee + zh: 95280ea5e6be4eee +/session-v3-persistence-format/complete-schemas/resolved-persistence-types/workspace-write: + en: e1ff2d052fbfd033 + zh: e1ff2d052fbfd033 +/session-v3-persistence-format/verification-and-limitations: + en: 88bb7de56309360b + zh: 83fdac7249029b8e +/session-v3-persistence-format/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/README.i18n.yaml b/docs/persistence-changes/releases/README.i18n.yaml index 3085f3a5bd..7428bab53e 100644 --- a/docs/persistence-changes/releases/README.i18n.yaml +++ b/docs/persistence-changes/releases/README.i18n.yaml @@ -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 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 docs/persistence-changes/releases/README.md -README.md: c818f28d36e3f04c610a9180c7d2d7eb34ad09c5 -README.zh.md: 92d4170717ccdcfd514e4971f03e3e1d35d58267 +/: + en: 813000c665a9a00b + zh: 7585184354024644 +/persistence-changes-across-dsh-prereleases: + en: 779cdacb7f259aae + zh: 0e180dd42e04a81b +/persistence-changes-across-dsh-prereleases/summary: + en: 2fb5f2079645f85f + zh: 4be7bb6cec10b388 +/persistence-changes-across-dsh-prereleases/table-of-contents: + en: 66af6c63111e0d4f + zh: d2cda8c92eda8473 +/persistence-changes-across-dsh-prereleases/archived-releases: + en: 995581f72b7d7bf7 + zh: 7f73f08036618bed +/persistence-changes-across-dsh-prereleases/files-and-scope: + en: c7b3012355eec9c6 + zh: c31da79dc5cf326c +/persistence-changes-across-dsh-prereleases/extraction-and-limitations: + en: 2212c587e280c935 + zh: e1e12ec7d87f9bd2 +/persistence-changes-across-dsh-prereleases/verification: + en: 5ae84a4b450733df + zh: 7bd0f834534aae4c +/persistence-changes-across-dsh-prereleases/dev-note: + en: 5de1d6304e00c58f + zh: e58fc8dda0bea8d5 diff --git a/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml index 35c47029b8..b4b97d8a95 100644 --- a/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.0.1-rc.1.i18n.yaml @@ -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 dsh-v0.0.1-rc.1.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 docs/persistence-changes/releases/dsh-v0.0.1-rc.1.md -dsh-v0.0.1-rc.1.md: 8ed626de6a6ea50e61a688d695e1bd8235d4ec9b -dsh-v0.0.1-rc.1.zh.md: d4c8ca5efca1b3ce51d93a58b1be1868b27f9780 +/: + en: 6125f163634554a1 + zh: 8adbf74c8db4b237 +/persistence-release-dsh-v0-0-1-rc-1: + en: 09a360141934a9c0 + zh: 269f005c46926f90 +/persistence-release-dsh-v0-0-1-rc-1/summary: + en: 445645ae9a94b3fe + zh: 9dfd4b2ca15ada5a +/persistence-release-dsh-v0-0-1-rc-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-0-1-rc-1/release-evidence: + en: 79450b92910236e1 + zh: fe1e61fabc8884ec +/persistence-release-dsh-v0-0-1-rc-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-0-1-rc-1/structural-changes: + en: aed15ef7091b8455 + zh: c44b2756c730d39b +/persistence-release-dsh-v0-0-1-rc-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-0-1-rc-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml index 25bff9757b..0ac31ac4ee 100644 --- a/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml @@ -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 dsh-v0.0.1-rc.2.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 docs/persistence-changes/releases/dsh-v0.0.1-rc.2.md -dsh-v0.0.1-rc.2.md: f9deeccf24b617a76b87e5bf5cc3864f44878f04 -dsh-v0.0.1-rc.2.zh.md: 32962d394e0c68503e4e43cf1b3f64aadc5528e3 +/: + en: 7ea3e1e683cbd7bf + zh: 45b648441bbed855 +/persistence-release-dsh-v0-0-1-rc-2: + en: 6d016f329328a6b2 + zh: ac832d9b723b8a0a +/persistence-release-dsh-v0-0-1-rc-2/summary: + en: 92debf799ae37656 + zh: ed8e5361724534c3 +/persistence-release-dsh-v0-0-1-rc-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-0-1-rc-2/release-evidence: + en: 393360cf3252d6c4 + zh: 8029d59d4fc1d339 +/persistence-release-dsh-v0-0-1-rc-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-0-1-rc-2/structural-changes: + en: bdf6c95697ae5816 + zh: 0332dec60181ab4a +/persistence-release-dsh-v0-0-1-rc-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-0-1-rc-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml index 04d5e1186e..9a336ac41d 100644 --- a/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml @@ -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 dsh-v0.0.1-rc.3.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 docs/persistence-changes/releases/dsh-v0.0.1-rc.3.md -dsh-v0.0.1-rc.3.md: 7201966f5e932d52531f54b842fb3961a423087e -dsh-v0.0.1-rc.3.zh.md: a59d39a86fc45e8d11664ec189412e013fa217e8 +/: + en: ce5b4b849d51a73c + zh: 7ce97e7cb677f2a7 +/persistence-release-dsh-v0-0-1-rc-3: + en: 81e37b26f2034bb0 + zh: bf2461efa9b8e886 +/persistence-release-dsh-v0-0-1-rc-3/summary: + en: 714b8b232df6c3fa + zh: 1237c45e64b399d0 +/persistence-release-dsh-v0-0-1-rc-3/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-0-1-rc-3/release-evidence: + en: ca1106fbbec941f6 + zh: fe6efbb751a862b0 +/persistence-release-dsh-v0-0-1-rc-3/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-0-1-rc-3/structural-changes: + en: b4ded7b41999584d + zh: 49c3f355a5559cbd +/persistence-release-dsh-v0-0-1-rc-3/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-0-1-rc-3/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml index ac34a7d34f..aa3df4277f 100644 --- a/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.0.1-rc.4.i18n.yaml @@ -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 dsh-v0.0.1-rc.4.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 docs/persistence-changes/releases/dsh-v0.0.1-rc.4.md -dsh-v0.0.1-rc.4.md: 9c7da78e7c41f2cc6f3943f4dbe90c54e58bac18 -dsh-v0.0.1-rc.4.zh.md: 143c524d05414b15317fae8e805dfaf5073fcd9d +/: + en: fd1d8d3c57f17598 + zh: cf5f7bee63eaed68 +/persistence-release-dsh-v0-0-1-rc-4: + en: 9fde8f07fc7910fb + zh: 52cda9b1ad6d82ad +/persistence-release-dsh-v0-0-1-rc-4/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-0-1-rc-4/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-0-1-rc-4/release-evidence: + en: c91fc590f09d14f5 + zh: 5d1d3d802e5fa07d +/persistence-release-dsh-v0-0-1-rc-4/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-0-1-rc-4/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-0-1-rc-4/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-0-1-rc-4/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml index 0cad27cc6e..8aac5f5251 100644 --- a/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.0.1-rc.5.i18n.yaml @@ -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 dsh-v0.0.1-rc.5.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 docs/persistence-changes/releases/dsh-v0.0.1-rc.5.md -dsh-v0.0.1-rc.5.md: 1afd6e7fe971ce1765bafdde9ae276da6111fe13 -dsh-v0.0.1-rc.5.zh.md: 6c445d83df0196b4c3e90e08f6d628b5ddd9e10c +/: + en: 0d7d08831fdf0892 + zh: 6d334d500a1d2340 +/persistence-release-dsh-v0-0-1-rc-5: + en: 987d15bec2a5ce38 + zh: c89990f05fb92f09 +/persistence-release-dsh-v0-0-1-rc-5/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-0-1-rc-5/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-0-1-rc-5/release-evidence: + en: 4c4c83fe28a28bee + zh: 228d406ea72bcdf4 +/persistence-release-dsh-v0-0-1-rc-5/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-0-1-rc-5/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-0-1-rc-5/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-0-1-rc-5/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml index 9f7ca55fb2..d14df2c87c 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.1.i18n.yaml @@ -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 dsh-v0.1.0-rc.1.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.1.md -dsh-v0.1.0-rc.1.md: 2a00fea9945cce56ac3c13013dc154432a6dd3cd -dsh-v0.1.0-rc.1.zh.md: 3d6444fb438b594aec120fbe1fe9f57ccf4d1f0d +/: + en: 56706286cbefb77c + zh: a440cb2c6f8fe651 +/persistence-release-dsh-v0-1-0-rc-1: + en: 8bda86a064f6dc9a + zh: 9b708937c5364a9e +/persistence-release-dsh-v0-1-0-rc-1/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-0-rc-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-1/release-evidence: + en: 6836685f0fa6143c + zh: e04314d25b297471 +/persistence-release-dsh-v0-1-0-rc-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-1/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-0-rc-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml index 3b9237b03e..24f45020f5 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.2.i18n.yaml @@ -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 dsh-v0.1.0-rc.2.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.2.md -dsh-v0.1.0-rc.2.md: 71764d9bf8b5862f46f503b01538c255ba546d58 -dsh-v0.1.0-rc.2.zh.md: 6939f57c3836fb9fc7638a1832cbc04be09d843c +/: + en: 4c43cdcf8f39f086 + zh: e5b82beea42f27ca +/persistence-release-dsh-v0-1-0-rc-2: + en: e398d4957e018709 + zh: 4477d248c3938590 +/persistence-release-dsh-v0-1-0-rc-2/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-0-rc-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-2/release-evidence: + en: af4a88adde349051 + zh: 4735ed0a85bbe4c8 +/persistence-release-dsh-v0-1-0-rc-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-2/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-0-rc-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml index cc70c0597d..42d2d8b743 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.3.i18n.yaml @@ -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 dsh-v0.1.0-rc.3.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.3.md -dsh-v0.1.0-rc.3.md: 5e6d42c63e16204835c4dc21e9dc404323382f6c -dsh-v0.1.0-rc.3.zh.md: 26e9763c44e010dbf20b91eecb2567b1cca9f8f5 +/: + en: 3b22b21505054cb9 + zh: f05bec6ebc66a710 +/persistence-release-dsh-v0-1-0-rc-3: + en: fc76086defa13c50 + zh: dbeff04a588c0bbd +/persistence-release-dsh-v0-1-0-rc-3/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-0-rc-3/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-3/release-evidence: + en: cf0c2fc25a718fe2 + zh: e66dabc1a7f8fcf3 +/persistence-release-dsh-v0-1-0-rc-3/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-3/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-0-rc-3/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-3/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml index f06fab0667..604fc96736 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.5.i18n.yaml @@ -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 dsh-v0.1.0-rc.5.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.5.md -dsh-v0.1.0-rc.5.md: c7ef42e5f1373754b453db96fa87b17d63eaa256 -dsh-v0.1.0-rc.5.zh.md: beeaecb89161317750ac719d4626c6e26bdd727a +/: + en: 07ca2645d01ef8b3 + zh: ca45e74572bbc091 +/persistence-release-dsh-v0-1-0-rc-5: + en: 194feab628fdbf26 + zh: ecc5c13ddc9e9fbf +/persistence-release-dsh-v0-1-0-rc-5/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-0-rc-5/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-5/release-evidence: + en: 6642a07cbc30ddc3 + zh: 312e0b2f85737c7b +/persistence-release-dsh-v0-1-0-rc-5/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-5/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-0-rc-5/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-5/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml index 6c1666e2b2..3edcc54405 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.6.i18n.yaml @@ -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 dsh-v0.1.0-rc.6.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.6.md -dsh-v0.1.0-rc.6.md: c674b5208ef42d67f88b31a33ed63d8d83e5a5af -dsh-v0.1.0-rc.6.zh.md: cfd49c4c3d6d6d054c37c0322ccf43f3e5d6a289 +/: + en: 27a0d6e4eea32a25 + zh: f1d46bb6ddc85bab +/persistence-release-dsh-v0-1-0-rc-6: + en: a7e69cd5b9ab1235 + zh: 89f0e25a53f23b62 +/persistence-release-dsh-v0-1-0-rc-6/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-0-rc-6/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-6/release-evidence: + en: 020d4418446a797b + zh: 9dd02c69ebef8221 +/persistence-release-dsh-v0-1-0-rc-6/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-6/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-0-rc-6/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-6/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml index 3fd966f548..0efe3d557b 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml @@ -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 dsh-v0.1.0-rc.7.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.7.md -dsh-v0.1.0-rc.7.md: 6427da5c4656e96a5df273923340b86d341ef54c -dsh-v0.1.0-rc.7.zh.md: 91ae3f106109c2731efa9b07cc39764c720382a5 +/: + en: 4eb37c67d3e75bb6 + zh: 1e44e9df6953bccd +/persistence-release-dsh-v0-1-0-rc-7: + en: 7704b34e741b831a + zh: a96b693c22a4072e +/persistence-release-dsh-v0-1-0-rc-7/summary: + en: b9a148bb0637a5e8 + zh: 41e3d6d3f22535ac +/persistence-release-dsh-v0-1-0-rc-7/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-7/release-evidence: + en: 333ff1a342a84a3a + zh: 8e3647b631ea6a74 +/persistence-release-dsh-v0-1-0-rc-7/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-7/structural-changes: + en: 5178d26722926711 + zh: bfe39111dd34ff48 +/persistence-release-dsh-v0-1-0-rc-7/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-7/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml index 80f8c7e143..d2012c1958 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml @@ -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 dsh-v0.1.0-rc.8.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 docs/persistence-changes/releases/dsh-v0.1.0-rc.8.md -dsh-v0.1.0-rc.8.md: c52f050b820b08ce96230e6a92042801a1f0bccc -dsh-v0.1.0-rc.8.zh.md: b4fd283ede61a70ad2e0d95981439801f68c3670 +/: + en: b1b7c72c7d191c74 + zh: b047337f23d0b97f +/persistence-release-dsh-v0-1-0-rc-8: + en: a6d3d52e747b211c + zh: c9a993a331c25c50 +/persistence-release-dsh-v0-1-0-rc-8/summary: + en: 383af4927f199bc3 + zh: fe5b6f453a844bc8 +/persistence-release-dsh-v0-1-0-rc-8/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-0-rc-8/release-evidence: + en: 7e4de3397921e6ca + zh: 5910dd99741e4807 +/persistence-release-dsh-v0-1-0-rc-8/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-0-rc-8/structural-changes: + en: 6c7808df4fdcbf70 + zh: 8b6d83a8adec7f51 +/persistence-release-dsh-v0-1-0-rc-8/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-0-rc-8/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml index 89377beb23..c5721338e9 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml @@ -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 dsh-v0.1.1-rc.1.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 docs/persistence-changes/releases/dsh-v0.1.1-rc.1.md -dsh-v0.1.1-rc.1.md: 6b598f1c614e7538d0687e68b7397b362bd9f801 -dsh-v0.1.1-rc.1.zh.md: eca10c509ef0bd0c64433ee62200ae6a4bbd161e +/: + en: 16411b573f6a349e + zh: 4a91d5e860c07c1e +/persistence-release-dsh-v0-1-1-rc-1: + en: 1d045b7c8a4c76da + zh: 39733e338b047e2d +/persistence-release-dsh-v0-1-1-rc-1/summary: + en: 47946c3b3ff04b97 + zh: 060d1167f702a699 +/persistence-release-dsh-v0-1-1-rc-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-1-rc-1/release-evidence: + en: bf3580045c698eb9 + zh: 3eb13df7be0aee70 +/persistence-release-dsh-v0-1-1-rc-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-1-rc-1/structural-changes: + en: 0be3fa84192c242d + zh: 59dc45dd8e7f7594 +/persistence-release-dsh-v0-1-1-rc-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-1-rc-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml index e4aa101e97..f0259c93e1 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml @@ -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 dsh-v0.1.1-rc.2.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 docs/persistence-changes/releases/dsh-v0.1.1-rc.2.md -dsh-v0.1.1-rc.2.md: 41cc4f0a3953c30bbbfde36fb6efeac2739c3d9a -dsh-v0.1.1-rc.2.zh.md: 5ab22efd5dcf257dba7ca517ac371e0f8cbae3fd +/: + en: bdd51d4c52cdf7d2 + zh: 6a3ef0a49c58b91f +/persistence-release-dsh-v0-1-1-rc-2: + en: 53d46ea85d2aa162 + zh: e965e2b813934e51 +/persistence-release-dsh-v0-1-1-rc-2/summary: + en: 1b29d3fca7d37ae5 + zh: 0482b941bb1aa734 +/persistence-release-dsh-v0-1-1-rc-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-1-rc-2/release-evidence: + en: 35df8aee3cecbb3e + zh: b2ec028c733895e3 +/persistence-release-dsh-v0-1-1-rc-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-1-rc-2/structural-changes: + en: c03cbb0f4bfb5d83 + zh: c23900507d4111aa +/persistence-release-dsh-v0-1-1-rc-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-1-rc-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml index bf3be8ddc8..8d25d441e9 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml @@ -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 dsh-v0.1.2-alpha.1.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 docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.md -dsh-v0.1.2-alpha.1.md: 3ed00447e4c99722e3eeb04e5dcfa52b582df916 -dsh-v0.1.2-alpha.1.zh.md: 09a6bf3df1654b412809cef5cd296a37500a93bd +/: + en: 22be48a6b7150419 + zh: b13a0cb3162ff117 +/persistence-release-dsh-v0-1-2-alpha-1: + en: f81ab121d79469ee + zh: bc6ec8d81b684b73 +/persistence-release-dsh-v0-1-2-alpha-1/summary: + en: 30148f1fb82be3eb + zh: 3d887a22566d1eb0 +/persistence-release-dsh-v0-1-2-alpha-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-alpha-1/release-evidence: + en: 3694ebede634e908 + zh: c386d00137845df1 +/persistence-release-dsh-v0-1-2-alpha-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-alpha-1/structural-changes: + en: f8e5907da99d32b9 + zh: dcd8dbc9660a20b6 +/persistence-release-dsh-v0-1-2-alpha-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-alpha-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml index a515d61115..7bc9636a7a 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml @@ -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 dsh-v0.1.2-alpha.2.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 docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.md -dsh-v0.1.2-alpha.2.md: 8d4830f4b4b912b92977bfa836eaee3f56ce820a -dsh-v0.1.2-alpha.2.zh.md: b68ea098410e7b024d55122ef155183a3b51a11f +/: + en: c277ccd0019e3c34 + zh: d0eb2167e9e8b60a +/persistence-release-dsh-v0-1-2-alpha-2: + en: 8c8eb7eebbfa8a45 + zh: 14ad431653f25b9f +/persistence-release-dsh-v0-1-2-alpha-2/summary: + en: 081f92559c7d6000 + zh: 3c19182ea0fa5b72 +/persistence-release-dsh-v0-1-2-alpha-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-alpha-2/release-evidence: + en: ad1202354e915e64 + zh: af897ed40c031e47 +/persistence-release-dsh-v0-1-2-alpha-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-alpha-2/structural-changes: + en: 28cb9fbbfbc761af + zh: f3345b2dc10920b1 +/persistence-release-dsh-v0-1-2-alpha-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-alpha-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml index 7cbc671383..7d54e770e3 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.i18n.yaml @@ -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 dsh-v0.1.2-alpha.3.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 docs/persistence-changes/releases/dsh-v0.1.2-alpha.3.md -dsh-v0.1.2-alpha.3.md: 109aeef57811cc389a8d1902d23fa1481acaf131 -dsh-v0.1.2-alpha.3.zh.md: c54594cd106df6f5a2b75d856daa8513da9759dd +/: + en: 5b3b4eb92be80beb + zh: 299e1db8661cf933 +/persistence-release-dsh-v0-1-2-alpha-3: + en: 21d2630efae1673a + zh: 0474bbbe60e4310a +/persistence-release-dsh-v0-1-2-alpha-3/summary: + en: 60198061884a49bf + zh: c76aff971282cc49 +/persistence-release-dsh-v0-1-2-alpha-3/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-alpha-3/release-evidence: + en: c6077a5d315a1762 + zh: af9a53d559337b72 +/persistence-release-dsh-v0-1-2-alpha-3/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-alpha-3/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-2-alpha-3/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-alpha-3/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml index 9a6cec8d2b..cea2d1c259 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml @@ -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 dsh-v0.1.2-alpha.4.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 docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.md -dsh-v0.1.2-alpha.4.md: 9a6be5072c8a25ef83c855fbb4e2ec65da7817c0 -dsh-v0.1.2-alpha.4.zh.md: a279aebe89da2010f327efea909cd7e964cd7da9 +/: + en: 6d264c010895788f + zh: 9e2f8cdcadb90455 +/persistence-release-dsh-v0-1-2-alpha-4: + en: 8c744e88640d6efb + zh: f229e14dbe41ba56 +/persistence-release-dsh-v0-1-2-alpha-4/summary: + en: d783b30059f609d4 + zh: 0f781c5483cf8926 +/persistence-release-dsh-v0-1-2-alpha-4/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-alpha-4/release-evidence: + en: 872216d2627d926e + zh: a1df1333c1e8cc0b +/persistence-release-dsh-v0-1-2-alpha-4/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-alpha-4/structural-changes: + en: 19dc565f0446afc5 + zh: 16309465db21bd8b +/persistence-release-dsh-v0-1-2-alpha-4/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-alpha-4/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml index 8097bdc53e..e20d161cd2 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.i18n.yaml @@ -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 dsh-v0.1.2-alpha.5.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 docs/persistence-changes/releases/dsh-v0.1.2-alpha.5.md -dsh-v0.1.2-alpha.5.md: 7194000efdfeb9ba7da20e7f16f22f07a1c7c8e8 -dsh-v0.1.2-alpha.5.zh.md: 37e754789110fe2173114dfc19bcb8b965dafca8 +/: + en: 0fee52ec84a40cfc + zh: 5f4a9ae9a0072685 +/persistence-release-dsh-v0-1-2-alpha-5: + en: bdd0a8d55af7b8b7 + zh: e4d41b72f76518a7 +/persistence-release-dsh-v0-1-2-alpha-5/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-2-alpha-5/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-alpha-5/release-evidence: + en: 47e7576208b1bb05 + zh: 1502559b4d4360af +/persistence-release-dsh-v0-1-2-alpha-5/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-alpha-5/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-2-alpha-5/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-alpha-5/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml index 7ca7a4fe27..569ba26ffd 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.2-rc.1.i18n.yaml @@ -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 dsh-v0.1.2-rc.1.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 docs/persistence-changes/releases/dsh-v0.1.2-rc.1.md -dsh-v0.1.2-rc.1.md: 1149568a72e26b71ea07f3bf50d3aa2076fefa20 -dsh-v0.1.2-rc.1.zh.md: cbacd243b005dd0c4e6ae9fe5c984a734ef88cb8 +/: + en: 9564fe793345258d + zh: 91e1248050d9497a +/persistence-release-dsh-v0-1-2-rc-1: + en: 3e6a822919559e5a + zh: 33cb7aea461accf8 +/persistence-release-dsh-v0-1-2-rc-1/summary: + en: cfb66ba6a266e7ac + zh: a5c09e0acbb876e9 +/persistence-release-dsh-v0-1-2-rc-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-2-rc-1/release-evidence: + en: d1907215629ab0be + zh: 11813f66b183e2e6 +/persistence-release-dsh-v0-1-2-rc-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-2-rc-1/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-2-rc-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-2-rc-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml index ee9bef6a9c..31145c4ef4 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml @@ -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 dsh-v0.1.3-alpha.1.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 docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.md -dsh-v0.1.3-alpha.1.md: 571718ea4810976d9c0deb976225d3a8961df5a6 -dsh-v0.1.3-alpha.1.zh.md: 980106910f8e9b73b948a60da9ff396404d190ee +/: + en: de410e92cec954fa + zh: 5f706efe75faccad +/persistence-release-dsh-v0-1-3-alpha-1: + en: 072123b540400afa + zh: bb8078fda49940d1 +/persistence-release-dsh-v0-1-3-alpha-1/summary: + en: 2ddf7bc3786e2512 + zh: b7f3c8bffb6e653a +/persistence-release-dsh-v0-1-3-alpha-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-3-alpha-1/release-evidence: + en: 6b6c84ad7bac0422 + zh: d4ced4020664c1fb +/persistence-release-dsh-v0-1-3-alpha-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-3-alpha-1/structural-changes: + en: 492c315af4d250aa + zh: 17a45e34aeb94791 +/persistence-release-dsh-v0-1-3-alpha-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-3-alpha-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml index 8684ecc8b8..934ea2566a 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml @@ -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 dsh-v0.1.3-alpha.2.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 docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.md -dsh-v0.1.3-alpha.2.md: d6b6a658c34fe9d70bea5323e2c35e1d516eab7b -dsh-v0.1.3-alpha.2.zh.md: 9f6d962138f2465cdb437590e9a21ade4999319c +/: + en: 18bc22aa46ac5574 + zh: 7b1fa43c09a9b3db +/persistence-release-dsh-v0-1-3-alpha-2: + en: fdeca78cb65cfd84 + zh: 7ca6fcaed9366286 +/persistence-release-dsh-v0-1-3-alpha-2/summary: + en: 7bef4573850dee11 + zh: 2937d33986a280ce +/persistence-release-dsh-v0-1-3-alpha-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-3-alpha-2/release-evidence: + en: 1f25bf1863b0346b + zh: 9a984b31dc2f7244 +/persistence-release-dsh-v0-1-3-alpha-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-3-alpha-2/structural-changes: + en: be5d82540eb344db + zh: 8edd0ca270019992 +/persistence-release-dsh-v0-1-3-alpha-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-3-alpha-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml index bc37791619..5db80e034e 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml @@ -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 dsh-v0.1.5-alpha.1.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 docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.md -dsh-v0.1.5-alpha.1.md: 3dd251e6ca887db41f01435ad0d143d34942b4b8 -dsh-v0.1.5-alpha.1.zh.md: fb2e2412501c141044e9be422dfe092dcb31580a +/: + en: ed817d763d31349a + zh: e4b0db75dac2c91c +/persistence-release-dsh-v0-1-5-alpha-1: + en: 9d1de376a898146c + zh: 5246c905901fe07d +/persistence-release-dsh-v0-1-5-alpha-1/summary: + en: dba208d5975c7186 + zh: 00ecfa3426c98c44 +/persistence-release-dsh-v0-1-5-alpha-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-5-alpha-1/release-evidence: + en: c17b4600477cb891 + zh: 6434b03c71e1c1f9 +/persistence-release-dsh-v0-1-5-alpha-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-5-alpha-1/structural-changes: + en: f65ce6c033426a9d + zh: 278e167343e54fef +/persistence-release-dsh-v0-1-5-alpha-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-5-alpha-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml index 19b3cf3f8a..6aceb0a20f 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml @@ -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 dsh-v0.1.5-alpha.2.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 docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.md -dsh-v0.1.5-alpha.2.md: 76353e3ab354dfe380c43371208bff60f99806ea -dsh-v0.1.5-alpha.2.zh.md: 676a09c1e65a4401366bfe134f038c34336376c7 +/: + en: 6b329bf09965f6fc + zh: 8d59100b2ebc93c2 +/persistence-release-dsh-v0-1-5-alpha-2: + en: d0410208f5062be4 + zh: 42d800b8b41ba8ec +/persistence-release-dsh-v0-1-5-alpha-2/summary: + en: c57897f9d7622f47 + zh: 5d9484c0c9a09044 +/persistence-release-dsh-v0-1-5-alpha-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-5-alpha-2/release-evidence: + en: 3194608237480db8 + zh: 228b96353d766515 +/persistence-release-dsh-v0-1-5-alpha-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-5-alpha-2/structural-changes: + en: a142ebb2293bce41 + zh: 488e9e2321625d51 +/persistence-release-dsh-v0-1-5-alpha-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-5-alpha-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml index 06d075c998..50715a4c1a 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.5-rc.1.i18n.yaml @@ -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 dsh-v0.1.5-rc.1.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 docs/persistence-changes/releases/dsh-v0.1.5-rc.1.md -dsh-v0.1.5-rc.1.md: e34e7f37ebb69cb59d1f4385c18f0669c8c8457f -dsh-v0.1.5-rc.1.zh.md: 9bf09e21a18d01bf1e55412901fe84ad741c3258 +/: + en: 25cd0b3b520b5c8c + zh: ae57a15a7d763a31 +/persistence-release-dsh-v0-1-5-rc-1: + en: ddf1cbc423c753fa + zh: 0fb82d0eae6e1adf +/persistence-release-dsh-v0-1-5-rc-1/summary: + en: 8c7f10046d56ed39 + zh: 712a830b77905fc2 +/persistence-release-dsh-v0-1-5-rc-1/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-5-rc-1/release-evidence: + en: eb6153a12ebbce86 + zh: bcd2e07e57549265 +/persistence-release-dsh-v0-1-5-rc-1/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-5-rc-1/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-5-rc-1/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-5-rc-1/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml b/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml index 3df6e7062c..f06d1f1abe 100644 --- a/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml +++ b/docs/persistence-changes/releases/dsh-v0.1.5-rc.2.i18n.yaml @@ -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 dsh-v0.1.5-rc.2.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 docs/persistence-changes/releases/dsh-v0.1.5-rc.2.md -dsh-v0.1.5-rc.2.md: 6922fe63dd1239cad10793df47b0f26e431d2aed -dsh-v0.1.5-rc.2.zh.md: ec3c16c6663ae60b88dc847921dde20bca6da097 +/: + en: 5cd5c5c0fa630591 + zh: 19858eb2f99ad84e +/persistence-release-dsh-v0-1-5-rc-2: + en: b750c2c9e8b1df8a + zh: 76eb485917634e2d +/persistence-release-dsh-v0-1-5-rc-2/summary: + en: 8c7f10046d56ed39 + zh: 712a830b77905fc2 +/persistence-release-dsh-v0-1-5-rc-2/table-of-contents: + en: 0ff4a6f3c6af323f + zh: f5c7bd70cc1585c7 +/persistence-release-dsh-v0-1-5-rc-2/release-evidence: + en: f995954a1fac4397 + zh: 5f23a0028a431dc5 +/persistence-release-dsh-v0-1-5-rc-2/declaration: + en: af9cea43334ee692 + zh: c6c8bd0d6a17718a +/persistence-release-dsh-v0-1-5-rc-2/structural-changes: + en: 54958f4b7cc8ef6f + zh: 4ff5ab79aacc9b37 +/persistence-release-dsh-v0-1-5-rc-2/verification: + en: 8ccca317964523b1 + zh: 2c8b3e70a3320778 +/persistence-release-dsh-v0-1-5-rc-2/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml b/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml index 344b9ccdf2..f640245be0 100644 --- a/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml +++ b/docs/postmortem/0001-acp-default-export-drops-inject.i18n.yaml @@ -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 0001-acp-default-export-drops-inject.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 docs/postmortem/0001-acp-default-export-drops-inject.md -0001-acp-default-export-drops-inject.md: d5325b3f051669111ad7c097c395744553d57c6c -0001-acp-default-export-drops-inject.zh.md: 189c2418106dc44bde43ef7fd4d2f8ce62d1d672 +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject: + en: d7e3ed1019ed04b5 + zh: 23c6df9914b95d3a +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/executive-summary: + en: 4c04bfd12a9abc10 + zh: 65cd77656e04c2b5 +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/summary: + en: 15b14cde0d25bf7e + zh: c392c2685acbfa0e +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/impact: + en: c0280f3cf50c52de + zh: c66f9d63463cbbe0 +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/timeline: + en: 0a3527d26904f25b + zh: 2c5f309eb2ee720d +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/root-cause-1-export-default-apply-drops-the-plugin-s-inject-broke-session-new: + en: 3245b91e4b91eb30 + zh: a9ae857171988781 +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/root-cause-2-optional-service-read-trips-the-inject-guard-through-a-traceable-shadow-broke-session-load: + en: dcb8a8c88825aa15 + zh: eabfa6213c6cd6cf +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/why-every-test-missed-it-the-real-failure: + en: ec8486bb598fea8c + zh: 54119c30256686ea +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/guardrails-added: + en: 485f2ebdf38b0eac + zh: e96a6dd64aa83229 +/post-mortem-0001-acp-server-crashed-on-connect-export-default-dropped-the-plugin-s-inject/lessons: + en: 0a548f66ad8f6b7d + zh: 4703c08852f4b063 diff --git a/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml b/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml index b3417317ac..d008fe6faf 100644 --- a/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml +++ b/docs/postmortem/0002-js-expression-disabled-filesystem-tools.i18n.yaml @@ -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 0002-js-expression-disabled-filesystem-tools.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 docs/postmortem/0002-js-expression-disabled-filesystem-tools.md -0002-js-expression-disabled-filesystem-tools.md: 317b9759afda90b3864619f874f99e5a7047395f -0002-js-expression-disabled-filesystem-tools.zh.md: 1c87796c66309be28a17a6c0e71e48ae2e2fda40 +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled: + en: 02d6d2adb8360fc7 + zh: ec94ad79d29fb636 +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/executive-summary: + en: 65cd31a6519707a8 + zh: 6bbe0d8f25c52ab7 +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/summary: + en: 5d5d691d5aeb19a0 + zh: 95103a9c44256c0d +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/impact: + en: 94b56ca57f1f5df8 + zh: 301a312868bb7845 +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/timeline: + en: 87721ebe7ffd51b1 + zh: c0a1116cccf96b2e +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/root-cause: + en: 6bc8392c0b578c99 + zh: 96cba7b750571fd1 +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/guardrails-added: + en: dfe6ddbe59258210 + zh: 20c1652004ad258a +/post-mortem-0002-filesystem-snapshot-tools-were-permanently-disabled/lessons: + en: 375a29a336c99be9 + zh: ee64c6abe3f923ff diff --git a/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml b/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml index 88081f5426..8be48bc808 100644 --- a/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml +++ b/docs/postmortem/0003-web-agent-gui-feedback-loop.i18n.yaml @@ -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 0003-web-agent-gui-feedback-loop.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 docs/postmortem/0003-web-agent-gui-feedback-loop.md -0003-web-agent-gui-feedback-loop.md: 3b836764dcf47758a6a0b472d92484f39b9ff510 -0003-web-agent-gui-feedback-loop.zh.md: 402fe05341f9ab568329c30e9db0ebde97a5753b +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui: + en: 348d9ff129e5494a + zh: ac88ae827ead8ec1 +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/executive-summary: + en: 562cbc1e8c6eb15a + zh: 0bfbc34b7d2ef54a +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/summary: + en: 4cd79ce01e271fb2 + zh: d9792ae3754d683a +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/impact: + en: 48899c487352c865 + zh: 7ba3a7ecb1fde2e7 +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/timeline: + en: 83f1a82b09afcaba + zh: 9eccf9379a322184 +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/root-cause: + en: 7d18f95cdf38e8ad + zh: 69488576b9eca212 +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/guardrails-added: + en: 8b1a87b2b9d9437d + zh: 59d0cf5e753d9f67 +/post-mortem-0003-web-agent-validated-a-replacement-server-instead-of-its-current-gui/lessons: + en: f7830cb5a4fe0be4 + zh: 8422af4234ac9e40 diff --git a/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml b/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml index 31d4641a3a..9a16260746 100644 --- a/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml +++ b/docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.i18n.yaml @@ -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 0004-landlock-partial-notice-misclassified-child-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 docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md -0004-landlock-partial-notice-misclassified-child-failures.md: 06d39b1db8436d4cfd7ad6145782b4eb2c4d31ae -0004-landlock-partial-notice-misclassified-child-failures.zh.md: 6fb5c727419745590847455e8ea7e9dfb1bce8d3 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures: + en: b71a197449d26d2f + zh: 2b62b51f43516f16 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/executive-summary: + en: 2ec1637fb5a99515 + zh: f3bca251dca064d6 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/summary: + en: 818daf81fe33bfb2 + zh: 4c45efa374df5850 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/impact: + en: a65c52d5874b07e5 + zh: 6f65a41eb0549528 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/timeline: + en: 43c9f047bbd0a239 + zh: 4756c4a814e67f9e +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/root-cause: + en: 97c948a04dd4ac89 + zh: dec9b74160efb68f +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/guardrails-added: + en: bf3bc8101efe4b0f + zh: 3d17794adb3f61c7 +/post-mortem-0004-landlock-partial-enforcement-notice-misclassified-child-failures/lessons: + en: eea3aedb5f5f4f9f + zh: 1c718cd06caa9f25 diff --git a/docs/postmortem/README.i18n.yaml b/docs/postmortem/README.i18n.yaml index 759cbbad91..5002c68cdd 100644 --- a/docs/postmortem/README.i18n.yaml +++ b/docs/postmortem/README.i18n.yaml @@ -1,6 +1,7 @@ -# 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 docs/postmortem/README.md -README.md: ffde0057304856b7c7718e3dd1f4743c48ee193f -README.zh.md: 4b3f8588cc1f6e162c72a5b6a78b996638baf7ae +/post-mortems: + en: 3bd772313d364d9f + zh: e84d0e90f62431fb diff --git a/docs/rescope.i18n.yaml b/docs/rescope.i18n.yaml index a02315a875..0ae34aebc0 100644 --- a/docs/rescope.i18n.yaml +++ b/docs/rescope.i18n.yaml @@ -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 rescope.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 docs/rescope.md -rescope.md: 0fcbdd476afb45c2fd9efe927c6b5643b9426683 -rescope.zh.md: bd6e3f233b46cb7c0ed5c1f624d2941f41665a6f +/vendored-package-rescope: + en: c8aa4d3384ea1306 + zh: 5aa030587d5b634d +/vendored-package-rescope/name-mapping: + en: cc0f91dc4bb82605 + zh: 81d5031752c6ea74 +/vendored-package-rescope/what-the-rename-does-not-touch: + en: e781d7e1b46c0974 + zh: 9796fb884c25d850 +/vendored-package-rescope/what-your-code-has-to-change: + en: 50a48dfda6cea731 + zh: 55028c5c04270eff +/vendored-package-rescope/applying-verifying-and-reverting: + en: 2a7f21e03e6cb4f7 + zh: dcf4172adf916fda diff --git a/docs/session-format-status.i18n.yaml b/docs/session-format-status.i18n.yaml index 00b72e5e97..833cd194f6 100644 --- a/docs/session-format-status.i18n.yaml +++ b/docs/session-format-status.i18n.yaml @@ -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 session-format-status.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 docs/session-format-status.md -session-format-status.md: 9df313da2fad277254f464a8bdf6a6c8b541aab1 -session-format-status.zh.md: 31e1710632b07a1f64a5bc528bf0827c5af47af9 +/session-format-version-and-release-status: + en: 91b0700056e51bc2 + zh: acf848640296be3a +/session-format-version-and-release-status/summary: + en: 702f6c39cc29beca + zh: 75cd72d886640bb5 +/session-format-version-and-release-status/table-of-contents: + en: 4b723de0471eae1b + zh: b308bf89ea47ae05 +/session-format-version-and-release-status/sources-of-truth: + en: 02d18ba8a66cfb10 + zh: 54b753bbcb8f8a9e +/session-format-version-and-release-status/finalization-record: + en: 9a1b2f4c61551ab7 + zh: 666a2339c47343e1 +/session-format-version-and-release-status/release-record: + en: ee6e54ebc2b6dd37 + zh: 928343edfd3fb943 +/session-format-version-and-release-status/updating-the-record: + en: 7eaa730a2d163bd6 + zh: 53ed7618537db2f5 +/session-format-version-and-release-status/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/docs/subsystems/README.i18n.yaml b/docs/subsystems/README.i18n.yaml index fbe468ab96..0f2b71ceeb 100644 --- a/docs/subsystems/README.i18n.yaml +++ b/docs/subsystems/README.i18n.yaml @@ -1,6 +1,7 @@ -# 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 docs/subsystems/README.md -README.md: d2e8dea206e24ae65676ae50596a3f559239cc21 -README.zh.md: 78c97a016a93415ac1fca1afb6658aa623a61f7a +/subsystems: + en: abd1088109b69d49 + zh: 7564a0579de5e142 diff --git a/docs/subsystems/agent-team.i18n.yaml b/docs/subsystems/agent-team.i18n.yaml index 03abbfe5b9..edb0d57235 100644 --- a/docs/subsystems/agent-team.i18n.yaml +++ b/docs/subsystems/agent-team.i18n.yaml @@ -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 agent-team.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 docs/subsystems/agent-team.md -agent-team.md: 6cb503d130727b4c4694877f83c02f2e0983c8af -agent-team.zh.md: 083b9fafb6f45cd09ded84807da3c8602193b3d4 +/agent-teams: + en: f571e223220bb616 + zh: dd7e37fdf359eeae +/agent-teams/identity-and-roster: + en: c6e6d2add95df5e8 + zh: 36c0b25c3f4eb80b +/agent-teams/durable-mailbox: + en: 75fb392a6ccfbdf9 + zh: f80678b84bd1ea47 +/agent-teams/shared-task-dag: + en: 4515005d07e4d2a3 + zh: 26811b31f69009d6 +/agent-teams/web-projection: + en: 6af99eff8036597a + zh: f172f994e01f12c1 +/agent-teams/replay: + en: 4adfd7bad5c0e302 + zh: 2d71ba065f44f2a1 diff --git a/docs/subsystems/approval.i18n.yaml b/docs/subsystems/approval.i18n.yaml index 9f505f4a5b..d11fac4c66 100644 --- a/docs/subsystems/approval.i18n.yaml +++ b/docs/subsystems/approval.i18n.yaml @@ -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 approval.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 docs/subsystems/approval.md -approval.md: 656325aa446321253817be3ffeaef658a7c975c4 -approval.zh.md: a22aec2ef23fdf4809a73e1bc8509eab2679742f +/user-approval: + en: 490b0cce7f1ceed5 + zh: 1126f2d7261b490a +/user-approval/identity-and-outcome: + en: 3dd2094e3bd0f10f + zh: 0a56f3add2e1fc57 +/user-approval/per-session-policy: + en: 5e51c6e37c5e30c3 + zh: 84bad36357332539 +/user-approval/approval-request: + en: dc3647525133ff2f + zh: 8365b809a93ec81d +/user-approval/dispatch-and-audit: + en: bd2c2cc1eaaaf2d6 + zh: 67bfbed1b7499ffb diff --git a/docs/subsystems/attachment.i18n.yaml b/docs/subsystems/attachment.i18n.yaml index b0560c8499..b548deda3d 100644 --- a/docs/subsystems/attachment.i18n.yaml +++ b/docs/subsystems/attachment.i18n.yaml @@ -1,6 +1,13 @@ -# 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 attachment.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 docs/subsystems/attachment.md -attachment.md: db1c1cfa15f5d0815236f96b6472cbbd864decbd -attachment.zh.md: 82379de5049012c0912734dc94257d6b8f354ad1 +/durable-attachments: + en: 564dfcaaca384e23 + zh: 5d215635919b5bc4 +/durable-attachments/identity-and-verified-metadata: + en: 3ddfd5100061dc6a + zh: 3eedb90c8813d015 +/durable-attachments/commit-and-verified-read-payloads: + en: 01c9eb5d67e3c7c3 + zh: abf32dddcca5fce1 diff --git a/docs/subsystems/boot.i18n.yaml b/docs/subsystems/boot.i18n.yaml index 54a45c2704..cc1d189e3f 100644 --- a/docs/subsystems/boot.i18n.yaml +++ b/docs/subsystems/boot.i18n.yaml @@ -1,6 +1,10 @@ -# 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 boot.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 docs/subsystems/boot.md -boot.md: 07391705977bc7b3cba9377e3142feea7d62f69f -boot.zh.md: 64ff36d41295f529b81f2856f2fbc77f09efa808 +/profile-management: + en: 962b4398c9052959 + zh: 14471c340a9f6e60 +/profile-management/management-records: + en: c49daf51d1468b37 + zh: f4964a074ca9002f diff --git a/docs/subsystems/browser-use.i18n.yaml b/docs/subsystems/browser-use.i18n.yaml index 0875cf7834..1e1108c967 100644 --- a/docs/subsystems/browser-use.i18n.yaml +++ b/docs/subsystems/browser-use.i18n.yaml @@ -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 browser-use.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 docs/subsystems/browser-use.md -browser-use.md: 73cedae85752b296c3f85e53d40448e25a711685 -browser-use.zh.md: 573b15962eddab154947a33e9bebe2303cb24fea +/browser-use: + en: c4c91e07977a0d7b + zh: ae7bf1da6f4019a5 +/browser-use/choose-a-provider: + en: 1e8ff2e03064fcff + zh: d7164f738e5b4c5c +/browser-use/session-ownership: + en: a6cd1aa7ea518c3f + zh: 44d2b40a15f81ce9 +/browser-use/mcp-initialization: + en: ac4bcaf872ec5ed8 + zh: 57d699d1b6e07caf +/browser-use/tools-and-recorded-results: + en: 968055589fb64b35 + zh: d549a52809ddcf58 diff --git a/docs/subsystems/client-modules.i18n.yaml b/docs/subsystems/client-modules.i18n.yaml index 884c4909e5..5f36ef699f 100644 --- a/docs/subsystems/client-modules.i18n.yaml +++ b/docs/subsystems/client-modules.i18n.yaml @@ -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 client-modules.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 docs/subsystems/client-modules.md -client-modules.md: 80c8377502253fd1673731a5f30acbff0c7b0765 -client-modules.zh.md: d488e195110abd4b1ec95f901ef26dd56e8e1b73 +/client-modules: + en: e256a29cc5bc2726 + zh: e181d6b1a6e5c647 +/client-modules/the-wire: + en: 5734d296e8ea39d1 + zh: 27bedf34fc90d892 +/client-modules/the-scan: + en: 91ce66fab388a8a2 + zh: 77428943582ae3f6 +/client-modules/the-bundle-route-and-index-injection: + en: d653be500d3a0d67 + zh: fffb1901ce8ba7d9 +/client-modules/the-service: + en: 000882ed7f09ad3f + zh: c17c05f087d9574d diff --git a/docs/subsystems/client-resources.i18n.yaml b/docs/subsystems/client-resources.i18n.yaml index b5a597f360..56ae36014f 100644 --- a/docs/subsystems/client-resources.i18n.yaml +++ b/docs/subsystems/client-resources.i18n.yaml @@ -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 client-resources.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 docs/subsystems/client-resources.md -client-resources.md: 09acaf72eb5ee6f6003d9b275afa8a73f0822771 -client-resources.zh.md: 4a0e30d2d885d143b1bc59ca58f59fd8d1f3e9b7 +/client-resources: + en: a7972413b1780235 + zh: 74d70a11d7e7f7e3 +/client-resources/addresses: + en: 47da087087a3b0c5 + zh: ddf0ffe347a1fe0c +/client-resources/registering-a-provider: + en: bfe0d08fb20a8f55 + zh: a569b0e65a343943 +/client-resources/reading-a-resource: + en: d1c77f944148b976 + zh: 882f95a6046ccc80 +/client-resources/holding-and-releasing: + en: 4b904d5298237dd3 + zh: 6952e56fecf9de78 +/client-resources/limits: + en: 0bb8c1e28d645c4a + zh: 1c353afec3af2546 diff --git a/docs/subsystems/commands.i18n.yaml b/docs/subsystems/commands.i18n.yaml index f24adaee4e..6ffccc99cd 100644 --- a/docs/subsystems/commands.i18n.yaml +++ b/docs/subsystems/commands.i18n.yaml @@ -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 commands.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 docs/subsystems/commands.md -commands.md: dc6ad74da872166fbf584dcab8e1ed21878c243a -commands.zh.md: 57a60a87f78cd264acdbffa3f7514b4ac287073c +/human-commands: + en: e3bfa72a37c4afcd + zh: 887432898b31115d +/human-commands/input-metadata: + en: 9c7fd38926610b58 + zh: 40f1b2fd9b18ed52 +/human-commands/definition: + en: 8d1944548766d286 + zh: b804059b5875984f +/human-commands/invocation-and-result: + en: c60c29cb7135ac76 + zh: c2c2a79d4d73959e +/human-commands/discovery-and-parsing-views: + en: a3bcb9354133cf68 + zh: 4699cb44ca9662e3 diff --git a/docs/subsystems/compaction.i18n.yaml b/docs/subsystems/compaction.i18n.yaml index 671930e3d1..b4be04a060 100644 --- a/docs/subsystems/compaction.i18n.yaml +++ b/docs/subsystems/compaction.i18n.yaml @@ -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 compaction.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 docs/subsystems/compaction.md -compaction.md: 6e135025ab6095e2365e172847bc493d41c50774 -compaction.zh.md: 9b82fb7a7b9e55f2aefa6d561922948fd328c8e9 +/compaction: + en: 7eb1d2d84fb85447 + zh: 1927119f75c0dd45 +/compaction/the-compaction-session-events: + en: e75ae617952aa929 + zh: a0e5780f46dff510 +/compaction/image-offload: + en: 19632b674911826b + zh: b29ef7ff4ae58e58 +/compaction/compactionresult: + en: 9dde333b53c14f24 + zh: 8959aafefc55f9a4 +/compaction/the-service: + en: 3b7544ff9cc0f0db + zh: e9a5e4c6c412eab0 +/compaction/tool-result-pruning-outcomes: + en: 27091b0a3d454575 + zh: e22431e27e1349f2 diff --git a/docs/subsystems/computer-use.i18n.yaml b/docs/subsystems/computer-use.i18n.yaml index ebe78cdaeb..c0dfa781ec 100644 --- a/docs/subsystems/computer-use.i18n.yaml +++ b/docs/subsystems/computer-use.i18n.yaml @@ -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 computer-use.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 docs/subsystems/computer-use.md -computer-use.md: 290df7f02e35795aa25039480c3221f754d0c024 -computer-use.zh.md: 4c6db29487a0dcf2debbd72ae047d91b1c09e008 +/computer-use: + en: f216bcec22b775b6 + zh: 3f673bdbef20146e +/computer-use/choose-a-provider: + en: fa2e0d7b41c0450b + zh: af9a799711f901e6 +/computer-use/lifetime-and-desktop-sharing: + en: 08ff155ad3d75953 + zh: 48821856b6dff051 +/computer-use/results-and-platform-requirements: + en: 9211e67d14dc1ac5 + zh: dc8e4da898a417d4 diff --git a/docs/subsystems/conversation.i18n.yaml b/docs/subsystems/conversation.i18n.yaml index be624bc56d..9a57ab6f2a 100644 --- a/docs/subsystems/conversation.i18n.yaml +++ b/docs/subsystems/conversation.i18n.yaml @@ -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 conversation.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 docs/subsystems/conversation.md -conversation.md: dca3d513398cb1e29a8fe16d00fd1bac9c21ce58 -conversation.zh.md: 18d2a2b282f0ccb02cc903855cf65d542e4160da +/conversation-assembly: + en: 986c210044271162 + zh: afe3372d8b68d963 +/conversation-assembly/data-model-and-ownership: + en: 9f86eaf987b4f631 + zh: b1ecc4c292715445 +/conversation-assembly/target-activation: + en: 41a32beb5c85354f + zh: 346f7c9a17cb1f67 +/conversation-assembly/group-definitions: + en: 62c0a5ae4ed7e1aa + zh: 787ad4d04b79adaf +/conversation-assembly/replayable-event-families: + en: 17f9e11d512b2b8e + zh: 6b7a9c1139eededb +/conversation-assembly/definition-and-typed-chat-payload: + en: c7ea2c9192f80274 + zh: 742b5c31af1e4ade +/conversation-assembly/predecessor-reads: + en: da849b3b5da81da8 + zh: 37a647a439bc24b1 +/conversation-assembly/window-update-paths: + en: 1e22169d3d7b8ff1 + zh: 669d03d2148e9a46 +/conversation-assembly/verification-obligations: + en: ee832671cb7d94ef + zh: 380303a2de942710 diff --git a/docs/subsystems/core.i18n.yaml b/docs/subsystems/core.i18n.yaml index 51b124f552..c4c106c066 100644 --- a/docs/subsystems/core.i18n.yaml +++ b/docs/subsystems/core.i18n.yaml @@ -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 core.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 docs/subsystems/core.md -core.md: 64344148708b29fc186a2e33ef187025c4bc5300 -core.zh.md: 0b85519b916490d6692a31f59ed89527ce72fa43 +/core: + en: f6ae07d8902e8edf + zh: c92fef531c6da331 +/core/the-spine-package-by-package: + en: c90cb23528ddb6c8 + zh: 62724b7255b586b6 +/core/creation-and-ownership: + en: ab09a38b4e1f0883 + zh: 81e2d14c4036ab6c +/core/the-agent-handle: + en: c21787347d8e2b14 + zh: 25bc9cb60ee1520a +/core/initiating-agent: + en: 6c8c47ac78de2dde + zh: c9d527a25a85d1d9 +/core/interception-decisions: + en: 6fccceb0a5f1cad9 + zh: f43c30c2386d8cc8 +/core/sessions: + en: 9a38f693a00fa80d + zh: d0f66664ac85ae64 +/core/tooldefinition: + en: d926a9b80aada2e5 + zh: e34e6f43bdfd8920 +/core/repo-wide-type-patterns: + en: 057db6d8bf356c0f + zh: 1441b39e5142b0bf +/core/repo-wide-type-patterns/the-map-derived-union-pattern: + en: 84c039e929edb897 + zh: 84241bb993f23ef2 +/core/repo-wide-type-patterns/branded-ids: + en: 10f8ac0f97e7c54a + zh: 75cd2311aabfe464 diff --git a/docs/subsystems/credentials.i18n.yaml b/docs/subsystems/credentials.i18n.yaml index 39b3981c62..f9baaaa97e 100644 --- a/docs/subsystems/credentials.i18n.yaml +++ b/docs/subsystems/credentials.i18n.yaml @@ -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 credentials.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 docs/subsystems/credentials.md -credentials.md: 341c554f3a59fa87a6a783edc379aeb1f9c1c985 -credentials.zh.md: 33994d405fda20aae2bd5785e2a7a408cc40b370 +/user-credentials: + en: 4589c745baf092c7 + zh: 3a782e6a06825201 +/user-credentials/identity: + en: aba5a25c34e229cc + zh: 96493f925f60b533 +/user-credentials/resolution: + en: baaab4bca76bea6b + zh: 54ccdc03ffd44f63 +/user-credentials/description: + en: 17573160805d3014 + zh: 36a058a96f45df23 +/user-credentials/change-commits: + en: 464315a953330eb2 + zh: d9815591f3abc2cb +/user-credentials/embedded-platform-credentials: + en: 7f3864e41e315565 + zh: 32a81c5731d56701 +/user-credentials/cordis-api/deepseek-account-events/deepseek-account-signed-out-emit: + en: 22aab907d3501c3d + zh: 444f2c942da8ee58 diff --git a/docs/subsystems/deliverables.i18n.yaml b/docs/subsystems/deliverables.i18n.yaml index f7397bf69f..80fd21bc38 100644 --- a/docs/subsystems/deliverables.i18n.yaml +++ b/docs/subsystems/deliverables.i18n.yaml @@ -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 deliverables.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 docs/subsystems/deliverables.md -deliverables.md: 3347481f3e69d9a3921bb8784335b62bc9d869c2 -deliverables.zh.md: d3d10565d58664d749cb0c9dbacf1fa2ab741066 +/deliverables: + en: a5ce6d07597594ec + zh: 72639c6033d66f41 +/deliverables/presentedfile-one-declared-delivery: + en: bf10a8aa233c61d9 + zh: fdab894f8448c843 +/deliverables/workspacechangedfile-one-changed-file: + en: 2e1f9b9658d9a0bd + zh: a6df218327729abd +/deliverables/workspacechangessummary-one-turn-s-change-summary: + en: 9fc7e9ab3e3a2e18 + zh: b165a5ebfa1f258d +/deliverables/workspacediffhunk-one-unified-diff-hunk: + en: 460ee1e47584bb6d + zh: 459abc474276ae63 +/deliverables/workspacefilediff-one-file-s-comparison: + en: f46c513203b5c4b3 + zh: 5462c4ab3370d719 +/deliverables/workspacechanges-the-host-service-serving-summaries-and-comparisons: + en: d83ba5599b57425a + zh: 23fdbccf9173221d +/deliverables/durable-events-and-the-served-summary: + en: 138e4540efe09196 + zh: 3c50c4e650b19194 diff --git a/docs/subsystems/extensions.i18n.yaml b/docs/subsystems/extensions.i18n.yaml index 91f9f20574..2c680066a8 100644 --- a/docs/subsystems/extensions.i18n.yaml +++ b/docs/subsystems/extensions.i18n.yaml @@ -1,6 +1,7 @@ -# 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 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 docs/subsystems/extensions.md -extensions.md: 540f3c477b4e128b0c1062192185e6276c9e9263 -extensions.zh.md: ebfe7827484cea2cf8c6d77ca26796f7751d203a +/extensions: + en: 59e910050ccf630f + zh: fa0f7d54ee45c2b8 diff --git a/docs/subsystems/feedback.i18n.yaml b/docs/subsystems/feedback.i18n.yaml index 96cf13ee20..463c0a049f 100644 --- a/docs/subsystems/feedback.i18n.yaml +++ b/docs/subsystems/feedback.i18n.yaml @@ -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 feedback.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 docs/subsystems/feedback.md -feedback.md: 1fa8631c2c262351e320d0e8642bdad96474214d -feedback.zh.md: 2417ade68447a9b4fe08c7433b7ce779044b99c5 +/message-feedback: + en: 707e1e2e0183cf62 + zh: f47848008069df70 +/message-feedback/public-types: + en: 514e3a869e355a86 + zh: 4b6f416f8ff3847f +/message-feedback/session-feedback-types: + en: dacd5384864a040f + zh: 1912000a5d76c277 +/message-feedback/data-and-concurrency: + en: 12231161d9001f8b + zh: 2f1aa0cf78f67643 +/message-feedback/target-and-lifecycle-authority: + en: 5f27c79e933bec0a + zh: e9211a24f97e730f +/message-feedback/persistence-and-remote-contract: + en: d30ec3f187959494 + zh: 3a32859637c492ce +/message-feedback/web-surface: + en: 6f60352749185e55 + zh: c654a17ec1e17393 +/message-feedback/boundaries-and-limitations: + en: 6e258de40224234e + zh: 05a7e181d357d038 diff --git a/docs/subsystems/filesystem.i18n.yaml b/docs/subsystems/filesystem.i18n.yaml index c04ea7446f..7dd6e4531e 100644 --- a/docs/subsystems/filesystem.i18n.yaml +++ b/docs/subsystems/filesystem.i18n.yaml @@ -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 filesystem.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 docs/subsystems/filesystem.md -filesystem.md: d099e619b208f5984db6ff4561cd203d13910ff0 -filesystem.zh.md: 6e907d07b82c72453ef45d67e6bcb9809431e20a +/filesystem: + en: 9085200a1975c5cd + zh: 48af21e513f7dc25 +/filesystem/target-identity-and-metadata-provider-contract: + en: 345def8a8e6c58e0 + zh: 01d6e2f0f22daf9d +/filesystem/write-and-edit-guards-provider-contract: + en: 067137c8b8181c98 + zh: 0a9c8282789d147f +/filesystem/the-fs-policy-events-provider-contract-vocabulary: + en: 5dd0bdff9508350d + zh: 74d846f58fe561c9 +/filesystem/execution-context-policy-plugin: + en: a23c12fc81bb4786 + zh: 9dc12d18f9c97e6a +/filesystem/read-outcome-consumer-read-rendering: + en: 9315d84e53db33e9 + zh: 86426ffbfa487504 +/filesystem/observed-file-state-policy-plugin: + en: 93e8d93a5049b67f + zh: b50db8c745baa5fe +/filesystem/error-taxonomy-provider-contract: + en: 0785de8395fef24f + zh: 0fc173dff1fe4658 +/filesystem/no-timeouts-on-file-io: + en: ae18af906f3f7e50 + zh: 24a1aa6f903fe08d +/filesystem/the-service-and-the-plugin: + en: 6dcd1f39906d785e + zh: e2b4b104bad31144 diff --git a/docs/subsystems/goal.i18n.yaml b/docs/subsystems/goal.i18n.yaml index 9d5cdf725f..c4e92f958e 100644 --- a/docs/subsystems/goal.i18n.yaml +++ b/docs/subsystems/goal.i18n.yaml @@ -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 goal.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 docs/subsystems/goal.md -goal.md: ca49f0cd4f0ae65917e3dbc4e001d74d0f96d080 -goal.zh.md: 4567f327a950979ac5f0251bdc7f6dc9a619757c +/same-session-goals: + en: f76138e8235819ce + zh: fdb595b0451cd8f7 +/same-session-goals/identity-and-lifecycle: + en: 539925bba84c069e + zh: 2f8ca46c076a393d +/same-session-goals/durable-changes: + en: c23e38f00f1d8a55 + zh: 69c53f7e3ee505e1 +/same-session-goals/requests-and-notifications: + en: 2148e6a388284de0 + zh: 6293130430f483c3 +/same-session-goals/service-behavior: + en: cf0ca472e061e794 + zh: aa6e9ee22a6a3ee6 diff --git a/docs/subsystems/invariants.i18n.yaml b/docs/subsystems/invariants.i18n.yaml index 0effb6bdfd..8cbba766c6 100644 --- a/docs/subsystems/invariants.i18n.yaml +++ b/docs/subsystems/invariants.i18n.yaml @@ -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 invariants.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 docs/subsystems/invariants.md -invariants.md: 2d1856dfd049a32076356bf6fa8736d4179881f2 -invariants.zh.md: 15760a9b116d03475970de762657e841e094c72a +/runtime-invariants: + en: b48053808b8bb042 + zh: 7be7763ded5f3a6e +/runtime-invariants/selection: + en: 2d3bb3a2a0212e2d + zh: 8c8f1e1ba5790ba4 +/runtime-invariants/the-installer: + en: ba1607612e5ed640 + zh: 33459bdb7c42443c +/runtime-invariants/the-service: + en: 6368b54b2cbdb36c + zh: 4859ac095e536d42 +/runtime-invariants/the-companion-contract: + en: 414b986025768325 + zh: b4071f8b39f8f755 diff --git a/docs/subsystems/jobs.i18n.yaml b/docs/subsystems/jobs.i18n.yaml index 059d83dd5f..a6f9ceaf75 100644 --- a/docs/subsystems/jobs.i18n.yaml +++ b/docs/subsystems/jobs.i18n.yaml @@ -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 jobs.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 docs/subsystems/jobs.md -jobs.md: 0d235c6101ff20c9ef530bc08efc98000ce05fd0 -jobs.zh.md: fbb650bbc10e4c35451b193cdf7317b28980752c +/background-job-runtime: + en: c2ca80844a3afaf3 + zh: a8b48d41aa75427a +/background-job-runtime/ids-and-status: + en: 529f401da4757a98 + zh: 041ff5e86b5dd8db +/background-job-runtime/producer-contract: + en: 2b9c087048b73091 + zh: 9d1ff560ce79c9b1 +/background-job-runtime/the-output-ring: + en: eee762c5ae896a2d + zh: 93984e2007381ae8 +/background-job-runtime/consumer-views: + en: 8923d586da35964e + zh: 85437e407856cd5f +/background-job-runtime/events: + en: 413216510fce678e + zh: 18efe733a0b35d0c +/background-job-runtime/service-behavior: + en: b4c51bdf4816f1ef + zh: c8f3e872dd988a7b diff --git a/docs/subsystems/llm-streaming.i18n.yaml b/docs/subsystems/llm-streaming.i18n.yaml index 2a34dc3c29..f64f41d29d 100644 --- a/docs/subsystems/llm-streaming.i18n.yaml +++ b/docs/subsystems/llm-streaming.i18n.yaml @@ -1,6 +1,49 @@ -# 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 llm-streaming.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 docs/subsystems/llm-streaming.md -llm-streaming.md: 6ff93698cb877591fb85bc1a05d1dabc95b6561b -llm-streaming.zh.md: 400fcd5a96de0097ec827055fe6f96fc3eef0846 +/llm-streaming: + en: 989057ec9786a505 + zh: 03e20367da473086 +/llm-streaming/content-blocks-and-messages: + en: b31628f3bdbf62cb + zh: 0e6eb420ae5c5a3f +/llm-streaming/streamchunk-the-raw-protocol: + en: a18fe401763efde4 + zh: ef59a76d9c694654 +/llm-streaming/compact-assistant-streams: + en: 4d0d51bc3c4cbc9b + zh: b5c386d8e995dd06 +/llm-streaming/llmfailure: + en: 13415501869b4ca9 + zh: 723c7533cce3d1d6 +/llm-streaming/request-image-pricing: + en: 10598e1a98262415 + zh: 7fb85b22174a1497 +/llm-streaming/the-adapter-contract: + en: f9dacddf34a48d66 + zh: 1a426c55909c081f +/llm-streaming/resolvedretrypolicy: + en: cbab49d689311d4d + zh: 76246140eabaa55e +/llm-streaming/appidentity-app-attribution: + en: 7ff4b18ef82a959d + zh: 8a40e6c7c57258a4 +/llm-streaming/tokenusage: + en: 33830f78fdb845fa + zh: f43a4502c4c3bfff +/llm-streaming/blockassembler: + en: 58dec2259b0b1c6f + zh: fc99fe965acaabf3 +/llm-streaming/the-model-request: + en: ddca84b082554567 + zh: 804ffb1cb0c94bfa +/llm-streaming/the-model-request/the-request-envelope-llmcallconfig-and-the-logged-header: + en: 8b6e6b65ccea943f + zh: bce1edd6386e37b1 +/llm-streaming/official-deepseek-request-extensions: + en: fcddc08940bcbeff + zh: cbde6a8fe00d402f +/llm-streaming/service-and-provider-contracts: + en: 8dc79d4cc82824c2 + zh: 3ebabd3a117ad717 diff --git a/docs/subsystems/lsp.i18n.yaml b/docs/subsystems/lsp.i18n.yaml index 91fd875375..cae4151b07 100644 --- a/docs/subsystems/lsp.i18n.yaml +++ b/docs/subsystems/lsp.i18n.yaml @@ -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 lsp.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 docs/subsystems/lsp.md -lsp.md: 5a8adb24c1768ac2a977b99f1ffb732610ccd911 -lsp.zh.md: e041217866b3469f6ad06fac9ad20289a6524eb3 +/lsp-navigation: + en: fa02506f51df9966 + zh: eaa24f7154cccb1a +/lsp-navigation/operations-and-coordinates: + en: 42204b23027154f4 + zh: 20f3db54da245f99 +/lsp-navigation/request: + en: 90429192a7758437 + zh: 36145358e1918c38 +/lsp-navigation/result: + en: d260facb7ad22440 + zh: f4868aae5be01eb6 +/lsp-navigation/provider-and-service: + en: 754b4f1a0c80e332 + zh: aaacbc912dd6337b diff --git a/docs/subsystems/mcp.i18n.yaml b/docs/subsystems/mcp.i18n.yaml index 72bcc075f6..2510f248ff 100644 --- a/docs/subsystems/mcp.i18n.yaml +++ b/docs/subsystems/mcp.i18n.yaml @@ -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 mcp.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 docs/subsystems/mcp.md -mcp.md: 809fea9bafb3db077bbd34959b6b2df8c6ca13fc -mcp.zh.md: b1e5fcb0e93631bc63a96faa5c0c3b8a9462b67c +/mcp: + en: 8e65e07d162dcc41 + zh: 5f4ae607cd468767 +/mcp/summary: + en: 7855928245a9ae43 + zh: 41a2e31cfe7c68c3 +/mcp/table-of-contents: + en: 5c0aa5a2e528af97 + zh: ae2ba2297294e3de +/mcp/configuration: + en: 2f81683ec4a5d00a + zh: 24d09bf8c02029da +/mcp/responsibilities-and-scope: + en: dd1323247f70625e + zh: 10a7eb288d7bd223 +/mcp/protocol-and-results: + en: 46e9b914f016b636 + zh: e1e9ee92a22f2562 +/mcp/resources-and-instructions: + en: df9cc13a5d6eb923 + zh: 3276d65c19d4c446 +/mcp/resource-provider-types: + en: 16ae356364b54262 + zh: 28fa0c87dbbd5e88 +/mcp/limits: + en: 27a59706525c88ed + zh: 1fb1684bc03bb6ae +/mcp/further-reading: + en: f63b120a0f4f9979 + zh: 524c191ba61b8802 diff --git a/docs/subsystems/office-to-pdf.i18n.yaml b/docs/subsystems/office-to-pdf.i18n.yaml index d6f78bacdb..9bb356202b 100644 --- a/docs/subsystems/office-to-pdf.i18n.yaml +++ b/docs/subsystems/office-to-pdf.i18n.yaml @@ -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 office-to-pdf.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 docs/subsystems/office-to-pdf.md -office-to-pdf.md: a01478df546a8873126abbf0efcfd19f9aeb2a09 -office-to-pdf.zh.md: b81468f13011a8aaa117ae866d17f6184c5902b2 +/office-to-pdf: + en: 9a24c6158f9fb214 + zh: 773155d0e59fffe2 +/office-to-pdf/ownership: + en: b21c1a3345590b3a + zh: d402b06930599e07 +/office-to-pdf/requests-and-results: + en: 8a1fa9eb6e82ef8f + zh: e263ca49c5c957d6 +/office-to-pdf/preview-reads: + en: 715105e6fff89e7c + zh: a7fe63c7dd0be17f +/office-to-pdf/engine-selection-and-limits: + en: 3d5104e712d1e7cf + zh: dd060ba4c4e99a45 diff --git a/docs/subsystems/permission-presets.i18n.yaml b/docs/subsystems/permission-presets.i18n.yaml index f735d8ebd1..08abc08e1f 100644 --- a/docs/subsystems/permission-presets.i18n.yaml +++ b/docs/subsystems/permission-presets.i18n.yaml @@ -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 permission-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 docs/subsystems/permission-presets.md -permission-presets.md: d843fab9493d9dda8fb21f8f859c4bac12dabdfd -permission-presets.zh.md: f310363cdda1899a972850df3bf4200693df42a5 +/permission-presets: + en: fa742ed576169157 + zh: 5af7ea95438908d7 +/permission-presets/the-preset-table: + en: a89ee42910e0c4c9 + zh: 5207c0de66e6e358 +/permission-presets/fixed-current-session-auto-registration: + en: d6b272474101109d + zh: a48dcec7a0e0ddb5 +/permission-presets/current-preset-and-the-derived-custom: + en: 1f32a35df085c708 + zh: d7c635ea6df5f56d +/permission-presets/switching-and-the-permission-preset-event: + en: 71924a3f5f717704 + zh: 0a7ecbbf8d801a32 diff --git a/docs/subsystems/persistence.i18n.yaml b/docs/subsystems/persistence.i18n.yaml index bddbecf1f1..e5c04a5931 100644 --- a/docs/subsystems/persistence.i18n.yaml +++ b/docs/subsystems/persistence.i18n.yaml @@ -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 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 docs/subsystems/persistence.md -persistence.md: 53a001f438793740a55acd5abf45536164e63031 -persistence.zh.md: 9f3c18a82885df51f62cb2d9cda901d483ffd65e +/session-persistence: + en: b3d66086d8863a84 + zh: dd532fd7c9947b35 +/session-persistence/sessionhandle-one-open-channel-onto-a-stored-session: + en: 283765de86ff454d + zh: ef8fcf55a3071243 +/session-persistence/the-flush-checkpoint: + en: a751d1952a47d938 + zh: f0ae8447fdc26dfb +/session-persistence/crash-recovery-preserves-an-interrupted-turn: + en: 534044a0ce482d52 + zh: d2e8a7dfeb066946 +/session-persistence/sessionlocation-refusal-diagnostics-artifact-target: + en: 886589f052a916d7 + zh: 2ca126aa700c933c +/session-persistence/sessionheader-metadata-beside-the-log: + en: 5795ae03d2d163cd + zh: a46ceeb22cfbb6a1 +/session-persistence/format-refusal-logs-a-build-cannot-faithfully-read: + en: fa822e9185bf758b + zh: 7fcdbe2f69f848b9 +/session-persistence/createsessionoptions-seeding-and-metadata: + en: 627c1f7798802ae7 + zh: ebfe7fb5a7f981b9 +/session-persistence/preparation-and-restoration-ownership: + en: 8a37d5ec058058e5 + zh: 9c54c2c06c167c0b +/session-persistence/lightweight-source-revisions: + en: 142ff3bed547efcf + zh: a73ca5ea4743d3e8 +/session-persistence/the-backend: + en: adcd78909565b046 + zh: a09bcb6ec0ebad9e diff --git a/docs/subsystems/plan.i18n.yaml b/docs/subsystems/plan.i18n.yaml index 61045910a2..df58df9e76 100644 --- a/docs/subsystems/plan.i18n.yaml +++ b/docs/subsystems/plan.i18n.yaml @@ -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 plan.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 docs/subsystems/plan.md -plan.md: 913a5acb45d0a0be684795cf1ff294ca9d464df1 -plan.zh.md: 98e926346b66a97695fae9516bd87818e764ba01 +/plan-mode: + en: d011d9b7480aa201 + zh: 7cb7854e45d486fa +/plan-mode/logged-state-and-recovery: + en: dd1e8ba31e6fd535 + zh: a22dbccc60c73bc9 +/plan-mode/pending-selections-and-the-pre-step-append: + en: 8d7e5b7824921ed5 + zh: 910fad43593f29f4 +/plan-mode/configuration: + en: ee04468005fae8e1 + zh: 1347d554102951f2 +/plan-mode/the-exit-tool-and-the-plan-command: + en: ecf7fe520658b10f + zh: 9d6d2c4729e9a47e +/plan-mode/the-service: + en: 07c3eec12e0dc75c + zh: 183d73f6672e2c5a diff --git a/docs/subsystems/product-telemetry.i18n.yaml b/docs/subsystems/product-telemetry.i18n.yaml index e5e8b34aea..bd22924083 100644 --- a/docs/subsystems/product-telemetry.i18n.yaml +++ b/docs/subsystems/product-telemetry.i18n.yaml @@ -1,6 +1,10 @@ -# 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 product-telemetry.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 docs/subsystems/product-telemetry.md -product-telemetry.md: d86540d5a2b75d84f11120b80b7d107788799238 -product-telemetry.zh.md: 52ad1193630fc67f87c9c710027fc1ec5a5db98a +/product-telemetry: + en: e1a8950c3b4743ed + zh: 3fff7e01a8f271e1 +/product-telemetry/record-types: + en: bf5eadedbc896f5a + zh: 158fce1609a85d6d diff --git a/docs/subsystems/ptc-runtime.i18n.yaml b/docs/subsystems/ptc-runtime.i18n.yaml index 0e6f21ce73..4ad1978544 100644 --- a/docs/subsystems/ptc-runtime.i18n.yaml +++ b/docs/subsystems/ptc-runtime.i18n.yaml @@ -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 ptc-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 docs/subsystems/ptc-runtime.md -ptc-runtime.md: efab5bcefa0aaec50c29c73f981f6a6b717cd087 -ptc-runtime.zh.md: f35c5bd84d79ddaccc40653707d792f5672e73d9 +/ptc-runtime: + en: 337a6580d7571274 + zh: f4ae98899120d122 +/ptc-runtime/the-run-request-in-result-out: + en: b11e176bee0ca6bd + zh: 843d5d70c58dec42 +/ptc-runtime/bindings-host-functions-as-program-globals: + en: 182147ddf388c600 + zh: c0a7d77602c78bcd +/ptc-runtime/captured-output-and-the-failure-taxonomy: + en: e5431173436c00c2 + zh: 4ba58e259bbadbc8 +/ptc-runtime/the-service: + en: a82f828fa006c7e9 + zh: 2279d36867335b57 diff --git a/docs/subsystems/sandbox.i18n.yaml b/docs/subsystems/sandbox.i18n.yaml index c8eeb0c0bb..c521840364 100644 --- a/docs/subsystems/sandbox.i18n.yaml +++ b/docs/subsystems/sandbox.i18n.yaml @@ -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: -# pnpm run verify-translation-pairing --write docs//subsystems//sandbox.md -sandbox.md: 05be79018f60e1e6af964449756322d283048c0d -sandbox.zh.md: 843be48f65ebe47b6c3307f5914ea011191e0bcb +# Bilingual-pair consistency record for sandbox.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 docs/subsystems/sandbox.md +/process-sandbox: + en: e0d4876306b192c3 + zh: 63baaa0c79e87deb +/process-sandbox/modes-and-enforcement: + en: 11f91b55cc317334 + zh: 296678c4675864c1 +/process-sandbox/per-call-policy: + en: 7661eb4559bbc395 + zh: 0dceeb0bba367862 +/process-sandbox/wrapped-argv-and-classification-dialects: + en: 2ba8930762e92e40 + zh: 220f64da1a9e5d57 +/process-sandbox/provider-and-fail-closed-errors: + en: a90a38fe4b11737c + zh: 2397768e48712617 diff --git a/docs/subsystems/schedule.i18n.yaml b/docs/subsystems/schedule.i18n.yaml index 58c4a9363b..f73b0b4513 100644 --- a/docs/subsystems/schedule.i18n.yaml +++ b/docs/subsystems/schedule.i18n.yaml @@ -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 schedule.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 docs/subsystems/schedule.md -schedule.md: b92b81c6f24773b8cbafea5fccd7ac16df07ccd3 -schedule.zh.md: a3e6a4e5f82223526f0ec84e60e5c752e6f65f9a +/session-local-schedule: + en: d9c45890973c8312 + zh: dc24bdb262b521c8 +/session-local-schedule/durable-records: + en: 65b12288096cbacb + zh: 50a39aaf9fd16b76 +/session-local-schedule/absolute-time-input: + en: 831be0104c9a76ab + zh: f95f1791a918e272 +/session-local-schedule/fixed-rate-input-and-catch-up: + en: 071aa73c5c4ca8cd + zh: 34f4ea9a0d0e3f90 +/session-local-schedule/durable-changes-and-replay: + en: cc9573bae1cabf26 + zh: 9d32f9efcbb7b3c1 +/session-local-schedule/active-views-and-management: + en: 057d439bc9263d02 + zh: 9a675fd7fecf4e45 +/session-local-schedule/read-only-web-catalog: + en: 3bfdb5370bd16560 + zh: 5176c01962819f0f +/session-local-schedule/live-delivery: + en: 95a78df72f98f9b8 + zh: ffaa6f163cdf9034 diff --git a/docs/subsystems/scope.i18n.yaml b/docs/subsystems/scope.i18n.yaml index 57127065bc..0db81be24d 100644 --- a/docs/subsystems/scope.i18n.yaml +++ b/docs/subsystems/scope.i18n.yaml @@ -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 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 docs/subsystems/scope.md -scope.md: 1ed297f7ae8bec2b850ee2110cd689751e287cf6 -scope.zh.md: 3633c99003d3c47cb02c04313fd6dd1a5208ddfc +/scoped-registration: + en: ebcefe4dd75f9a9c + zh: e7a4edad80d59002 +/scoped-registration/identity-and-dispatch-carrier: + en: f4e1bdd96c43a845 + zh: c74409f7f81bd0e0 +/scoped-registration/owned-registration-context: + en: 7908e0caa7acf71f + zh: 2979adca7cf33912 +/scoped-registration/scoped-registry-layer: + en: 19c3ed72868597e5 + zh: 6dbb5327817e0118 diff --git a/docs/subsystems/session-projection.i18n.yaml b/docs/subsystems/session-projection.i18n.yaml index cc738c4fcb..8d53d7ed36 100644 --- a/docs/subsystems/session-projection.i18n.yaml +++ b/docs/subsystems/session-projection.i18n.yaml @@ -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 session-projection.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 docs/subsystems/session-projection.md -session-projection.md: 8580b94c4d7dd36f942ff10d77e13d2dc70b7e8b -session-projection.zh.md: b98d348a36c51aab973bc3397ddbf744860245a4 +/session-projections: + en: a6ab5134ca1771fd + zh: 523039a9d84e3f97 +/session-projections/the-unit: + en: fad897af8b8839ff + zh: 3c68c5256973bc39 +/session-projections/the-snapshot-and-the-change-feed: + en: a49a57c600c3cbd0 + zh: c92f00b8a9d71bad +/session-projections/the-registry-ctx-sessionprojections: + en: 50e79c1bc16abb63 + zh: 200ecbf0e4ab19d2 diff --git a/docs/subsystems/session-query.i18n.yaml b/docs/subsystems/session-query.i18n.yaml index 5371ae0b34..82f33d3678 100644 --- a/docs/subsystems/session-query.i18n.yaml +++ b/docs/subsystems/session-query.i18n.yaml @@ -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 session-query.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 docs/subsystems/session-query.md -session-query.md: 1cf3dff325db76485a0afca4ca1a882a4ff175b8 -session-query.zh.md: 2b8504dfb9ec8ee25d925135dbc99fa7beaede98 +/session-query: + en: 041684440d88fbbc + zh: 376e7f0b173b238d +/session-query/logical-records: + en: 839a70b2761c16f1 + zh: 883277abce68c750 +/session-query/provider-independent-filters-and-documents: + en: a1818c567b28613c + zh: 5dd442cf5ce0438e +/session-query/full-text-search-pages: + en: 192dc8ec7f3a9d28 + zh: c18aef45c61610b9 +/session-query/session-lineage: + en: c4b3e9e77a1b07d8 + zh: e510802ab034ceac +/session-query/bounded-event-reads: + en: 2f4a5fa959be3554 + zh: 3590a7f6aeeb7e02 +/session-query/event-relationships: + en: 2ec376e3a10ee5fa + zh: 3a7706de112f6e17 +/session-query/errors: + en: 34e775125232d999 + zh: 0c5c608760c4865d diff --git a/docs/subsystems/session-reference.i18n.yaml b/docs/subsystems/session-reference.i18n.yaml index 73cb7b9c29..19b0e624ce 100644 --- a/docs/subsystems/session-reference.i18n.yaml +++ b/docs/subsystems/session-reference.i18n.yaml @@ -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 session-reference.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 docs/subsystems/session-reference.md -session-reference.md: a2567a6cc3f6dde9a32db770a3a5f65c35ada219 -session-reference.zh.md: 43cd567aaa94cf4f54cd286c1dfc29d6a913b3e4 +/session-references: + en: 93adc903a71245f0 + zh: 5222fc148480de3e +/session-references/file-candidates: + en: ec03370596bf2322 + zh: 85cf6439dc6484b3 +/session-references/inputs-and-candidates: + en: f9b6c0e14246cec7 + zh: 4d43ed22592ba306 +/session-references/prepared-messages: + en: e3e21e0dd9b27a7b + zh: 9205aaea5a542517 +/session-references/errors: + en: cc26522ead0db644 + zh: 4feb52922782edbd diff --git a/docs/subsystems/session-telemetry.i18n.yaml b/docs/subsystems/session-telemetry.i18n.yaml index c8b935f67b..b2c2f42fb9 100644 --- a/docs/subsystems/session-telemetry.i18n.yaml +++ b/docs/subsystems/session-telemetry.i18n.yaml @@ -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 session-telemetry.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 docs/subsystems/session-telemetry.md -session-telemetry.md: 18fe935e5e02b7fb26bb9120b031a4685ca603aa -session-telemetry.zh.md: 1b3807d2e38bea141953faba990a6fee460b40b9 +/sessiontelemetrybackend: + en: d400c8668cd76829 + zh: 67689676c19daa7f +/sessiontelemetrybackend/the-logical-record: + en: 9695489076496a76 + zh: 457c54698bc38c2f +/sessiontelemetrybackend/the-sharing-disclosure: + en: d74b6cd7635d230a + zh: 3beb7dbf28d83aa6 +/sessiontelemetrybackend/capture-policy: + en: 5a52371437ac4261 + zh: 00fdd38d2e08346e +/sessiontelemetrybackend/the-backend-contract: + en: 6d4467aeab2822be + zh: 6a874e8014c34683 +/sessiontelemetrybackend/the-redact-waterfall-session-telemetry-record: + en: 15bd0919a8d4cea0 + zh: 1ddaa1e8d84db66b diff --git a/docs/subsystems/session-title.i18n.yaml b/docs/subsystems/session-title.i18n.yaml index 623eaac62f..1ca280db5c 100644 --- a/docs/subsystems/session-title.i18n.yaml +++ b/docs/subsystems/session-title.i18n.yaml @@ -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 session-title.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 docs/subsystems/session-title.md -session-title.md: 75e17f06d73e6d51db51961327f8f34f0d5e5dd5 -session-title.zh.md: 187dad8f3a8cdaef14b450635f1f308fb2b429be +/session-titles: + en: a0ad8d5f000e5258 + zh: 9527bc25711342de +/session-titles/durable-title-state: + en: c6be2d86647daa6f + zh: fb259d9fb4738f39 +/session-titles/auxiliary-request-record: + en: 4942bec7a7d1d9de + zh: 9edfc1c908577c37 +/session-titles/provider-input-and-output: + en: 886e036e442ae06a + zh: 49f95782b8aa9bf3 diff --git a/docs/subsystems/session.i18n.yaml b/docs/subsystems/session.i18n.yaml index 6f335e3f14..d7a28c8d0b 100644 --- a/docs/subsystems/session.i18n.yaml +++ b/docs/subsystems/session.i18n.yaml @@ -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 session.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 docs/subsystems/session.md -session.md: e55ebf703c5bd256198687b868831f1741c30906 -session.zh.md: 4143f2366c3b69395b72e70afa1552245337f8de +/sessions: + en: 28fb7eb8f758fdf0 + zh: a36d6f03e331ad86 +/sessions/sessioneventmap-the-event-vocabulary: + en: 541354f6468e117d + zh: 2d7a665bad828a02 +/sessions/sessioneventmap-the-event-vocabulary/the-request-header-event-request-header: + en: ab34605472a45b68 + zh: bfd04649c552cebd +/sessions/sessioneventmap-the-event-vocabulary/the-route-capacity-event-request-context: + en: e6bf2297344b77e3 + zh: f99beedebc892f6a +/sessions/sessionevent-t-one-log-entry: + en: 622d333d9d903795 + zh: fdc9ee663330f01e +/sessions/surface-types: + en: 55fa7be0643afc08 + zh: 0bc544886c68cdb3 +/sessions/surface-types/surfaceeventtype-the-message-producing-subset-of-event-types: + en: 2f1b6a16a4ee7cc1 + zh: 7f16b568c4aa940f +/sessions/surface-types/surfaceop-how-an-event-entered-the-surface: + en: 8fcc967516a13692 + zh: d3978d3b8d02c566 +/sessions/surface-types/surfaceintent-the-parameter-to-session-append: + en: c65cc976acad9005 + zh: 3efd10779881cba5 +/sessions/surface-types/plugin-owned-message-projections: + en: f1f73607d650620f + zh: b3ef72f19fb5ee3d +/sessions/surface-types/sessionsurface-the-live-readonly-surface-projection: + en: 350259099d8d60c9 + zh: 7b25db461748c04e +/sessions/surface-types/surfacefoldreplacement-and-surfacefoldresult-a-complete-surface-replay: + en: 13820e0611b2e141 + zh: 2aafb1e5e3dc42f6 +/sessions/session-public-api: + en: 04e9982948d9560d + zh: 221961cadebc6fb1 +/sessions/derived-history-derivemessages-and-deriveeventmessage: + en: 6e48ebd63b85f473 + zh: c8ab986e975bbce2 +/sessions/live-session-fork-api: + en: e779481af02174c6 + zh: 848a6a0a797c7d29 +/sessions/why-a-turn-ended-turnendreasonmap: + en: 966cc60273fb3911 + zh: de5123ea9dbb0df2 +/sessions/execution-enclosure-and-standalone-events: + en: 5d33a4901131123a + zh: c774d7d32cb2dcfe +/sessions/the-end-seed-boundary-session-end-seed: + en: 63b4059793255ca3 + zh: 6bc7891c320249f4 +/sessions/plugin-contributed-log-only-events: + en: 6b895a381f28a41c + zh: b2fe46ba9b5304c4 +/sessions/durability-contract: + en: 62e3e4fbcba292a3 + zh: cb6dcaf531621e85 +/sessions/remote-catalog-and-workspace-opening: + en: dd27307e0d7c893c + zh: b77d2a749b7b641c diff --git a/docs/subsystems/settings.i18n.yaml b/docs/subsystems/settings.i18n.yaml index 664f17aa15..49720a20aa 100644 --- a/docs/subsystems/settings.i18n.yaml +++ b/docs/subsystems/settings.i18n.yaml @@ -1,6 +1,13 @@ -# 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 settings.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 docs/subsystems/settings.md -settings.md: ff047b74149a8d7a1f4471843de82f5c45b7fa6b -settings.zh.md: cb2fbeb69444036875954001f464f5fdcd6646bb +/plugin-configuration-forms: + en: 74ad41299fc3ad10 + zh: 1c3f316e99e5ec8b +/plugin-configuration-forms/identity-and-values: + en: 7fabd502b5dcbe5b + zh: 5d7bfbc57f823719 +/plugin-configuration-forms/edits: + en: 1d97c98a8634bfe7 + zh: 70d6dbec0d9679c6 diff --git a/docs/subsystems/shell.i18n.yaml b/docs/subsystems/shell.i18n.yaml index ebf38519d4..207792b8e2 100644 --- a/docs/subsystems/shell.i18n.yaml +++ b/docs/subsystems/shell.i18n.yaml @@ -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 shell.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 docs/subsystems/shell.md -shell.md: ad7e7f12ac977d45de3b8ae621a6f848f3ae43b5 -shell.zh.md: f0e9bd6ea00629f406638b7031eb456e9bc951c2 +/shell-executor: + en: c9aba02120c42608 + zh: f76b6b9745015993 +/shell-executor/managed-shell-environment-namespace: + en: f04b6ee0f2ec23d5 + zh: 8c3104d8ce6c70e6 +/shell-executor/request-vs-spec-the-resolve-split: + en: a4f7d0ff18dce0c6 + zh: d956cc599948fae8 +/shell-executor/foreground-runs-shellrunresult: + en: 471d328907ef0761 + zh: d6b0b8e66e427394 +/shell-executor/file-sandbox-shellsandboxinfo: + en: d09036a8749423ce + zh: bba45a62001754ae +/shell-executor/background-processes-shellprocess: + en: e5530a4d2b8f3aa3 + zh: 72e4fd736c1a6d9d +/shell-executor/the-service: + en: b850ffb5f5b75ac6 + zh: 796e57ae77e0e41f diff --git a/docs/subsystems/sidebar-right.i18n.yaml b/docs/subsystems/sidebar-right.i18n.yaml index 07ae54182f..90bde18fbe 100644 --- a/docs/subsystems/sidebar-right.i18n.yaml +++ b/docs/subsystems/sidebar-right.i18n.yaml @@ -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 sidebar-right.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 docs/subsystems/sidebar-right.md -sidebar-right.md: 7ec6d931ef92a23cf5cbd647d97e03fb55c32f84 -sidebar-right.zh.md: 413ea2145de19738e939f24778da0765c7aa5424 +/right-sidebar: + en: e84f3719f0a99a63 + zh: 387656d860d3c2c4 +/right-sidebar/position-and-ownership: + en: 35e347438a6ea22f + zh: a33a57edd698a6ec +/right-sidebar/addresses: + en: 465f0c330fc1054b + zh: bd0b68a05790fff8 +/right-sidebar/tab-type-registration: + en: 1e01c817c5879c40 + zh: a79abd92ee4c8f85 +/right-sidebar/navigation-ctx-sidebarright: + en: a78d2265ade73602 + zh: d1a927f5e25db43e +/right-sidebar/slots-and-owner-props: + en: 45a42c40269a2f43 + zh: 8f9bfdacb43fe79a +/right-sidebar/document-renderers: + en: 2bf47a890fce175e + zh: 45f81c579b8939a8 +/right-sidebar/resource-model: + en: 2916306e6cb9282c + zh: cdec047989860202 +/right-sidebar/workspace-files: + en: 2b1b49dbba9cc9ee + zh: 13d2a45224743b37 +/right-sidebar/shipped-types: + en: 81cc0928abeff74b + zh: 370fcfd5bb350ed9 +/right-sidebar/not-built: + en: 65e86c293eb99242 + zh: 852dfe7713848453 diff --git a/docs/subsystems/skills.i18n.yaml b/docs/subsystems/skills.i18n.yaml index 482b0c83ae..503112592f 100644 --- a/docs/subsystems/skills.i18n.yaml +++ b/docs/subsystems/skills.i18n.yaml @@ -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 skills.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 docs/subsystems/skills.md -skills.md: 7e45418b8b63955619b1d964e0cfc40ee7264632 -skills.zh.md: ead07c09fe7174d960a36173d842c652fa544c07 +/skills: + en: dfadaef222efffb5 + zh: 309c88debfe92ce6 +/skills/provider-registry: + en: abe338b6c6d1ebd1 + zh: c604db2de10a23c4 +/skills/local-discovery-priority: + en: accf8ad4c73c41ad + zh: 141294fe8dab8ecf +/skills/skill-identity: + en: 61295a9cf1c51588 + zh: 1c4c1582688d2310 +/skills/summaries-candidates-and-complete-definitions: + en: 8819c25fac497a1f + zh: 5795f0d16f09750e +/skills/lookup-and-configuration: + en: e60215d73b0abe75 + zh: a086985044324141 +/skills/session-catalog-and-tool-contract: + en: 5d5c36b1843a9d7d + zh: cd92ab1545e65722 +/skills/browser-session-catalog: + en: 1209dc6ee65fd476 + zh: af3b7ef836564d05 diff --git a/docs/subsystems/slots.i18n.yaml b/docs/subsystems/slots.i18n.yaml index 6ed8670f5c..a78b1185a1 100644 --- a/docs/subsystems/slots.i18n.yaml +++ b/docs/subsystems/slots.i18n.yaml @@ -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 slots.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 docs/subsystems/slots.md -slots.md: bff31e47b3f1e0b36d373d271d166ec299d5cdb7 -slots.zh.md: 7b4201ea17906f12ce0afe1c4ce68ffaf12bcdcf +/web-client-slots: + en: bda026282132e290 + zh: 3e3faf96c72420d6 +/web-client-slots/declaration-and-lifecycle: + en: f2d2c0d3b8f14ec7 + zh: 441ed13ff3f81d2a +/web-client-slots/cardinality-and-scope: + en: 5b0ada069239576b + zh: 7e71ced7f17d78a6 +/web-client-slots/component-inputs: + en: 9cb70abb2e39b958 + zh: cd4b6f1705d90e17 +/web-client-slots/framework-provided-hooks: + en: 2fcfc55fbac80f72 + zh: ea3016f394c56b07 +/web-client-slots/developer-provided-injection: + en: 4fb5222bb2b064e7 + zh: b961f792052b4ce5 +/web-client-slots/current-hierarchy: + en: 8a4cc4b8608ce0f6 + zh: 21281dcf047503b2 +/web-client-slots/extension-rules: + en: b2cce357141883ee + zh: 278080a5fb941189 diff --git a/docs/subsystems/spill.i18n.yaml b/docs/subsystems/spill.i18n.yaml index 4b8990f98f..fbdb10f2c1 100644 --- a/docs/subsystems/spill.i18n.yaml +++ b/docs/subsystems/spill.i18n.yaml @@ -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 spill.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 docs/subsystems/spill.md -spill.md: 5a6eb91c8dc3932ab56bd7afc4a4cc60b509180d -spill.zh.md: 0eebf93d041a2689e17c70053d34b93b34b51c2f +/spill-storage: + en: 5bbcc1a88d71014d + zh: cfd2caf22147ad04 +/spill-storage/the-save-request: + en: 05dd1d013c45ee55 + zh: e2ba974827f47a54 +/spill-storage/the-result: + en: e806be024ff6281a + zh: d8b452b379d98d95 +/spill-storage/the-service: + en: d75a7c8d2c508cf4 + zh: 3e60cb048a22a288 diff --git a/docs/subsystems/ssh.i18n.yaml b/docs/subsystems/ssh.i18n.yaml index bc2ae1d070..1451fd22a2 100644 --- a/docs/subsystems/ssh.i18n.yaml +++ b/docs/subsystems/ssh.i18n.yaml @@ -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 ssh.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 docs/subsystems/ssh.md -ssh.md: 04480e6ec397490f2e61851c956b9d318c1ef54f -ssh.zh.md: 32d7c8b6c2936240b82b02de3a29adeda724171f +/ssh: + en: 847a37e7a77c8a3f + zh: 33f4de7837ec2faa +/ssh/execution-coordinates: + en: 77968e8be38ab9be + zh: f5bf0f62b32e45c7 +/ssh/transport-and-trust: + en: e807ecd0222acb80 + zh: b2077393b549a7fe +/ssh/process-lifetime-and-cancellation: + en: 3e29eb0f47ca4d21 + zh: 9d880e082d39577e +/ssh/composition-scope: + en: 13a012fde5c31dae + zh: 52ee73d3be07cec8 +/ssh/connection-api: + en: eae91ed9211f563b + zh: 78bebc76c4a82306 diff --git a/docs/subsystems/storage.i18n.yaml b/docs/subsystems/storage.i18n.yaml index a6b2bbd68e..632e0788df 100644 --- a/docs/subsystems/storage.i18n.yaml +++ b/docs/subsystems/storage.i18n.yaml @@ -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 storage.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 docs/subsystems/storage.md -storage.md: 03b0fa1c674064994039d37c4fec906dc45794b3 -storage.zh.md: ded8783fbfe7f0d7d8a846c7a66d780b48de1445 +/storage: + en: ca316310c10348c3 + zh: 066885a031d283cc +/storage/the-hub-ctx-storage: + en: b11e06e7c0e0fd13 + zh: 4585f26ff416cb41 +/storage/the-backend-contract: + en: 2316787902c6a94e + zh: e3bda06e1c33acac +/storage/declaring-a-domain: + en: 775cce941500f01f + zh: 78acbc67f48574cb +/storage/the-open-domain: + en: 2468b5df66c49b51 + zh: 1587f460e9769db2 +/storage/the-domain-facility-ctx-storagedomain: + en: deed74fcd4506ef4 + zh: 8e3e6e5d2dc2e989 +/storage/the-change-event-domain-changed: + en: 2488ccd675624561 + zh: 6db32b6c7715e428 diff --git a/docs/subsystems/subagent.i18n.yaml b/docs/subsystems/subagent.i18n.yaml index 805d66f003..2292347edc 100644 --- a/docs/subsystems/subagent.i18n.yaml +++ b/docs/subsystems/subagent.i18n.yaml @@ -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 subagent.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 docs/subsystems/subagent.md -subagent.md: 67f9bc31b46617ea2f7b1ec81bf8c52fd62720cb -subagent.zh.md: a69e032ed96a24a980badaf9e14d924311e1d175 +/subagent: + en: 4f8cfa6e59a1d98f + zh: bd2b2fbabd418018 +/subagent/two-kinds-of-capability-discovered-two-ways: + en: 7be7cbc224948ed1 + zh: 6da4f61394ed900e +/subagent/the-one-shot-start-request: + en: 37b7876d6f186642 + zh: 196a9df4fca5a4fd +/subagent/continuable-children-and-activations: + en: e011e4ac4227f4bc + zh: b15cf25f519a116c +/subagent/durable-enumeration-listchildren-listdescendants-and-their-entries: + en: 3ad5d3831d5c5a5a + zh: 26ca129a41ce7f77 +/subagent/the-terminal-result-subagentresult: + en: 6070effb5f84f701 + zh: 2b8a6980ceb0b7b2 +/subagent/a-one-shot-run-subagentrun: + en: 39df94dd1343ffde + zh: 047605d7f5ba91ae +/subagent/the-provider-contract-subagentprovider: + en: cb05cffdb837b7bc + zh: a53133845d673f0a +/subagent/in-process-backends-permission-depth-and-seed: + en: ed6e94b122384d85 + zh: 5961582674b6af69 diff --git a/docs/subsystems/subprocess.i18n.yaml b/docs/subsystems/subprocess.i18n.yaml index 1a43bee05a..ba8b49f385 100644 --- a/docs/subsystems/subprocess.i18n.yaml +++ b/docs/subsystems/subprocess.i18n.yaml @@ -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 subprocess.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 docs/subsystems/subprocess.md -subprocess.md: eeae0dece1868688502eb733d693bd398fb76658 -subprocess.zh.md: 471ac5c45e69323edd92688f9b2f77f158b18eae +/subprocess: + en: c69213d20e09877f + zh: d4a53675e93774d3 +/subprocess/executable-lookup: + en: be4ddc71906d893d + zh: 49823ef13713dea0 +/subprocess/managed-environment-namespace-and-captured-output: + en: 379561c465f061a2 + zh: 69f62888c5070a91 +/subprocess/node-shaped-stdio-dispositions: + en: f591b05b1c765670 + zh: e39f8bf1a6d02438 +/subprocess/the-fully-explicit-spawn-spec: + en: fbbe3aa52c088343 + zh: 1496fedd080593d3 +/subprocess/handles-streams-readers-and-managed-range-termination: + en: 664ba5f23b9da1d9 + zh: d3eb37a157e50728 +/subprocess/outcomes-carry-exit-facts-only: + en: b61bda6c2806b335 + zh: 0adcb61c5c2af380 +/subprocess/terminal-process-primitive: + en: c207221293cfe4d8 + zh: 3101c861eaa30d81 +/subprocess/service-behavior: + en: b567e801cc15900a + zh: a00bfeb94c34bdb2 diff --git a/docs/subsystems/system-prompt.i18n.yaml b/docs/subsystems/system-prompt.i18n.yaml index c4fb972a1d..e11fef3eb7 100644 --- a/docs/subsystems/system-prompt.i18n.yaml +++ b/docs/subsystems/system-prompt.i18n.yaml @@ -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 system-prompt.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 docs/subsystems/system-prompt.md -system-prompt.md: 898520e8fc88a9fafd8429723fc48bad3b4ba210 -system-prompt.zh.md: 82e557a309a48f546d7c7fa5a8c1097152b4d145 +/system-prompt-assembly: + en: 7ad02b2146520e7b + zh: 93cb93c7aa12ceb4 +/system-prompt-assembly/assembly-context: + en: 371539c21c1ffc45 + zh: ea429ea5a0c19215 +/system-prompt-assembly/tool-provider-result: + en: 89cb015bf2e3e7a5 + zh: b4340e853b34c777 +/system-prompt-assembly/prompt-sections: + en: e31de7452a4f1186 + zh: db697d4db7f88642 +/system-prompt-assembly/dynamic-prompt-context: + en: 043740c2cf02b0aa + zh: 5f0bca1306975c72 diff --git a/docs/subsystems/terminal.i18n.yaml b/docs/subsystems/terminal.i18n.yaml index 851d92fdb1..36a389d402 100644 --- a/docs/subsystems/terminal.i18n.yaml +++ b/docs/subsystems/terminal.i18n.yaml @@ -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 terminal.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 docs/subsystems/terminal.md -terminal.md: c1c78963e48f51014678e778bbdc5da530f453c6 -terminal.zh.md: e97e5771f5681ce98024394752405dca012b0a5e +/persistent-pty-sessions: + en: 5debd6ec3dc43d0b + zh: 716307c837310aaa +/persistent-pty-sessions/identity-and-readiness: + en: d2b0f4a2ea428e95 + zh: 732e30b50b24a1cd +/persistent-pty-sessions/backend-and-live-session: + en: 327d7a0e306ceb35 + zh: 3ad5ef2c23413cdd +/persistent-pty-sessions/send-and-retained-output: + en: c895ec190cf3e5d8 + zh: 6fc443e08946e17d +/persistent-pty-sessions/ownership-and-durability: + en: 5604e1d1c450882a + zh: b97d925978aad7e2 diff --git a/docs/subsystems/todo.i18n.yaml b/docs/subsystems/todo.i18n.yaml index 90a7b1cded..ff23d182e0 100644 --- a/docs/subsystems/todo.i18n.yaml +++ b/docs/subsystems/todo.i18n.yaml @@ -1,6 +1,13 @@ -# 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 todo.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 docs/subsystems/todo.md -todo.md: 70eca60ff484572b6c1a62737816504830623726 -todo.zh.md: 74f76f59b6cd132bb1c3722c7fef7f554554b242 +/todo: + en: 157e8c91aeaf9f64 + zh: c568d90eecee7b12 +/todo/todoitem-one-list-entry: + en: 3580467f183af02a + zh: e3fc7208b0c2ee59 +/todo/durable-event-and-invariant: + en: ae4046c1260671ae + zh: 4246b14e1965487f diff --git a/docs/subsystems/token-meter.i18n.yaml b/docs/subsystems/token-meter.i18n.yaml index 9c36d99ef5..1e666632b5 100644 --- a/docs/subsystems/token-meter.i18n.yaml +++ b/docs/subsystems/token-meter.i18n.yaml @@ -1,6 +1,13 @@ -# 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 token-meter.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 docs/subsystems/token-meter.md -token-meter.md: 8accb9cf9f0b97ee7684e327da336a31943ff49e -token-meter.zh.md: 6c149ec3f225a7012ca8d8d2312835663917b5d2 +/token-meter: + en: 7b81394f8688ad71 + zh: e38852d59e9793fd +/token-meter/tokenmeasurement: + en: 34853869e90adf31 + zh: 285010a2f695ca01 +/token-meter/tokensurfacenode: + en: e445d12b10f651d0 + zh: e93be5fb9da1da15 diff --git a/docs/subsystems/tools.i18n.yaml b/docs/subsystems/tools.i18n.yaml index a92be65b8d..83f05cc0f8 100644 --- a/docs/subsystems/tools.i18n.yaml +++ b/docs/subsystems/tools.i18n.yaml @@ -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 tools.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 docs/subsystems/tools.md -tools.md: 348cda65733b1bf60c5e6e44d14507b7c91ecbd6 -tools.zh.md: ae928e573fa4d914713357ca2de94470fc8a2c7c +/tools: + en: e3ecdbc9d7078226 + zh: 82d609bfd382311e +/tools/tooldefinition-a-registered-tool: + en: e5ebf149f6783674 + zh: 062aa8477376f953 +/tools/the-unified-json-value-schema-dsl: + en: 9ff354e00a1fbe91 + zh: b302216d889f9b58 +/tools/toolrestriction-one-scope-s-live-filter-over-what-it-inherits: + en: 8c3fc4ca26f7e314 + zh: 2e27263cb25243b9 +/tools/execution-extensible-waterfalls-plus-monotonic-policy: + en: 1ff922c9803d5456 + zh: 983d71cbbff7b702 +/tools/the-enforced-raw-json-schema-subset: + en: 28e354bfa2f9cebb + zh: be1f75abccf8afdf +/tools/tool-presentation-ui-vocabulary: + en: 078fac733842b847 + zh: e8bc6e56ad1932fe diff --git a/docs/subsystems/typert.i18n.yaml b/docs/subsystems/typert.i18n.yaml index e63a0fe9d5..a74d05084d 100644 --- a/docs/subsystems/typert.i18n.yaml +++ b/docs/subsystems/typert.i18n.yaml @@ -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 typert.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 docs/subsystems/typert.md -typert.md: db8b48945e2301e14d866b8a2e3df59c4ae408c9 -typert.zh.md: cdaee66201d0f27a5a18aa99cb1888438051e018 +/typert-remote-calls: + en: ccc2694e359c2333 + zh: cd68bf5e74e2d685 +/typert-remote-calls/lookup-and-context-declarations: + en: 8725fa62f36364d7 + zh: 0f2ff4bdf13ff55b +/typert-remote-calls/invocation-descriptors: + en: 6417ffb792fd5385 + zh: c012707075a0b21f +/typert-remote-calls/typert-registry: + en: 29f578ba733cfd5a + zh: c486ff4ac2d1e3b4 +/typert-remote-calls/host-gateway: + en: 90fab88fe51d17bb + zh: 2d4c3849cf2dc7d3 +/typert-remote-calls/consumer-remote: + en: 4836f8f44fef8fd3 + zh: 51f3ab2462a08ff4 diff --git a/docs/subsystems/user-questions.i18n.yaml b/docs/subsystems/user-questions.i18n.yaml index d3e6082375..2a04140f2c 100644 --- a/docs/subsystems/user-questions.i18n.yaml +++ b/docs/subsystems/user-questions.i18n.yaml @@ -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 user-questions.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 docs/subsystems/user-questions.md -user-questions.md: d6515464e562eb5b3d505fd3ff1dcb118c2a7ee3 -user-questions.zh.md: 87536c22ad717ee5c25f4846aee6bd6af6068e8d +/user-interaction: + en: bc5bf42af08a66aa + zh: a90222f49abd2d0c +/user-interaction/question-options: + en: 88cceb3cf383248e + zh: 8e1d2627823b1ffc +/user-interaction/presentation-intent: + en: aca3811ea3f0c2ef + zh: 91f93dc33d12e343 +/user-interaction/question-item: + en: 1ad4373e6fdfe4c7 + zh: efb8d41ebe7224f8 +/user-interaction/ask-request: + en: e10cf6c8c9c20962 + zh: 0b347b40c12b6b25 +/user-interaction/answer: + en: 4235b687a9975881 + zh: 350d000d4bfa7400 +/user-interaction/errors: + en: 33cc3bf5e352e223 + zh: 143279cc3f355453 diff --git a/docs/subsystems/voice-input.i18n.yaml b/docs/subsystems/voice-input.i18n.yaml index c26921adf8..5d8400aa8e 100644 --- a/docs/subsystems/voice-input.i18n.yaml +++ b/docs/subsystems/voice-input.i18n.yaml @@ -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 voice-input.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 docs/subsystems/voice-input.md -voice-input.md: 1d85e8226afddad187533cfe5b14b6750d46c158 -voice-input.zh.md: 78a70ab9c265df86c1d99aa863a4be0ae1abbd9e +/voice-input: + en: b21f58d0dcb90287 + zh: be60807d02623a87 +/voice-input/provider-selection: + en: 3a5ec4718b839349 + zh: a8448bd6064d4c81 +/voice-input/browser-and-host-ownership: + en: 404d67d8276522db + zh: f653397888d2e616 +/voice-input/preparation-and-settings: + en: 9350b2e58813262e + zh: c3b5e5cb100408af +/voice-input/design-rationale: + en: 604b86d95ac007b3 + zh: 472db5ba5905eddc diff --git a/docs/subsystems/web-client.i18n.yaml b/docs/subsystems/web-client.i18n.yaml index f89b3c13dc..a2a1ef534a 100644 --- a/docs/subsystems/web-client.i18n.yaml +++ b/docs/subsystems/web-client.i18n.yaml @@ -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 web-client.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 docs/subsystems/web-client.md -web-client.md: 80d233b634f57bb150d8eb6604428557e1e16033 -web-client.zh.md: f14cdbe9b1d5605b90bd595a384ef7ac9c0d7286 +/web-client-architecture: + en: b7d2de3798122a9e + zh: 62598228a4241d8c +/web-client-architecture/layers-and-ownership: + en: c0454bca818f86ee + zh: 427582150fd3b976 +/web-client-architecture/browser-boot: + en: 5ac7d3aed7bf273a + zh: e34869c8ad64052d +/web-client-architecture/remote-communication: + en: 426b09164210b77a + zh: ce576099ee668984 +/web-client-architecture/client-models: + en: 13be17c2a2790ae9 + zh: f5af715d0ae222be +/web-client-architecture/client-models/sessions: + en: e010ab37d059025f + zh: f857a2fc2720a28f +/web-client-architecture/client-models/workspaces: + en: c063711f8247c240 + zh: 5e54758bbaf1670c +/web-client-architecture/conversation-and-presentation: + en: a5fac31f9a3e6e97 + zh: 01d7c4e286921360 +/web-client-architecture/data-paths: + en: a254278432416473 + zh: 567c2d3c6a20b304 +/web-client-architecture/reconnection: + en: 478f461e261b1ca5 + zh: 626791d04656faee +/web-client-architecture/package-boundaries: + en: 3e64e8c28f0c4cb1 + zh: 47aa81c2ace5ba89 diff --git a/docs/subsystems/web-server.i18n.yaml b/docs/subsystems/web-server.i18n.yaml index 0024bc7600..b873980cb0 100644 --- a/docs/subsystems/web-server.i18n.yaml +++ b/docs/subsystems/web-server.i18n.yaml @@ -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 web-server.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 docs/subsystems/web-server.md -web-server.md: 7b4d3a17a66ce4c3736b6d5d3eadf887622057c0 -web-server.zh.md: 5a95bbaff4aae20c6df05529f4154e42ccefaa3d +/http-server: + en: 8ddf00047d960062 + zh: 79fa692e5c59e1c9 +/http-server/routes: + en: 940bc78642c990b0 + zh: 901d2ba7e354a766 +/http-server/config: + en: 30118110a0ea3702 + zh: 940f2b69d2dd54af +/http-server/the-service: + en: e304734ab2143438 + zh: 065f9c2acbbb07ca diff --git a/docs/subsystems/web.i18n.yaml b/docs/subsystems/web.i18n.yaml index 703280787a..cf15cdb4ba 100644 --- a/docs/subsystems/web.i18n.yaml +++ b/docs/subsystems/web.i18n.yaml @@ -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 web.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 docs/subsystems/web.md -web.md: fe6f1ca357eec19f55848ffbe54ed339eb638924 -web.zh.md: bef3803abcd9c23582ee94479c89a05c7e3943ef +/web-access: + en: f1a28f6a0c2e2a7a + zh: 8a6cdddde6d75acc +/web-access/why-one-capability-has-two-operations: + en: 380da3cd0aabd52b + zh: 1317c26089c3ab07 +/web-access/search-request-and-result: + en: 1ad94deb713024e2 + zh: 9d3df730fa99ad89 +/web-access/fetch-request-and-result: + en: b96bcdf42ced9eab + zh: aa927e2450238557 +/web-access/provider-availability: + en: 84e3d6fdb0b2a1d7 + zh: 6175a9d011152d3d +/web-access/fetch-network-policy: + en: 261fce9249be8b2b + zh: bf6abf77679aca6d +/web-access/errors: + en: b07c04f462b4a0d9 + zh: de5f09cd2fb0324c +/web-access/the-service: + en: c81fdcdfd6e22861 + zh: ac906c9148942041 diff --git a/docs/subsystems/webhook.i18n.yaml b/docs/subsystems/webhook.i18n.yaml index 4d91c674b9..3232039c4d 100644 --- a/docs/subsystems/webhook.i18n.yaml +++ b/docs/subsystems/webhook.i18n.yaml @@ -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 webhook.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 docs/subsystems/webhook.md -webhook.md: 5ca2b722e1e0201aa5fb618cdaae6e0dfb5783dd -webhook.zh.md: 2eadf03aa5f32ae6f384e6b32a95e67bc0fdab7e +/webhook-runtime: + en: a9237452c010af40 + zh: ce76dc8401ca88ee +/webhook-runtime/shared-values: + en: 99af66fb4c51ecf6 + zh: fa1f2e88c7b13e46 +/webhook-runtime/fire-and-forget-dispatch: + en: 0e62c74b195d1c74 + zh: d458f2b210daf6ac +/webhook-runtime/session-creation: + en: 2ccdbc45140f9c41 + zh: af509a7fb0f84e18 +/webhook-runtime/github-adapter: + en: ddb0522ef321a8c5 + zh: 6f08a99848facaf3 diff --git a/docs/subsystems/workflow.i18n.yaml b/docs/subsystems/workflow.i18n.yaml index 9ad1835079..fdd5f9c496 100644 --- a/docs/subsystems/workflow.i18n.yaml +++ b/docs/subsystems/workflow.i18n.yaml @@ -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 workflow.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 docs/subsystems/workflow.md -workflow.md: 8f56774699eebd5f0a287aee3fcd08eef82ec045 -workflow.zh.md: dd24f920f6e04ba9c8721235919962ce15f84a82 +/workflow: + en: ba4972edc6ffa75b + zh: cd93b733e5c524a6 +/workflow/the-start-request: + en: 6c8755833293a36c + zh: a0f061387fe0d3a6 +/workflow/the-workflow-s-identity-workflowmeta: + en: ab33fd965499d38c + zh: d32893a2a7edd7d6 +/workflow/the-terminal-result-workflowresult: + en: acaa0abbacaa752b + zh: c8588e520a56c851 +/workflow/a-live-run-workflowrun: + en: a86b204323005042 + zh: 82b691e28ed4dcd3 +/workflow/failure-discipline-workflowerror-fatal: + en: 4d390801bb07374c + zh: 1099f053c2ee26ec +/workflow/events: + en: de123821a128c1d1 + zh: e50bcaea2812575a +/workflow/durable-chat-records: + en: 59896f51d9696ffa + zh: a12b33117f60d1fe diff --git a/docs/subsystems/workspace.i18n.yaml b/docs/subsystems/workspace.i18n.yaml index 07d181bb30..9d4611a68a 100644 --- a/docs/subsystems/workspace.i18n.yaml +++ b/docs/subsystems/workspace.i18n.yaml @@ -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 workspace.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 docs/subsystems/workspace.md -workspace.md: 18c1bf3d8b3528a446c4193f33c405d6ae91b7e7 -workspace.zh.md: c2674737dbc68e994983ce88e7d38aad3e7672ee +/workspaces: + en: 183fd2f466e3279c + zh: 6e79009b7294c240 +/workspaces/identity: + en: d61a7e78bbc1fb56 + zh: 8397869f70cd5b28 +/workspaces/the-workspace-entity: + en: 697698bc46adc477 + zh: 73d073933ed68c53 +/workspaces/the-registry-ctx-workspaceregistry: + en: 7ba5b4e06c162bd6 + zh: f1dd7eacacd07e0b +/workspaces/default-workspace-initialization: + en: 9446b81370c5492f + zh: 92852f2999d766f2 +/workspaces/session-pinning: + en: 3f5ab940adbfab1e + zh: f759cd34e3b06ca1 +/workspaces/archive-admission: + en: f4ae8ce5eb2ef329 + zh: 333106e86263be40 +/workspaces/consumers: + en: 6b592294ff18b4d3 + zh: a48bec961b8182a9 diff --git a/docs/testing.i18n.yaml b/docs/testing.i18n.yaml index 583a4c1f73..2c9372e193 100644 --- a/docs/testing.i18n.yaml +++ b/docs/testing.i18n.yaml @@ -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 testing.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 docs/testing.md -testing.md: c726270b796f6de125a762436ccd5bc7c74ba3bc -testing.zh.md: 977960c76d6455389a4058ebac305e6690342278 +/testing-policy: + en: 0d7399a58529b9eb + zh: 7f445b06430f21a4 +/testing-policy/tiers: + en: 180c81863aa3f4dd + zh: ff3e96d3175c5cea +/testing-policy/how-specs-execute: + en: 298c13b105e86eae + zh: 4f1b0b7742fb7b49 +/testing-policy/the-with-key-policy-inference-is-cheap-here: + en: d555af53068bf523 + zh: ddc4265e5de5b3be +/testing-policy/prefer-the-real-implementation-over-a-mock: + en: 96a5bdcea4960b25 + zh: 98ad9d468e55a5ed +/testing-policy/verify-the-world-not-the-self-report: + en: e7cbafc4f96b72c2 + zh: 0c5a0aa2afd9a812 +/testing-policy/test-the-real-entry-path: + en: 002e4c4a1bcbef50 + zh: c3dd3820c0b2164f +/testing-policy/test-resolution-source-plane-only: + en: 8a142fe4cbd196d7 + zh: 0f8c682cd8c654de +/testing-policy/test-subprocess-launch-modes: + en: 5ea1c7ff7a9a5728 + zh: bbae70e0cd2d5cbf +/testing-policy/when-a-snapshot-test-is-required: + en: bc88377209d1077a + zh: 369a688d74a11df2 diff --git a/docs/tool-catalog.i18n.yaml b/docs/tool-catalog.i18n.yaml index 2b04d1eacd..eb3cee0809 100644 --- a/docs/tool-catalog.i18n.yaml +++ b/docs/tool-catalog.i18n.yaml @@ -1,6 +1,310 @@ -# 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 tool-catalog.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 docs/tool-catalog.md -tool-catalog.md: 3e4407192ee75b61537d9fd09f3d68381d1e803e -tool-catalog.zh.md: cf78ee4d4f0d8a8bdddbf4ad3987a18bd1f300d1 +/: + en: 0be8ffbf23193557 + zh: ce2c69aa86875171 +/tool-schema-catalog: + en: 6cc2cd9ced70bb09 + zh: 1c0e6cb4ba2ed637 +/tool-schema-catalog/tool-package-map: + en: dae063dda1a53c5a + zh: 19fc8498d0603265 +/tool-schema-catalog/deepseek-ai-dsh-plugin-manager: + en: e0143916bb634762 + zh: e0143916bb634762 +/tool-schema-catalog/deepseek-ai-dsh-plugin-manager/plugin-manager: + en: ab4d1e7f7aa435b5 + zh: 70af9245b9b98039 +/tool-schema-catalog/deepseek-ai-dsh-mcp-resources: + en: dd78bd55ec83a539 + zh: dd78bd55ec83a539 +/tool-schema-catalog/deepseek-ai-dsh-mcp-resources/list-mcp-resource-templates: + en: 96275ece9d040944 + zh: 1fa9744642601ece +/tool-schema-catalog/deepseek-ai-dsh-mcp-resources/list-mcp-resources: + en: bf4236607199d61e + zh: 82f4f749dcabc89f +/tool-schema-catalog/deepseek-ai-dsh-mcp-resources/read-mcp-resource: + en: 5d92c07fa062734f + zh: 2d6f0cb8116cf567 +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native: + en: 19e7df8d692b4375 + zh: 19e7df8d692b4375 +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-act: + en: c4b27bf62c534dcc + zh: 70c53824ed57ac23 +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-extract: + en: ec7462ab99848155 + zh: 632fe0249040708e +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-navigate: + en: ef97f063a037a006 + zh: 27727ccc908e007f +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-observe: + en: 2068f1baa0a59e1b + zh: 5743c7b33e2c5ccb +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-screenshot: + en: 4910ab327694ee97 + zh: 17e79e4366cb636d +/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-tabs: + en: 095b18f9376e073d + zh: abd8785f8acaa555 +/tool-schema-catalog/deepseek-ai-dsh-tool-ask-user: + en: e713a4a11a15d13c + zh: e713a4a11a15d13c +/tool-schema-catalog/deepseek-ai-dsh-tool-ask-user/ask-user-question: + en: 3d5e09e59e7d5274 + zh: 624c14da73524315 +/tool-schema-catalog/deepseek-ai-dsh-tools: + en: 76fbbf0fe38aef10 + zh: 76fbbf0fe38aef10 +/tool-schema-catalog/deepseek-ai-dsh-tools/run-code: + en: 8358b1f3dd09e202 + zh: 0dbce569ba4b4c76 +/tool-schema-catalog/deepseek-ai-dsh-plan-mode: + en: b500b530845e26a9 + zh: b500b530845e26a9 +/tool-schema-catalog/deepseek-ai-dsh-plan-mode/exit-plan-mode: + en: a4bf2ed3f9f55ff1 + zh: ce7b136d3ad3946a +/tool-schema-catalog/deepseek-ai-dsh-tool-bash: + en: 408ff0a5189bd7ec + zh: 408ff0a5189bd7ec +/tool-schema-catalog/deepseek-ai-dsh-tool-bash/bash: + en: 70add265cf4cfda5 + zh: 47c2e23d50557d10 +/tool-schema-catalog/deepseek-ai-dsh-tool-present: + en: f656575e6df094f6 + zh: f656575e6df094f6 +/tool-schema-catalog/deepseek-ai-dsh-tool-present/present: + en: 4af0d859e1d39dc5 + zh: 780e75b1b42a6410 +/tool-schema-catalog/deepseek-ai-dsh-tool-pwsh: + en: b222fc05f3f8ee4a + zh: b222fc05f3f8ee4a +/tool-schema-catalog/deepseek-ai-dsh-tool-pwsh/pwsh: + en: 775abe9511776e1d + zh: 76ae33dab0dd399a +/tool-schema-catalog/deepseek-ai-dsh-tool-cordis: + en: 76c7c62f9029b6f5 + zh: 76c7c62f9029b6f5 +/tool-schema-catalog/deepseek-ai-dsh-tool-cordis/cordis-inspect-list: + en: 594e5b42047969cc + zh: 72189ca21345c210 +/tool-schema-catalog/deepseek-ai-dsh-tool-cordis/cordis-inspect-query: + en: 8321129f661db9f7 + zh: 6d9c220c84d47b06 +/tool-schema-catalog/deepseek-ai-dsh-tool-bash-persistent: + en: bdd9e88c49029e05 + zh: bdd9e88c49029e05 +/tool-schema-catalog/deepseek-ai-dsh-tool-bash-persistent/bash: + en: 86421501a9d65ccc + zh: d1dc400507952331 +/tool-schema-catalog/deepseek-ai-dsh-tool-pwsh-persistent: + en: 40a053607298a4c5 + zh: 40a053607298a4c5 +/tool-schema-catalog/deepseek-ai-dsh-tool-pwsh-persistent/pwsh: + en: 214866b3419c8e12 + zh: c23368fc61772d52 +/tool-schema-catalog/deepseek-ai-dsh-tool-str-replace-editor: + en: 591f6e54dbbc38fe + zh: 591f6e54dbbc38fe +/tool-schema-catalog/deepseek-ai-dsh-tool-str-replace-editor/str-replace-editor: + en: 3d11196a13e69228 + zh: 56019c74cf0633cd +/tool-schema-catalog/deepseek-ai-dsh-tool-fs: + en: 07d595ce1f1a5184 + zh: 07d595ce1f1a5184 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs/edit: + en: 5b6a252adde51af6 + zh: 7aa172a5d8b9cbd2 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs/read: + en: 94bfc5b03c63baef + zh: 339338a0e74696c3 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs/read-image: + en: 4e82f36d958c9c1c + zh: 1f87182c327bec10 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs/write: + en: f80700c5d57e8d87 + zh: fb7cccbba0d8d486 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs-search: + en: 703fea005ce84c50 + zh: 703fea005ce84c50 +/tool-schema-catalog/deepseek-ai-dsh-tool-fs-search/glob: + en: 418d627507ddd693 + zh: 85f14b433c93efbe +/tool-schema-catalog/deepseek-ai-dsh-tool-fs-search/grep: + en: 224288aaf3fbd214 + zh: 9e39dadfaa3768e7 +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal: + en: 77501c1b592b6a88 + zh: 77501c1b592b6a88 +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-close: + en: 6d6e428c866ac6c1 + zh: 8033539fcdcb6e7b +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-list: + en: ae7d5bce32142aa5 + zh: e956a650a5bf294b +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-open: + en: c542bd7f7e872441 + zh: 14731de81780b518 +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-read: + en: 6a7491d2436e4404 + zh: 772ff408ec0a67e3 +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-send: + en: e24ca8735dd59adb + zh: 24f7140a0aed0968 +/tool-schema-catalog/deepseek-ai-dsh-tool-terminal/terminal-signal: + en: 36a7f502acf00049 + zh: 00b4567b534eb7b2 +/tool-schema-catalog/deepseek-ai-dsh-tool-goal: + en: 74fff3741e7c13de + zh: 74fff3741e7c13de +/tool-schema-catalog/deepseek-ai-dsh-tool-goal/create-goal: + en: b22408124a0a6f34 + zh: 7b3bf9ceb5d7f1dc +/tool-schema-catalog/deepseek-ai-dsh-tool-goal/get-goal: + en: 73ab2b24d4de682d + zh: 82c42a427774c67d +/tool-schema-catalog/deepseek-ai-dsh-tool-goal/update-goal: + en: a5ef842aa3d1109e + zh: 8f0a9135944e6f1d +/tool-schema-catalog/deepseek-ai-dsh-schedule: + en: 573da0cf49b1eed6 + zh: 573da0cf49b1eed6 +/tool-schema-catalog/deepseek-ai-dsh-schedule/schedule-create: + en: d9ff99ac30a603eb + zh: 15e658a8f7003e90 +/tool-schema-catalog/deepseek-ai-dsh-schedule/schedule-delete: + en: 8b37dec413d42cd7 + zh: 292685c19ab48260 +/tool-schema-catalog/deepseek-ai-dsh-schedule/schedule-list: + en: 3c18d46b1371641e + zh: 13f0d78532bdec8b +/tool-schema-catalog/deepseek-ai-dsh-tool-lsp: + en: 32982123b1f0e5bc + zh: 32982123b1f0e5bc +/tool-schema-catalog/deepseek-ai-dsh-tool-lsp/lsp: + en: 877f1dc0f69e2038 + zh: 2fa570020f87919c +/tool-schema-catalog/deepseek-ai-dsh-tool-ralph: + en: 45bd083870e2c92d + zh: 45bd083870e2c92d +/tool-schema-catalog/deepseek-ai-dsh-tool-ralph/ralph: + en: a14c562ee26ddfd8 + zh: caa6d1acf95a8199 +/tool-schema-catalog/deepseek-ai-dsh-tool-skill: + en: 927a5ac0974b7642 + zh: 927a5ac0974b7642 +/tool-schema-catalog/deepseek-ai-dsh-tool-skill/skill: + en: cd716dc11308817d + zh: 08b4ed76101642a2 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query: + en: eac1dff4b6d9e195 + zh: eac1dff4b6d9e195 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query/session-event-read: + en: 6687105065ac3a5f + zh: 48b2f4d38536e4c7 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query/session-event-search: + en: 41251b4cbe9af70d + zh: 8855a5f32b4720e5 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query/session-event-trace: + en: 14b5ec05fa8c0932 + zh: 3c85d44c13cc42c5 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query/session-search: + en: 8263202c97568fc3 + zh: 92067337294c7a00 +/tool-schema-catalog/deepseek-ai-dsh-tool-session-query/session-trace: + en: 22866623e207d94e + zh: 59f4f8eadcdba85c +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent: + en: 841abe0dd5913ea7 + zh: 841abe0dd5913ea7 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent/list-subagent-models: + en: c89084b31ffccbce + zh: d7b3b7000f2d2be9 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent/subagent: + en: df17e5091f9cdfc9 + zh: 3b31fe9df04242f2 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent-control: + en: ab82e130c3413f04 + zh: ab82e130c3413f04 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent-control/interrupt-agent: + en: 3eb5ac28342e354f + zh: 91ca5628d8e333f0 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent-control/list-agents: + en: e688153e9ba4a684 + zh: 56c36cb0140c9202 +/tool-schema-catalog/deepseek-ai-dsh-tool-subagent-control/send-message: + en: b4d8ffa51c3c9cce + zh: 32d5281b2dec0d81 +/tool-schema-catalog/deepseek-ai-dsh-tool-jobs: + en: 9be673b1604d0114 + zh: 9be673b1604d0114 +/tool-schema-catalog/deepseek-ai-dsh-tool-jobs/job-kill: + en: 39e53ddd7ea31c2d + zh: 16640c2952c263b6 +/tool-schema-catalog/deepseek-ai-dsh-tool-jobs/job-list: + en: 0c37fb1fed979d72 + zh: 5ea9d07f5a4a8a6c +/tool-schema-catalog/deepseek-ai-dsh-tool-jobs/job-output: + en: 2a1d3887688abd05 + zh: c1cafbabccc2e021 +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team: + en: 6b1106f417b50db6 + zh: 6b1106f417b50db6 +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/interrupt-agent: + en: c3c7af05ceb9f8c9 + zh: ec379e0b42110c6a +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/list-agents: + en: f9457f033f75f00a + zh: a2d60ec44118c34c +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/send-message: + en: e99455aec4656ff2 + zh: a8f88ec35cfe38b8 +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/spawn-teammate: + en: 02d6cc746e234b99 + zh: 49bc60ac098bca48 +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/team-task-create: + en: 91e84febe063c3bd + zh: 550555d0f44f603b +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/team-task-get: + en: 1c6ae0aba0b8041d + zh: f8d634387b74121d +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/team-task-list: + en: 2084d494aae8798a + zh: e4c136c91028a7b1 +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/team-task-update: + en: 2eac7360ba68b1bd + zh: b5d676bf288c245e +/tool-schema-catalog/deepseek-ai-dsh-experimental-tool-agent-team/wait-agent: + en: fbc4d75a9bcf6816 + zh: 672131ac2705f411 +/tool-schema-catalog/deepseek-ai-dsh-tool-todo: + en: dea62d26fb18ff68 + zh: dea62d26fb18ff68 +/tool-schema-catalog/deepseek-ai-dsh-tool-todo/todo-write: + en: 3e63adceedda7304 + zh: bc20a7b69ce2cddd +/tool-schema-catalog/deepseek-ai-dsh-tool-workflow: + en: bb38a9d29f46563c + zh: bb38a9d29f46563c +/tool-schema-catalog/deepseek-ai-dsh-tool-workflow/workflow: + en: 4ca5c5f9ebc188e5 + zh: 98bbc45e441019af +/tool-schema-catalog/deepseek-ai-dsh-tool-workspace-dependencies: + en: 96bffc40b80df4b8 + zh: 96bffc40b80df4b8 +/tool-schema-catalog/deepseek-ai-dsh-tool-workspace-dependencies/load-workspace-dependencies: + en: 77b88764ff3464e9 + zh: a9ca7eeb15ada747 +/tool-schema-catalog/deepseek-ai-dsh-tool-web: + en: 4b9918342d3aa931 + zh: 4b9918342d3aa931 +/tool-schema-catalog/deepseek-ai-dsh-tool-web/web-fetch: + en: 8673f203aea9bdf2 + zh: 4e17783ffdf34c83 +/tool-schema-catalog/deepseek-ai-dsh-tool-web/web-search: + en: 096d6a19c83af773 + zh: fa5213caf9401216 diff --git a/docs/tool-execution-pipeline.i18n.yaml b/docs/tool-execution-pipeline.i18n.yaml index ea1d2f38f9..7269b198f5 100644 --- a/docs/tool-execution-pipeline.i18n.yaml +++ b/docs/tool-execution-pipeline.i18n.yaml @@ -1,6 +1,10 @@ -# 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 tool-execution-pipeline.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 docs/tool-execution-pipeline.md -tool-execution-pipeline.md: 53b7481183145289d2b2a2502ef71b5a1b7a3796 -tool-execution-pipeline.zh.md: 89d2ba505e454c50a67095d10ef3014d26009e6c +/: + en: 41d772192075e133 + zh: 0eb190f00f396176 +/tool-execution-pipeline: + en: f2811b12640c6f8e + zh: 9e0323523dcbb04c diff --git a/docs/user/develop/basic/config.i18n.yaml b/docs/user/develop/basic/config.i18n.yaml index 67f04137b3..1e7f8f349f 100644 --- a/docs/user/develop/basic/config.i18n.yaml +++ b/docs/user/develop/basic/config.i18n.yaml @@ -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 config.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 docs/user/develop/basic/config.md -config.md: d935fc3f3b5b42c5b3fbd8d3b0d398a2608aead3 -config.zh.md: 642a413950e2d8deb8591bc688968607604c050d +/plugin-configuration: + en: f605e6e8021b82ba + zh: 3f33c4b0afb3f249 +/plugin-configuration/define-the-config-type: + en: a351a086d890f148 + zh: 385803dd9d671391 +/plugin-configuration/schema-validation: + en: 6a20f3351a1c3e47 + zh: b5ae56917fcbca2c +/plugin-configuration/design-principles: + en: 79717ddc9d714ad9 + zh: 67240f8382bbe783 +/plugin-configuration/design-principles/do-not-hardcode-tunable-values: + en: da67063750a52b55 + zh: bd2c5978e10b6f79 +/plugin-configuration/design-principles/fail-loudly-on-invalid-configuration: + en: 98a4ff7d959783bd + zh: cb1410360b03b7a7 +/plugin-configuration/work-with-hmr: + en: 939f750af6fefbd5 + zh: 94fbb3a0d761f098 +/plugin-configuration/next-steps: + en: 1151bb8b59577519 + zh: 47a95340df47d273 diff --git a/docs/user/develop/basic/index.i18n.yaml b/docs/user/develop/basic/index.i18n.yaml index 8af91e7ec7..090cf81119 100644 --- a/docs/user/develop/basic/index.i18n.yaml +++ b/docs/user/develop/basic/index.i18n.yaml @@ -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 index.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 docs/user/develop/basic/index.md -index.md: 08199624e638aaf4a36b04446c39c228b2af6025 -index.zh.md: 2ea894079ffb3c5b8c4563fd535fe6e654861b1b +/your-first-plugin: + en: 66684c875e13acbb + zh: 48b5444386cf714c +/your-first-plugin/create-a-local-project: + en: 2a9ff85da3a6ea8b + zh: 9ac5daf1dd3e3b95 +/your-first-plugin/what-is-a-plugin: + en: 0bca3ea987fecb61 + zh: b4d398b887da6648 +/your-first-plugin/create-the-plugin-file: + en: 80e4e9f139d4773e + zh: c045d63ec04a2f3d +/your-first-plugin/register-it-in-cordis-yml: + en: 216e79287d237f2a + zh: 16e5e8ad2b1b9263 +/your-first-plugin/automatic-cleanup: + en: 0a1486714b9d67d7 + zh: 544df97baa7a8c59 +/your-first-plugin/declare-dependencies: + en: da59e4c09e258f94 + zh: 1b3ef70741eccb31 +/your-first-plugin/three-plugin-forms: + en: 155369321743b317 + zh: e2e98be100be297b +/your-first-plugin/three-plugin-forms/object-form: + en: d674c416f5b0fd14 + zh: a2224f5fe6ceae73 +/your-first-plugin/three-plugin-forms/class-form: + en: 130f504f9ebacebd + zh: 4e91d3fa2555390d +/your-first-plugin/next-steps: + en: 9836e246d8279c8b + zh: 681475e2251ba006 diff --git a/docs/user/develop/basic/publish.i18n.yaml b/docs/user/develop/basic/publish.i18n.yaml index 88df3856da..cd28d10111 100644 --- a/docs/user/develop/basic/publish.i18n.yaml +++ b/docs/user/develop/basic/publish.i18n.yaml @@ -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 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 docs/user/develop/basic/publish.md -publish.md: b317943954972e63d0e4b741fb16d2fc19091f58 -publish.zh.md: b7864f7e7596681f48fc87590772841294d2a039 +/package-and-install-a-plugin: + en: 0958da34d1ea9b49 + zh: 66a024ba2f2faba2 +/package-and-install-a-plugin/two-concepts-two-manifests: + en: 341c334cee646f58 + zh: 1ac8f40609a71123 +/package-and-install-a-plugin/two-concepts-two-manifests/the-bundle-manifest: + en: 1c59ba70e2d643ea + zh: 403667f567bcc77c +/package-and-install-a-plugin/two-concepts-two-manifests/the-profile-manifest: + en: e2bd00d8de99da67 + zh: e70b17787bdb53a5 +/package-and-install-a-plugin/install-into-a-profile: + en: 78baf6471bd6e82b + zh: 0453a7d35fd57399 +/package-and-install-a-plugin/the-loading-order: + en: 41ea3455ac8c7635 + zh: 7fabf467485898a5 +/package-and-install-a-plugin/give-a-surface-bundle-its-own-command-line: + en: cda660c66cef28a6 + zh: 0dcad683c4521f50 +/package-and-install-a-plugin/installing-from-github-the-build-script-catch: + en: 974a37cd652bdfc0 + zh: db9dd766c8ad7182 +/package-and-install-a-plugin/next-steps: + en: 1914c4c5eeb1d913 + zh: 6f20168ebc196239 diff --git a/docs/user/develop/basic/tool.i18n.yaml b/docs/user/develop/basic/tool.i18n.yaml index 0c7c5bbc82..65cd78e694 100644 --- a/docs/user/develop/basic/tool.i18n.yaml +++ b/docs/user/develop/basic/tool.i18n.yaml @@ -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 tool.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 docs/user/develop/basic/tool.md -tool.md: aeed5cf0e742cdde33bdcb86bfac4de471ae2597 -tool.zh.md: 25538e42b7777fe3b05b361379a8bce70d6ec5f5 +/build-a-tool: + en: 7cc993f14da8bb11 + zh: 32cc4de7310ace97 +/build-a-tool/create-the-tool-plugin: + en: ee66fee86af58d93 + zh: ee7d157e69d01ae4 +/build-a-tool/run-and-call-the-tool: + en: 3bdae6640d729bfc + zh: d1e945ac53cbb467 +/build-a-tool/next-steps: + en: aba2c55a0ba557f9 + zh: d4615e9e57c540bd diff --git a/docs/user/develop/framework/events.i18n.yaml b/docs/user/develop/framework/events.i18n.yaml index 7c3c92b655..871dfbca64 100644 --- a/docs/user/develop/framework/events.i18n.yaml +++ b/docs/user/develop/framework/events.i18n.yaml @@ -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 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 docs/user/develop/framework/events.md -events.md: c8c1bc753a2353f735f3f0d56f1c7e7f37b5be6d -events.zh.md: 366c37ca4dc02a97d8ecb43d0425da141ec4253d +/event-system: + en: 325f3d8726f52d9b + zh: 059d0c424e70feb7 +/event-system/basic-use: + en: 0f77f08250cc0b09 + zh: 43c64f755c0de880 +/event-system/basic-use/listen-for-an-event: + en: 54c623cad1f04d3d + zh: 6c023e21df4cf6fd +/event-system/basic-use/emit-an-event: + en: 5038c270c7a28863 + zh: 01da169b2de7eed2 +/event-system/event-modes: + en: 95c09e39e3c07143 + zh: d8ac8b6b65f092eb +/event-system/event-modes/emit-broadcast: + en: 486df849733f05ff + zh: 1031ccfa266c13b7 +/event-system/event-modes/bail-short-circuit: + en: bae8dbcf78cb8217 + zh: 9310977dbfe6f197 +/event-system/event-modes/serial-ordered-execution: + en: f8937683891b0c88 + zh: 071feca4572f3f97 +/event-system/event-modes/waterfall-pipeline: + en: 64a336bbc72680a6 + zh: 22fe42401ccf3dae +/event-system/typed-events: + en: 18070de55501a230 + zh: 0a34d22dc2662599 +/event-system/cordis-events-and-session-records: + en: 93102b27250eea35 + zh: a97a0197f785a4aa +/event-system/event-listeners-are-effects: + en: b7cc96734661caef + zh: 442ec0da611cf644 +/event-system/example-logging-plugin: + en: 9a79302d8fbec77c + zh: 58db4d48c4189ecb +/event-system/next-steps: + en: 5f2a85db2ceb2c76 + zh: b2507ab4e5e4afbf diff --git a/docs/user/develop/framework/index.i18n.yaml b/docs/user/develop/framework/index.i18n.yaml index d11b3f2204..6c8253c025 100644 --- a/docs/user/develop/framework/index.i18n.yaml +++ b/docs/user/develop/framework/index.i18n.yaml @@ -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 index.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 docs/user/develop/framework/index.md -index.md: e0e9ef44c44c502f86cf1f682560bf72c4c71b13 -index.zh.md: 835fc0beeba5c1386347ec839e27474436ee54ca +/plugins-and-lifecycle: + en: bc1c66795191727b + zh: e0666a674ca9921c +/plugins-and-lifecycle/fiber-state-machine: + en: 66b51bb63094de1a + zh: 1d9f70611c9930ea +/plugins-and-lifecycle/dependency-driven-loading: + en: 726a61e5c20db20f + zh: bd935ca733c30a15 +/plugins-and-lifecycle/automatic-cleanup: + en: e9bcc83f7a752d13 + zh: c8df4bd5c23c8875 +/plugins-and-lifecycle/nested-contexts: + en: 2862ee99034d4423 + zh: 7180298e3eff6524 +/plugins-and-lifecycle/dispose-semantics: + en: 1d23337dbcc4ae61 + zh: ad003f8b5e325801 +/plugins-and-lifecycle/hot-replacement-hmr: + en: ca8495ec7369856c + zh: 54db7540aceb4b09 +/plugins-and-lifecycle/example-lifecycle: + en: e17160970571b690 + zh: e49149cd82e77801 +/plugins-and-lifecycle/next-steps: + en: c245d538e75eef67 + zh: 2e0ad34a2022aee3 diff --git a/docs/user/develop/framework/service.i18n.yaml b/docs/user/develop/framework/service.i18n.yaml index 46097d8361..49b1eec08e 100644 --- a/docs/user/develop/framework/service.i18n.yaml +++ b/docs/user/develop/framework/service.i18n.yaml @@ -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 service.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 docs/user/develop/framework/service.md -service.md: 1bcfe2e7690d9f93b871500660e0fbe1e3439b3f -service.zh.md: b275c3d200fb50b1fab0e762d0154477c7ca4447 +/services-and-dependencies: + en: 03fe9a674163a484 + zh: 45374665fa3bb8e3 +/services-and-dependencies/what-is-a-service: + en: fb06be7799d75fc0 + zh: a59fdde61e557b24 +/services-and-dependencies/consume-a-service: + en: 6655ebf5abce2a59 + zh: 0c91cac86768d63e +/services-and-dependencies/provide-a-service: + en: ed1d04f41f64b6ce + zh: e0ddcb48bf3207c1 +/services-and-dependencies/provide-a-service/extend-service: + en: 3de1c24498e2c62f + zh: 57836dc4fa8d5c9a +/services-and-dependencies/provide-a-service/declare-its-type: + en: fc1a29f46715ade5 + zh: b1edb281077df180 +/services-and-dependencies/dependency-behavior: + en: 6678917fe40eea55 + zh: 6227580b94a50855 +/services-and-dependencies/dependency-behavior/required-and-optional-dependencies: + en: 8a98845896146946 + zh: 2383ad4ba5d2943d +/services-and-dependencies/dependency-behavior/when-a-service-disappears: + en: 689e4b95dd320122 + zh: 674ffba2733ec745 +/services-and-dependencies/service-isolation: + en: cc4be89f19cb7615 + zh: e00e86a615f59003 +/services-and-dependencies/built-in-harness-services: + en: 07eb5bcc03955284 + zh: 5eec0f3c6e01c0f9 +/services-and-dependencies/next-steps: + en: 1537e6955eb02c62 + zh: 6430f34e63cfa533 diff --git a/docs/user/develop/practice/dynamic-cordis.i18n.yaml b/docs/user/develop/practice/dynamic-cordis.i18n.yaml index 56cfc3c65d..d571080577 100644 --- a/docs/user/develop/practice/dynamic-cordis.i18n.yaml +++ b/docs/user/develop/practice/dynamic-cordis.i18n.yaml @@ -1,6 +1,10 @@ -# 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 dynamic-cordis.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 docs/user/develop/practice/dynamic-cordis.md -dynamic-cordis.md: c9065027f3449355aa7a19e16672fa5812cab633 -dynamic-cordis.zh.md: 21d0a410d8e27931786a76b9383230a3d30004e5 +/configure-persistent-plugins-from-a-prompt: + en: 9503745724cbe962 + zh: 985513234a4eda31 +/configure-persistent-plugins-from-a-prompt/connect-an-mcp-server: + en: f9fefda94ba8a005 + zh: f1a9a977a0732fc0 diff --git a/docs/user/develop/practice/index.i18n.yaml b/docs/user/develop/practice/index.i18n.yaml index 6f854ca172..e5f5af3d06 100644 --- a/docs/user/develop/practice/index.i18n.yaml +++ b/docs/user/develop/practice/index.i18n.yaml @@ -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 index.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 docs/user/develop/practice/index.md -index.md: f7e10e14b78da0b2eb922ca0cafd3151d412efd1 -index.zh.md: 55ed3d3a93008f63a3e677de935c1de4be8872e5 +/three-role-capability-design: + en: 16d18db6160c9f61 + zh: 823ea7e889390fab +/three-role-capability-design/concept-reference: + en: 4e60abf663a9748f + zh: 3c80c65e519a51dd +/three-role-capability-design/bash-example: + en: 548526d726675a23 + zh: 51f065f8b23ea6f9 +/three-role-capability-design/benefits-of-the-split: + en: 026507583f272d46 + zh: db37713da87a0e0e +/three-role-capability-design/benefits-of-the-split/replace-providers: + en: 8f74a0bba164ce14 + zh: e1869cf9b4dd284c +/three-role-capability-design/benefits-of-the-split/evolve-independently: + en: bdf8329fe9d51537 + zh: 416b7d81d8d30881 +/three-role-capability-design/benefits-of-the-split/decouple-dependencies: + en: 068feeea47c2ab74 + zh: b53112b27f3bf82f +/three-role-capability-design/tutorial-develop-a-three-role-capability: + en: 7bd3c99c2cdb06ad + zh: 264d321e9fa35dd8 +/three-role-capability-design/tutorial-develop-a-three-role-capability/step-1-write-the-service-definition: + en: 3940ce7faa9e33d6 + zh: 71e5450d4f57e43a +/three-role-capability-design/tutorial-develop-a-three-role-capability/step-2-write-a-service-provider: + en: 187b9fd73900f8ea + zh: 19d29d3fd9cea71a +/three-role-capability-design/tutorial-develop-a-three-role-capability/step-3-write-a-consumer: + en: 604c3c3483a0db87 + zh: 3069257db64d921c +/three-role-capability-design/tutorial-develop-a-three-role-capability/compose-them-in-cordis-yml: + en: 7b5eae32911c61d3 + zh: 8a7a03df8294a8c9 +/three-role-capability-design/design-points: + en: 5822e06c2cfce8e1 + zh: aed13f901bb8891e +/three-role-capability-design/next-steps: + en: 27b5fd93b6ab9e75 + zh: 598c47f40a4ac25b diff --git a/docs/user/develop/practice/llm-adapter.i18n.yaml b/docs/user/develop/practice/llm-adapter.i18n.yaml index a77a7ed049..3bfd570184 100644 --- a/docs/user/develop/practice/llm-adapter.i18n.yaml +++ b/docs/user/develop/practice/llm-adapter.i18n.yaml @@ -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 llm-adapter.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 docs/user/develop/practice/llm-adapter.md -llm-adapter.md: 32e412b10ade376e88d23be4de8cb2de976706f0 -llm-adapter.zh.md: bfa9842ce583f0486aff6269ad78c1f465f43671 +/llm-adapters: + en: 3ed9fd352e2c3edd + zh: f575c12bb4409a7f +/llm-adapters/overview: + en: 613076de2e5c7c2d + zh: 9df5bf6bca93267f +/llm-adapters/minimal-implementation: + en: 2eeb1c65c2b1e67b + zh: 0dbee75ec52aa2d5 +/llm-adapters/streamchunk-protocol: + en: c5b80f3ab607300c + zh: 6d143add0d5fc44c +/llm-adapters/streamchunk-protocol/key-rules: + en: c0138e6ba95197fa + zh: fc1e2b8047e08d2a +/llm-adapters/generateoptions: + en: 5bdb364bd44239c4 + zh: ca0f2854069aa134 +/llm-adapters/register-an-adapter: + en: 8e0ac8990c049f29 + zh: f8c3de63ee4d6757 +/llm-adapters/use-it-from-cordis-yml: + en: b83c91da871dca8c + zh: d21046627e3cb0c4 +/llm-adapters/reference-implementations: + en: e05d4b0a901e8ef0 + zh: 9516cebb3e5c3692 +/llm-adapters/error-handling: + en: d54065c52caf7910 + zh: 79b3ebc22a38286d diff --git a/docs/user/guide/github-review.i18n.yaml b/docs/user/guide/github-review.i18n.yaml index 19c790a17d..c2c413d88c 100644 --- a/docs/user/guide/github-review.i18n.yaml +++ b/docs/user/guide/github-review.i18n.yaml @@ -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 github-review.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 docs/user/guide/github-review.md -github-review.md: 69c61df95ce7d461b8a120cf6ae4a568ce201f78 -github-review.zh.md: 114aa6546d2366cf34a4a2d3057e9a26e4c43c96 +/create-review-sessions-from-github-webhooks: + en: d7326712d79158d8 + zh: 02102a8b9e749928 +/create-review-sessions-from-github-webhooks/prerequisites: + en: 6784d85f90231608 + zh: 3e62e9cadfdc2c18 +/create-review-sessions-from-github-webhooks/start-dsh: + en: 5751931f5c89b1c0 + zh: 867950515a152d47 +/create-review-sessions-from-github-webhooks/expose-the-dedicated-endpoint: + en: f18a2969b3082da9 + zh: 87d3d0e58d25a62f +/create-review-sessions-from-github-webhooks/rule-behavior: + en: e90b3061a15fdedc + zh: a8e9549e732314f6 +/create-review-sessions-from-github-webhooks/programmatic-extensions: + en: d448fc3e440a0ec6 + zh: 18568898933ef054 +/create-review-sessions-from-github-webhooks/delivery-semantics: + en: 8d098eeb5a62a4ba + zh: cfc7f2759ebf129d diff --git a/docs/user/guide/index.i18n.yaml b/docs/user/guide/index.i18n.yaml index d8805d32de..618d4d762b 100644 --- a/docs/user/guide/index.i18n.yaml +++ b/docs/user/guide/index.i18n.yaml @@ -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 index.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 docs/user/guide/index.md -index.md: fb97f8cec837ecebc427f94ea5210b940d6fee75 -index.zh.md: 6cbfce0b884aee39d26797d38c78b33e05b71c63 +/use-the-web-ui: + en: 0c95e166d018a6e9 + zh: ffb65573f7af49e7 +/use-the-web-ui/configure-a-model: + en: 017967a6f7c60eeb + zh: 190c812bd8d8a338 +/use-the-web-ui/choose-a-workspace: + en: ed78cd0a583896ae + zh: d713d7a4b5f34e42 +/use-the-web-ui/run-a-task: + en: e1cb5a05bf6e109d + zh: 8b181b0fecbc0517 +/use-the-web-ui/continue: + en: 0e74e287e009b401 + zh: 932f5475154c202c diff --git a/docs/user/guide/mcp-memory.i18n.yaml b/docs/user/guide/mcp-memory.i18n.yaml index 7b8f1ec095..782070d64f 100644 --- a/docs/user/guide/mcp-memory.i18n.yaml +++ b/docs/user/guide/mcp-memory.i18n.yaml @@ -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 mcp-memory.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 docs/user/guide/mcp-memory.md -mcp-memory.md: 2bc3c6be49b78224932c66e7d0d832dcc026816b -mcp-memory.zh.md: 66dd3400b64e8534835b9b39121a0ff8b48af6a9 +/connect-a-third-party-memory-mcp-server: + en: afc73e9b4fb4108f + zh: c8a5a903adf8bcc5 +/connect-a-third-party-memory-mcp-server/what-dsh-does: + en: ea9b47af91d7c6d2 + zh: 7a592ba5461625e3 +/connect-a-third-party-memory-mcp-server/choose-one: + en: 257a536ce62bc959 + zh: 600ed7ccf29085e4 +/connect-a-third-party-memory-mcp-server/enable-one: + en: 4655ee4df53b3682 + zh: 344948464e64dc83 +/connect-a-third-party-memory-mcp-server/provider-setup: + en: ea88b3912a142edc + zh: aaccbb2fb9a851a4 +/connect-a-third-party-memory-mcp-server/provider-setup/memorix: + en: 59991df2616ac49c + zh: f1f99103e19b21a3 +/connect-a-third-party-memory-mcp-server/provider-setup/mcp-reference-memory: + en: 74653857786286ea + zh: 00df52de24d231a8 +/connect-a-third-party-memory-mcp-server/provider-setup/engram: + en: f45eb35678140a98 + zh: 192c7887fb6462e4 +/connect-a-third-party-memory-mcp-server/optional-shared-model-instruction: + en: 9ab6aa5481f8dc72 + zh: e1e196bf2704c259 +/connect-a-third-party-memory-mcp-server/verify-write-fresh-session-recall-and-use: + en: e869c2a95eff307a + zh: bfb26f6719c61c62 +/connect-a-third-party-memory-mcp-server/bring-another-mcp-server: + en: a64eb09726e63a83 + zh: 83838d5f27f51d22 diff --git a/docs/user/guide/network-proxy.i18n.yaml b/docs/user/guide/network-proxy.i18n.yaml index e66710fbe7..8cd4928c30 100644 --- a/docs/user/guide/network-proxy.i18n.yaml +++ b/docs/user/guide/network-proxy.i18n.yaml @@ -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 network-proxy.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 docs/user/guide/network-proxy.md -network-proxy.md: 78c0dad3635de5a7aa4d39d9616f7ca5eb25a11e -network-proxy.zh.md: 1743e06ea6be25b6c9d44308cf81f51fa94cb700 +/run-dsh-behind-a-network-proxy: + en: 7659888fbb3e2e0d + zh: 96c019583f5bf7ab +/run-dsh-behind-a-network-proxy/export-the-variables: + en: 6c92d33cc57ced2a + zh: 653b6ffeb4d102b0 +/run-dsh-behind-a-network-proxy/why-your-browser-is-proxied-but-your-terminal-is-not: + en: d565b202923482a1 + zh: 7eb5a36a3d7504d7 +/run-dsh-behind-a-network-proxy/choose-what-stays-direct: + en: 307f5b01e6e09661 + zh: 39eccb0287afc128 +/run-dsh-behind-a-network-proxy/limits-worth-knowing: + en: d0defd7e52100d1f + zh: 50f38176e16f55e4 +/run-dsh-behind-a-network-proxy/what-stays-direct: + en: 34b04f98af3e09ae + zh: 4c530b755b552942 +/run-dsh-behind-a-network-proxy/check-that-it-worked: + en: d7455972489f79a8 + zh: 1e7295e10a211769 diff --git a/docs/user/guide/providers.i18n.yaml b/docs/user/guide/providers.i18n.yaml index 7461948374..6f9b6e315e 100644 --- a/docs/user/guide/providers.i18n.yaml +++ b/docs/user/guide/providers.i18n.yaml @@ -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 providers.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 docs/user/guide/providers.md -providers.md: 773ff6722a8558720a458f7574940972cf976958 -providers.zh.md: 6d618ed1e9eec17e8c4a000d00cc6987d0a6af14 +/configure-models: + en: b1631dcf25e805a1 + zh: 8ded02e2ae87f00b +/configure-models/configure-deepseek: + en: 2c6b665adc256b4e + zh: 2240e4c1573ebe9c +/configure-models/add-a-third-party-provider: + en: 0fe5f88e692f618c + zh: 4f2e493818d8934f +/configure-models/add-a-custom-model-api: + en: 17867305a3e1b52a + zh: 876fedf1f6f563e4 +/configure-models/add-a-custom-model-api/discover-models: + en: 97318c5a115199ff + zh: 0c455e4232cf0265 +/configure-models/select-a-model: + en: 6a94264c99535caf + zh: f97bb0dc6a40c0d3 +/configure-models/advanced-configuration: + en: aaefe21c2fb77396 + zh: c02d1e2a6b2a1290 +/configure-models/advanced-configuration/image-input: + en: 75350cb615da03a4 + zh: 6f8b3510085e4ac4 +/configure-models/advanced-configuration/reasoning-effort: + en: f7581a0760fdfd2c + zh: dc6eaa16f74a0e9f +/configure-models/advanced-configuration/request-compatibility: + en: 6f52195d1502783e + zh: 34dbbeacb541afd4 +/configure-models/troubleshooting: + en: 0477cd6fa2772d6b + zh: 780619fe998bdef7 diff --git a/docs/user/guide/python-sdk.i18n.yaml b/docs/user/guide/python-sdk.i18n.yaml index 2cafd271b0..0e59fd82b2 100644 --- a/docs/user/guide/python-sdk.i18n.yaml +++ b/docs/user/guide/python-sdk.i18n.yaml @@ -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 python-sdk.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 docs/user/guide/python-sdk.md -python-sdk.md: a14d656171f37a7feea8c091741f2175f9617cd4 -python-sdk.zh.md: 0846ed95ef3a396b468b0f50bcc176c64a963850 +/get-started-with-the-python-sdk: + en: 97975036927be6e3 + zh: fe37c7bf8844277a +/get-started-with-the-python-sdk/prerequisites: + en: b5a921f7d6c4a420 + zh: ef51283857d18c64 +/get-started-with-the-python-sdk/install-the-sdk: + en: c2b15716ea155625 + zh: 0879be26f0afc452 +/get-started-with-the-python-sdk/run-the-checked-in-example: + en: 74e1866caf573e6a + zh: 7f034b6f81decf9d +/get-started-with-the-python-sdk/use-the-sdk-in-your-program: + en: d1e350be0ba38196 + zh: 893220ee7b12b12f +/get-started-with-the-python-sdk/install-or-define-plugins: + en: 592dd306b920cd83 + zh: 8c22110621c12ba5 +/get-started-with-the-python-sdk/install-or-define-plugins/opt-in-to-str-replace-editor: + en: c63ca1e3a99e6fe1 + zh: 2ceddea3f30d92d3 +/get-started-with-the-python-sdk/understand-the-minimal-profile: + en: a741bfb098e18d7b + zh: 318c82836bdc19bd diff --git a/docs/user/guide/schedule.i18n.yaml b/docs/user/guide/schedule.i18n.yaml index 9ca6e303d4..53d47f563d 100644 --- a/docs/user/guide/schedule.i18n.yaml +++ b/docs/user/guide/schedule.i18n.yaml @@ -1,6 +1,7 @@ -# 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 schedule.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 docs/user/guide/schedule.md -schedule.md: fdb4899925f34d6c58fa34cc6ee1e589b461c001 -schedule.zh.md: d5d134ed7ec53c61e7efdf5267f915fc26a427ff +/schedule-session-local-reminders: + en: 758fff68dae2823c + zh: eda1d8a529a97b5d diff --git a/docs/user/index.i18n.yaml b/docs/user/index.i18n.yaml index 30cbd0583b..7092b27888 100644 --- a/docs/user/index.i18n.yaml +++ b/docs/user/index.i18n.yaml @@ -1,6 +1,10 @@ -# 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 index.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 docs/user/index.md -index.md: 6b7f3f2e3f5a2cc0233ee4785d5495bf6369f025 -index.zh.md: 350185cc98d1cafdac26f48dc377384884eec284 +/: + en: dc6b778eb6f830d6 + zh: dc6b778eb6f830d6 +/deepseek-harness: + en: 3a39bd0977f30953 + zh: f8f5b9b5006bbe01 diff --git a/docs/web-styling.i18n.yaml b/docs/web-styling.i18n.yaml index 2b7ec7cafd..a9e67d1b3d 100644 --- a/docs/web-styling.i18n.yaml +++ b/docs/web-styling.i18n.yaml @@ -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 web-styling.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 docs/web-styling.md -web-styling.md: 1275dd7cc6f2441618ab571d180a9ccd97ca2d93 -web-styling.zh.md: 9f43829b3e2fed846584474b0fccac0d8c0e94b7 +/web-ui-style-reference: + en: aab8007f4e9287d7 + zh: 158960e753f32a91 +/web-ui-style-reference/ownership: + en: c544f3f3c66d036a + zh: 5438614729fb399d +/web-ui-style-reference/component-rules: + en: 4e4032b2c9cfdd79 + zh: 7a95a07d5d7c432d +/web-ui-style-reference/changing-the-system: + en: ca70c6f962c290c8 + zh: 800d8289116c1535 diff --git a/native/README.i18n.yaml b/native/README.i18n.yaml index 74db687acb..c21ae02a6d 100644 --- a/native/README.i18n.yaml +++ b/native/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/README.md -README.md: 100e25dbfa9f472cb6a5a93a719eb7e1be02d10e -README.zh.md: b1a66ac678334fd535951a7a0e4a921622b8ba51 +/native: + en: 3bd55efe1dcf04bf + zh: 9f97675df13f772b +/native/workspace-and-release-boundary: + en: f4671495c42b485f + zh: 91f78f3ca9e1274e diff --git a/native/system/README.i18n.yaml b/native/system/README.i18n.yaml index cf29dcd62d..01d6bb84aa 100644 --- a/native/system/README.i18n.yaml +++ b/native/system/README.i18n.yaml @@ -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 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 native/system/README.md -README.md: 5a01754cb96fabbdfd2dbf4f068f19addd7a2347 -README.zh.md: 27d0ca70e28e68e46cb121b8e6b63c56ba5c99d3 +/: + en: ed5e9f5d2671e1f4 + zh: 8fa84f8f1701ce80 +/deepseek-ai-node-addon-system: + en: 3a4e2480deeeb684 + zh: 601bdf2644a2e135 +/deepseek-ai-node-addon-system/summary: + en: 2f22378ed387874f + zh: 6b3dafd68b4e3a40 +/deepseek-ai-node-addon-system/table-of-contents: + en: 31582297cf197373 + zh: 18bf672282b2b9bf +/deepseek-ai-node-addon-system/use: + en: be1fc16b1df23ca7 + zh: 59f1492b03768f67 +/deepseek-ai-node-addon-system/support: + en: 1636635ae2ba7c2f + zh: 489c417969be91e6 +/deepseek-ai-node-addon-system/development: + en: 7a9f641c1342e76b + zh: c0bdfa33facc9f13 +/deepseek-ai-node-addon-system/development/dev-note: + en: 0a1253c6f7b5e8b9 + zh: e41c2f4a4edbf459 diff --git a/native/system/packages/darwin-arm64/README.i18n.yaml b/native/system/packages/darwin-arm64/README.i18n.yaml index cce14d5da1..4e39deaf0d 100644 --- a/native/system/packages/darwin-arm64/README.i18n.yaml +++ b/native/system/packages/darwin-arm64/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/system/packages/darwin-arm64/README.md -README.md: 71cfaacc9bc442341b3a9d57389c2cb1904fbb70 -README.zh.md: 5e54c8155009b98e3336ea612535ce08e56817ae +/: + en: 934850f4ff9f8858 + zh: 6910c34a221ae75e +/deepseek-ai-node-addon-system-darwin-arm64: + en: 8ab4b25ce5b7c52f + zh: c6d0455f66358390 diff --git a/native/system/packages/darwin-x64/README.i18n.yaml b/native/system/packages/darwin-x64/README.i18n.yaml index 0927bffcd1..d6c5a8bf7e 100644 --- a/native/system/packages/darwin-x64/README.i18n.yaml +++ b/native/system/packages/darwin-x64/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/system/packages/darwin-x64/README.md -README.md: 1740788eef943373591a895baeb7207635972a46 -README.zh.md: 88053b85150c94048a4ffc32b506d365ff13c15f +/: + en: eea1ca26631fd520 + zh: 2bfc70bdf169375d +/deepseek-ai-node-addon-system-darwin-x64: + en: d37ab2f1ae5abccf + zh: 85b8c7880c1a8dc1 diff --git a/native/system/packages/entry/README.i18n.yaml b/native/system/packages/entry/README.i18n.yaml index 796ea55afc..6d6e6f7682 100644 --- a/native/system/packages/entry/README.i18n.yaml +++ b/native/system/packages/entry/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/system/packages/entry/README.md -README.md: 0ffd2b38a78c562dad7c6760e8dbd79fbf8151c2 -README.zh.md: fd4f9acc56ed59d69309c5b9e8f9f6d6ce0ca926 +/: + en: 944c02a61291ff07 + zh: 7fd2384098ea4c7f +/deepseek-ai-node-addon-system: + en: f37a5c105b7db656 + zh: f2c57e01f3c91be0 diff --git a/native/system/packages/linux-arm64/README.i18n.yaml b/native/system/packages/linux-arm64/README.i18n.yaml index 2ffb6691d6..680eb3555d 100644 --- a/native/system/packages/linux-arm64/README.i18n.yaml +++ b/native/system/packages/linux-arm64/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/system/packages/linux-arm64/README.md -README.md: b1e97481a3f59b5b7cf85e6565cd3d078e42cd7f -README.zh.md: 68efb95c60f41b2b95d1e963d9b4f0c8c130a80c +/: + en: 942d2c5dd9dbc58f + zh: d30204e653a55bd4 +/deepseek-ai-node-addon-system-linux-arm64: + en: ff40f2ee61173e91 + zh: 076fcf1246428ecc diff --git a/native/system/packages/linux-x64/README.i18n.yaml b/native/system/packages/linux-x64/README.i18n.yaml index f9c7d17176..51a8c8626a 100644 --- a/native/system/packages/linux-x64/README.i18n.yaml +++ b/native/system/packages/linux-x64/README.i18n.yaml @@ -1,6 +1,10 @@ -# 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 native/system/packages/linux-x64/README.md -README.md: caebb5d8a888a69a952fc89afb3edfb8ece489fc -README.zh.md: bf5edf59222a5675dbaa63d02fcac115bec7b58d +/: + en: a608f9868192eed8 + zh: b386ab6917b2f987 +/deepseek-ai-node-addon-system-linux-x64: + en: 74489d6e9a034c1f + zh: 98aaa489ec70ef5c diff --git a/package.json b/package.json index 16cfb7af43..5b1270b94c 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,6 @@ "verify-translation-prompt": "tsx scripts/verify-translation-prompt.ts", "verify-translation-pairing": "tsx scripts/verify-translation-pairing.ts", "test:docs": "tsx scripts/run-gates.ts doc-quick", - "resolve-translation-pairing-conflicts": "tsx scripts/merge-translation-pairing.ts --resolve", "gen-translation-brief": "tsx scripts/gen-translation-brief.ts", "verify-doc-budgets": "tsx scripts/verify-doc-budgets.ts", "docs:dev": "pnpm --filter @deepseek-ai/website run dev", diff --git a/packages/README.i18n.yaml b/packages/README.i18n.yaml index df718ac1e0..a68d0e7d56 100644 --- a/packages/README.i18n.yaml +++ b/packages/README.i18n.yaml @@ -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 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 packages/README.md -README.md: 0ce8e9202763a2e974300b83239f02c256a2953e -README.zh.md: 8e0650d8f6b00112c4fdb4a4dbc11671a2b3f394 +/: + en: b2be0c61aa2780eb + zh: c308e935e481f211 +/packages: + en: 9f8cdc7bf95bed2b + zh: 9e25684a309f580a +/packages/summary: + en: 299fb58abec76411 + zh: e9fdd53d39b755de +/packages/table-of-contents: + en: ffc55792d6e922e1 + zh: 83bd759638857e2d +/packages/package-groups: + en: 9602bc97f4c13c51 + zh: 267f84da67b8c6fb +/packages/release-expectations: + en: 1ab880da3642bde1 + zh: 6e168322f026a9cf +/packages/dependencies: + en: 9576e7c486bf123f + zh: fedd18da3e27ad00 +/packages/package-readme-contracts: + en: b36505dacbfe2ea1 + zh: 51e25517fae092ba +/packages/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/acp/README.i18n.yaml b/packages/acp/README.i18n.yaml index 97256a76bf..295df1b257 100644 --- a/packages/acp/README.i18n.yaml +++ b/packages/acp/README.i18n.yaml @@ -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 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 packages/acp/README.md -README.md: 710a77335eec233c6fdef36091742fb61e95f30a -README.zh.md: a40fb43ef64a92a1467faf2cfeb9fd884e8890a1 +/: + en: 911abc3a94d688a1 + zh: 1d7f8c7aa14c5767 +/acp-agent-client-protocol-automation: + en: e260145826e27c15 + zh: a4bd9c26b6632ece +/acp-agent-client-protocol-automation/summary: + en: 10a6812f323c256c + zh: cea8fa5292019ac6 +/acp-agent-client-protocol-automation/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/acp-agent-client-protocol-automation/packages: + en: e8a1cf12592f3ad2 + zh: 7b7e193f18294750 +/acp-agent-client-protocol-automation/related-documentation: + en: 8a6902df545370aa + zh: 898a2886286b3b98 +/acp-agent-client-protocol-automation/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/acp/acp/README.i18n.yaml b/packages/acp/acp/README.i18n.yaml index 4cdb2df1ac..1b3bf620a1 100644 --- a/packages/acp/acp/README.i18n.yaml +++ b/packages/acp/acp/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/acp/acp/README.md -README.md: a30396733026108fdeaff67713fbe7aefb8c5101 -README.zh.md: 7f7f2f43ac6fa3059a6d5400e6c2c8d7227197d9 +/: + en: c2dc875f178f219b + zh: e1ebac19bf1c696d +/deepseek-ai-dsh-acp: + en: 5e36bdb5bef5842c + zh: 486621193ef243a8 +/deepseek-ai-dsh-acp/summary: + en: 59aff9dea7a075b1 + zh: c0f5734c5fd09126 +/deepseek-ai-dsh-acp/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-acp/use-this-package: + en: 014a5573a8c05663 + zh: e45302786655eea5 +/deepseek-ai-dsh-acp/use-this-package/when-to-choose-it: + en: c3f5f144daf83157 + zh: a65a64842fd35bef +/deepseek-ai-dsh-acp/use-this-package/minimal-configuration: + en: 320139cc5ebcf34a + zh: 89beb58d9a0511ba +/deepseek-ai-dsh-acp/use-this-package/start-a-server: + en: 4ed8e37834267edb + zh: a32d5dedb4e8e919 +/deepseek-ai-dsh-acp/use-this-package/protocol-contract: + en: 804b87d8ebed9f8d + zh: 1b0c1c7269cdf040 +/deepseek-ai-dsh-acp/understand-the-implementation: + en: ea8afe89dbdd1934 + zh: 6567979f92f34afd +/deepseek-ai-dsh-acp/understand-the-implementation/design-philosophy: + en: ad90a93d87b6caa4 + zh: d7e90af3ea7a678c +/deepseek-ai-dsh-acp/understand-the-implementation/source-map: + en: 837330574e01d196 + zh: 46f29717d175f7bb +/deepseek-ai-dsh-acp/understand-the-implementation/admission-and-prompt-settlement: + en: 6485d449b5945b4a + zh: 90e56a9b410c9c42 +/deepseek-ai-dsh-acp/understand-the-implementation/teardown-and-connection-ownership: + en: 7e2be6a9e211d4d6 + zh: 3ba8482d3231b9d0 +/deepseek-ai-dsh-acp/further-exploration: + en: 8238535f032b31c9 + zh: c97975bfaf6eac4f +/deepseek-ai-dsh-acp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-acp/model-experience/prompt-content: + en: 7fca865c9895801f + zh: 78a0ab12c0bb0499 +/deepseek-ai-dsh-acp/model-experience/prompt-content/what-the-model-sees: + en: e3adbb072da5ff1d + zh: 0af2105dd9e171d3 +/deepseek-ai-dsh-acp/model-experience/prompt-content/token-effect: + en: 93b8f76c67bef353 + zh: 354fa2dca0804f72 +/deepseek-ai-dsh-acp/model-experience/prompt-content/kv-cache-effect: + en: 54946b64b26a3171 + zh: 09550292ccfb36b0 +/deepseek-ai-dsh-acp/model-experience/permission-decisions: + en: 2e6d83c846a3a5e1 + zh: 8d4339c26f3d8f68 +/deepseek-ai-dsh-acp/model-experience/permission-decisions/what-the-model-sees: + en: 87b55e04137085c3 + zh: cdba4acf2e38b872 +/deepseek-ai-dsh-acp/model-experience/permission-decisions/token-effect: + en: bd0ded535cbedb19 + zh: 47bcaa76827f88f2 +/deepseek-ai-dsh-acp/model-experience/permission-decisions/kv-cache-effect: + en: 83120763a07c4b72 + zh: 6a1a181dc4da869d +/deepseek-ai-dsh-acp/known-limitations-and-deferred-work: + en: da83c6d3b9604f74 + zh: d93d6f6d418bebdc +/deepseek-ai-dsh-acp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/api/README.i18n.yaml b/packages/api/README.i18n.yaml index f2447b3546..7c3e86cc1c 100644 --- a/packages/api/README.i18n.yaml +++ b/packages/api/README.i18n.yaml @@ -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 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 packages/api/README.md -README.md: 691a56856d0fceb62d3b32c3d5af90dd0323983a -README.zh.md: 9303fbaae7b0f9a10880c18a7af79f1dffb3bdeb +/: + en: 97a0ed481b7db404 + zh: bb00e4c6df16ca10 +/api-remote-api-layers: + en: 71c07045cf5caa7c + zh: 4defca6805607434 +/api-remote-api-layers/summary: + en: ec34e12d173e7e6a + zh: 8ebcd87e658665c7 +/api-remote-api-layers/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/api-remote-api-layers/packages: + en: 9bf51a5550fd4853 + zh: 4d13dd77d86f7f97 +/api-remote-api-layers/related-documentation: + en: 507116ae09161df1 + zh: f5e538ac5fdaf454 +/api-remote-api-layers/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/api/account-controller/README.i18n.yaml b/packages/api/account-controller/README.i18n.yaml index ba715931d6..8f05a9b6c5 100644 --- a/packages/api/account-controller/README.i18n.yaml +++ b/packages/api/account-controller/README.i18n.yaml @@ -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 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 packages/api/account-controller/README.md -README.md: 3cc6a7d9bb090868189cb0901ecdeb7045808394 -README.zh.md: 3656b38149188924e7d71abceb52166a47033717 +/: + en: 7ba95936e0bd5c50 + zh: 6ded94fff9da8cbe +/deepseek-ai-dsh-api-account-controller: + en: 8a461bd0ed327ba1 + zh: 456b7cea744b1f3a +/deepseek-ai-dsh-api-account-controller/summary: + en: 76e317532dcd45a4 + zh: 4571ca03d06f04a1 +/deepseek-ai-dsh-api-account-controller/table-of-contents: + en: af856ba79fe31b8e + zh: 15b7d1a5d1856de2 +/deepseek-ai-dsh-api-account-controller/use-this-package: + en: 1cd6c99044a5e158 + zh: e8a73543a20bc596 +/deepseek-ai-dsh-api-account-controller/understand-the-implementation: + en: 3d899b3480391175 + zh: 803808ca9691366e +/deepseek-ai-dsh-api-account-controller/further-exploration: + en: e5d7405e19fb6d00 + zh: f92bdfe5247d758b +/deepseek-ai-dsh-api-account-controller/model-experience: + en: ee1df7ca3467ee3f + zh: 84904a5148da3862 +/deepseek-ai-dsh-api-account-controller/model-experience/kv-cache-effect: + en: ca3015e252db0114 + zh: ebca9253cf15e8e9 +/deepseek-ai-dsh-api-account-controller/known-limitations-and-deferred-work: + en: ae26f88d13444103 + zh: d875f0909e03e160 +/deepseek-ai-dsh-api-account-controller/known-limitations-and-deferred-work/dev-note: + en: 68dabcdc229fcb50 + zh: 85514a7f6087abc3 diff --git a/packages/api/gateway/README.i18n.yaml b/packages/api/gateway/README.i18n.yaml index b7daafd1e3..d9b3d2c90c 100644 --- a/packages/api/gateway/README.i18n.yaml +++ b/packages/api/gateway/README.i18n.yaml @@ -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 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 packages/api/gateway/README.md -README.md: e0c986e290b1744017fca99e3a2553a68d754ef6 -README.zh.md: 8be11a7c5aea1e299c4ca45cde4b1c9dfa08ec4b +/: + en: 6ffef394821a2841 + zh: 1410a5b46b97d9c7 +/deepseek-ai-dsh-api-gateway: + en: 7c37b852461967b9 + zh: c6f7a5be7225c73b +/deepseek-ai-dsh-api-gateway/summary: + en: 501e60ed5d702873 + zh: 031d5e35ef579337 +/deepseek-ai-dsh-api-gateway/table-of-contents: + en: d9859219cdb0f367 + zh: 2a3cfa8cb786e327 +/deepseek-ai-dsh-api-gateway/host-service-typertgatewayservice-ctx-key-typertgateway: + en: 65092c0f187de45c + zh: 453bbb826aa7c242 +/deepseek-ai-dsh-api-gateway/client-service-clientremote-ctx-key-remote: + en: c106f0ca3e547f84 + zh: 833e30d7151c41c7 +/deepseek-ai-dsh-api-gateway/model-experience: + en: 6cb309d3378f035d + zh: 998042a02ee32850 +/deepseek-ai-dsh-api-gateway/model-experience/kv-cache-effect: + en: af5abeee32f2d93b + zh: b320bb727a223a13 +/deepseek-ai-dsh-api-gateway/known-limitations-and-deferred-work: + en: 3ade2903f40a0a98 + zh: 9af1d557fefdbd89 +/deepseek-ai-dsh-api-gateway/known-limitations-and-deferred-work/dev-note: + en: 365f5c32056ff39a + zh: 9556fd36702f5ecd diff --git a/packages/api/job-controller/README.i18n.yaml b/packages/api/job-controller/README.i18n.yaml index de0779c23d..b89d3a11c2 100644 --- a/packages/api/job-controller/README.i18n.yaml +++ b/packages/api/job-controller/README.i18n.yaml @@ -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 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 packages/api/job-controller/README.md -README.md: ea343a8a201b50901af0033b39662fab4dd50555 -README.zh.md: ce8f166cec4e180e491cd48377f20db2e7177e75 +/: + en: f93b976ffb43210a + zh: a2959c2d0cee4154 +/job-controller: + en: a647945219b3ea55 + zh: 75a87645d584c0b2 +/job-controller/summary: + en: 54fd4daff976b0ee + zh: 1c12e12e265e8304 +/job-controller/table-of-contents: + en: 4e53164159b5ce41 + zh: 89582dc0294d0776 +/job-controller/use-this-package: + en: 11192d7e3d26b0d2 + zh: bdff631b0ae45ba0 +/job-controller/use-this-package/config: + en: e9099f7e4b35e24c + zh: e4069155f10b3b66 +/job-controller/model-experience: + en: 45162a45bf535f11 + zh: 3eeae8c7a02bbef5 +/job-controller/model-experience/kv-cache-effect: + en: e71bac9439326121 + zh: 9f1a50f452658818 +/job-controller/known-limitations-and-deferred-work: + en: c0f98753f7ba6b9b + zh: 4022148512051bfe +/job-controller/known-limitations-and-deferred-work/dev-note: + en: a1f297405fd3bf23 + zh: 7323c5216ec30800 diff --git a/packages/api/remotes/README.i18n.yaml b/packages/api/remotes/README.i18n.yaml index d422d3c9f0..850d57540a 100644 --- a/packages/api/remotes/README.i18n.yaml +++ b/packages/api/remotes/README.i18n.yaml @@ -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 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 packages/api/remotes/README.md -README.md: 493418fbceed15c96a5b0e6339e1114c715e9c89 -README.zh.md: 69190cf2ce318fea3dee7be20aef047ff999ef84 +/: + en: 1c32778606f3027a + zh: db7994fdb50333c8 +/deepseek-ai-dsh-api-remotes: + en: b5349178e12f23fe + zh: dfdb4de9d99fbc7b +/deepseek-ai-dsh-api-remotes/summary: + en: 3c54c157bb823fd0 + zh: 0db6778e94ae671c +/deepseek-ai-dsh-api-remotes/table-of-contents: + en: a7a78c6d1aeebeb3 + zh: 4bb69f32d8b05ba3 +/deepseek-ai-dsh-api-remotes/use-this-package: + en: a6229be20242889b + zh: 8d270ab676d44e21 +/deepseek-ai-dsh-api-remotes/forwarded-host-events: + en: 3a6f03172f88e970 + zh: 23cad6f60df8e4f2 +/deepseek-ai-dsh-api-remotes/build-boundary: + en: 7a9934a3ba5b185f + zh: 40457fd5707f57f0 +/deepseek-ai-dsh-api-remotes/model-experience: + en: 6a60ae036c71e76f + zh: bf5e86a5ac5b4be4 +/deepseek-ai-dsh-api-remotes/model-experience/kv-cache-effect: + en: 6b51b98ce6368599 + zh: 3d7a63126352741d +/deepseek-ai-dsh-api-remotes/known-limitations-and-deferred-work: + en: 00a837c9e7b5a800 + zh: 1b86e789327b7798 +/deepseek-ai-dsh-api-remotes/known-limitations-and-deferred-work/dev-note: + en: 947ba019d2a6a7e7 + zh: ad4d687f3bc77dbb diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index ca8f0a9d92..82df796f3f 100644 --- a/packages/api/session-controller/README.i18n.yaml +++ b/packages/api/session-controller/README.i18n.yaml @@ -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 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 packages/api/session-controller/README.md -README.md: 476eb9bb1acc356000380d0e4e50dfcc30c91f34 -README.zh.md: 91e563c3a833e3a2922b318e342f2de1f3a55cc2 +/: + en: 82789442228fc62a + zh: f1d511ad838187de +/session-controller: + en: fb78499ee63f41b9 + zh: 6fff916b1fa26314 +/session-controller/summary: + en: 4914824c347fdab5 + zh: 684a7b7fa970c39f +/session-controller/table-of-contents: + en: 1fdf707322fb6996 + zh: 0204f7e9d4aa3cce +/session-controller/use-this-package: + en: b1a66e01de414924 + zh: 7c01f66b94b01ff9 +/session-controller/client-references: + en: 41bdda1ac32df558 + zh: aa5d0e325924066b +/session-controller/session-media-references: + en: c7e6bbb57a4894b7 + zh: f66d79776a7e33ec +/session-controller/configuration: + en: 5c4c4224074e38a8 + zh: e0b0edac65c88ff4 +/session-controller/model-experience: + en: 30b917bf822bb4df + zh: b0b023b5b526c317 +/session-controller/model-experience/kv-cache-effect: + en: 22fc0c9dbedd3bb6 + zh: fad040ca55fd0e0a +/session-controller/known-limitations-and-deferred-work: + en: e896bfcaf38b4f6c + zh: 55a4eba838f166de +/session-controller/known-limitations-and-deferred-work/dev-note: + en: 68e0dfe4588c5b88 + zh: db51b435611bded1 diff --git a/packages/api/settings-controller/README.i18n.yaml b/packages/api/settings-controller/README.i18n.yaml index fa1046191e..8b39231902 100644 --- a/packages/api/settings-controller/README.i18n.yaml +++ b/packages/api/settings-controller/README.i18n.yaml @@ -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 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 packages/api/settings-controller/README.md -README.md: b7472f6b0f32eeb6d5f674da7187ae35f7d96936 -README.zh.md: 9159e1f1678ec9a3fc282986ee89141e55ff3b4c +/: + en: a3cc85cfbefc88fe + zh: 67550210b403fe0d +/settings-controller: + en: 7fecb4d8800e8f97 + zh: 3e2c3fdb29b73cd0 +/settings-controller/summary: + en: e5068267079e62d0 + zh: 9e2d663a6ca02c58 +/settings-controller/table-of-contents: + en: 3a654e12f423946b + zh: 4e3a19aaee58f8a7 +/settings-controller/use-this-package: + en: cf2f4de5bee8be55 + zh: b2630dcba4be5ae8 +/settings-controller/configuration: + en: e0297f144b649af7 + zh: e70ed56edffd97f0 +/settings-controller/model-experience: + en: 78e9a59c64ef808a + zh: 48b8b611da537891 +/settings-controller/model-experience/kv-cache-effect: + en: 740c7814748fc2d1 + zh: 0cff374d4e5272ff +/settings-controller/known-limitations-and-deferred-work: + en: a7475fd8aedf0830 + zh: add1adce9d320baa +/settings-controller/known-limitations-and-deferred-work/dev-note: + en: b684658b106c5d16 + zh: 1ba652cf16d8418b diff --git a/packages/api/terminal-controller/README.i18n.yaml b/packages/api/terminal-controller/README.i18n.yaml index 9cd90a2565..019535b653 100644 --- a/packages/api/terminal-controller/README.i18n.yaml +++ b/packages/api/terminal-controller/README.i18n.yaml @@ -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 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 packages/api/terminal-controller/README.md -README.md: dd93237a94f0cc9bdbd6e6d51f9a2762898399a7 -README.zh.md: b3bda5f4040ab6f9bb9cd74a8fd32f48dbdb1362 +/: + en: 6a19f6d3fdfe0db2 + zh: a361afe6b8cd3010 +/deepseek-ai-dsh-api-terminal-controller: + en: d5eb7912c65b4e26 + zh: 7deb2a8167a82c90 +/deepseek-ai-dsh-api-terminal-controller/summary: + en: 8e645f037a71a0f6 + zh: 421d962126692dd7 +/deepseek-ai-dsh-api-terminal-controller/table-of-contents: + en: d152484eb41ac6b4 + zh: 1fa9a72d1ee045cc +/deepseek-ai-dsh-api-terminal-controller/use-this-package: + en: 234403af4f95ea67 + zh: d711c2e62d7d37f8 +/deepseek-ai-dsh-api-terminal-controller/understand-the-implementation: + en: 94dcd1835c55acc2 + zh: cbfeb2da8cb60395 +/deepseek-ai-dsh-api-terminal-controller/further-exploration: + en: b1b5d2a2bfb8cc6a + zh: aa0ea568aa63fda5 +/deepseek-ai-dsh-api-terminal-controller/model-experience: + en: 2c52eec781441d2a + zh: 35a7c88f180f74a1 +/deepseek-ai-dsh-api-terminal-controller/model-experience/kv-cache-effect: + en: 507d3b3b80596fdc + zh: 4659007c4671afdc +/deepseek-ai-dsh-api-terminal-controller/known-limitations-and-deferred-work: + en: 6af6663b852441db + zh: 244ed7729cae8d81 +/deepseek-ai-dsh-api-terminal-controller/known-limitations-and-deferred-work/dev-note: + en: 2acda84e5b9a3ce2 + zh: f86e92da1c66ffff diff --git a/packages/api/workspace-controller/README.i18n.yaml b/packages/api/workspace-controller/README.i18n.yaml index 2c139343c7..9029bf26b2 100644 --- a/packages/api/workspace-controller/README.i18n.yaml +++ b/packages/api/workspace-controller/README.i18n.yaml @@ -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 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 packages/api/workspace-controller/README.md -README.md: b1ca97465625817c28615cbff1badb564ccc29fe -README.zh.md: 7f7dbd49c0ef0ebbcb49dfeb6d736dc03e96565c +/: + en: a080cd1633a6f3a9 + zh: a54cb4fb9d9f15b2 +/workspace-controller: + en: b9d615d0df92cbb7 + zh: 5ecd432522478c8a +/workspace-controller/summary: + en: b7822e9ab1f26abf + zh: b052a3d4a20d26a3 +/workspace-controller/table-of-contents: + en: 4e53164159b5ce41 + zh: 89582dc0294d0776 +/workspace-controller/use-this-package: + en: aa0d93826ab685fe + zh: 144e48d49020f5a4 +/workspace-controller/use-this-package/first-use-workspace: + en: 5d7a5ff08c15aec5 + zh: 7668ed81af0d70d8 +/workspace-controller/model-experience: + en: 4f399d6a27daf683 + zh: 13811489fe636127 +/workspace-controller/model-experience/kv-cache-effect: + en: f38466c42287d3db + zh: 692eb6e5806fe865 +/workspace-controller/known-limitations-and-deferred-work: + en: 43b497c19779532e + zh: c6d9d3afff774219 +/workspace-controller/known-limitations-and-deferred-work/dev-note: + en: 0f74591fc1097e46 + zh: f4df9e5617a50a9f diff --git a/packages/api/workspace-files/README.i18n.yaml b/packages/api/workspace-files/README.i18n.yaml index 0f0e41d9c1..1a68691ebe 100644 --- a/packages/api/workspace-files/README.i18n.yaml +++ b/packages/api/workspace-files/README.i18n.yaml @@ -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 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 packages/api/workspace-files/README.md -README.md: 0345887e58975b9ef2764144ded20a4f25e8f04d -README.zh.md: 572b83ec37696ee32ba9c3e1e0babdf696afe903 +/: + en: f83c75aa73ae21dd + zh: e8873aafd23a8038 +/deepseek-ai-dsh-api-workspace-files: + en: d2885c72d12d9924 + zh: e111f03d02383229 +/deepseek-ai-dsh-api-workspace-files/summary: + en: 27c562441286bdbf + zh: 205dfac32c96873b +/deepseek-ai-dsh-api-workspace-files/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-api-workspace-files/use-this-package: + en: 874054ed5e950973 + zh: e8b55d62939c4c2f +/deepseek-ai-dsh-api-workspace-files/use-this-package/addressing-and-paths: + en: b9565cfa7a1da451 + zh: fc4078a58322fc7f +/deepseek-ai-dsh-api-workspace-files/use-this-package/pages: + en: 9cd68b8be3390c80 + zh: 26049ce447f00452 +/deepseek-ai-dsh-api-workspace-files/use-this-package/binary-reads: + en: 93ca9e832fbfd632 + zh: 69412adba259c6f8 +/deepseek-ai-dsh-api-workspace-files/use-this-package/file-read-and-directory-checks: + en: 4db14c7ce7bc3390 + zh: fa97e79fb2c07ce2 +/deepseek-ai-dsh-api-workspace-files/use-this-package/the-change-feed: + en: 8bd2d820a512d461 + zh: 0614ddd842ae7526 +/deepseek-ai-dsh-api-workspace-files/use-this-package/configuration: + en: e606e8b22ac6e0d0 + zh: 13a7214448036d7b +/deepseek-ai-dsh-api-workspace-files/use-this-package/failures: + en: c53d597c8f255e69 + zh: 1e00318f9a34f3bb +/deepseek-ai-dsh-api-workspace-files/use-this-package/client-file-resources: + en: 9b4bf7a30016f856 + zh: 30127a6ada65e715 +/deepseek-ai-dsh-api-workspace-files/understand-the-implementation: + en: 42b15ac6321706aa + zh: ce1d25bffb6948cd +/deepseek-ai-dsh-api-workspace-files/understand-the-implementation/design-concept: + en: c3a8852c33dcc0e9 + zh: d24fd47da7faaa29 +/deepseek-ai-dsh-api-workspace-files/understand-the-implementation/source-map: + en: 2394243d582bb452 + zh: 763e56ca827efa0d +/deepseek-ai-dsh-api-workspace-files/further-exploration: + en: 71f00fb919d12181 + zh: 1e3819cd90dfca31 +/deepseek-ai-dsh-api-workspace-files/model-experience: + en: 37b4264c8301323f + zh: 74ea89b3383ff7da +/deepseek-ai-dsh-api-workspace-files/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 03126f3b1aac5859 +/deepseek-ai-dsh-api-workspace-files/known-limitations-and-deferred-work: + en: ee05e55f5d16f253 + zh: 0c937eeac8fa3f08 +/deepseek-ai-dsh-api-workspace-files/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/attachment/README.i18n.yaml b/packages/attachment/README.i18n.yaml index 908d76705b..90d0efc6f6 100644 --- a/packages/attachment/README.i18n.yaml +++ b/packages/attachment/README.i18n.yaml @@ -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 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 packages/attachment/README.md -README.md: 924482b79052ba9e26bb49aac0d05121e78ac083 -README.zh.md: d42d085914030cff32c2937af4bf573b7578cc35 +/: + en: 45edc3b0f7e4c61f + zh: 34032617b731defb +/attachment-durable-attachment-capability-family: + en: 10d0411d511b2bcf + zh: e1638ec309de04cc +/attachment-durable-attachment-capability-family/summary: + en: a34dd6206d6b3ae8 + zh: acbff9279eb83953 +/attachment-durable-attachment-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/attachment-durable-attachment-capability-family/packages: + en: ad42a47e03cfe15e + zh: 29757f523d316c4c +/attachment-durable-attachment-capability-family/related-documentation: + en: 266c2248482f594e + zh: ad5a2668505373a0 +/attachment-durable-attachment-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/attachment/attachment-local/README.i18n.yaml b/packages/attachment/attachment-local/README.i18n.yaml index bd5a9411bf..4a8f7cd11f 100644 --- a/packages/attachment/attachment-local/README.i18n.yaml +++ b/packages/attachment/attachment-local/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/attachment/attachment-local/README.md -README.md: ea15a8700bf07fc640375b0d1ea4af18c7ff2199 -README.zh.md: f9b24dfd8e3b67a144bf724616d203cbf6e4dd63 +/: + en: 5d8d225549347391 + zh: 0fc0e5ee73acf917 +/deepseek-ai-dsh-attachment-local: + en: d43be6d0218e5f22 + zh: 444ec4f8125c08b9 +/deepseek-ai-dsh-attachment-local/summary: + en: 2350024cee2e9954 + zh: 73a4900b1e40013b +/deepseek-ai-dsh-attachment-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-attachment-local/use-this-package: + en: 912a19be4b59ff8a + zh: 9c14694cf2ebbaf2 +/deepseek-ai-dsh-attachment-local/use-this-package/minimal-configuration: + en: b34e09c3236f81f1 + zh: c541b5dc22c8f307 +/deepseek-ai-dsh-attachment-local/use-this-package/where-your-images-are-stored-and-how-long-they-last: + en: 4ee90b8f74baa38c + zh: 9c577709ec55eb82 +/deepseek-ai-dsh-attachment-local/use-this-package/what-happens-when-you-attach-an-image: + en: 75ba799b1e4edba4 + zh: 06c5f76200e8da8a +/deepseek-ai-dsh-attachment-local/use-this-package/what-can-go-wrong: + en: 377696b2dc08b170 + zh: 6b831ef31c93f712 +/deepseek-ai-dsh-attachment-local/understand-the-implementation: + en: e44b0aa3e234a0ef + zh: b7dd6829478eb7f1 +/deepseek-ai-dsh-attachment-local/understand-the-implementation/design-decisions: + en: dcd9857653645420 + zh: a27259a09f17465d +/deepseek-ai-dsh-attachment-local/understand-the-implementation/write-and-read-paths: + en: 609ccc784a87b770 + zh: bc702582cf2b3316 +/deepseek-ai-dsh-attachment-local/understand-the-implementation/source-map: + en: b092fd38c68a06bd + zh: 4f3f4f1ec98401f4 +/deepseek-ai-dsh-attachment-local/further-exploration: + en: f8b09b2542211379 + zh: 57a8fa44aa76b737 +/deepseek-ai-dsh-attachment-local/model-experience: + en: 2e18b3dfbc5af126 + zh: aaee1745632c561a +/deepseek-ai-dsh-attachment-local/model-experience/kv-cache-effect: + en: 64670486210bdab7 + zh: 44c988dd6268c1ff +/deepseek-ai-dsh-attachment-local/known-limitations-and-deferred-work: + en: 46a33da5b3740127 + zh: c3ac244228b81d8f +/deepseek-ai-dsh-attachment-local/known-limitations-and-deferred-work/dev-note: + en: d56846da29ad869c + zh: 41e655e01351fd1d +/deepseek-ai-dsh-attachment-local/known-limitations-and-deferred-work/dev-note/future-retention-and-remote-storage: + en: d4bbda6aadc3c879 + zh: 97a22323e77affb3 diff --git a/packages/attachment/attachment/README.i18n.yaml b/packages/attachment/attachment/README.i18n.yaml index 87d9bd1b78..0c7491db3a 100644 --- a/packages/attachment/attachment/README.i18n.yaml +++ b/packages/attachment/attachment/README.i18n.yaml @@ -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 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 packages/attachment/attachment/README.md -README.md: d2a667e2d12deadc5e82a83cca6565f0b5a6aae0 -README.zh.md: b5598eb8ccca39d8b5be346c585fd84d3dd38468 +/: + en: c8448ea82a8ce005 + zh: 24444a57de8c007c +/deepseek-ai-dsh-attachment: + en: 564edd7bc6bd7aaa + zh: 6b3f7eff2ac2dbb2 +/deepseek-ai-dsh-attachment/summary: + en: ecfee6cc000f679e + zh: fadcee31cbd4becb +/deepseek-ai-dsh-attachment/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-attachment/use-this-package: + en: f51a5528232ac43b + zh: 931041df996b39d2 +/deepseek-ai-dsh-attachment/use-this-package/attach-images-to-a-prompt: + en: b440422892839de9 + zh: 0290b366b5a4ef88 +/deepseek-ai-dsh-attachment/use-this-package/attach-any-other-file-to-a-prompt: + en: d5019c6ae76c0bcf + zh: b7aeaf7e6920ff10 +/deepseek-ai-dsh-attachment/use-this-package/pass-attachments-to-commands: + en: 8a0fa64e84aa4450 + zh: ed2ac44ef20250d4 +/deepseek-ai-dsh-attachment/use-this-package/reuse-images-across-the-session: + en: c99e4e088be92c4f + zh: 34997ecb9a420d08 +/deepseek-ai-dsh-attachment/use-this-package/what-can-go-wrong: + en: b35e2f7f17269ae1 + zh: 57cf0ef9fee6c7e1 +/deepseek-ai-dsh-attachment/understand-the-implementation: + en: 25d9c7d6c0899d23 + zh: ad8380d14810ff1c +/deepseek-ai-dsh-attachment/understand-the-implementation/design-decisions: + en: af7deef72fd2fa93 + zh: f217d52ce3971135 +/deepseek-ai-dsh-attachment/understand-the-implementation/service-operations: + en: 4a35cdba790c3b8b + zh: 08d4a18bbad4b182 +/deepseek-ai-dsh-attachment/understand-the-implementation/source-map: + en: a196e1f4cf9895ae + zh: 39b430b53d30297e +/deepseek-ai-dsh-attachment/further-exploration: + en: 0f179d9ab84a962a + zh: 4a1d0722a3309f4a +/deepseek-ai-dsh-attachment/model-experience: + en: 3a9fc2cc8896a2db + zh: 256ffa52315cb597 +/deepseek-ai-dsh-attachment/model-experience/kv-cache-effect: + en: 2fcaf6d01d42da7c + zh: 81e61690b955dd18 +/deepseek-ai-dsh-attachment/known-limitations-and-deferred-work: + en: d1ee04ac73471377 + zh: 1abf40510951d5c2 +/deepseek-ai-dsh-attachment/known-limitations-and-deferred-work/dev-note: + en: d56846da29ad869c + zh: 41e655e01351fd1d +/deepseek-ai-dsh-attachment/known-limitations-and-deferred-work/dev-note/future-reference-aware-garbage-collection: + en: 20c22bbf4263d41e + zh: f85699e18a0e5f43 +/deepseek-ai-dsh-attachment/known-limitations-and-deferred-work/dev-note/future-audio-video-and-assistant-side-output: + en: 85353325b14af5a8 + zh: c03fb041c2daee7e diff --git a/packages/boot/README.i18n.yaml b/packages/boot/README.i18n.yaml index f6ad94fed7..2268fee12c 100644 --- a/packages/boot/README.i18n.yaml +++ b/packages/boot/README.i18n.yaml @@ -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 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 packages/boot/README.md -README.md: 826d74a8af78048e8dc90bfc04afee78a63e35fd -README.zh.md: c16768dc3510394379ed25d5514c12caa9c0ac9a +/: + en: f463eb944808754a + zh: f0cf7b9bb1fbff54 +/boot-shared-app-bin-boot-glue: + en: 2caa275142cc783b + zh: 0bd2855793c7c647 +/boot-shared-app-bin-boot-glue/summary: + en: 444512f85b296a2c + zh: a30cddc443061060 +/boot-shared-app-bin-boot-glue/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/boot-shared-app-bin-boot-glue/packages: + en: f1285935114d8d71 + zh: 71698b9aca926726 +/boot-shared-app-bin-boot-glue/related-documentation: + en: 77af4b40ee7b98a3 + zh: e9b4e817823b973d +/boot-shared-app-bin-boot-glue/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/boot/app-boot/README.i18n.yaml b/packages/boot/app-boot/README.i18n.yaml index 68ad416e0b..6c0d9fcddc 100644 --- a/packages/boot/app-boot/README.i18n.yaml +++ b/packages/boot/app-boot/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/boot/app-boot/README.md -README.md: c32f8e4dd9065897a7dcbe4b7a2fd2e067b25e46 -README.zh.md: 0bbdab2a5d51deeb6b63bf972e6550f9b4034db1 +/: + en: 822ef8977098c703 + zh: c0673e854310840f +/deepseek-ai-dsh-app-boot: + en: fdb73259898590a5 + zh: aee057cd436da2e2 +/deepseek-ai-dsh-app-boot/summary: + en: e5db70f7cdcdbe9c + zh: 6852efb61109a349 +/deepseek-ai-dsh-app-boot/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-app-boot/use-this-package: + en: f6fa378225009c8f + zh: 324c0e4640bb1358 +/deepseek-ai-dsh-app-boot/use-this-package/when-to-use-it: + en: 2fdfe02f2ed4a258 + zh: d748228ece579c4a +/deepseek-ai-dsh-app-boot/use-this-package/starting-the-app: + en: 1099528bde0e2aee + zh: b68772bdb9bb7856 +/deepseek-ai-dsh-app-boot/use-this-package/profiles: + en: faa66e7b3b641fa1 + zh: c54b742abb967726 +/deepseek-ai-dsh-app-boot/use-this-package/previewing-the-effective-configuration: + en: 646a0ccdd7881ad1 + zh: e3696acb1573dd7b +/deepseek-ai-dsh-app-boot/use-this-package/inspecting-plugin-configuration-schemas: + en: c4a301652b851ce9 + zh: 784871e19cd9db0a +/deepseek-ai-dsh-app-boot/use-this-package/reading-plugin-display-metadata: + en: 480ad3a4d96112f0 + zh: 10a92f1013aa5ac4 +/deepseek-ai-dsh-app-boot/use-this-package/startup-and-reload-failures: + en: 09890e218ab49c84 + zh: e3d86597e7fb1adb +/deepseek-ai-dsh-app-boot/use-this-package/telling-the-agent-where-the-harness-lives: + en: 07c459f26f4f8517 + zh: 210f1e4894731b1a +/deepseek-ai-dsh-app-boot/understand-the-implementation: + en: f4a2695cb4c8a570 + zh: 89837235d2f376cf +/deepseek-ai-dsh-app-boot/understand-the-implementation/design-notes: + en: 4ac0c33806b5a5b2 + zh: cdb56f3adfcb4364 +/deepseek-ai-dsh-app-boot/understand-the-implementation/helper-behavior: + en: f7bc3a8dd4b00bdd + zh: 30098428aa769ad0 +/deepseek-ai-dsh-app-boot/understand-the-implementation/source-map: + en: 25602fd8eb9b2907 + zh: 870a33dd34a52c32 +/deepseek-ai-dsh-app-boot/further-exploration: + en: ffd10e94443a10ca + zh: cd11495bae751bdd +/deepseek-ai-dsh-app-boot/model-experience: + en: 769777f1cb1a9408 + zh: f02b2834179df50d +/deepseek-ai-dsh-app-boot/model-experience/kv-cache-effect: + en: c4d49630b68ae896 + zh: 6f450ec6ba39bb81 +/deepseek-ai-dsh-app-boot/known-limitations-and-deferred-work: + en: bf1a49013cad8e9c + zh: 41b2b010f8650ec3 +/deepseek-ai-dsh-app-boot/known-limitations-and-deferred-work/dev-note: + en: d2f0d68fe29fb750 + zh: 323d21ee73a9e3f6 +/deepseek-ai-dsh-app-boot/known-limitations-and-deferred-work/dev-note/open-yaml-config-dump-stability: + en: 032f14ed5cd78efa + zh: ecc81f819f0bc39b diff --git a/packages/boot/cmdline/README.i18n.yaml b/packages/boot/cmdline/README.i18n.yaml index 3124c7daa7..18fa26d696 100644 --- a/packages/boot/cmdline/README.i18n.yaml +++ b/packages/boot/cmdline/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/boot/cmdline/README.md -README.md: f0c6636b342d856b44c9d5eaffbbd4657f3e88ae -README.zh.md: b852c59ee42824c17af2cb429c71e7ca7cd0055b +/: + en: 29e1bbea853a5634 + zh: ef6bc8af7a8ae1dc +/deepseek-ai-dsh-cmdline: + en: ecfe026417c688da + zh: 469e8f606208139a +/deepseek-ai-dsh-cmdline/summary: + en: cd0cc4458af8f563 + zh: b2cba42fcf5c810b +/deepseek-ai-dsh-cmdline/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-cmdline/use-this-package: + en: ad6f55231a2cb77d + zh: 9039fa43deeaa458 +/deepseek-ai-dsh-cmdline/use-this-package/the-launcher-values: + en: 67d2ceaa6b4dd429 + zh: 632d9396ba760eee +/deepseek-ai-dsh-cmdline/use-this-package/parsing-your-flags: + en: e88383d7638cb933 + zh: 0d0608be857be763 +/deepseek-ai-dsh-cmdline/use-this-package/how-flags-beat-config-values: + en: 301e1dc64b9ffdce + zh: d2fbd70267fe7bda +/deepseek-ai-dsh-cmdline/use-this-package/reading-the-same-arguments-from-several-plugins: + en: 9078403a8341b8d6 + zh: 7a6af7c16924ff03 +/deepseek-ai-dsh-cmdline/understand-the-implementation: + en: f4a2695cb4c8a570 + zh: 89837235d2f376cf +/deepseek-ai-dsh-cmdline/understand-the-implementation/design-notes: + en: 0753fe84c14e7d0b + zh: acc5c2224fac229e +/deepseek-ai-dsh-cmdline/understand-the-implementation/parsing-contract: + en: 720b38c4c9afeb93 + zh: b43160d7176e5799 +/deepseek-ai-dsh-cmdline/understand-the-implementation/source-map: + en: 9867efd4c939077c + zh: 00247b7fe19bc2eb +/deepseek-ai-dsh-cmdline/further-exploration: + en: 6ea3c827c59aff4c + zh: 2977b4cfa7f73942 +/deepseek-ai-dsh-cmdline/model-experience: + en: f9f5061b618b962a + zh: 75c6de06b1d981a0 +/deepseek-ai-dsh-cmdline/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-cmdline/known-limitations-and-deferred-work: + en: ff2d1068ce4ac0cd + zh: 6ab1d54e99c58285 +/deepseek-ai-dsh-cmdline/known-limitations-and-deferred-work/dev-note: + en: d2f0d68fe29fb750 + zh: 323d21ee73a9e3f6 +/deepseek-ai-dsh-cmdline/known-limitations-and-deferred-work/dev-note/open-parser-surface: + en: a82e0020f6f2eb84 + zh: 66b1f97dc6f15370 diff --git a/packages/boot/config-editor/README.i18n.yaml b/packages/boot/config-editor/README.i18n.yaml index 94114937e7..ecc1d50e34 100644 --- a/packages/boot/config-editor/README.i18n.yaml +++ b/packages/boot/config-editor/README.i18n.yaml @@ -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 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 packages/boot/config-editor/README.md -README.md: b2dd0fe5bce7e2cef63a6dfc7437f3ef7066df9a -README.zh.md: 35823f52ea12c3e073ece8fd3d33698007ec8506 +/: + en: 68783acbf26e5790 + zh: 8e04cbad03340c77 +/deepseek-ai-dsh-config-editor: + en: 8ea66af3a8192149 + zh: 3581118c2b5cb4ab +/deepseek-ai-dsh-config-editor/summary: + en: f8831f5fad9041d8 + zh: 9744b776ffae1e7a +/deepseek-ai-dsh-config-editor/table-of-contents: + en: 23386452a66b2fbd + zh: 70bba862b949b652 +/deepseek-ai-dsh-config-editor/use-this-package: + en: 1eedaa5d72b48177 + zh: 39abc1d927a692d2 +/deepseek-ai-dsh-config-editor/understand-the-implementation: + en: 972ac006df48ad85 + zh: df8adddc40817877 +/deepseek-ai-dsh-config-editor/further-exploration: + en: 0c9e1d1401a865cc + zh: 6130d52636e84676 +/deepseek-ai-dsh-config-editor/model-experience: + en: 358d1a5b1d9f2fde + zh: a40c6e95f39032e8 +/deepseek-ai-dsh-config-editor/model-experience/kv-cache-effect: + en: f49cb624cd503dd1 + zh: 9944f21ab3458e4b +/deepseek-ai-dsh-config-editor/known-limitations-and-deferred-work: + en: 8314910af268bda0 + zh: 2c7f0c16ee09b0f7 +/deepseek-ai-dsh-config-editor/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/boot/hmr/README.i18n.yaml b/packages/boot/hmr/README.i18n.yaml index 2a8a9c45e5..c5996ca9af 100644 --- a/packages/boot/hmr/README.i18n.yaml +++ b/packages/boot/hmr/README.i18n.yaml @@ -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 packages/boot/hmr/README.md -README.md: 9e2c62c739c420ceae3db3fd5ade58d6eeadacec -README.zh.md: fa926d5998f7f4b784fe2f848b5acc3047b91b77 +/: + en: 0d369858959a42ab + zh: aed78464c165f6bd +/deepseek-ai-dsh-hmr: + en: 320535d0b618f5f6 + zh: 8dfa97b775476ef1 +/deepseek-ai-dsh-hmr/summary: + en: a20180062e3ed8fb + zh: 94bbaa4bbdb5ac9b +/deepseek-ai-dsh-hmr/table-of-contents: + en: 76368b6b1da79c80 + zh: 52384aee991ac542 +/deepseek-ai-dsh-hmr/use-this-package: + en: 9fd376ac44e7f515 + zh: 83bd165982e99d2a +/deepseek-ai-dsh-hmr/use-this-package/configuration: + en: 45ee194ad781d603 + zh: b3d7fcd8ed73717c +/deepseek-ai-dsh-hmr/understand-the-implementation: + en: 5c7ff789d5d6b653 + zh: 46ef96a031ac87bd +/deepseek-ai-dsh-hmr/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-hmr/model-experience/reloaded-plugins: + en: 440394ecf06680e0 + zh: f1b515fca0a2db63 +/deepseek-ai-dsh-hmr/model-experience/reloaded-plugins/what-the-model-sees: + en: 9354fbd20bf1592d + zh: 5a3b0cafba8455a8 +/deepseek-ai-dsh-hmr/model-experience/reloaded-plugins/token-effect: + en: 43453397533501ca + zh: 207d34979ba8ccd0 +/deepseek-ai-dsh-hmr/model-experience/reloaded-plugins/kv-cache-effect: + en: 89e0624fafd701fb + zh: 19d36a33c1d9af9d +/deepseek-ai-dsh-hmr/known-limitations-and-deferred-work: + en: 75e861bd7c91e37b + zh: d209c33dd5b16182 +/deepseek-ai-dsh-hmr/known-limitations-and-deferred-work/dev-note: + en: 7972e4b2005ec9a4 + zh: 754c49ec538c164c diff --git a/packages/boot/plugin-manager/README.i18n.yaml b/packages/boot/plugin-manager/README.i18n.yaml index a076c5dabe..bd34ee9e98 100644 --- a/packages/boot/plugin-manager/README.i18n.yaml +++ b/packages/boot/plugin-manager/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/boot/plugin-manager/README.md -README.md: c047c71476308f0123bdebed6d9ab21e8ececc2f -README.zh.md: 1f99f67498790d997a7e345ca301b85c319c7b09 +/: + en: 65283627208ef4c9 + zh: aa3f833ec24bb65a +/deepseek-ai-dsh-plugin-manager: + en: e6cbfe169f5fb57b + zh: be378036d645a242 +/deepseek-ai-dsh-plugin-manager/summary: + en: d6afcaa1594efcdb + zh: 459cb6ac0dcb2d46 +/deepseek-ai-dsh-plugin-manager/table-of-contents: + en: 87679c51aa3693f5 + zh: 11684a48a5806afb +/deepseek-ai-dsh-plugin-manager/use-this-package: + en: b8d7061ee289b2a0 + zh: 49aba7df4761fb23 +/deepseek-ai-dsh-plugin-manager/use-this-package/version-compatibility-and-exemptions: + en: 920c0acb3b9feaf3 + zh: ba6e832a256880a7 +/deepseek-ai-dsh-plugin-manager/use-this-package/configuration: + en: d5643a06f300c30a + zh: 9348b6a7676a2849 +/deepseek-ai-dsh-plugin-manager/understand-the-implementation: + en: 0cbf4501defc4fe0 + zh: 8382481b15f97181 +/deepseek-ai-dsh-plugin-manager/further-exploration: + en: c6538243d8702a0d + zh: 04a82d923353c75f +/deepseek-ai-dsh-plugin-manager/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-plugin-manager/model-experience/management-tool: + en: 1815ec6ce56c80d4 + zh: 2d7ac75d3b25eb6b +/deepseek-ai-dsh-plugin-manager/model-experience/management-tool/what-the-model-sees: + en: 72d6c70869b12f22 + zh: 45218d6f1e765fb1 +/deepseek-ai-dsh-plugin-manager/model-experience/management-tool/token-effect: + en: bc70208bd361dbcd + zh: bb651d6066066c6c +/deepseek-ai-dsh-plugin-manager/model-experience/management-tool/kv-cache-effect: + en: c29f60be7f3edc1a + zh: d9b9388b96ef95cc +/deepseek-ai-dsh-plugin-manager/known-limitations-and-deferred-work: + en: fde2d9491fe5dd4f + zh: ef6e6db15c4f19d2 +/deepseek-ai-dsh-plugin-manager/known-limitations-and-deferred-work/failure-behavior: + en: 61450cf6e03c2819 + zh: 4d52f5306825787b +/deepseek-ai-dsh-plugin-manager/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/browser-use/README.i18n.yaml b/packages/browser-use/README.i18n.yaml index 8a0f11cc8d..4150904355 100644 --- a/packages/browser-use/README.i18n.yaml +++ b/packages/browser-use/README.i18n.yaml @@ -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 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 packages/browser-use/README.md -README.md: edac2b7756825984c61d14a08b991fc7c8965b0a -README.zh.md: 35bc31f51e1e47b5750268522520025ddf4793b0 +/: + en: 7828318b1f33a9cc + zh: c717cb9b25765cfa +/packages-browser-use: + en: e361426b3627aa83 + zh: c7d75a83ba962803 +/packages-browser-use/summary: + en: 5f716c82f5880031 + zh: 0ac74cbb608bed38 +/packages-browser-use/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-browser-use/packages: + en: 2f9f23600f51f0a0 + zh: 80d5faa88efc1008 +/packages-browser-use/related-documentation: + en: 6196ae1f5095358b + zh: ede54d56642b0e16 +/packages-browser-use/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/browser-use/browser-use/README.i18n.yaml b/packages/browser-use/browser-use/README.i18n.yaml index 786df6c0d4..ef8440b211 100644 --- a/packages/browser-use/browser-use/README.i18n.yaml +++ b/packages/browser-use/browser-use/README.i18n.yaml @@ -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 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 packages/browser-use/browser-use/README.md -README.md: d721f4f22e5a132f79e4428d6e306a0595057a95 -README.zh.md: fd1b2dc832a75800b6201a84c3c7be77686e53a8 +/: + en: f40b34f771caa863 + zh: f61d7ce73e0720e2 +/deepseek-ai-dsh-browser-use: + en: 2dbab261a3c343cc + zh: f2cf8d237182cef1 +/deepseek-ai-dsh-browser-use/summary: + en: 3e2c0d4aad911b93 + zh: 3e3903754a46de8e +/deepseek-ai-dsh-browser-use/table-of-contents: + en: d152484eb41ac6b4 + zh: f14f34fce35a8d90 +/deepseek-ai-dsh-browser-use/use-this-package: + en: d0c5ace058c0572a + zh: 2bbfa786c1f9ba53 +/deepseek-ai-dsh-browser-use/understand-the-implementation: + en: e8421af75ba37792 + zh: 3dbc5e6ff5291972 +/deepseek-ai-dsh-browser-use/further-exploration: + en: 5ae59b1b38304607 + zh: 429171c1a3fb914c +/deepseek-ai-dsh-browser-use/model-experience: + en: 8780c250dfaefaaa + zh: f1fd94f7531b60a1 +/deepseek-ai-dsh-browser-use/model-experience/kv-cache-effect: + en: 0cc866a67a19d08b + zh: c6a46b147b042cff +/deepseek-ai-dsh-browser-use/known-limitations-and-deferred-work: + en: 43952e97817e9e32 + zh: a5e494860a71fc71 +/deepseek-ai-dsh-browser-use/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/bundle/README.i18n.yaml b/packages/bundle/README.i18n.yaml index dc41a79bb0..2db95bd425 100644 --- a/packages/bundle/README.i18n.yaml +++ b/packages/bundle/README.i18n.yaml @@ -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 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 packages/bundle/README.md -README.md: 6311b61d5e20a13d1f1ac67729ab5bc24f3ec902 -README.zh.md: 829408f1e1356fc582813816b792ad1ee11f5734 +/: + en: de4fb0291736852d + zh: 5529332ef61fee96 +/bundle-profile-plugin-bundles: + en: 976582e78790d02d + zh: d454446fdc2d839a +/bundle-profile-plugin-bundles/summary: + en: ff04aa136f6b9ce4 + zh: 3dd67cf46c5407cb +/bundle-profile-plugin-bundles/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/bundle-profile-plugin-bundles/packages: + en: 3c0457febc9525d6 + zh: a236402f8e9fb212 +/bundle-profile-plugin-bundles/related-documentation: + en: 29a969a46018d862 + zh: bb0be22dd0273886 +/bundle-profile-plugin-bundles/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/bundle/acp-app/README.i18n.yaml b/packages/bundle/acp-app/README.i18n.yaml index cb29bcd4a5..39606fc9d9 100644 --- a/packages/bundle/acp-app/README.i18n.yaml +++ b/packages/bundle/acp-app/README.i18n.yaml @@ -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 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 packages/bundle/acp-app/README.md -README.md: c770e25bbcf19cd22b7bc3850eb38923f00b86e1 -README.zh.md: 3f87f92b9333f0f48d8d7171ce084d95f6bf9a56 +/: + en: 54af04fe07d4168b + zh: e4ceb9a3f653e74b +/deepseek-ai-dsh-acp-app: + en: 7bc0c99f44486156 + zh: 9e77e6431619bcca +/deepseek-ai-dsh-acp-app/summary: + en: a9c25b4f78fe815e + zh: 404b80450b716e56 +/deepseek-ai-dsh-acp-app/table-of-contents: + en: 636fbd365057be75 + zh: d12fd8759c7e62e5 +/deepseek-ai-dsh-acp-app/use-this-package: + en: 253968fa459a1fe0 + zh: 419ff64d21b0f8d4 +/deepseek-ai-dsh-acp-app/standard-automation-workflow: + en: a275f648857abadb + zh: 128eec8a97db5542 +/deepseek-ai-dsh-acp-app/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-acp-app/model-experience/acp-coding-agent-persona: + en: a7451ee84e5e156a + zh: a7451ee84e5e156a +/deepseek-ai-dsh-acp-app/model-experience/acp-coding-agent-persona/what-the-model-sees: + en: bc0db4c628a1e547 + zh: 740d07803bca3ce4 +/deepseek-ai-dsh-acp-app/model-experience/acp-coding-agent-persona/token-effect: + en: 371d28831239e0a8 + zh: 0d2678654607b657 +/deepseek-ai-dsh-acp-app/model-experience/acp-coding-agent-persona/kv-cache-effect: + en: 8a5d250256381538 + zh: 0578eaa7f774753e +/deepseek-ai-dsh-acp-app/known-limitations-and-deferred-work: + en: e5e9b2ef3b75e6f6 + zh: f34d43d5dd68ab60 +/deepseek-ai-dsh-acp-app/known-limitations-and-deferred-work/dev-note: + en: 8bc6c774f783517d + zh: d1643c271de867ae diff --git a/packages/bundle/base/README.i18n.yaml b/packages/bundle/base/README.i18n.yaml index cad307b9e5..4aff8b80e2 100644 --- a/packages/bundle/base/README.i18n.yaml +++ b/packages/bundle/base/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/bundle/base/README.md -README.md: 98f4b148bf0f0304c412b6964be53c4b2e76287c -README.zh.md: 2ed43b780bdee0056e17dcad8d720b003f70b3f1 +/: + en: 21c1b63e74134d34 + zh: 78c69828d5930a86 +/deepseek-ai-dsh-base: + en: 501b1b61d4739d2a + zh: 5faba14f2480be3b +/deepseek-ai-dsh-base/summary: + en: 5c15f68a65aadc7d + zh: 7ac9ace622e161ae +/deepseek-ai-dsh-base/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-base/use-this-package: + en: 4c0d7045f95ff79c + zh: 456bb24bd1d35db1 +/deepseek-ai-dsh-base/use-this-package/a-minimal-custom-profile: + en: 0f971f7ac7c09139 + zh: ceb866da681c709c +/deepseek-ai-dsh-base/use-this-package/what-you-get: + en: 7ee3a3def76e0ce6 + zh: b53b1fdc78cf0339 +/deepseek-ai-dsh-base/use-this-package/shell-tools-per-platform: + en: 2dce12f82d6ee955 + zh: d4599eb899a3cd88 +/deepseek-ai-dsh-base/use-this-package/changing-the-defaults: + en: 96a55abd5f7007dd + zh: d94f020708c38a17 +/deepseek-ai-dsh-base/understand-the-implementation: + en: 094cfca8e26a0042 + zh: de435e3e38420c01 +/deepseek-ai-dsh-base/understand-the-implementation/composition-mechanics: + en: fd37bc66e39ac5e7 + zh: 1a039afb8bf2d517 +/deepseek-ai-dsh-base/understand-the-implementation/platform-gating: + en: 8c2444fa7b237783 + zh: 82002a8b9ddf5942 +/deepseek-ai-dsh-base/understand-the-implementation/source-map: + en: 3aaf655b9c93534b + zh: 5a1b627cc6385a17 +/deepseek-ai-dsh-base/understand-the-implementation/invariant-ownership: + en: 533299d7bd555e61 + zh: 0aed404f790ea447 +/deepseek-ai-dsh-base/further-exploration: + en: 39701b25b209fb67 + zh: 2b7ce98365f1ecfc +/deepseek-ai-dsh-base/model-experience: + en: f6c4d2609b5f4bb6 + zh: 869a9565a133fb01 +/deepseek-ai-dsh-base/model-experience/kv-cache-effect: + en: e6e907c99df7cd0a + zh: f19f2f84a5f95177 +/deepseek-ai-dsh-base/known-limitations-and-deferred-work: + en: ce8558ab18184bf2 + zh: 3b3fb98cf1bd4652 +/deepseek-ai-dsh-base/known-limitations-and-deferred-work/dev-note: + en: ca037cb236aa841a + zh: e06f3899be43b572 diff --git a/packages/bundle/headless/README.i18n.yaml b/packages/bundle/headless/README.i18n.yaml index a851d2aa38..5e6cce5acb 100644 --- a/packages/bundle/headless/README.i18n.yaml +++ b/packages/bundle/headless/README.i18n.yaml @@ -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 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 packages/bundle/headless/README.md -README.md: d3eb8054e5a4e597b71855f9718ca57252d926da -README.zh.md: b3f4d445132f8a59f8924f2668ad2eb2041f6a3f +/: + en: 68ff17b596cbc6aa + zh: 8c6f3d309403ba81 +/deepseek-ai-dsh-headless: + en: 605b67ee9f21d085 + zh: df2687a69f362493 +/deepseek-ai-dsh-headless/summary: + en: 2c31f2cf129ed020 + zh: 2b34e3640b011475 +/deepseek-ai-dsh-headless/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-headless/use-this-package: + en: 4447012f4c84100d + zh: faf579ae9f04c096 +/deepseek-ai-dsh-headless/use-this-package/running-a-one-shot-task: + en: 76a22e98d2b3cc2f + zh: c9eb624609b8cc32 +/deepseek-ai-dsh-headless/use-this-package/choosing-the-session-identity: + en: dbaa2fac63910a4c + zh: 4fd5c17815ca444b +/deepseek-ai-dsh-headless/use-this-package/machine-readable-output: + en: 2804a96e88857b16 + zh: fe20dc0fb9962785 +/deepseek-ai-dsh-headless/use-this-package/when-to-use-it: + en: 5262b93dcef0d489 + zh: 1638965b2aabcd38 +/deepseek-ai-dsh-headless/use-this-package/help-and-task-errors: + en: ecd381558cf7b0e7 + zh: a351efbf4a1a2ac5 +/deepseek-ai-dsh-headless/understand-the-implementation: + en: be1b73a6d0ee3902 + zh: bdba099685d68b27 +/deepseek-ai-dsh-headless/understand-the-implementation/run-flow: + en: 2f2adf0c346c6c1b + zh: f1e988c7e597a852 +/deepseek-ai-dsh-headless/understand-the-implementation/patch-surface-over-base: + en: a22752c052878579 + zh: 1e42c946d8673eeb +/deepseek-ai-dsh-headless/understand-the-implementation/exit-mapping: + en: cc6c485a42d40d28 + zh: c57775d9319d8dfd +/deepseek-ai-dsh-headless/understand-the-implementation/source-map: + en: 20a37f62e58b3ddb + zh: ede1fb8cfbae7a0e +/deepseek-ai-dsh-headless/understand-the-implementation/invariant-ownership: + en: 329f170dec4b2279 + zh: bb40f8beda5b3a1c +/deepseek-ai-dsh-headless/further-exploration: + en: 65aebf0f8ab3047c + zh: 85616d3859073c4b +/deepseek-ai-dsh-headless/model-experience: + en: c5a0991833f64dd7 + zh: 46f9feb255778f11 +/deepseek-ai-dsh-headless/model-experience/kv-cache-effect: + en: 0b0f74b412c7c6d8 + zh: 6e8f918d0c4bf342 +/deepseek-ai-dsh-headless/known-limitations-and-deferred-work: + en: b2df65836d53ba03 + zh: 82a56dc1255a0c3b +/deepseek-ai-dsh-headless/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/bundle/sdk-app/README.i18n.yaml b/packages/bundle/sdk-app/README.i18n.yaml index 1563c25b1f..14acc275d8 100644 --- a/packages/bundle/sdk-app/README.i18n.yaml +++ b/packages/bundle/sdk-app/README.i18n.yaml @@ -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 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 packages/bundle/sdk-app/README.md -README.md: 6d6106e6dd803cee5c51cee0a38f80705986ddfa -README.zh.md: 9de1fb6e17f3f83b7d8c2acbf87154b1cdfea38f +/: + en: 8148fef9eb6f852e + zh: f4419bed153c9760 +/deepseek-ai-dsh-sdk-app: + en: 1393fc0c2c6cf60c + zh: 61e2f2c46463101b +/deepseek-ai-dsh-sdk-app/summary: + en: f96841d96dc95a30 + zh: 88aa3e92ae1deb9c +/deepseek-ai-dsh-sdk-app/table-of-contents: + en: 4e53164159b5ce41 + zh: 89582dc0294d0776 +/deepseek-ai-dsh-sdk-app/use-this-package: + en: 465be8e510a86913 + zh: 07e2e1efba1d108b +/deepseek-ai-dsh-sdk-app/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-sdk-app/model-experience/sdk-coding-agent-persona: + en: af149b1e7ed0a5fc + zh: fe483822d03deddb +/deepseek-ai-dsh-sdk-app/model-experience/sdk-coding-agent-persona/what-the-model-sees: + en: 895f2c7fc9357d23 + zh: d2e6455f4adcf7d3 +/deepseek-ai-dsh-sdk-app/model-experience/sdk-coding-agent-persona/token-effect: + en: 371d28831239e0a8 + zh: 57595359ff30a259 +/deepseek-ai-dsh-sdk-app/model-experience/sdk-coding-agent-persona/kv-cache-effect: + en: 5b0e33295fb90e19 + zh: 4d48ca75bb677202 +/deepseek-ai-dsh-sdk-app/known-limitations-and-deferred-work: + en: 416e2793f9786480 + zh: 05cc4fd289d0185d +/deepseek-ai-dsh-sdk-app/known-limitations-and-deferred-work/dev-note: + en: 8bc6c774f783517d + zh: b1ae7ae9832b2444 diff --git a/packages/bundle/sdk-minimal/README.i18n.yaml b/packages/bundle/sdk-minimal/README.i18n.yaml index 776c9aab80..0aa6dc1565 100644 --- a/packages/bundle/sdk-minimal/README.i18n.yaml +++ b/packages/bundle/sdk-minimal/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/bundle/sdk-minimal/README.md -README.md: 2632bf9bd949bb37a01b963f13fb96f341eaea28 -README.zh.md: 7aa26c9e895dea4b11d06416f5eca815ef187655 +/: + en: ae5bdac5add26503 + zh: 93cd37d41c05fc9c +/deepseek-ai-dsh-sdk-minimal: + en: 807c43eedba7d53e + zh: 9f1efe5d6ac393f7 +/deepseek-ai-dsh-sdk-minimal/summary: + en: 1885da605fd804b8 + zh: 742cbfdd2a4a224b +/deepseek-ai-dsh-sdk-minimal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sdk-minimal/use-this-package: + en: 107f4613e077f9ad + zh: e7d89433a98b296b +/deepseek-ai-dsh-sdk-minimal/understand-the-implementation: + en: 281b8d6f1aa0e526 + zh: 070c2a66b1b2feee +/deepseek-ai-dsh-sdk-minimal/understand-the-implementation/source-map: + en: d992e946f4928fa3 + zh: 46d6b3d1aabdc3f4 +/deepseek-ai-dsh-sdk-minimal/further-exploration: + en: 6909fc128c321153 + zh: 7d2a0866efdc5a69 +/deepseek-ai-dsh-sdk-minimal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-sdk-minimal/model-experience/minimal-coding-agent-composition: + en: bd87e16b0c6e0506 + zh: c8ee5e3b4578754e +/deepseek-ai-dsh-sdk-minimal/model-experience/minimal-coding-agent-composition/what-the-model-sees: + en: fa9af6239831a097 + zh: 6951e08b165cb282 +/deepseek-ai-dsh-sdk-minimal/model-experience/minimal-coding-agent-composition/token-effect: + en: 65613fb41fcc3151 + zh: fc20a732aca8282c +/deepseek-ai-dsh-sdk-minimal/model-experience/minimal-coding-agent-composition/kv-cache-effect: + en: 904ae09b5fdb87c1 + zh: de6fcaaa12bd9733 +/deepseek-ai-dsh-sdk-minimal/known-limitations-and-deferred-work: + en: 8f74b1b4f39eda83 + zh: af96ec4cb42810c5 +/deepseek-ai-dsh-sdk-minimal/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/bundle/web-app/README.i18n.yaml b/packages/bundle/web-app/README.i18n.yaml index 74fe2fd26a..a894043050 100644 --- a/packages/bundle/web-app/README.i18n.yaml +++ b/packages/bundle/web-app/README.i18n.yaml @@ -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 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 packages/bundle/web-app/README.md -README.md: 9fd7cda152a2ca50eca253c54feb97b01d35e0ff -README.zh.md: e07e0556c1bd8b0869253add1ae591ce1c060ee0 +/: + en: af2e4e5296596e8f + zh: 70c0b5ac93209d00 +/deepseek-ai-dsh-web-app: + en: f4da95d498221fcd + zh: 6cc704e7aa6f376d +/deepseek-ai-dsh-web-app/summary: + en: 0ebb6c3ca8c0a84e + zh: 4d85e02c769ddae0 +/deepseek-ai-dsh-web-app/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web-app/use-this-package: + en: 3bd37b85139d2fa7 + zh: ba86c807eb83866e +/deepseek-ai-dsh-web-app/use-this-package/starting-the-web-gui: + en: b7ab01cfe9fed40f + zh: 23703ab7727c3ab5 +/deepseek-ai-dsh-web-app/use-this-package/configuration: + en: dc9845451198ddc8 + zh: 5e8de50c7e8a059a +/deepseek-ai-dsh-web-app/use-this-package/lan-access-and-trusted-hosts: + en: 2522c806db384ddc + zh: 7e96f11194af9f9f +/deepseek-ai-dsh-web-app/use-this-package/running-over-ssh: + en: 1fe96dde34f21b23 + zh: 5689c4f4186805c1 +/deepseek-ai-dsh-web-app/use-this-package/per-session-agent-setup: + en: ccd6fc264b51e44b + zh: 3265c68477a89ec9 +/deepseek-ai-dsh-web-app/understand-the-implementation: + en: 4eb00d95238e3b92 + zh: 0d6ca9e1a3e7db84 +/deepseek-ai-dsh-web-app/understand-the-implementation/patch-semantics: + en: f0078127aa8dd273 + zh: c954c137599b486f +/deepseek-ai-dsh-web-app/understand-the-implementation/readiness: + en: 973128fd346869df + zh: 54e6792f9f82a192 +/deepseek-ai-dsh-web-app/understand-the-implementation/lan-trust-sampling: + en: b5ed8ff0056ca9da + zh: fdc1fa4f14cb00b3 +/deepseek-ai-dsh-web-app/understand-the-implementation/source-map: + en: 0d08e95f0a5543cb + zh: 5a3e8e4102678cb7 +/deepseek-ai-dsh-web-app/understand-the-implementation/invariant-ownership: + en: 34767bb4c0471622 + zh: e6d76e7c7a0b9ce8 +/deepseek-ai-dsh-web-app/further-exploration: + en: f81694f7424e2988 + zh: 6643f9227039e228 +/deepseek-ai-dsh-web-app/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context: + en: e6febc53efe0f51d + zh: 9177816a8678d65d +/deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/what-the-model-sees: + en: 359b949dd483477f + zh: 1476006614a82282 +/deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/token-effect: + en: 908fc84d6849a830 + zh: 56fe5e418bab60ba +/deepseek-ai-dsh-web-app/model-experience/harness-source-and-web-surface-context/kv-cache-effect: + en: da0f568d6d661c5e + zh: 606919b7d37c95bf +/deepseek-ai-dsh-web-app/known-limitations-and-deferred-work: + en: fead2f7bcd17e1ab + zh: 80949c203c0a0732 +/deepseek-ai-dsh-web-app/known-limitations-and-deferred-work/dev-note: + en: 3f81b4f3beb74a0d + zh: 2e377ca40822d093 diff --git a/packages/client/README.i18n.yaml b/packages/client/README.i18n.yaml index b7d80f9227..bedab0a674 100644 --- a/packages/client/README.i18n.yaml +++ b/packages/client/README.i18n.yaml @@ -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 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 packages/client/README.md -README.md: 8a5f789a4ee6343e00ee2b9cdc68d6bf7e7f8d79 -README.zh.md: ae5dbb237f504ca0cd66a8105dd772493b356326 +/: + en: 8d88d189ae9b47b5 + zh: c228c9f1732419ad +/client-web-gui-browser-half: + en: 0b0e5d73f258a814 + zh: 5705a9605c112c44 +/client-web-gui-browser-half/summary: + en: 43e9fd5c8fbcb676 + zh: 52076d2e78c5d4c1 +/client-web-gui-browser-half/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/client-web-gui-browser-half/packages: + en: 107e62fc362740c8 + zh: b1361ab4ed38541a +/client-web-gui-browser-half/related-documentation: + en: 598d07b07449128f + zh: e8c40708ac0e603e +/client-web-gui-browser-half/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/client/connection/README.i18n.yaml b/packages/client/connection/README.i18n.yaml index fbc282a42b..2b327002f9 100644 --- a/packages/client/connection/README.i18n.yaml +++ b/packages/client/connection/README.i18n.yaml @@ -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 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 packages/client/connection/README.md -README.md: e50f4fb6838ae27b545bd2b3c4683224f7eb37c9 -README.zh.md: 1bf0733bd660049a5b99a7e7966d65121b0dea3f +/: + en: 13b131457d03a224 + zh: 6dedd0706d5ffc0a +/deepseek-ai-dsh-client-connection: + en: 142fb403b92c8af8 + zh: bb52a8ccf7ca4402 +/deepseek-ai-dsh-client-connection/summary: + en: a83b5e9fd1968062 + zh: ac68628e185a4bff +/deepseek-ai-dsh-client-connection/table-of-contents: + en: 18792bf2fb4f8030 + zh: 84c63acc7e0099ae +/deepseek-ai-dsh-client-connection/use-this-package: + en: 13b54969ff1d00a4 + zh: 4d2ffff0445472ed +/deepseek-ai-dsh-client-connection/browser-authentication-and-request-trust: + en: ab52ef146d0b5b42 + zh: 6314d50cfe5683e1 +/deepseek-ai-dsh-client-connection/connection-generation: + en: db8757857a15c0c1 + zh: c8e15907461ef54e +/deepseek-ai-dsh-client-connection/model-experience: + en: 88bbc33fe9ae9df8 + zh: bfbab6d51b4abd40 +/deepseek-ai-dsh-client-connection/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-connection/known-limitations-and-deferred-work: + en: 2c964a7546604347 + zh: c30b59fc92a01c36 +/deepseek-ai-dsh-client-connection/known-limitations-and-deferred-work/dev-note: + en: c51db1312f6a43ef + zh: 7193ff08f53e3230 diff --git a/packages/client/file-upload/README.i18n.yaml b/packages/client/file-upload/README.i18n.yaml index 4422bb94d6..2867fd1467 100644 --- a/packages/client/file-upload/README.i18n.yaml +++ b/packages/client/file-upload/README.i18n.yaml @@ -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 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 packages/client/file-upload/README.md -README.md: e0c0d7637da0b426ebb5b4a0c6cb47d12784e0ed -README.zh.md: abdf965694f7ae62dd05a0192ffbc16e8678ec7d +/: + en: c983fa9f5976bac3 + zh: b3c2c2fdf19b461e +/deepseek-ai-dsh-client-file-upload: + en: a6c9f156174554e1 + zh: cd1a126905ad859b +/deepseek-ai-dsh-client-file-upload/summary: + en: 430b79a11643da11 + zh: 5fbab8d425b7f15a +/deepseek-ai-dsh-client-file-upload/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-file-upload/use-this-package: + en: 9d5bbf52599b0d00 + zh: 7907542ce1e34549 +/deepseek-ai-dsh-client-file-upload/understand-the-implementation: + en: da896ccc5ecbe207 + zh: f434a7572085ee1e +/deepseek-ai-dsh-client-file-upload/further-exploration: + en: ac94eb9da9ecc296 + zh: 25cc3362e2bea330 +/deepseek-ai-dsh-client-file-upload/model-experience: + en: a928c345333d4d93 + zh: 710172520aacfbe1 +/deepseek-ai-dsh-client-file-upload/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-file-upload/known-limitations-and-deferred-work: + en: 8592a9aab413e5dc + zh: ae12d9777eda0b63 +/deepseek-ai-dsh-client-file-upload/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/hmr/README.i18n.yaml b/packages/client/hmr/README.i18n.yaml index 95914cfd9d..7bde4169bb 100644 --- a/packages/client/hmr/README.i18n.yaml +++ b/packages/client/hmr/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/client/hmr/README.md -README.md: a0c658ea059dbd9f5b7862225baa0831218c4c9f -README.zh.md: 7f6b7d17b764f7506ae7f203436a648667ac21ab +/: + en: dbe480205dbca85a + zh: 850b3210c588960c +/deepseek-ai-dsh-client-hmr: + en: 3f8aceed1a3a4221 + zh: d48ff0e88eefa046 +/deepseek-ai-dsh-client-hmr/summary: + en: 4ea7a901735da086 + zh: 77fd5083661ceff5 +/deepseek-ai-dsh-client-hmr/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-hmr/use-this-package: + en: be71f36f66f316cb + zh: 63cd12c0ad40bd88 +/deepseek-ai-dsh-client-hmr/use-this-package/starting-the-reload-chain: + en: e1c5d886bc7da5bc + zh: da8f0c309e178b74 +/deepseek-ai-dsh-client-hmr/use-this-package/what-a-reload-does: + en: d3ac81d404b2d6c6 + zh: a9f9ad9dfa685ac7 +/deepseek-ai-dsh-client-hmr/use-this-package/configuration: + en: 8b4b8f929cf0ba25 + zh: 626779afc1132e4f +/deepseek-ai-dsh-client-hmr/use-this-package/observing-success: + en: 751c7ff7f8a4e70d + zh: 34da8830a069f7f5 +/deepseek-ai-dsh-client-hmr/understand-the-implementation: + en: e5cdd3f10a344b10 + zh: 70c8efd12531039d +/deepseek-ai-dsh-client-hmr/understand-the-implementation/design-concept: + en: 90f8d06719b177bd + zh: c5a770ddcacc0f87 +/deepseek-ai-dsh-client-hmr/understand-the-implementation/the-browser-swap: + en: 269ff43822114dc8 + zh: 8604c39c8050858a +/deepseek-ai-dsh-client-hmr/understand-the-implementation/cascade-and-self-reload: + en: 191b6aa1dfd7de08 + zh: f7a4e65bea2e2bd8 +/deepseek-ai-dsh-client-hmr/understand-the-implementation/failure-policy: + en: 5c9939cd350c136d + zh: 020159ec196f378f +/deepseek-ai-dsh-client-hmr/understand-the-implementation/source-map: + en: 444a1c0d4b927be5 + zh: b16ef293021b88c3 +/deepseek-ai-dsh-client-hmr/further-exploration: + en: 684aff651f59a12d + zh: 671bcfc50918508e +/deepseek-ai-dsh-client-hmr/model-experience: + en: b8a047df4bc523aa + zh: 2cec909a451a8929 +/deepseek-ai-dsh-client-hmr/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-hmr/known-limitations-and-deferred-work: + en: 0003a3d701a7f7b1 + zh: 9be135531742cf86 +/deepseek-ai-dsh-client-hmr/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/client/locale/README.i18n.yaml b/packages/client/locale/README.i18n.yaml index 647303d0b2..61fd606960 100644 --- a/packages/client/locale/README.i18n.yaml +++ b/packages/client/locale/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/client/locale/README.md -README.md: a21f61dd931204f990e6865419ac19476c957ff4 -README.zh.md: c93b555f96e459ddad56faaf46d267cf319218ad +/: + en: d2aaa955e01c2679 + zh: 9d264cf8be1536cf +/deepseek-ai-dsh-client-locale: + en: 9365090d78467dea + zh: 74b6fbb9769d795f +/deepseek-ai-dsh-client-locale/summary: + en: a548ff3095e8d7d8 + zh: fec6ad47291018f8 +/deepseek-ai-dsh-client-locale/table-of-contents: + en: d152484eb41ac6b4 + zh: bda879a892f240f0 +/deepseek-ai-dsh-client-locale/use-this-package: + en: 7fedfbcbc3ad8cea + zh: e29ba5230e0b9ecb +/deepseek-ai-dsh-client-locale/use-this-package/choosing-a-language: + en: 8527d77583824eff + zh: 2ac53ced0a32ba19 +/deepseek-ai-dsh-client-locale/use-this-package/registering-a-dictionary: + en: 9b2fcfa8cae8dc4b + zh: 293012a4d364ef59 +/deepseek-ai-dsh-client-locale/use-this-package/resolving-package-text: + en: 3b63e84fe0fdf8f4 + zh: e97b5d1b92dff7ec +/deepseek-ai-dsh-client-locale/use-this-package/registering-a-language-pack: + en: aa4e9c70523339cc + zh: 3359eddc4e9ef15e +/deepseek-ai-dsh-client-locale/use-this-package/what-the-host-half-does: + en: 8fa91333f7fc3387 + zh: 789a9cbb3eace3b0 +/deepseek-ai-dsh-client-locale/understand-the-implementation: + en: 288d8db39f9acfc5 + zh: d65cf2ffae8ad35c +/deepseek-ai-dsh-client-locale/understand-the-implementation/design-concept: + en: c2e0ab8bb6bcb26a + zh: 508dec4db2c0fde6 +/deepseek-ai-dsh-client-locale/understand-the-implementation/preference-resolution: + en: 4bc9dffa4629f537 + zh: f51633c658b8d25b +/deepseek-ai-dsh-client-locale/understand-the-implementation/dictionary-lookup: + en: f8dcc4035830e738 + zh: 8452ac63ee148c61 +/deepseek-ai-dsh-client-locale/understand-the-implementation/source-map: + en: a382e032c06ced3f + zh: 419cb5f60b075388 +/deepseek-ai-dsh-client-locale/further-exploration: + en: b6986484dd8ae2c5 + zh: 003635bfa6ea1b9d +/deepseek-ai-dsh-client-locale/model-experience: + en: 209321ba2d2e6710 + zh: 21deb6c973f69b66 +/deepseek-ai-dsh-client-locale/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-locale/known-limitations-and-deferred-work: + en: 500ede048ef44c6a + zh: f741fae55b29a627 +/deepseek-ai-dsh-client-locale/known-limitations-and-deferred-work/dev-note: + en: 82fb34d8a128a0ac + zh: fa3f40c900032aae diff --git a/packages/client/modules/README.i18n.yaml b/packages/client/modules/README.i18n.yaml index d44443a96f..4ab13cc6e9 100644 --- a/packages/client/modules/README.i18n.yaml +++ b/packages/client/modules/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/client/modules/README.md -README.md: 3388eb2ae421b303df6709f0bfc656fe67e3a866 -README.zh.md: 3cbc600ee5ed211640070773efb72f58b91d4669 +/: + en: 97d39db1617684ea + zh: de11ba354583a044 +/deepseek-ai-dsh-client-modules: + en: ee2f6f3ccafafa13 + zh: 3a37d4c4b69708dd +/deepseek-ai-dsh-client-modules/summary: + en: ab7ece5891dd6289 + zh: b9b5baab328be517 +/deepseek-ai-dsh-client-modules/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-modules/use-this-package: + en: 25f536f156ec0bcc + zh: a522355b3e0edeae +/deepseek-ai-dsh-client-modules/use-this-package/declaring-a-client-plugin: + en: d4a7f865f4593724 + zh: 4313eb8fe9cd5c98 +/deepseek-ai-dsh-client-modules/use-this-package/what-the-browser-loads: + en: 1383d68472b3c057 + zh: 94dd7d9abbdbccf3 +/deepseek-ai-dsh-client-modules/use-this-package/live-plugin-composition: + en: 45740a56e931d094 + zh: b3362af77c804459 +/deepseek-ai-dsh-client-modules/use-this-package/sharing-modules: + en: 0aaf0693db8bb203 + zh: 9f4738cdc6b55c26 +/deepseek-ai-dsh-client-modules/use-this-package/build-requirements: + en: b6a4d3b901c89efe + zh: 615b5f3eec41f281 +/deepseek-ai-dsh-client-modules/understand-the-implementation: + en: 7ab11d2c2bdc6eaa + zh: 54c3c9091cf59711 +/deepseek-ai-dsh-client-modules/understand-the-implementation/design-concept: + en: 49dcadc166c2d06e + zh: bbf67c6dc47f4ead +/deepseek-ai-dsh-client-modules/understand-the-implementation/lazy-cjs-model: + en: 6d16b74acb333e3b + zh: fcb3a20cc8c39e4a +/deepseek-ai-dsh-client-modules/understand-the-implementation/incremental-composition: + en: 1b54c654b3f7344d + zh: c20d3499b51f0b4d +/deepseek-ai-dsh-client-modules/understand-the-implementation/boot-manifest-injection: + en: 253d9f265cd83ed0 + zh: 9d0f8df84d9d3ac9 +/deepseek-ai-dsh-client-modules/understand-the-implementation/entry-ownership: + en: ae59769034d692fa + zh: f71914d6f39b033a +/deepseek-ai-dsh-client-modules/understand-the-implementation/source-map: + en: fabe9db8c44e2d90 + zh: 89ca94a8161f57ed +/deepseek-ai-dsh-client-modules/further-exploration: + en: 7e5b283efe4f1d16 + zh: 79472b64a0d759fe +/deepseek-ai-dsh-client-modules/model-experience: + en: abb2fc0416e1482c + zh: 0e8a913d424a0c28 +/deepseek-ai-dsh-client-modules/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-modules/known-limitations-and-deferred-work: + en: d0908712f037c479 + zh: 14034e5df3c34e7f +/deepseek-ai-dsh-client-modules/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/client/resources/README.i18n.yaml b/packages/client/resources/README.i18n.yaml index 87b81dcc5b..1133f89a1a 100644 --- a/packages/client/resources/README.i18n.yaml +++ b/packages/client/resources/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/client/resources/README.md -README.md: 6b5afc82230be6930c41a01a584aeed39f596c37 -README.zh.md: b56ee6bcdefa9311b284386ab2be9f2bc5d1dcfc +/: + en: cba471bd978172bc + zh: 5b340d07a353981c +/deepseek-ai-dsh-client-resources: + en: c76d57811976a1f3 + zh: e80bb1fe3ff00a3e +/deepseek-ai-dsh-client-resources/summary: + en: fa2401e27bf7e4b7 + zh: 0c03d44bf2084180 +/deepseek-ai-dsh-client-resources/table-of-contents: + en: 5ebb8e58ef105ee0 + zh: 78123884b88ec480 +/deepseek-ai-dsh-client-resources/use-this-package: + en: 1dedca736c288345 + zh: afcd8458cc28af08 +/deepseek-ai-dsh-client-resources/use-this-package/read-a-resource: + en: 0cc9ab6867cd8fa3 + zh: ebce7636fddfb344 +/deepseek-ai-dsh-client-resources/use-this-package/provide-a-protocol: + en: 1b08ccec8adcd7dd + zh: b12a6d94ab0cfc71 +/deepseek-ai-dsh-client-resources/use-this-package/hold-a-resource-open: + en: 7ee907c3a9abbad8 + zh: 4abf10503ff2ed51 +/deepseek-ai-dsh-client-resources/understand-the-implementation: + en: 4047863df464d986 + zh: 7fe00ab7e4a1d37a +/deepseek-ai-dsh-client-resources/understand-the-implementation/lifecycle: + en: ea2ad0aaff232650 + zh: 49f4a77f70179f03 +/deepseek-ai-dsh-client-resources/understand-the-implementation/failures: + en: bf3b0512cb35dc18 + zh: 50b7469f78ca3585 +/deepseek-ai-dsh-client-resources/model-experience: + en: ff167f1f3cf373b0 + zh: ed8871bef6f705e2 +/deepseek-ai-dsh-client-resources/model-experience/kv-cache-effect: + en: 7fff384eb8a62c5a + zh: 347f7f5aa8b6c1c4 +/deepseek-ai-dsh-client-resources/known-limitations-and-deferred-work: + en: c79b85b72a55cdd4 + zh: 612c401b31c3a136 +/deepseek-ai-dsh-client-resources/known-limitations-and-deferred-work/dev-note: + en: 9bbb90f2302b50e0 + zh: f16c794374fc1079 diff --git a/packages/client/store/README.i18n.yaml b/packages/client/store/README.i18n.yaml index fa3d4f2c8d..27ca8bddc8 100644 --- a/packages/client/store/README.i18n.yaml +++ b/packages/client/store/README.i18n.yaml @@ -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 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 packages/client/store/README.md -README.md: 0d4525ab6eb2a58bdea89673b96f9aaf5e0e2cf8 -README.zh.md: 1d5548ab380458d1c20ef6dad82ae232ec1f65d3 +/: + en: f9e6c1b15e80658f + zh: 9127e32b7e5351d0 +/deepseek-ai-dsh-client-store: + en: 1b16aed0269bb07f + zh: e37d3ba40aa82baf +/deepseek-ai-dsh-client-store/summary: + en: 8498ea148f51b9f9 + zh: 1009f009d2ebe91d +/deepseek-ai-dsh-client-store/table-of-contents: + en: b4683d2a53256fda + zh: 4e65ff63dc8c48fe +/deepseek-ai-dsh-client-store/model-experience: + en: 444c8fcde6e159d8 + zh: dc855e149c636bb4 +/deepseek-ai-dsh-client-store/model-experience/kv-cache-effect: + en: ed7581186c5b5a33 + zh: a0efffb2631c1eec +/deepseek-ai-dsh-client-store/known-limitations-and-deferred-work: + en: 3190cd5b744025fe + zh: f559c3316b6a7da4 +/deepseek-ai-dsh-client-store/known-limitations-and-deferred-work/dev-note: + en: dd767840e33344a1 + zh: 0e06a491e39acf38 diff --git a/packages/client/ui-agent-preset/README.i18n.yaml b/packages/client/ui-agent-preset/README.i18n.yaml index 4b97f37141..4b8d23d379 100644 --- a/packages/client/ui-agent-preset/README.i18n.yaml +++ b/packages/client/ui-agent-preset/README.i18n.yaml @@ -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 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 packages/client/ui-agent-preset/README.md -README.md: f529c62f16873ce7b10fce70907f56630b133bdb -README.zh.md: 281a667980c66ca90c4180b5ae6bd176d34568f4 +/: + en: 03dc41b8fb76229e + zh: a66439c4378fc6fc +/deepseek-ai-dsh-client-ui-agent-preset: + en: e1743eaa8f8847d0 + zh: 8cf1ba5beb7ad8ed +/deepseek-ai-dsh-client-ui-agent-preset/summary: + en: 405fc7224ffd6c97 + zh: 4ff5930a4c5bc64a +/deepseek-ai-dsh-client-ui-agent-preset/table-of-contents: + en: d152484eb41ac6b4 + zh: b3ad7867f23dad1c +/deepseek-ai-dsh-client-ui-agent-preset/use-this-package: + en: eb4171068bfe0915 + zh: 7992c69bc30d1929 +/deepseek-ai-dsh-client-ui-agent-preset/understand-the-implementation: + en: 28a422a4be17b4f9 + zh: 92c1695c078b861c +/deepseek-ai-dsh-client-ui-agent-preset/further-exploration: + en: bbae8d79844bc481 + zh: 4302107fd1f460e6 +/deepseek-ai-dsh-client-ui-agent-preset/model-experience: + en: ff77436515de40ff + zh: 6c6a23f85ba318bc +/deepseek-ai-dsh-client-ui-agent-preset/model-experience/kv-cache-effect: + en: 713c6916c3dd7360 + zh: 9c582f94b926d51b +/deepseek-ai-dsh-client-ui-agent-preset/known-limitations-and-deferred-work: + en: 2c5e994e86b1ae4a + zh: 8bc5a90d3a2133ba +/deepseek-ai-dsh-client-ui-agent-preset/known-limitations-and-deferred-work/dev-note: + en: 6ce953763f1dc0f0 + zh: 2d8cabb28ccd151b diff --git a/packages/client/ui-approval/README.i18n.yaml b/packages/client/ui-approval/README.i18n.yaml index d8a94812cb..167ac6479d 100644 --- a/packages/client/ui-approval/README.i18n.yaml +++ b/packages/client/ui-approval/README.i18n.yaml @@ -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 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 packages/client/ui-approval/README.md -README.md: 1d5a4a56830c34693ee8cc93c6805ec8dd9a8191 -README.zh.md: f5f932ed59834cd9b805700fa58dd0f552bc8454 +/: + en: a16f3a25592b9a2d + zh: 6be5e99282ce23d9 +/deepseek-ai-dsh-client-ui-approval: + en: b2f2246f0d0ce69c + zh: e4919920818c09b5 +/deepseek-ai-dsh-client-ui-approval/summary: + en: 8d6c7c6e63f849f6 + zh: d89fa273e30b99d3 +/deepseek-ai-dsh-client-ui-approval/table-of-contents: + en: b4683d2a53256fda + zh: 4e65ff63dc8c48fe +/deepseek-ai-dsh-client-ui-approval/model-experience: + en: 8161dce49e9f899c + zh: a17401e1e78ba6be +/deepseek-ai-dsh-client-ui-approval/model-experience/kv-cache-effect: + en: adf7112e0691b89e + zh: 14eeddcff985119f +/deepseek-ai-dsh-client-ui-approval/known-limitations-and-deferred-work: + en: 158f435625e41ca9 + zh: 9d58169aaf6c7ed7 +/deepseek-ai-dsh-client-ui-approval/known-limitations-and-deferred-work/dev-note: + en: 240c92ce5e544116 + zh: 5bfae598cc20a3af diff --git a/packages/client/ui-attachment/README.i18n.yaml b/packages/client/ui-attachment/README.i18n.yaml index a3dcf88ee8..b4d276c42f 100644 --- a/packages/client/ui-attachment/README.i18n.yaml +++ b/packages/client/ui-attachment/README.i18n.yaml @@ -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 packages/client/ui-attachment/README.md -README.md: af2ed79cc2ede546db06187df4750b9d0fa698dd -README.zh.md: 64d12869c5038ceb19675d554f9055411cfac433 +/: + en: 414cbe20f39f7a82 + zh: f56ebf03129a29b8 +/deepseek-ai-dsh-client-ui-attachment: + en: 61096ced1318bcee + zh: 0682d3d7453659fd +/deepseek-ai-dsh-client-ui-attachment/summary: + en: f36aa7a85597dd66 + zh: f7e87849791fe89a +/deepseek-ai-dsh-client-ui-attachment/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-attachment/use-this-package: + en: 15cdd9d52dcc71b8 + zh: 53933fbbf5d39100 +/deepseek-ai-dsh-client-ui-attachment/use-this-package/draft-attachments: + en: a77c8ec48e219aec + zh: 756d4fe881403006 +/deepseek-ai-dsh-client-ui-attachment/use-this-package/message-images-and-the-lightbox: + en: 8b3d7729152d8060 + zh: 815f932ccc9653f5 +/deepseek-ai-dsh-client-ui-attachment/use-this-package/drop-overlay: + en: 836a62c8f73366ac + zh: 35da7836eaf68a67 +/deepseek-ai-dsh-client-ui-attachment/understand-the-implementation: + en: 415bd2b09bb84b6b + zh: 2e49a39fb3957b4f +/deepseek-ai-dsh-client-ui-attachment/further-exploration: + en: c7d27d71d31227da + zh: e07294f4b0b1ed66 +/deepseek-ai-dsh-client-ui-attachment/model-experience: + en: 25566605d7b38667 + zh: 927d3ea272893296 +/deepseek-ai-dsh-client-ui-attachment/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-attachment/known-limitations-and-deferred-work: + en: 9a16cb4f174464cf + zh: 3de4b8288a74c594 +/deepseek-ai-dsh-client-ui-attachment/known-limitations-and-deferred-work/dev-note: + en: a06a37a39a68c325 + zh: d465458aa4406397 diff --git a/packages/client/ui-brand-official/README.i18n.yaml b/packages/client/ui-brand-official/README.i18n.yaml index e01d15ad30..565a544c51 100644 --- a/packages/client/ui-brand-official/README.i18n.yaml +++ b/packages/client/ui-brand-official/README.i18n.yaml @@ -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 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 packages/client/ui-brand-official/README.md -README.md: f8687047ca3b2a88d4fb2ae36a27819852df5ee9 -README.zh.md: e23b0c59720bbd45285f057aa8edf967e3f019c2 +/: + en: a031cd88e552dc89 + zh: 76c1af2393cb6983 +/deepseek-ai-dsh-client-ui-brand-official: + en: 7cee1be833cea807 + zh: 9953e1b38cb23d34 +/deepseek-ai-dsh-client-ui-brand-official/summary: + en: cb6bf0a4eabd271b + zh: 181cf091ff44c194 +/deepseek-ai-dsh-client-ui-brand-official/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-brand-official/use-this-package: + en: 716dc268f98996db + zh: 7372a67ef81a0d5e +/deepseek-ai-dsh-client-ui-brand-official/use-this-package/choosing-the-profile: + en: 3f3f96d6adf98193 + zh: 0b8691656a8532a0 +/deepseek-ai-dsh-client-ui-brand-official/use-this-package/replacing-the-brand: + en: 6a923aa630d01d65 + zh: 5df0c24eebd9d0d0 +/deepseek-ai-dsh-client-ui-brand-official/understand-the-implementation: + en: 4e4aa617edd7f4ad + zh: ea4e2d6d4a39535e +/deepseek-ai-dsh-client-ui-brand-official/further-exploration: + en: be80cff9a5507319 + zh: bbf10393d289e692 +/deepseek-ai-dsh-client-ui-brand-official/model-experience: + en: 618008c7641070e7 + zh: 7233febb4d92ccfb +/deepseek-ai-dsh-client-ui-brand-official/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-ui-brand-official/known-limitations-and-deferred-work: + en: 89e2b4bd095a0265 + zh: a002f0c8a60267ad +/deepseek-ai-dsh-client-ui-brand-official/known-limitations-and-deferred-work/dev-note: + en: e368635c2e69b577 + zh: 6b0fcfc1e089e5d6 diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 62894f8e8f..c421ea42bd 100644 --- a/packages/client/ui-chat/README.i18n.yaml +++ b/packages/client/ui-chat/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/client/ui-chat/README.md -README.md: f6924e91b24d6da9bae7722734dd8c7455145abf -README.zh.md: 0834d1f556a0757dd40fd5d0cdd7fb28c3f8516b +/: + en: d88f75fc0178ba53 + zh: 52bc7ae9551ab1cf +/deepseek-ai-dsh-client-ui-chat: + en: a0be18d7053df6b0 + zh: 28c76e2cc32b7494 +/deepseek-ai-dsh-client-ui-chat/summary: + en: fba5b2fb8080e2dd + zh: 32c337123b7dfbcb +/deepseek-ai-dsh-client-ui-chat/table-of-contents: + en: 41cd21266011d571 + zh: 3172d1a2acbb27b7 +/deepseek-ai-dsh-client-ui-chat/reference-previews: + en: 3fda3d75483ce7c1 + zh: 4d96ba654f70c021 +/deepseek-ai-dsh-client-ui-chat/hidden-chat-rows: + en: 4e4ab65647a6dbfb + zh: 2ec5cd425c13440a +/deepseek-ai-dsh-client-ui-chat/command-and-failure-rows: + en: e2e86d9eec9130b5 + zh: 6ee831c996670630 +/deepseek-ai-dsh-client-ui-chat/turn-token-usage: + en: 29346bd0f9a5ff51 + zh: 54dbed55f67aeecd +/deepseek-ai-dsh-client-ui-chat/completed-turn-footer: + en: b4cd36e7ab91281e + zh: 8ccf412b9dde61d5 +/deepseek-ai-dsh-client-ui-chat/turn-process-folding: + en: 0ca3e8c4eab1ca78 + zh: 1a1c71bab151eb7d +/deepseek-ai-dsh-client-ui-chat/grouped-rendering: + en: cc6718a9ff761114 + zh: d734fc73c1b77074 +/deepseek-ai-dsh-client-ui-chat/scroll-ownership: + en: 69b021c5a5d8b5a7 + zh: 091ae7986c7a8a20 +/deepseek-ai-dsh-client-ui-chat/model-experience: + en: c17b4dd43a61c569 + zh: f7414309810c3a08 +/deepseek-ai-dsh-client-ui-chat/model-experience/kv-cache-effect: + en: 15a7151ff9268f15 + zh: 6eae68c718be579b +/deepseek-ai-dsh-client-ui-chat/known-limitations-and-deferred-work: + en: 69dd0f47c88ef020 + zh: 0ed3b048ed0c96d5 +/deepseek-ai-dsh-client-ui-chat/known-limitations-and-deferred-work/dev-note: + en: b8b7eeb4ae675d2a + zh: fbe7022074ba81b9 diff --git a/packages/client/ui-chat/src/client/conversation-nodes/README.i18n.yaml b/packages/client/ui-chat/src/client/conversation-nodes/README.i18n.yaml index bdc5022dce..3017e3eaed 100644 --- a/packages/client/ui-chat/src/client/conversation-nodes/README.i18n.yaml +++ b/packages/client/ui-chat/src/client/conversation-nodes/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/client/ui-chat/src/client/conversation-nodes/README.md -README.md: 12c63b54977d43120baae1f044675760b69303c9 -README.zh.md: 341c2826a1a2d070d314808f9a4ba6aff2f2378a +/: + en: d7bf1c268431c860 + zh: dec11c9713bb28de +/chat-conversation-node-rules: + en: 31db799cfabb71c0 + zh: dfcdaacbc093cbf6 +/chat-conversation-node-rules/summary: + en: 660130914d717369 + zh: 7e0161dbfe788e96 +/chat-conversation-node-rules/table-of-contents: + en: 84f7d8e6c5d73b94 + zh: 593e9ee2c70468be +/chat-conversation-node-rules/how-one-turn-becomes-a-transcript: + en: 4248ac4fbe0876ff + zh: 620c8eb9ea8e5a15 +/chat-conversation-node-rules/how-one-turn-becomes-a-transcript/a-complete-example: + en: 82d9651b9d284c1f + zh: ec1adc15b33a27cf +/chat-conversation-node-rules/how-one-turn-becomes-a-transcript/what-the-reader-sees: + en: 91b35cbebe8c2a1d + zh: a4fee6d7102bc874 +/chat-conversation-node-rules/whole-turn-folding: + en: 8db4991626210708 + zh: e18c8aa3cb434980 +/chat-conversation-node-rules/display-modes: + en: 42342a06ef189075 + zh: 1a554b50125fcdda +/chat-conversation-node-rules/display-modes/group-title-rules: + en: a6d29a5ea3fd2362 + zh: dbd07bf82cdd61b1 +/chat-conversation-node-rules/process-grouping: + en: 276a97b95610f5e8 + zh: 7627b2afb0a7c0f4 +/chat-conversation-node-rules/process-grouping/examples: + en: 2a550f7e04bce4b0 + zh: b8f95b687448cd77 +/chat-conversation-node-rules/activity-summaries: + en: 0e1861c354e73f98 + zh: 397ee5caa0b2e8be +/chat-conversation-node-rules/activity-summaries/category-counts: + en: 131811a8a12c9d81 + zh: f8a8c1e02a5787f8 +/chat-conversation-node-rules/activity-summaries/tool-name-classification: + en: a962c232f916bfff + zh: 2e80754623c3f14d +/chat-conversation-node-rules/activity-summaries/subagents-background-jobs-and-nested-calls: + en: e7796e7ba825c3d6 + zh: c377d9eab0a8869f +/chat-conversation-node-rules/activity-summaries/live-activity-and-detail: + en: d4256eadd2e9ba96 + zh: ff6eeb1187ac683a diff --git a/packages/client/ui-commands/README.i18n.yaml b/packages/client/ui-commands/README.i18n.yaml index 579f9d857b..90992a1a37 100644 --- a/packages/client/ui-commands/README.i18n.yaml +++ b/packages/client/ui-commands/README.i18n.yaml @@ -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 packages/client/ui-commands/README.md -README.md: 7fada747562ff15a96997d8bffe9aeb6f9a18fb5 -README.zh.md: 2f532cbd0f3d33e304074644cc6cb02b7151d3e1 +/: + en: e85ec1ccd1b80d98 + zh: 1272b2ae6abeabdc +/deepseek-ai-dsh-client-ui-commands: + en: 095001426d586338 + zh: 80dec4efefd726f7 +/deepseek-ai-dsh-client-ui-commands/summary: + en: 770b1f492ac735e7 + zh: 5602493729149219 +/deepseek-ai-dsh-client-ui-commands/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-commands/use-this-package: + en: 01adce72791579fa + zh: 70eb55a1529038e7 +/deepseek-ai-dsh-client-ui-commands/use-this-package/kinds-and-decorations: + en: 86841942f6989fbb + zh: 901557d3a5d0528e +/deepseek-ai-dsh-client-ui-commands/use-this-package/built-in-row-faces: + en: e96156be95ea87e3 + zh: f5350db26483ec9f +/deepseek-ai-dsh-client-ui-commands/use-this-package/attachment-carrying-submissions: + en: 4feecdbec0c3f39e + zh: 618944ecade8a3a2 +/deepseek-ai-dsh-client-ui-commands/understand-the-implementation: + en: 414c089a444b55bd + zh: be2f50a4675d8426 +/deepseek-ai-dsh-client-ui-commands/further-exploration: + en: 409c04f534d23de7 + zh: 165022d7a0a554eb +/deepseek-ai-dsh-client-ui-commands/model-experience: + en: 3ec197644f2fe6ce + zh: a06a6fe8909b064f +/deepseek-ai-dsh-client-ui-commands/model-experience/kv-cache-effect: + en: 08efc268737977ca + zh: 7772a59064ea4039 +/deepseek-ai-dsh-client-ui-commands/known-limitations-and-deferred-work: + en: cfce26d6a603cb7d + zh: 8332a8d1ad44abcf +/deepseek-ai-dsh-client-ui-commands/known-limitations-and-deferred-work/dev-note: + en: 2f5e19244ac6c305 + zh: e43b52ae5b4af798 diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 2cb7e9b81c..2dc34ab2f7 100644 --- a/packages/client/ui-conversation/README.i18n.yaml +++ b/packages/client/ui-conversation/README.i18n.yaml @@ -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 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 packages/client/ui-conversation/README.md -README.md: 4283d902f5be2328d08e7bd0d00c64b0835411e9 -README.zh.md: 72493ef348413c4051509cff245bcb665187b93a +/: + en: 0ca51f37788dcbdb + zh: 14d73c6bc8d4e17f +/deepseek-ai-dsh-client-ui-conversation: + en: 71d52109076d859d + zh: 8e63171fbd9bde48 +/deepseek-ai-dsh-client-ui-conversation/summary: + en: bac0bf0d7330f3b1 + zh: 84a895f4b26d8490 +/deepseek-ai-dsh-client-ui-conversation/table-of-contents: + en: 9c1c4905952fea5e + zh: d1506dd6fc1018d1 +/deepseek-ai-dsh-client-ui-conversation/conversation-assembly: + en: 8fb6c43d85343eab + zh: 501ec3f392b10898 +/deepseek-ai-dsh-client-ui-conversation/shell-and-standard-props: + en: 9e842e5f1e311b86 + zh: cb0103d380a52629 +/deepseek-ai-dsh-client-ui-conversation/temporary-composer-entries: + en: bb1244310f5c0382 + zh: 824b84077432b559 +/deepseek-ai-dsh-client-ui-conversation/model-experience: + en: e0a05b73ba3e4318 + zh: dc85ab8433bb4456 +/deepseek-ai-dsh-client-ui-conversation/model-experience/kv-cache-effect: + en: 9f4e0da7c8addf88 + zh: 1a33d9981af75643 +/deepseek-ai-dsh-client-ui-conversation/known-limitations-and-deferred-work: + en: 38d243630d0e4c38 + zh: a58cdc35b664020b +/deepseek-ai-dsh-client-ui-conversation/known-limitations-and-deferred-work/dev-note: + en: 48c7f1797012293f + zh: ec56b609a1b5fb9e diff --git a/packages/client/ui-deliverables/README.i18n.yaml b/packages/client/ui-deliverables/README.i18n.yaml index 4eda4bc0fc..e2b08f9975 100644 --- a/packages/client/ui-deliverables/README.i18n.yaml +++ b/packages/client/ui-deliverables/README.i18n.yaml @@ -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 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 packages/client/ui-deliverables/README.md -README.md: 786495d76098ce134ac378858c177cc498bd4c9f -README.zh.md: 9a1f000845ffab755ce23bd570cbe1a79b133676 +/: + en: 91a4da87e2e078ed + zh: 8d489c6cdf208c4d +/deepseek-ai-dsh-client-ui-deliverables: + en: baa21bacf9d87975 + zh: caf2b019a43f4009 +/deepseek-ai-dsh-client-ui-deliverables/summary: + en: a17b97d16803f911 + zh: ad80cf4bcb5a8018 +/deepseek-ai-dsh-client-ui-deliverables/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-deliverables/use-this-package: + en: 8f2baa441306ec63 + zh: f820ee1e37562f38 +/deepseek-ai-dsh-client-ui-deliverables/use-this-package/explicit-deliveries: + en: b303157d75338104 + zh: 4fecb7b404cd4dbd +/deepseek-ai-dsh-client-ui-deliverables/use-this-package/the-changed-files-card: + en: 96123b0577431778 + zh: b9cff6203a312f1b +/deepseek-ai-dsh-client-ui-deliverables/use-this-package/the-review-tab: + en: bb209da6b1a9818a + zh: 04615ec4955665e5 +/deepseek-ai-dsh-client-ui-deliverables/use-this-package/inline-code-links: + en: e36ccef8bf908ea4 + zh: 30e11327a55e5dfa +/deepseek-ai-dsh-client-ui-deliverables/understand-the-implementation: + en: 9c48cf102ec5109e + zh: 73cabaafdb3ded3f +/deepseek-ai-dsh-client-ui-deliverables/further-exploration: + en: 3922638061ea262b + zh: 1c776b249e84dc4f +/deepseek-ai-dsh-client-ui-deliverables/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-client-ui-deliverables/model-experience/clickable-file-reference-guidance: + en: eb244aa21a4e5210 + zh: e3450addfa19cea5 +/deepseek-ai-dsh-client-ui-deliverables/model-experience/clickable-file-reference-guidance/what-the-model-sees: + en: 627b3e8b57458c7a + zh: 8300f74182ff4508 +/deepseek-ai-dsh-client-ui-deliverables/model-experience/clickable-file-reference-guidance/token-effect: + en: 66bd094b37a29c22 + zh: e657d66ac6f95a22 +/deepseek-ai-dsh-client-ui-deliverables/model-experience/clickable-file-reference-guidance/kv-cache-effect: + en: 52626a05acc8b320 + zh: 6a8e62b0d47d5297 +/deepseek-ai-dsh-client-ui-deliverables/known-limitations-and-deferred-work: + en: f9d9c80025cac418 + zh: 90935a6c8c733686 +/deepseek-ai-dsh-client-ui-deliverables/known-limitations-and-deferred-work/dev-note: + en: a55f817f597aa646 + zh: aba9a91ecde566ab diff --git a/packages/client/ui-directory-picker-browse/README.i18n.yaml b/packages/client/ui-directory-picker-browse/README.i18n.yaml index 84ae2d12d9..e89c02eac8 100644 --- a/packages/client/ui-directory-picker-browse/README.i18n.yaml +++ b/packages/client/ui-directory-picker-browse/README.i18n.yaml @@ -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 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 packages/client/ui-directory-picker-browse/README.md -README.md: 0e760fa51c7eb4e4c7719c3098233f4905a6144e -README.zh.md: 74b0e782db3ef3b2ca1742fd24acea76c419750c +/: + en: 5f823b578f5be33d + zh: 5e12bb5290b0286b +/deepseek-ai-dsh-client-ui-directory-picker-browse: + en: d866390164091176 + zh: a6272e2f828456ec +/deepseek-ai-dsh-client-ui-directory-picker-browse/summary: + en: bc47bb4e84459d7f + zh: 321afd2438ac00e0 +/deepseek-ai-dsh-client-ui-directory-picker-browse/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-directory-picker-browse/use-this-package: + en: a01ffb4ce6031a21 + zh: 7e2d5b70d4aa9b6c +/deepseek-ai-dsh-client-ui-directory-picker-browse/use-this-package/navigating-and-creating: + en: 18e10884b02f288f + zh: 06debd0a4a88bdac +/deepseek-ai-dsh-client-ui-directory-picker-browse/understand-the-implementation: + en: fb217b7d152731db + zh: 9ee3c0a9f15a5a29 +/deepseek-ai-dsh-client-ui-directory-picker-browse/further-exploration: + en: d8268fa2c3da7d66 + zh: d67e8d634b2bd6ef +/deepseek-ai-dsh-client-ui-directory-picker-browse/model-experience: + en: 3bcc2b54b66f366e + zh: 489716ece3a4ef2a +/deepseek-ai-dsh-client-ui-directory-picker-browse/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-ui-directory-picker-browse/known-limitations-and-deferred-work: + en: 20e381071e1644e2 + zh: 9260bcb09a52dd8c +/deepseek-ai-dsh-client-ui-directory-picker-browse/known-limitations-and-deferred-work/dev-note: + en: d31303387d07ac33 + zh: 5613857edfa8b0b4 diff --git a/packages/client/ui-directory-picker-native/README.i18n.yaml b/packages/client/ui-directory-picker-native/README.i18n.yaml index ba8fc1414d..ed8f471b40 100644 --- a/packages/client/ui-directory-picker-native/README.i18n.yaml +++ b/packages/client/ui-directory-picker-native/README.i18n.yaml @@ -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 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 packages/client/ui-directory-picker-native/README.md -README.md: 73115c441399fca56d0fd208307240226faf653a -README.zh.md: 5cf92adfb43eb3b0e3b7cc4e441b503e9a0757af +/: + en: 6f45a471a5e9305f + zh: d771883685e91a45 +/deepseek-ai-dsh-client-ui-directory-picker-native: + en: dd00fd3c4c22a356 + zh: 070b3db2cce5ecc3 +/deepseek-ai-dsh-client-ui-directory-picker-native/summary: + en: e039fd6b8a89ef2e + zh: dd4b40cfc0bc4fd5 +/deepseek-ai-dsh-client-ui-directory-picker-native/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-directory-picker-native/use-this-package: + en: 1e2172c756246031 + zh: f33dc7b40b14cceb +/deepseek-ai-dsh-client-ui-directory-picker-native/use-this-package/when-to-choose-it: + en: bcba761168d2162c + zh: d484e2305e074c0b +/deepseek-ai-dsh-client-ui-directory-picker-native/understand-the-implementation: + en: f7a287740b4b08f9 + zh: 3347375c4e486b22 +/deepseek-ai-dsh-client-ui-directory-picker-native/further-exploration: + en: 437668b193c4d141 + zh: 55ca260fc45a9f54 +/deepseek-ai-dsh-client-ui-directory-picker-native/model-experience: + en: 35d8546cfb4b540b + zh: 25e4ce35c66c92e2 +/deepseek-ai-dsh-client-ui-directory-picker-native/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-ui-directory-picker-native/known-limitations-and-deferred-work: + en: d041273e43ca0541 + zh: 8b7a718ed22e7f18 +/deepseek-ai-dsh-client-ui-directory-picker-native/known-limitations-and-deferred-work/dev-note: + en: b2aec04118566ad8 + zh: 15639689899fc5a1 diff --git a/packages/client/ui-dockkit/README.i18n.yaml b/packages/client/ui-dockkit/README.i18n.yaml index 333cd57389..eb2394f671 100644 --- a/packages/client/ui-dockkit/README.i18n.yaml +++ b/packages/client/ui-dockkit/README.i18n.yaml @@ -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 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 packages/client/ui-dockkit/README.md -README.md: 613cdbcb105108eb848160f1cb6bc8ee28d39fac -README.zh.md: 77b256f01dd46aea5144e9f8da644fd39330f187 +/: + en: 93fc2e9e86fc50f8 + zh: 61c7c38a66935ad6 +/deepseek-ai-dsh-client-ui-dockkit: + en: 9d34bd85fc9e76b4 + zh: 615d1d2eab451c87 +/deepseek-ai-dsh-client-ui-dockkit/summary: + en: 3ee4584a73215ef4 + zh: 051170a6d0993fa5 +/deepseek-ai-dsh-client-ui-dockkit/table-of-contents: + en: 42038fdc402b9c2a + zh: 99890f8f908624ce +/deepseek-ai-dsh-client-ui-dockkit/the-two-layers: + en: b3a5e9dbaa99c7c6 + zh: fccc5deab88f5c64 +/deepseek-ai-dsh-client-ui-dockkit/embedding-it: + en: 789c879dd83f463a + zh: 37f2dc45f9588810 +/deepseek-ai-dsh-client-ui-dockkit/interaction-rules-worth-keeping: + en: 8e702640a8aa29fa + zh: 103b3a1403493f38 +/deepseek-ai-dsh-client-ui-dockkit/build-shape: + en: 21216ba5798d7f5f + zh: ac505fdcd5c114d4 +/deepseek-ai-dsh-client-ui-dockkit/model-experience: + en: cdebb91645623401 + zh: fe262db316714fa8 +/deepseek-ai-dsh-client-ui-dockkit/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-ui-dockkit/known-limitations-and-deferred-work: + en: 4323810ca5a87e6c + zh: 3a24af2ea4467ab7 +/deepseek-ai-dsh-client-ui-dockkit/known-limitations-and-deferred-work/dev-note: + en: faa8492b8a94668d + zh: 7144121355f7e09d diff --git a/packages/client/ui-goal/README.i18n.yaml b/packages/client/ui-goal/README.i18n.yaml index c00ca00404..5ccf1e24ee 100644 --- a/packages/client/ui-goal/README.i18n.yaml +++ b/packages/client/ui-goal/README.i18n.yaml @@ -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 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 packages/client/ui-goal/README.md -README.md: ac23ac87c5b1bfe3eb849679c30a2ed283f33455 -README.zh.md: bc9971a5e8917bf636de34a742530b113e4e4453 +/: + en: dd1d437b386e4216 + zh: 4b59a2d565d99a0c +/deepseek-ai-dsh-client-ui-goal: + en: fde8c9d75ef5c79b + zh: 177db802d4dac57a +/deepseek-ai-dsh-client-ui-goal/summary: + en: 615de8980e1b06c3 + zh: 7fc3284c2bb00f20 +/deepseek-ai-dsh-client-ui-goal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-goal/use-this-package: + en: 8fa7519b40158cdd + zh: 218cd370f9afec19 +/deepseek-ai-dsh-client-ui-goal/use-this-package/the-command-input-bubble: + en: 05c5db0eb58dffef + zh: 54e7bea0b810b1b8 +/deepseek-ai-dsh-client-ui-goal/use-this-package/failures: + en: 097bbdd748dc17e5 + zh: 867d341d046ba609 +/deepseek-ai-dsh-client-ui-goal/understand-the-implementation: + en: ab510274586c2d1d + zh: 4f65fc3b8e367e1e +/deepseek-ai-dsh-client-ui-goal/further-exploration: + en: 591a317a4f0af7d9 + zh: b1665ca4f6fb811e +/deepseek-ai-dsh-client-ui-goal/model-experience: + en: 53ca3b1f16b1ef44 + zh: 39254d4076e3723d +/deepseek-ai-dsh-client-ui-goal/model-experience/kv-cache-effect: + en: 68c9a2a057acb6cf + zh: baba87876e432666 +/deepseek-ai-dsh-client-ui-goal/known-limitations-and-deferred-work: + en: bbb97ea1b94eae0f + zh: 8e6b0e0516746dcf +/deepseek-ai-dsh-client-ui-goal/known-limitations-and-deferred-work/dev-note: + en: 4548b53e34e6f005 + zh: ff186c76070b52bd diff --git a/packages/client/ui-input-trigger/README.i18n.yaml b/packages/client/ui-input-trigger/README.i18n.yaml index c1c9213b43..d74ab3d387 100644 --- a/packages/client/ui-input-trigger/README.i18n.yaml +++ b/packages/client/ui-input-trigger/README.i18n.yaml @@ -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 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 packages/client/ui-input-trigger/README.md -README.md: 10c0f8df7b2cc0698ba7e10f695da09c1fa72a33 -README.zh.md: fb0f0a969965c27bbd129e70381692c4b1297f5b +/: + en: 99c36d8cf52f1a8a + zh: 3cc3f1e8c2f42c23 +/deepseek-ai-dsh-client-ui-input-trigger: + en: b40e9083c7d330ed + zh: 127f5e9ec56b9165 +/deepseek-ai-dsh-client-ui-input-trigger/summary: + en: 2a968a6e0bc65ac4 + zh: 883f1be84003a5c5 +/deepseek-ai-dsh-client-ui-input-trigger/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-input-trigger/use-this-package: + en: 331a1247c318b1e3 + zh: 6689a92ce0c82942 +/deepseek-ai-dsh-client-ui-input-trigger/use-this-package/keyboard-and-mouse: + en: b198d6256a961f99 + zh: 292e0bb94c18c9ca +/deepseek-ai-dsh-client-ui-input-trigger/understand-the-implementation: + en: 81ac247b6e84a670 + zh: a81221be009a1f47 +/deepseek-ai-dsh-client-ui-input-trigger/further-exploration: + en: 6f7d11ef5e094d98 + zh: ce54d74005997756 +/deepseek-ai-dsh-client-ui-input-trigger/model-experience: + en: 5d1596f50088f468 + zh: 3c72b4f6b1ba27ee +/deepseek-ai-dsh-client-ui-input-trigger/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-input-trigger/known-limitations-and-deferred-work: + en: 560e5df72c0fb698 + zh: ed6fa149bc90258a +/deepseek-ai-dsh-client-ui-input-trigger/known-limitations-and-deferred-work/dev-note: + en: 749345762f3fe660 + zh: 2e58212ba4db347f diff --git a/packages/client/ui-jobs/README.i18n.yaml b/packages/client/ui-jobs/README.i18n.yaml index 03e39bf92e..de3a7df885 100644 --- a/packages/client/ui-jobs/README.i18n.yaml +++ b/packages/client/ui-jobs/README.i18n.yaml @@ -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 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 packages/client/ui-jobs/README.md -README.md: 0c530b802b502ea9db3135a711ed5b643584a79e -README.zh.md: 86ac2890111c098d01d5a7bc2997f99e1aa4065f +/: + en: 063a69d5d6281c07 + zh: 04562d2b1dd29590 +/deepseek-ai-dsh-client-ui-jobs: + en: faa1eecdc7f06930 + zh: c6e7b06ccb434f0b +/deepseek-ai-dsh-client-ui-jobs/summary: + en: b61245c057c1a924 + zh: 6013131975ece32e +/deepseek-ai-dsh-client-ui-jobs/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-jobs/use-this-package: + en: 60f6d05d870f6518 + zh: dddf3f532d828b78 +/deepseek-ai-dsh-client-ui-jobs/use-this-package/one-row-per-job: + en: 2b0bb648937cd7b9 + zh: ce3104a27132ead5 +/deepseek-ai-dsh-client-ui-jobs/use-this-package/the-expanded-panel: + en: c34dad62fee63306 + zh: 167d9da7928a9488 +/deepseek-ai-dsh-client-ui-jobs/understand-the-implementation: + en: f6f5d497ab340b9e + zh: 94832761177f12ca +/deepseek-ai-dsh-client-ui-jobs/further-exploration: + en: 01eaaecb5850f391 + zh: 2eabd14cde191ab8 +/deepseek-ai-dsh-client-ui-jobs/model-experience: + en: 84ad94ba940f17af + zh: 0199b09d360df0d8 +/deepseek-ai-dsh-client-ui-jobs/model-experience/kv-cache-effect: + en: 47f982e326fe77fd + zh: 9f2be5c9af23d759 +/deepseek-ai-dsh-client-ui-jobs/known-limitations-and-deferred-work: + en: 8be824a877852373 + zh: bf4ae00ee70273b5 +/deepseek-ai-dsh-client-ui-jobs/known-limitations-and-deferred-work/dev-note: + en: 2e50937c500fbfd6 + zh: 8b86762471d56dcc diff --git a/packages/client/ui-layout/README.i18n.yaml b/packages/client/ui-layout/README.i18n.yaml index 9a33a08354..ddb8150c07 100644 --- a/packages/client/ui-layout/README.i18n.yaml +++ b/packages/client/ui-layout/README.i18n.yaml @@ -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 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 packages/client/ui-layout/README.md -README.md: 092ce2c231718873b53c788b9133ef1aacc8ffe3 -README.zh.md: 3b6a7314b53698af97349522c47e780b2991c417 +/: + en: d96ec500357f8268 + zh: 57610f377112cbde +/deepseek-ai-dsh-client-ui-layout: + en: a2f7bed6f7fd12d9 + zh: 9d7981efe76c734d +/deepseek-ai-dsh-client-ui-layout/summary: + en: 0315d385c20948ac + zh: b4d31027504adc25 +/deepseek-ai-dsh-client-ui-layout/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-layout/use-this-package: + en: 922ec8985baeee66 + zh: cb88919d73bb0364 +/deepseek-ai-dsh-client-ui-layout/use-this-package/window-chrome-seat: + en: e55c831b460b40e4 + zh: 8670e583bec8c50b +/deepseek-ai-dsh-client-ui-layout/use-this-package/theme-presentation: + en: 1e1d3361dac7d8b0 + zh: b6b3d210d65738f0 +/deepseek-ai-dsh-client-ui-layout/understand-the-implementation: + en: 0824b7a56a1927c7 + zh: 08fac7254486585b +/deepseek-ai-dsh-client-ui-layout/further-exploration: + en: b6c728b6ed70f2a7 + zh: 8ee2003b98695323 +/deepseek-ai-dsh-client-ui-layout/model-experience: + en: 9a94a7197da60052 + zh: 369a59ab63d050f1 +/deepseek-ai-dsh-client-ui-layout/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-layout/known-limitations-and-deferred-work: + en: da92b97ac60d989f + zh: 5816b861728f1a04 +/deepseek-ai-dsh-client-ui-layout/known-limitations-and-deferred-work/dev-note: + en: 4671d1561021e834 + zh: cf6dba523a442cb5 diff --git a/packages/client/ui-message-feedback/README.i18n.yaml b/packages/client/ui-message-feedback/README.i18n.yaml index 1c4d3e76a5..c596a64c51 100644 --- a/packages/client/ui-message-feedback/README.i18n.yaml +++ b/packages/client/ui-message-feedback/README.i18n.yaml @@ -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 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 packages/client/ui-message-feedback/README.md -README.md: b6c6f227ebbeb3d6862d10658b1b125517b25581 -README.zh.md: a294c73c87e8e2da8139fe965e70d9eaf34096a6 +/: + en: 8aef97e8b41fcc4b + zh: 2a28ff708de40cef +/deepseek-ai-dsh-client-ui-message-feedback: + en: eef16395a28d7264 + zh: 8b3daf739cdbc512 +/deepseek-ai-dsh-client-ui-message-feedback/summary: + en: 32b117b659c93b6d + zh: 88e019f2f682cb6b +/deepseek-ai-dsh-client-ui-message-feedback/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-message-feedback/use-this-package: + en: e0127a604ff4aebb + zh: 38f1b3db30f81b22 +/deepseek-ai-dsh-client-ui-message-feedback/use-this-package/failures: + en: f060de7d9f44b058 + zh: 60770de36be6e90f +/deepseek-ai-dsh-client-ui-message-feedback/understand-the-implementation: + en: 61260495346ceb3e + zh: 32e05d3eb82fcaf2 +/deepseek-ai-dsh-client-ui-message-feedback/further-exploration: + en: 47906e09b597c666 + zh: f729475bcc21f4ec +/deepseek-ai-dsh-client-ui-message-feedback/model-experience: + en: a063165cbba41ab6 + zh: 0a5ab1eaea93fce9 +/deepseek-ai-dsh-client-ui-message-feedback/model-experience/kv-cache-effect: + en: 184078637480a33b + zh: 4016876c67533dee +/deepseek-ai-dsh-client-ui-message-feedback/known-limitations-and-deferred-work: + en: 17939bf926bf384b + zh: d4cb01a03076f761 +/deepseek-ai-dsh-client-ui-message-feedback/known-limitations-and-deferred-work/dev-note: + en: 9b670f2a6e0fc0b4 + zh: 3eb9ed838ad61571 diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index a853864eda..eaec6af2e5 100644 --- a/packages/client/ui-model-selection/README.i18n.yaml +++ b/packages/client/ui-model-selection/README.i18n.yaml @@ -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 packages/client/ui-model-selection/README.md -README.md: 0a221b96b2b943fd6673740eace1496db5aafe1f -README.zh.md: b7b8df1777ab9a1de97e7b0bbeb64bbbd6aba13a +/: + en: f39813648aeef5a0 + zh: eea25094e8bfc031 +/deepseek-ai-dsh-client-ui-model-selection: + en: 5e007d579a0e22f0 + zh: edfff0d021712077 +/deepseek-ai-dsh-client-ui-model-selection/summary: + en: 2fb361ef704528fb + zh: 2537d2afb4d2cb45 +/deepseek-ai-dsh-client-ui-model-selection/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-model-selection/use-this-package: + en: 8451ab527ba71867 + zh: 933fac58cfa592b9 +/deepseek-ai-dsh-client-ui-model-selection/use-this-package/model-and-effort: + en: cb95bf2cecc5abc9 + zh: 3eb702bcbbd23521 +/deepseek-ai-dsh-client-ui-model-selection/use-this-package/unroutable-sessions: + en: 7f20428c747ff052 + zh: 975e6de728e02fa0 +/deepseek-ai-dsh-client-ui-model-selection/use-this-package/selection-failures: + en: 261bbf42296243af + zh: 72779fb7b8fbc473 +/deepseek-ai-dsh-client-ui-model-selection/understand-the-implementation: + en: 6ef91fc6d4f7e77d + zh: 6472349bbbae932e +/deepseek-ai-dsh-client-ui-model-selection/further-exploration: + en: 14acd4692e923480 + zh: ff89aed852aa0da8 +/deepseek-ai-dsh-client-ui-model-selection/model-experience: + en: 782f79ed910f426a + zh: 54a2e3e32a747544 +/deepseek-ai-dsh-client-ui-model-selection/model-experience/kv-cache-effect: + en: 68e54c00412a40d1 + zh: 0ac96f57fd194d96 +/deepseek-ai-dsh-client-ui-model-selection/known-limitations-and-deferred-work: + en: 75b37954ceacd92a + zh: a49d0361486e35c4 +/deepseek-ai-dsh-client-ui-model-selection/known-limitations-and-deferred-work/dev-note: + en: 83bfc3dae3365b49 + zh: f7dc4d0654ec83e1 diff --git a/packages/client/ui-open-in-app/README.i18n.yaml b/packages/client/ui-open-in-app/README.i18n.yaml index 4ceb2983f9..5ca5ca0bce 100644 --- a/packages/client/ui-open-in-app/README.i18n.yaml +++ b/packages/client/ui-open-in-app/README.i18n.yaml @@ -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 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 packages/client/ui-open-in-app/README.md -README.md: 4f8462b29579b7290398eac802a614c250f7501b -README.zh.md: df58e838628df98e0c95f6f67aab76299002b3c8 +/: + en: be11314755d8f4f9 + zh: dd75b03074eea543 +/deepseek-ai-dsh-client-ui-open-in-app: + en: 004b805ac638e884 + zh: 6ac98df58affefcf +/deepseek-ai-dsh-client-ui-open-in-app/summary: + en: e69e4c6df4ddffa1 + zh: d1ef0a722f48e9bd +/deepseek-ai-dsh-client-ui-open-in-app/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-client-ui-open-in-app/use-this-package: + en: 056e2bd9e3c78dd8 + zh: be35d2ba53be0442 +/deepseek-ai-dsh-client-ui-open-in-app/use-this-package/what-to-expect: + en: 2332d6b555492721 + zh: fb7a4dcdfe52d80b +/deepseek-ai-dsh-client-ui-open-in-app/understand-the-implementation: + en: a33cd11b46e25367 + zh: ba9264617d3e62f1 +/deepseek-ai-dsh-client-ui-open-in-app/further-exploration: + en: 9deb509f65b6edfd + zh: d6cd63b2abc3731b +/deepseek-ai-dsh-client-ui-open-in-app/model-experience: + en: 5f9e6e0fb0438628 + zh: fc9a81185ea6cb14 +/deepseek-ai-dsh-client-ui-open-in-app/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: c2241315dc0c89c9 +/deepseek-ai-dsh-client-ui-open-in-app/known-limitations-and-deferred-work: + en: 3d77fca62d3c8e86 + zh: 3125d32a158e690a +/deepseek-ai-dsh-client-ui-open-in-app/known-limitations-and-deferred-work/dev-note: + en: 739fd95270d14d0a + zh: d5a6b59133ac6b3f diff --git a/packages/client/ui-permission-presets/README.i18n.yaml b/packages/client/ui-permission-presets/README.i18n.yaml index 539ef00ca2..a9d029b666 100644 --- a/packages/client/ui-permission-presets/README.i18n.yaml +++ b/packages/client/ui-permission-presets/README.i18n.yaml @@ -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 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 packages/client/ui-permission-presets/README.md -README.md: b6e1d843a4f0ccd4fb5c60ab1e3dd46c1ef10bac -README.zh.md: d95f037b1d2c6e46fb355167b3ff1517ede01bbf +/: + en: bef3c4170b3887a8 + zh: eb1b5ac2e6e04f5f +/deepseek-ai-dsh-client-ui-permission-presets: + en: 8320c8f78c0809ce + zh: 74b8ded4da556e81 +/deepseek-ai-dsh-client-ui-permission-presets/summary: + en: 2591adc4721c0564 + zh: 311292f58621adb6 +/deepseek-ai-dsh-client-ui-permission-presets/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-permission-presets/use-this-package: + en: 91606bff7da02253 + zh: ef68e813d64c89be +/deepseek-ai-dsh-client-ui-permission-presets/use-this-package/the-picker: + en: d851eab85fe002bd + zh: 0fdf6eeb1cbd609b +/deepseek-ai-dsh-client-ui-permission-presets/use-this-package/the-settings-row: + en: 5067f6aa12496225 + zh: cfa6796684f97535 +/deepseek-ai-dsh-client-ui-permission-presets/understand-the-implementation: + en: 4089d5bebf3e8bf0 + zh: bc5c3652b0612784 +/deepseek-ai-dsh-client-ui-permission-presets/further-exploration: + en: 9bdbdea03d0e2a96 + zh: cc3bf480a0706ef2 +/deepseek-ai-dsh-client-ui-permission-presets/model-experience: + en: 114f37b90a58cffa + zh: dc99a48a72c975e6 +/deepseek-ai-dsh-client-ui-permission-presets/model-experience/kv-cache-effect: + en: f25206808c8d84c5 + zh: 4fcbc876952d240d +/deepseek-ai-dsh-client-ui-permission-presets/known-limitations-and-deferred-work: + en: 08cdc0ad196d12c1 + zh: 1b65f5d30e219197 +/deepseek-ai-dsh-client-ui-permission-presets/known-limitations-and-deferred-work/dev-note: + en: febc49a55a454923 + zh: b72c74e467fd6407 diff --git a/packages/client/ui-plan/README.i18n.yaml b/packages/client/ui-plan/README.i18n.yaml index fa21e7bb46..aec8a85468 100644 --- a/packages/client/ui-plan/README.i18n.yaml +++ b/packages/client/ui-plan/README.i18n.yaml @@ -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 packages/client/ui-plan/README.md -README.md: e9e38251ff69ed601e486b4c1ce351b236e7bcb7 -README.zh.md: 91fe232d27007fea8264e98c895ca2788585710c +/: + en: 1d5e0e4466f12e0f + zh: 14072627e89bc20b +/deepseek-ai-dsh-client-ui-plan: + en: f46ee364440007a7 + zh: 9c22512041f3c3cb +/deepseek-ai-dsh-client-ui-plan/summary: + en: 958c2c8bf80759a0 + zh: 57ffbbfa1bcbdff4 +/deepseek-ai-dsh-client-ui-plan/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-plan/use-this-package: + en: a601a3266523473b + zh: 9bac0234a7897b0e +/deepseek-ai-dsh-client-ui-plan/use-this-package/what-the-chip-shows: + en: 1622db30d5378225 + zh: 819c9cdb59d010a8 +/deepseek-ai-dsh-client-ui-plan/use-this-package/reading-submitted-plans: + en: 1d2fecc23c658516 + zh: 24a894dc2bbb1b78 +/deepseek-ai-dsh-client-ui-plan/use-this-package/failures: + en: a13078ade4ef3b9d + zh: 2c8b3e8b62ad5652 +/deepseek-ai-dsh-client-ui-plan/understand-the-implementation: + en: 1360fc232aee29e7 + zh: 0beca76c9214a079 +/deepseek-ai-dsh-client-ui-plan/further-exploration: + en: 59f62ef6269abf82 + zh: c8b4ee607be1e432 +/deepseek-ai-dsh-client-ui-plan/model-experience: + en: 7258ebe3500a48fa + zh: 033220a5061618bc +/deepseek-ai-dsh-client-ui-plan/model-experience/kv-cache-effect: + en: 0eeecf007103b9ba + zh: 4a105d4b5ec85547 +/deepseek-ai-dsh-client-ui-plan/known-limitations-and-deferred-work: + en: f74784ddad90a7e1 + zh: 638ce5a243e6b5cc +/deepseek-ai-dsh-client-ui-plan/known-limitations-and-deferred-work/dev-note: + en: c95ae111420d6513 + zh: 9d58639022d2ab36 diff --git a/packages/client/ui-plugin-manager/README.i18n.yaml b/packages/client/ui-plugin-manager/README.i18n.yaml index 43c43b5b78..0e8eda0603 100644 --- a/packages/client/ui-plugin-manager/README.i18n.yaml +++ b/packages/client/ui-plugin-manager/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/client/ui-plugin-manager/README.md -README.md: ae6bae12c8fead7ba4a4f3529a16b8a5225f9e3b -README.zh.md: 4ee4871f69dbcf4e14cdaa931c041631780a6e38 +/: + en: 65c981be6a40344b + zh: 468873de4e2db85f +/deepseek-ai-dsh-client-ui-plugin-manager: + en: cab59fd44398760a + zh: ccc3e3809c2bc634 +/deepseek-ai-dsh-client-ui-plugin-manager/summary: + en: 0dc67850ca5358de + zh: 4ff1bb5bdc184e3e +/deepseek-ai-dsh-client-ui-plugin-manager/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package: + en: ca2748d14de42df7 + zh: 51225f56acb1bada +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package/installing-a-bundle: + en: d8b5cc702bcf54d8 + zh: 61b69dde8b53ca03 +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package/switching-a-bundle: + en: abc90531efa889d5 + zh: 0562570f85e69c35 +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package/switching-one-row-of-a-bundle: + en: 620c6a3ee20848bd + zh: a9429f047a12bb4c +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package/configuration-pages: + en: c32019330fd9586d + zh: 98f146f33f2638ed +/deepseek-ai-dsh-client-ui-plugin-manager/use-this-package/detail-page-extension-points: + en: 87f6d96467dc2383 + zh: e0fb91aa4c4d5a12 +/deepseek-ai-dsh-client-ui-plugin-manager/understand-the-implementation: + en: 8ca48e1365f18adf + zh: 91eadd683d2d8b5b +/deepseek-ai-dsh-client-ui-plugin-manager/understand-the-implementation/registration: + en: c5a1f14d37433d07 + zh: 75014f10a155fadb +/deepseek-ai-dsh-client-ui-plugin-manager/understand-the-implementation/the-store: + en: 21a0bbe8eb92229c + zh: 096ff63db61992bb +/deepseek-ai-dsh-client-ui-plugin-manager/understand-the-implementation/configuration-slots: + en: 17ea418322777d4f + zh: 44e31fead7b723fe +/deepseek-ai-dsh-client-ui-plugin-manager/further-exploration: + en: f9a42dfed0360d6a + zh: 455a70bcb6c69624 +/deepseek-ai-dsh-client-ui-plugin-manager/model-experience: + en: 8dcc6c6fbfb567d2 + zh: 43690ae350f1d6a7 +/deepseek-ai-dsh-client-ui-plugin-manager/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 2064958b0754647e +/deepseek-ai-dsh-client-ui-plugin-manager/known-limitations-and-deferred-work: + en: 92180961af39c5a4 + zh: bfbfae303c5dfd72 +/deepseek-ai-dsh-client-ui-plugin-manager/known-limitations-and-deferred-work/dev-note: + en: 3856b8f32b9d2655 + zh: 8eae0dd37f198555 diff --git a/packages/client/ui-primitives/README.i18n.yaml b/packages/client/ui-primitives/README.i18n.yaml index 1747da058c..89bb52c31c 100644 --- a/packages/client/ui-primitives/README.i18n.yaml +++ b/packages/client/ui-primitives/README.i18n.yaml @@ -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 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 packages/client/ui-primitives/README.md -README.md: fbb8ef676e55d1ef2c3c5c8a6c91a12a3c8fe556 -README.zh.md: 822ff17c3c4c6b02339cdacd03d9c52c67a738c7 +/: + en: 6da33cc935e210c4 + zh: 752948e68a6e2c32 +/deepseek-ai-dsh-client-ui-primitives: + en: e39769cae26393b8 + zh: 8743c8cf561fec35 +/deepseek-ai-dsh-client-ui-primitives/summary: + en: a05472dce901d64f + zh: 6747ad81824a5c0d +/deepseek-ai-dsh-client-ui-primitives/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-primitives/use-this-package: + en: 9f8ec1ebc498b846 + zh: 530b7a8eea6225a0 +/deepseek-ai-dsh-client-ui-primitives/use-this-package/component-catalog: + en: 9ac2a3488424afa2 + zh: bdbc780cec8325ad +/deepseek-ai-dsh-client-ui-primitives/use-this-package/controls-and-icons: + en: 58dbadbd766eb131 + zh: e43e091ec74c7d45 +/deepseek-ai-dsh-client-ui-primitives/use-this-package/rendering-agent-output: + en: bd4126a74a28d45b + zh: 0578623548ebd71d +/deepseek-ai-dsh-client-ui-primitives/use-this-package/localizing-copy: + en: 4aef65dea11de083 + zh: abc22cd7c65cdf38 +/deepseek-ai-dsh-client-ui-primitives/understand-the-implementation: + en: b772d7e4f283a825 + zh: c6f5daf3af2c85fc +/deepseek-ai-dsh-client-ui-primitives/understand-the-implementation/source-map: + en: 1c058b5591dad057 + zh: 044725576954719f +/deepseek-ai-dsh-client-ui-primitives/understand-the-implementation/streaming-markdown: + en: 8bbfa14c27f3bfd7 + zh: 88f7548ac3a114e1 +/deepseek-ai-dsh-client-ui-primitives/understand-the-implementation/geometry-and-overflow: + en: 49f6341d81ded00e + zh: cab87dc54a42ba69 +/deepseek-ai-dsh-client-ui-primitives/further-exploration: + en: e82b713cdb2f954b + zh: a877f34b148f433f +/deepseek-ai-dsh-client-ui-primitives/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-primitives/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-primitives/known-limitations-and-deferred-work: + en: 2f14f1e9d3239316 + zh: c3fdaafc4c591dff +/deepseek-ai-dsh-client-ui-primitives/known-limitations-and-deferred-work/dev-note: + en: ae1d5d1bcc80c932 + zh: 15709ccdbfcdf26c diff --git a/packages/client/ui-reference/README.i18n.yaml b/packages/client/ui-reference/README.i18n.yaml index a70fa7f3f4..bc7b7c1ebc 100644 --- a/packages/client/ui-reference/README.i18n.yaml +++ b/packages/client/ui-reference/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/client/ui-reference/README.md -README.md: 57b5ae2440cf3dd4512cf44361b334dc7f3a58c9 -README.zh.md: fa5af63c939f2bb71f371262dbbf137180c63f8e +/: + en: 891fa9f998222b74 + zh: 5eed64a6df09c534 +/deepseek-ai-dsh-client-ui-reference: + en: 78a7e99d2d912768 + zh: 0c2e12bc70916265 +/deepseek-ai-dsh-client-ui-reference/summary: + en: 35c991a0c12bf1ad + zh: 3c8a45303617cb14 +/deepseek-ai-dsh-client-ui-reference/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-reference/use-this-package: + en: 779a9a534eaad38b + zh: 3dd159a2c35702d6 +/deepseek-ai-dsh-client-ui-reference/use-this-package/what-a-pick-inserts: + en: 0b41c33743e5b422 + zh: 551896094c03f57e +/deepseek-ai-dsh-client-ui-reference/use-this-package/failure-behavior: + en: 228ee6f4b81d96a7 + zh: e1c960c3f5b25317 +/deepseek-ai-dsh-client-ui-reference/understand-the-implementation: + en: dbfe93987c800112 + zh: 200d477cc8cd8a1a +/deepseek-ai-dsh-client-ui-reference/understand-the-implementation/candidate-flow: + en: 6c77da1e946f72e1 + zh: b7b8e1e1d4f5a102 +/deepseek-ai-dsh-client-ui-reference/understand-the-implementation/serialization: + en: dce929ccd4f0e349 + zh: e68bc0f79e184057 +/deepseek-ai-dsh-client-ui-reference/further-exploration: + en: 157b1bcf84b5c11b + zh: 6b7e4f3326b19036 +/deepseek-ai-dsh-client-ui-reference/model-experience: + en: f7fa58a80d82d63a + zh: 8235157cbbbd18cf +/deepseek-ai-dsh-client-ui-reference/model-experience/kv-cache-effect: + en: ff23f8026f7c6050 + zh: 6b0841800076bcd2 +/deepseek-ai-dsh-client-ui-reference/known-limitations-and-deferred-work: + en: e79991a25b11e342 + zh: 15064e8374c8e63d +/deepseek-ai-dsh-client-ui-reference/known-limitations-and-deferred-work/dev-note: + en: 80768071dca1786f + zh: a82f1ec9dcb368bd diff --git a/packages/client/ui-renderer/README.i18n.yaml b/packages/client/ui-renderer/README.i18n.yaml index bcca92c77d..3a8d4ac482 100644 --- a/packages/client/ui-renderer/README.i18n.yaml +++ b/packages/client/ui-renderer/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/client/ui-renderer/README.md -README.md: a354d2e6d502d90beaad544babeed2f314e73246 -README.zh.md: 97e408bf1ab89f4823f8b9577cf15eb69d25d4b9 +/: + en: 06bd9d926c743736 + zh: 39acdcb577fd8c6d +/deepseek-ai-dsh-client-ui-renderer: + en: 9ec624489bbbdf7e + zh: 076b6a71841ea0cf +/deepseek-ai-dsh-client-ui-renderer/summary: + en: 1ba1a4112d222f62 + zh: c1b7601dfe949711 +/deepseek-ai-dsh-client-ui-renderer/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-renderer/use-this-package: + en: 39d5f36f7cb7d680 + zh: a61f0aa8b339e06f +/deepseek-ai-dsh-client-ui-renderer/use-this-package/what-mounting-does: + en: 1d5350799ce072d0 + zh: 942e543fdab51818 +/deepseek-ai-dsh-client-ui-renderer/use-this-package/for-business-plugins: + en: 15a2bfee2c0bd051 + zh: 0c5b336fc5afbbc6 +/deepseek-ai-dsh-client-ui-renderer/understand-the-implementation: + en: 0de0a8ad857b93f6 + zh: 98a0fae2d6606a7d +/deepseek-ai-dsh-client-ui-renderer/understand-the-implementation/activation-and-mount: + en: 002496a4609490f6 + zh: bab3626fbe30ff55 +/deepseek-ai-dsh-client-ui-renderer/understand-the-implementation/slot-bindings: + en: 6ab26cf5744a23d4 + zh: 84a531322a724a84 +/deepseek-ai-dsh-client-ui-renderer/understand-the-implementation/identity: + en: 2a349d500ead79cb + zh: ac49c8b1d73dcd6c +/deepseek-ai-dsh-client-ui-renderer/further-exploration: + en: 77b43b2f3d55c933 + zh: 9847b53486372aeb +/deepseek-ai-dsh-client-ui-renderer/model-experience: + en: ca4e29db08d34e6d + zh: de6ec680414b1d54 +/deepseek-ai-dsh-client-ui-renderer/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-renderer/known-limitations-and-deferred-work: + en: 5ebaf02736035a44 + zh: 3c04f28da7ec6c40 +/deepseek-ai-dsh-client-ui-renderer/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/client/ui-schedule/README.i18n.yaml b/packages/client/ui-schedule/README.i18n.yaml index 505e8e6b35..f4555ceab2 100644 --- a/packages/client/ui-schedule/README.i18n.yaml +++ b/packages/client/ui-schedule/README.i18n.yaml @@ -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 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 packages/client/ui-schedule/README.md -README.md: 689bd3fa219a5ee43ff81de7dd924e83af099c02 -README.zh.md: b868eaee032bc79ba17b4eac8ae2921a397309d1 +/: + en: af257c854bda5c00 + zh: 55426306f517d696 +/deepseek-ai-dsh-client-ui-schedule: + en: 862120984d5392eb + zh: eb3e5d5a802da592 +/deepseek-ai-dsh-client-ui-schedule/summary: + en: 8b9b3a84423f4b1d + zh: 9521ab04209deb47 +/deepseek-ai-dsh-client-ui-schedule/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-schedule/use-this-package: + en: 6e1e74b73a4eb24e + zh: ffc0fcf59a2156cd +/deepseek-ai-dsh-client-ui-schedule/use-this-package/read-and-dismiss-the-catalog: + en: 44a33487c9c18789 + zh: 5b567a9fc4c099a7 +/deepseek-ai-dsh-client-ui-schedule/understand-the-implementation: + en: 2430ec651a2a577d + zh: 6f5cad74adeaae32 +/deepseek-ai-dsh-client-ui-schedule/understand-the-implementation/source-map: + en: e89204b9b4dd3003 + zh: 3ab55a0503de4b4f +/deepseek-ai-dsh-client-ui-schedule/further-exploration: + en: 81ae5a7021733ada + zh: 54d4ec1070685345 +/deepseek-ai-dsh-client-ui-schedule/model-experience: + en: 5c6b73a7cfda0351 + zh: fa075bf6a3258a94 +/deepseek-ai-dsh-client-ui-schedule/model-experience/kv-cache-effect: + en: 47f982e326fe77fd + zh: c2241315dc0c89c9 +/deepseek-ai-dsh-client-ui-schedule/known-limitations-and-deferred-work: + en: 8efb04400a306d00 + zh: 1da6b0f94d3bd6a2 +/deepseek-ai-dsh-client-ui-schedule/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/client/ui-session/README.i18n.yaml b/packages/client/ui-session/README.i18n.yaml index 646ecb0d4d..9235141f7d 100644 --- a/packages/client/ui-session/README.i18n.yaml +++ b/packages/client/ui-session/README.i18n.yaml @@ -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 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 packages/client/ui-session/README.md -README.md: df85bf42b0eb6507662ab4e4a26d1fde6e08872e -README.zh.md: 5f54c1db7b5daf2d113717d890dc90eeb2be87f9 +/: + en: af287bddb3c67f95 + zh: 162d447352ac8366 +/deepseek-ai-dsh-client-ui-session: + en: 22464c74746de6c2 + zh: 171a244a493a277e +/deepseek-ai-dsh-client-ui-session/summary: + en: 75428e0474a073a4 + zh: 18f1db4b4c5302e5 +/deepseek-ai-dsh-client-ui-session/table-of-contents: + en: b4683d2a53256fda + zh: 4e65ff63dc8c48fe +/deepseek-ai-dsh-client-ui-session/model-experience: + en: cb2d4451e8bf8520 + zh: 6d3adbb930d90c59 +/deepseek-ai-dsh-client-ui-session/model-experience/kv-cache-effect: + en: 209b4471032b0f9d + zh: 6c2e39ac1dedf71c +/deepseek-ai-dsh-client-ui-session/known-limitations-and-deferred-work: + en: 61ef65087e3d4ac8 + zh: 01b38db2957f9096 +/deepseek-ai-dsh-client-ui-session/known-limitations-and-deferred-work/dev-note: + en: 48d675ab370a4967 + zh: 0e22dedcf99801ad diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index c3d088de8e..f027516868 100644 --- a/packages/client/ui-settings-account/README.i18n.yaml +++ b/packages/client/ui-settings-account/README.i18n.yaml @@ -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 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 packages/client/ui-settings-account/README.md -README.md: b08dc6434a6cabcb1cb6da48fc5cc46f5f0f8368 -README.zh.md: d912a92a4d8a5935c250182efd4326514784a10c +/: + en: 1fcba8f273b661fb + zh: 14e1236f84ae39d7 +/deepseek-ai-dsh-client-ui-settings-account: + en: 76e18729c08888be + zh: 170a2032838071b4 +/deepseek-ai-dsh-client-ui-settings-account/summary: + en: 658929e914f98565 + zh: 879a9fbf5ff7a4af +/deepseek-ai-dsh-client-ui-settings-account/table-of-contents: + en: c26f81e8adf0128b + zh: e11ab371f51f66bc +/deepseek-ai-dsh-client-ui-settings-account/use-this-package: + en: 756b26130eca4020 + zh: d80084cdeca9dccf +/deepseek-ai-dsh-client-ui-settings-account/understand-the-implementation: + en: 95e9a3b0d75cef12 + zh: b3eb97302dd3a3ab +/deepseek-ai-dsh-client-ui-settings-account/further-exploration: + en: 23d329730557101e + zh: c7aad4fb9f8f214d +/deepseek-ai-dsh-client-ui-settings-account/model-experience: + en: ee1df7ca3467ee3f + zh: 84904a5148da3862 +/deepseek-ai-dsh-client-ui-settings-account/model-experience/kv-cache-effect: + en: ca3015e252db0114 + zh: ebca9253cf15e8e9 +/deepseek-ai-dsh-client-ui-settings-account/known-limitations-and-deferred-work: + en: b607e3190613d34f + zh: ed1e6ccc7917cef7 +/deepseek-ai-dsh-client-ui-settings-account/known-limitations-and-deferred-work/dev-note: + en: ccbb9dd4c7f43c8c + zh: 8bbbda6c72073544 diff --git a/packages/client/ui-settings-agent-loop/README.i18n.yaml b/packages/client/ui-settings-agent-loop/README.i18n.yaml index 67c29d8665..937134f596 100644 --- a/packages/client/ui-settings-agent-loop/README.i18n.yaml +++ b/packages/client/ui-settings-agent-loop/README.i18n.yaml @@ -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 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 packages/client/ui-settings-agent-loop/README.md -README.md: 46e74fdf286c5a498cb7e1a0e885fed12912e7dd -README.zh.md: 5381d3f40c52cf72231a111a4fd37c019461efad +/: + en: 12adb999b01b035a + zh: 15ac17dd70c78e07 +/deepseek-ai-dsh-client-ui-settings-agent-loop: + en: 375e454589cac6c8 + zh: 7d609e69bc62fa77 +/deepseek-ai-dsh-client-ui-settings-agent-loop/summary: + en: 42fc4bae4890b0f7 + zh: b11cbdc801aefb56 +/deepseek-ai-dsh-client-ui-settings-agent-loop/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-agent-loop/use-this-package: + en: 189a3f8d22570043 + zh: 6bda29a5eff7d4bd +/deepseek-ai-dsh-client-ui-settings-agent-loop/understand-the-implementation: + en: 6412d65e7c17da6a + zh: 530d8b53c355efba +/deepseek-ai-dsh-client-ui-settings-agent-loop/further-exploration: + en: 14267229f22a17b0 + zh: e59359820f0c2c2f +/deepseek-ai-dsh-client-ui-settings-agent-loop/model-experience: + en: 6b7c6f82ab6c8435 + zh: 4517689c899abcbe +/deepseek-ai-dsh-client-ui-settings-agent-loop/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 6e1c9a8fdde89577 +/deepseek-ai-dsh-client-ui-settings-agent-loop/known-limitations-and-deferred-work: + en: 2696c3c3a1328b84 + zh: 10274e668ec7ea02 +/deepseek-ai-dsh-client-ui-settings-agent-loop/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/ui-settings-general/README.i18n.yaml b/packages/client/ui-settings-general/README.i18n.yaml index 5d07365901..1f4cbb4659 100644 --- a/packages/client/ui-settings-general/README.i18n.yaml +++ b/packages/client/ui-settings-general/README.i18n.yaml @@ -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 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 packages/client/ui-settings-general/README.md -README.md: 22fa9c364b83e1923bb5a23ab06ca0f76d9aaefa -README.zh.md: 732b85a0f477b5c0891bdab5a0622f583ae8c1d9 +/: + en: b12def981d836df5 + zh: 9d813c1937f22c61 +/deepseek-ai-dsh-client-ui-settings-general: + en: 1017c980d55e1945 + zh: d3febd2062fce20f +/deepseek-ai-dsh-client-ui-settings-general/summary: + en: 56ad6c35c1c4745c + zh: 1911baf2e1ebddab +/deepseek-ai-dsh-client-ui-settings-general/table-of-contents: + en: aeb9c4bfdb19bc56 + zh: 45a29bea90cff239 +/deepseek-ai-dsh-client-ui-settings-general/use-this-package: + en: 5e87c5fd61442960 + zh: 12262f4a836f8912 +/deepseek-ai-dsh-client-ui-settings-general/use-this-package/the-general-section: + en: de484a8406f3fc17 + zh: a3831774d457c49a +/deepseek-ai-dsh-client-ui-settings-general/use-this-package/opening-the-configuration-file: + en: ca2b4f5ccfbe2705 + zh: bd1dc1d9879d0f0e +/deepseek-ai-dsh-client-ui-settings-general/use-this-package/onboarding-steps: + en: 27f0f6ec55f00228 + zh: 69b47ff1efd81c17 +/deepseek-ai-dsh-client-ui-settings-general/understand-the-implementation: + en: e5f7882975944e7d + zh: ee946b54cc737b6f +/deepseek-ai-dsh-client-ui-settings-general/understand-the-implementation/ledger-projections: + en: 3e3c2c72f87e8b23 + zh: 12b10ba2d37c9077 +/deepseek-ai-dsh-client-ui-settings-general/understand-the-implementation/connection-recovery: + en: e37fb7df883ea356 + zh: c972524e56c6d6c2 +/deepseek-ai-dsh-client-ui-settings-general/understand-the-implementation/document-availability: + en: 474168eef3339de0 + zh: 254ea21415082dae +/deepseek-ai-dsh-client-ui-settings-general/understand-the-implementation/host-half: + en: 5d722d055516f905 + zh: e7a236f0ff84f7ff +/deepseek-ai-dsh-client-ui-settings-general/further-exploration: + en: 21348b768f60f587 + zh: 0c3c5b6a682ae267 +/deepseek-ai-dsh-client-ui-settings-general/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-settings-general/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-settings-general/known-limitations-and-deferred-work: + en: eb93fe357edc777a + zh: e9f1bb38af42de90 +/deepseek-ai-dsh-client-ui-settings-general/known-limitations-and-deferred-work/dev-note: + en: b36039e49a66b8e0 + zh: 306682cd90cce1db diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index 1aad6500b2..97f1360d4c 100644 --- a/packages/client/ui-settings-models/README.i18n.yaml +++ b/packages/client/ui-settings-models/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/client/ui-settings-models/README.md -README.md: 809d7407edbee9cbc00a19ca864d2e1424f29866 -README.zh.md: 9d5154cde596c03b51d297c0b49a01cac16db054 +/: + en: d1bc4d9ef67bfb19 + zh: d095e4dc76f1c5e0 +/deepseek-ai-dsh-client-ui-settings-models: + en: 65e1e8a17a23e576 + zh: 01de4e98a002d376 +/deepseek-ai-dsh-client-ui-settings-models/summary: + en: 53301a5d29936f69 + zh: 9ac408a33571dbdd +/deepseek-ai-dsh-client-ui-settings-models/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-models/use-this-package: + en: a4a5b605e9b554bf + zh: 763fc2559eedc240 +/deepseek-ai-dsh-client-ui-settings-models/use-this-package/api-keys: + en: 8cd8de6f1992d290 + zh: db54a6c6e27e8ea4 +/deepseek-ai-dsh-client-ui-settings-models/use-this-package/editing-a-provider: + en: ec0ba62a4e7185b4 + zh: 37d1e1e7a3817d12 +/deepseek-ai-dsh-client-ui-settings-models/use-this-package/adding-and-deleting-providers: + en: 9d533c65c82cd4a4 + zh: 0a5da334e127c035 +/deepseek-ai-dsh-client-ui-settings-models/use-this-package/first-run-dialogs: + en: 589397a35f82244e + zh: 342fbceee2c173a2 +/deepseek-ai-dsh-client-ui-settings-models/use-this-package/extension-slots: + en: 6979796f0332268f + zh: 00896a005cc4f4e2 +/deepseek-ai-dsh-client-ui-settings-models/understand-the-implementation: + en: a87afbec5e339b36 + zh: 6348c81af7e650e1 +/deepseek-ai-dsh-client-ui-settings-models/understand-the-implementation/validation: + en: 74948a88fe1f9aac + zh: 8ad2200fa74c12c9 +/deepseek-ai-dsh-client-ui-settings-models/understand-the-implementation/concurrency-and-credentials: + en: 670b8c066aed9b7a + zh: 2bedba9a2e0e3fee +/deepseek-ai-dsh-client-ui-settings-models/understand-the-implementation/onboarding-coordinator: + en: 5b18ec5319a96cfa + zh: 0eaa3078e7d87cad +/deepseek-ai-dsh-client-ui-settings-models/further-exploration: + en: 20abd8b98b6c20e2 + zh: 6dfda7955ce5f33f +/deepseek-ai-dsh-client-ui-settings-models/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-settings-models/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 9779c98fff4c949a +/deepseek-ai-dsh-client-ui-settings-models/known-limitations-and-deferred-work: + en: cc69c9934bf22302 + zh: 4ea896f4b54aa203 +/deepseek-ai-dsh-client-ui-settings-models/known-limitations-and-deferred-work/dev-note: + en: 4f6749870e661a48 + zh: 4953f3ea814546a4 diff --git a/packages/client/ui-settings-plugin-inventory/README.i18n.yaml b/packages/client/ui-settings-plugin-inventory/README.i18n.yaml index 46d1797a0c..6b7ff6a2bf 100644 --- a/packages/client/ui-settings-plugin-inventory/README.i18n.yaml +++ b/packages/client/ui-settings-plugin-inventory/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/client/ui-settings-plugin-inventory/README.md -README.md: 7353f14d111aa1c89c3331a3d4977ddfbf950294 -README.zh.md: 9078f8074a10688cb7370ec7ee5fd8af16ca48c1 +/: + en: 9121298d88fe8ea6 + zh: 5da705491f951d0e +/deepseek-ai-dsh-client-ui-settings-plugin-inventory: + en: 463eecf002ec0f54 + zh: b8dc6003ddccd14a +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/summary: + en: 56f5349b6e502525 + zh: 691a0fe90b739e9d +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package: + en: 67637808e7940157 + zh: d4d0716ea4d33e4a +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/reading-a-card: + en: e615aaa891b5055f + zh: 38769e763c8e54ca +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/the-preset-switcher: + en: 84e5938329199a22 + zh: 6f5cfaac56433e8b +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/use-this-package/retrying-a-failed-read: + en: 2859449aaae5ab59 + zh: 06380059ae429026 +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation: + en: cab883d26642c932 + zh: 54e7321bd781b400 +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation/registration: + en: e4792880c5916ce0 + zh: 4c8171a446dd153f +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/understand-the-implementation/rendering: + en: b9aa850e5f101b68 + zh: 8a29025f19f6ce37 +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/further-exploration: + en: ae3819f0c5da95bd + zh: 40972ab96d5c95e2 +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/model-experience: + en: 69fb187ac2361233 + zh: d4d3ec4ed3e3d98d +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/known-limitations-and-deferred-work: + en: 3d3343d97eb73762 + zh: 5fc9d1c1f0c4055d +/deepseek-ai-dsh-client-ui-settings-plugin-inventory/known-limitations-and-deferred-work/dev-note: + en: 7516b7e39304e5b3 + zh: 8961c0cefb89ee12 diff --git a/packages/client/ui-settings-plugins/README.i18n.yaml b/packages/client/ui-settings-plugins/README.i18n.yaml index 043c8a60bb..77a7c3d9ce 100644 --- a/packages/client/ui-settings-plugins/README.i18n.yaml +++ b/packages/client/ui-settings-plugins/README.i18n.yaml @@ -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 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 packages/client/ui-settings-plugins/README.md -README.md: b4b3d37bd9da0fa6d1e3dcefd4d26394d4dde161 -README.zh.md: d22a9ec3f142bd7c11b27b1cb08e0a8a56ce6ead +/: + en: 06bd505cb0147b05 + zh: 8d7646e22faac71b +/deepseek-ai-dsh-client-ui-settings-plugins: + en: 3ceabe2cdb5492f6 + zh: 6ea0cb3f93e5bdf5 +/deepseek-ai-dsh-client-ui-settings-plugins/summary: + en: d9b27f1dd9713b4f + zh: 3ec674429179ae7d +/deepseek-ai-dsh-client-ui-settings-plugins/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-plugins/use-this-package: + en: b4deec821244f970 + zh: 49b3afedc992b7fe +/deepseek-ai-dsh-client-ui-settings-plugins/understand-the-implementation: + en: c5cfef002b32c7c1 + zh: 0249b45a28c16b61 +/deepseek-ai-dsh-client-ui-settings-plugins/further-exploration: + en: 54ba782a2b26f615 + zh: fee9148d9658d83f +/deepseek-ai-dsh-client-ui-settings-plugins/model-experience: + en: 6b7c6f82ab6c8435 + zh: 4517689c899abcbe +/deepseek-ai-dsh-client-ui-settings-plugins/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 6e1c9a8fdde89577 +/deepseek-ai-dsh-client-ui-settings-plugins/known-limitations-and-deferred-work: + en: 262d3dac53b5aff1 + zh: 3ac7a4d5c0d0f70f +/deepseek-ai-dsh-client-ui-settings-plugins/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/ui-settings-shell/README.i18n.yaml b/packages/client/ui-settings-shell/README.i18n.yaml index 58d0af3ff1..c7173c8d55 100644 --- a/packages/client/ui-settings-shell/README.i18n.yaml +++ b/packages/client/ui-settings-shell/README.i18n.yaml @@ -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 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 packages/client/ui-settings-shell/README.md -README.md: 057cc6d268d28752ac50a2f7cc9f631211e27e6f -README.zh.md: 04016f9dd495c49c36d9677f379a327ee9ec70dd +/: + en: f6377310e46f34e5 + zh: 55f00c64a61fb235 +/deepseek-ai-dsh-client-ui-settings-shell: + en: d38072750be19799 + zh: 8e2a7f9aacf2d61d +/deepseek-ai-dsh-client-ui-settings-shell/summary: + en: 4a6764083793412e + zh: f177136090ceee7e +/deepseek-ai-dsh-client-ui-settings-shell/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-shell/use-this-package: + en: caaab79a5e1a76f6 + zh: 31dbcaaef71d4a0e +/deepseek-ai-dsh-client-ui-settings-shell/understand-the-implementation: + en: 2c58855d6b1dfaa6 + zh: 6e5546f2edb07687 +/deepseek-ai-dsh-client-ui-settings-shell/further-exploration: + en: 89337b623b8bf2f5 + zh: c73362e199061864 +/deepseek-ai-dsh-client-ui-settings-shell/model-experience: + en: 6b7c6f82ab6c8435 + zh: 4517689c899abcbe +/deepseek-ai-dsh-client-ui-settings-shell/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 6e1c9a8fdde89577 +/deepseek-ai-dsh-client-ui-settings-shell/known-limitations-and-deferred-work: + en: 51c2778fb17f8d1d + zh: 6425a598ba93833e +/deepseek-ai-dsh-client-ui-settings-shell/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/ui-settings-subagent/README.i18n.yaml b/packages/client/ui-settings-subagent/README.i18n.yaml index 15d072c2cc..c779c93ac1 100644 --- a/packages/client/ui-settings-subagent/README.i18n.yaml +++ b/packages/client/ui-settings-subagent/README.i18n.yaml @@ -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 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 packages/client/ui-settings-subagent/README.md -README.md: 66761cc1ca16ecd26e33e84d402a2de186ef1e4f -README.zh.md: 5ab125b02f1650a6c4a87159ba5ffc685f82bbf6 +/: + en: 91ac9c71d17a231a + zh: 0e18ebe47ff01aed +/deepseek-ai-dsh-client-ui-settings-subagent: + en: d1fc570c45a5f42e + zh: 01eabcac395bca62 +/deepseek-ai-dsh-client-ui-settings-subagent/summary: + en: 4b6bf8db1752b902 + zh: 5bdba2bfe06234b4 +/deepseek-ai-dsh-client-ui-settings-subagent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-subagent/use-this-package: + en: 09ac65efa3352ef4 + zh: 3eda3d453764fdff +/deepseek-ai-dsh-client-ui-settings-subagent/understand-the-implementation: + en: 5124ebc1880ba9fa + zh: 89c2eb2d483962a7 +/deepseek-ai-dsh-client-ui-settings-subagent/further-exploration: + en: 9b43ebcd30efbdea + zh: e6ec50d755fb5e24 +/deepseek-ai-dsh-client-ui-settings-subagent/model-experience: + en: 6b7c6f82ab6c8435 + zh: 4517689c899abcbe +/deepseek-ai-dsh-client-ui-settings-subagent/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 6e1c9a8fdde89577 +/deepseek-ai-dsh-client-ui-settings-subagent/known-limitations-and-deferred-work: + en: ea92269b6c36cbcc + zh: ec43fdf5c47a4906 +/deepseek-ai-dsh-client-ui-settings-subagent/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/ui-settings-web-search/README.i18n.yaml b/packages/client/ui-settings-web-search/README.i18n.yaml index 8c55625fac..76a8d25bce 100644 --- a/packages/client/ui-settings-web-search/README.i18n.yaml +++ b/packages/client/ui-settings-web-search/README.i18n.yaml @@ -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 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 packages/client/ui-settings-web-search/README.md -README.md: 21c21e736ee0e7288a01198072d1983fb58767a4 -README.zh.md: 257d1eddaaeca1cd7fe3e88793a15313fe635e33 +/: + en: e262010771f02430 + zh: 5fbff0286b858486 +/deepseek-ai-dsh-client-ui-settings-web-search: + en: 968c0f6ba2415331 + zh: aaf9e2aa22eafc98 +/deepseek-ai-dsh-client-ui-settings-web-search/summary: + en: c84451c5b4641b9f + zh: 3197ee34071fcb27 +/deepseek-ai-dsh-client-ui-settings-web-search/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings-web-search/use-this-package: + en: b9c740855d0886d8 + zh: f6e14f6bd01ffd23 +/deepseek-ai-dsh-client-ui-settings-web-search/understand-the-implementation: + en: 90a3d55da6722763 + zh: 8fc0463c6543f100 +/deepseek-ai-dsh-client-ui-settings-web-search/further-exploration: + en: 0514f11276497599 + zh: 044c633542332cd4 +/deepseek-ai-dsh-client-ui-settings-web-search/model-experience: + en: 6b7c6f82ab6c8435 + zh: 4517689c899abcbe +/deepseek-ai-dsh-client-ui-settings-web-search/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 6e1c9a8fdde89577 +/deepseek-ai-dsh-client-ui-settings-web-search/known-limitations-and-deferred-work: + en: 3fb1d37ebc9bf37a + zh: d6ac7929cb19ff55 +/deepseek-ai-dsh-client-ui-settings-web-search/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/client/ui-settings/README.i18n.yaml b/packages/client/ui-settings/README.i18n.yaml index 526c93c320..49ceb34c3a 100644 --- a/packages/client/ui-settings/README.i18n.yaml +++ b/packages/client/ui-settings/README.i18n.yaml @@ -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 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 packages/client/ui-settings/README.md -README.md: 67b094993acbff92917594aafd0731818b5daa1b -README.zh.md: eec972705e9113594b06aca0ee5b8b149b5c62ca +/: + en: a68df653048eed14 + zh: 2b117acaec0165a8 +/deepseek-ai-dsh-client-ui-settings: + en: 720600abd76a4a91 + zh: 822bda08efbfc3e4 +/deepseek-ai-dsh-client-ui-settings/summary: + en: 0404ff8b4ec867e0 + zh: 9c3f03dfd1306cc9 +/deepseek-ai-dsh-client-ui-settings/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-settings/use-this-package: + en: 2417d8409aad6ca7 + zh: 449eee623a2f334b +/deepseek-ai-dsh-client-ui-settings/use-this-package/configuration-forms: + en: 4aee5cd02d22d2d3 + zh: be90194b2c975f1d +/deepseek-ai-dsh-client-ui-settings/use-this-package/following-served-namespaces: + en: 2edd420502bebce1 + zh: 6624abe01110c012 +/deepseek-ai-dsh-client-ui-settings/use-this-package/filling-the-settings-slots: + en: 28e4230a0675edf8 + zh: b91c095ec2c0dd42 +/deepseek-ai-dsh-client-ui-settings/use-this-package/observable-success-and-failures: + en: 9767f17ca0f02ae3 + zh: 8e475d6d3d670702 +/deepseek-ai-dsh-client-ui-settings/understand-the-implementation: + en: 7dcac350b5bf7d1e + zh: d8fc21641f2784e7 +/deepseek-ai-dsh-client-ui-settings/understand-the-implementation/the-describe-mirror: + en: ea274a9480884a7f + zh: bbaf650e04646c04 +/deepseek-ai-dsh-client-ui-settings/understand-the-implementation/shared-entry-writes: + en: 11a73ab8e9280b81 + zh: f0e72a05959e3f32 +/deepseek-ai-dsh-client-ui-settings/understand-the-implementation/schema-service: + en: 34872bda24dc50c6 + zh: dcccef423906c408 +/deepseek-ai-dsh-client-ui-settings/further-exploration: + en: 57e3fe18940ecc83 + zh: 165bd696250de5dc +/deepseek-ai-dsh-client-ui-settings/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-settings/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-settings/known-limitations-and-deferred-work: + en: 5315511eb8650c68 + zh: c9b4f825a82e4447 +/deepseek-ai-dsh-client-ui-settings/known-limitations-and-deferred-work/dev-note: + en: 26f0b742de49074e + zh: ee7321bad1101bf1 diff --git a/packages/client/ui-sidebar-browser/README.i18n.yaml b/packages/client/ui-sidebar-browser/README.i18n.yaml index 0fb7063909..2d1201ab84 100644 --- a/packages/client/ui-sidebar-browser/README.i18n.yaml +++ b/packages/client/ui-sidebar-browser/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/client/ui-sidebar-browser/README.md -README.md: 3fc359efc0b26ecfa006f92a094e6408781c2155 -README.zh.md: b3a452b0e53695ef08aa5ceced432d2710c170e3 +/: + en: aceaa4f1e64f54b1 + zh: 0f43a543e01f0778 +/deepseek-ai-dsh-client-ui-sidebar-browser: + en: a84cb48a92ad07c9 + zh: 8c87b76cbe4c2f53 +/deepseek-ai-dsh-client-ui-sidebar-browser/summary: + en: 6da22559ff372e95 + zh: 8ad8f2b4ed655878 +/deepseek-ai-dsh-client-ui-sidebar-browser/table-of-contents: + en: d152484eb41ac6b4 + zh: de4a2a92773d135e +/deepseek-ai-dsh-client-ui-sidebar-browser/use-this-package: + en: 8cf8739a3e4c3504 + zh: a893ba17036fd8f7 +/deepseek-ai-dsh-client-ui-sidebar-browser/use-this-package/when-to-choose-it: + en: fb79cb7d59bc01af + zh: 5f6202d8b0b62d7d +/deepseek-ai-dsh-client-ui-sidebar-browser/use-this-package/minimal-configuration: + en: 8f568da45495c3ea + zh: 240c5a95ebd31dc2 +/deepseek-ai-dsh-client-ui-sidebar-browser/understand-the-implementation: + en: 42b15ac6321706aa + zh: e15901d8462ec7c7 +/deepseek-ai-dsh-client-ui-sidebar-browser/understand-the-implementation/protocol-policy: + en: dfcf047442eaa96e + zh: a1fc57195f4c2425 +/deepseek-ai-dsh-client-ui-sidebar-browser/understand-the-implementation/iframe-carrier: + en: e535f7330bb62a79 + zh: 485932298fdabaa3 +/deepseek-ai-dsh-client-ui-sidebar-browser/understand-the-implementation/controller: + en: 4a1b3a9a0c62b809 + zh: 9309d1c581957411 +/deepseek-ai-dsh-client-ui-sidebar-browser/further-exploration: + en: 4ebd881b4ade9d8f + zh: 715f2553210c08e6 +/deepseek-ai-dsh-client-ui-sidebar-browser/model-experience: + en: 69e711858e7d9ebc + zh: d84610491e69a35b +/deepseek-ai-dsh-client-ui-sidebar-browser/model-experience/kv-cache-effect: + en: e17a5fd3d5405745 + zh: db957a16dddce770 +/deepseek-ai-dsh-client-ui-sidebar-browser/known-limitations-and-deferred-work: + en: 307604babbe74f38 + zh: 7d7a5aa4b99964d0 +/deepseek-ai-dsh-client-ui-sidebar-browser/known-limitations-and-deferred-work/dev-note: + en: 945685f7066eda81 + zh: da888e0d3f785bd5 diff --git a/packages/client/ui-sidebar-documentpreview/README.i18n.yaml b/packages/client/ui-sidebar-documentpreview/README.i18n.yaml index 14e9dcc293..b5fd2d50c4 100644 --- a/packages/client/ui-sidebar-documentpreview/README.i18n.yaml +++ b/packages/client/ui-sidebar-documentpreview/README.i18n.yaml @@ -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 packages/client/ui-sidebar-documentpreview/README.md -README.md: 03e25deb27591fb5b8864b48a5a0b44da854eb54 -README.zh.md: d90d4932f210e9cff2275bdbadd5d35c1edea860 +/: + en: ef50065f5ff17aa1 + zh: ee5d2b7986739fca +/deepseek-ai-dsh-client-ui-sidebar-documentpreview: + en: 5168e03d461318f5 + zh: 7ad97d70ee331bfd +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/summary: + en: a74c16667d0baada + zh: 4fd709ff9f98b84f +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/table-of-contents: + en: 0dd8c3a22e28aacf + zh: c27c11bf4b5cceba +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/what-it-registers: + en: a8eaf01a3a3390ee + zh: ddea36dbcc4a0159 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/addresses: + en: 949156aa02ec8b07 + zh: d3675754e2a37b5d +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/how-it-reads: + en: 7009d93302da168f + zh: b31d78c144c0fc57 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/excel-preview: + en: d21b1c3d95ba48e4 + zh: 501fc3b5e04ee9cd +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/office-preview: + en: a6eccd94913000de + zh: 1ede588c7083f2a3 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/navigation: + en: 5cd81a7b3cdc83bd + zh: 4cdd1b7ede497925 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/model-experience: + en: ca1deb99d0e44755 + zh: f285fc56cee669ec +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/model-experience/kv-cache-effect: + en: 7edb4c0bb5f13847 + zh: ae5d0bbebe4aa563 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/known-limitations-and-deferred-work: + en: 7be2ad2e198131f8 + zh: 21b35eae72a49ad2 +/deepseek-ai-dsh-client-ui-sidebar-documentpreview/known-limitations-and-deferred-work/dev-note: + en: 3d8904cb970145a3 + zh: a0c0cddcfedf9e42 diff --git a/packages/client/ui-sidebar-documentpreview/tests/fuzz/README.i18n.yaml b/packages/client/ui-sidebar-documentpreview/tests/fuzz/README.i18n.yaml index 4b73053e6e..50c6680d0a 100644 --- a/packages/client/ui-sidebar-documentpreview/tests/fuzz/README.i18n.yaml +++ b/packages/client/ui-sidebar-documentpreview/tests/fuzz/README.i18n.yaml @@ -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 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 packages/client/ui-sidebar-documentpreview/tests/fuzz/README.md -README.md: 7a95b5cedb7dbcbfbc1f0773513ff6488440fd98 -README.zh.md: 608acf3d1eb83028e3a916dff3e87cc0e88b2ee6 +/xlsx-fuzz-diagnostics: + en: 580750ba716b1f3d + zh: 8601666a216ac81e +/xlsx-fuzz-diagnostics/run-a-campaign: + en: e5260a3f702e7dd4 + zh: b0001de8a2ef3224 +/xlsx-fuzz-diagnostics/compare-an-older-adapter: + en: cd8b6a20d2209f1b + zh: 18ebe19c492e642a +/xlsx-fuzz-diagnostics/retained-regressions: + en: 006e27357ec3c841 + zh: da85d7e9025c704f diff --git a/packages/client/ui-sidebar-files/README.i18n.yaml b/packages/client/ui-sidebar-files/README.i18n.yaml index 2092c7ee06..d2fa64fdc1 100644 --- a/packages/client/ui-sidebar-files/README.i18n.yaml +++ b/packages/client/ui-sidebar-files/README.i18n.yaml @@ -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 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 packages/client/ui-sidebar-files/README.md -README.md: 0340991f16a61b80cd616982c6a6bea6ff60beac -README.zh.md: 016c74d801a3582785cb600f493eaeb92f7567b9 +/: + en: d6514e0d092a210b + zh: 9980cb0f4fc6f903 +/deepseek-ai-dsh-client-ui-sidebar-files: + en: ae5625c23b3a864f + zh: 20cf48a229e806bf +/deepseek-ai-dsh-client-ui-sidebar-files/summary: + en: 1605ae92aee5c231 + zh: ad519ddb9e338892 +/deepseek-ai-dsh-client-ui-sidebar-files/table-of-contents: + en: 9411fb4809692e09 + zh: dd13990d39c5be7f +/deepseek-ai-dsh-client-ui-sidebar-files/what-it-registers: + en: 661c1093d0b986c1 + zh: 3ed921d02a804484 +/deepseek-ai-dsh-client-ui-sidebar-files/the-tree: + en: a0ae0b1f223b3df1 + zh: 8ddc325519bd75b2 +/deepseek-ai-dsh-client-ui-sidebar-files/model-experience: + en: a18a43f6842f1371 + zh: 69f2a2b35f06dfc7 +/deepseek-ai-dsh-client-ui-sidebar-files/model-experience/kv-cache-effect: + en: 5a6febb45089991a + zh: b17ed755fd098b83 +/deepseek-ai-dsh-client-ui-sidebar-files/known-limitations-and-deferred-work: + en: c0e1831d8975186c + zh: 332aac8738458bb0 +/deepseek-ai-dsh-client-ui-sidebar-files/known-limitations-and-deferred-work/dev-note: + en: 76e2f6286b0b31af + zh: f03469297b67d206 diff --git a/packages/client/ui-sidebar-right/README.i18n.yaml b/packages/client/ui-sidebar-right/README.i18n.yaml index e5fef88086..6b37aab233 100644 --- a/packages/client/ui-sidebar-right/README.i18n.yaml +++ b/packages/client/ui-sidebar-right/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/client/ui-sidebar-right/README.md -README.md: 14014cb0986222a73e962e390c2675dd7354df1c -README.zh.md: 7686d7afa8b164bf780b4ce6f927d8829e7b3a96 +/: + en: 0960aa113255a3a8 + zh: 48e5173172a55a91 +/deepseek-ai-dsh-client-ui-sidebar-right: + en: 0b446bc3fbd57fad + zh: e0b6491a6c43bee1 +/deepseek-ai-dsh-client-ui-sidebar-right/summary: + en: 8aafe5400014fdac + zh: b2d7d0e8dc4f1291 +/deepseek-ai-dsh-client-ui-sidebar-right/table-of-contents: + en: ff17f27d8c5557d1 + zh: 6efe4b3d4902a441 +/deepseek-ai-dsh-client-ui-sidebar-right/what-lives-here-and-what-does-not: + en: 3b007cc4d2d89c60 + zh: 74d9795c6392ad74 +/deepseek-ai-dsh-client-ui-sidebar-right/presentations: + en: 6d7f145ecb1fd140 + zh: 666d142ef249f6cb +/deepseek-ai-dsh-client-ui-sidebar-right/the-expand-button: + en: ccbe3072ce69cda1 + zh: 30c69fd96754564f +/deepseek-ai-dsh-client-ui-sidebar-right/state: + en: 2b15cdf5f1383291 + zh: 57018036d77363ba +/deepseek-ai-dsh-client-ui-sidebar-right/extension-seats: + en: ecd6e293949ca32c + zh: c95beb1d55be071b +/deepseek-ai-dsh-client-ui-sidebar-right/ctx-sidebarright: + en: 94ce0f100d64de44 + zh: 63231a9261d4364d +/deepseek-ai-dsh-client-ui-sidebar-right/the-tab-domain: + en: 134988d8f15f4acf + zh: 5ad4ad4a9d3f381e +/deepseek-ai-dsh-client-ui-sidebar-right/the-guide: + en: 1e671d989a55e5da + zh: 82f5baf4cb7af1f5 +/deepseek-ai-dsh-client-ui-sidebar-right/copy: + en: 4315a1c03ca5fef3 + zh: c09a09f1d9b99107 +/deepseek-ai-dsh-client-ui-sidebar-right/model-experience: + en: 3120df665299c634 + zh: 242f3d68e8267e55 +/deepseek-ai-dsh-client-ui-sidebar-right/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-ui-sidebar-right/known-limitations-and-deferred-work: + en: 76a763b4dd71babd + zh: fdc966dd427a82fb +/deepseek-ai-dsh-client-ui-sidebar-right/known-limitations-and-deferred-work/dev-note: + en: 33274d681fac9a21 + zh: e024c1c4766b289f diff --git a/packages/client/ui-sidebar-terminal/README.i18n.yaml b/packages/client/ui-sidebar-terminal/README.i18n.yaml index 75645087ed..4e1101a438 100644 --- a/packages/client/ui-sidebar-terminal/README.i18n.yaml +++ b/packages/client/ui-sidebar-terminal/README.i18n.yaml @@ -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 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 packages/client/ui-sidebar-terminal/README.md -README.md: 02f4c60d20a0cebb594d18085212c8c0bfdc2438 -README.zh.md: b8ab03ce8a62c2ba27a9258d12c7e5d08a178a72 +/: + en: cbb34e66a0b2a790 + zh: 51f560b10b0a10cd +/deepseek-ai-dsh-client-ui-sidebar-terminal: + en: c1cbfa42fe4b3bb4 + zh: 66e21aaec7680cc7 +/deepseek-ai-dsh-client-ui-sidebar-terminal/summary: + en: 8d2490a0699a5ccc + zh: 2e94b6724052bf86 +/deepseek-ai-dsh-client-ui-sidebar-terminal/table-of-contents: + en: d152484eb41ac6b4 + zh: 1fa9a72d1ee045cc +/deepseek-ai-dsh-client-ui-sidebar-terminal/use-this-package: + en: 24a166e12e82ddd9 + zh: 92c0f456cbdb7682 +/deepseek-ai-dsh-client-ui-sidebar-terminal/understand-the-implementation: + en: 5fd7c0f80571300a + zh: 55429315124d0488 +/deepseek-ai-dsh-client-ui-sidebar-terminal/further-exploration: + en: 9a4ba1f433d5fda2 + zh: b2b58d3d144d4eba +/deepseek-ai-dsh-client-ui-sidebar-terminal/model-experience: + en: 2c52eec781441d2a + zh: 35a7c88f180f74a1 +/deepseek-ai-dsh-client-ui-sidebar-terminal/model-experience/kv-cache-effect: + en: 507d3b3b80596fdc + zh: 4659007c4671afdc +/deepseek-ai-dsh-client-ui-sidebar-terminal/known-limitations-and-deferred-work: + en: 53d0b4b028b69a33 + zh: c7adf9e9c9ede59c +/deepseek-ai-dsh-client-ui-sidebar-terminal/known-limitations-and-deferred-work/dev-note: + en: 2acda84e5b9a3ce2 + zh: f86e92da1c66ffff diff --git a/packages/client/ui-sidebar/README.i18n.yaml b/packages/client/ui-sidebar/README.i18n.yaml index 7d64e76cb3..a73a91fd73 100644 --- a/packages/client/ui-sidebar/README.i18n.yaml +++ b/packages/client/ui-sidebar/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/client/ui-sidebar/README.md -README.md: 9ee8d9eb95d0991f1cdfcee3b5beee4d249d3f50 -README.zh.md: c858362b4b8a8c5e41b337253454d41001f926fa +/: + en: 7884381c2c554eca + zh: e6d7199a9bb2f0f8 +/deepseek-ai-dsh-client-ui-sidebar: + en: 3b3885c78b619c8a + zh: 2cabf9cfec748497 +/deepseek-ai-dsh-client-ui-sidebar/summary: + en: af17f03561e5372b + zh: 91a1b9f6c7a51025 +/deepseek-ai-dsh-client-ui-sidebar/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-sidebar/use-this-package: + en: a970f0547496634f + zh: 36ef9a85b26e19f1 +/deepseek-ai-dsh-client-ui-sidebar/use-this-package/brand-and-new-session: + en: 812970ac56f07665 + zh: c5ac84cae87ebd22 +/deepseek-ai-dsh-client-ui-sidebar/use-this-package/global-panel-entries: + en: 5d3300d3506254c5 + zh: 541ae1ee1e10b921 +/deepseek-ai-dsh-client-ui-sidebar/use-this-package/collapse-behavior: + en: 2c61954ccaeec591 + zh: 89710213e4e65995 +/deepseek-ai-dsh-client-ui-sidebar/use-this-package/macos-desktop: + en: bcf4ba5b9276faa4 + zh: f200ecad86631695 +/deepseek-ai-dsh-client-ui-sidebar/use-this-package/scrollbars: + en: d053b1ed0f4fd293 + zh: ff25a56541f57530 +/deepseek-ai-dsh-client-ui-sidebar/understand-the-implementation: + en: 676cd4c309b4110d + zh: 25d1bd0b2c7db645 +/deepseek-ai-dsh-client-ui-sidebar/understand-the-implementation/slot-discipline: + en: 6eefc5c45abe8a8f + zh: 20b651e48a0ea903 +/deepseek-ai-dsh-client-ui-sidebar/further-exploration: + en: 5083bbf74e47bb67 + zh: 0236e569178756a2 +/deepseek-ai-dsh-client-ui-sidebar/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-sidebar/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-sidebar/known-limitations-and-deferred-work: + en: 262db5b10dfb7d98 + zh: c1b5cf6aa58b054e +/deepseek-ai-dsh-client-ui-sidebar/known-limitations-and-deferred-work/dev-note: + en: c8d74533efbc8d23 + zh: eb58f7098335f55e diff --git a/packages/client/ui-skill/README.i18n.yaml b/packages/client/ui-skill/README.i18n.yaml index c0203ad861..f1abf210fd 100644 --- a/packages/client/ui-skill/README.i18n.yaml +++ b/packages/client/ui-skill/README.i18n.yaml @@ -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 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 packages/client/ui-skill/README.md -README.md: 0234ce8fb6c2737ea242ac5590e471c3e4c91834 -README.zh.md: 5b039ec1c5bea818e6396f4896c05b8175beb08a +/: + en: 490d60d7bec05d21 + zh: 72a1300893d68f31 +/deepseek-ai-dsh-client-ui-skill: + en: 17b91cfc2300ea2b + zh: 1fcd42e48e14c5ec +/deepseek-ai-dsh-client-ui-skill/summary: + en: fad7bff8d3371dfc + zh: c546189c87d6fbf2 +/deepseek-ai-dsh-client-ui-skill/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-skill/use-this-package: + en: 2f17d0875048ef3c + zh: 6878ee4c75f2b2cf +/deepseek-ai-dsh-client-ui-skill/use-this-package/what-the-source-offers: + en: 2ba1a6158c85b46e + zh: 9ab58ceef8743849 +/deepseek-ai-dsh-client-ui-skill/use-this-package/the-skill-tool-row: + en: 52c7aee8faf26795 + zh: f68e2f17cc7e369a +/deepseek-ai-dsh-client-ui-skill/understand-the-implementation: + en: df2a0ee9d2638f41 + zh: 3b4af7e505e990ca +/deepseek-ai-dsh-client-ui-skill/understand-the-implementation/candidate-flow: + en: 1a02a85859f851c7 + zh: 03bd48b83c4a287c +/deepseek-ai-dsh-client-ui-skill/understand-the-implementation/registration: + en: 1965ad3169b7fd97 + zh: efc23c44ad1d2765 +/deepseek-ai-dsh-client-ui-skill/further-exploration: + en: 54198f095d0cc569 + zh: 4eba4413e159967b +/deepseek-ai-dsh-client-ui-skill/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-client-ui-skill/model-experience/user-explicit-skill-invocation: + en: ae1928252b0ea55c + zh: 6c78cb51c6805a2d +/deepseek-ai-dsh-client-ui-skill/model-experience/user-explicit-skill-invocation/what-the-model-sees: + en: 02313760445799a2 + zh: 46007ed9e9f35b44 +/deepseek-ai-dsh-client-ui-skill/model-experience/user-explicit-skill-invocation/token-effect: + en: cb759321f8c62a96 + zh: 6d479501856d9cd6 +/deepseek-ai-dsh-client-ui-skill/model-experience/user-explicit-skill-invocation/kv-cache-effect: + en: da53c649077dad7e + zh: 845f77793f8e10a2 +/deepseek-ai-dsh-client-ui-skill/known-limitations-and-deferred-work: + en: aed53b17a91d4b02 + zh: fac571e9228e69c5 +/deepseek-ai-dsh-client-ui-skill/known-limitations-and-deferred-work/dev-note: + en: f3cb9f98b665c2f9 + zh: 2275c60173ce961b diff --git a/packages/client/ui-slots/README.i18n.yaml b/packages/client/ui-slots/README.i18n.yaml index 3399f7c045..a06b6a5010 100644 --- a/packages/client/ui-slots/README.i18n.yaml +++ b/packages/client/ui-slots/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/client/ui-slots/README.md -README.md: d82b303d5d6efaebbccaab00d06d874d79165fb1 -README.zh.md: 2a9d0364eda148ddf8db8cc61daf1747381c4875 +/: + en: 5a5d547e129dd834 + zh: 40cd5d61ef91e908 +/deepseek-ai-dsh-client-ui-slots: + en: e708fcaf0caa1989 + zh: 7b9d19291b159f7b +/deepseek-ai-dsh-client-ui-slots/summary: + en: 486631f9cc7b5d6f + zh: 61fdcd066fcd1402 +/deepseek-ai-dsh-client-ui-slots/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-slots/use-this-package: + en: 05691d44a0c6c48f + zh: 434033d5761297f3 +/deepseek-ai-dsh-client-ui-slots/use-this-package/reusable-component-factories: + en: 301de67bf2779ae6 + zh: 6e9d405ee1063d53 +/deepseek-ai-dsh-client-ui-slots/use-this-package/the-five-framework-props-shares: + en: 45e2933a5e084956 + zh: 938deedaf489f892 +/deepseek-ai-dsh-client-ui-slots/use-this-package/store-seats: + en: 0d1c2948112841ec + zh: fc5a998cea485024 +/deepseek-ai-dsh-client-ui-slots/use-this-package/declaration-discipline: + en: 8a41014931ffccd5 + zh: 615f93335a682b01 +/deepseek-ai-dsh-client-ui-slots/understand-the-implementation: + en: 983e6c0e71105f65 + zh: 75af8d36dd8223fd +/deepseek-ai-dsh-client-ui-slots/understand-the-implementation/registration-and-routing: + en: 0638aaadacadb6f1 + zh: cb6324ef5c9e1ade +/deepseek-ai-dsh-client-ui-slots/understand-the-implementation/the-renderer-contract: + en: 2b6058e98fb1efe7 + zh: f32e37c8381809b9 +/deepseek-ai-dsh-client-ui-slots/further-exploration: + en: f4e5bbcf18e26c32 + zh: 075486785ab5d453 +/deepseek-ai-dsh-client-ui-slots/model-experience: + en: 3120df665299c634 + zh: 67bb5e1fe59dae19 +/deepseek-ai-dsh-client-ui-slots/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-slots/known-limitations-and-deferred-work: + en: 093b1c5076ddfd6d + zh: 3069c423115492fe +/deepseek-ai-dsh-client-ui-slots/known-limitations-and-deferred-work/dev-note: + en: 89e67d6054319245 + zh: b55de4cfddf136a5 diff --git a/packages/client/ui-subagent/README.i18n.yaml b/packages/client/ui-subagent/README.i18n.yaml index 7047219a90..60769dea9e 100644 --- a/packages/client/ui-subagent/README.i18n.yaml +++ b/packages/client/ui-subagent/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/client/ui-subagent/README.md -README.md: 037c84c9c80d1d1d129f543b9f60d834ef2d4ce7 -README.zh.md: e7c3fb052c0b42dd3c102aa504a733c3938438c0 +/: + en: ff1b1fbd0d7f629b + zh: c68a59640e73c0ce +/deepseek-ai-dsh-client-ui-subagent: + en: 930db612ece65ad4 + zh: ad7e9d9afb4545ac +/deepseek-ai-dsh-client-ui-subagent/summary: + en: 50f267d55833a683 + zh: 89d6b827576baa8b +/deepseek-ai-dsh-client-ui-subagent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-subagent/use-this-package: + en: 06f6bac3153361f5 + zh: e8b23941cbd16036 +/deepseek-ai-dsh-client-ui-subagent/use-this-package/browsing-the-tree: + en: 3508631091820123 + zh: ec7da9e5bedb22ba +/deepseek-ai-dsh-client-ui-subagent/use-this-package/continuing-a-conversation: + en: 876e7152c8b9c4a6 + zh: f89f5e2a812e8451 +/deepseek-ai-dsh-client-ui-subagent/use-this-package/the-reference-source: + en: 6a5f91b7dfcefafe + zh: 2d11441952cfea53 +/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation: + en: 8dc3c556cd57bdd8 + zh: f5c86a690bba7f7d +/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/catalog-derivation: + en: 5e1c83ef8eb26c52 + zh: f5be8f1e78c74859 +/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/duration-completion-and-tokens: + en: b817e9907392f59c + zh: e42feb97d572a989 +/deepseek-ai-dsh-client-ui-subagent/understand-the-implementation/composer-election: + en: 1c15af4dd7c0b791 + zh: f789737ab4dd8cb2 +/deepseek-ai-dsh-client-ui-subagent/further-exploration: + en: 3b9b3cb4ad8f65f6 + zh: 63a2c10a4613cca1 +/deepseek-ai-dsh-client-ui-subagent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt: + en: 7207881f1c032278 + zh: 911d6e8b319da21a +/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/what-the-model-sees: + en: 5688696ee061a0e1 + zh: 7199ef8cb8697960 +/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/token-effect: + en: bf3c483598710d54 + zh: 32742fbb880db1b2 +/deepseek-ai-dsh-client-ui-subagent/model-experience/subagent-label-text-in-the-user-prompt/kv-cache-effect: + en: de2762a99572475f + zh: 9b41107ad14ebf8a +/deepseek-ai-dsh-client-ui-subagent/known-limitations-and-deferred-work: + en: ee310ff3cd487639 + zh: 23793aa1c28a23af +/deepseek-ai-dsh-client-ui-subagent/known-limitations-and-deferred-work/dev-note: + en: 3dd148cecbb1a4df + zh: 626cc5ed9f65c72a diff --git a/packages/client/ui-theme/README.i18n.yaml b/packages/client/ui-theme/README.i18n.yaml index 046b137c88..c3f107d29d 100644 --- a/packages/client/ui-theme/README.i18n.yaml +++ b/packages/client/ui-theme/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/client/ui-theme/README.md -README.md: 7248b7230afa28f817bec7c0eb26fd9512fff405 -README.zh.md: 6dc1db064dd9a6754f6c6475dde18ccf1a17841e +/: + en: 1f98ae39f4e5a3a1 + zh: d83f563eb12a023d +/deepseek-ai-dsh-client-ui-theme: + en: 06c7d7624947a72a + zh: ac4ca82984564825 +/deepseek-ai-dsh-client-ui-theme/summary: + en: c2a579fd56c0c4e2 + zh: f1842fbb209f876c +/deepseek-ai-dsh-client-ui-theme/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-theme/use-this-package: + en: 5d64b3d918d5edfa + zh: fc929354a0faf33a +/deepseek-ai-dsh-client-ui-theme/use-this-package/appearance-and-font-size: + en: 0b0177e1afefe4a7 + zh: 52d88f12a8369ee8 +/deepseek-ai-dsh-client-ui-theme/use-this-package/registering-a-theme: + en: 2cd32ccaba33b3e9 + zh: 53ea78d19929ea02 +/deepseek-ai-dsh-client-ui-theme/use-this-package/pre-plugin-palette: + en: 54296471349d9f77 + zh: 8ca162b7b57b822e +/deepseek-ai-dsh-client-ui-theme/understand-the-implementation: + en: f7e14d496c0a1a7d + zh: 6ebdde24b68813ea +/deepseek-ai-dsh-client-ui-theme/understand-the-implementation/stylesheets: + en: 010179f77ff92759 + zh: d4559f712e62b149 +/deepseek-ai-dsh-client-ui-theme/understand-the-implementation/scrollbar-rebinding: + en: bf76e7c34a331595 + zh: 5accd0260ef7c61e +/deepseek-ai-dsh-client-ui-theme/understand-the-implementation/preference-persistence: + en: 2d3e5c0ef3f40ffa + zh: d1bc9a86f68ec84b +/deepseek-ai-dsh-client-ui-theme/further-exploration: + en: fb1b98ad71d7d9c2 + zh: c7fa18ab56739e0c +/deepseek-ai-dsh-client-ui-theme/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-theme/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-theme/known-limitations-and-deferred-work: + en: 0d328dbced31a041 + zh: 2951de356ba6bb82 +/deepseek-ai-dsh-client-ui-theme/known-limitations-and-deferred-work/dev-note: + en: f1a2942985b11203 + zh: 8196d82321e024b0 diff --git a/packages/client/ui-tool/README.i18n.yaml b/packages/client/ui-tool/README.i18n.yaml index 6f021da319..68408d4575 100644 --- a/packages/client/ui-tool/README.i18n.yaml +++ b/packages/client/ui-tool/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/client/ui-tool/README.md -README.md: b4a529fbcb1ed33976d71baf043e625fcca4c89c -README.zh.md: 406dc884f3529af79d675e6fbe1586e7485c3780 +/: + en: d5ef8fa5a5ebfbc2 + zh: 9870b3f207a248cc +/deepseek-ai-dsh-client-ui-tool: + en: 03bfcfbf7f1cea76 + zh: 142abbf07affee63 +/deepseek-ai-dsh-client-ui-tool/summary: + en: e7ef510d1764f9b2 + zh: 236bc66607211f0f +/deepseek-ai-dsh-client-ui-tool/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-tool/use-this-package: + en: aa22dc3d35884fce + zh: edca432fd3512585 +/deepseek-ai-dsh-client-ui-tool/use-this-package/registering-a-business-tool-view: + en: 5332d87e76037f07 + zh: db5d06e7e46b8429 +/deepseek-ai-dsh-client-ui-tool/use-this-package/built-in-views: + en: 4b69e36952574494 + zh: 1f9842b40931adb6 +/deepseek-ai-dsh-client-ui-tool/understand-the-implementation: + en: 00bc7b0c84edc603 + zh: 1cfcf5b435248a91 +/deepseek-ai-dsh-client-ui-tool/understand-the-implementation/rendering-contract: + en: 2959b10b01e08a7b + zh: 7084ca22650cbb5b +/deepseek-ai-dsh-client-ui-tool/understand-the-implementation/cards: + en: 401a0118de2dba33 + zh: 9efe590dd485c336 +/deepseek-ai-dsh-client-ui-tool/further-exploration: + en: 886059e6bd594ebf + zh: 94cfe8d0a789f413 +/deepseek-ai-dsh-client-ui-tool/model-experience: + en: 1e5e72dd269855d5 + zh: 81a4756d460e3af9 +/deepseek-ai-dsh-client-ui-tool/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-tool/known-limitations-and-deferred-work: + en: fbf35f5cabbf7fb1 + zh: 8849608b87d4f0cd +/deepseek-ai-dsh-client-ui-tool/known-limitations-and-deferred-work/dev-note: + en: 0fdeab2e4db0261f + zh: 156d2b2952cf112e diff --git a/packages/client/ui-trajectory/README.i18n.yaml b/packages/client/ui-trajectory/README.i18n.yaml index e79506c955..07c2c65f73 100644 --- a/packages/client/ui-trajectory/README.i18n.yaml +++ b/packages/client/ui-trajectory/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/client/ui-trajectory/README.md -README.md: 03553df4c69da9d5ec64416a8e65765d5dbcc904 -README.zh.md: 7ce33007c40e77e9b288df988c4e7b7597576646 +/: + en: b9065ee3da8927c2 + zh: 36a38fa86d552b46 +/deepseek-ai-dsh-client-ui-trajectory: + en: 60e3cab036a4a8c6 + zh: 2a400cd0efd99284 +/deepseek-ai-dsh-client-ui-trajectory/summary: + en: dc75677138d05dc6 + zh: 6e11553a5caf4716 +/deepseek-ai-dsh-client-ui-trajectory/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-trajectory/use-this-package: + en: 4bd17d05b8385675 + zh: 5174e27f754f2a03 +/deepseek-ai-dsh-client-ui-trajectory/use-this-package/inspecting-records: + en: 89758270607a5fd4 + zh: 0efba26195ef1f80 +/deepseek-ai-dsh-client-ui-trajectory/use-this-package/the-timing-overview: + en: 0331f90cbd904862 + zh: bdc2d4ed1c3c1f5e +/deepseek-ai-dsh-client-ui-trajectory/understand-the-implementation: + en: 925abc8e4b092cb3 + zh: ebe85c5acdbea3b1 +/deepseek-ai-dsh-client-ui-trajectory/understand-the-implementation/virtual-rows: + en: c85e342bc7eee4e6 + zh: 9feab66ef1755b94 +/deepseek-ai-dsh-client-ui-trajectory/understand-the-implementation/layout: + en: b9693a54b800d439 + zh: cd9b84382ae0b181 +/deepseek-ai-dsh-client-ui-trajectory/further-exploration: + en: a324740cfbe62c1e + zh: 53077c3ffc69b510 +/deepseek-ai-dsh-client-ui-trajectory/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-trajectory/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-trajectory/known-limitations-and-deferred-work: + en: 8c3d3b2d42384c8c + zh: 00739e172c39db3b +/deepseek-ai-dsh-client-ui-trajectory/known-limitations-and-deferred-work/dev-note: + en: f1893e3a6c69cc58 + zh: b6e0dfe20567c35f diff --git a/packages/client/ui-user-questions/README.i18n.yaml b/packages/client/ui-user-questions/README.i18n.yaml index 626839020e..af7e0158f4 100644 --- a/packages/client/ui-user-questions/README.i18n.yaml +++ b/packages/client/ui-user-questions/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/client/ui-user-questions/README.md -README.md: 929494485b5ca1c0afb6fa3d24f59627136cc915 -README.zh.md: 0269998b744e020bd9d58b8f919626297cd94f7f +/: + en: b50469addda9db2d + zh: ae560611295a5f4d +/deepseek-ai-dsh-client-ui-user-questions: + en: f109e91b29d71f55 + zh: 73200984bad7f908 +/deepseek-ai-dsh-client-ui-user-questions/summary: + en: 7e81c6a53759ff37 + zh: b83f666c4ef4cbd3 +/deepseek-ai-dsh-client-ui-user-questions/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-user-questions/use-this-package: + en: 4aa048dcb7282f12 + zh: d2731da0870aa6a0 +/deepseek-ai-dsh-client-ui-user-questions/use-this-package/answering: + en: 8b6f37bfb11a2c3a + zh: 59d8951211f9b21b +/deepseek-ai-dsh-client-ui-user-questions/use-this-package/the-plan-review-card: + en: 6b12f1362c614a39 + zh: 27d9cf54d4cbd5d2 +/deepseek-ai-dsh-client-ui-user-questions/use-this-package/failure-and-recovery: + en: da530ef485c07417 + zh: b07525cfcd5034f0 +/deepseek-ai-dsh-client-ui-user-questions/understand-the-implementation: + en: 77e1b2585acdf67b + zh: d433ec185c6b8f57 +/deepseek-ai-dsh-client-ui-user-questions/understand-the-implementation/intent-surface-election: + en: 7f3e0e2460317462 + zh: cb6b9410410e2f29 +/deepseek-ai-dsh-client-ui-user-questions/understand-the-implementation/copy-and-locale: + en: 1a144dbf8bf39d43 + zh: 66bccf9c343395c7 +/deepseek-ai-dsh-client-ui-user-questions/further-exploration: + en: 70e1ae005fa86e3c + zh: 9c779d63b3f921cc +/deepseek-ai-dsh-client-ui-user-questions/model-experience: + en: 198421eb8ed8923f + zh: 84f719be6e6dfe62 +/deepseek-ai-dsh-client-ui-user-questions/model-experience/kv-cache-effect: + en: 1032ba29b7d7f9d7 + zh: 01f1dbf4c2164fd2 +/deepseek-ai-dsh-client-ui-user-questions/known-limitations-and-deferred-work: + en: beb6dc6d1496e799 + zh: d92150a88a797c21 +/deepseek-ai-dsh-client-ui-user-questions/known-limitations-and-deferred-work/dev-note: + en: 7c763299daed17e4 + zh: fb410b366b407ec7 diff --git a/packages/client/ui-workflow-run/README.i18n.yaml b/packages/client/ui-workflow-run/README.i18n.yaml index 7b2feae40e..d34e6a8bd6 100644 --- a/packages/client/ui-workflow-run/README.i18n.yaml +++ b/packages/client/ui-workflow-run/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/client/ui-workflow-run/README.md -README.md: f48efe1f1525603a0f710f1a3fc6302cc14d109f -README.zh.md: 9fa6f59b6899aa353d50a39e73218e6ee8748417 +/: + en: 1310faa1582887b5 + zh: 16b77855de7f9292 +/deepseek-ai-dsh-client-ui-workflow-run: + en: d606bcab47f1b3f3 + zh: 31fd19010234cbd4 +/deepseek-ai-dsh-client-ui-workflow-run/summary: + en: bbb41a09daa0ed51 + zh: db65a976a21b1972 +/deepseek-ai-dsh-client-ui-workflow-run/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-workflow-run/use-this-package: + en: 9712b1ed5f00f24f + zh: c8f72b2ef448d9af +/deepseek-ai-dsh-client-ui-workflow-run/use-this-package/navigating-the-node: + en: ced9d82bdf540585 + zh: 34651e03ed937508 +/deepseek-ai-dsh-client-ui-workflow-run/use-this-package/state-and-completion: + en: 03784e501ae8f70a + zh: 90b32daccf577780 +/deepseek-ai-dsh-client-ui-workflow-run/understand-the-implementation: + en: d41b996f3fb6727b + zh: 6b40fdf1db894fff +/deepseek-ai-dsh-client-ui-workflow-run/understand-the-implementation/disclosure-choices: + en: adf86d983c51865e + zh: 014a4644d55be111 +/deepseek-ai-dsh-client-ui-workflow-run/understand-the-implementation/composition: + en: 364d3c38e5f02149 + zh: ca5dbee6ac27e141 +/deepseek-ai-dsh-client-ui-workflow-run/further-exploration: + en: e95928b8d16b4043 + zh: 15f74b81c7c7b6df +/deepseek-ai-dsh-client-ui-workflow-run/model-experience: + en: 62a75f801964a0bb + zh: a247663753a52ae9 +/deepseek-ai-dsh-client-ui-workflow-run/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work: + en: 3c5afa2d75f50eb0 + zh: 84f2e93d6dcb0ada +/deepseek-ai-dsh-client-ui-workflow-run/known-limitations-and-deferred-work/dev-note: + en: 8e5a74ff5f3bc069 + zh: b5d05c4d192ac837 diff --git a/packages/client/ui-workspace/README.i18n.yaml b/packages/client/ui-workspace/README.i18n.yaml index 569e7e7760..fa788ce5b2 100644 --- a/packages/client/ui-workspace/README.i18n.yaml +++ b/packages/client/ui-workspace/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/client/ui-workspace/README.md -README.md: 7dcff13bc1767051c301174240979873444d4291 -README.zh.md: 1b3e83c71f700976799ff5b93b6fe4c60f896583 +/: + en: 7c0f613105d4008a + zh: c36c0cdff7e77576 +/deepseek-ai-dsh-client-ui-workspace: + en: c611184cd49f130f + zh: caddcda48dc30f11 +/deepseek-ai-dsh-client-ui-workspace/summary: + en: a174913bdf035cb2 + zh: c88c93f3bb927b56 +/deepseek-ai-dsh-client-ui-workspace/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-workspace/use-this-package: + en: c8d579e1e65bc8c5 + zh: 56f8e45351445ec7 +/deepseek-ai-dsh-client-ui-workspace/use-this-package/reordering-and-view-options: + en: 1fe0693758e0536b + zh: ef30198bc767fc04 +/deepseek-ai-dsh-client-ui-workspace/use-this-package/workspace-hierarchy: + en: 5e049b90c55eddb3 + zh: e06dc8d0d25c013f +/deepseek-ai-dsh-client-ui-workspace/use-this-package/search: + en: 9eab3bfbaf98c987 + zh: 54e7e141dae5c9e8 +/deepseek-ai-dsh-client-ui-workspace/use-this-package/managing-sessions: + en: c39537176100db4b + zh: 14118c8dbcdbd769 +/deepseek-ai-dsh-client-ui-workspace/use-this-package/pending-interactions: + en: 79a9e08335f6361b + zh: 51a2849fb3ac994f +/deepseek-ai-dsh-client-ui-workspace/use-this-package/active-schedule-markers: + en: 5c5588d7c3d96f40 + zh: 420f20e93a616e78 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation: + en: f08ceb1f5612a6ac + zh: a75b56cc094b5c45 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/the-directory-flow-hole: + en: 978415ec6b2e0cc0 + zh: 0d5c705ff34fb1da +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/session-row-actions: + en: a3b80d0e844d2929 + zh: 85fe5dfb2968b491 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/session-row-actions/packaged-client-plugin: + en: 36934671b80b11ae + zh: 8e0aea6162e35e77 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/session-row-actions/dynamic-client-package: + en: ad4a333892f2fe92 + zh: 3a670fd401f4d7a7 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/view-state: + en: c8868c409c3185ce + zh: 4533d8c547562509 +/deepseek-ai-dsh-client-ui-workspace/understand-the-implementation/hover-cards: + en: f236cadca4c98088 + zh: 8b36850c1d5f73d2 +/deepseek-ai-dsh-client-ui-workspace/further-exploration: + en: 2abbf27abbd71ba4 + zh: ace33fa2ea042357 +/deepseek-ai-dsh-client-ui-workspace/model-experience: + en: 3120df665299c634 + zh: 1d9f365d091d0d2a +/deepseek-ai-dsh-client-ui-workspace/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-ui-workspace/known-limitations-and-deferred-work: + en: 00d7b1ddda7390f5 + zh: 1e5a1055d1be4d1d +/deepseek-ai-dsh-client-ui-workspace/known-limitations-and-deferred-work/dev-note: + en: 585813ff2c68c20c + zh: 18b43c0d64fa8a72 diff --git a/packages/client/web/README.i18n.yaml b/packages/client/web/README.i18n.yaml index 54a3292d36..9a437da0f3 100644 --- a/packages/client/web/README.i18n.yaml +++ b/packages/client/web/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/client/web/README.md -README.md: cefb0f638b4a287d7fb92e2a4de624f2cba2481a -README.zh.md: 534c4d9d7ab0103ed6fbb84ee2399dc37cf02d4c +/: + en: bd6e5fc50f07893f + zh: 0ee146674eb01770 +/deepseek-ai-dsh-client-web: + en: 8423614617b7bbf1 + zh: c99647136c800173 +/deepseek-ai-dsh-client-web/summary: + en: 646bd0a246789400 + zh: d875dc0d37f46338 +/deepseek-ai-dsh-client-web/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-web/use-this-package: + en: 0c8b98946feedb0f + zh: ae10ae7b9ecbf89c +/deepseek-ai-dsh-client-web/use-this-package/what-boot-looks-like: + en: f3b01aa878764e5c + zh: f02eab65d441bfe0 +/deepseek-ai-dsh-client-web/use-this-package/the-boot-page: + en: add354591107b80d + zh: 41136254a00d785e +/deepseek-ai-dsh-client-web/use-this-package/the-shared-module-table: + en: 8380cd70b861a3a8 + zh: 5a331deb7ad8fca1 +/deepseek-ai-dsh-client-web/use-this-package/configuration: + en: 942959cb40ee31a1 + zh: 9c86ac2cf6a13976 +/deepseek-ai-dsh-client-web/understand-the-implementation: + en: 90338f53cf18114c + zh: 15660681f8414c07 +/deepseek-ai-dsh-client-web/understand-the-implementation/design-concept: + en: e18ec3ae51dcdc3f + zh: e454da2038979aec +/deepseek-ai-dsh-client-web/understand-the-implementation/two-stage-boot: + en: fb3cab79c1505627 + zh: 875897afe593aeb3 +/deepseek-ai-dsh-client-web/understand-the-implementation/boot-page-mechanics: + en: 83f9195138da9a82 + zh: 135d7da735fb870a +/deepseek-ai-dsh-client-web/understand-the-implementation/source-map: + en: 1fe37d3730368e32 + zh: 74c2d6980ce82e21 +/deepseek-ai-dsh-client-web/further-exploration: + en: f2da70a33bba9086 + zh: a775f6fe309150ea +/deepseek-ai-dsh-client-web/model-experience: + en: ec17334dcce181f3 + zh: bc8bc6e25ecbf9e8 +/deepseek-ai-dsh-client-web/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-client-web/known-limitations-and-deferred-work: + en: f498ba05d4ea96d5 + zh: c3e57dd8ca9b5bda +/deepseek-ai-dsh-client-web/known-limitations-and-deferred-work/dev-note: + en: 80ab3d00f7aac4de + zh: 3c08f30322413856 diff --git a/packages/compaction/README.i18n.yaml b/packages/compaction/README.i18n.yaml index fe00439d62..bd122bc1bb 100644 --- a/packages/compaction/README.i18n.yaml +++ b/packages/compaction/README.i18n.yaml @@ -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 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 packages/compaction/README.md -README.md: 46ab8fab72d55b4926c9fe582187e025ce7a67d0 -README.zh.md: cb2f3cbab8bf0aee7d3dd57d77a39131f7fe6cbc +/: + en: 4fe8f6f7b09339c1 + zh: d138739147e506ef +/compaction-compaction-capability-family: + en: 6a34829e201f8502 + zh: 658ebd87d47af24a +/compaction-compaction-capability-family/summary: + en: a0ff7525b70a868b + zh: 8f5394af82de6686 +/compaction-compaction-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/compaction-compaction-capability-family/packages: + en: ff30478097349347 + zh: ec5c73197eaf1718 +/compaction-compaction-capability-family/related-documentation: + en: 4bb1ee8212d9df3c + zh: 80ffe4910a29c105 +/compaction-compaction-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/compaction/command-compact/README.i18n.yaml b/packages/compaction/command-compact/README.i18n.yaml index 00d262d04d..663500b013 100644 --- a/packages/compaction/command-compact/README.i18n.yaml +++ b/packages/compaction/command-compact/README.i18n.yaml @@ -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 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 packages/compaction/command-compact/README.md -README.md: 4c9a550febd3cef13fea82c61f9bf96f65a17b64 -README.zh.md: ad31604e9e37c3b676da9b6497cab660e90bc0e4 +/: + en: 50e574eada34df78 + zh: 2cd08d40d11d0059 +/deepseek-ai-dsh-command-compact: + en: 4e97e77fb62ef83f + zh: aef1cbba63b69522 +/deepseek-ai-dsh-command-compact/summary: + en: 5b2c62d3505485bb + zh: a4d71e8106312e8e +/deepseek-ai-dsh-command-compact/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-command-compact/use-this-package: + en: ee457d37a1769e9d + zh: 60bf7402563034a4 +/deepseek-ai-dsh-command-compact/use-this-package/using-the-command: + en: f04f6a29f4170376 + zh: 16f838e848eadeb2 +/deepseek-ai-dsh-command-compact/use-this-package/what-you-see: + en: ee0cd9f39afcad64 + zh: ba8e5feb9f72cae7 +/deepseek-ai-dsh-command-compact/use-this-package/composing-the-command: + en: 7f1922f277c46d93 + zh: 531edb1176829c6a +/deepseek-ai-dsh-command-compact/use-this-package/what-happens-to-the-conversation: + en: 97bb54fca90ac8b9 + zh: a7e59ba0678f7359 +/deepseek-ai-dsh-command-compact/understand-the-implementation: + en: 55197024cba97312 + zh: ff3a096d2d46cd05 +/deepseek-ai-dsh-command-compact/understand-the-implementation/design-philosophy: + en: 1877e628fa664a42 + zh: 8e438bf9d0dccba9 +/deepseek-ai-dsh-command-compact/understand-the-implementation/lifecycle-and-correlation: + en: 498a645054ff192f + zh: f993a288e1408355 +/deepseek-ai-dsh-command-compact/understand-the-implementation/source-map: + en: 84b40f60d465fd94 + zh: aac534b232817c05 +/deepseek-ai-dsh-command-compact/further-exploration: + en: 2d8e82f68867898e + zh: bb18a352091adf85 +/deepseek-ai-dsh-command-compact/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-command-compact/model-experience/human-compact-control: + en: 0233c5bd155d0c78 + zh: a0c2d5cefd9c3503 +/deepseek-ai-dsh-command-compact/model-experience/human-compact-control/what-the-model-sees: + en: bfe6aa41237c0194 + zh: f1b577b15b5988c3 +/deepseek-ai-dsh-command-compact/model-experience/human-compact-control/token-effect: + en: f18e2c4147b62a08 + zh: 00409233f610a4fe +/deepseek-ai-dsh-command-compact/model-experience/human-compact-control/kv-cache-effect: + en: 41db62c6b45d9361 + zh: 2a1b13410fb2e96d +/deepseek-ai-dsh-command-compact/known-limitations-and-deferred-work: + en: beeea87558d2f6ea + zh: 9d6115543013aa61 +/deepseek-ai-dsh-command-compact/known-limitations-and-deferred-work/dev-note: + en: 8cdea65425c059ef + zh: 2afb257d7a61aa16 diff --git a/packages/compaction/compaction-basic/README.i18n.yaml b/packages/compaction/compaction-basic/README.i18n.yaml index 92b7b5e331..15c27232cf 100644 --- a/packages/compaction/compaction-basic/README.i18n.yaml +++ b/packages/compaction/compaction-basic/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/compaction/compaction-basic/README.md -README.md: e0a7d90fecf308fa9f83bf87c2bfb5c4ff13f2e3 -README.zh.md: 32d4f528e46206c5939dda038b710e01ce912d99 +/: + en: 4c3172f95eb524e1 + zh: dd92ec1300ad9cbe +/deepseek-ai-dsh-compaction-basic: + en: 3ba5f9e37ab36328 + zh: 2390a55415d4c27b +/deepseek-ai-dsh-compaction-basic/summary: + en: 31202d573182cc31 + zh: e0a0c96f67a9c1ba +/deepseek-ai-dsh-compaction-basic/table-of-contents: + en: d152484eb41ac6b4 + zh: bda879a892f240f0 +/deepseek-ai-dsh-compaction-basic/use-this-package: + en: b40fa08b8ad55cca + zh: f8765a6f199c8c7b +/deepseek-ai-dsh-compaction-basic/use-this-package/what-you-get: + en: eb8e340061f72b98 + zh: 327a51037b2d1adf +/deepseek-ai-dsh-compaction-basic/use-this-package/smallest-working-composition: + en: 4cb73d7a57908948 + zh: 7ba2ddc4c76e4957 +/deepseek-ai-dsh-compaction-basic/use-this-package/tuning-when-condensation-starts: + en: 3446c54c062d7e34 + zh: fb502c941e508ae0 +/deepseek-ai-dsh-compaction-basic/use-this-package/what-happens-when-condensation-runs: + en: c872a8ef069596f0 + zh: b3a48e309ae830d4 +/deepseek-ai-dsh-compaction-basic/use-this-package/on-demand-condensation-with-compact: + en: 4c5067e4c57ca708 + zh: 1c0e70319b9b2112 +/deepseek-ai-dsh-compaction-basic/use-this-package/trimming-oversized-tool-outputs: + en: 1d6a74c0dc874dc8 + zh: bcfa95549308c030 +/deepseek-ai-dsh-compaction-basic/understand-the-implementation: + en: deb655b3b1860576 + zh: 79f56e41a9dfe01f +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/design-philosophy: + en: 54945a18965f12a8 + zh: fecd5d4fc2f2e6d6 +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/automatic-triggers-and-overflow-recovery: + en: d62d65547dd0b2dc + zh: 5c21671f16d94f5a +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/summarization-mechanics: + en: 5fd70f523bb29ea1 + zh: 1a1c0f2f3d7f714f +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/the-region-transaction: + en: f4330f6bff22d400 + zh: 46e16c51bb66a0f7 +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/config-resolution: + en: 246736aa86d3013d + zh: 35e261927ba0699c +/deepseek-ai-dsh-compaction-basic/understand-the-implementation/source-map: + en: bd9d1e01ec833593 + zh: cbadca50d8e9ed07 +/deepseek-ai-dsh-compaction-basic/further-exploration: + en: 84b5b81eb9b5965d + zh: 7000af0fa502fcc1 +/deepseek-ai-dsh-compaction-basic/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-compaction-basic/model-experience/conversation-history: + en: 2e1148dd0f39a281 + zh: cd68c9fff63534af +/deepseek-ai-dsh-compaction-basic/model-experience/conversation-history/what-the-model-sees: + en: 8d4325e6659bc314 + zh: f80e69305b39f4a3 +/deepseek-ai-dsh-compaction-basic/model-experience/conversation-history/what-the-model-sees/conversation-checkpoint-preamble: + en: 129d1eaba2519330 + zh: 3ec517bdc6cb5ae3 +/deepseek-ai-dsh-compaction-basic/model-experience/conversation-history/token-effect: + en: 872515a75b5a9726 + zh: c0045e1972bbac4e +/deepseek-ai-dsh-compaction-basic/model-experience/conversation-history/kv-cache-effect: + en: a22b43f321843aee + zh: a5960da1bef34441 +/deepseek-ai-dsh-compaction-basic/model-experience/auxiliary-summarizer-request: + en: 7169bd02a7a6c396 + zh: 7c62e3d4a97c73f7 +/deepseek-ai-dsh-compaction-basic/model-experience/auxiliary-summarizer-request/what-the-model-sees: + en: 8499d6b501b45103 + zh: 035ddff0410fa86f +/deepseek-ai-dsh-compaction-basic/model-experience/auxiliary-summarizer-request/what-the-model-sees/compaction-instruction-final-user-message: + en: 39a362ee4890dbdb + zh: 3b98699120b1548e +/deepseek-ai-dsh-compaction-basic/model-experience/auxiliary-summarizer-request/token-effect: + en: 5e0679cb7cb4291a + zh: c9df8ebc526b05d9 +/deepseek-ai-dsh-compaction-basic/model-experience/auxiliary-summarizer-request/kv-cache-effect: + en: d31d3e3d46542c91 + zh: 5a42f873993e0c79 +/deepseek-ai-dsh-compaction-basic/known-limitations-and-deferred-work: + en: 8f459fa26e079883 + zh: 4acdcefa71ebb409 +/deepseek-ai-dsh-compaction-basic/known-limitations-and-deferred-work/dev-note: + en: 1fec7b90c3b68c49 + zh: ad9ae54a598846d0 diff --git a/packages/compaction/compaction-image-offload/README.i18n.yaml b/packages/compaction/compaction-image-offload/README.i18n.yaml index c3da3ba739..0f34aa7e25 100644 --- a/packages/compaction/compaction-image-offload/README.i18n.yaml +++ b/packages/compaction/compaction-image-offload/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/compaction/compaction-image-offload/README.md -README.md: 8e4d812c043234e07207c7326882856b445b0950 -README.zh.md: 06ed168e750cffbaa6594454ac4459f0ceb99788 +/: + en: b599a8ee08c48558 + zh: 4534254e1fd4cdcf +/deepseek-ai-dsh-compaction-image-offload: + en: 943faf0e7d54c535 + zh: 9d62398ac8842657 +/deepseek-ai-dsh-compaction-image-offload/summary: + en: 8881f7155e7f99c7 + zh: 1e01354c7a7b1e68 +/deepseek-ai-dsh-compaction-image-offload/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-compaction-image-offload/use-this-package: + en: 4e36e8e742bc94ed + zh: ca42226676c9da28 +/deepseek-ai-dsh-compaction-image-offload/use-this-package/minimal-configuration: + en: 7e32fdf2571d190c + zh: 6b455c98d3afa3e0 +/deepseek-ai-dsh-compaction-image-offload/use-this-package/what-you-can-observe: + en: 6a156ba4e44b520a + zh: a61fc63697f85095 +/deepseek-ai-dsh-compaction-image-offload/use-this-package/failures-and-recovery: + en: 5e4ac1980eec905a + zh: 0284e597c82cb179 +/deepseek-ai-dsh-compaction-image-offload/understand-the-implementation: + en: 884900df82bc9029 + zh: 2a7a69ae08bbf202 +/deepseek-ai-dsh-compaction-image-offload/further-exploration: + en: 081a5eafe9160c31 + zh: a4ed86e9389c91d0 +/deepseek-ai-dsh-compaction-image-offload/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-compaction-image-offload/model-experience/offloaded-request-images: + en: e57e89ce994680bd + zh: b31ac5142af08695 +/deepseek-ai-dsh-compaction-image-offload/model-experience/offloaded-request-images/what-the-model-sees: + en: 54a927e19008dd58 + zh: 45ec6d988b73e2fb +/deepseek-ai-dsh-compaction-image-offload/model-experience/offloaded-request-images/token-effect: + en: a1a6386bbdad684e + zh: 09a1f02f013390cd +/deepseek-ai-dsh-compaction-image-offload/model-experience/offloaded-request-images/kv-cache-effect: + en: 1ddf05ccd042aa85 + zh: 0f2984a2e6b8c5c7 +/deepseek-ai-dsh-compaction-image-offload/known-limitations-and-deferred-work: + en: 56e34b1ca548fa07 + zh: 8ad247f5251a5461 +/deepseek-ai-dsh-compaction-image-offload/known-limitations-and-deferred-work/dev-note: + en: 699a8ae4642c8f5a + zh: 19a4edd00e473c8a diff --git a/packages/compaction/compaction-tool-result-pruner/README.i18n.yaml b/packages/compaction/compaction-tool-result-pruner/README.i18n.yaml index 5f4ff48769..4092b69a1c 100644 --- a/packages/compaction/compaction-tool-result-pruner/README.i18n.yaml +++ b/packages/compaction/compaction-tool-result-pruner/README.i18n.yaml @@ -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 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 packages/compaction/compaction-tool-result-pruner/README.md -README.md: 7b05154bc02035bb86933e77a60904613f72bbed -README.zh.md: 06ecb2b3a63f4511cc334878b5c02358c0fad0fd +/: + en: 9ed7a84c51988fdb + zh: 4df60a349c2be7dc +/deepseek-ai-dsh-compaction-tool-result-pruner: + en: d1e83d1d335479f8 + zh: 747c5b2af42365a3 +/deepseek-ai-dsh-compaction-tool-result-pruner/summary: + en: a711510ce8293003 + zh: 0150d10c05bc2e59 +/deepseek-ai-dsh-compaction-tool-result-pruner/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-compaction-tool-result-pruner/use-this-package: + en: 03aed6a1e84dad5f + zh: e9a62ff6294041a6 +/deepseek-ai-dsh-compaction-tool-result-pruner/use-this-package/smallest-working-composition: + en: 55eadf840a54d2f8 + zh: cc6bf82f58058c7b +/deepseek-ai-dsh-compaction-tool-result-pruner/use-this-package/what-gets-trimmed: + en: a5cb5c94edcd91e3 + zh: ed95adc91d11bbda +/deepseek-ai-dsh-compaction-tool-result-pruner/use-this-package/setting-the-size-limits: + en: 9a357040ff261f6e + zh: 7434bb64ca9bd094 +/deepseek-ai-dsh-compaction-tool-result-pruner/use-this-package/when-trimming-runs: + en: d72e0074faebe148 + zh: dfb484a385a7ebbf +/deepseek-ai-dsh-compaction-tool-result-pruner/understand-the-implementation: + en: 57aaa53880042873 + zh: 667f54624411c37d +/deepseek-ai-dsh-compaction-tool-result-pruner/understand-the-implementation/design-philosophy: + en: 5adff8207c6294e0 + zh: ccba42d804989abb +/deepseek-ai-dsh-compaction-tool-result-pruner/understand-the-implementation/pruning-mechanics: + en: 9813749e4f016897 + zh: f2b2b5d6e5e8977a +/deepseek-ai-dsh-compaction-tool-result-pruner/understand-the-implementation/source-map: + en: 9c10b4382c2347b5 + zh: b713a6dcf7589aee +/deepseek-ai-dsh-compaction-tool-result-pruner/further-exploration: + en: 3253e154e7610bbd + zh: ba28c7411fd5c8bb +/deepseek-ai-dsh-compaction-tool-result-pruner/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-compaction-tool-result-pruner/model-experience/pruned-tool-result: + en: 0b0dfb7ec1bf906f + zh: 68f70bde796751cd +/deepseek-ai-dsh-compaction-tool-result-pruner/model-experience/pruned-tool-result/what-the-model-sees: + en: 8514b5a6586bd65d + zh: 2a0648bea6cb81b6 +/deepseek-ai-dsh-compaction-tool-result-pruner/model-experience/pruned-tool-result/token-effect: + en: 1b11d405468e8d5d + zh: 06dc9aef281c776d +/deepseek-ai-dsh-compaction-tool-result-pruner/model-experience/pruned-tool-result/kv-cache-effect: + en: aac7de507412ba39 + zh: bdd8f391ad9c9a81 +/deepseek-ai-dsh-compaction-tool-result-pruner/known-limitations-and-deferred-work: + en: 2a7be98dc032e9bc + zh: d6710b1130722d12 +/deepseek-ai-dsh-compaction-tool-result-pruner/known-limitations-and-deferred-work/dev-note: + en: 19120c19286532da + zh: 49187f1e83b31007 diff --git a/packages/compaction/compaction/README.i18n.yaml b/packages/compaction/compaction/README.i18n.yaml index c3b4c9decc..26d6405507 100644 --- a/packages/compaction/compaction/README.i18n.yaml +++ b/packages/compaction/compaction/README.i18n.yaml @@ -1,6 +1,85 @@ -# 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 packages/compaction/compaction/README.md -README.md: fecb3b6731108c493825f6fa0874ab865781fc2a -README.zh.md: 86e6a2935c408af7e247235378a022ad855c00a0 +/: + en: 5c47c9629036f119 + zh: 7730d7468a38b38d +/deepseek-ai-dsh-compaction: + en: bc4cc254f61e84cb + zh: d08be13940dd3779 +/deepseek-ai-dsh-compaction/summary: + en: 8cde722f68374b24 + zh: 11f5aff0d0ecd573 +/deepseek-ai-dsh-compaction/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-compaction/use-this-package: + en: 7d1dad97626dbd2e + zh: 075fef4e1844ad12 +/deepseek-ai-dsh-compaction/use-this-package/when-to-choose-it: + en: 19c39a458294769b + zh: fd7534068f49e2af +/deepseek-ai-dsh-compaction/use-this-package/what-condensation-looks-like: + en: 0abbee3a3b929a90 + zh: 334736dffe93488d +/deepseek-ai-dsh-compaction/use-this-package/turning-condensation-on: + en: 8213b79c776f1a75 + zh: 481c0dffd342426a +/deepseek-ai-dsh-compaction/use-this-package/implementing-a-backend: + en: 280b5fda4c9b9c8b + zh: 764ca79fccf98279 +/deepseek-ai-dsh-compaction/use-this-package/recognizing-condensed-history: + en: 35502487f2850f05 + zh: 333d2b86cc1d6eb0 +/deepseek-ai-dsh-compaction/understand-the-implementation: + en: 321c3dc665ea03ff + zh: f0fa408cde7b0454 +/deepseek-ai-dsh-compaction/understand-the-implementation/design-philosophy: + en: 83b841c2263c3661 + zh: 2d75dba71717f681 +/deepseek-ai-dsh-compaction/understand-the-implementation/service-api: + en: d742d41c7eb5d406 + zh: 6ff26c23eba5dd59 +/deepseek-ai-dsh-compaction/understand-the-implementation/manual-failure-taxonomy: + en: 81449c88ba52f445 + zh: 2cdcce236bfbf284 +/deepseek-ai-dsh-compaction/understand-the-implementation/tool-pairing-boundaries: + en: 15dad68a04d6c86b + zh: 3b95acf1b7e503bf +/deepseek-ai-dsh-compaction/understand-the-implementation/the-surface-contract: + en: 28980d8259e59700 + zh: c452e0bb4b778824 +/deepseek-ai-dsh-compaction/understand-the-implementation/source-map: + en: 121139cf1878d7cf + zh: f8f9d8d3eb9866b5 +/deepseek-ai-dsh-compaction/understand-the-implementation/locking-and-serialization: + en: 68caa51bed28bada + zh: 3f8261f9dcba95ed +/deepseek-ai-dsh-compaction/understand-the-implementation/events: + en: dc5faf71b27cc340 + zh: 065f8339009c1a3a +/deepseek-ai-dsh-compaction/further-exploration: + en: fc5c182bc45e45cf + zh: eb1ac9900b6e8fe2 +/deepseek-ai-dsh-compaction/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-compaction/model-experience/conversation-history-when-a-backend-is-invoked: + en: 94de97ed1e85db85 + zh: c8e37d8050609e63 +/deepseek-ai-dsh-compaction/model-experience/conversation-history-when-a-backend-is-invoked/what-the-model-sees: + en: 3c4875a13da17814 + zh: 9b257950a9e2c7c1 +/deepseek-ai-dsh-compaction/model-experience/conversation-history-when-a-backend-is-invoked/token-effect: + en: be91f4a4bbb9338b + zh: 2b5de31d4d7caff1 +/deepseek-ai-dsh-compaction/model-experience/conversation-history-when-a-backend-is-invoked/kv-cache-effect: + en: 40ba838a2309c44a + zh: c609fc1587a0d666 +/deepseek-ai-dsh-compaction/known-limitations-and-deferred-work: + en: fee9ba06d3e5f35c + zh: 2bb5241e2447d15d +/deepseek-ai-dsh-compaction/known-limitations-and-deferred-work/dev-note: + en: 270e23ae6414aff0 + zh: c6d219b8a547dbca diff --git a/packages/computer-use/README.i18n.yaml b/packages/computer-use/README.i18n.yaml index 6ec8007819..c6e98fc6e5 100644 --- a/packages/computer-use/README.i18n.yaml +++ b/packages/computer-use/README.i18n.yaml @@ -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 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 packages/computer-use/README.md -README.md: 1b07c668ad9b50f49c2a3481ef2477550179d379 -README.zh.md: d1aa7631178a9aec600a54cdf904c9baeda28c32 +/: + en: d53a898cc3afb1aa + zh: 3ef1fb5638af23f9 +/packages-computer-use: + en: 77ea90624a004773 + zh: fe6dbf8414a5aff0 +/packages-computer-use/summary: + en: 3820da56a601d3f1 + zh: 358e65f8a7cf7446 +/packages-computer-use/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-computer-use/packages: + en: 9aa86e6451f60c3d + zh: c5e6816e90f2d74b +/packages-computer-use/related-documentation: + en: ad08d3417a0d4630 + zh: cfe8e03033c2fede +/packages-computer-use/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/computer-use/computer-use/README.i18n.yaml b/packages/computer-use/computer-use/README.i18n.yaml index 6e3c281205..dd26510975 100644 --- a/packages/computer-use/computer-use/README.i18n.yaml +++ b/packages/computer-use/computer-use/README.i18n.yaml @@ -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 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 packages/computer-use/computer-use/README.md -README.md: cd282a1f7450e07bc66290f79ae16ec369f09a95 -README.zh.md: 872431d3a7b9790cc504f2fea289deb3550db78d +/: + en: 5c5d7b5f1329ac1b + zh: b68d332df957109f +/deepseek-ai-dsh-computer-use: + en: 2efee0c5f0d577bc + zh: fef4b81bfc121052 +/deepseek-ai-dsh-computer-use/summary: + en: 4de047849e68701f + zh: 90a32c0e279b4b05 +/deepseek-ai-dsh-computer-use/table-of-contents: + en: d152484eb41ac6b4 + zh: 405b30feaf48c087 +/deepseek-ai-dsh-computer-use/use-this-package: + en: 0a298fbbcd8dbc00 + zh: 950de2af46c87f82 +/deepseek-ai-dsh-computer-use/understand-the-implementation: + en: c8a8d72c6944586c + zh: 0b216f8e9599543d +/deepseek-ai-dsh-computer-use/further-exploration: + en: b1bdbcbc150036b3 + zh: 1d356e0522587abc +/deepseek-ai-dsh-computer-use/model-experience: + en: 8780c250dfaefaaa + zh: 1c4b3598a131fb65 +/deepseek-ai-dsh-computer-use/model-experience/kv-cache-effect: + en: 0cc866a67a19d08b + zh: e1c3bb5ee2fed596 +/deepseek-ai-dsh-computer-use/known-limitations-and-deferred-work: + en: 6b8a90585a227a46 + zh: 7e0e3bf026fd67e9 +/deepseek-ai-dsh-computer-use/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 6c5f9788c6536776 diff --git a/packages/context/README.i18n.yaml b/packages/context/README.i18n.yaml index 07af4e094e..8380f6064d 100644 --- a/packages/context/README.i18n.yaml +++ b/packages/context/README.i18n.yaml @@ -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 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 packages/context/README.md -README.md: c877c1b0ea5e365628d3d2d9317e816f74d8e6f4 -README.zh.md: 2d557dd7e51139fd966254d25ed960fa1dd68d62 +/: + en: f080d3d805b5c2d2 + zh: c59f6324c66ddcf9 +/context-request-context-plugins: + en: 05a169f23a64b7e4 + zh: cf57e471b7f13509 +/context-request-context-plugins/summary: + en: aee02e20cc7847b4 + zh: e9621d3a5c718bfe +/context-request-context-plugins/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/context-request-context-plugins/packages: + en: e2fccdf2ec112e9c + zh: 3f6ff79970796bcc +/context-request-context-plugins/related-documentation: + en: 1d8d028a1ca69991 + zh: 32f261bb380e0812 +/context-request-context-plugins/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/context/agent-instructions/README.i18n.yaml b/packages/context/agent-instructions/README.i18n.yaml index d416ef75d2..572468170f 100644 --- a/packages/context/agent-instructions/README.i18n.yaml +++ b/packages/context/agent-instructions/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/context/agent-instructions/README.md -README.md: 34feeb2ac5ba1f43c685321741b779bdb4d6d23a -README.zh.md: 311d6f636f9662142e9a70d6f5002417d69a256e +/: + en: 3e005f834284c249 + zh: d51d06d0ea2c30ca +/deepseek-ai-dsh-agent-instructions: + en: e88163f21938a7e6 + zh: 17acc4af39bd7df0 +/deepseek-ai-dsh-agent-instructions/summary: + en: 9d849b3c7bc5e3b7 + zh: aee26ccc12e73fe3 +/deepseek-ai-dsh-agent-instructions/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent-instructions/use-this-package: + en: d8c9258bcc5c9b32 + zh: 1bbeb9c58828d83c +/deepseek-ai-dsh-agent-instructions/use-this-package/what-the-agent-gets: + en: 68f776f145a0dec4 + zh: e63e9140aa305936 +/deepseek-ai-dsh-agent-instructions/use-this-package/configuration: + en: 14b4bcce25065881 + zh: 8cd77151b711808b +/deepseek-ai-dsh-agent-instructions/use-this-package/observing-the-budget: + en: 9797082b1e69b72c + zh: d26c00b1b90fe4ea +/deepseek-ai-dsh-agent-instructions/understand-the-implementation: + en: 724df7ff6d1d9fea + zh: 91fb1013eb9178ec +/deepseek-ai-dsh-agent-instructions/understand-the-implementation/design-concept: + en: 4708b51bf8fe86f7 + zh: 869fc4b1f78383ee +/deepseek-ai-dsh-agent-instructions/understand-the-implementation/source-map: + en: 737fdf08415bc08d + zh: 625d53b1418ab6bb +/deepseek-ai-dsh-agent-instructions/understand-the-implementation/main-flow: + en: d881b9055f823929 + zh: 87b25f0bf8e204e9 +/deepseek-ai-dsh-agent-instructions/understand-the-implementation/invariants: + en: 7f6e9b5356da91fd + zh: 7b99f255d23d982e +/deepseek-ai-dsh-agent-instructions/further-exploration: + en: b3e57c263575fa5f + zh: b67efbda908ac82c +/deepseek-ai-dsh-agent-instructions/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-agent-instructions/model-experience/baseline-context: + en: 41690f63ce8a7e6a + zh: 6cff922d5afef38f +/deepseek-ai-dsh-agent-instructions/model-experience/baseline-context/what-the-model-sees: + en: 41ad1efcf640edf2 + zh: 3d06e265788fc2b7 +/deepseek-ai-dsh-agent-instructions/model-experience/baseline-context/what-the-model-sees/baseline-instruction-template: + en: 0ced1c177da6d120 + zh: 6c61efb987e227fe +/deepseek-ai-dsh-agent-instructions/model-experience/baseline-context/token-effect: + en: e7c0cc34065a1113 + zh: a973ba9fac7a918d +/deepseek-ai-dsh-agent-instructions/model-experience/baseline-context/kv-cache-effect: + en: c611902b9f369d86 + zh: d7da1dbe6c1ac7f1 +/deepseek-ai-dsh-agent-instructions/model-experience/newly-discovered-scope-context: + en: bbf8f11dbb279b78 + zh: eb537ade3fa1e573 +/deepseek-ai-dsh-agent-instructions/model-experience/newly-discovered-scope-context/what-the-model-sees: + en: 99226255009f8432 + zh: 3b1661ca1a98ae4a +/deepseek-ai-dsh-agent-instructions/model-experience/newly-discovered-scope-context/what-the-model-sees/additional-instruction-template: + en: 50655306b787c8c6 + zh: bcdc631a35f9de91 +/deepseek-ai-dsh-agent-instructions/model-experience/newly-discovered-scope-context/token-effect: + en: 793319101bb39edf + zh: f05af12ab9574a4d +/deepseek-ai-dsh-agent-instructions/model-experience/newly-discovered-scope-context/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-agent-instructions/model-experience/changed-or-removed-instruction-context: + en: b668990682ea0069 + zh: 6468918ca6b31a45 +/deepseek-ai-dsh-agent-instructions/model-experience/changed-or-removed-instruction-context/what-the-model-sees: + en: 16afe8870b4de832 + zh: f0cdf8ea51ec148a +/deepseek-ai-dsh-agent-instructions/model-experience/changed-or-removed-instruction-context/what-the-model-sees/removal-notice: + en: c78113708e7d7665 + zh: b10dcce1569febae +/deepseek-ai-dsh-agent-instructions/model-experience/changed-or-removed-instruction-context/token-effect: + en: 436f2fb373e7822d + zh: 0a3173b4398530bd +/deepseek-ai-dsh-agent-instructions/model-experience/changed-or-removed-instruction-context/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-agent-instructions/known-limitations-and-deferred-work: + en: 28dd93fabf4afae6 + zh: 63380bbc1e085aa2 +/deepseek-ai-dsh-agent-instructions/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/context/file-reference-local/README.i18n.yaml b/packages/context/file-reference-local/README.i18n.yaml index 8bd8e62df0..289187f745 100644 --- a/packages/context/file-reference-local/README.i18n.yaml +++ b/packages/context/file-reference-local/README.i18n.yaml @@ -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 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 packages/context/file-reference-local/README.md -README.md: b80f5863e2cae166277d7672085bd1a9742e6cf3 -README.zh.md: 343d0950986df8e071c307314ce2e860168c4308 +/: + en: 1416be50915cb608 + zh: a4279b8173a8ede9 +/deepseek-ai-dsh-file-reference-local: + en: 9149ae1430a55ba8 + zh: 54c229b01013c4d6 +/deepseek-ai-dsh-file-reference-local/summary: + en: 74449d8df9ec0f95 + zh: e32b383ddddbfdbf +/deepseek-ai-dsh-file-reference-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-file-reference-local/use-this-package: + en: bb3ce050657f834a + zh: 2e1afa3efb7a5702 +/deepseek-ai-dsh-file-reference-local/use-this-package/enabling-the-provider: + en: 62b9ce096fa4a94e + zh: 53081797c34d64eb +/deepseek-ai-dsh-file-reference-local/use-this-package/what-you-get: + en: f74a8087c7d46e5a + zh: af19c91b1d9a38ab +/deepseek-ai-dsh-file-reference-local/use-this-package/configuration: + en: 977d19768aebbfd4 + zh: 35b735eac4619c6d +/deepseek-ai-dsh-file-reference-local/understand-the-implementation: + en: e047061055178783 + zh: da3309d34d65e965 +/deepseek-ai-dsh-file-reference-local/understand-the-implementation/design-concept: + en: f0023b9c833747b5 + zh: 42aef0c0fce9ce8c +/deepseek-ai-dsh-file-reference-local/understand-the-implementation/source-map: + en: a04bc6a11619cae7 + zh: 4fb1a0d04398260b +/deepseek-ai-dsh-file-reference-local/understand-the-implementation/main-flow: + en: bb338cacc1ef8c01 + zh: d7ad96a5646f5444 +/deepseek-ai-dsh-file-reference-local/further-exploration: + en: dcd8fda368dc28d9 + zh: 56090f8c2f84e7b0 +/deepseek-ai-dsh-file-reference-local/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-file-reference-local/model-experience/file-reference-guidance-when-read-is-available: + en: 9a457db92875eedb + zh: 3b6d3fd974c8a91a +/deepseek-ai-dsh-file-reference-local/model-experience/file-reference-guidance-when-read-is-available/what-the-model-sees: + en: a8efdbf46dfc65d6 + zh: a8e578eec71c9d98 +/deepseek-ai-dsh-file-reference-local/model-experience/file-reference-guidance-when-read-is-available/what-the-model-sees/file-reference-instruction: + en: 840f6256a44e78ba + zh: ebc00f948c48b635 +/deepseek-ai-dsh-file-reference-local/model-experience/file-reference-guidance-when-read-is-available/token-effect: + en: 912448c13f2b2f35 + zh: 013de25c1511bd65 +/deepseek-ai-dsh-file-reference-local/model-experience/file-reference-guidance-when-read-is-available/kv-cache-effect: + en: 1c3ebc786f362851 + zh: 01f43411f28d2993 +/deepseek-ai-dsh-file-reference-local/known-limitations-and-deferred-work: + en: 42f854dbb8d0df02 + zh: 2045a8c0a6f69400 +/deepseek-ai-dsh-file-reference-local/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/context/file-reference/README.i18n.yaml b/packages/context/file-reference/README.i18n.yaml index 6d1e7a991a..3efb30e977 100644 --- a/packages/context/file-reference/README.i18n.yaml +++ b/packages/context/file-reference/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/context/file-reference/README.md -README.md: 3b759a88bd9ebb59fbf3d039756e66ad6901a893 -README.zh.md: d7dedc46365d70740480167cdfa0432f494d4563 +/: + en: 21c486a1839068f4 + zh: 0333ad7c4f984794 +/deepseek-ai-dsh-file-reference: + en: 304654061fc0503d + zh: dab669557b3c261f +/deepseek-ai-dsh-file-reference/summary: + en: a6ce5c696182da3b + zh: 274f9c9613f9df0b +/deepseek-ai-dsh-file-reference/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-file-reference/use-this-package: + en: e37b5d4bf0020063 + zh: 2eb37494ea43228f +/deepseek-ai-dsh-file-reference/use-this-package/mention-grammar: + en: efbe0e9233f402a4 + zh: e3ec7c6ae2335a41 +/deepseek-ai-dsh-file-reference/use-this-package/getting-candidates: + en: 4dc2d6289f532225 + zh: af06ce75299f23e5 +/deepseek-ai-dsh-file-reference/use-this-package/pairing-with-a-provider: + en: 2d443c98aca75438 + zh: 2299ced5c4e315c1 +/deepseek-ai-dsh-file-reference/understand-the-implementation: + en: 92049fb7a6c345c3 + zh: 86efc4d17127f97f +/deepseek-ai-dsh-file-reference/understand-the-implementation/design-concept: + en: 191332951f81b136 + zh: 8336659a9ffa20f1 +/deepseek-ai-dsh-file-reference/understand-the-implementation/source-map: + en: c4abf9f6f86cf29f + zh: 60d15ef1acd20b93 +/deepseek-ai-dsh-file-reference/understand-the-implementation/main-flow: + en: fd65f309c940de96 + zh: c1517e592d646d6c +/deepseek-ai-dsh-file-reference/further-exploration: + en: 90447bd5ebd2c47f + zh: dae6d0005ab9779d +/deepseek-ai-dsh-file-reference/model-experience: + en: ab69d93c10a1572c + zh: b63720b1e6182805 +/deepseek-ai-dsh-file-reference/model-experience/kv-cache-effect: + en: 0aba47b2a2828b78 + zh: 83a1af441dac3074 +/deepseek-ai-dsh-file-reference/known-limitations-and-deferred-work: + en: cc83a00bd7d4ccc9 + zh: 130ba16bb567db5a +/deepseek-ai-dsh-file-reference/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/context/session-reference/README.i18n.yaml b/packages/context/session-reference/README.i18n.yaml index 74c7f4efd6..0c2a188ea7 100644 --- a/packages/context/session-reference/README.i18n.yaml +++ b/packages/context/session-reference/README.i18n.yaml @@ -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 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 packages/context/session-reference/README.md -README.md: e1afeef9b0e78826705ad2b3e426373b2bf0833d -README.zh.md: e55dab4f6403cb6aee947f80873ffe99919acc5f +/: + en: 5609ff124a8402a2 + zh: dbe8216d8a5cad0a +/deepseek-ai-dsh-session-reference: + en: ac4de1b73582661f + zh: 348c1ee18d356ced +/deepseek-ai-dsh-session-reference/summary: + en: 3f295289f31296b6 + zh: 8246ede26b9699fc +/deepseek-ai-dsh-session-reference/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-reference/use-this-package: + en: 5204d64418ff8969 + zh: d7cabc99294e480e +/deepseek-ai-dsh-session-reference/use-this-package/mention-syntax: + en: d25be7f4b82afe02 + zh: 6ad886a864d584b2 +/deepseek-ai-dsh-session-reference/use-this-package/what-the-agent-gets: + en: 0942e28bfd0d07da + zh: ca109508b18b4c14 +/deepseek-ai-dsh-session-reference/use-this-package/finding-sessions-to-reference: + en: 169f100ba62f2120 + zh: 3fd4fc0bd73b2370 +/deepseek-ai-dsh-session-reference/use-this-package/configuration: + en: d9abc1b28c3feb40 + zh: ac85539027b37130 +/deepseek-ai-dsh-session-reference/understand-the-implementation: + en: db349483e453caf7 + zh: 70035c291e1efe84 +/deepseek-ai-dsh-session-reference/understand-the-implementation/design-concept: + en: 5c7712ca91eaae1c + zh: 2d923b605afa7a88 +/deepseek-ai-dsh-session-reference/understand-the-implementation/source-map: + en: 3a91f258bdfbe488 + zh: 80301b5d6b218389 +/deepseek-ai-dsh-session-reference/understand-the-implementation/main-flow: + en: 019e5e19f9b3d7fd + zh: 52ccf291f53d41fc +/deepseek-ai-dsh-session-reference/further-exploration: + en: ea488621aa03e4fd + zh: 205ba9e3197d7b30 +/deepseek-ai-dsh-session-reference/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-reference/model-experience/referenced-session-background: + en: 05d3418d162640be + zh: 3dd8407f2dc61586 +/deepseek-ai-dsh-session-reference/model-experience/referenced-session-background/what-the-model-sees: + en: 375550519407bc3d + zh: 037324246f4fb515 +/deepseek-ai-dsh-session-reference/model-experience/referenced-session-background/token-effect: + en: f3d69ed47a577be0 + zh: 196a872914778634 +/deepseek-ai-dsh-session-reference/model-experience/referenced-session-background/kv-cache-effect: + en: 530d6417585b5c9e + zh: abf1597589e8de17 +/deepseek-ai-dsh-session-reference/known-limitations-and-deferred-work: + en: fce2f29b6a71b7f4 + zh: 31440d93a112d5de +/deepseek-ai-dsh-session-reference/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/context/time-context/README.i18n.yaml b/packages/context/time-context/README.i18n.yaml index 1368cfe310..43ba38de44 100644 --- a/packages/context/time-context/README.i18n.yaml +++ b/packages/context/time-context/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/context/time-context/README.md -README.md: ea6f480b51dddc72f2be1a480053b47045a3f60b -README.zh.md: 600a8870860ee1558758d2eaf71220dbcabf9588 +/: + en: 7e7028afe91adb99 + zh: 8f28e40b3de45660 +/deepseek-ai-dsh-time-context: + en: ec051915b3d81cda + zh: 3a0ef832e3a5e419 +/deepseek-ai-dsh-time-context/summary: + en: 17e49c1b5badb823 + zh: eef99436db5c91d2 +/deepseek-ai-dsh-time-context/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-time-context/use-this-package: + en: dedd1cdaec7140f1 + zh: 9399f5b677ff8f34 +/deepseek-ai-dsh-time-context/use-this-package/what-the-model-gets: + en: 104b5d5609b00f33 + zh: f6115b4eaa24bda7 +/deepseek-ai-dsh-time-context/use-this-package/configuration: + en: 7b4accf50fd83abb + zh: 8804f10f66bbf159 +/deepseek-ai-dsh-time-context/use-this-package/choosing-the-zone: + en: 7eed0d784ad7381b + zh: 47a849df0ce80105 +/deepseek-ai-dsh-time-context/understand-the-implementation: + en: 2d21fa2aad5a729d + zh: cfbfada0eb647435 +/deepseek-ai-dsh-time-context/understand-the-implementation/design-concept: + en: f2c19187501f7027 + zh: 48d31d0ea9bd8b16 +/deepseek-ai-dsh-time-context/understand-the-implementation/source-map: + en: 05a0a4627013d3d2 + zh: 281429e6ef7f26ec +/deepseek-ai-dsh-time-context/understand-the-implementation/main-flow: + en: ae9f13873dde5271 + zh: 873f32e67f8b202b +/deepseek-ai-dsh-time-context/further-exploration: + en: e1cd55f40edbb7ed + zh: 8a2abf22ef859841 +/deepseek-ai-dsh-time-context/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context: + en: 2d7737ecbb6d396a + zh: d143ab388368b54e +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context/what-the-model-sees: + en: 945a84da62e8ff62 + zh: 935dc3f93f862f3f +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context/what-the-model-sees/first-step: + en: 58d49c94906946dd + zh: e42ca0fe4ec2878d +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context/what-the-model-sees/later-steps: + en: d583e2c01b797bef + zh: 74b908a4fd7972e7 +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context/token-effect: + en: cbcec14d9437c2a5 + zh: 6628d75c0411959d +/deepseek-ai-dsh-time-context/model-experience/preparation-time-temporal-context/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-time-context/known-limitations-and-deferred-work: + en: e2637b93efef4f46 + zh: c1d3321bbfe871ef +/deepseek-ai-dsh-time-context/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/context/tmux-context/README.i18n.yaml b/packages/context/tmux-context/README.i18n.yaml index b809bee56a..764312518b 100644 --- a/packages/context/tmux-context/README.i18n.yaml +++ b/packages/context/tmux-context/README.i18n.yaml @@ -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 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 packages/context/tmux-context/README.md -README.md: 1a5255e11f661296d44423e1bed940ec160b80b5 -README.zh.md: 3dab566a4fbe3d3819d81861e6531d5b01c940eb +/: + en: d1bef1216dfe10fa + zh: aee241b6eed43293 +/deepseek-ai-dsh-tmux-context: + en: 18e42c83b8bc27da + zh: 89f0739235511ab1 +/deepseek-ai-dsh-tmux-context/summary: + en: 4c62923f1912d201 + zh: 7f2211f9616c0197 +/deepseek-ai-dsh-tmux-context/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tmux-context/use-this-package: + en: 872d46d8bbbcda8d + zh: 9d14bbdb45851c07 +/deepseek-ai-dsh-tmux-context/use-this-package/what-the-model-gets: + en: 8d594d379878de46 + zh: cfa52a5e0b297a6d +/deepseek-ai-dsh-tmux-context/use-this-package/configuration: + en: bdbf74db21f91152 + zh: 6722e00c4a3e29db +/deepseek-ai-dsh-tmux-context/use-this-package/when-the-location-is-known: + en: 360821e2ef8f3d50 + zh: 691d23a188558e9f +/deepseek-ai-dsh-tmux-context/understand-the-implementation: + en: 2d21fa2aad5a729d + zh: cfbfada0eb647435 +/deepseek-ai-dsh-tmux-context/understand-the-implementation/design-concept: + en: 1902de51becf7c7d + zh: 130e673b471c38c4 +/deepseek-ai-dsh-tmux-context/understand-the-implementation/source-map: + en: 57d240751bb587a0 + zh: 0a4195a9e3024208 +/deepseek-ai-dsh-tmux-context/understand-the-implementation/main-flow: + en: 2d5768fe44120780 + zh: cd601c59d9604e6e +/deepseek-ai-dsh-tmux-context/further-exploration: + en: 08c09f5eb13c30e6 + zh: 1b34ef9ca42ac9e7 +/deepseek-ai-dsh-tmux-context/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tmux-context/model-experience/preparation-time-tmux-location: + en: 9c9825ee622e4b92 + zh: b9edc0c529612fe6 +/deepseek-ai-dsh-tmux-context/model-experience/preparation-time-tmux-location/what-the-model-sees: + en: 8697059219e2ab02 + zh: d321f11003c93de9 +/deepseek-ai-dsh-tmux-context/model-experience/preparation-time-tmux-location/what-the-model-sees/changed-turn-reading: + en: efdd843a7c1aa9d7 + zh: 533b6f25b583363e +/deepseek-ai-dsh-tmux-context/model-experience/preparation-time-tmux-location/token-effect: + en: 6a0348385ba38e7e + zh: 02af00a2c5aea469 +/deepseek-ai-dsh-tmux-context/model-experience/preparation-time-tmux-location/kv-cache-effect: + en: 2fbf2175168e8244 + zh: b70653f9cbe2a47b +/deepseek-ai-dsh-tmux-context/known-limitations-and-deferred-work: + en: af80ce3c69f582ab + zh: da5ad546c19d7d56 +/deepseek-ai-dsh-tmux-context/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/README.i18n.yaml b/packages/core/README.i18n.yaml index 40be033181..60936e1b9e 100644 --- a/packages/core/README.i18n.yaml +++ b/packages/core/README.i18n.yaml @@ -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 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 packages/core/README.md -README.md: d88c679a4fa597359d6881852d37014e31810752 -README.zh.md: 128ad5cbd0f5e4c889f4074aa5de43c8dbf01b55 +/: + en: 4284a43b1c3c1d63 + zh: 1a621645bfcbbf14 +/packages-core: + en: c299b7860ef8b9bb + zh: 9a248e5818a1df63 +/packages-core/summary: + en: f316301077cd3111 + zh: a08dd43a6c0beeb0 +/packages-core/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-core/packages: + en: 083b59ee474230e8 + zh: f11c7bc21bbcdbe6 +/packages-core/related-documentation: + en: dfe5990edf146a91 + zh: b64e4b2d812286d4 +/packages-core/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/core/agent-default-model/README.i18n.yaml b/packages/core/agent-default-model/README.i18n.yaml index 7f2f5c10e8..545a266732 100644 --- a/packages/core/agent-default-model/README.i18n.yaml +++ b/packages/core/agent-default-model/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/core/agent-default-model/README.md -README.md: d98747c457a1065453f88779a8bb75f3219c8e2d -README.zh.md: 9765b1aab7b7d9075ce8e9d94cef27934bf8a1e7 +/: + en: eaf7d3ea3e52ddfd + zh: 34028b95d994f15d +/deepseek-ai-dsh-agent-default-model: + en: 87e9d106cedbbe08 + zh: 5eb47e4bd7f5b51d +/deepseek-ai-dsh-agent-default-model/summary: + en: bf59a0974610ef81 + zh: 451b967a5d2be7f1 +/deepseek-ai-dsh-agent-default-model/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent-default-model/use-this-package: + en: 426a019d26019bc7 + zh: 89e57948e3ed9cf8 +/deepseek-ai-dsh-agent-default-model/use-this-package/configure-the-default: + en: 9820372e22bf59ad + zh: 9fa2d52b2bbceaa6 +/deepseek-ai-dsh-agent-default-model/use-this-package/read-and-change-the-default: + en: ac8d6b1bb815aa3b + zh: 00f9b11356e1e63a +/deepseek-ai-dsh-agent-default-model/understand-the-implementation: + en: 592af7e68423bd1c + zh: a509b637f2a14687 +/deepseek-ai-dsh-agent-default-model/understand-the-implementation/design-concept: + en: 3459310298508557 + zh: 1bce84eba76d6531 +/deepseek-ai-dsh-agent-default-model/understand-the-implementation/source-map: + en: 68c75c85685bb265 + zh: f3c50b3078d1500e +/deepseek-ai-dsh-agent-default-model/understand-the-implementation/behavior-notes: + en: 82a433fa05760420 + zh: d4459d6a631143cf +/deepseek-ai-dsh-agent-default-model/further-exploration: + en: dfb65b5c22a8fe8a + zh: a9726dcdbebca3a0 +/deepseek-ai-dsh-agent-default-model/model-experience: + en: 1550007294eab687 + zh: 39e797cb0ca691d7 +/deepseek-ai-dsh-agent-default-model/model-experience/kv-cache-effect: + en: 814ad1a657587419 + zh: 5c1968a55beb1af4 +/deepseek-ai-dsh-agent-default-model/known-limitations-and-deferred-work: + en: 3d41fadae2c3e40b + zh: 52dcf7e4ea6a5e45 +/deepseek-ai-dsh-agent-default-model/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/agent-loop/README.i18n.yaml b/packages/core/agent-loop/README.i18n.yaml index 28340b515a..adf9df1d1e 100644 --- a/packages/core/agent-loop/README.i18n.yaml +++ b/packages/core/agent-loop/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/core/agent-loop/README.md -README.md: 4c6d3df10cc9ab22a9c00232c9181a96d1829031 -README.zh.md: a3c34e153ea38a4392ba0a272499f59d5492ecaa +/: + en: 5d57c28077cb670a + zh: 8113ea0248d66a17 +/deepseek-ai-dsh-agent-loop: + en: b711ded29c7b9a17 + zh: cbccba927743f35f +/deepseek-ai-dsh-agent-loop/summary: + en: 9256331cd3baf930 + zh: 02b4c10cf3286eb3 +/deepseek-ai-dsh-agent-loop/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent-loop/use-this-package: + en: 35a960c0100a6aa4 + zh: 438e133fb4c24a9e +/deepseek-ai-dsh-agent-loop/use-this-package/configure-declarative-agents: + en: 96295035babf4f90 + zh: 8848f9497019ee63 +/deepseek-ai-dsh-agent-loop/use-this-package/create-or-resume-agents-programmatically: + en: 82ec792637e8e57f + zh: e32f8ec5ee17afcf +/deepseek-ai-dsh-agent-loop/use-this-package/what-a-step-does: + en: 15ce4783b53532a2 + zh: b04a18337281237a +/deepseek-ai-dsh-agent-loop/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/design-concept: + en: 030202c112f89366 + zh: 621d53ed755cafa3 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/request-headers-and-adapter-defaults: + en: 6fa5c8b2f91552d8 + zh: 75886c7e922d23df +/deepseek-ai-dsh-agent-loop/understand-the-implementation/source-map: + en: d7f6b2947ec9b2f3 + zh: 8a3d566fb8cf2938 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/creation-and-teardown: + en: 6bc52b8ef503eeda + zh: 3290052ebc47baf6 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/persistence-integration: + en: da056b9f0dde4ab3 + zh: ba9ce3b19c17ca22 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/turn-and-step-flow: + en: a0605e38c02e593a + zh: be2de818d65762b7 +/deepseek-ai-dsh-agent-loop/understand-the-implementation/failure-and-cancellation: + en: 6bd69c9cf8790e14 + zh: e2812f6bb4c26f10 +/deepseek-ai-dsh-agent-loop/further-exploration: + en: 6c73cd2390e24b86 + zh: ba042ca93cc0f595 +/deepseek-ai-dsh-agent-loop/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-agent-loop/model-experience/complete-conversation-request: + en: 5507d83eb979c737 + zh: 0ffde85d627b3933 +/deepseek-ai-dsh-agent-loop/model-experience/complete-conversation-request/what-the-model-sees: + en: 6a60e889b0f19e33 + zh: f45bd9b2b843ca7a +/deepseek-ai-dsh-agent-loop/model-experience/complete-conversation-request/token-effect: + en: ad93d8d61968a25d + zh: 268ff858b0fa96e8 +/deepseek-ai-dsh-agent-loop/model-experience/complete-conversation-request/kv-cache-effect: + en: bd51295dd5cbcc84 + zh: 7073efb591470fab +/deepseek-ai-dsh-agent-loop/model-experience/retained-message-history: + en: 50d33d852dec1e28 + zh: ec15695304f25f38 +/deepseek-ai-dsh-agent-loop/model-experience/retained-message-history/what-the-model-sees: + en: 0a36273eff0815fd + zh: 1aa1e856d8b1afc9 +/deepseek-ai-dsh-agent-loop/model-experience/retained-message-history/token-effect: + en: 91552b9cbef55638 + zh: 6e835a66d984f62d +/deepseek-ai-dsh-agent-loop/model-experience/retained-message-history/kv-cache-effect: + en: 2b82cd95e6335e91 + zh: 2275f0c808427bf1 +/deepseek-ai-dsh-agent-loop/model-experience/undispatched-calls-after-cancellation: + en: a7afa95628111dd8 + zh: 1d72925e9915f75f +/deepseek-ai-dsh-agent-loop/model-experience/undispatched-calls-after-cancellation/what-the-model-sees: + en: e3c07034229f15ed + zh: b0ee0507606b34ce +/deepseek-ai-dsh-agent-loop/model-experience/undispatched-calls-after-cancellation/token-effect: + en: 7c139b3584615343 + zh: 02d5d8239b502b06 +/deepseek-ai-dsh-agent-loop/model-experience/undispatched-calls-after-cancellation/kv-cache-effect: + en: 1750eea3cc5bf2d8 + zh: 519d37b0cb4467a7 +/deepseek-ai-dsh-agent-loop/known-limitations-and-deferred-work: + en: f658b8bc2935578f + zh: 4d503701fa17b982 +/deepseek-ai-dsh-agent-loop/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/agent-tool-presentation/README.i18n.yaml b/packages/core/agent-tool-presentation/README.i18n.yaml index b19adfd10f..faf4f3ab65 100644 --- a/packages/core/agent-tool-presentation/README.i18n.yaml +++ b/packages/core/agent-tool-presentation/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/core/agent-tool-presentation/README.md -README.md: fe45190931fd35ae79002f466f2ff6476a6b96d1 -README.zh.md: 62d7ce3ad5f1d0cafd7bebc5aca73bdc9c98e50e +/: + en: 1c67fea11cb4a325 + zh: 7dc1256148273b02 +/deepseek-ai-dsh-agent-tool-presentation: + en: e3bfa19f60197528 + zh: c8e9adfb80141de2 +/deepseek-ai-dsh-agent-tool-presentation/summary: + en: 00ce44dc07f9bd8e + zh: 32eb2aee42a903c3 +/deepseek-ai-dsh-agent-tool-presentation/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent-tool-presentation/use-this-package: + en: 1ff72cb4ac9c3e7b + zh: d3d3ad8a336a3bec +/deepseek-ai-dsh-agent-tool-presentation/use-this-package/add-the-row-to-a-preset: + en: a7325b0939361096 + zh: 3476ce4ebedd1d45 +/deepseek-ai-dsh-agent-tool-presentation/use-this-package/what-ptc-mode-requires: + en: e23deef6a3fa2584 + zh: ded146d3828c73cd +/deepseek-ai-dsh-agent-tool-presentation/use-this-package/one-presentation-per-agent: + en: 46bf80f051175567 + zh: 8f5e1623da5d1520 +/deepseek-ai-dsh-agent-tool-presentation/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-agent-tool-presentation/understand-the-implementation/design-concept: + en: 6f8bb6bd853cbc13 + zh: 422fca4b20b79fbd +/deepseek-ai-dsh-agent-tool-presentation/understand-the-implementation/source-map: + en: 506105ea2c83c4a8 + zh: 1a60101534b10dc4 +/deepseek-ai-dsh-agent-tool-presentation/understand-the-implementation/behavior-notes: + en: 562acace386b25ca + zh: 3eb362bd2730a64c +/deepseek-ai-dsh-agent-tool-presentation/further-exploration: + en: 5129e69c0419f3af + zh: d88bececc300b65c +/deepseek-ai-dsh-agent-tool-presentation/model-experience: + en: 35621b26757d462e + zh: a8869139783ae475 +/deepseek-ai-dsh-agent-tool-presentation/model-experience/kv-cache-effect: + en: c75b16e38577f026 + zh: f802d115af4bf9a1 +/deepseek-ai-dsh-agent-tool-presentation/known-limitations-and-deferred-work: + en: 17a0a213ec65c95f + zh: ff96d985f6360338 +/deepseek-ai-dsh-agent-tool-presentation/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/agent/README.i18n.yaml b/packages/core/agent/README.i18n.yaml index d950c427ea..19639a27c0 100644 --- a/packages/core/agent/README.i18n.yaml +++ b/packages/core/agent/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/core/agent/README.md -README.md: be003d7b899306b58c4ddc88e720c18dde9ce33b -README.zh.md: e360ba975dddc381e25b69766b1df82f6e45b3b4 +/: + en: b6bcf3c8b941d336 + zh: 28b5d2aa43fdd026 +/deepseek-ai-dsh-agent: + en: e6513350f94898d8 + zh: feb04fc389801a62 +/deepseek-ai-dsh-agent/summary: + en: 717e7d19a6f72e56 + zh: 152c18689fe4f377 +/deepseek-ai-dsh-agent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent/use-this-package: + en: b48322540e229083 + zh: 05aec0854397f4c3 +/deepseek-ai-dsh-agent/use-this-package/create-or-resume-an-agent: + en: e305441a5a4a9b44 + zh: 3e997b12ce0ce04c +/deepseek-ai-dsh-agent/use-this-package/drive-an-agent-s-conversation: + en: 71e258897e2e7d73 + zh: abf0991012faa17e +/deepseek-ai-dsh-agent/use-this-package/scope-registrations-to-one-agent: + en: 2594a1e02adea801 + zh: cae8860369728efb +/deepseek-ai-dsh-agent/use-this-package/intercept-or-observe-work-in-flight: + en: fb42e501ef88a040 + zh: 8822f29727d14bef +/deepseek-ai-dsh-agent/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-agent/understand-the-implementation/design-concept: + en: 7c850051d2857bfa + zh: 4cab817553114e15 +/deepseek-ai-dsh-agent/understand-the-implementation/step-admission: + en: 348b9ecd0890c585 + zh: d0f73d28d0d2c6f1 +/deepseek-ai-dsh-agent/understand-the-implementation/durable-inbox: + en: f6802c7f94f623b3 + zh: cc3885db80765970 +/deepseek-ai-dsh-agent/understand-the-implementation/source-map: + en: c08cf19efc131171 + zh: 7e9f7b6a85e0aa1d +/deepseek-ai-dsh-agent/understand-the-implementation/registry-and-lifecycle: + en: df92e97cedd0d02e + zh: f6040c145bffd933 +/deepseek-ai-dsh-agent/understand-the-implementation/initiator-scope: + en: 3ca29c07144b36db + zh: 93580213b3de2004 +/deepseek-ai-dsh-agent/understand-the-implementation/ownership-invariants: + en: e48eae6c7de88cf8 + zh: 1f5b37bdb0e53788 +/deepseek-ai-dsh-agent/further-exploration: + en: 4ef57cfafa344581 + zh: 73575876bfdc7a18 +/deepseek-ai-dsh-agent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-agent/model-experience/user-steering-and-injected-messages: + en: 962c598672b0eed6 + zh: d05b3bc936685ad3 +/deepseek-ai-dsh-agent/model-experience/user-steering-and-injected-messages/what-the-model-sees: + en: 55fcf97dbcb7a41e + zh: 691c0ab3ea41f6f0 +/deepseek-ai-dsh-agent/model-experience/user-steering-and-injected-messages/token-effect: + en: 5f428bfadaf4394b + zh: 03308df9fd3492a7 +/deepseek-ai-dsh-agent/model-experience/user-steering-and-injected-messages/kv-cache-effect: + en: 75dc61fe240860f0 + zh: 621720291d1b4bd3 +/deepseek-ai-dsh-agent/model-experience/agent-scoped-request-composition: + en: 215fc35b0f30e38a + zh: 21788ec980c300ea +/deepseek-ai-dsh-agent/model-experience/agent-scoped-request-composition/what-the-model-sees: + en: 057babd515991736 + zh: acf0c05c490b689c +/deepseek-ai-dsh-agent/model-experience/agent-scoped-request-composition/token-effect: + en: dfebf42b629656d9 + zh: 9369ace52f58a579 +/deepseek-ai-dsh-agent/model-experience/agent-scoped-request-composition/kv-cache-effect: + en: 07a408b32e49ecaf + zh: 9684b80cb3c0e75c +/deepseek-ai-dsh-agent/known-limitations-and-deferred-work: + en: 00a2d12980ffe756 + zh: c8bf69d06d165b36 +/deepseek-ai-dsh-agent/known-limitations-and-deferred-work/dev-note: + en: 217405c92be96543 + zh: 7bc21e6842079a57 diff --git a/packages/core/scope/README.i18n.yaml b/packages/core/scope/README.i18n.yaml index 39ae74a6f2..0b818aafe7 100644 --- a/packages/core/scope/README.i18n.yaml +++ b/packages/core/scope/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/core/scope/README.md -README.md: 72c41e4c1a3b8f8a79940838ead7447f64781cc4 -README.zh.md: b48842570c564979f920d8e6f6fda87284f4bc65 +/: + en: 47f2816e2d2cecb9 + zh: e051427327761450 +/deepseek-ai-dsh-scope: + en: a493a184041d2c95 + zh: af060f6404de90d8 +/deepseek-ai-dsh-scope/summary: + en: f645dd571d3c8ca7 + zh: 781b83572498adf1 +/deepseek-ai-dsh-scope/table-of-contents: + en: 80b31a934611cb4a + zh: 05f3f7f9cb2fd881 +/deepseek-ai-dsh-scope/use-this-package: + en: 14e53a4df086a0de + zh: 17ea1f39cfbe007e +/deepseek-ai-dsh-scope/use-this-package/mint-a-scope: + en: e7bfa7a59f61fd72 + zh: 852d6d4b113babd1 +/deepseek-ai-dsh-scope/use-this-package/route-scoped-events: + en: 7439a6c862956a63 + zh: bfeda5194bb8cdc9 +/deepseek-ai-dsh-scope/use-this-package/build-a-scoped-registry-layer: + en: 187aa0e904782395 + zh: 14fa36d3716eaff2 +/deepseek-ai-dsh-scope/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-scope/understand-the-implementation/design-concept: + en: 1d19d421fa6f3546 + zh: ed6679cfc9166f14 +/deepseek-ai-dsh-scope/understand-the-implementation/source-map: + en: 52dd18180452c174 + zh: 47d0198266697794 +/deepseek-ai-dsh-scope/understand-the-implementation/the-parent-chain: + en: f0c433a9b0091de4 + zh: 21cecb4194aff7d0 +/deepseek-ai-dsh-scope/understand-the-implementation/event-filtering: + en: 9ec9b8d491c7dfe7 + zh: da82e63bac268535 +/deepseek-ai-dsh-scope/further-exploration: + en: f6f4e46a89785446 + zh: ea130e3ffefe1139 +/deepseek-ai-dsh-scope/known-limitations-and-deferred-work: + en: 87eea2029792dc14 + zh: ba020413273d3235 +/deepseek-ai-dsh-scope/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/session/README.i18n.yaml b/packages/core/session/README.i18n.yaml index ae3352f3f1..f9d2ef1552 100644 --- a/packages/core/session/README.i18n.yaml +++ b/packages/core/session/README.i18n.yaml @@ -1,6 +1,103 @@ -# 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 packages/core/session/README.md -README.md: 06c4f1806995c2fdff78515f88a60c6e449e3a26 -README.zh.md: c52eee96af19bcd6f5a76f950026d2c191002732 +/: + en: 54dedea99ec5492c + zh: 23b29cb5d738dadb +/deepseek-ai-dsh-session: + en: c019c0e8c7f9cba0 + zh: 151e150825fda310 +/deepseek-ai-dsh-session/summary: + en: 311239677afd230a + zh: f2c575945baaa2a2 +/deepseek-ai-dsh-session/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session/use-this-package: + en: 0882d4056c45aa75 + zh: fcee78e9845b78b3 +/deepseek-ai-dsh-session/use-this-package/create-and-inspect-sessions: + en: f80dab583fa3939d + zh: 5a9a79ebcef86119 +/deepseek-ai-dsh-session/use-this-package/append-and-derive: + en: aa5f1951ecf3ac0c + zh: 62a599ace8f2bf15 +/deepseek-ai-dsh-session/use-this-package/read-the-log: + en: 2b29cfeac7a2baa8 + zh: b535b04dcbc29d3d +/deepseek-ai-dsh-session/use-this-package/fork-a-session: + en: 1c40d17a786059d3 + zh: 81320ce118977c65 +/deepseek-ai-dsh-session/use-this-package/flush-durable-state: + en: 70a7673145c851ad + zh: 0dd1667d9518993d +/deepseek-ai-dsh-session/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-session/understand-the-implementation/design-concept: + en: dabbe938e288c55a + zh: 31c7ac2bee2a2846 +/deepseek-ai-dsh-session/understand-the-implementation/request-headers: + en: bbfb53c50100ab13 + zh: 303a8ee47f4f656a +/deepseek-ai-dsh-session/understand-the-implementation/source-map: + en: e87f7ef34effbad2 + zh: 774a98d23611f5f5 +/deepseek-ai-dsh-session/understand-the-implementation/append-validation: + en: 5c09583bc8e1ffc6 + zh: 3b25552de2d1f9b6 +/deepseek-ai-dsh-session/understand-the-implementation/derived-history: + en: 0cc7a06f76bd7eca + zh: 1db25185b15cad23 +/deepseek-ai-dsh-session/understand-the-implementation/the-request-header: + en: 1349f47bea4dab00 + zh: 20cc03f2c87ec492 +/deepseek-ai-dsh-session/further-exploration: + en: e23d6c8b31295044 + zh: 5105ac9ce8c5d90d +/deepseek-ai-dsh-session/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session/model-experience/derived-message-history: + en: 3005f28ded3b28ea + zh: daaddc6df470b396 +/deepseek-ai-dsh-session/model-experience/derived-message-history/what-the-model-sees: + en: 30ccd8296306b132 + zh: 19efa5a43745585c +/deepseek-ai-dsh-session/model-experience/derived-message-history/token-effect: + en: 05e088199dac7f98 + zh: 35868b5fb768e240 +/deepseek-ai-dsh-session/model-experience/derived-message-history/kv-cache-effect: + en: 6c8079c7de029ed4 + zh: 634d6f93ce6373c4 +/deepseek-ai-dsh-session/model-experience/crash-repair-and-fork-results: + en: 4aa585f38846e017 + zh: ef28f54125a9021d +/deepseek-ai-dsh-session/model-experience/crash-repair-and-fork-results/what-the-model-sees: + en: b2ae41b23519cdc6 + zh: 05ce1c9a8b8c3283 +/deepseek-ai-dsh-session/model-experience/crash-repair-and-fork-results/token-effect: + en: ac63e0f30175f72d + zh: 20f63deeffa249f2 +/deepseek-ai-dsh-session/model-experience/crash-repair-and-fork-results/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: b84ef7f75f2e25d0 +/deepseek-ai-dsh-session/model-experience/logged-request-header: + en: 5397f067293a55cd + zh: 1dcc30d0c214f175 +/deepseek-ai-dsh-session/model-experience/logged-request-header/what-the-model-sees: + en: f22c66d2d6caed26 + zh: 805bbf2c8fa69a3b +/deepseek-ai-dsh-session/model-experience/logged-request-header/token-effect: + en: 310b8f36a86443e5 + zh: 906c4da8d03c5966 +/deepseek-ai-dsh-session/model-experience/logged-request-header/kv-cache-effect: + en: 5eb30cfb410d52c0 + zh: da56365b8ab896da +/deepseek-ai-dsh-session/known-limitations-and-deferred-work: + en: daaf56dda2bcaff1 + zh: 7d24de2deb1c5dc5 +/deepseek-ai-dsh-session/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/system-prompt/README.i18n.yaml b/packages/core/system-prompt/README.i18n.yaml index f9c9e63d0b..d05e3b8c57 100644 --- a/packages/core/system-prompt/README.i18n.yaml +++ b/packages/core/system-prompt/README.i18n.yaml @@ -1,6 +1,88 @@ -# 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 packages/core/system-prompt/README.md -README.md: a76ae5c66f0801cb85cd8cf22d0c3ebbc68e65b8 -README.zh.md: 98c6e733399c954c5bbc56b905aefcc6b080381d +/: + en: 51d99b2500db958f + zh: 91f2b113ba7989fd +/deepseek-ai-dsh-system-prompt: + en: e1cfb1611662e8ab + zh: 5476f22f8ffe923a +/deepseek-ai-dsh-system-prompt/summary: + en: f5cce6867daddbab + zh: 4a1a47623c198207 +/deepseek-ai-dsh-system-prompt/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-system-prompt/use-this-package: + en: 7bea567207cd7e00 + zh: ffc050b05f07ba7f +/deepseek-ai-dsh-system-prompt/use-this-package/configure-the-prompt: + en: 77c27acfc831cf4c + zh: ae4d89acd08eb204 +/deepseek-ai-dsh-system-prompt/use-this-package/contribute-a-prompt-section: + en: 15d70e3b8eddd636 + zh: a3a67cab60eee86f +/deepseek-ai-dsh-system-prompt/use-this-package/contribute-a-prompt-variable: + en: 39050b92755ceb21 + zh: 9ddc7d24914b8f2e +/deepseek-ai-dsh-system-prompt/use-this-package/contribute-tool-schemas: + en: 009ef267dac2f270 + zh: e79c24bff5cd836f +/deepseek-ai-dsh-system-prompt/use-this-package/suppress-runtime-context: + en: 61e2c1a3f18b48dd + zh: 29ecab2639f60103 +/deepseek-ai-dsh-system-prompt/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-system-prompt/understand-the-implementation/design-concept: + en: c91963b89a866fed + zh: ef9ef4940145778f +/deepseek-ai-dsh-system-prompt/understand-the-implementation/source-map: + en: a93197314e803d86 + zh: 8cc650f60e868631 +/deepseek-ai-dsh-system-prompt/understand-the-implementation/assembly-and-rendering: + en: 54977e6c431f851e + zh: ef60007054b97ff0 +/deepseek-ai-dsh-system-prompt/understand-the-implementation/scoping: + en: 1100ab1dfe961631 + zh: c510275c893951b4 +/deepseek-ai-dsh-system-prompt/further-exploration: + en: 108d1b4cca466bc7 + zh: e1275966f83c14f9 +/deepseek-ai-dsh-system-prompt/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-system-prompt/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-system-prompt/model-experience/system-prompt/what-the-model-sees: + en: 9927fdee4f8aa8ec + zh: 3687314c357fa7f4 +/deepseek-ai-dsh-system-prompt/model-experience/system-prompt/what-the-model-sees/harness-identity: + en: 40effd71cb503319 + zh: 9969356237a4f398 +/deepseek-ai-dsh-system-prompt/model-experience/system-prompt/token-effect: + en: 29722e212137deaa + zh: 92cd0f1a16b10315 +/deepseek-ai-dsh-system-prompt/model-experience/system-prompt/kv-cache-effect: + en: ae980c28b57dc060 + zh: 331eea5b204fa9ac +/deepseek-ai-dsh-system-prompt/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-system-prompt/model-experience/tool-schemas/what-the-model-sees: + en: a983ef220593cf73 + zh: 28770612ffc1be60 +/deepseek-ai-dsh-system-prompt/model-experience/tool-schemas/token-effect: + en: f3a7d374c55e1720 + zh: 0ee48af678cb875f +/deepseek-ai-dsh-system-prompt/model-experience/tool-schemas/kv-cache-effect: + en: ebd329e360f0d143 + zh: 9d67fe503a6a095a +/deepseek-ai-dsh-system-prompt/known-limitations-and-deferred-work: + en: 23bb9f59ceb1620c + zh: be34f1770fa2e027 +/deepseek-ai-dsh-system-prompt/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/core/tools/README.i18n.yaml b/packages/core/tools/README.i18n.yaml index 7fb7a8ad41..1c6c7cc042 100644 --- a/packages/core/tools/README.i18n.yaml +++ b/packages/core/tools/README.i18n.yaml @@ -1,6 +1,103 @@ -# 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 packages/core/tools/README.md -README.md: 83f04d86d74b3b8c3a5028be65a6dd9eb6709a2e -README.zh.md: 2b5c4e87b8a77bbdad7125732359f817b7ce7014 +/: + en: 3b12a77945c0d1e9 + zh: e9af32047e4f658b +/deepseek-ai-dsh-tools: + en: bb2af1250bfefe4b + zh: 893e3ab2e563a8a5 +/deepseek-ai-dsh-tools/summary: + en: 19679f9c1953baaf + zh: 65dec1ccab4e532b +/deepseek-ai-dsh-tools/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tools/use-this-package: + en: 6e722ebac4878621 + zh: 0946eb94f78b7029 +/deepseek-ai-dsh-tools/use-this-package/register-a-tool: + en: 02fce53c21a33d74 + zh: 01110c4714dfd602 +/deepseek-ai-dsh-tools/use-this-package/configure-the-presentation-mode: + en: f843dfaf6ab6e19e + zh: 8e3b8816a4e51e7b +/deepseek-ai-dsh-tools/use-this-package/restrict-tools-per-agent: + en: c6f98b2283cc2e47 + zh: c2cdce5d13473f15 +/deepseek-ai-dsh-tools/use-this-package/enforce-policy-on-calls: + en: cbfe8317565ac62d + zh: 1e71c66941e50881 +/deepseek-ai-dsh-tools/use-this-package/host-presentation-descriptors: + en: 258e16bb367229e5 + zh: 7c1eb91062b4e4ad +/deepseek-ai-dsh-tools/understand-the-implementation: + en: ce7e776e9d516bdb + zh: 59d2751743db7795 +/deepseek-ai-dsh-tools/understand-the-implementation/design-concept: + en: 92e8af53e6067bad + zh: 33c7b99b42c5acac +/deepseek-ai-dsh-tools/understand-the-implementation/source-map: + en: 7f61ed30a231b7ba + zh: c7587af984650f8b +/deepseek-ai-dsh-tools/understand-the-implementation/execution-and-cancellation: + en: dc44a88997777988 + zh: 56454aeace1c8b77 +/deepseek-ai-dsh-tools/understand-the-implementation/ptc-mode: + en: b75b027e45340107 + zh: beffa345cf76df51 +/deepseek-ai-dsh-tools/understand-the-implementation/extension-points: + en: c2a14d6f22bc9428 + zh: 89c1414fca465931 +/deepseek-ai-dsh-tools/further-exploration: + en: d8e2dfcfef2a2284 + zh: b33111cbc20dc498 +/deepseek-ai-dsh-tools/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tools/model-experience/normal-tool-schemas: + en: 483b01d9bb2cb49a + zh: 1d95095e76fb0996 +/deepseek-ai-dsh-tools/model-experience/normal-tool-schemas/what-the-model-sees: + en: beda295a874b30a1 + zh: 253c4cf007c4db3f +/deepseek-ai-dsh-tools/model-experience/normal-tool-schemas/token-effect: + en: d594b71ff5e4cc87 + zh: dcec1ea0dd2a0fa6 +/deepseek-ai-dsh-tools/model-experience/normal-tool-schemas/kv-cache-effect: + en: 7c5e75964e020b2c + zh: d50d0402d15232d9 +/deepseek-ai-dsh-tools/model-experience/ptc-mode-schema-and-system-prompt: + en: eaefd7303f22977d + zh: 9c425f9501128224 +/deepseek-ai-dsh-tools/model-experience/ptc-mode-schema-and-system-prompt/what-the-model-sees: + en: ded2d4fca7d15cab + zh: befc42f701394a00 +/deepseek-ai-dsh-tools/model-experience/ptc-mode-schema-and-system-prompt/what-the-model-sees/typescript-ptc-mode-sdk-instructions-with-bash: + en: 3a8df15e4ae32f9e + zh: fc4a800ba363e835 +/deepseek-ai-dsh-tools/model-experience/ptc-mode-schema-and-system-prompt/token-effect: + en: 12296fcafc14562c + zh: f8e9351bb8c6437d +/deepseek-ai-dsh-tools/model-experience/ptc-mode-schema-and-system-prompt/kv-cache-effect: + en: 78906628d634441f + zh: 492f133aea50cfe3 +/deepseek-ai-dsh-tools/model-experience/tool-call-history-and-results: + en: a8503137ad03720c + zh: 611a2dadf7c0c706 +/deepseek-ai-dsh-tools/model-experience/tool-call-history-and-results/what-the-model-sees: + en: 7c568da5a45e99ab + zh: 7e78f04448fc5450 +/deepseek-ai-dsh-tools/model-experience/tool-call-history-and-results/token-effect: + en: 8fe3f024f364ed9f + zh: 89c1d5d24c5f950b +/deepseek-ai-dsh-tools/model-experience/tool-call-history-and-results/kv-cache-effect: + en: 2fbf2175168e8244 + zh: ad59a120b54a0996 +/deepseek-ai-dsh-tools/known-limitations-and-deferred-work: + en: 3b40386c7530471f + zh: c8c9a555d370a51a +/deepseek-ai-dsh-tools/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/credentials/README.i18n.yaml b/packages/credentials/README.i18n.yaml index f69cd345f5..c0beb05319 100644 --- a/packages/credentials/README.i18n.yaml +++ b/packages/credentials/README.i18n.yaml @@ -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 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 packages/credentials/README.md -README.md: 06dc38108a90bac9e9a21bbac2c30fce2dfd1c1e -README.zh.md: 4c59728bab26ef46e63cfbcf517b8ac13df2e33e +/: + en: 05492e1edf4502d1 + zh: b9cf5222684fb842 +/credentials-credentials-and-authorization: + en: 03fef8e24bd97152 + zh: 111354cb879dc264 +/credentials-credentials-and-authorization/summary: + en: bf9bc998e950affb + zh: 9a73ac3012dff7b9 +/credentials-credentials-and-authorization/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/credentials-credentials-and-authorization/packages: + en: 2f3632b522c022fc + zh: 7dab6123d68b2a38 +/credentials-credentials-and-authorization/related-documentation: + en: b1d12d492789f933 + zh: a945956e071d2f04 +/credentials-credentials-and-authorization/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/credentials/authorization/README.i18n.yaml b/packages/credentials/authorization/README.i18n.yaml index dbc5485f09..1ccc6810b1 100644 --- a/packages/credentials/authorization/README.i18n.yaml +++ b/packages/credentials/authorization/README.i18n.yaml @@ -1,2 +1,64 @@ -README.md: 4952b08de3bce9eef34a440d639bad138e2cdcb4 -README.zh.md: 3c4b0b1200dc749e8668eeff2c739001fdab693d +# 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 packages/credentials/authorization/README.md +/: + en: c9319744964261cb + zh: 93361a49c06aa42a +/deepseek-ai-dsh-authorization: + en: a78d31450c655d52 + zh: 11bb8480261e413e +/deepseek-ai-dsh-authorization/summary: + en: ca80257c94665801 + zh: 3696908e676e44dc +/deepseek-ai-dsh-authorization/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-authorization/use-this-package: + en: 38c0a8c7c565fdd7 + zh: 67c5de61c8d0e5ad +/deepseek-ai-dsh-authorization/use-this-package/when-to-use-it: + en: 9699cf81f0c755f3 + zh: fddb3b9005212ba6 +/deepseek-ai-dsh-authorization/use-this-package/registering-a-flow: + en: 33cc251be5cf2793 + zh: 4ed4cc1e003b37e0 +/deepseek-ai-dsh-authorization/use-this-package/running-an-attempt: + en: 85c8ae5a610778c3 + zh: 34abea479a52185f +/deepseek-ai-dsh-authorization/use-this-package/what-can-go-wrong: + en: 3f03d96a7d748dd4 + zh: 076e0881491a5c3d +/deepseek-ai-dsh-authorization/understand-the-implementation: + en: 39f5a6bae0aa6879 + zh: 67bacdf7c7136f93 +/deepseek-ai-dsh-authorization/understand-the-implementation/design-philosophy: + en: d4cbeb418479eb5b + zh: b254988fae29eadc +/deepseek-ai-dsh-authorization/understand-the-implementation/source-map: + en: b208bb36b648e2a3 + zh: d3580b3589a88c84 +/deepseek-ai-dsh-authorization/understand-the-implementation/lifecycle: + en: 535c027fe250a32a + zh: c0372ee717e035a2 +/deepseek-ai-dsh-authorization/understand-the-implementation/the-interaction-vocabulary: + en: e561ab5914bc1691 + zh: 2af6359bee6078d6 +/deepseek-ai-dsh-authorization/understand-the-implementation/commit-confirmation: + en: f6c7460f543ad4c3 + zh: f3372420b00f85c7 +/deepseek-ai-dsh-authorization/further-exploration: + en: 485a4648693d570c + zh: 75ed4dc5868ad67f +/deepseek-ai-dsh-authorization/model-experience: + en: bc0f9bed16c8bac8 + zh: 16a0b32c88cdd2a5 +/deepseek-ai-dsh-authorization/model-experience/kv-cache-effect: + en: 5a4feea681ad4bb9 + zh: 5d80a66ae434b42b +/deepseek-ai-dsh-authorization/known-limitations-and-deferred-work: + en: 0f8ee6f7e6acf8d4 + zh: 97dda218cc5cd287 +/deepseek-ai-dsh-authorization/known-limitations-and-deferred-work/dev-note: + en: 31a73d9f4e68d98e + zh: 43bf2a9b2fcd06d1 diff --git a/packages/credentials/credentials-local/README.i18n.yaml b/packages/credentials/credentials-local/README.i18n.yaml index 56a5e3ffaf..e3d1566c94 100644 --- a/packages/credentials/credentials-local/README.i18n.yaml +++ b/packages/credentials/credentials-local/README.i18n.yaml @@ -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 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 packages/credentials/credentials-local/README.md -README.md: 94d06bc48ec92630bfdd885353592a34f80dc249 -README.zh.md: 64566fe46202b8064df5cd5677904e46e97f96ac +/: + en: 389e4b3a4c4ac815 + zh: c4a22a6bc4e803cf +/deepseek-ai-dsh-credentials-local: + en: 3b9ce5321aa1976d + zh: 3d78dd8b203b68e6 +/deepseek-ai-dsh-credentials-local/summary: + en: 84d1d9bab56bb45a + zh: 6a1a0d919b11915a +/deepseek-ai-dsh-credentials-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-credentials-local/use-this-package: + en: 04d01ff7f06a7b38 + zh: 0b0e0950d53ddc30 +/deepseek-ai-dsh-credentials-local/use-this-package/when-to-use-it: + en: fe4096694cbea2d6 + zh: 30f3763eb1cb479a +/deepseek-ai-dsh-credentials-local/use-this-package/setting-it-up: + en: fccad7d354c2af71 + zh: 5b95b5890e21f80f +/deepseek-ai-dsh-credentials-local/use-this-package/storing-and-removing-keys: + en: 5e3d45470142b9dd + zh: 1f8358f987769d3a +/deepseek-ai-dsh-credentials-local/use-this-package/where-keys-come-from: + en: a746b6550b664db6 + zh: 0f6346dabe41d274 +/deepseek-ai-dsh-credentials-local/use-this-package/the-credential-file: + en: 9d6580d151ca0fd2 + zh: ffc3a407e0f7ff7d +/deepseek-ai-dsh-credentials-local/use-this-package/who-can-read-the-file: + en: 76bcb1dab6a112e2 + zh: 42669953eef0fc53 +/deepseek-ai-dsh-credentials-local/use-this-package/what-can-go-wrong: + en: 31d1ac1df959a6ad + zh: 7c8d335690dc73aa +/deepseek-ai-dsh-credentials-local/understand-the-implementation: + en: 538553a9a48e2f93 + zh: d981c42878e80762 +/deepseek-ai-dsh-credentials-local/understand-the-implementation/design-philosophy: + en: 697bda9e5ee4dd28 + zh: d7e23a8e8cd398e2 +/deepseek-ai-dsh-credentials-local/understand-the-implementation/source-map: + en: ab20e314c0610350 + zh: ba991f1ea5bbd8f1 +/deepseek-ai-dsh-credentials-local/understand-the-implementation/resolution-and-write-paths: + en: 8841486f9eda2f6b + zh: 015a2bbfe8a6fdbf +/deepseek-ai-dsh-credentials-local/understand-the-implementation/reload-lifecycle: + en: c7e531430cad142f + zh: dec27aab2645343f +/deepseek-ai-dsh-credentials-local/understand-the-implementation/document-versioning: + en: 9f31ab263a7eef21 + zh: f37fbac426de871d +/deepseek-ai-dsh-credentials-local/understand-the-implementation/diagnostics-never-quote-a-value: + en: 1b3ec75a7cd92af6 + zh: c4d0813157efe45f +/deepseek-ai-dsh-credentials-local/further-exploration: + en: b70ad677940195ba + zh: fefb52d5ff444eaf +/deepseek-ai-dsh-credentials-local/model-experience: + en: 0349ffbfc06db166 + zh: 9c428bb4692cdf44 +/deepseek-ai-dsh-credentials-local/model-experience/kv-cache-effect: + en: 8bcc2bd23e28c4cd + zh: 49bedb0374521d89 +/deepseek-ai-dsh-credentials-local/known-limitations-and-deferred-work: + en: 509bc646b63aab37 + zh: dd44f6f9505663a7 +/deepseek-ai-dsh-credentials-local/known-limitations-and-deferred-work/dev-note: + en: ea4056cb07180841 + zh: 4597fed5074865ee diff --git a/packages/credentials/credentials/README.i18n.yaml b/packages/credentials/credentials/README.i18n.yaml index 09a074e688..e0058b1f23 100644 --- a/packages/credentials/credentials/README.i18n.yaml +++ b/packages/credentials/credentials/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/credentials/credentials/README.md -README.md: 6e44a298fa38fe075119f36eeabd8d3c0675ec9c -README.zh.md: a87c2ed4e3f02f5bf80a3a0af7778c57ef1b415d +/: + en: cd462613098de61f + zh: 457c45212df55990 +/deepseek-ai-dsh-credentials: + en: a2304ffebb5c1788 + zh: defdb86f8759c35c +/deepseek-ai-dsh-credentials/summary: + en: 345c41fba16fa0c4 + zh: b4b551e1d68399d9 +/deepseek-ai-dsh-credentials/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-credentials/use-this-package: + en: 32e626bb84b2360a + zh: 6bad5ffd40687587 +/deepseek-ai-dsh-credentials/use-this-package/when-to-use-it: + en: 78c50ac5ee5cf5f1 + zh: d42c0b8df37653bf +/deepseek-ai-dsh-credentials/use-this-package/adding-it-to-your-composition: + en: 8f3500119608f91b + zh: 147fdb5389affbc0 +/deepseek-ai-dsh-credentials/use-this-package/storing-checking-and-removing-keys: + en: fa334e2d4438e0b6 + zh: 009b9252ed046886 +/deepseek-ai-dsh-credentials/use-this-package/storing-updating-and-removing-records: + en: 300c3f1f13abdca4 + zh: ec7a6486ac88889c +/deepseek-ai-dsh-credentials/use-this-package/using-a-key-in-configuration: + en: fd17366bde0425e0 + zh: 408fc625b58db7b4 +/deepseek-ai-dsh-credentials/use-this-package/what-can-go-wrong: + en: e2d528fe7f9c5846 + zh: 934f55ebf276754f +/deepseek-ai-dsh-credentials/understand-the-implementation: + en: 16370ef642feec6a + zh: a546774827234300 +/deepseek-ai-dsh-credentials/understand-the-implementation/design-philosophy: + en: 3f82aa86b2e7f40f + zh: 25e86b8939a013ea +/deepseek-ai-dsh-credentials/understand-the-implementation/the-credentials-reference-updated-event: + en: 0192e26fe2f8abd9 + zh: 5a8f65be88e930ff +/deepseek-ai-dsh-credentials/understand-the-implementation/record-write-and-read-paths: + en: 1d56a35fe82e78f3 + zh: 1fffc3e104c36805 +/deepseek-ai-dsh-credentials/understand-the-implementation/source-map: + en: 2aec30ce79d0e4cf + zh: 3579a6ce6efd5801 +/deepseek-ai-dsh-credentials/understand-the-implementation/client-safe-types: + en: b955d1b41f0ad904 + zh: 3f49a25e157d3672 +/deepseek-ai-dsh-credentials/understand-the-implementation/lifecycle: + en: 080ac62861a7ebad + zh: 3a7689455b9457de +/deepseek-ai-dsh-credentials/further-exploration: + en: cf1f3628dcce73eb + zh: c8c9ce761a6b8f55 +/deepseek-ai-dsh-credentials/model-experience: + en: 7ece1bcb1aacbc36 + zh: 8a03504ed0f6a76b +/deepseek-ai-dsh-credentials/model-experience/kv-cache-effect: + en: 4fd714ed20aad98c + zh: cfd8f48b31a6bcbe +/deepseek-ai-dsh-credentials/known-limitations-and-deferred-work: + en: e9a56db848656830 + zh: f8f10e70c3fa09b5 +/deepseek-ai-dsh-credentials/known-limitations-and-deferred-work/dev-note: + en: f873088b72dc767b + zh: 9f28ed7c185792d1 diff --git a/packages/credentials/deepseek-account-platform/README.i18n.yaml b/packages/credentials/deepseek-account-platform/README.i18n.yaml index 812ac5e789..e1449544e5 100644 --- a/packages/credentials/deepseek-account-platform/README.i18n.yaml +++ b/packages/credentials/deepseek-account-platform/README.i18n.yaml @@ -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 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 packages/credentials/deepseek-account-platform/README.md -README.md: 8db7824fee19d70fd895ee9012e2a933f28a53c9 -README.zh.md: b4525f135f772623ed0f9e6241b11390dad82b85 +/: + en: 9dbb9bc3960a11fe + zh: ed58987926489d3e +/deepseek-ai-dsh-deepseek-account-platform: + en: 8d24139e7cbe41b9 + zh: ac860299e78bcab3 +/deepseek-ai-dsh-deepseek-account-platform/summary: + en: 6af5ed65ad6982e1 + zh: ee34205c3732739a +/deepseek-ai-dsh-deepseek-account-platform/table-of-contents: + en: af856ba79fe31b8e + zh: 15b7d1a5d1856de2 +/deepseek-ai-dsh-deepseek-account-platform/use-this-package: + en: 18e68fe342b81d1f + zh: 7499ee6811d95fa0 +/deepseek-ai-dsh-deepseek-account-platform/understand-the-implementation: + en: 0a829b20071a01d4 + zh: 83f54ac08f3609f2 +/deepseek-ai-dsh-deepseek-account-platform/further-exploration: + en: c8b43a641360ec9e + zh: a545f6a0b6a5066b +/deepseek-ai-dsh-deepseek-account-platform/model-experience: + en: ee1df7ca3467ee3f + zh: 84904a5148da3862 +/deepseek-ai-dsh-deepseek-account-platform/model-experience/kv-cache-effect: + en: ca3015e252db0114 + zh: ebca9253cf15e8e9 +/deepseek-ai-dsh-deepseek-account-platform/known-limitations-and-deferred-work: + en: 1b26fcb10e139c27 + zh: 8babfccddabdabc4 +/deepseek-ai-dsh-deepseek-account-platform/known-limitations-and-deferred-work/dev-note: + en: d75ef0d6a860a11f + zh: f6e132e052d6da82 diff --git a/packages/credentials/deepseek-account/README.i18n.yaml b/packages/credentials/deepseek-account/README.i18n.yaml index f59e08d93b..14a95ff841 100644 --- a/packages/credentials/deepseek-account/README.i18n.yaml +++ b/packages/credentials/deepseek-account/README.i18n.yaml @@ -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 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 packages/credentials/deepseek-account/README.md -README.md: f82cdcfec18d913cec1dba5ca0a2a1a0f0a1404c -README.zh.md: 94efac994da792e3bdb4a819a860c4bb9a2d0419 +/: + en: 30a2d1a634d60f4a + zh: 9fbf972d342f8ba2 +/deepseek-ai-dsh-deepseek-account: + en: b259dd93e907bbfc + zh: aedb3265f0cce0d4 +/deepseek-ai-dsh-deepseek-account/summary: + en: 68ef9cc302633361 + zh: e7222c009825046c +/deepseek-ai-dsh-deepseek-account/table-of-contents: + en: af856ba79fe31b8e + zh: 15b7d1a5d1856de2 +/deepseek-ai-dsh-deepseek-account/use-this-package: + en: d7825ac71d3acb22 + zh: 337bb5048aaade09 +/deepseek-ai-dsh-deepseek-account/understand-the-implementation: + en: 455017c6c03b3016 + zh: 59b108051984241e +/deepseek-ai-dsh-deepseek-account/further-exploration: + en: 5a57b4b331031f41 + zh: 8b72ac64ed244f58 +/deepseek-ai-dsh-deepseek-account/model-experience: + en: ee1df7ca3467ee3f + zh: 84904a5148da3862 +/deepseek-ai-dsh-deepseek-account/model-experience/kv-cache-effect: + en: ca3015e252db0114 + zh: ebca9253cf15e8e9 +/deepseek-ai-dsh-deepseek-account/known-limitations-and-deferred-work: + en: 0960f4968520bf50 + zh: 6a45253b706eceb0 +/deepseek-ai-dsh-deepseek-account/known-limitations-and-deferred-work/dev-note: + en: b91661fcb9b87863 + zh: 7f38408e6313dfcd diff --git a/packages/deliverables/README.i18n.yaml b/packages/deliverables/README.i18n.yaml index ac28139081..2517f786db 100644 --- a/packages/deliverables/README.i18n.yaml +++ b/packages/deliverables/README.i18n.yaml @@ -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 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 packages/deliverables/README.md -README.md: 3666cbbbe1695a95fe33497c22dd94f502a7f292 -README.zh.md: 72dbf338f8758ed251287461d13b18df34dff454 +/: + en: 38bdc90f990d80b2 + zh: 47fc6b27ca4e6b4e +/packages-deliverables: + en: 1ce264387fb878be + zh: 2252f5056184e1f5 +/packages-deliverables/summary: + en: 4fb12c65ff23d031 + zh: 01ebca28b793def2 +/packages-deliverables/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-deliverables/packages: + en: a421c20359e2a77b + zh: 70286affa23c2af4 +/packages-deliverables/related-documentation: + en: 73dddd521472c300 + zh: dbbbb46568da5ef2 +/packages-deliverables/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/deliverables/tool-present/README.i18n.yaml b/packages/deliverables/tool-present/README.i18n.yaml index 90a7c23e7a..272cf39eb0 100644 --- a/packages/deliverables/tool-present/README.i18n.yaml +++ b/packages/deliverables/tool-present/README.i18n.yaml @@ -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 packages/deliverables/tool-present/README.md -README.md: a7eb9e7cf9060472258666de186a7ecefe7aa407 -README.zh.md: 5ba4ab5f100517708d80e4860d9e5eed0f43a801 +/: + en: 77fa72665646fedb + zh: 2d360098a76804c8 +/deepseek-ai-dsh-tool-present: + en: 7a9bcbc94c211b65 + zh: 5e53b10028b5d918 +/deepseek-ai-dsh-tool-present/summary: + en: 79708e6e895b94d0 + zh: c98dc1ac9316eb50 +/deepseek-ai-dsh-tool-present/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-present/use-this-package: + en: f2726b49d9f4d5b3 + zh: 10428317260e5cf1 +/deepseek-ai-dsh-tool-present/understand-the-implementation: + en: 159f6961c4582e8f + zh: af4cc40de153d758 +/deepseek-ai-dsh-tool-present/further-exploration: + en: 66269384f8c0d0f7 + zh: b3d694d2f0ae588a +/deepseek-ai-dsh-tool-present/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-present/model-experience/present: + en: 695c689adf61838a + zh: 695c689adf61838a +/deepseek-ai-dsh-tool-present/model-experience/present/what-the-model-sees: + en: 0a842e857bd3b79c + zh: 42352c9fdad79662 +/deepseek-ai-dsh-tool-present/model-experience/present/token-effect: + en: fbe1ca0b530500a0 + zh: e198e106b85714b6 +/deepseek-ai-dsh-tool-present/model-experience/present/kv-cache-effect: + en: c5e95beba09dce3c + zh: 50f71fac2592f652 +/deepseek-ai-dsh-tool-present/known-limitations-and-deferred-work: + en: 918d8b8f09063e68 + zh: 48591e5324a462c4 +/deepseek-ai-dsh-tool-present/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/deliverables/workspace-changes/README.i18n.yaml b/packages/deliverables/workspace-changes/README.i18n.yaml index bb8403671e..f3dcdf36dd 100644 --- a/packages/deliverables/workspace-changes/README.i18n.yaml +++ b/packages/deliverables/workspace-changes/README.i18n.yaml @@ -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 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 packages/deliverables/workspace-changes/README.md -README.md: 168a30cd993c4b53a34785dd6f4e31bd0f007d8a -README.zh.md: 42a96ffdd72efc6fcfee11eb973fa687021d6a0b +/: + en: 961e566f4c0c9b31 + zh: 368dabdd8c4d53ec +/deepseek-ai-dsh-workspace-changes: + en: d328861923e51a10 + zh: 7725513f609601a0 +/deepseek-ai-dsh-workspace-changes/summary: + en: 61639e7f0185b4d9 + zh: 7c559b2863f073f9 +/deepseek-ai-dsh-workspace-changes/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-workspace-changes/use-this-package: + en: d6364de942d83439 + zh: b958129205655ba9 +/deepseek-ai-dsh-workspace-changes/understand-the-implementation: + en: e5b20d508763a2cf + zh: 4e35b0c46ffd5fb0 +/deepseek-ai-dsh-workspace-changes/further-exploration: + en: b1b7ffc015a7efd7 + zh: 500f142e6ae7d1fd +/deepseek-ai-dsh-workspace-changes/model-experience: + en: aa413c0bfaa815a8 + zh: eea730976cf916e6 +/deepseek-ai-dsh-workspace-changes/model-experience/kv-cache-effect: + en: e7ba08477bf22c4e + zh: f365439c69beb722 +/deepseek-ai-dsh-workspace-changes/known-limitations-and-deferred-work: + en: c7091685e5065a40 + zh: 1e9b85962ea04187 +/deepseek-ai-dsh-workspace-changes/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/document/README.i18n.yaml b/packages/document/README.i18n.yaml index 4eb834b43a..4f28695b04 100644 --- a/packages/document/README.i18n.yaml +++ b/packages/document/README.i18n.yaml @@ -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 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 packages/document/README.md -README.md: 8993c608169ef08abe45babcf33ce6552c147425 -README.zh.md: c5775ae4deb9f4dea36df104f93c8e016e44abbd +/: + en: a1540c1a1a7faf3e + zh: 7642847c581f1165 +/document-office-conversion: + en: 402ecdc5d078d548 + zh: 36d74233639f5f4c +/document-office-conversion/summary: + en: 09e0b17633a85188 + zh: 1244a5d30ac503ba +/document-office-conversion/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/document-office-conversion/packages: + en: 4e4b5cffba75c10f + zh: b202aeb2a915ce08 +/document-office-conversion/related-documentation: + en: 17eed9809381620e + zh: 3d3f045cec85e4f4 +/document-office-conversion/dev-note: + en: 5de1d6304e00c58f + zh: e58fc8dda0bea8d5 diff --git a/packages/document/office-to-pdf/README.i18n.yaml b/packages/document/office-to-pdf/README.i18n.yaml index 94b37cb130..7b452b4a1b 100644 --- a/packages/document/office-to-pdf/README.i18n.yaml +++ b/packages/document/office-to-pdf/README.i18n.yaml @@ -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 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 packages/document/office-to-pdf/README.md -README.md: 0ebc409be297ba3377b0c6990c2eb7cd279251cf -README.zh.md: 7bdfc974fd24361822fc17c75ede038a3f7af61a +/: + en: c3e6e5964cf9df7d + zh: a3874301c5f7745f +/deepseek-ai-dsh-office-to-pdf: + en: fc7d38b1fd8bd1d0 + zh: 580c51545286af31 +/deepseek-ai-dsh-office-to-pdf/summary: + en: 5df2262ee89a5601 + zh: c999e9e5574ee169 +/deepseek-ai-dsh-office-to-pdf/table-of-contents: + en: d152484eb41ac6b4 + zh: a134331a31395608 +/deepseek-ai-dsh-office-to-pdf/use-this-package: + en: 24b70a1b79ea2b15 + zh: 1d827822390ab840 +/deepseek-ai-dsh-office-to-pdf/understand-the-implementation: + en: 2cd10fdd5204d64a + zh: 769a79b7d684fda4 +/deepseek-ai-dsh-office-to-pdf/further-exploration: + en: 4d5e635227d14056 + zh: 6c72a032786acd55 +/deepseek-ai-dsh-office-to-pdf/model-experience: + en: b03ae5780f8495eb + zh: 2a5428663141e3db +/deepseek-ai-dsh-office-to-pdf/model-experience/kv-cache-effect: + en: e77332dfb6691852 + zh: 2d7ce43f908b35ef +/deepseek-ai-dsh-office-to-pdf/known-limitations-and-deferred-work: + en: 6cd56e2c8255ffd9 + zh: 75891a4136f929e0 +/deepseek-ai-dsh-office-to-pdf/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/experimental/README.i18n.yaml b/packages/experimental/README.i18n.yaml index 99c6fb44dc..ee03f48578 100644 --- a/packages/experimental/README.i18n.yaml +++ b/packages/experimental/README.i18n.yaml @@ -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 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 packages/experimental/README.md -README.md: a3fc9ee815fcee1b918c81a464db250755684381 -README.zh.md: d038735fc488d7ef53f8514159ed6eec63c6f55d +/: + en: 4a982c0d6f3a1bb9 + zh: 47ba08d0a4ee1e6b +/packages-experimental: + en: 18bc48bb66b3e516 + zh: 51f2340a5c921f36 +/packages-experimental/summary: + en: bf80f4f1c888ff86 + zh: 6fa03019ffab7207 +/packages-experimental/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-experimental/packages: + en: ad10945dac9dbb51 + zh: 245b454406ce99f8 +/packages-experimental/related-documentation: + en: 31282a28dd828c81 + zh: ebb1d3cacdc1bd6d +/packages-experimental/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/experimental/agent-team-profile/README.i18n.yaml b/packages/experimental/agent-team-profile/README.i18n.yaml index 9f2ca6ce41..78761dfa6d 100644 --- a/packages/experimental/agent-team-profile/README.i18n.yaml +++ b/packages/experimental/agent-team-profile/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/experimental/agent-team-profile/README.md -README.md: 053f44b673552e7bb7d63ed944652ea6fb87145a -README.zh.md: bd6837339298fc13908e077833f75aa9c3a6696e +/: + en: e263a0edd266210f + zh: c5779bf7f64631d3 +/deepseek-ai-dsh-experimental-agent-team-profile: + en: 3deb4b95d9e58c8d + zh: 0ba043a54428445e +/deepseek-ai-dsh-experimental-agent-team-profile/summary: + en: 3ca34df3ee31841d + zh: a413140d89be2d05 +/deepseek-ai-dsh-experimental-agent-team-profile/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-agent-team-profile/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-experimental-agent-team-profile/use-this-package/install-into-a-profile: + en: 97ef5916c04bf2a1 + zh: 51f9d2bc3fca7936 +/deepseek-ai-dsh-experimental-agent-team-profile/use-this-package/what-you-get: + en: f0e95e60095fc5cb + zh: 8c36603b423475d0 +/deepseek-ai-dsh-experimental-agent-team-profile/understand-the-implementation: + en: dbfca16ca57c0723 + zh: 38ccf89793e21f68 +/deepseek-ai-dsh-experimental-agent-team-profile/further-exploration: + en: 76e92afc23c0ec7c + zh: 7bd671bd557a91ee +/deepseek-ai-dsh-experimental-agent-team-profile/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-agent-team-profile/model-experience/team-policy-and-tools: + en: 8e1e365ff3b0dfb2 + zh: c6c91fbf1e1df934 +/deepseek-ai-dsh-experimental-agent-team-profile/model-experience/team-policy-and-tools/what-the-model-sees: + en: f54dc1725b90365b + zh: 5a505996f7684231 +/deepseek-ai-dsh-experimental-agent-team-profile/model-experience/team-policy-and-tools/token-effect: + en: da8c178179ba50ba + zh: c53d5863bc14be79 +/deepseek-ai-dsh-experimental-agent-team-profile/model-experience/team-policy-and-tools/kv-cache-effect: + en: e331337b094aacde + zh: bb2e5df5ebeb9305 +/deepseek-ai-dsh-experimental-agent-team-profile/known-limitations-and-deferred-work: + en: 0413821c2fc20bea + zh: 53e135425dd82e12 +/deepseek-ai-dsh-experimental-agent-team-profile/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/experimental/agent-team/README.i18n.yaml b/packages/experimental/agent-team/README.i18n.yaml index be20145568..67ddc0b76f 100644 --- a/packages/experimental/agent-team/README.i18n.yaml +++ b/packages/experimental/agent-team/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/experimental/agent-team/README.md -README.md: 6d2aa6041039022e6508541fdb738181bbb54045 -README.zh.md: 9ea2977a976583aac08ca8bc53d61ff4812e1766 +/: + en: 6dbca19f6b32549f + zh: dae9c49eab8f6fee +/deepseek-ai-dsh-experimental-agent-team: + en: b28084855adcdabd + zh: 59e3d49c3d63baf9 +/deepseek-ai-dsh-experimental-agent-team/summary: + en: 5b981abe3a308e53 + zh: 7116e552a40dc79f +/deepseek-ai-dsh-experimental-agent-team/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-agent-team/use-this-package: + en: 4cafc368a3abea63 + zh: 396189cbdc47b1f5 +/deepseek-ai-dsh-experimental-agent-team/use-this-package/when-to-choose-it: + en: 8da318ac2f4343d7 + zh: b31a399d6e3fd64e +/deepseek-ai-dsh-experimental-agent-team/use-this-package/smallest-working-setup: + en: 4fccad6758905210 + zh: 9037ddb1dc4b2666 +/deepseek-ai-dsh-experimental-agent-team/use-this-package/teammates: + en: 5a314d1f80ecd31b + zh: c34e6a93dd1e2045 +/deepseek-ai-dsh-experimental-agent-team/use-this-package/messages-between-teammates: + en: 2c45b2c18c8317e7 + zh: d4ab2259f976b19d +/deepseek-ai-dsh-experimental-agent-team/use-this-package/shared-task-board: + en: 73682f0d2001b517 + zh: 3744d82eb3b7fcb9 +/deepseek-ai-dsh-experimental-agent-team/use-this-package/waiting-and-interruption: + en: f8e38ccf6295b375 + zh: 44f008e23613c0af +/deepseek-ai-dsh-experimental-agent-team/use-this-package/what-success-and-failure-look-like: + en: 0d523eb8ffe0a928 + zh: 270b2502db285ed8 +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation: + en: 6a18034f1ccc247a + zh: e08b0eb0ccb41ea8 +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/design-philosophy: + en: c08e8eb5bbac71ae + zh: d6fb32f1243a28d6 +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/source-map: + en: 53e2dda7c2adb34c + zh: 562590e3d42c029e +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/team-identity-and-roster: + en: 85f97723e45e43de + zh: def66721e21339cc +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durable-mailbox: + en: 26041ce90cc48a35 + zh: 677d85f22969f941 +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/shared-task-board: + en: 2dc37ba97a8a7178 + zh: 96bd24033030e19d +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/waiting-and-interruption: + en: 3becd36b407aac95 + zh: c9e4895ee59696bb +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/durability-model: + en: 66dcbc543f2d3576 + zh: cd8de23c555696df +/deepseek-ai-dsh-experimental-agent-team/understand-the-implementation/disposal: + en: 3ae69e3b7905cffe + zh: 0fb159101f6d646b +/deepseek-ai-dsh-experimental-agent-team/further-exploration: + en: 2bbfd4ffbaeedd00 + zh: d1afb5d320b469a1 +/deepseek-ai-dsh-experimental-agent-team/further-exploration/browser-projection: + en: 4b3033806e6db528 + zh: 53e0dfef7309840e +/deepseek-ai-dsh-experimental-agent-team/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages: + en: 7a72088145dd45ec + zh: 6763071c604c2edd +/deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/what-the-model-sees: + en: 4f9110ba058f25cd + zh: cf820293929ea993 +/deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/token-effect: + en: 37ec43beac34a6ad + zh: 6cdcd89ccceea815 +/deepseek-ai-dsh-experimental-agent-team/model-experience/peer-messages/kv-cache-effect: + en: ff845d434b857afe + zh: 04479bddf7650ede +/deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work: + en: 777abba6e3b496eb + zh: 2b8cd95e73f5e369 +/deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work/dev-note: + en: 498e4cf9fe5741a7 + zh: 9d2bab630e655c99 +/deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work/dev-note/promotion: + en: 3d126e3b1015e4ce + zh: 22f0d18e2ce5c30f +/deepseek-ai-dsh-experimental-agent-team/known-limitations-and-deferred-work/dev-note/future-directions: + en: 38eadeacd73b9c02 + zh: 05c5b55022e0b8d9 diff --git a/packages/experimental/api-speech-to-text/README.i18n.yaml b/packages/experimental/api-speech-to-text/README.i18n.yaml index 454b3e5dc8..3fe875cf4e 100644 --- a/packages/experimental/api-speech-to-text/README.i18n.yaml +++ b/packages/experimental/api-speech-to-text/README.i18n.yaml @@ -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 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 packages/experimental/api-speech-to-text/README.md -README.md: 113c1f94459329051182ab2503b5220ffa9ad50b -README.zh.md: bc853bd00da978a42d56dcbefcd98109efc78491 +/: + en: 492c18403fe67bc0 + zh: 547cb261324c7691 +/deepseek-ai-dsh-experimental-api-speech-to-text: + en: 9273fdafb9804346 + zh: 4fec3a81b4d29fc6 +/deepseek-ai-dsh-experimental-api-speech-to-text/summary: + en: 81978b4b6c035754 + zh: f1a08200eb31c020 +/deepseek-ai-dsh-experimental-api-speech-to-text/table-of-contents: + en: d152484eb41ac6b4 + zh: 364c80ee00a374ff +/deepseek-ai-dsh-experimental-api-speech-to-text/use-this-package: + en: 23efd2789fe70cd9 + zh: 3edd559ee5975742 +/deepseek-ai-dsh-experimental-api-speech-to-text/understand-the-implementation: + en: 83c580c412f4026a + zh: cd6742fef27de9e5 +/deepseek-ai-dsh-experimental-api-speech-to-text/further-exploration: + en: 5c64426add9d79d6 + zh: 4e06aa2ead8d2ccd +/deepseek-ai-dsh-experimental-api-speech-to-text/model-experience: + en: 3c5a85f8b7129ce8 + zh: d5f491ca88d9a810 +/deepseek-ai-dsh-experimental-api-speech-to-text/model-experience/kv-cache-effect: + en: b5ec79db2e1d0dbc + zh: e5aff567ae5ee6fc +/deepseek-ai-dsh-experimental-api-speech-to-text/known-limitations-and-deferred-work: + en: 067a5c6a1772f2eb + zh: 6973c5a4a950c5cf +/deepseek-ai-dsh-experimental-api-speech-to-text/known-limitations-and-deferred-work/dev-note: + en: 0225ba087c5266f3 + zh: 4e706f1b2b984e63 diff --git a/packages/experimental/auto-review/README.i18n.yaml b/packages/experimental/auto-review/README.i18n.yaml index c35679716a..e9bd44ec6f 100644 --- a/packages/experimental/auto-review/README.i18n.yaml +++ b/packages/experimental/auto-review/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/experimental/auto-review/README.md -README.md: 73ee9e5aaff00f1160f647218b5714b63c23684b -README.zh.md: 40fe6f48cae4854c5cfd5ea8f3ae4276dd540e82 +/: + en: 4f245200f5345e3c + zh: 221e9996e8ce2963 +/deepseek-ai-dsh-experimental-auto-review: + en: 566562e610f1b52b + zh: 88796a19ab0b98b8 +/deepseek-ai-dsh-experimental-auto-review/summary: + en: f5f4f743d31d695c + zh: 06df4fc82bf2904c +/deepseek-ai-dsh-experimental-auto-review/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-auto-review/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-experimental-auto-review/use-this-package/install-into-a-profile: + en: 63f8f1baa0fb2655 + zh: 6bc64160f6d02114 +/deepseek-ai-dsh-experimental-auto-review/use-this-package/what-you-get: + en: 824451344bf0b25b + zh: 44ba3539914aaca7 +/deepseek-ai-dsh-experimental-auto-review/understand-the-implementation: + en: 8e2fc08a16cd380c + zh: a313c1254105dc8a +/deepseek-ai-dsh-experimental-auto-review/further-exploration: + en: 8b81d32ea370ecd3 + zh: dc53ff4da78232ac +/deepseek-ai-dsh-experimental-auto-review/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-auto-review/model-experience/per-call-reviewer: + en: 7ec217b1012cd8fa + zh: 6188796b4990f2ef +/deepseek-ai-dsh-experimental-auto-review/model-experience/per-call-reviewer/what-the-model-sees: + en: b3e50d879db13221 + zh: 81f9c8f2793bea0d +/deepseek-ai-dsh-experimental-auto-review/model-experience/per-call-reviewer/token-effect: + en: fd7cca28fbe460fa + zh: a4111444c3c06c7c +/deepseek-ai-dsh-experimental-auto-review/model-experience/per-call-reviewer/kv-cache-effect: + en: 67b73d97f22f3c75 + zh: 4dd263e571043cf4 +/deepseek-ai-dsh-experimental-auto-review/model-experience/tool-denial: + en: f9b4d7b686f14fc5 + zh: a2fac9a8eaf5e2a3 +/deepseek-ai-dsh-experimental-auto-review/model-experience/tool-denial/what-the-model-sees: + en: 0a64e1e71b2884ee + zh: 0553d9eb4e189cf0 +/deepseek-ai-dsh-experimental-auto-review/model-experience/tool-denial/token-effect: + en: 7cd4a7e8c4fd7c67 + zh: 00fed0c8fdb8ba13 +/deepseek-ai-dsh-experimental-auto-review/model-experience/tool-denial/kv-cache-effect: + en: 8da1089dee147f94 + zh: 87361347bfd10c6c +/deepseek-ai-dsh-experimental-auto-review/known-limitations-and-deferred-work: + en: a0aca051847720bd + zh: 8ccee82e19739bf9 +/deepseek-ai-dsh-experimental-auto-review/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/experimental/browser-use-chrome-devtools-mcp/README.i18n.yaml b/packages/experimental/browser-use-chrome-devtools-mcp/README.i18n.yaml index a3b20bda92..5c5d20d19e 100644 --- a/packages/experimental/browser-use-chrome-devtools-mcp/README.i18n.yaml +++ b/packages/experimental/browser-use-chrome-devtools-mcp/README.i18n.yaml @@ -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 packages/experimental/browser-use-chrome-devtools-mcp/README.md -README.md: b4ef51079d79429b570ec222f283b3c20112546b -README.zh.md: 5ce248b9759e4fb942629fc10217bb055f1a0e65 +/: + en: 49dd7963da817a62 + zh: a1a62d762aacc55d +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp: + en: 869b71c566f146a1 + zh: a07644fd5ff83258 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/summary: + en: 2860fff1092fd887 + zh: da67195905183d63 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/table-of-contents: + en: d152484eb41ac6b4 + zh: ea2227f28624a0e6 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/use-this-package: + en: 6257bdaa22e67fb5 + zh: a083c080c6fadac1 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/understand-the-implementation: + en: 32b0f9382ebff464 + zh: 1865ee4afa815c40 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/further-exploration: + en: f97bf132ae1ff7ac + zh: 74c01d1cbca5281a +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/model-experience/browser-tools-and-screenshots: + en: 1adc972910db543b + zh: 7a06e0d265f19499 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/model-experience/browser-tools-and-screenshots/what-the-model-sees: + en: 54df6ff19fe6f99b + zh: 8749f57c37836a69 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/model-experience/browser-tools-and-screenshots/token-effect: + en: bc6d5d5db77d5fc3 + zh: bbbd79e4ae29675f +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/model-experience/browser-tools-and-screenshots/kv-cache-effect: + en: 86e83cc10f829b2b + zh: c2e61c09531a5de2 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/known-limitations-and-deferred-work: + en: dcbef985851db35b + zh: af0fa9f178377044 +/deepseek-ai-dsh-experimental-browser-use-chrome-devtools-mcp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/experimental/browser-use-playwright-mcp/README.i18n.yaml b/packages/experimental/browser-use-playwright-mcp/README.i18n.yaml index cc6bb53537..d35a5f9c21 100644 --- a/packages/experimental/browser-use-playwright-mcp/README.i18n.yaml +++ b/packages/experimental/browser-use-playwright-mcp/README.i18n.yaml @@ -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 packages/experimental/browser-use-playwright-mcp/README.md -README.md: 6397c1f641e8c86ad9fd56886b04add1b89dfa3a -README.zh.md: 41162e440a5a42e7a214d4fc078b8f80a786926d +/: + en: 65c3ef2e9fa0bb0e + zh: 530a4b4ca63094e8 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp: + en: 9e5a4fa85c51434d + zh: 21a6143dff340791 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/summary: + en: e7e2be79affd38a3 + zh: 77934d7769ade556 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/table-of-contents: + en: d152484eb41ac6b4 + zh: ea2227f28624a0e6 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/use-this-package: + en: 42a60bded230b697 + zh: 2bc2efd2ba8c5e5a +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/understand-the-implementation: + en: 32b0f9382ebff464 + zh: 1865ee4afa815c40 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/further-exploration: + en: c3adc5fd9103efab + zh: 4374dffa1415d2ff +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/model-experience/browser-tools-and-screenshots: + en: 1adc972910db543b + zh: 7a06e0d265f19499 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/model-experience/browser-tools-and-screenshots/what-the-model-sees: + en: 39b4784b86018ba7 + zh: 0c8b06751b97520e +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/model-experience/browser-tools-and-screenshots/token-effect: + en: bc6d5d5db77d5fc3 + zh: bbbd79e4ae29675f +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/model-experience/browser-tools-and-screenshots/kv-cache-effect: + en: 86e83cc10f829b2b + zh: c2e61c09531a5de2 +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/known-limitations-and-deferred-work: + en: fa1db6bf80396681 + zh: 132f6237d0e9383b +/deepseek-ai-dsh-experimental-browser-use-playwright-mcp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/experimental/browser-use-runtime/README.i18n.yaml b/packages/experimental/browser-use-runtime/README.i18n.yaml index f8b6e7efb5..8ed0c64ae0 100644 --- a/packages/experimental/browser-use-runtime/README.i18n.yaml +++ b/packages/experimental/browser-use-runtime/README.i18n.yaml @@ -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 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 packages/experimental/browser-use-runtime/README.md -README.md: f29b5e3e2a804ccb24e7bc2bd795cdf8b095cead -README.zh.md: 65f5a912fc904a8eb38c7e3d5cd712467d7c166b +/: + en: 32bd01db6a5146ed + zh: 31e56827b98bc1b3 +/deepseek-ai-dsh-experimental-browser-use-runtime: + en: f28348fa24e951c3 + zh: a5e9ec23ee783e69 +/deepseek-ai-dsh-experimental-browser-use-runtime/summary: + en: ac29eb4a94d3cbff + zh: 66f2e800cabb19aa +/deepseek-ai-dsh-experimental-browser-use-runtime/table-of-contents: + en: d152484eb41ac6b4 + zh: f14f34fce35a8d90 +/deepseek-ai-dsh-experimental-browser-use-runtime/use-this-package: + en: a26a2f00e2c93e99 + zh: 9e13a68213a24f10 +/deepseek-ai-dsh-experimental-browser-use-runtime/understand-the-implementation: + en: 2b0a54595044ea15 + zh: 9fc96f082e948b77 +/deepseek-ai-dsh-experimental-browser-use-runtime/further-exploration: + en: 2a8d2c9b217b9e95 + zh: 084c9ad664e55498 +/deepseek-ai-dsh-experimental-browser-use-runtime/model-experience: + en: 705441e08df596c9 + zh: d70a7ba9611daca5 +/deepseek-ai-dsh-experimental-browser-use-runtime/model-experience/kv-cache-effect: + en: 68b91a73746b663a + zh: 18f6d14457ed81d9 +/deepseek-ai-dsh-experimental-browser-use-runtime/known-limitations-and-deferred-work: + en: f1362dd4849fd9de + zh: 6cb5d973f8472e88 +/deepseek-ai-dsh-experimental-browser-use-runtime/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/experimental/browser-use-stagehand-native/README.i18n.yaml b/packages/experimental/browser-use-stagehand-native/README.i18n.yaml index 1053c01558..6befe7b2bf 100644 --- a/packages/experimental/browser-use-stagehand-native/README.i18n.yaml +++ b/packages/experimental/browser-use-stagehand-native/README.i18n.yaml @@ -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 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 packages/experimental/browser-use-stagehand-native/README.md -README.md: 671a900d5dab4f3575129e0b8410742be889079c -README.zh.md: 69f3c115c68751f6452e0e0f99e2dcaa33500786 +/: + en: 3f9127c3981e9453 + zh: b4fcc1468319b9b2 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native: + en: 4b88ed0b7d903e32 + zh: 6375e389216d981c +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/summary: + en: 05c2fd0d2d2856a0 + zh: fd90ef7fce885498 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/table-of-contents: + en: d152484eb41ac6b4 + zh: a949126695843224 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/use-this-package: + en: de47f71ab56fd0ed + zh: fdc58f273a7dba3d +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/use-this-package/minimal-configuration: + en: 1554d55fd5be9735 + zh: d39e7dd0b8ff1b7d +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/use-this-package/verification: + en: fea3ad16a77fc478 + zh: cf551a8a2d183f93 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/understand-the-implementation: + en: 63e42e22af64f7df + zh: d8218ad3e12a8ebe +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/further-exploration: + en: eff8f4541eb26ca7 + zh: 76a61fe9bd48df2a +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/browser-guidance: + en: db27706a7478c425 + zh: d36d746cf60e56c4 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/browser-guidance/what-the-model-sees: + en: c76eeb849a7dcc9d + zh: 466f6573ee758f66 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/browser-guidance/what-the-model-sees/browser-guidance-text: + en: d618f1a8fcd2f9b4 + zh: a2c8620646573b9f +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/browser-guidance/token-effect: + en: 54fb52d906a0ed1d + zh: 0c92cb1daf790ce9 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/browser-guidance/kv-cache-effect: + en: 8b85590b83e40fc0 + zh: 9061599a76700e66 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/native-browser-tools-and-results: + en: 0295a32030d24cd0 + zh: 65ef3d8920d811c2 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/native-browser-tools-and-results/what-the-model-sees: + en: 615b72f1971846c8 + zh: d0ec71a9905137df +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/native-browser-tools-and-results/token-effect: + en: 8c75c58031e659c8 + zh: b40294201e358ce3 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/model-experience/native-browser-tools-and-results/kv-cache-effect: + en: 2bd36c8da753a1e5 + zh: 172e2151f7c7b0cd +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/known-limitations-and-deferred-work: + en: 27754d9785e555ae + zh: 89fef432cebabef6 +/deepseek-ai-dsh-experimental-browser-use-stagehand-native/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/experimental/client-ui-agent-team/README.i18n.yaml b/packages/experimental/client-ui-agent-team/README.i18n.yaml index 3524cb25a3..998aff921b 100644 --- a/packages/experimental/client-ui-agent-team/README.i18n.yaml +++ b/packages/experimental/client-ui-agent-team/README.i18n.yaml @@ -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 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 packages/experimental/client-ui-agent-team/README.md -README.md: 17990a84ebe398b632e2e6224674efe09f401aa9 -README.zh.md: 90bed11f2886429f39d2e6b73d251df63256dab4 +/: + en: 6deb254c416ff51b + zh: e0913c7be837da78 +/deepseek-ai-dsh-experimental-client-ui-agent-team: + en: 447e3c2bbf1ea3c6 + zh: 25bba08497976d12 +/deepseek-ai-dsh-experimental-client-ui-agent-team/summary: + en: a30d7bbb951ed3ec + zh: 8b12eca1138820f0 +/deepseek-ai-dsh-experimental-client-ui-agent-team/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-client-ui-agent-team/use-this-package: + en: ba021754d3ae6d9e + zh: 18017b40f13e6ffd +/deepseek-ai-dsh-experimental-client-ui-agent-team/use-this-package/inspect-and-navigate-the-roster: + en: 62778e911a4ee9e9 + zh: dff1dbbc3d5e4af6 +/deepseek-ai-dsh-experimental-client-ui-agent-team/use-this-package/inspect-the-task-board: + en: cf09faa436dad9fd + zh: e7423f4111eb88f9 +/deepseek-ai-dsh-experimental-client-ui-agent-team/understand-the-implementation: + en: 3ea723e7ea467be7 + zh: dba02b20bef0fd7f +/deepseek-ai-dsh-experimental-client-ui-agent-team/further-exploration: + en: 71ac041029c64d5a + zh: fef2e4c5dccb8d1b +/deepseek-ai-dsh-experimental-client-ui-agent-team/model-experience: + en: 47ebeba07d72759d + zh: 8fe8133f6dd845a9 +/deepseek-ai-dsh-experimental-client-ui-agent-team/model-experience/kv-cache-effect: + en: b51b320f5e4dacfc + zh: 6695947c3f9fed28 +/deepseek-ai-dsh-experimental-client-ui-agent-team/known-limitations-and-deferred-work: + en: 254e4aa2f81037d2 + zh: 3cdf19dffafb51df +/deepseek-ai-dsh-experimental-client-ui-agent-team/known-limitations-and-deferred-work/dev-note: + en: 317e07f2fd605e55 + zh: 66836ceef6216892 diff --git a/packages/experimental/client-ui-voice-input/README.i18n.yaml b/packages/experimental/client-ui-voice-input/README.i18n.yaml index 50b00dd654..3db672ddea 100644 --- a/packages/experimental/client-ui-voice-input/README.i18n.yaml +++ b/packages/experimental/client-ui-voice-input/README.i18n.yaml @@ -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 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 packages/experimental/client-ui-voice-input/README.md -README.md: 764962ff496c9fdd91073c2aa391ebceeec23608 -README.zh.md: 105cb641684eb2920c04294e74f1b5389f564c0c +/: + en: 03616f946faebe55 + zh: 293309d5ea63305e +/deepseek-ai-dsh-experimental-client-ui-voice-input: + en: e9ad8d109a27c143 + zh: cb09880ab2ce8942 +/deepseek-ai-dsh-experimental-client-ui-voice-input/summary: + en: 23eb8e0b296e9e2a + zh: 3ebc4e3850c0c79a +/deepseek-ai-dsh-experimental-client-ui-voice-input/table-of-contents: + en: d152484eb41ac6b4 + zh: 364c80ee00a374ff +/deepseek-ai-dsh-experimental-client-ui-voice-input/use-this-package: + en: 185465618f71fcab + zh: 47c0b69b700aa3ef +/deepseek-ai-dsh-experimental-client-ui-voice-input/understand-the-implementation: + en: 18807008bccfdb6e + zh: bb5a82c92d4aa056 +/deepseek-ai-dsh-experimental-client-ui-voice-input/further-exploration: + en: 5c64426add9d79d6 + zh: 4e06aa2ead8d2ccd +/deepseek-ai-dsh-experimental-client-ui-voice-input/model-experience: + en: 3c5a85f8b7129ce8 + zh: d5f491ca88d9a810 +/deepseek-ai-dsh-experimental-client-ui-voice-input/model-experience/kv-cache-effect: + en: b5ec79db2e1d0dbc + zh: e5aff567ae5ee6fc +/deepseek-ai-dsh-experimental-client-ui-voice-input/known-limitations-and-deferred-work: + en: e6d37618956f3ff8 + zh: ebb74dd513ece5e3 +/deepseek-ai-dsh-experimental-client-ui-voice-input/known-limitations-and-deferred-work/dev-note: + en: 0225ba087c5266f3 + zh: 4e706f1b2b984e63 diff --git a/packages/experimental/computer-use-cua-driver-mcp/README.i18n.yaml b/packages/experimental/computer-use-cua-driver-mcp/README.i18n.yaml index c9fd58ad1c..892b8a9978 100644 --- a/packages/experimental/computer-use-cua-driver-mcp/README.i18n.yaml +++ b/packages/experimental/computer-use-cua-driver-mcp/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/experimental/computer-use-cua-driver-mcp/README.md -README.md: 33d5e0fbf8db31d86a930c7c3591da1bf71a4cb0 -README.zh.md: 2c2dbee631975a22b5c47e3e657fc55ae0c46bb1 +/: + en: 9402e76135b1a640 + zh: 13645ec9b9fe38de +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp: + en: fe768d365d632bea + zh: ae1292e093f21696 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/summary: + en: 44777c18cdaf3b1a + zh: c9074f5857539122 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/use-this-package: + en: 07f6fe5e50a3ed88 + zh: 0f3e118e03e0b6fe +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/use-this-package/minimal-configuration: + en: b73f3616a2a0aa12 + zh: e7836f13cb53fc25 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/use-this-package/activation-and-ownership: + en: 425155bfbc7c6c3c + zh: 6b567b3595388b2e +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/understand-the-implementation: + en: 95f7a180b2b3eb6e + zh: b5916cec6c4d4ad5 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/understand-the-implementation/verify-an-installed-driver: + en: a25c4307524e25cf + zh: 38ff4f5fd45b0ffb +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/further-exploration: + en: 5a79315997f340fe + zh: 789fe8364326ea09 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/model-experience/cua-driver-tools-and-screenshots: + en: 9d221bfceb3efcf9 + zh: 3ee738cd4d24157e +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/model-experience/cua-driver-tools-and-screenshots/what-the-model-sees: + en: 721e7cd3fba61ad4 + zh: da2b6d63450101dc +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/model-experience/cua-driver-tools-and-screenshots/token-effect: + en: fd697825fdf78c9b + zh: 973cf9a0caaaa558 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/model-experience/cua-driver-tools-and-screenshots/kv-cache-effect: + en: 7064d248c94a5c4c + zh: 18abcf5142c078c7 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/known-limitations-and-deferred-work: + en: 05cd04a9e26e5f7a + zh: 93b56f484d315355 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-mcp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/experimental/computer-use-cua-driver-native/README.i18n.yaml b/packages/experimental/computer-use-cua-driver-native/README.i18n.yaml index 8196e80e67..71d862bdb7 100644 --- a/packages/experimental/computer-use-cua-driver-native/README.i18n.yaml +++ b/packages/experimental/computer-use-cua-driver-native/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/experimental/computer-use-cua-driver-native/README.md -README.md: 28e47f17020297ef7e1c2fa6656c8fda0b808a8f -README.zh.md: ce25309e77fcd05836b4fccddd2482ecf2f1ad17 +/: + en: 7210ebd8c364c9af + zh: 3ea0e8c44830de0e +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native: + en: dd43792e8469264e + zh: 25dfd4c4083df799 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/summary: + en: 00c3b5a33c17f35e + zh: 03b7d984edcab054 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/use-this-package: + en: b1d93e5d9cdefd2c + zh: 26bf7c66a154e831 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/use-this-package/minimal-configuration: + en: 5dc426f9c8d17959 + zh: 402fc48b02be911a +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/use-this-package/host-requirements: + en: 5b907271715ce730 + zh: 21b71f9ce6e6dafd +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/use-this-package/verify-the-installed-sdk: + en: c3022cbadb94589b + zh: b426ea3dbeafd352 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/understand-the-implementation: + en: 956c3b0fb827a163 + zh: 88bdf97cc5e36230 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/further-exploration: + en: d24023319ead888c + zh: ab28be480aced0a9 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/system-prompt/what-the-model-sees: + en: 5e8460349e8f1d2d + zh: d433e8906fd55619 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/system-prompt/what-the-model-sees/native-cua-driver-guidance: + en: 5e645aa8accd9ddc + zh: 49eaf528febf8c79 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/system-prompt/token-effect: + en: 150326bebe2020af + zh: f595c0f9339293aa +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/system-prompt/kv-cache-effect: + en: 30a65e32c47cacce + zh: c9a764af362c52a8 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/discovered-cua-driver-tools-and-results: + en: 78541947f8ec0263 + zh: 8d7c86c98467f137 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/discovered-cua-driver-tools-and-results/what-the-model-sees: + en: 1f832b4ff07d1990 + zh: 79b580515f1cd9a7 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/discovered-cua-driver-tools-and-results/token-effect: + en: 45ae4538a26eef00 + zh: 1df500d07e8a5cb9 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/model-experience/discovered-cua-driver-tools-and-results/kv-cache-effect: + en: dd4780c267daf1a6 + zh: 6502c0437085b37f +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/known-limitations-and-deferred-work: + en: 2a2a4b83ca83b5e0 + zh: 32ca00d0ac9a30a5 +/deepseek-ai-dsh-experimental-computer-use-cua-driver-native/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/experimental/inspector/README.i18n.yaml b/packages/experimental/inspector/README.i18n.yaml index b8767ddff4..8d56bf815a 100644 --- a/packages/experimental/inspector/README.i18n.yaml +++ b/packages/experimental/inspector/README.i18n.yaml @@ -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 packages/experimental/inspector/README.md -README.md: 2b2986d49bbc970c70cc7bc85de38ba6fb6d9593 -README.zh.md: a24b17d3a8a88736fe5efe83b4185de9379b5903 +/: + en: b5b7ccdfa1cc2907 + zh: d575593a7efa37fd +/deepseek-ai-dsh-experimental-inspector: + en: 1060bee3ef37134d + zh: 7a7b0096714f4279 +/deepseek-ai-dsh-experimental-inspector/summary: + en: 71238c294240dad0 + zh: 382fc8f003ebf0ab +/deepseek-ai-dsh-experimental-inspector/table-of-contents: + en: 2650c2b268bf6dff + zh: 43a08863d2c75ad1 +/deepseek-ai-dsh-experimental-inspector/runtime-layout: + en: ddec7e27dfb22d30 + zh: 37970b25c76b03b0 +/deepseek-ai-dsh-experimental-inspector/configuration: + en: 95f1c9c4ea6ba8b8 + zh: 16b56e2dd8c7408a +/deepseek-ai-dsh-experimental-inspector/observation-api: + en: d32f994e6c9d0c4a + zh: ac2f35f5799aeae0 +/deepseek-ai-dsh-experimental-inspector/cordis-tree-inspection: + en: 9abe1a8cd52386fb + zh: a5e96ec22a503153 +/deepseek-ai-dsh-experimental-inspector/host-fetch-capture: + en: 187859f65acc45d7 + zh: 606e93905c8275e6 +/deepseek-ai-dsh-experimental-inspector/security: + en: 2372c96aba1ce7e6 + zh: 823ceaa99cfb1f6a +/deepseek-ai-dsh-experimental-inspector/model-experience: + en: 6ac8fb2f45b3a97c + zh: 9162ffb1a133e11b +/deepseek-ai-dsh-experimental-inspector/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 64715dc7e6d02f71 +/deepseek-ai-dsh-experimental-inspector/known-limitations-and-deferred-work: + en: a35e1559aff5e7aa + zh: fbe20422dbe4a0f6 +/deepseek-ai-dsh-experimental-inspector/known-limitations-and-deferred-work/dev-note: + en: 59a59a4788c80163 + zh: db23a6b9dc0880ba diff --git a/packages/experimental/ptc-runtime-python/README.i18n.yaml b/packages/experimental/ptc-runtime-python/README.i18n.yaml index a8627e8086..9edf84d505 100644 --- a/packages/experimental/ptc-runtime-python/README.i18n.yaml +++ b/packages/experimental/ptc-runtime-python/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/experimental/ptc-runtime-python/README.md -README.md: 287617991c5da9c13775e40c325877c231dbc312 -README.zh.md: f0c64a535cbac53241a807cc9901074f9ddd843d +/: + en: 21d67ee6d4caef1e + zh: 815c36a37b8a2c3e +/deepseek-ai-dsh-experimental-ptc-runtime-python: + en: 98894607ad9de9bf + zh: 068899d3766c2628 +/deepseek-ai-dsh-experimental-ptc-runtime-python/summary: + en: a7dc02100b3d90ba + zh: 5f80610b0bf84d84 +/deepseek-ai-dsh-experimental-ptc-runtime-python/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-ptc-runtime-python/use-this-package: + en: d8db36ca3f32afeb + zh: fec311dea315aac4 +/deepseek-ai-dsh-experimental-ptc-runtime-python/use-this-package/what-you-get: + en: ca7b9cc958069c7f + zh: 8a4ac72d02ad76eb +/deepseek-ai-dsh-experimental-ptc-runtime-python/use-this-package/the-wire: + en: e690628dc6197c3b + zh: 2b9cdad8b41dcde5 +/deepseek-ai-dsh-experimental-ptc-runtime-python/use-this-package/what-can-go-wrong: + en: d43927c607a9855f + zh: e1dd1643bebfd647 +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation: + en: 7824816505e2b844 + zh: 3603d1c332c2ed5d +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation/design-concept: + en: 9339b0800d70be48 + zh: 71a9a3d3eea86050 +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation/wire-contract: + en: 586d320cd7ef9974 + zh: ccf4e4f9fb230eb8 +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation/lossless-json-crossing: + en: 6252e86fa10e9dd0 + zh: 9b95b033ea0b5463 +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation/mirror-alignment: + en: 167a08a71870f227 + zh: 43f671b45104849f +/deepseek-ai-dsh-experimental-ptc-runtime-python/understand-the-implementation/source-map: + en: 254759d380b5a58a + zh: 471f21e1c06c324d +/deepseek-ai-dsh-experimental-ptc-runtime-python/further-exploration: + en: ab4a08f301de599d + zh: e698b35ccf3ce665 +/deepseek-ai-dsh-experimental-ptc-runtime-python/model-experience: + en: 42064c81cda8f059 + zh: fa68d1acac16e263 +/deepseek-ai-dsh-experimental-ptc-runtime-python/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d805c6bd7270505e +/deepseek-ai-dsh-experimental-ptc-runtime-python/known-limitations-and-deferred-work: + en: 9177182ef230c99e + zh: 2a15994203ad325c +/deepseek-ai-dsh-experimental-ptc-runtime-python/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml b/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml index 017646ce74..fb905617ff 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml +++ b/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml @@ -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 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 packages/experimental/speech-to-text-sensevoice/README.md -README.md: 3d553d2a235346e8d51bf9c8c137bc824b0f3d48 -README.zh.md: e4ab23cc48df0d93431eb22f6c17afcebfd78916 +/: + en: 2c603fb20d2332f0 + zh: 2efd7f2811fe18bb +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice: + en: 636635d9dabcf16d + zh: e331bf5314446b3e +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/summary: + en: 3d96e31f42eec217 + zh: 9738184df0d5c781 +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/table-of-contents: + en: d152484eb41ac6b4 + zh: 364c80ee00a374ff +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/use-this-package: + en: 5205fc2456b2c2c2 + zh: ed9dbcb71d48eb98 +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/understand-the-implementation: + en: bb96ebc59b8ed6a5 + zh: e59452eb0ddd9fe6 +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/further-exploration: + en: 5c64426add9d79d6 + zh: 4e06aa2ead8d2ccd +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/model-experience: + en: 3c5a85f8b7129ce8 + zh: d5f491ca88d9a810 +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/model-experience/kv-cache-effect: + en: b5ec79db2e1d0dbc + zh: e5aff567ae5ee6fc +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/known-limitations-and-deferred-work: + en: c9a41fba4d25fe72 + zh: 9453cca1d6806549 +/deepseek-ai-dsh-experimental-speech-to-text-sensevoice/known-limitations-and-deferred-work/dev-note: + en: 0225ba087c5266f3 + zh: 4e706f1b2b984e63 diff --git a/packages/experimental/speech-to-text/README.i18n.yaml b/packages/experimental/speech-to-text/README.i18n.yaml index a6fbe06934..e81c2e3b42 100644 --- a/packages/experimental/speech-to-text/README.i18n.yaml +++ b/packages/experimental/speech-to-text/README.i18n.yaml @@ -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 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 packages/experimental/speech-to-text/README.md -README.md: e96d3c09d8bea6a2ae7f19fd3ef195efbc8d6214 -README.zh.md: 23a6a4850a540ecaafbd1a4ca6380caed32f8b91 +/: + en: 22f9a7932dfa9329 + zh: c8cb8d78a0dba75d +/deepseek-ai-dsh-experimental-speech-to-text: + en: 1a43b004088e8d7a + zh: 0f54697b2ebbaced +/deepseek-ai-dsh-experimental-speech-to-text/summary: + en: a70b8d594ad6240b + zh: 19f25b113876504e +/deepseek-ai-dsh-experimental-speech-to-text/table-of-contents: + en: d152484eb41ac6b4 + zh: 364c80ee00a374ff +/deepseek-ai-dsh-experimental-speech-to-text/use-this-package: + en: faf7c49d8870eaad + zh: 9c1c42eba9660f75 +/deepseek-ai-dsh-experimental-speech-to-text/understand-the-implementation: + en: ed5da4ea3ef6a0a8 + zh: 7f12a1f42cd48c36 +/deepseek-ai-dsh-experimental-speech-to-text/further-exploration: + en: 5c64426add9d79d6 + zh: 4e06aa2ead8d2ccd +/deepseek-ai-dsh-experimental-speech-to-text/model-experience: + en: 3c5a85f8b7129ce8 + zh: d5f491ca88d9a810 +/deepseek-ai-dsh-experimental-speech-to-text/model-experience/kv-cache-effect: + en: b5ec79db2e1d0dbc + zh: e5aff567ae5ee6fc +/deepseek-ai-dsh-experimental-speech-to-text/known-limitations-and-deferred-work: + en: 947c3e506a569f5a + zh: 432a35dfe77f498f +/deepseek-ai-dsh-experimental-speech-to-text/known-limitations-and-deferred-work/dev-note: + en: 0225ba087c5266f3 + zh: 4e706f1b2b984e63 diff --git a/packages/experimental/tool-agent-team/README.i18n.yaml b/packages/experimental/tool-agent-team/README.i18n.yaml index 4e2ee828f7..1eaa7bd4c0 100644 --- a/packages/experimental/tool-agent-team/README.i18n.yaml +++ b/packages/experimental/tool-agent-team/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/experimental/tool-agent-team/README.md -README.md: 0918686d28f7212558aafa988a4b968c18aa8664 -README.zh.md: 8243f8471a67fe55d5a5d368d98e20c5519f42f3 +/: + en: 770d44b09466af9a + zh: b8b84ed9464ce41b +/deepseek-ai-dsh-experimental-tool-agent-team: + en: 0b01a243291821bc + zh: 0dadd38d709ae9bd +/deepseek-ai-dsh-experimental-tool-agent-team/summary: + en: 0cce9e5ec6d1946a + zh: 6bc76243f494815c +/deepseek-ai-dsh-experimental-tool-agent-team/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-experimental-tool-agent-team/use-this-package: + en: 1e928b05f250c945 + zh: 0281800e08a58fce +/deepseek-ai-dsh-experimental-tool-agent-team/use-this-package/when-to-choose-it: + en: 5261677934ea6e71 + zh: a8bafd94d2b293ec +/deepseek-ai-dsh-experimental-tool-agent-team/use-this-package/smallest-working-example: + en: 9af650a79711b3b3 + zh: 2930360011b544e0 +/deepseek-ai-dsh-experimental-tool-agent-team/use-this-package/what-the-model-can-do: + en: be42811bbcc3b438 + zh: 014bd055ca694315 +/deepseek-ai-dsh-experimental-tool-agent-team/use-this-package/what-success-and-failure-look-like: + en: 259e9d39e1d1579a + zh: c61feed86e1ba2d2 +/deepseek-ai-dsh-experimental-tool-agent-team/understand-the-implementation: + en: 3952eb1d9de1f988 + zh: 789d51b88f41b710 +/deepseek-ai-dsh-experimental-tool-agent-team/understand-the-implementation/design-philosophy: + en: 445806c13f887a09 + zh: 8b2b67044abfd65a +/deepseek-ai-dsh-experimental-tool-agent-team/understand-the-implementation/source-map: + en: 0e9eb6c8bebebbb6 + zh: 6acd0bc8af90ce0a +/deepseek-ai-dsh-experimental-tool-agent-team/understand-the-implementation/policy-and-tools: + en: 3e730667f904c7bd + zh: 7f48e6c07c615d77 +/deepseek-ai-dsh-experimental-tool-agent-team/understand-the-implementation/scoped-registration-and-teardown: + en: c2b29f27a74c02c0 + zh: 026f2ef93dd604d8 +/deepseek-ai-dsh-experimental-tool-agent-team/further-exploration: + en: 4cde96d9b184d1b0 + zh: fedae651acb7301f +/deepseek-ai-dsh-experimental-tool-agent-team/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools: + en: 8e1e365ff3b0dfb2 + zh: c6c91fbf1e1df934 +/deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools/what-the-model-sees: + en: 17ed13a2c408baa9 + zh: 4bc24f3de8155eb3 +/deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools/token-effect: + en: fe314af98a2130b8 + zh: ea89cb40dd11d57c +/deepseek-ai-dsh-experimental-tool-agent-team/model-experience/team-policy-and-tools/kv-cache-effect: + en: cba54e491b29b664 + zh: 288015d4794998f9 +/deepseek-ai-dsh-experimental-tool-agent-team/known-limitations-and-deferred-work: + en: c459b2e8236e6a6c + zh: 7cd2af569e9b751a +/deepseek-ai-dsh-experimental-tool-agent-team/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/experimental/voice-input-bundle/README.i18n.yaml b/packages/experimental/voice-input-bundle/README.i18n.yaml index ddc89c0e44..fb360727a0 100644 --- a/packages/experimental/voice-input-bundle/README.i18n.yaml +++ b/packages/experimental/voice-input-bundle/README.i18n.yaml @@ -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 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 packages/experimental/voice-input-bundle/README.md -README.md: 48320f7430bd9f1343492e49d3199c180970acad -README.zh.md: f0a5b49741966b2e139ec5f803c15ddd79d12043 +/: + en: a610a36da32c92ad + zh: 19434bfe1701828d +/deepseek-ai-dsh-experimental-voice-input-bundle: + en: 338585d3575a8f90 + zh: 22a493cbeefec8f0 +/deepseek-ai-dsh-experimental-voice-input-bundle/summary: + en: e84cf8d1493e2a08 + zh: f0549f75a5234388 +/deepseek-ai-dsh-experimental-voice-input-bundle/table-of-contents: + en: d152484eb41ac6b4 + zh: 364c80ee00a374ff +/deepseek-ai-dsh-experimental-voice-input-bundle/use-this-package: + en: 9151bf11e64b4f1c + zh: 7c9638c16ac6a0db +/deepseek-ai-dsh-experimental-voice-input-bundle/understand-the-implementation: + en: fd8c48acf2a8c0e9 + zh: 6aabab11912f0e3d +/deepseek-ai-dsh-experimental-voice-input-bundle/further-exploration: + en: 5c64426add9d79d6 + zh: 4e06aa2ead8d2ccd +/deepseek-ai-dsh-experimental-voice-input-bundle/model-experience: + en: 3c5a85f8b7129ce8 + zh: d5f491ca88d9a810 +/deepseek-ai-dsh-experimental-voice-input-bundle/model-experience/kv-cache-effect: + en: b5ec79db2e1d0dbc + zh: e5aff567ae5ee6fc +/deepseek-ai-dsh-experimental-voice-input-bundle/known-limitations-and-deferred-work: + en: 72323eaeec1b0dae + zh: becc003f1da53c51 +/deepseek-ai-dsh-experimental-voice-input-bundle/known-limitations-and-deferred-work/dev-note: + en: 0225ba087c5266f3 + zh: 4e706f1b2b984e63 diff --git a/packages/experimental/webworker-packer/README.i18n.yaml b/packages/experimental/webworker-packer/README.i18n.yaml index ef7b29f03e..1e8ca36746 100644 --- a/packages/experimental/webworker-packer/README.i18n.yaml +++ b/packages/experimental/webworker-packer/README.i18n.yaml @@ -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 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 packages/experimental/webworker-packer/README.md -README.md: dfb3eccf8343f29c1028dae3a2db22a543675de8 -README.zh.md: 3c528628a8d810db00d9bd8b2c0b64a179faa729 +/: + en: 5bf871fc6ff3da7c + zh: eae970e01432a92a +/deepseek-ai-dsh-experimental-webworker-packer: + en: 7ecd0d6282f6ccf1 + zh: 782c000a57a5e3d8 +/deepseek-ai-dsh-experimental-webworker-packer/summary: + en: 2cafd7568fd7ba2d + zh: 8879b809950a6034 +/deepseek-ai-dsh-experimental-webworker-packer/table-of-contents: + en: 4e53164159b5ce41 + zh: 89582dc0294d0776 +/deepseek-ai-dsh-experimental-webworker-packer/use-this-package: + en: c0795340638d1eb3 + zh: 5e6ece80b713eb79 +/deepseek-ai-dsh-experimental-webworker-packer/model-experience: + en: e16b355530dadc1c + zh: 8488e03b253b7b33 +/deepseek-ai-dsh-experimental-webworker-packer/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 64715dc7e6d02f71 +/deepseek-ai-dsh-experimental-webworker-packer/known-limitations-and-deferred-work: + en: 6cd07b34072a2d61 + zh: 44c4017e727c19ff +/deepseek-ai-dsh-experimental-webworker-packer/known-limitations-and-deferred-work/dev-note: + en: 46176f90f22845c7 + zh: 8e6ba8ba2958fba3 diff --git a/packages/experimental/webworker-runtime/README.i18n.yaml b/packages/experimental/webworker-runtime/README.i18n.yaml index 2e7f6e39ae..7a4a166ecc 100644 --- a/packages/experimental/webworker-runtime/README.i18n.yaml +++ b/packages/experimental/webworker-runtime/README.i18n.yaml @@ -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 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 packages/experimental/webworker-runtime/README.md -README.md: 3a5d702c2163c19daa3230ffd14270b4f236f2d9 -README.zh.md: a987fed1db5f607aee4e95e2faf96575c1d0c904 +/: + en: 9a7ee334bf98bb3d + zh: 0a78ada4049c27fe +/deepseek-ai-dsh-experimental-webworker-runtime: + en: ca354d8ca21609bb + zh: 2eff66603192a3ff +/deepseek-ai-dsh-experimental-webworker-runtime/summary: + en: cfff0da51e5e9bde + zh: 38e7960b16c77c2c +/deepseek-ai-dsh-experimental-webworker-runtime/table-of-contents: + en: 4e53164159b5ce41 + zh: 89582dc0294d0776 +/deepseek-ai-dsh-experimental-webworker-runtime/use-this-package: + en: b26cf7ab7c321c58 + zh: 0adf7210dfdf68bb +/deepseek-ai-dsh-experimental-webworker-runtime/model-experience: + en: 61fce9b4c7dc96e6 + zh: dc2d931063a38327 +/deepseek-ai-dsh-experimental-webworker-runtime/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 64715dc7e6d02f71 +/deepseek-ai-dsh-experimental-webworker-runtime/known-limitations-and-deferred-work: + en: fd920819d48b7b70 + zh: 20852dfc8efadfe4 +/deepseek-ai-dsh-experimental-webworker-runtime/known-limitations-and-deferred-work/dev-note: + en: f14ab6f2449c3c53 + zh: e3f7d3a3d772c0b7 diff --git a/packages/extensions/README.i18n.yaml b/packages/extensions/README.i18n.yaml index 754293db6a..5fd8f3a0bd 100644 --- a/packages/extensions/README.i18n.yaml +++ b/packages/extensions/README.i18n.yaml @@ -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 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 packages/extensions/README.md -README.md: 56ef38506d7ea99595200da5574f6df6b3f93f3d -README.zh.md: 62d5a15ea3f9bec8396ad0b80fde44d6f0b3dc95 +/: + en: 622a9da424be9ad7 + zh: f275f918a42b45ab +/packages-extensions: + en: 3629b9b795f2e174 + zh: 30dbc9ce39af47c4 +/packages-extensions/summary: + en: c4b1aae7c562ee51 + zh: dc1d97b0b317fd3c +/packages-extensions/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-extensions/packages: + en: d5bc1d3c23a4f809 + zh: 933071a3a1a2b395 +/packages-extensions/related-documentation: + en: 7eff95bfa2d67114 + zh: bdd0319d8485dd62 +/packages-extensions/dev-note: + en: 905661ec39275901 + zh: 802bf1ef52f66e0e diff --git a/packages/extensions/cordis-client-runner/README.i18n.yaml b/packages/extensions/cordis-client-runner/README.i18n.yaml index 54c615917f..df73bddc5e 100644 --- a/packages/extensions/cordis-client-runner/README.i18n.yaml +++ b/packages/extensions/cordis-client-runner/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/extensions/cordis-client-runner/README.md -README.md: c5d9a10bde22c6e48b23cd113737a80cc03bcdd0 -README.zh.md: c6463de9cd03f1b0de8a9a8fee3037fe01392607 +/: + en: 0d1382466301a0cb + zh: 64ee27ce126adad2 +/deepseek-ai-dsh-cordis-client-runner: + en: ea84dfc91fbdbf90 + zh: 3c70bc4bb1b1a7ab +/deepseek-ai-dsh-cordis-client-runner/summary: + en: 639cd79ac2d186c1 + zh: 07d7bf8655111e55 +/deepseek-ai-dsh-cordis-client-runner/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-cordis-client-runner/use-this-package: + en: 731e4c9c364beeb5 + zh: 6aa113070967571f +/deepseek-ai-dsh-cordis-client-runner/use-this-package/what-the-page-does: + en: b303762b91f6d830 + zh: c6e60cf498da3c4e +/deepseek-ai-dsh-cordis-client-runner/use-this-package/what-the-run-surface-offers: + en: 155c8371306a5cda + zh: 8b4cd48a0fc3f545 +/deepseek-ai-dsh-cordis-client-runner/use-this-package/lifecycle-boundaries: + en: 8444eaa96ee05a5e + zh: 621bb78731bd0138 +/deepseek-ai-dsh-cordis-client-runner/understand-the-implementation: + en: 64f24636f966aa86 + zh: a4d3bb2e541b222a +/deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/design-philosophy: + en: df635b29eaef982c + zh: ddaa4bd98359bd30 +/deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/source-map: + en: cbd46fb5821cfcc7 + zh: 392e5cace2db6194 +/deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/inspecting-slot-inputs: + en: 33f14a7fff7835e6 + zh: 53838ac8d4a79600 +/deepseek-ai-dsh-cordis-client-runner/understand-the-implementation/how-a-run-is-carried-out: + en: e64ffad27ecf4bbd + zh: 7949755b8a782b08 +/deepseek-ai-dsh-cordis-client-runner/further-exploration: + en: dcfcc126e7345db1 + zh: 47b564ef00a83297 +/deepseek-ai-dsh-cordis-client-runner/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host: + en: 4573c6b269e4fecb + zh: 7f76baf2f74bf9cc +/deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/what-the-model-sees: + en: 0f941f02680ba2ed + zh: d62dd787dea11f5f +/deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/token-effect: + en: 37462821d8e35933 + zh: bb94b21eff2911e8 +/deepseek-ai-dsh-cordis-client-runner/model-experience/run-resolution-relayed-by-the-host/kv-cache-effect: + en: da210ff9eb982144 + zh: 633a73ac9bc9e5e6 +/deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled: + en: 524d638584142d72 + zh: 3ffc463419fba2e1 +/deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/what-the-model-sees: + en: f347bd0b5f9e297e + zh: 0b7bc88659e38306 +/deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/token-effect: + en: c8c1657fa4e37ca4 + zh: d03af1593a9b4d3a +/deepseek-ai-dsh-cordis-client-runner/model-experience/render-failure-after-the-run-settled/kv-cache-effect: + en: d2d35b83beb936b2 + zh: 604aa6929c7a9c76 +/deepseek-ai-dsh-cordis-client-runner/known-limitations-and-deferred-work: + en: a728aeb4aa18db7d + zh: b596309cd6707da7 +/deepseek-ai-dsh-cordis-client-runner/known-limitations-and-deferred-work/dev-note: + en: c4cff307d238c93a + zh: d1a9ff4164056741 diff --git a/packages/extensions/cordis-host-runner/README.i18n.yaml b/packages/extensions/cordis-host-runner/README.i18n.yaml index cd4b42075c..3eebc93d4f 100644 --- a/packages/extensions/cordis-host-runner/README.i18n.yaml +++ b/packages/extensions/cordis-host-runner/README.i18n.yaml @@ -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 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 packages/extensions/cordis-host-runner/README.md -README.md: 67df264fe2b4a76df6587a726e72e6300c507912 -README.zh.md: 0c8659078e3a78d3ce7284ac4d2e988902f89143 +/: + en: ac7eacf5f9b1e727 + zh: 61461cb68f91fcce +/deepseek-ai-dsh-cordis-host-runner: + en: ac416c2eb5e0a00f + zh: 924964cf4466b874 +/deepseek-ai-dsh-cordis-host-runner/summary: + en: 8ff708e868c265c4 + zh: 9b727e6b7a15fa64 +/deepseek-ai-dsh-cordis-host-runner/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-cordis-host-runner/use-this-package: + en: bdaba8036acf80c9 + zh: 2dd8f972c3023a8a +/deepseek-ai-dsh-cordis-host-runner/use-this-package/minimal-configuration: + en: 0be8b7f1580ca751 + zh: 984c4757e9d6e094 +/deepseek-ai-dsh-cordis-host-runner/use-this-package/what-a-run-does: + en: a3c86c081974a710 + zh: 180e1b7824c070d4 +/deepseek-ai-dsh-cordis-host-runner/use-this-package/what-happens-to-definitions: + en: d1a8777f171d22bb + zh: 7f6aa4c2680557b1 +/deepseek-ai-dsh-cordis-host-runner/use-this-package/trust-stance: + en: 9098942013393325 + zh: 282917313e96a2d3 +/deepseek-ai-dsh-cordis-host-runner/understand-the-implementation: + en: b0a536c0d00cbdb8 + zh: 08e5d813aa6a612a +/deepseek-ai-dsh-cordis-host-runner/understand-the-implementation/design-philosophy: + en: 2193b1c446b388fc + zh: 6173e0e3e2df6812 +/deepseek-ai-dsh-cordis-host-runner/understand-the-implementation/source-map: + en: f567eacc1072b96c + zh: 7f50499d9740f802 +/deepseek-ai-dsh-cordis-host-runner/understand-the-implementation/how-a-run-flows: + en: 40d63d9a75d233e6 + zh: 96954bf346c6d9e6 +/deepseek-ai-dsh-cordis-host-runner/further-exploration: + en: 6f2dabcc9d095569 + zh: 8df32d4b138ff7c7 +/deepseek-ai-dsh-cordis-host-runner/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-cordis-host-runner/model-experience/run-outcomes-refusals-and-diagnostics-relayed-to-the-owning-session: + en: f53130bb645f50df + zh: 603361c566527789 +/deepseek-ai-dsh-cordis-host-runner/model-experience/run-outcomes-refusals-and-diagnostics-relayed-to-the-owning-session/what-the-model-sees: + en: 743dbef78fa3a8ad + zh: 2aa4e404e908cf22 +/deepseek-ai-dsh-cordis-host-runner/model-experience/run-outcomes-refusals-and-diagnostics-relayed-to-the-owning-session/token-effect: + en: c7ef63dd8179a97e + zh: e66545088d00956a +/deepseek-ai-dsh-cordis-host-runner/model-experience/run-outcomes-refusals-and-diagnostics-relayed-to-the-owning-session/kv-cache-effect: + en: bbc4338c3035757a + zh: f51f4848786d5606 +/deepseek-ai-dsh-cordis-host-runner/known-limitations-and-deferred-work: + en: 1f10688ae249a077 + zh: ab2ff597e1769b81 +/deepseek-ai-dsh-cordis-host-runner/known-limitations-and-deferred-work/dev-note: + en: 8111315620c52980 + zh: 261bf47eecf96bad diff --git a/packages/extensions/tool-cordis/README.i18n.yaml b/packages/extensions/tool-cordis/README.i18n.yaml index f75a8b6ecf..223182f332 100644 --- a/packages/extensions/tool-cordis/README.i18n.yaml +++ b/packages/extensions/tool-cordis/README.i18n.yaml @@ -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 packages/extensions/tool-cordis/README.md -README.md: 23e2d4a3d047c1442769e07be045f7da4a24a783 -README.zh.md: da855b7b1d4b4287a1f8d3a5ea7a1fb0c9407f2f +/: + en: 784a82be07311e99 + zh: 85d917ecc6386ec9 +/deepseek-ai-dsh-tool-cordis: + en: ea2c0ac7e7932a08 + zh: 5562e6f26d700b64 +/deepseek-ai-dsh-tool-cordis/summary: + en: 245a3cd287214bed + zh: 8687666c28a676cf +/deepseek-ai-dsh-tool-cordis/table-of-contents: + en: d152484eb41ac6b4 + zh: 3a2f21ff0dc3420d +/deepseek-ai-dsh-tool-cordis/use-this-package: + en: e8c90b0ad037513c + zh: 563454508c30d9b0 +/deepseek-ai-dsh-tool-cordis/understand-the-implementation: + en: de18fe3471a4a341 + zh: fda07860cfe1e325 +/deepseek-ai-dsh-tool-cordis/further-exploration: + en: 1863373f02bcc196 + zh: 3efdbf5569411562 +/deepseek-ai-dsh-tool-cordis/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-cordis/model-experience/runtime-inspection: + en: 72ffb7cae674c31a + zh: 85674f298a78592a +/deepseek-ai-dsh-tool-cordis/model-experience/runtime-inspection/what-the-model-sees: + en: 197fabc06c289f6e + zh: e7f1695ee2118ed6 +/deepseek-ai-dsh-tool-cordis/model-experience/runtime-inspection/token-effect: + en: 5d9791798f8ce57f + zh: b47984cc13e12cfd +/deepseek-ai-dsh-tool-cordis/model-experience/runtime-inspection/kv-cache-effect: + en: f57a20cd4e76d13c + zh: 7b673116422bee87 +/deepseek-ai-dsh-tool-cordis/known-limitations-and-deferred-work: + en: ffe15dd1fd333dbf + zh: b256afc74a1782cb +/deepseek-ai-dsh-tool-cordis/known-limitations-and-deferred-work/dev-note: + en: 0a1253c6f7b5e8b9 + zh: 9f56528562c7c914 diff --git a/packages/extensions/ui-cordis/README.i18n.yaml b/packages/extensions/ui-cordis/README.i18n.yaml index 8e072cd9ac..fe60a049e0 100644 --- a/packages/extensions/ui-cordis/README.i18n.yaml +++ b/packages/extensions/ui-cordis/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/extensions/ui-cordis/README.md -README.md: 02ffc54ebb54b705d9e881d39f2b65d581a86257 -README.zh.md: 235310346ba3e3f34e3567646e5521ee5ba72bd6 +/: + en: cdad52474ffc161d + zh: 864ed938d5ee9012 +/deepseek-ai-dsh-client-ui-cordis: + en: 63d8703a05312146 + zh: 9e4c02908b65c417 +/deepseek-ai-dsh-client-ui-cordis/summary: + en: 4d3e762156a6e66e + zh: 436215c71fd8905c +/deepseek-ai-dsh-client-ui-cordis/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-ui-cordis/use-this-package: + en: b2f4dd7bdcfa5fea + zh: 23e48220e532f98a +/deepseek-ai-dsh-client-ui-cordis/use-this-package/what-the-panel-shows: + en: 56ec98fc74c1706a + zh: 06d2c6315aa20217 +/deepseek-ai-dsh-client-ui-cordis/use-this-package/what-the-tool-cards-show: + en: a9c45dd79deab953 + zh: 6d68858f202ee247 +/deepseek-ai-dsh-client-ui-cordis/use-this-package/boundaries-to-plan-around: + en: c76ace6595f805d6 + zh: 53ee7e51823f367c +/deepseek-ai-dsh-client-ui-cordis/understand-the-implementation: + en: e4e1b788078bcd0d + zh: 93d0cb3132fd2157 +/deepseek-ai-dsh-client-ui-cordis/understand-the-implementation/design-philosophy: + en: b27840fda9efefc6 + zh: 53ed0401355290eb +/deepseek-ai-dsh-client-ui-cordis/understand-the-implementation/source-map: + en: de077f5773f79ac6 + zh: 6d6f98cc34d530a5 +/deepseek-ai-dsh-client-ui-cordis/understand-the-implementation/how-the-panel-stays-current: + en: cbcc34aa282d8739 + zh: ad054d71184037e3 +/deepseek-ai-dsh-client-ui-cordis/further-exploration: + en: 30316fa7214c7995 + zh: 01bf063e4c21b0c7 +/deepseek-ai-dsh-client-ui-cordis/model-experience: + en: 83a0687b7ad68dde + zh: 9763803384bef7af +/deepseek-ai-dsh-client-ui-cordis/model-experience/kv-cache-effect: + en: ec4562df89d18e78 + zh: 30084e7fb8dee95d +/deepseek-ai-dsh-client-ui-cordis/known-limitations-and-deferred-work: + en: 3b9cfd230ab18a75 + zh: 47b87bb34b9c9d1c +/deepseek-ai-dsh-client-ui-cordis/known-limitations-and-deferred-work/dev-note: + en: 82bc60a2bd964744 + zh: 900679483cdbde4b diff --git a/packages/feedback/README.i18n.yaml b/packages/feedback/README.i18n.yaml index e2bca4898d..c13cfba2fe 100644 --- a/packages/feedback/README.i18n.yaml +++ b/packages/feedback/README.i18n.yaml @@ -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 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 packages/feedback/README.md -README.md: e4b538f2a498cdfa4e265226283c923a19b8b69e -README.zh.md: a1a087a025a9cafafe6c692607ee8048911611b2 +/: + en: b5ab77523ec2a8a7 + zh: 91b75813642d9934 +/feedback-recorded-human-feedback: + en: 7223837490fb7cd6 + zh: df1ddec79a7130ac +/feedback-recorded-human-feedback/summary: + en: fe2bc27de843bee6 + zh: ede057cf78113d1d +/feedback-recorded-human-feedback/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/feedback-recorded-human-feedback/packages: + en: 4f4a9077ea895f1c + zh: 32702e58c10db7e3 +/feedback-recorded-human-feedback/related-documentation: + en: 616fb75d21090170 + zh: e8fd4adcc39be3a9 +/feedback-recorded-human-feedback/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/feedback/command-feedback/README.i18n.yaml b/packages/feedback/command-feedback/README.i18n.yaml index 4b8bc3face..35e1a1db5a 100644 --- a/packages/feedback/command-feedback/README.i18n.yaml +++ b/packages/feedback/command-feedback/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/feedback/command-feedback/README.md -README.md: 92d8511c181c2955c3db967ba95284b5b9d76c5e -README.zh.md: 4f698f735d8cc1c178ca50ef8805dc34a4fbd34f +/: + en: 6fde8a2c01a13756 + zh: 63b06f1e5373a1f0 +/deepseek-ai-dsh-command-feedback: + en: ba9f49666fd040a4 + zh: 9b2ab90df6a7d96a +/deepseek-ai-dsh-command-feedback/summary: + en: b3803d4fff915e52 + zh: d2584d750443fd91 +/deepseek-ai-dsh-command-feedback/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-command-feedback/use-this-package: + en: 2e9c7334f5ed57b3 + zh: 8c25b5a898fb5895 +/deepseek-ai-dsh-command-feedback/use-this-package/the-feedback-command: + en: 645ee72ee1af491d + zh: 32b86c39307093e3 +/deepseek-ai-dsh-command-feedback/use-this-package/the-web-feedback-dialog: + en: 21fae542942446d2 + zh: 34d83535891dabee +/deepseek-ai-dsh-command-feedback/use-this-package/recording-feedback-from-your-own-ui: + en: c6ee98ae5229d76f + zh: e058dae4cb5dd254 +/deepseek-ai-dsh-command-feedback/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-command-feedback/understand-the-implementation/design-concept: + en: 8363f597c28788d2 + zh: 9dda2a864a01f4ce +/deepseek-ai-dsh-command-feedback/understand-the-implementation/how-a-remark-is-recorded: + en: 0c6ceecbb1f45224 + zh: 8138bb0fd3e68317 +/deepseek-ai-dsh-command-feedback/understand-the-implementation/source-map: + en: 4fd622508f032a28 + zh: fa336bcbaabca58e +/deepseek-ai-dsh-command-feedback/further-exploration: + en: 3f3b9c53cd589403 + zh: 13ca15c564be3521 +/deepseek-ai-dsh-command-feedback/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-command-feedback/model-experience/human-feedback-capture: + en: 987bab29bbe8ec43 + zh: 725efc45361172b5 +/deepseek-ai-dsh-command-feedback/model-experience/human-feedback-capture/what-the-model-sees: + en: 6ad8e2a4f961d2f4 + zh: b510d05a74d6df0c +/deepseek-ai-dsh-command-feedback/model-experience/human-feedback-capture/token-effect: + en: 1fcbd4d84eff267f + zh: 8da9902c44bf8dc4 +/deepseek-ai-dsh-command-feedback/model-experience/human-feedback-capture/kv-cache-effect: + en: c72e7dfee7b0957a + zh: b122fce5efccfafa +/deepseek-ai-dsh-command-feedback/known-limitations-and-deferred-work: + en: b45e656a009e37b7 + zh: 4949bd712564ee54 +/deepseek-ai-dsh-command-feedback/known-limitations-and-deferred-work/dev-note: + en: b4bf58d55f599bc2 + zh: fea7a6b69b0266e1 diff --git a/packages/feedback/message-feedback/README.i18n.yaml b/packages/feedback/message-feedback/README.i18n.yaml index bab754d071..8c427f7f60 100644 --- a/packages/feedback/message-feedback/README.i18n.yaml +++ b/packages/feedback/message-feedback/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/feedback/message-feedback/README.md -README.md: bd10014ce627dd6b4283e04781a1d98991588446 -README.zh.md: a0c228629467f4ff4a1f82c370a45542375d4e96 +/: + en: f3648275facc4888 + zh: 110c0e8aedf63e4e +/deepseek-ai-dsh-message-feedback: + en: ec92a0c87a814aee + zh: c35482c435473cb9 +/deepseek-ai-dsh-message-feedback/summary: + en: 07fec1cc63536ffb + zh: 530c8f20786c7af6 +/deepseek-ai-dsh-message-feedback/table-of-contents: + en: 122f0d41696980b1 + zh: 528864635b577290 +/deepseek-ai-dsh-message-feedback/use-this-package: + en: 98f9e7d58c5fc950 + zh: ebfc3d4642cc1083 +/deepseek-ai-dsh-message-feedback/use-this-package/configuration: + en: 045ff728d54ae2b4 + zh: e344c18e3d272023 +/deepseek-ai-dsh-message-feedback/use-this-package/reading-and-changing-feedback: + en: fed12d93b538866d + zh: 4b45e81d9e5a8260 +/deepseek-ai-dsh-message-feedback/understand-the-implementation: + en: ee4615a04fa6503d + zh: ee2c5fb2204a43cf +/deepseek-ai-dsh-message-feedback/understand-the-implementation/canonical-log-and-durability: + en: 73ddbcf524f213a1 + zh: 050f1a72c7f56fd6 +/deepseek-ai-dsh-message-feedback/understand-the-implementation/source-map: + en: 7846ae54837ca631 + zh: 40198060b97891af +/deepseek-ai-dsh-message-feedback/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-message-feedback/model-experience/message-feedback: + en: 73eacb58a40342f6 + zh: 1ee3049173128f61 +/deepseek-ai-dsh-message-feedback/model-experience/message-feedback/what-the-model-sees: + en: 3928187c2f20ec0f + zh: fd5273ee1a885bde +/deepseek-ai-dsh-message-feedback/model-experience/message-feedback/token-effect: + en: 5ff6c3ac5017b3ef + zh: 4ccd5af39b37dd1c +/deepseek-ai-dsh-message-feedback/model-experience/message-feedback/kv-cache-effect: + en: 2bdd13dcb4078358 + zh: 591328cf1a061fca +/deepseek-ai-dsh-message-feedback/known-limitations-and-deferred-work: + en: f47ca0745f088f39 + zh: 551850b23816c589 +/deepseek-ai-dsh-message-feedback/known-limitations-and-deferred-work/dev-note: + en: 3c3ce6ed67282e05 + zh: 213816553e3581b4 diff --git a/packages/fs/README.i18n.yaml b/packages/fs/README.i18n.yaml index 5765348ffd..7e339799f3 100644 --- a/packages/fs/README.i18n.yaml +++ b/packages/fs/README.i18n.yaml @@ -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 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 packages/fs/README.md -README.md: 1fbba1f93490000088de4d7fa1e94e8b9dfed90a -README.zh.md: c02bf70ce62ae35ddae04ea8989b58e785836d4b +/: + en: 8dc77e3367b5280a + zh: 83474ca14682aaf2 +/packages-fs: + en: 659c4654ba00d846 + zh: 7107fd3d4d0e6f7c +/packages-fs/summary: + en: 7d52fac0842e833e + zh: 53402054019f2e45 +/packages-fs/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-fs/packages: + en: 21e9692beda57ac9 + zh: 5b6dab849af81774 +/packages-fs/related-documentation: + en: c1a5d3e810b501f8 + zh: 50bfefdc79ae3d51 +/packages-fs/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/fs/fs-local/README.i18n.yaml b/packages/fs/fs-local/README.i18n.yaml index 1a4ca47419..c82192ba90 100644 --- a/packages/fs/fs-local/README.i18n.yaml +++ b/packages/fs/fs-local/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/fs/fs-local/README.md -README.md: 9c005443eb064a03b3050c9ae82295c794315239 -README.zh.md: 3adc249afe68b4cd8b56c68101baafec47ffb981 +/: + en: ce32f58ec51489e8 + zh: d12c4665bd72e452 +/deepseek-ai-dsh-fs-local: + en: 4eb75bc6b409d069 + zh: 645121e948423a0f +/deepseek-ai-dsh-fs-local/summary: + en: 50148e0873cff07b + zh: e2b9014755eb7351 +/deepseek-ai-dsh-fs-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-fs-local/use-this-package: + en: c49313aeb4737eca + zh: 7b80272bbf8404e3 +/deepseek-ai-dsh-fs-local/use-this-package/when-to-choose-it: + en: 1bceab0cdb2e8f8e + zh: 7d14d0c1ad90e9e2 +/deepseek-ai-dsh-fs-local/use-this-package/minimal-configuration: + en: 60678d0c5fbf3c56 + zh: 1698a9645c12578b +/deepseek-ai-dsh-fs-local/use-this-package/what-you-can-do: + en: cff37f0ccf4cff2a + zh: d26ce57570880789 +/deepseek-ai-dsh-fs-local/understand-the-implementation: + en: 6ffc93e09381bd3d + zh: 57c3192c26a080ef +/deepseek-ai-dsh-fs-local/understand-the-implementation/design-concept: + en: 197876fc5f05cdc3 + zh: a6e7a9eb921d394b +/deepseek-ai-dsh-fs-local/understand-the-implementation/source-map: + en: e69aa171af80b6b4 + zh: 5ebf652092c70aad +/deepseek-ai-dsh-fs-local/understand-the-implementation/write-path: + en: eefa5c3b69af4614 + zh: d5ac6b2e14efe268 +/deepseek-ai-dsh-fs-local/understand-the-implementation/edit-path: + en: 1e130ab16c931821 + zh: b3690b8e13292027 +/deepseek-ai-dsh-fs-local/understand-the-implementation/ownership-and-invariants: + en: f094e3ea30517cb4 + zh: b213bb41b7a0201d +/deepseek-ai-dsh-fs-local/further-exploration: + en: 876ca2a87a361f41 + zh: d2855979b1d2bda9 +/deepseek-ai-dsh-fs-local/model-experience: + en: 72536bc0452cccaa + zh: 298f94b78e8364f4 +/deepseek-ai-dsh-fs-local/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 0857e9b4dd363e0a +/deepseek-ai-dsh-fs-local/known-limitations-and-deferred-work: + en: 653e3d81d6a5f82d + zh: 633f47afeb0da9ba +/deepseek-ai-dsh-fs-local/known-limitations-and-deferred-work/dev-note: + en: 9979632783da7b78 + zh: c42c1feec2905268 diff --git a/packages/fs/fs-observation-policy/README.i18n.yaml b/packages/fs/fs-observation-policy/README.i18n.yaml index 8806ab92bc..f341718c0f 100644 --- a/packages/fs/fs-observation-policy/README.i18n.yaml +++ b/packages/fs/fs-observation-policy/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/fs/fs-observation-policy/README.md -README.md: 3a4a8fd0945b6811d8a10e769c4254f09f6c1f5e -README.zh.md: f79ce256e3d327ce90b002e31fb16ed60821405d +/: + en: 2e7d205b959bad5b + zh: 78111c063c98c309 +/deepseek-ai-dsh-fs-observation-policy: + en: 7fddbb6d5b42812b + zh: 2894feecfbdcc099 +/deepseek-ai-dsh-fs-observation-policy/summary: + en: e74517566c1827b2 + zh: 803c6ddf5cbd3842 +/deepseek-ai-dsh-fs-observation-policy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-fs-observation-policy/use-this-package: + en: 7c5e3c7e3319f7a9 + zh: 238ba8275006833a +/deepseek-ai-dsh-fs-observation-policy/use-this-package/minimal-composition: + en: d85e3b814b43768e + zh: 89d3672dbb2f6d30 +/deepseek-ai-dsh-fs-observation-policy/use-this-package/what-changes-for-the-model: + en: 91686925a433794d + zh: 9ac2a197203d6549 +/deepseek-ai-dsh-fs-observation-policy/use-this-package/failures-and-recovery: + en: 1ecc7b68f7c7b3f0 + zh: f6a9800786ed30c0 +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation: + en: 612e69f76edc8795 + zh: 55edab9956941616 +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation/design-concept: + en: 54eef802ac087112 + zh: f30b2ed5dbc268ac +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation/source-map: + en: 6a55bd72a91664bf + zh: fc22345acfd9d850 +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation/decision-flow: + en: 79ddd675e3c27d62 + zh: b9b74b63aad5b42d +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation/single-slot-first-wins: + en: 226bb7885eb147b8 + zh: 0b68d59ddc55fb07 +/deepseek-ai-dsh-fs-observation-policy/understand-the-implementation/lifecycle: + en: 02a1e3e7707706fb + zh: eff587af0445d032 +/deepseek-ai-dsh-fs-observation-policy/further-exploration: + en: 2b2540c0021ec26d + zh: 3669565187886ecf +/deepseek-ai-dsh-fs-observation-policy/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-fs-observation-policy/model-experience/filesystem-tool-outcome: + en: ee1f02dc1bb69955 + zh: 9ba9205a9b15d132 +/deepseek-ai-dsh-fs-observation-policy/model-experience/filesystem-tool-outcome/what-the-model-sees: + en: d4ec7d7b302845c8 + zh: 6e412aa23798524e +/deepseek-ai-dsh-fs-observation-policy/model-experience/filesystem-tool-outcome/token-effect: + en: 425ccc7dafa6218d + zh: d2c1a29955a60e3d +/deepseek-ai-dsh-fs-observation-policy/model-experience/filesystem-tool-outcome/kv-cache-effect: + en: 2fbf2175168e8244 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-fs-observation-policy/known-limitations-and-deferred-work: + en: 973f6b0e64b1905c + zh: 080396a1283fde2b +/deepseek-ai-dsh-fs-observation-policy/known-limitations-and-deferred-work/dev-note: + en: 9979632783da7b78 + zh: c42c1feec2905268 diff --git a/packages/fs/fs-sandbox/README.i18n.yaml b/packages/fs/fs-sandbox/README.i18n.yaml index b23f4379e1..fae51c5294 100644 --- a/packages/fs/fs-sandbox/README.i18n.yaml +++ b/packages/fs/fs-sandbox/README.i18n.yaml @@ -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 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 packages/fs/fs-sandbox/README.md -README.md: fde670f9a51fafb29b8d7057517ff26f551e9ff4 -README.zh.md: ff58cd0a4eb2094e138fa24da03a371ff2054c99 +/: + en: 4061a46ba3cf0fbd + zh: c374141974bfe4bb +/deepseek-ai-dsh-fs-sandbox: + en: 68f0a0a66d33b6ec + zh: 62fed2012166c111 +/deepseek-ai-dsh-fs-sandbox/summary: + en: ae186a7675a9332b + zh: 323e9043c1d90a83 +/deepseek-ai-dsh-fs-sandbox/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-fs-sandbox/use-this-package: + en: c6fe0aa054b2a402 + zh: 78a779a1b91ac808 +/deepseek-ai-dsh-fs-sandbox/use-this-package/minimal-composition: + en: a954957753339bbf + zh: c6633e86de8b2707 +/deepseek-ai-dsh-fs-sandbox/use-this-package/how-the-fence-behaves: + en: 1a6f19bb21aff7b1 + zh: ace300527edd0c1f +/deepseek-ai-dsh-fs-sandbox/use-this-package/observable-success-and-failures: + en: 722f744eb7b3b040 + zh: b95db78f9968f9c5 +/deepseek-ai-dsh-fs-sandbox/understand-the-implementation: + en: 1c359075f33df1ed + zh: 1306d6c28b5dd1f5 +/deepseek-ai-dsh-fs-sandbox/understand-the-implementation/design-concept: + en: ef26d25e866ae9c0 + zh: 8206760b2e2c5feb +/deepseek-ai-dsh-fs-sandbox/understand-the-implementation/source-map: + en: 5422d25675578549 + zh: 9bb87cede194cd99 +/deepseek-ai-dsh-fs-sandbox/understand-the-implementation/how-a-mutation-is-fenced: + en: d30a62f5f7e9aee7 + zh: 837e33fb5eea2f64 +/deepseek-ai-dsh-fs-sandbox/understand-the-implementation/threat-model: + en: 051808b6e28313a5 + zh: a06a46f26c552678 +/deepseek-ai-dsh-fs-sandbox/further-exploration: + en: dd643f4f40336b99 + zh: e4cf95298d89e2cb +/deepseek-ai-dsh-fs-sandbox/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-fs-sandbox/model-experience/filesystem-policy-and-refusals: + en: 36178638b7ce9cf8 + zh: 929c8292023f3541 +/deepseek-ai-dsh-fs-sandbox/model-experience/filesystem-policy-and-refusals/what-the-model-sees: + en: 388c39763c12dfe6 + zh: bc3be0faeff618cd +/deepseek-ai-dsh-fs-sandbox/model-experience/filesystem-policy-and-refusals/token-effect: + en: fd86bc3fc7106117 + zh: 1b9eb71e5aba714b +/deepseek-ai-dsh-fs-sandbox/model-experience/filesystem-policy-and-refusals/kv-cache-effect: + en: a4ca227f2f83edec + zh: 5bb3c452b412566d +/deepseek-ai-dsh-fs-sandbox/known-limitations-and-deferred-work: + en: c0ba1642a5e62459 + zh: 10a27abcd6f27888 +/deepseek-ai-dsh-fs-sandbox/known-limitations-and-deferred-work/dev-note: + en: e83aa1d2ff6b4366 + zh: f0feffa169cb8bd3 diff --git a/packages/fs/fs/README.i18n.yaml b/packages/fs/fs/README.i18n.yaml index f82aaf06fb..5725652b9a 100644 --- a/packages/fs/fs/README.i18n.yaml +++ b/packages/fs/fs/README.i18n.yaml @@ -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 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 packages/fs/fs/README.md -README.md: 549da2a42a70c0ac06bf50870076fceb400cbf78 -README.zh.md: c9b91913554c66f727289130d6d50c522ba60d91 +/: + en: a94eb1470c498a2c + zh: cdd5faa0a8fcb562 +/deepseek-ai-dsh-fs: + en: c4c564fe43efe006 + zh: 736312b9959f58bc +/deepseek-ai-dsh-fs/summary: + en: 8238ed0e699f4b17 + zh: 0828d419e424c5a3 +/deepseek-ai-dsh-fs/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-fs/use-this-package: + en: 130aa12ccf7a1752 + zh: 22d69bb7b5793fc9 +/deepseek-ai-dsh-fs/use-this-package/choosing-and-mounting-a-backend: + en: 8e2f904a21ba4dfb + zh: 76d9ce7503c84a5c +/deepseek-ai-dsh-fs/use-this-package/what-the-service-lets-you-do: + en: 48aa680bb26e99c7 + zh: 4f9b6e47292c233e +/deepseek-ai-dsh-fs/understand-the-implementation: + en: 7e13d669ecc96d59 + zh: b5fe7ae65812d926 +/deepseek-ai-dsh-fs/understand-the-implementation/design-philosophy: + en: 057001c4f3c7344e + zh: 880be1069e68b4c9 +/deepseek-ai-dsh-fs/understand-the-implementation/source-map: + en: 9507d7d9259fc89e + zh: aa500435e02e6de3 +/deepseek-ai-dsh-fs/understand-the-implementation/how-a-call-flows: + en: 6ce9e67b0f5653e5 + zh: 6d974a760352417f +/deepseek-ai-dsh-fs/understand-the-implementation/the-fs-policy-events: + en: 08bc855592933670 + zh: 1e94e1f2272bbd61 +/deepseek-ai-dsh-fs/understand-the-implementation/invariants: + en: 15b98bc9800b6eae + zh: 434d9dd05fa1a332 +/deepseek-ai-dsh-fs/further-exploration: + en: faca30b042b7f72d + zh: e436ca4c5bbfd3e4 +/deepseek-ai-dsh-fs/model-experience: + en: 8ef3a43a11a7e187 + zh: 0fee346e68f6e2ac +/deepseek-ai-dsh-fs/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 0857e9b4dd363e0a +/deepseek-ai-dsh-fs/known-limitations-and-deferred-work: + en: f37da51c7420f682 + zh: 8f3bc6bb96851377 +/deepseek-ai-dsh-fs/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/fs/tool-fs-search/README.i18n.yaml b/packages/fs/tool-fs-search/README.i18n.yaml index 3b9d2bb395..3ff18505ff 100644 --- a/packages/fs/tool-fs-search/README.i18n.yaml +++ b/packages/fs/tool-fs-search/README.i18n.yaml @@ -1,6 +1,118 @@ -# 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 packages/fs/tool-fs-search/README.md -README.md: 83b1d89b3276f3f6fabbe501017af2df8ec1868a -README.zh.md: fc0eeed77521c33262d057afd90937ce03280e2d +/: + en: 117a1d8e2f2d3651 + zh: 8a27e703652d670c +/deepseek-ai-dsh-tool-fs-search: + en: 6fd594ab2eacb521 + zh: bcbce1550c71bbae +/deepseek-ai-dsh-tool-fs-search/summary: + en: a2d8407299a71efe + zh: d43338a4c7954a39 +/deepseek-ai-dsh-tool-fs-search/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-fs-search/use-this-package: + en: aebe9494cf6e8f3a + zh: 8ae2ebd6be7c3484 +/deepseek-ai-dsh-tool-fs-search/use-this-package/minimal-composition: + en: a5a01d14e0bec814 + zh: 409298cfafd91b05 +/deepseek-ai-dsh-tool-fs-search/use-this-package/the-tools: + en: 9edb7655f8ed8bc6 + zh: 21eadd65c1f2f07c +/deepseek-ai-dsh-tool-fs-search/use-this-package/configuration: + en: 3e84e19a22aeb6c8 + zh: 8ac44b21eb697f2f +/deepseek-ai-dsh-tool-fs-search/use-this-package/deployment-requirement: + en: 4aa9b74deef586bc + zh: f855f815829d4e1e +/deepseek-ai-dsh-tool-fs-search/use-this-package/failures-and-recovery: + en: d7a59e296308b2bd + zh: 66243fcd932fe49a +/deepseek-ai-dsh-tool-fs-search/understand-the-implementation: + en: 7546db09c46181e0 + zh: 3aae6dc6a773511c +/deepseek-ai-dsh-tool-fs-search/understand-the-implementation/design-concept: + en: 03bde21e022e845a + zh: 9c9e8b9a9713dda5 +/deepseek-ai-dsh-tool-fs-search/understand-the-implementation/source-map: + en: 5a30f023dd86c345 + zh: 558b6e80c62648ba +/deepseek-ai-dsh-tool-fs-search/understand-the-implementation/how-a-search-runs: + en: 8443370c1f347d0c + zh: 5f5c6fa8cdb97cba +/deepseek-ai-dsh-tool-fs-search/understand-the-implementation/two-budgets-two-artifacts: + en: b7e8c2191f8227dc + zh: a064e2e03761bfd5 +/deepseek-ai-dsh-tool-fs-search/further-exploration: + en: 602fbbee4ebd695c + zh: 448634faeef2f321 +/deepseek-ai-dsh-tool-fs-search/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/what-the-model-sees: + en: 9ff140be02977133 + zh: 43035edcaab81c23 +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/what-the-model-sees/glob-guidance-with-sampleovercapglobresults-true: + en: 06042a0fcd6dacc9 + zh: 6da14bb730677c0e +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/what-the-model-sees/glob-guidance-with-sampleovercapglobresults-false: + en: 05aa24220cadb079 + zh: 07b9030bec317b0e +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/what-the-model-sees/grep-guidance: + en: 7ed8e5efe4deb2de + zh: eb8419d4579aeab2 +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/token-effect: + en: c10c8a3e9e470e62 + zh: c2a2404bfa4fd60a +/deepseek-ai-dsh-tool-fs-search/model-experience/system-prompt/kv-cache-effect: + en: db2f355d8209a537 + zh: bd91d8e33a7042f6 +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-schemas/what-the-model-sees: + en: ab07aaec26eaa89a + zh: 693c46c42ebc3030 +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-schemas/token-effect: + en: 023a80f81229887f + zh: 5410d27cde4fb656 +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-schemas/kv-cache-effect: + en: 4555717d7b481f52 + zh: 88d5f239ac01f197 +/deepseek-ai-dsh-tool-fs-search/model-experience/results-and-spill-notices: + en: e9d1330ebd642a0d + zh: f9bc6dffb0afd878 +/deepseek-ai-dsh-tool-fs-search/model-experience/results-and-spill-notices/what-the-model-sees: + en: 3a357b506d327e18 + zh: b2d97abd9af096d4 +/deepseek-ai-dsh-tool-fs-search/model-experience/results-and-spill-notices/token-effect: + en: 033a5b99fec018a1 + zh: 79fc41e856cd9925 +/deepseek-ai-dsh-tool-fs-search/model-experience/results-and-spill-notices/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 14660e568cd51bdc +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-errors: + en: 2d4f2c8605eccab3 + zh: 67f1f0218f73c6bf +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-errors/what-the-model-sees: + en: 375c4554a70d93a4 + zh: 372a088c6ecf68ab +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-errors/token-effect: + en: 681cadd5be7b8ac1 + zh: 1f0102977ea02785 +/deepseek-ai-dsh-tool-fs-search/model-experience/tool-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 14660e568cd51bdc +/deepseek-ai-dsh-tool-fs-search/known-limitations-and-deferred-work: + en: 4fca846226cb8ef2 + zh: fb797ec586cec7f4 +/deepseek-ai-dsh-tool-fs-search/known-limitations-and-deferred-work/dev-note: + en: 0c4d0c465413d319 + zh: 2e062f9e20a99241 diff --git a/packages/fs/tool-fs/README.i18n.yaml b/packages/fs/tool-fs/README.i18n.yaml index 7b8246dbbe..8443e1a64a 100644 --- a/packages/fs/tool-fs/README.i18n.yaml +++ b/packages/fs/tool-fs/README.i18n.yaml @@ -1,6 +1,142 @@ -# 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 packages/fs/tool-fs/README.md -README.md: 9d338a6227b7f02ef43fcbe97900b166cb722817 -README.zh.md: 0c34f840ad449847a649df8abdadec01f772f37b +/: + en: 52b93805befe8077 + zh: 9786e662303f0e2f +/deepseek-ai-dsh-tool-fs: + en: fc8f28deebe5fa6b + zh: 738c6ad45034da88 +/deepseek-ai-dsh-tool-fs/summary: + en: c8f608c85c8d6626 + zh: 4133a867517baca5 +/deepseek-ai-dsh-tool-fs/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-fs/use-this-package: + en: 8fd62afcdabe55d4 + zh: 9bdcae272575be8c +/deepseek-ai-dsh-tool-fs/use-this-package/minimal-composition: + en: eb21d89a3ecbd2d4 + zh: f05ccbb1e7515f32 +/deepseek-ai-dsh-tool-fs/use-this-package/the-tools: + en: e70e0164411016b5 + zh: 3fa6caa8f3d70552 +/deepseek-ai-dsh-tool-fs/use-this-package/configuration: + en: 7eb705e3b132fcba + zh: 883207b13d381f9e +/deepseek-ai-dsh-tool-fs/use-this-package/policy-and-sandbox-behavior: + en: 245b4be79ea4cc6b + zh: ff15b41e778fadab +/deepseek-ai-dsh-tool-fs/use-this-package/failures-and-recovery: + en: 962b09e21305a04b + zh: 382d2b8cce217569 +/deepseek-ai-dsh-tool-fs/understand-the-implementation: + en: e30f7038c28e93f8 + zh: a3868dbd90367b13 +/deepseek-ai-dsh-tool-fs/understand-the-implementation/design-concept: + en: 454b5291db9ba847 + zh: 9fe7081dfb416c93 +/deepseek-ai-dsh-tool-fs/understand-the-implementation/source-map: + en: e8220ed04480aadc + zh: 1cc5f9a505953102 +/deepseek-ai-dsh-tool-fs/understand-the-implementation/per-tool-flow: + en: d741e01be9fddb76 + zh: 7aa1d7ca719a4aac +/deepseek-ai-dsh-tool-fs/understand-the-implementation/observation-and-concurrency: + en: 665d437dc35bf05f + zh: 8004334d6a3246b4 +/deepseek-ai-dsh-tool-fs/further-exploration: + en: 485bc55482f576bc + zh: fc5fa55b41098bd0 +/deepseek-ai-dsh-tool-fs/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/what-the-model-sees: + en: b09ee4be5e522c29 + zh: ffd30b57d7fc96e8 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/what-the-model-sees/read-guidance: + en: f8961df3f3a6a671 + zh: 85c7bd418b40b089 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/what-the-model-sees/write-guidance: + en: 7e34af48c583f210 + zh: e39ad6823689c665 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/what-the-model-sees/edit-guidance: + en: 28f07502a411303b + zh: 437897dc99fc4360 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/token-effect: + en: 7a44cabe439a879a + zh: 1adf9bf3de7658b6 +/deepseek-ai-dsh-tool-fs/model-experience/system-prompt/kv-cache-effect: + en: 4f1b5639f91405a8 + zh: f90ffe077a2e52a3 +/deepseek-ai-dsh-tool-fs/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-fs/model-experience/tool-schemas/what-the-model-sees: + en: 6f2a072c474e39e7 + zh: dbee4c2b206bf68f +/deepseek-ai-dsh-tool-fs/model-experience/tool-schemas/token-effect: + en: 68517f7d65ef7e9d + zh: 544a4b81e8ea16c0 +/deepseek-ai-dsh-tool-fs/model-experience/tool-schemas/kv-cache-effect: + en: 1e6d3da20012762d + zh: 482f8bc569b8b490 +/deepseek-ai-dsh-tool-fs/model-experience/read-result: + en: ebd38733c0490428 + zh: b45101c325efe784 +/deepseek-ai-dsh-tool-fs/model-experience/read-result/what-the-model-sees: + en: 06e250bd8788248a + zh: e00d36b48068909a +/deepseek-ai-dsh-tool-fs/model-experience/read-result/token-effect: + en: 4269b4368622ec2f + zh: f4df80c1fb6972f1 +/deepseek-ai-dsh-tool-fs/model-experience/read-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-fs/model-experience/image-read-result: + en: 9dac44e6d0b9d8de + zh: 7bc4dc1c5df39eaf +/deepseek-ai-dsh-tool-fs/model-experience/image-read-result/what-the-model-sees: + en: 9252b6d73776c5ff + zh: d6e433450989399e +/deepseek-ai-dsh-tool-fs/model-experience/image-read-result/token-effect: + en: 68bd5255f1c9ca48 + zh: 0474213531c1aae3 +/deepseek-ai-dsh-tool-fs/model-experience/image-read-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 48e202e396bc5fcc +/deepseek-ai-dsh-tool-fs/model-experience/write-and-edit-results: + en: 1b3b6cfa3605d0b4 + zh: 78e37c2aa4f76d54 +/deepseek-ai-dsh-tool-fs/model-experience/write-and-edit-results/what-the-model-sees: + en: bb2a92e0e43e3273 + zh: a744395576b48a93 +/deepseek-ai-dsh-tool-fs/model-experience/write-and-edit-results/token-effect: + en: fb4d0b17a99f49cf + zh: 17460a2a5d72f6cc +/deepseek-ai-dsh-tool-fs/model-experience/write-and-edit-results/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-fs/model-experience/tool-errors: + en: 2d4f2c8605eccab3 + zh: 67f1f0218f73c6bf +/deepseek-ai-dsh-tool-fs/model-experience/tool-errors/what-the-model-sees: + en: 4e8fac7bac8ced61 + zh: 7ba921dbcddc9f97 +/deepseek-ai-dsh-tool-fs/model-experience/tool-errors/token-effect: + en: 681cadd5be7b8ac1 + zh: 65e483f62fb819d9 +/deepseek-ai-dsh-tool-fs/model-experience/tool-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-fs/known-limitations-and-deferred-work: + en: ce7a91d41d2f7597 + zh: d4a3c905e124fd7f +/deepseek-ai-dsh-tool-fs/known-limitations-and-deferred-work/dev-note: + en: 0c4d0c465413d319 + zh: a20efeb10121b927 diff --git a/packages/fs/tool-str-replace-editor/README.i18n.yaml b/packages/fs/tool-str-replace-editor/README.i18n.yaml index 83a610d7b3..b516be19bc 100644 --- a/packages/fs/tool-str-replace-editor/README.i18n.yaml +++ b/packages/fs/tool-str-replace-editor/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/fs/tool-str-replace-editor/README.md -README.md: 66663b2ab19585c30f00e6e6d91ce759b4fb8d81 -README.zh.md: 01a942cbc8735c4aae85999ad601bdcf4b4e59a5 +/: + en: 1d308889b00602e0 + zh: 8858e4768891e79d +/deepseek-ai-dsh-tool-str-replace-editor: + en: ec475ff43043b97b + zh: 8b517c5c11bd650f +/deepseek-ai-dsh-tool-str-replace-editor/summary: + en: f7423308d3241a02 + zh: 84255466399391f2 +/deepseek-ai-dsh-tool-str-replace-editor/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-str-replace-editor/use-this-package: + en: 00b16ec00064922b + zh: 5e0f3e78f1bb4a29 +/deepseek-ai-dsh-tool-str-replace-editor/use-this-package/minimal-composition: + en: db6e7d91ff7e0439 + zh: 2ed4096f6c856e17 +/deepseek-ai-dsh-tool-str-replace-editor/use-this-package/configuration: + en: e6860f1861cc0df8 + zh: cd00d3c1a660b7c7 +/deepseek-ai-dsh-tool-str-replace-editor/use-this-package/the-commands: + en: 554e8446946fbd96 + zh: 3af12627c19a0111 +/deepseek-ai-dsh-tool-str-replace-editor/use-this-package/failures-and-recovery: + en: 2b249fcb0b5621aa + zh: d172b3de43c337c4 +/deepseek-ai-dsh-tool-str-replace-editor/understand-the-implementation: + en: b0b36a22cd4421eb + zh: db47ef5b71dd51df +/deepseek-ai-dsh-tool-str-replace-editor/understand-the-implementation/design-concept: + en: cce2bf460652cba4 + zh: 1f4f1c1563c4c55c +/deepseek-ai-dsh-tool-str-replace-editor/understand-the-implementation/source-map: + en: 3f906cb8a23140e5 + zh: 5d72b0f3244c29bc +/deepseek-ai-dsh-tool-str-replace-editor/understand-the-implementation/how-each-command-runs: + en: a866aa948afff207 + zh: 65b0417597efc19c +/deepseek-ai-dsh-tool-str-replace-editor/further-exploration: + en: b1c1ee3798694a4e + zh: 53b2033c94711c26 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-schema/what-the-model-sees: + en: a2fc5c779d44c5b3 + zh: a5c045c8017fcfb5 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-schema/token-effect: + en: b4009b2b48c27168 + zh: f8692c0c87c7ce69 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-schema/kv-cache-effect: + en: 7d9323583a83cb95 + zh: 726ba31a296c1b5e +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-results: + en: beaabb79f229692a + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-results/what-the-model-sees: + en: 2ce8dee1a9711311 + zh: aed7d8e758710c1e +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-results/token-effect: + en: b60b4bccff75a5e3 + zh: 100e97b019030507 +/deepseek-ai-dsh-tool-str-replace-editor/model-experience/tool-results/kv-cache-effect: + en: ba6a48888c3361e5 + zh: 30244b70b2122bd6 +/deepseek-ai-dsh-tool-str-replace-editor/known-limitations-and-deferred-work: + en: bce77fc35b8a0140 + zh: 48f227222bf5f3dc +/deepseek-ai-dsh-tool-str-replace-editor/known-limitations-and-deferred-work/dev-note: + en: 493672b381457d04 + zh: d3e08ed16765a468 diff --git a/packages/goal/README.i18n.yaml b/packages/goal/README.i18n.yaml index 008f528b9e..fb097b4ecd 100644 --- a/packages/goal/README.i18n.yaml +++ b/packages/goal/README.i18n.yaml @@ -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 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 packages/goal/README.md -README.md: 9453d49ddf1591042b4b9c07075ae8e3e5c52e40 -README.zh.md: bcbf11a852bd2a4f5234890a04be53138e4c1983 +/: + en: 89547de69bcfd60f + zh: 8d930c7bc079e0a2 +/packages-goal: + en: 1c3bdfb1cdf16c74 + zh: 3c812378caa30139 +/packages-goal/summary: + en: 42ea5f764a242297 + zh: 35633b85b815358d +/packages-goal/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-goal/packages: + en: d756143c1fa4561c + zh: 0cf8936ab640f44e +/packages-goal/related-documentation: + en: 72e7124fa1d2c4dc + zh: a6f35d44700e7109 +/packages-goal/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/goal/command-goal/README.i18n.yaml b/packages/goal/command-goal/README.i18n.yaml index cf184f50cd..9d40d3547e 100644 --- a/packages/goal/command-goal/README.i18n.yaml +++ b/packages/goal/command-goal/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/goal/command-goal/README.md -README.md: 4027bcd18c53d6d495180d181cbd64a846fefd5c -README.zh.md: 6e28390764c1f877c9470d0a1f91ef140182f41c +/: + en: 47b9efbd26fb01af + zh: a9d083654a3e2cab +/deepseek-ai-dsh-command-goal: + en: 28189ce760d60a4c + zh: 78b24f13e7438ecc +/deepseek-ai-dsh-command-goal/summary: + en: 85dbb8e93f0ec6cb + zh: f0c8cc348b276933 +/deepseek-ai-dsh-command-goal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-command-goal/use-this-package: + en: 6851ad30832daf22 + zh: 5a2c49fa42271640 +/deepseek-ai-dsh-command-goal/use-this-package/command-reference: + en: 98ca4ad981960f99 + zh: 22d6ecbadbb3a7e1 +/deepseek-ai-dsh-command-goal/use-this-package/input-grammar: + en: 38a273cb14017e13 + zh: d4b7b501bcd9589b +/deepseek-ai-dsh-command-goal/use-this-package/attachments: + en: e61cd7437ed4aa73 + zh: 552c36c3b8d16007 +/deepseek-ai-dsh-command-goal/use-this-package/compose-it: + en: ba5792bd8714f1c3 + zh: c9e5500c0a3b7651 +/deepseek-ai-dsh-command-goal/understand-the-implementation: + en: 7fba8a13f8452dc1 + zh: bbaba056cda78ec9 +/deepseek-ai-dsh-command-goal/understand-the-implementation/design: + en: ab637815b21bf065 + zh: 56eb4ae2ad368994 +/deepseek-ai-dsh-command-goal/understand-the-implementation/source-map: + en: 08050fc601600dc9 + zh: 1a42ebf4f32334b6 +/deepseek-ai-dsh-command-goal/further-exploration: + en: 15b3a8eab8ff2cfe + zh: c42af8e2f6d9452c +/deepseek-ai-dsh-command-goal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-command-goal/model-experience/human-goal-control: + en: b542d90272a9b64e + zh: 9f8bfb4ca7784428 +/deepseek-ai-dsh-command-goal/model-experience/human-goal-control/what-the-model-sees: + en: a4c7a3d502c58794 + zh: a47ab70d7aa4f0a4 +/deepseek-ai-dsh-command-goal/model-experience/human-goal-control/token-effect: + en: 1c48e9c98cee51b0 + zh: 63b2f981bdaf6ca4 +/deepseek-ai-dsh-command-goal/model-experience/human-goal-control/kv-cache-effect: + en: 15426cc075dc65d7 + zh: 496e488693a2bacb +/deepseek-ai-dsh-command-goal/known-limitations-and-deferred-work: + en: df596a8934dba006 + zh: 45b8a32fc0433fe0 +/deepseek-ai-dsh-command-goal/known-limitations-and-deferred-work/dev-note: + en: c7a829d5a6e780fd + zh: 041dc046a223a711 diff --git a/packages/goal/goal-round-driver/README.i18n.yaml b/packages/goal/goal-round-driver/README.i18n.yaml index 35983b7265..5ccda2b766 100644 --- a/packages/goal/goal-round-driver/README.i18n.yaml +++ b/packages/goal/goal-round-driver/README.i18n.yaml @@ -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 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 packages/goal/goal-round-driver/README.md -README.md: c80def6393c0a119c20d59acf4b527856811f47c -README.zh.md: 92f793ac8eba98322bf3781b1ccc30584a0ef66e +/: + en: ac0eab4e811114ab + zh: 5ded4a1b84f8afe1 +/deepseek-ai-dsh-goal-round-driver: + en: e8011e091ba10543 + zh: 77d822a4089d5d24 +/deepseek-ai-dsh-goal-round-driver/summary: + en: 3eb8adb73b51242d + zh: 2cebd67cf56289ea +/deepseek-ai-dsh-goal-round-driver/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-goal-round-driver/use-this-package: + en: 9fdb8ee19fed7701 + zh: bf7f72538c7bbd18 +/deepseek-ai-dsh-goal-round-driver/use-this-package/compose-it: + en: dbf043249119778f + zh: 75a61167426d0d85 +/deepseek-ai-dsh-goal-round-driver/use-this-package/what-each-round-does: + en: a1312339977f1127 + zh: 57450327ff7e7d83 +/deepseek-ai-dsh-goal-round-driver/use-this-package/when-continuation-stops: + en: fc22b566b233d3a1 + zh: 276ee5f35d4524f5 +/deepseek-ai-dsh-goal-round-driver/use-this-package/after-resume-fork-or-unload: + en: 85d5470b1b330330 + zh: e761f9046ba7af8a +/deepseek-ai-dsh-goal-round-driver/understand-the-implementation: + en: 907f73e7cee7269d + zh: 1230e8e9b15655df +/deepseek-ai-dsh-goal-round-driver/understand-the-implementation/design: + en: 58a2316725fe1f38 + zh: d42d60cf02ad518e +/deepseek-ai-dsh-goal-round-driver/understand-the-implementation/source-map: + en: 2636a395ea78f621 + zh: f169bc50b4c79ffb +/deepseek-ai-dsh-goal-round-driver/understand-the-implementation/the-round-prompt: + en: 88c61c1dcb13352b + zh: 8dd618c327469bbf +/deepseek-ai-dsh-goal-round-driver/further-exploration: + en: 4bf1ec9b975f92b7 + zh: 00b4b2eba534c127 +/deepseek-ai-dsh-goal-round-driver/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-goal-round-driver/model-experience/goal-round-prompt: + en: 4d07e0f4df39dd39 + zh: b4b4b1a1ac49133d +/deepseek-ai-dsh-goal-round-driver/model-experience/goal-round-prompt/what-the-model-sees: + en: 627dbb55e83ea545 + zh: f7961cb0d8cee632 +/deepseek-ai-dsh-goal-round-driver/model-experience/goal-round-prompt/token-effect: + en: d754ed8cc26fc2a5 + zh: 75aad6a5759b1fec +/deepseek-ai-dsh-goal-round-driver/model-experience/goal-round-prompt/kv-cache-effect: + en: 261db0e11125cb5c + zh: fcceb0bb63f4e07a +/deepseek-ai-dsh-goal-round-driver/known-limitations-and-deferred-work: + en: 9a392b465bd1b96d + zh: f24e557f8b67020c +/deepseek-ai-dsh-goal-round-driver/known-limitations-and-deferred-work/dev-note: + en: 19c6db37afd5cff4 + zh: 86e849e83cdc1d94 diff --git a/packages/goal/goal/README.i18n.yaml b/packages/goal/goal/README.i18n.yaml index becd6aa8f7..e95a051419 100644 --- a/packages/goal/goal/README.i18n.yaml +++ b/packages/goal/goal/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/goal/goal/README.md -README.md: 8c282dd94ce0548eed426e33f08e509a0cafd800 -README.zh.md: a5b3f7d71365fd01fd99556024cbf948af81c8a8 +/: + en: 6509c63744950c59 + zh: b7d4e056e0591155 +/deepseek-ai-dsh-goal: + en: b8f42df479869337 + zh: 76a71bddc87da324 +/deepseek-ai-dsh-goal/summary: + en: 31ad6391c24650bd + zh: e52f84b741d192b4 +/deepseek-ai-dsh-goal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-goal/use-this-package: + en: 95829ddf63e72e3e + zh: 9bd77a0ce737b2b0 +/deepseek-ai-dsh-goal/use-this-package/when-to-use-it: + en: 44fbecf68641514a + zh: afa1720f5128cf1b +/deepseek-ai-dsh-goal/use-this-package/set-up-the-service: + en: 81d959eecdec4bbd + zh: ff47fb2cba8f1e73 +/deepseek-ai-dsh-goal/use-this-package/session-projection: + en: 251f84f8959a2072 + zh: c57a4d252e12b128 +/deepseek-ai-dsh-goal/use-this-package/drive-the-lifecycle: + en: 622890ced87a44e9 + zh: 6ba1f3f872400452 +/deepseek-ai-dsh-goal/use-this-package/what-survives-and-what-does-not: + en: e5cd2097500a9027 + zh: 3ecae388f839c944 +/deepseek-ai-dsh-goal/use-this-package/observing-a-goal: + en: 3074e4c76de81d22 + zh: 10134afe344dafb3 +/deepseek-ai-dsh-goal/understand-the-implementation: + en: 592af7e68423bd1c + zh: 9b1f08393db1b14e +/deepseek-ai-dsh-goal/understand-the-implementation/design: + en: 6f19e891ffc79754 + zh: 9599e3b142f1e6b5 +/deepseek-ai-dsh-goal/understand-the-implementation/source-map: + en: f0451101cf73da7d + zh: 73176ab69bb63a7f +/deepseek-ai-dsh-goal/understand-the-implementation/events-and-attribution: + en: 502cf61dba8b22ca + zh: 2b6f672bb2ac84ba +/deepseek-ai-dsh-goal/further-exploration: + en: d94098c1e3f3c8cf + zh: f4be4de55703097a +/deepseek-ai-dsh-goal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-goal/model-experience/goal-state-mutations: + en: 6e6274de7991ef9e + zh: be2048ca18b3cbab +/deepseek-ai-dsh-goal/model-experience/goal-state-mutations/what-the-model-sees: + en: 7f3f6cf3e85ca188 + zh: 758596ce93635eab +/deepseek-ai-dsh-goal/model-experience/goal-state-mutations/token-effect: + en: 5c3d2b320679252b + zh: 67156a0cec8c8e60 +/deepseek-ai-dsh-goal/model-experience/goal-state-mutations/kv-cache-effect: + en: 5fcc49f70cf6604d + zh: 39a3ba8fcdfba009 +/deepseek-ai-dsh-goal/known-limitations-and-deferred-work: + en: c116ddcdd86c93df + zh: aa0430d35e8604ff +/deepseek-ai-dsh-goal/known-limitations-and-deferred-work/dev-note: + en: 0b672d0c3b09cd5d + zh: 8f5d79353a6e5d63 diff --git a/packages/goal/tool-goal/README.i18n.yaml b/packages/goal/tool-goal/README.i18n.yaml index abca3cb18d..6edaf7fe64 100644 --- a/packages/goal/tool-goal/README.i18n.yaml +++ b/packages/goal/tool-goal/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/goal/tool-goal/README.md -README.md: c40b9eb302ace23c2448114433eda364083a5293 -README.zh.md: b29848f33bf3692648b4810786cf28bb68cb202a +/: + en: 1965bb8d690c2163 + zh: ccbb80e24190cb70 +/deepseek-ai-dsh-tool-goal: + en: 942b1a25c527fe81 + zh: f688d651470c7c5a +/deepseek-ai-dsh-tool-goal/summary: + en: e949bc54b6e81b98 + zh: 728896898f55353f +/deepseek-ai-dsh-tool-goal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-goal/use-this-package: + en: 0a5939086aa67be0 + zh: c97e18432e623631 +/deepseek-ai-dsh-tool-goal/use-this-package/tools: + en: 1f9ad059567a448a + zh: d3f70b470e9317c4 +/deepseek-ai-dsh-tool-goal/use-this-package/configure-it: + en: e3f5e8d634a488b7 + zh: 04dcf916aa2114d2 +/deepseek-ai-dsh-tool-goal/use-this-package/authority-rules: + en: a00f0dac577c3e9e + zh: 5dedb3dfcce449bc +/deepseek-ai-dsh-tool-goal/understand-the-implementation: + en: 4e9fdb5a89f4baa3 + zh: 50d182467ae1f3a7 +/deepseek-ai-dsh-tool-goal/understand-the-implementation/design: + en: a30f36299c8107f7 + zh: 65e6e1e19aeb5281 +/deepseek-ai-dsh-tool-goal/understand-the-implementation/source-map: + en: 33e8469f99ffecb8 + zh: f1b44e8dd51ffb48 +/deepseek-ai-dsh-tool-goal/understand-the-implementation/tool-output: + en: 79e54f40e0bfbe2b + zh: 895f7ba22749bc07 +/deepseek-ai-dsh-tool-goal/further-exploration: + en: 870f9cbbc201e7f1 + zh: 6fa3e87efd10940b +/deepseek-ai-dsh-tool-goal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-goal/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-goal/model-experience/system-prompt/what-the-model-sees: + en: 7e15cb8b69405476 + zh: 635daea40f39a0e3 +/deepseek-ai-dsh-tool-goal/model-experience/system-prompt/what-the-model-sees/goal-policy: + en: 452e35a67b130e54 + zh: ad6030b6cb0eaabc +/deepseek-ai-dsh-tool-goal/model-experience/system-prompt/token-effect: + en: 0ca47969efda70ab + zh: bfb6dd046182bcfe +/deepseek-ai-dsh-tool-goal/model-experience/system-prompt/kv-cache-effect: + en: 1228efe95b389486 + zh: 0eb2e21c6ab3bc33 +/deepseek-ai-dsh-tool-goal/model-experience/tool-schemas-and-results: + en: cadc497841430a21 + zh: af4cc374d7d16917 +/deepseek-ai-dsh-tool-goal/model-experience/tool-schemas-and-results/what-the-model-sees: + en: a935557ea8afce8e + zh: 3e2b8208d0a22672 +/deepseek-ai-dsh-tool-goal/model-experience/tool-schemas-and-results/token-effect: + en: 636b06a2958786bd + zh: 4bb09f24ef382b3b +/deepseek-ai-dsh-tool-goal/model-experience/tool-schemas-and-results/kv-cache-effect: + en: c2d2e98ce08fb40e + zh: 54d278190a1a9ed5 +/deepseek-ai-dsh-tool-goal/known-limitations-and-deferred-work: + en: c9b0f788467a5062 + zh: 1a94e89fbb2e1e41 +/deepseek-ai-dsh-tool-goal/known-limitations-and-deferred-work/dev-note: + en: 47101daa04549489 + zh: 1a3babd48193c068 diff --git a/packages/guard/README.i18n.yaml b/packages/guard/README.i18n.yaml index 2786fbea58..6b4add8cb5 100644 --- a/packages/guard/README.i18n.yaml +++ b/packages/guard/README.i18n.yaml @@ -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 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 packages/guard/README.md -README.md: 1f001e7fb7198ce20b40e27e46842051f39fab3e -README.zh.md: 5b07481459d9dfc56ed76d4d24780698db54358b +/: + en: 686a2d1a60d83d95 + zh: a83604e78920e5f8 +/guard-loop-hygiene-guard-family: + en: 7ec1ea7779315a9c + zh: 0786cd17a5bc5980 +/guard-loop-hygiene-guard-family/summary: + en: 8569a7ad49a968c9 + zh: 911e6327d70294a8 +/guard-loop-hygiene-guard-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/guard-loop-hygiene-guard-family/packages: + en: 94709a168b24fa55 + zh: 3eb300975fdc440c +/guard-loop-hygiene-guard-family/related-documentation: + en: 9289eddb3e91bbb3 + zh: 5b2ae5b3986fab82 +/guard-loop-hygiene-guard-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/guard/repeat-tool-reminder/README.i18n.yaml b/packages/guard/repeat-tool-reminder/README.i18n.yaml index 04a4a37cdd..be3de45e07 100644 --- a/packages/guard/repeat-tool-reminder/README.i18n.yaml +++ b/packages/guard/repeat-tool-reminder/README.i18n.yaml @@ -1,6 +1,85 @@ -# 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 packages/guard/repeat-tool-reminder/README.md -README.md: 13035b68e80c9eea3e87bb7c8315fbaf9b84a3c3 -README.zh.md: 27d142988f77c8ab03a81701ff7b89f55ca1668b +/: + en: 8eb3c6cc73da87aa + zh: 4059266a0486ff38 +/deepseek-ai-dsh-repeat-tool-reminder: + en: add59e0d04eb964d + zh: d5224b61ea4e9413 +/deepseek-ai-dsh-repeat-tool-reminder/summary: + en: 36ac7ba52bc4fee0 + zh: 39894a1c067754c4 +/deepseek-ai-dsh-repeat-tool-reminder/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-repeat-tool-reminder/use-this-package: + en: dcffe01b4cde60e0 + zh: 9a105a1d0121b990 +/deepseek-ai-dsh-repeat-tool-reminder/use-this-package/when-to-choose-it: + en: c6b47c1f0034c021 + zh: 5a2097425754d8b0 +/deepseek-ai-dsh-repeat-tool-reminder/use-this-package/setting-the-thresholds-and-scope: + en: fc64919ff223096d + zh: dd22a19eeffa9192 +/deepseek-ai-dsh-repeat-tool-reminder/use-this-package/what-you-get: + en: 5cf91a5809d2c68a + zh: 8f60231436b863b8 +/deepseek-ai-dsh-repeat-tool-reminder/understand-the-implementation: + en: dd6d7a1571af5a9a + zh: eba00095dfc1c92a +/deepseek-ai-dsh-repeat-tool-reminder/understand-the-implementation/design-philosophy: + en: 7bca56e3cba01338 + zh: 530fda764d226f39 +/deepseek-ai-dsh-repeat-tool-reminder/understand-the-implementation/detection-the-repeat-chain: + en: b76a432aad14aa90 + zh: b0cd916f7897fb42 +/deepseek-ai-dsh-repeat-tool-reminder/understand-the-implementation/reminder-delivery: + en: ebd2a7d704e0a7be + zh: 438213ad0412a64e +/deepseek-ai-dsh-repeat-tool-reminder/understand-the-implementation/source-map: + en: 567a964105e1340b + zh: 7a8b062b2d9b39d1 +/deepseek-ai-dsh-repeat-tool-reminder/further-exploration: + en: 77b646e29c1aefa8 + zh: f63b7df7412e524d +/deepseek-ai-dsh-repeat-tool-reminder/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/first-threshold-context-message: + en: 798ea2afb5efde7c + zh: 14fae1e31d882e8a +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/first-threshold-context-message/what-the-model-sees: + en: cf01847a41f3fe3d + zh: aebeb78ac617999c +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/first-threshold-context-message/what-the-model-sees/first-threshold-reminder: + en: 38c7616427fa569d + zh: fd443fab22a57894 +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/first-threshold-context-message/token-effect: + en: 111c6d779b73194b + zh: 09b0e7073308ba91 +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/first-threshold-context-message/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 51155536aab03002 +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/later-threshold-context-message: + en: edfa41e2478fb579 + zh: 76b87439f3bef43c +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/later-threshold-context-message/what-the-model-sees: + en: cddb7a41c335141f + zh: 7ea33c6570bb2bd0 +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/later-threshold-context-message/what-the-model-sees/later-threshold-reminder: + en: 341114f2e5e9c05b + zh: 8938e7d0f7fc150b +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/later-threshold-context-message/token-effect: + en: 2e92c0d5a90c482b + zh: 07ba3851b725f06d +/deepseek-ai-dsh-repeat-tool-reminder/model-experience/later-threshold-context-message/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 51155536aab03002 +/deepseek-ai-dsh-repeat-tool-reminder/known-limitations-and-deferred-work: + en: 59ffa89bf74f8da2 + zh: 7652f49b9eac40d6 +/deepseek-ai-dsh-repeat-tool-reminder/known-limitations-and-deferred-work/dev-note: + en: ef308dcf213685c7 + zh: 5830b6bbeea9863f diff --git a/packages/guard/timeout-policy/README.i18n.yaml b/packages/guard/timeout-policy/README.i18n.yaml index a85def516f..ec8f7ff38e 100644 --- a/packages/guard/timeout-policy/README.i18n.yaml +++ b/packages/guard/timeout-policy/README.i18n.yaml @@ -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 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 packages/guard/timeout-policy/README.md -README.md: a9381595b25adcdbf2c4bf5e2c7034580e7813e7 -README.zh.md: 27938b1793bf75a3df809e16782857701d1b11cb +/: + en: 7020f47046dc8148 + zh: 191dea4c788f374b +/deepseek-ai-dsh-tool-call-timeout-policy: + en: 0bab94e0d9903464 + zh: 417ef898055734ba +/deepseek-ai-dsh-tool-call-timeout-policy/summary: + en: 745e3c8642ed9ea9 + zh: c8cfd6a3b0c3c9bf +/deepseek-ai-dsh-tool-call-timeout-policy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-call-timeout-policy/use-this-package: + en: 1235dce86c24bdd6 + zh: d96b544b0b745766 +/deepseek-ai-dsh-tool-call-timeout-policy/use-this-package/when-to-choose-it: + en: 2c6495054dfaf09c + zh: 7f2d65c3202d75f3 +/deepseek-ai-dsh-tool-call-timeout-policy/use-this-package/setting-it-up: + en: 42c3fee6ddf0e952 + zh: 6b7728300cf5bfdc +/deepseek-ai-dsh-tool-call-timeout-policy/use-this-package/what-you-get: + en: 339ff1d6001f3def + zh: c3e378abc7c58fa4 +/deepseek-ai-dsh-tool-call-timeout-policy/understand-the-implementation: + en: 9bdd0f9388915825 + zh: c101ec504869d187 +/deepseek-ai-dsh-tool-call-timeout-policy/understand-the-implementation/design-philosophy: + en: 39f08d20a467b458 + zh: 61f9e8ba3a5479d2 +/deepseek-ai-dsh-tool-call-timeout-policy/understand-the-implementation/how-a-deadline-is-armed-and-mapped: + en: 4c2f31d760d5ad4b + zh: 42e5c42675c32dcc +/deepseek-ai-dsh-tool-call-timeout-policy/understand-the-implementation/composing-with-other-wrappers: + en: 09fba7333cf511f6 + zh: 965c60634d370287 +/deepseek-ai-dsh-tool-call-timeout-policy/understand-the-implementation/source-map: + en: 35abf9419848ba92 + zh: 3c08b161064abdcd +/deepseek-ai-dsh-tool-call-timeout-policy/further-exploration: + en: fb2426b1c4c3da4a + zh: ff9a7cd6a6b9f631 +/deepseek-ai-dsh-tool-call-timeout-policy/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-call-timeout-policy/model-experience/conditional-tool-result: + en: 7877631ca859b191 + zh: fb6f2aa33f70b82c +/deepseek-ai-dsh-tool-call-timeout-policy/model-experience/conditional-tool-result/what-the-model-sees: + en: 1fd9832261036f56 + zh: 245b04969f3bc26d +/deepseek-ai-dsh-tool-call-timeout-policy/model-experience/conditional-tool-result/token-effect: + en: 063d0485b8631d04 + zh: 13c1a680cfa9f02b +/deepseek-ai-dsh-tool-call-timeout-policy/model-experience/conditional-tool-result/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-tool-call-timeout-policy/known-limitations-and-deferred-work: + en: 8b51b07b2fc6d1bc + zh: f65e3760a6ea5f2f +/deepseek-ai-dsh-tool-call-timeout-policy/known-limitations-and-deferred-work/dev-note: + en: 93e2b2a5ae84f266 + zh: 63283f6b1b2da63f diff --git a/packages/hooks/README.i18n.yaml b/packages/hooks/README.i18n.yaml index 196cf758eb..407a6eeabf 100644 --- a/packages/hooks/README.i18n.yaml +++ b/packages/hooks/README.i18n.yaml @@ -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 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 packages/hooks/README.md -README.md: 945fcc79e71d67459abac8cd592939ba05294397 -README.zh.md: cbc1ac2d1d50e2521b17a6f99850ccb00cda4320 +/: + en: d66bed32f14204db + zh: 71dfbd7adec88262 +/packages-hooks: + en: c7be9e13f2038f5d + zh: 348d34f2f6f63641 +/packages-hooks/summary: + en: 878fda232af5ba6b + zh: 30f93c4fcf0919b6 +/packages-hooks/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-hooks/packages: + en: d6fc8d4395a61393 + zh: e010dfac4e3f1e9b +/packages-hooks/related-documentation: + en: 38fbc5b3260efa8f + zh: 4860d24743015ad4 +/packages-hooks/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/hooks/hook-protocol/README.i18n.yaml b/packages/hooks/hook-protocol/README.i18n.yaml index bcdcb92f33..bd23e8f5ce 100644 --- a/packages/hooks/hook-protocol/README.i18n.yaml +++ b/packages/hooks/hook-protocol/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/hooks/hook-protocol/README.md -README.md: 383a75c6943817d8e6b84e62564cbdd5dcd511e5 -README.zh.md: f3b6a7a03ee8c7f350c2d0f14a747fdb7d889a5c +/: + en: 7cfe3761eedff848 + zh: 80b0bed5743d0924 +/deepseek-ai-dsh-hook-protocol: + en: bcf8ec6c43311fb7 + zh: 4ef45c5aaced087d +/deepseek-ai-dsh-hook-protocol/summary: + en: e8ab847d0db16043 + zh: 5c1e72f4b4a54fe1 +/deepseek-ai-dsh-hook-protocol/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-hook-protocol/use-this-package: + en: 4b29a18ac60be5bb + zh: 4a02b48f9e914101 +/deepseek-ai-dsh-hook-protocol/use-this-package/when-to-choose-it: + en: 435c1a335f8dfccf + zh: efe58c06dc40d4d9 +/deepseek-ai-dsh-hook-protocol/use-this-package/what-a-hook-can-do: + en: 043f54b3a5b518a7 + zh: a4115083a9b1cef1 +/deepseek-ai-dsh-hook-protocol/use-this-package/what-you-see-when-hooks-run: + en: ba2d6ed1db063f53 + zh: ab1b8d72dccd2ff1 +/deepseek-ai-dsh-hook-protocol/understand-the-implementation: + en: 08b3960150e9c5e2 + zh: 6bb2f236d697de01 +/deepseek-ai-dsh-hook-protocol/understand-the-implementation/processing-pipeline: + en: 5672f4151de0b50a + zh: d8fdc68d806e0d7b +/deepseek-ai-dsh-hook-protocol/understand-the-implementation/hook-session-events: + en: ad77f468168fcbff + zh: 897bc6880fe76e1b +/deepseek-ai-dsh-hook-protocol/understand-the-implementation/design-philosophy: + en: ccf3eacdd2219631 + zh: 0732935a47a17c9d +/deepseek-ai-dsh-hook-protocol/understand-the-implementation/source-map: + en: d613d9bd98d499fb + zh: afe2939d7df250ea +/deepseek-ai-dsh-hook-protocol/further-exploration: + en: d93c5107a12af16c + zh: 89da3abc953a4c6b +/deepseek-ai-dsh-hook-protocol/model-experience: + en: 53d2f59435a4a88f + zh: 79c8fc2849b20718 +/deepseek-ai-dsh-hook-protocol/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: cb3c8823f41e7afe +/deepseek-ai-dsh-hook-protocol/known-limitations-and-deferred-work: + en: 1ca6146a077a7d2d + zh: 369741569178fc79 +/deepseek-ai-dsh-hook-protocol/known-limitations-and-deferred-work/dev-note: + en: ac1d08360a93382b + zh: 6c58749bae9a6e65 +/deepseek-ai-dsh-hook-protocol/known-limitations-and-deferred-work/dev-note/future-run-level-halt: + en: bfb3db50de22c1d0 + zh: 2a979359b0edbbe7 diff --git a/packages/hooks/hooks-claude-code/README.i18n.yaml b/packages/hooks/hooks-claude-code/README.i18n.yaml index 49de5b8053..d50545f54a 100644 --- a/packages/hooks/hooks-claude-code/README.i18n.yaml +++ b/packages/hooks/hooks-claude-code/README.i18n.yaml @@ -1,6 +1,88 @@ -# 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 packages/hooks/hooks-claude-code/README.md -README.md: 8a9f235019d588306ba33e77cf57e9c8f41e88bd -README.zh.md: c7e3607b57a719024ce6df9527c40da2d6d5b1f1 +/: + en: 3570440302708236 + zh: 6e4217f2856879a1 +/deepseek-ai-dsh-hooks-claude-code: + en: 75bf646e3e8954d0 + zh: b03df967b39b5b1a +/deepseek-ai-dsh-hooks-claude-code/summary: + en: fd56bd2d9107d126 + zh: de7e8358840e23b1 +/deepseek-ai-dsh-hooks-claude-code/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-hooks-claude-code/use-this-package: + en: af7c3b8bcce24e7f + zh: 6b5225e34cbd1c85 +/deepseek-ai-dsh-hooks-claude-code/use-this-package/when-to-choose-it: + en: 5fdf4ff17e6d9a2e + zh: 82979c137758005d +/deepseek-ai-dsh-hooks-claude-code/use-this-package/smallest-working-setup: + en: b2724490aee1f8e0 + zh: abbcb0eebb3207a4 +/deepseek-ai-dsh-hooks-claude-code/use-this-package/what-your-hooks-can-do: + en: 6c3b126e6607c311 + zh: 33199f443edb2824 +/deepseek-ai-dsh-hooks-claude-code/use-this-package/how-hooks-run-and-fail: + en: 98d13f2e7207e3f3 + zh: 4e0336b32c2775e9 +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation: + en: d33ddd080880b3f5 + zh: 64328f5239c26752 +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/hook-point-mapping: + en: d315f54ec60f8860 + zh: 53b7a6531d9f4bbb +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/payloads-and-environment: + en: 0389b516653c7f45 + zh: 15ec2182113a9aa4 +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/matcher-subjects-and-serial-execution: + en: 0f30690502687688 + zh: 19d4ec653c19f00e +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/detached-runs-and-disposal: + en: b04f07b845653345 + zh: 9159c4a908e292cb +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/design-philosophy: + en: e9dc2e482e9a7b50 + zh: 5fa4e92b75884f93 +/deepseek-ai-dsh-hooks-claude-code/understand-the-implementation/source-map: + en: e09d368cbacd0d37 + zh: 1c5d9060facbe340 +/deepseek-ai-dsh-hooks-claude-code/further-exploration: + en: 03aa2ae7d5d5e675 + zh: 97c723b6905d31de +/deepseek-ai-dsh-hooks-claude-code/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-hooks-claude-code/model-experience/hook-provided-context: + en: 7b2f5028dacd7146 + zh: e4d226735f7abfc2 +/deepseek-ai-dsh-hooks-claude-code/model-experience/hook-provided-context/what-the-model-sees: + en: 7b6edde085633c5f + zh: caadcfe8b9364c6d +/deepseek-ai-dsh-hooks-claude-code/model-experience/hook-provided-context/token-effect: + en: b70e3524b160cd63 + zh: e1011ee18d1bf12b +/deepseek-ai-dsh-hooks-claude-code/model-experience/hook-provided-context/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-hooks-claude-code/model-experience/blocked-prompt-or-tool-outcome: + en: 82be8d95921ef639 + zh: 11c185068ec18932 +/deepseek-ai-dsh-hooks-claude-code/model-experience/blocked-prompt-or-tool-outcome/what-the-model-sees: + en: 1313b662532a2bda + zh: 4002d38540286a94 +/deepseek-ai-dsh-hooks-claude-code/model-experience/blocked-prompt-or-tool-outcome/token-effect: + en: 7c13e10d2a0e3151 + zh: 54ffd88bca4fce3a +/deepseek-ai-dsh-hooks-claude-code/model-experience/blocked-prompt-or-tool-outcome/kv-cache-effect: + en: f84fa6c0511cd113 + zh: f6ce9cdd47a72684 +/deepseek-ai-dsh-hooks-claude-code/known-limitations-and-deferred-work: + en: 23ab8cf19542ea03 + zh: e56f896b4393c1c5 +/deepseek-ai-dsh-hooks-claude-code/known-limitations-and-deferred-work/dev-note: + en: b1e9a373ae8b7bb0 + zh: 30446fe59d5ec8be diff --git a/packages/hooks/hooks-codex/README.i18n.yaml b/packages/hooks/hooks-codex/README.i18n.yaml index 2ca40dc327..23c5895c36 100644 --- a/packages/hooks/hooks-codex/README.i18n.yaml +++ b/packages/hooks/hooks-codex/README.i18n.yaml @@ -1,6 +1,88 @@ -# 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 packages/hooks/hooks-codex/README.md -README.md: 14c7df7a87faf4735ed95bb1f94e597b721f0a00 -README.zh.md: b26eebe4ca1a21909e2cd2f6ea0e9ef6a2c87463 +/: + en: 9ee4cd57e234a8ff + zh: 59e5d8f84fa762ff +/deepseek-ai-dsh-hooks-codex: + en: d3c2f23b8348572e + zh: 507dc13c5c4c16b2 +/deepseek-ai-dsh-hooks-codex/summary: + en: e02e93d326449402 + zh: 5de5f527d2182537 +/deepseek-ai-dsh-hooks-codex/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-hooks-codex/use-this-package: + en: 86b84a66b82845f8 + zh: bd7fbd4e066d06f8 +/deepseek-ai-dsh-hooks-codex/use-this-package/when-to-choose-it: + en: 44d77bc8d948bc6d + zh: 81afaf977570f4ef +/deepseek-ai-dsh-hooks-codex/use-this-package/smallest-working-setup: + en: 2b8374fe112d8125 + zh: 9067b8cb714e911b +/deepseek-ai-dsh-hooks-codex/use-this-package/what-your-hooks-can-do: + en: dee90142e7e87214 + zh: 8d83d7e0208ba1ef +/deepseek-ai-dsh-hooks-codex/use-this-package/how-hooks-run-and-fail: + en: 03b55a30e9ec5f0c + zh: 258907341232ca45 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation: + en: d33ddd080880b3f5 + zh: 64328f5239c26752 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/hook-point-mapping: + en: 755ca39231841ffc + zh: 30e793dfaf11a336 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/payloads-and-environment: + en: 542413d7e8cfeaf4 + zh: 3b5d0d3fdd0231f2 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/matcher-subjects-and-serial-execution: + en: fd52c0eb70bf0094 + zh: 6415f109fbd763d3 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/detached-runs-and-disposal: + en: b45f1eafa8f4f467 + zh: a073a76e1d7670e6 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/design-philosophy: + en: 6f882aab3d924115 + zh: 7ed83a6d16a22c77 +/deepseek-ai-dsh-hooks-codex/understand-the-implementation/source-map: + en: 83f46561508c0787 + zh: 11ba5b16d92dfe8c +/deepseek-ai-dsh-hooks-codex/further-exploration: + en: acab570c5bd3223f + zh: a78803c243239aac +/deepseek-ai-dsh-hooks-codex/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-hooks-codex/model-experience/hook-provided-context: + en: 7b2f5028dacd7146 + zh: e4d226735f7abfc2 +/deepseek-ai-dsh-hooks-codex/model-experience/hook-provided-context/what-the-model-sees: + en: 3f94df641a34a437 + zh: 21bc5823229dbb6c +/deepseek-ai-dsh-hooks-codex/model-experience/hook-provided-context/token-effect: + en: b70e3524b160cd63 + zh: e1011ee18d1bf12b +/deepseek-ai-dsh-hooks-codex/model-experience/hook-provided-context/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-hooks-codex/model-experience/blocked-prompt-or-tool-outcome: + en: 82be8d95921ef639 + zh: 11c185068ec18932 +/deepseek-ai-dsh-hooks-codex/model-experience/blocked-prompt-or-tool-outcome/what-the-model-sees: + en: fd44027de2255f3f + zh: d880eb4d2d3f6af8 +/deepseek-ai-dsh-hooks-codex/model-experience/blocked-prompt-or-tool-outcome/token-effect: + en: 7c13e10d2a0e3151 + zh: 54ffd88bca4fce3a +/deepseek-ai-dsh-hooks-codex/model-experience/blocked-prompt-or-tool-outcome/kv-cache-effect: + en: f84fa6c0511cd113 + zh: f6ce9cdd47a72684 +/deepseek-ai-dsh-hooks-codex/known-limitations-and-deferred-work: + en: 11c88847e78bdbc5 + zh: dea334c689116d0f +/deepseek-ai-dsh-hooks-codex/known-limitations-and-deferred-work/dev-note: + en: 5f03857c3bb6834a + zh: 54f485d08db9020f diff --git a/packages/host/README.i18n.yaml b/packages/host/README.i18n.yaml index c45b78cfa1..cde1525523 100644 --- a/packages/host/README.i18n.yaml +++ b/packages/host/README.i18n.yaml @@ -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 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 packages/host/README.md -README.md: f5e7832539404b8fb1fb856973f08d5dd5c87eb5 -README.zh.md: 402358f4f4097630ba8deda4551d6bc52ff01b11 +/: + en: 1581f6bf83f9f0f4 + zh: 328e9539b83f5df2 +/host-web-gui-host-half: + en: dfb700c867632d7f + zh: 8afebea57ae7845a +/host-web-gui-host-half/summary: + en: 2e87442a03e973ee + zh: 1cb9d4ff114e101d +/host-web-gui-host-half/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/host-web-gui-host-half/packages: + en: 4c383f11f07cdefe + zh: 0de3c2aa07233540 +/host-web-gui-host-half/related-documentation: + en: c8a410ebbd2f0a3a + zh: bcaeb195ff8d8593 +/host-web-gui-host-half/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/host/directory-picker-auto/README.i18n.yaml b/packages/host/directory-picker-auto/README.i18n.yaml index 99c40bcd69..06c6c884a8 100644 --- a/packages/host/directory-picker-auto/README.i18n.yaml +++ b/packages/host/directory-picker-auto/README.i18n.yaml @@ -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 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 packages/host/directory-picker-auto/README.md -README.md: a36d7e115f78089b85c79ae8036d7199df74b821 -README.zh.md: 283f8c5bcbfabfa4fdeafc73283ff140ac1697fe +/: + en: 347a16b9a8de1f7c + zh: 5fb4c04b69c2f947 +/deepseek-ai-dsh-host-directory-picker-auto: + en: 919d44a5781ac8be + zh: 0e7a812a5af49125 +/deepseek-ai-dsh-host-directory-picker-auto/summary: + en: e50d48e63294e9c5 + zh: b53e3aeb1fa4b892 +/deepseek-ai-dsh-host-directory-picker-auto/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-directory-picker-auto/use-this-package: + en: 9ed11c3e0a03da01 + zh: ffa5e373dfc99bb8 +/deepseek-ai-dsh-host-directory-picker-auto/use-this-package/how-the-choice-is-made: + en: b7705f6a53ed31f3 + zh: 561d3b42170a513a +/deepseek-ai-dsh-host-directory-picker-auto/use-this-package/what-you-get: + en: 6571c17daecc1e29 + zh: d70089d67e41a32e +/deepseek-ai-dsh-host-directory-picker-auto/use-this-package/pinning-an-interaction: + en: a7e61292ef261aa8 + zh: ae8bb5a1ada21d21 +/deepseek-ai-dsh-host-directory-picker-auto/use-this-package/observable-failures: + en: 764e80ffbfd4d19e + zh: dd2f61b462023031 +/deepseek-ai-dsh-host-directory-picker-auto/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-directory-picker-auto/understand-the-implementation/design-concept: + en: abc8d3962e4580c3 + zh: 4442dde69faf680f +/deepseek-ai-dsh-host-directory-picker-auto/understand-the-implementation/the-resolution-table: + en: 70aa594193336a2a + zh: 9ff39c2878e8f471 +/deepseek-ai-dsh-host-directory-picker-auto/understand-the-implementation/source-map: + en: 43a0268a54380a72 + zh: a8f8cd0c3f502e6b +/deepseek-ai-dsh-host-directory-picker-auto/further-exploration: + en: 5c8908d5c957548a + zh: f3671fbb2f2490d9 +/deepseek-ai-dsh-host-directory-picker-auto/model-experience: + en: 4cf1e8312ed3f5e6 + zh: 5410cb77865fca9e +/deepseek-ai-dsh-host-directory-picker-auto/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-directory-picker-auto/known-limitations-and-deferred-work: + en: 2caf1f412c050856 + zh: 0e71bc66bc54bbb4 +/deepseek-ai-dsh-host-directory-picker-auto/known-limitations-and-deferred-work/dev-note: + en: ac7266ba5ad8bd79 + zh: d9143a2061a07cfd diff --git a/packages/host/directory-picker-browse/README.i18n.yaml b/packages/host/directory-picker-browse/README.i18n.yaml index 1e609eb2fe..e5d1be5078 100644 --- a/packages/host/directory-picker-browse/README.i18n.yaml +++ b/packages/host/directory-picker-browse/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/host/directory-picker-browse/README.md -README.md: 9618b6b2f7101aa5dd145fd2c8f7a659a44b0308 -README.zh.md: 20c9267bd47dcf1500985465ea620027d7a47e99 +/: + en: bea16365bc3196b2 + zh: ba6b3c899a0f20b2 +/deepseek-ai-dsh-host-directory-picker-browse: + en: 6fbc8d553ca1d797 + zh: 6503d8fa5542b0f2 +/deepseek-ai-dsh-host-directory-picker-browse/summary: + en: 49d1427956180353 + zh: 15955b505310295a +/deepseek-ai-dsh-host-directory-picker-browse/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-directory-picker-browse/use-this-package: + en: 943e692ce514daf6 + zh: 917f508c4c612eae +/deepseek-ai-dsh-host-directory-picker-browse/use-this-package/listing-a-directory: + en: fc4fc8e16e37df02 + zh: d609eeb57557e5cb +/deepseek-ai-dsh-host-directory-picker-browse/use-this-package/creating-a-directory: + en: 71acb6e2f9b6176d + zh: 64e0bd932507dfe9 +/deepseek-ai-dsh-host-directory-picker-browse/use-this-package/observable-failures: + en: 3f136f768deaab29 + zh: 39eef7ad16271cdb +/deepseek-ai-dsh-host-directory-picker-browse/use-this-package/configuration: + en: a9137892248ac644 + zh: ad3bee71ab003f94 +/deepseek-ai-dsh-host-directory-picker-browse/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-directory-picker-browse/understand-the-implementation/design-concept: + en: cec8eab00b0484b9 + zh: 213a5cf9f61bd0e0 +/deepseek-ai-dsh-host-directory-picker-browse/understand-the-implementation/the-fully-qualified-fence: + en: b547791a9cd9d9f0 + zh: fd62beb4b2cac303 +/deepseek-ai-dsh-host-directory-picker-browse/understand-the-implementation/abort-and-probing: + en: adffb1740e726f22 + zh: edfe4a1f3141a1b5 +/deepseek-ai-dsh-host-directory-picker-browse/understand-the-implementation/source-map: + en: 1a8d1b820a0f97e7 + zh: 377cc9d4832f93df +/deepseek-ai-dsh-host-directory-picker-browse/further-exploration: + en: 25ae7d1a481cacca + zh: f49741dd1677000d +/deepseek-ai-dsh-host-directory-picker-browse/model-experience: + en: cdbb9c75fbb91bb5 + zh: 35047dda1956f0ac +/deepseek-ai-dsh-host-directory-picker-browse/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-directory-picker-browse/known-limitations-and-deferred-work: + en: 45c0c8ff249e6119 + zh: d7e4ff77f5978fba +/deepseek-ai-dsh-host-directory-picker-browse/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/host/directory-picker-native/README.i18n.yaml b/packages/host/directory-picker-native/README.i18n.yaml index dd7ea6cc66..0b51f0276e 100644 --- a/packages/host/directory-picker-native/README.i18n.yaml +++ b/packages/host/directory-picker-native/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/host/directory-picker-native/README.md -README.md: 3f980831848965b976e32b0e5ef25abb77fe4e6e -README.zh.md: 7a221cbbfebf3d79534e049800e26dab6ca39ad3 +/: + en: caa1e08492610d5a + zh: ea5b4fca758305d4 +/deepseek-ai-dsh-host-directory-picker-native: + en: f8f2ccf11332c1c1 + zh: 58075651e5dd36d9 +/deepseek-ai-dsh-host-directory-picker-native/summary: + en: d02a09798cbe9a37 + zh: c0231f9dacf8f6d0 +/deepseek-ai-dsh-host-directory-picker-native/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-directory-picker-native/use-this-package: + en: ae1b7eabeea5047d + zh: 192d3f3bdb96b5eb +/deepseek-ai-dsh-host-directory-picker-native/use-this-package/when-to-choose-it: + en: b515ea015fb8a7e8 + zh: faedbf0a30b28062 +/deepseek-ai-dsh-host-directory-picker-native/use-this-package/what-an-operator-experiences: + en: 6ea5dc02d78653c1 + zh: 5d247656f3650d6f +/deepseek-ai-dsh-host-directory-picker-native/use-this-package/observable-failures: + en: 43926a0387f0ce2b + zh: 43c2051a64f48d4c +/deepseek-ai-dsh-host-directory-picker-native/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-directory-picker-native/understand-the-implementation/design-concept: + en: 98afddc74b2d7010 + zh: 39ed0d1a2508f78e +/deepseek-ai-dsh-host-directory-picker-native/understand-the-implementation/platform-mechanics: + en: a78d75054b81753a + zh: 52867e73630b1be2 +/deepseek-ai-dsh-host-directory-picker-native/understand-the-implementation/source-map: + en: 22ecabd6b74d6ecb + zh: af59381cf2957b68 +/deepseek-ai-dsh-host-directory-picker-native/further-exploration: + en: 4ffff44b86ad443d + zh: 5ce3409c011c391d +/deepseek-ai-dsh-host-directory-picker-native/model-experience: + en: cdbb9c75fbb91bb5 + zh: 35047dda1956f0ac +/deepseek-ai-dsh-host-directory-picker-native/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-directory-picker-native/known-limitations-and-deferred-work: + en: 08faf27d90fde463 + zh: b8edfb7ec238f2b4 +/deepseek-ai-dsh-host-directory-picker-native/known-limitations-and-deferred-work/dev-note: + en: 321aef90f4cdb291 + zh: c6cdc00db1ee9a42 diff --git a/packages/host/directory-picker/README.i18n.yaml b/packages/host/directory-picker/README.i18n.yaml index 9d5e6d6624..a1e583a299 100644 --- a/packages/host/directory-picker/README.i18n.yaml +++ b/packages/host/directory-picker/README.i18n.yaml @@ -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 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 packages/host/directory-picker/README.md -README.md: 5dc44cbf8a615e2ba4fe15656de5b5d01b75b7b4 -README.zh.md: 972f5631ebc06d42b6b48c741147346e8dab5c79 +/: + en: 12d81f579b3578c5 + zh: 31ceb9bec2a62864 +/deepseek-ai-dsh-host-directory-picker: + en: e84723c63aadd64b + zh: 352d628e628db0b8 +/deepseek-ai-dsh-host-directory-picker/summary: + en: eccb4c3b89bf1072 + zh: 97f245651d77ec7c +/deepseek-ai-dsh-host-directory-picker/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-directory-picker/use-this-package: + en: 05f272a3dc5484cb + zh: 0cc21b2d26fc0ff0 +/deepseek-ai-dsh-host-directory-picker/use-this-package/choosing-a-backend: + en: 74e78cb98af5353d + zh: 0b77d2b2c04d7bba +/deepseek-ai-dsh-host-directory-picker/use-this-package/the-capability-contract: + en: cb6a87e5fa0dcda6 + zh: 721c2c9271f633df +/deepseek-ai-dsh-host-directory-picker/use-this-package/what-rows-carry: + en: 9842d42847a8240f + zh: e3bba4ee8075e6bc +/deepseek-ai-dsh-host-directory-picker/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-directory-picker/understand-the-implementation/design-concept: + en: 83c5f6025b89178a + zh: 8e7c011376abef02 +/deepseek-ai-dsh-host-directory-picker/understand-the-implementation/the-merge-extensible-vocabulary: + en: 3a5018ce8b2b8a6f + zh: 6d27549330773627 +/deepseek-ai-dsh-host-directory-picker/understand-the-implementation/source-map: + en: 742ee37fe9c70d93 + zh: 93f0371cc6ec6dae +/deepseek-ai-dsh-host-directory-picker/understand-the-implementation/failure-vocabulary: + en: 410862f3762b441a + zh: f15318e549388618 +/deepseek-ai-dsh-host-directory-picker/further-exploration: + en: b754663543f57bea + zh: 3643038842112e2f +/deepseek-ai-dsh-host-directory-picker/model-experience: + en: 90a8149ae911c396 + zh: 887d434607099162 +/deepseek-ai-dsh-host-directory-picker/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-directory-picker/known-limitations-and-deferred-work: + en: 8c2c5c2dcb2bd5ec + zh: 17005c66ae6029ad +/deepseek-ai-dsh-host-directory-picker/known-limitations-and-deferred-work/dev-note: + en: 9a5e8587ac555934 + zh: b5bb3a7d1702b055 diff --git a/packages/host/frontend-static/README.i18n.yaml b/packages/host/frontend-static/README.i18n.yaml index d9297be421..f651511555 100644 --- a/packages/host/frontend-static/README.i18n.yaml +++ b/packages/host/frontend-static/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/host/frontend-static/README.md -README.md: e9bf19b48acfbc8c1513b2b64226e17faf1dc2de -README.zh.md: 3021d6de08c6ab04732389423d0ae96846992dfe +/: + en: 13405cfbbb63c41c + zh: 7597374eb205df97 +/deepseek-ai-dsh-host-frontend-static: + en: a7cd4201b26f235e + zh: 466d0b60950685b4 +/deepseek-ai-dsh-host-frontend-static/summary: + en: 788005d86b2cf415 + zh: 5d3073e3e5144084 +/deepseek-ai-dsh-host-frontend-static/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-frontend-static/use-this-package: + en: a1ccc40c13683372 + zh: b37e4c22f6cb83ca +/deepseek-ai-dsh-host-frontend-static/use-this-package/minimal-configuration: + en: c58118ab4aba9bac + zh: 334fcd54edcae152 +/deepseek-ai-dsh-host-frontend-static/use-this-package/what-the-server-enforces: + en: 3bd43604d1195427 + zh: 4912adee677ac589 +/deepseek-ai-dsh-host-frontend-static/use-this-package/observable-failures: + en: 7b6cca6ed823f515 + zh: 30b5a5c594e8f1b8 +/deepseek-ai-dsh-host-frontend-static/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-frontend-static/understand-the-implementation/design-concept: + en: b371a886c39f0947 + zh: b03c5f73cb6678f9 +/deepseek-ai-dsh-host-frontend-static/understand-the-implementation/the-traversal-fence: + en: 0ca9ccfdf4101cf1 + zh: 5a01e561397afcb1 +/deepseek-ai-dsh-host-frontend-static/understand-the-implementation/source-map: + en: 6e2681b3537ebc3c + zh: ce272423ca550951 +/deepseek-ai-dsh-host-frontend-static/further-exploration: + en: d2338fa56a68ea21 + zh: 81b84ba73f59766b +/deepseek-ai-dsh-host-frontend-static/model-experience: + en: 731366616bc410a6 + zh: ce51eb296a6efddb +/deepseek-ai-dsh-host-frontend-static/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-frontend-static/known-limitations-and-deferred-work: + en: 1c47bab1d5936873 + zh: 737d7188036e7bde +/deepseek-ai-dsh-host-frontend-static/known-limitations-and-deferred-work/dev-note: + en: b0c11e19ebc773d3 + zh: 897d6eaf60489227 diff --git a/packages/host/open-in-app/README.i18n.yaml b/packages/host/open-in-app/README.i18n.yaml index 6d300a6296..b518081699 100644 --- a/packages/host/open-in-app/README.i18n.yaml +++ b/packages/host/open-in-app/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/host/open-in-app/README.md -README.md: 39cc7b854725aab363c4c42ad1ab27f99718e75e -README.zh.md: c47a47c43f3dcf7b842af2bf57469c7b09dc49c9 +/: + en: fbd3cf9953271b10 + zh: 6efe4d036544d0d2 +/deepseek-ai-dsh-host-open-in-app: + en: 91ff0fbf5f0b95b9 + zh: 13a18d1a9bc38da0 +/deepseek-ai-dsh-host-open-in-app/summary: + en: 894ed6d5eec55b71 + zh: b94ae1411966f145 +/deepseek-ai-dsh-host-open-in-app/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-host-open-in-app/use-this-package: + en: c1217da1d6bdfd36 + zh: cbb05caa1a7764d0 +/deepseek-ai-dsh-host-open-in-app/use-this-package/when-to-choose-it: + en: fcf8f52b6cf1f0dd + zh: aed2366ccd0f112a +/deepseek-ai-dsh-host-open-in-app/use-this-package/minimal-configuration: + en: a7dca840472b38d6 + zh: af47a88ad41cbd57 +/deepseek-ai-dsh-host-open-in-app/use-this-package/the-catalog-and-how-it-resolves: + en: 7a63acc1bc55aa6f + zh: bbe541dbe88b2ba6 +/deepseek-ai-dsh-host-open-in-app/use-this-package/what-to-expect: + en: c346f6d2dbcd1bed + zh: d041d55571487a11 +/deepseek-ai-dsh-host-open-in-app/use-this-package/the-shared-subpath: + en: 558e741770080c93 + zh: 80482d355dc89cae +/deepseek-ai-dsh-host-open-in-app/understand-the-implementation: + en: 3cf8397731645138 + zh: a8fbf657a150d8c9 +/deepseek-ai-dsh-host-open-in-app/further-exploration: + en: d5b6ee9a195a810b + zh: 7825d6182be37255 +/deepseek-ai-dsh-host-open-in-app/model-experience: + en: f4b8dd6b4e986564 + zh: 814a768a38e52c03 +/deepseek-ai-dsh-host-open-in-app/model-experience/kv-cache-effect: + en: 47f982e326fe77fd + zh: c2241315dc0c89c9 +/deepseek-ai-dsh-host-open-in-app/known-limitations-and-deferred-work: + en: 6e1cf559c4ce0d56 + zh: f78c5548bb3d6236 +/deepseek-ai-dsh-host-open-in-app/known-limitations-and-deferred-work/dev-note: + en: bb259436e8626317 + zh: 3814e0f77b36a92a diff --git a/packages/host/plugin-inventory/README.i18n.yaml b/packages/host/plugin-inventory/README.i18n.yaml index 2916890a24..7321333b1f 100644 --- a/packages/host/plugin-inventory/README.i18n.yaml +++ b/packages/host/plugin-inventory/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/host/plugin-inventory/README.md -README.md: 8450339c1430b2ed1620004343f75d9cc21a0a19 -README.zh.md: 345bf367ce9fe85fdfc80994a09e3b2f26fdc0ce +/: + en: 94ee43dddb605a56 + zh: 1928b76cbc58ca5a +/deepseek-ai-dsh-host-plugin-inventory: + en: f176d2f67d853178 + zh: b75160b74076f8ba +/deepseek-ai-dsh-host-plugin-inventory/summary: + en: 103ae63994bb9291 + zh: 3b2658a7a6064e4b +/deepseek-ai-dsh-host-plugin-inventory/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-plugin-inventory/use-this-package: + en: 10bbb42c37ba25d2 + zh: d628b1c9db7847e4 +/deepseek-ai-dsh-host-plugin-inventory/use-this-package/what-a-snapshot-contains: + en: c8afdb1aec1c97bd + zh: 0a8a765e02caab91 +/deepseek-ai-dsh-host-plugin-inventory/use-this-package/per-preset-compositions: + en: dfc89b14d4c0d21e + zh: 062b233951ed157b +/deepseek-ai-dsh-host-plugin-inventory/use-this-package/what-you-can-and-cannot-do-with-it: + en: 387f87777eef7ec5 + zh: badcd90c8840f870 +/deepseek-ai-dsh-host-plugin-inventory/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-plugin-inventory/understand-the-implementation/design-concept: + en: 48a7d7ce9170c859 + zh: 21a44bf23d9c5c89 +/deepseek-ai-dsh-host-plugin-inventory/understand-the-implementation/the-phase-mapping: + en: 67fd54c8c49f6dbc + zh: f6743f8f5c34b886 +/deepseek-ai-dsh-host-plugin-inventory/understand-the-implementation/source-map: + en: facbb5472e32e362 + zh: de793d69285e56b3 +/deepseek-ai-dsh-host-plugin-inventory/further-exploration: + en: 47de2da39cf6aefa + zh: c7e945dcba775177 +/deepseek-ai-dsh-host-plugin-inventory/model-experience: + en: c3e5d5439c1a56fe + zh: 32804643402d54ea +/deepseek-ai-dsh-host-plugin-inventory/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-plugin-inventory/known-limitations-and-deferred-work: + en: 6c1380959d4f5b13 + zh: dab0c5c64b88a273 +/deepseek-ai-dsh-host-plugin-inventory/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/host/product-telemetry-otel/README.i18n.yaml b/packages/host/product-telemetry-otel/README.i18n.yaml index ea4a841892..e35c7672f8 100644 --- a/packages/host/product-telemetry-otel/README.i18n.yaml +++ b/packages/host/product-telemetry-otel/README.i18n.yaml @@ -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 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 packages/host/product-telemetry-otel/README.md -README.md: af1f2c415fc21db874abc7bb0d9e25c7149fcabf -README.zh.md: ffdb682d9a8a0a4bf406f71322e062f14b666cf2 +/: + en: 19af08decd02015b + zh: 0aa0ad75105e4e3c +/deepseek-ai-dsh-host-product-telemetry-otel: + en: 18d7a8c944938416 + zh: 4249a421e3d5f09a +/deepseek-ai-dsh-host-product-telemetry-otel/summary: + en: a969cf533f6649b5 + zh: 8401a4263f70a8e0 +/deepseek-ai-dsh-host-product-telemetry-otel/table-of-contents: + en: d152484eb41ac6b4 + zh: 9aa34fb1dc95d8cf +/deepseek-ai-dsh-host-product-telemetry-otel/use-this-package: + en: 08e0bcbc259d131b + zh: 1d7cbde2688a903f +/deepseek-ai-dsh-host-product-telemetry-otel/understand-the-implementation: + en: 5d2c06a357a1c06a + zh: 9a1a17535889f5e3 +/deepseek-ai-dsh-host-product-telemetry-otel/further-exploration: + en: 6bfb5e8a723ff0a9 + zh: fffc6b02e2c1a3cb +/deepseek-ai-dsh-host-product-telemetry-otel/model-experience: + en: 3bb64ed6517622aa + zh: 46aa16e88d40bb88 +/deepseek-ai-dsh-host-product-telemetry-otel/model-experience/kv-cache-effect: + en: b287f8e34f3634d1 + zh: cd441f253ec0124b +/deepseek-ai-dsh-host-product-telemetry-otel/known-limitations-and-deferred-work: + en: 20b9ab75cb7e66a1 + zh: a7dc4f4656eaf839 +/deepseek-ai-dsh-host-product-telemetry-otel/known-limitations-and-deferred-work/dev-note: + en: 0a1253c6f7b5e8b9 + zh: 9f56528562c7c914 diff --git a/packages/host/webserver/README.i18n.yaml b/packages/host/webserver/README.i18n.yaml index 3f353ad6d9..1e66ea7779 100644 --- a/packages/host/webserver/README.i18n.yaml +++ b/packages/host/webserver/README.i18n.yaml @@ -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 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 packages/host/webserver/README.md -README.md: 9dd698404719eecdf9fb4c40720ccc74ab37be9d -README.zh.md: d4701b79e432dfa3e8ba8485f8644758ec3b34d7 +/: + en: 40ce7ea7cd628127 + zh: f4f1983ead36c8a4 +/deepseek-ai-dsh-host-webserver: + en: 9c6c5fcadd836722 + zh: f5b79ea2c4be6dde +/deepseek-ai-dsh-host-webserver/summary: + en: 2b56ae0c86dae540 + zh: 9dd7e304074703d4 +/deepseek-ai-dsh-host-webserver/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-host-webserver/use-this-package: + en: 0246258969a54c27 + zh: ba67f4df89d049de +/deepseek-ai-dsh-host-webserver/use-this-package/minimal-configuration: + en: 7016f10d53d3238e + zh: c7968dc08a6b8a41 +/deepseek-ai-dsh-host-webserver/use-this-package/registering-routes: + en: 296ffba200f0dc93 + zh: 5d78d6b5f48634c9 +/deepseek-ai-dsh-host-webserver/use-this-package/the-fallback-seat: + en: e21232b7aecbe7a8 + zh: 2c4a94cab2aa53ff +/deepseek-ai-dsh-host-webserver/use-this-package/behavior-under-failure: + en: 7ef1f5bedb859676 + zh: b146ebf7ca3c0bfb +/deepseek-ai-dsh-host-webserver/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-host-webserver/understand-the-implementation/design-concept: + en: 3eb8591cc484305d + zh: 53e427897fda8b7e +/deepseek-ai-dsh-host-webserver/understand-the-implementation/matching-and-lifecycle: + en: 70dc6875e07497dd + zh: a1d041236e361f84 +/deepseek-ai-dsh-host-webserver/understand-the-implementation/source-map: + en: 5b9e4c57f7865323 + zh: edeb68dc544bef0a +/deepseek-ai-dsh-host-webserver/further-exploration: + en: 95c0c6bc24dab6cf + zh: ec30fe2bb45a7e61 +/deepseek-ai-dsh-host-webserver/model-experience: + en: 38887e1f9117e7e5 + zh: 6a6e1a002fac4624 +/deepseek-ai-dsh-host-webserver/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: de54f3467ef3b9be +/deepseek-ai-dsh-host-webserver/known-limitations-and-deferred-work: + en: 49b11936de031b32 + zh: 5aa36b8f07a95e45 +/deepseek-ai-dsh-host-webserver/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/identity/README.i18n.yaml b/packages/identity/README.i18n.yaml index 7a83a60ba5..aefc3a7786 100644 --- a/packages/identity/README.i18n.yaml +++ b/packages/identity/README.i18n.yaml @@ -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 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 packages/identity/README.md -README.md: 781b015eca49e6232f83b374f575fac62d400d5a -README.zh.md: b32646d3b32a5fbf003e03496c52bcdff0b5c806 +/: + en: af129300f17f72a8 + zh: 06c9861653665d2e +/identity-shared-identity: + en: 152b64184497a129 + zh: 2b1c2bd8facbd698 +/identity-shared-identity/summary: + en: 48291c4db327f787 + zh: 8bb8e7790fb93dad +/identity-shared-identity/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/identity-shared-identity/packages: + en: bef88ced81f6d23d + zh: 654c9e6977ba5052 +/identity-shared-identity/related-documentation: + en: 1a83b471bac505db + zh: 5cdd074f6e4861f3 +/identity-shared-identity/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/identity/anonymous-user-id/README.i18n.yaml b/packages/identity/anonymous-user-id/README.i18n.yaml index aa54219b32..f6e1b0e60c 100644 --- a/packages/identity/anonymous-user-id/README.i18n.yaml +++ b/packages/identity/anonymous-user-id/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/identity/anonymous-user-id/README.md -README.md: c1c6950e7e51dd9cc52847dd9a3d59d6a3d0a7ee -README.zh.md: d533c1d1de5c68ff8f8c143fa678a83d26a36d12 +/: + en: c515895831e237da + zh: 34da7fc7898352e2 +/deepseek-ai-dsh-anonymous-user-id: + en: 247d162b0bf2d0cb + zh: cd2deb79e97d92a7 +/deepseek-ai-dsh-anonymous-user-id/summary: + en: 5bc241dbf080664f + zh: b4bead686a76981b +/deepseek-ai-dsh-anonymous-user-id/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-anonymous-user-id/use-this-package: + en: 4437fa00c42fcfb1 + zh: 040a6688deda82d5 +/deepseek-ai-dsh-anonymous-user-id/use-this-package/what-the-id-does-for-you: + en: 0b9b81be195a834e + zh: 67338c5efaadae4d +/deepseek-ai-dsh-anonymous-user-id/use-this-package/observing-and-resetting-the-id: + en: 44ede1e507c5ee38 + zh: f2a21b86eb6dfe72 +/deepseek-ai-dsh-anonymous-user-id/use-this-package/using-it-in-your-own-package: + en: 4318cb0c4a2b41ed + zh: 6dfae5dc73bcb232 +/deepseek-ai-dsh-anonymous-user-id/understand-the-implementation: + en: 16370ef642feec6a + zh: a546774827234300 +/deepseek-ai-dsh-anonymous-user-id/understand-the-implementation/design-philosophy: + en: a2803ccc98c906bb + zh: b2bdb8bdaf1aca6c +/deepseek-ai-dsh-anonymous-user-id/understand-the-implementation/source-map: + en: 9d5c4a91346f43ff + zh: d5fc162f91906d3f +/deepseek-ai-dsh-anonymous-user-id/understand-the-implementation/the-api: + en: 23acd1995e7dfa39 + zh: 18b13b5351458aab +/deepseek-ai-dsh-anonymous-user-id/understand-the-implementation/storage-contract: + en: 7a5ab3467012c0c2 + zh: 4b297e0fba2fe78b +/deepseek-ai-dsh-anonymous-user-id/further-exploration: + en: 70ecfacbc9d7751b + zh: 705cf7bec5fc479b +/deepseek-ai-dsh-anonymous-user-id/model-experience: + en: 6d953a2296ccc992 + zh: dea7f2642a39d9b5 +/deepseek-ai-dsh-anonymous-user-id/model-experience/kv-cache-effect: + en: d34ef1e86eb2635d + zh: 0d88f82c5f062249 +/deepseek-ai-dsh-anonymous-user-id/known-limitations-and-deferred-work: + en: bafdb2e72f2179db + zh: 0210830ebafeacc5 +/deepseek-ai-dsh-anonymous-user-id/known-limitations-and-deferred-work/dev-note: + en: 124d523659df72f1 + zh: 50c25ecb9268109f +/deepseek-ai-dsh-anonymous-user-id/known-limitations-and-deferred-work/dev-note/open-file-format-evolution: + en: 334ca8ec1326f6fd + zh: da5c85b6f264cd70 +/deepseek-ai-dsh-anonymous-user-id/known-limitations-and-deferred-work/dev-note/open-invariant-observation-point: + en: 9bcd1765116ee52c + zh: 296c60cd65f3016a diff --git a/packages/interaction/README.i18n.yaml b/packages/interaction/README.i18n.yaml index bae06600d9..3b075262a3 100644 --- a/packages/interaction/README.i18n.yaml +++ b/packages/interaction/README.i18n.yaml @@ -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 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 packages/interaction/README.md -README.md: 30955da1f7d3bfbf982e569b86b55ee0f9221381 -README.zh.md: 302a4511e63534cad678730d3ed4fb84830812d1 +/: + en: 58d959ac012a9bbf + zh: 79281fff8f4fe583 +/interaction-the-human-collaboration-plane: + en: 3feabaefdc19a9af + zh: dbbb782d5a9c5556 +/interaction-the-human-collaboration-plane/summary: + en: b3d2ced329e2ccec + zh: 852f0e5f4f526ab5 +/interaction-the-human-collaboration-plane/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/interaction-the-human-collaboration-plane/packages: + en: ccceebf8138e3e16 + zh: fcb20d56fed52173 +/interaction-the-human-collaboration-plane/related-documentation: + en: cccdb31d52ad2938 + zh: d63855e30e60cc6d +/interaction-the-human-collaboration-plane/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/interaction/commands/README.i18n.yaml b/packages/interaction/commands/README.i18n.yaml index c9fec5ebcb..b8f8ff2e40 100644 --- a/packages/interaction/commands/README.i18n.yaml +++ b/packages/interaction/commands/README.i18n.yaml @@ -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 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 packages/interaction/commands/README.md -README.md: bfcb82786a71a938ed793deb591ff45d32ffe1e7 -README.zh.md: 33e128f12ff765ee00adc7ae907da957c06244d8 +/: + en: d331b9706513154d + zh: 20e08461c498d058 +/deepseek-ai-dsh-commands: + en: 1f9f0eb541c10a2f + zh: c5998cda404abf36 +/deepseek-ai-dsh-commands/summary: + en: 534b063e88bcf17e + zh: 10ac9af2797f6dee +/deepseek-ai-dsh-commands/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-commands/use-this-package: + en: 6eee80c31dad122b + zh: 8f261f844a22ddad +/deepseek-ai-dsh-commands/use-this-package/registering-a-command: + en: 81cefbf12580c26a + zh: 01c49d94aca89a07 +/deepseek-ai-dsh-commands/use-this-package/command-syntax: + en: f9160436da4939e7 + zh: 90af200afaf3bb4c +/deepseek-ai-dsh-commands/use-this-package/agent-scoped-commands: + en: b2e46875757e31c8 + zh: 6f97db278fcbc58a +/deepseek-ai-dsh-commands/use-this-package/attachments: + en: 5239ef9c245c3a6b + zh: 34e2f89e4e7f5554 +/deepseek-ai-dsh-commands/use-this-package/dispatching-from-an-adapter: + en: a5c6aecf74468137 + zh: 5548d846d600d29a +/deepseek-ai-dsh-commands/use-this-package/cancellation: + en: ee26e9855ce39626 + zh: 7c092436d03b84a9 +/deepseek-ai-dsh-commands/understand-the-implementation: + en: 063b49f26f48d628 + zh: 2ec899aa6f01359f +/deepseek-ai-dsh-commands/understand-the-implementation/source-map: + en: c0a1ffbf3bd434e7 + zh: 6b0b5699d749e38f +/deepseek-ai-dsh-commands/understand-the-implementation/lifecycle-events: + en: c9fcc06089f8035d + zh: 74072476994a2093 +/deepseek-ai-dsh-commands/understand-the-implementation/scoping: + en: d2d9d05bb5efbec4 + zh: 85ab0abcf728c56d +/deepseek-ai-dsh-commands/understand-the-implementation/attachment-admission: + en: ee0efa5308dcf1e3 + zh: da5a1d938301426c +/deepseek-ai-dsh-commands/further-exploration: + en: 61626a7fcd4ea04b + zh: 217cd5e1e360729e +/deepseek-ai-dsh-commands/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-commands/model-experience/direct-human-commands: + en: 47824d39a7117a5c + zh: 05fefe83ee7f8ad6 +/deepseek-ai-dsh-commands/model-experience/direct-human-commands/what-the-model-sees: + en: a6c574fb3a59ac88 + zh: 8b0a365ea1528844 +/deepseek-ai-dsh-commands/model-experience/direct-human-commands/token-effect: + en: d212d42f4315c80c + zh: 433dd07e1a167f12 +/deepseek-ai-dsh-commands/model-experience/direct-human-commands/kv-cache-effect: + en: a0683fff79d40075 + zh: 3d14d36c8a640031 +/deepseek-ai-dsh-commands/known-limitations-and-deferred-work: + en: 7e930763024d2644 + zh: 351bbea360cab6d3 +/deepseek-ai-dsh-commands/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/interaction/permission-presets/README.i18n.yaml b/packages/interaction/permission-presets/README.i18n.yaml index 9736e5ff1b..4944be1184 100644 --- a/packages/interaction/permission-presets/README.i18n.yaml +++ b/packages/interaction/permission-presets/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/interaction/permission-presets/README.md -README.md: 19ada7153fbc48a733fdcd69faefc6e32b4d7619 -README.zh.md: fab3487690fea0cb25831961ed7bc487f0761532 +/: + en: a4e18d5b27337d71 + zh: 2220eba5dfcdb1f3 +/deepseek-ai-dsh-permission-presets: + en: 083e8c1dbc2c401a + zh: 07b62096a7a24447 +/deepseek-ai-dsh-permission-presets/summary: + en: 75a5c477313feb23 + zh: 9e036411e14edf1b +/deepseek-ai-dsh-permission-presets/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-permission-presets/use-this-package: + en: 0b93409c92e2a769 + zh: 4b4e10636760bb15 +/deepseek-ai-dsh-permission-presets/use-this-package/configuring-presets: + en: 3b3fe69be228870a + zh: af3f146f86615ad4 +/deepseek-ai-dsh-permission-presets/use-this-package/switching-presets: + en: c1a3750940795070 + zh: 69ec7e752032db5b +/deepseek-ai-dsh-permission-presets/use-this-package/what-users-see: + en: 679633e048426ef1 + zh: 079fbfdd415b6618 +/deepseek-ai-dsh-permission-presets/use-this-package/session-defaults: + en: 88218998b169a203 + zh: 7a3646ff0ca28549 +/deepseek-ai-dsh-permission-presets/understand-the-implementation: + en: f5c37bc882b3f0d1 + zh: 8203bea78976aefc +/deepseek-ai-dsh-permission-presets/understand-the-implementation/source-map: + en: c240ef830a066e26 + zh: 423ae941bed7e96c +/deepseek-ai-dsh-permission-presets/understand-the-implementation/write-path: + en: 0042e293cf2f1f24 + zh: 04d3bd9984e45507 +/deepseek-ai-dsh-permission-presets/understand-the-implementation/read-side-and-custom: + en: e17b717607c095ea + zh: 3f68d5d73c1b83d0 +/deepseek-ai-dsh-permission-presets/understand-the-implementation/session-pinning-and-blank-reuse: + en: 893cea88bce22903 + zh: 2431e19ced670511 +/deepseek-ai-dsh-permission-presets/understand-the-implementation/catalog-projection-and-optional-command: + en: 2e79bec74274b054 + zh: 256526ab1b4b55e9 +/deepseek-ai-dsh-permission-presets/further-exploration: + en: 0b3c08b2e640c16d + zh: 5ace374ef319b67f +/deepseek-ai-dsh-permission-presets/model-experience: + en: e57a5ed554b4e882 + zh: 6a464902171cb659 +/deepseek-ai-dsh-permission-presets/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: ef3368fe16abff21 +/deepseek-ai-dsh-permission-presets/known-limitations-and-deferred-work: + en: 8f245d69661be63f + zh: d14108248083eaa5 +/deepseek-ai-dsh-permission-presets/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/interaction/tool-ask-user/README.i18n.yaml b/packages/interaction/tool-ask-user/README.i18n.yaml index 94ff3bcc72..672066508b 100644 --- a/packages/interaction/tool-ask-user/README.i18n.yaml +++ b/packages/interaction/tool-ask-user/README.i18n.yaml @@ -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 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 packages/interaction/tool-ask-user/README.md -README.md: 8987d3a60c7913c617f1eb1359d161b17ee2c83a -README.zh.md: d82cc59fc3a975e08aacc43c28b76256244c66de +/: + en: fd744e4beac0ee66 + zh: 27288856740f5dbf +/deepseek-ai-dsh-tool-ask-user: + en: 2a561a70c4a900d7 + zh: 3d12372992cf2634 +/deepseek-ai-dsh-tool-ask-user/summary: + en: 45bb29d463d1e8d2 + zh: a462610ab6e8e61b +/deepseek-ai-dsh-tool-ask-user/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-ask-user/use-this-package: + en: ed8ec46772509d66 + zh: b06aad135f7a4fa3 +/deepseek-ai-dsh-tool-ask-user/use-this-package/when-to-call-the-tool: + en: 5a142d88def1a4fd + zh: 2ae5573abf23d76a +/deepseek-ai-dsh-tool-ask-user/use-this-package/what-the-model-gets-back: + en: d0047cb9dda88606 + zh: d3432561db23f65a +/deepseek-ai-dsh-tool-ask-user/use-this-package/when-the-call-fails: + en: dd379ed6282761b6 + zh: fa7da19a52091403 +/deepseek-ai-dsh-tool-ask-user/understand-the-implementation: + en: e9b9d46be0b45ca2 + zh: c02403486473cd80 +/deepseek-ai-dsh-tool-ask-user/understand-the-implementation/source-map: + en: 8ce163d8203be215 + zh: 6fd9db8f061b8198 +/deepseek-ai-dsh-tool-ask-user/understand-the-implementation/consumer-role: + en: 30c2b751e1b04fe4 + zh: 862c1087ad9c8f66 +/deepseek-ai-dsh-tool-ask-user/understand-the-implementation/result-rendering: + en: 686176b2703dfa08 + zh: 4ea4dab0da7f79f9 +/deepseek-ai-dsh-tool-ask-user/further-exploration: + en: d66802e3991ece30 + zh: fcd59f390f2ee690 +/deepseek-ai-dsh-tool-ask-user/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-schema/what-the-model-sees: + en: e043611dc8d99927 + zh: 2e4b0e6548f2d64c +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-schema/token-effect: + en: 97cce067584eadff + zh: c376cab39ea9df68 +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-schema/kv-cache-effect: + en: b385b04c94496e5b + zh: 6bd8f2bc39e6f8c0 +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-call-history-and-result: + en: 9717b983b6a857e3 + zh: 611a2dadf7c0c706 +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-call-history-and-result/what-the-model-sees: + en: d5ba86e2dbdb5b4b + zh: f5a2d6de0d985eed +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-call-history-and-result/token-effect: + en: 3092d4afd4ba8678 + zh: cb7a7bbefdbc3a1e +/deepseek-ai-dsh-tool-ask-user/model-experience/tool-call-history-and-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 4db81881ebdcfcc4 +/deepseek-ai-dsh-tool-ask-user/known-limitations-and-deferred-work: + en: a0f0f15f51d5affb + zh: 41f11351e852968c +/deepseek-ai-dsh-tool-ask-user/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/interaction/user-approval/README.i18n.yaml b/packages/interaction/user-approval/README.i18n.yaml index c243dd5170..bf4aa4fa42 100644 --- a/packages/interaction/user-approval/README.i18n.yaml +++ b/packages/interaction/user-approval/README.i18n.yaml @@ -1,6 +1,88 @@ -# 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 packages/interaction/user-approval/README.md -README.md: b06a98cccad9733f3b062faee9a5ca26dff8282b -README.zh.md: 32c6cef1ce16c6834d0b2d6439790765924c198c +/: + en: 515e991a5671711d + zh: 194d48a8da9b51b0 +/deepseek-ai-dsh-user-approval: + en: 548c7fcc396775de + zh: ad82c4872acbf83a +/deepseek-ai-dsh-user-approval/summary: + en: 9b438f002e664c9e + zh: 1f1adf3db6a56ddc +/deepseek-ai-dsh-user-approval/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-user-approval/use-this-package: + en: dd034141bc1a7634 + zh: a44f1f90dac2a444 +/deepseek-ai-dsh-user-approval/use-this-package/composing-answerers: + en: 3618ddc3386e65f0 + zh: d6c0ac91aae122bb +/deepseek-ai-dsh-user-approval/use-this-package/setting-the-policy: + en: d4ef1901ac78b431 + zh: 822b97f8bed1b2c9 +/deepseek-ai-dsh-user-approval/use-this-package/requesting-a-decision: + en: add08f0d0dace4c8 + zh: e45268e0f0ed2e95 +/deepseek-ai-dsh-user-approval/use-this-package/what-the-model-and-user-see: + en: 016bf3cd1891d3d7 + zh: 33e7e5ffaf95f5e7 +/deepseek-ai-dsh-user-approval/understand-the-implementation: + en: d07be7ba08baf010 + zh: 665e68e9188e5d60 +/deepseek-ai-dsh-user-approval/understand-the-implementation/source-map: + en: 3abbfecbac6271f1 + zh: b14f235a230f561e +/deepseek-ai-dsh-user-approval/understand-the-implementation/dispatch: + en: 38c3646e45d3dddd + zh: 3363dde8c786d6b2 +/deepseek-ai-dsh-user-approval/understand-the-implementation/policy-and-the-runtime-context-snapshot: + en: a8df8823aa0b015d + zh: ed0906f11645e7fd +/deepseek-ai-dsh-user-approval/understand-the-implementation/audit: + en: 2b8650dcd0032440 + zh: 3e1f3070924b6052 +/deepseek-ai-dsh-user-approval/further-exploration: + en: cb43cb6a03fdc26a + zh: e150e41d99be0d45 +/deepseek-ai-dsh-user-approval/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context: + en: d23980f003b42fbb + zh: 532f0174de5d87b5 +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context/what-the-model-sees: + en: a38775858ccd61f3 + zh: c19c76827be7aabf +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context/what-the-model-sees/ask-policy-contribution: + en: b9f1262c97ec7568 + zh: 8a6613695f896f70 +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context/what-the-model-sees/never-policy-contribution: + en: f13f09fc2466513b + zh: 4a755a682551c481 +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context/token-effect: + en: e96807422bdce44d + zh: 9fdcfafcc96bd004 +/deepseek-ai-dsh-user-approval/model-experience/current-approval-policy-context/kv-cache-effect: + en: b4bac06588fdd1c3 + zh: 60271562fdd52f72 +/deepseek-ai-dsh-user-approval/model-experience/tool-outcome: + en: 54c140b4a1b4a5bc + zh: 8573891441963be4 +/deepseek-ai-dsh-user-approval/model-experience/tool-outcome/what-the-model-sees: + en: fd0c40c0a6b4c967 + zh: c7e18063e11080e9 +/deepseek-ai-dsh-user-approval/model-experience/tool-outcome/token-effect: + en: 972a63ca590fecde + zh: 217b63d98365dbdb +/deepseek-ai-dsh-user-approval/model-experience/tool-outcome/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 4db81881ebdcfcc4 +/deepseek-ai-dsh-user-approval/known-limitations-and-deferred-work: + en: c6928515ff91ee7e + zh: c23bd844b4907f12 +/deepseek-ai-dsh-user-approval/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/interaction/user-questions/README.i18n.yaml b/packages/interaction/user-questions/README.i18n.yaml index 3e42cc7328..777ea496c6 100644 --- a/packages/interaction/user-questions/README.i18n.yaml +++ b/packages/interaction/user-questions/README.i18n.yaml @@ -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 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 packages/interaction/user-questions/README.md -README.md: b7082f7b76ad974ecb75f48dc84f857784121fc9 -README.zh.md: 81f1f3e72b569dcaac96add3f6ff73cbe9038965 +/: + en: 49ea5bf7d681936e + zh: e65549bc2fc385a4 +/deepseek-ai-dsh-user-questions: + en: 79d2910e509a2512 + zh: 7af1982658f00d64 +/deepseek-ai-dsh-user-questions/summary: + en: d27ce8b495269248 + zh: 691a7cc7f3d892d0 +/deepseek-ai-dsh-user-questions/table-of-contents: + en: ad3919bb107cc38d + zh: 557af29a8318b65c +/deepseek-ai-dsh-user-questions/service-userquestionservice-ctx-key-userquestions: + en: 1ba3467a2588da42 + zh: 74f6e516f71116d9 +/deepseek-ai-dsh-user-questions/service-userquestionservice-ctx-key-userquestions/public-api: + en: f7c183c8728b05cd + zh: f0104632d8eb2938 +/deepseek-ai-dsh-user-questions/service-userquestionservice-ctx-key-userquestions/key-types: + en: 10637ca40891d520 + zh: 015662eb651d19cb +/deepseek-ai-dsh-user-questions/service-userquestionservice-ctx-key-userquestions/presentation-intent: + en: d3809cfa854f1c02 + zh: f9bcc88f1db8fd83 +/deepseek-ai-dsh-user-questions/role: + en: 1d4b9680e35350a7 + zh: fcba25211099b880 +/deepseek-ai-dsh-user-questions/model-experience: + en: 95167d0c957a0ab5 + zh: 582c04395648786c +/deepseek-ai-dsh-user-questions/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: cd40bdfe1a1c37dc +/deepseek-ai-dsh-user-questions/known-limitations-and-deferred-work: + en: 9c2d868427856d56 + zh: f0d19979fd90d826 +/deepseek-ai-dsh-user-questions/known-limitations-and-deferred-work/dev-note: + en: f5f2c82d2e085ccf + zh: d04ca73d1db0ef0f diff --git a/packages/jobs/README.i18n.yaml b/packages/jobs/README.i18n.yaml index d3584d5f88..72f182803e 100644 --- a/packages/jobs/README.i18n.yaml +++ b/packages/jobs/README.i18n.yaml @@ -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 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 packages/jobs/README.md -README.md: 1181b2a38f33ede2cba4b1f9119991d49ce169ff -README.zh.md: 35bb9f38f176b3fec0eb87229fdeeb83db43f53a +/: + en: b25bee480c2d5ffb + zh: 8c10268ce42d83b1 +/jobs-background-job-capability-family: + en: d8461ef8c073603a + zh: f8aeb3e919c41256 +/jobs-background-job-capability-family/summary: + en: 6c7629a9fdaadbe6 + zh: 60314e79eaec6446 +/jobs-background-job-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/jobs-background-job-capability-family/packages: + en: 1f71d83d0fdd3108 + zh: 48ed241913efb8b4 +/jobs-background-job-capability-family/related-documentation: + en: 7eee30dc52e856bf + zh: a4541c7b6620ea1d +/jobs-background-job-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/jobs/jobs-local/README.i18n.yaml b/packages/jobs/jobs-local/README.i18n.yaml index fa9e9e94bb..374ce96891 100644 --- a/packages/jobs/jobs-local/README.i18n.yaml +++ b/packages/jobs/jobs-local/README.i18n.yaml @@ -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 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 packages/jobs/jobs-local/README.md -README.md: d141d19b06f0d329ee6a544b10f535d87086a48d -README.zh.md: 38f8989f230fc9317fbc56d73ffcc9a8dc42db00 +/: + en: 0abe764a4bc3e3db + zh: 280ff3a1c1a8bc5c +/deepseek-ai-dsh-jobs-local: + en: 20bc108b32378c74 + zh: 8d1121f0a70f454a +/deepseek-ai-dsh-jobs-local/summary: + en: b76227a7ed290b11 + zh: 866fd04f48303a89 +/deepseek-ai-dsh-jobs-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-jobs-local/use-this-package: + en: e0e242161dda0c28 + zh: 30c058b5a3d1cc56 +/deepseek-ai-dsh-jobs-local/use-this-package/when-to-choose-it: + en: 17479310883edc0a + zh: f1cea41c704dabe2 +/deepseek-ai-dsh-jobs-local/use-this-package/minimal-configuration: + en: 5861bb20182aef3b + zh: 23d595dad299b6c8 +/deepseek-ai-dsh-jobs-local/use-this-package/what-each-owner-gets: + en: 9ab66aa770694092 + zh: 38de930bcfbc132c +/deepseek-ai-dsh-jobs-local/use-this-package/lifecycle: + en: 91dd372f742dcdb8 + zh: 58eeee0254d33cd1 +/deepseek-ai-dsh-jobs-local/use-this-package/what-can-go-wrong: + en: dcf5bc26dbc018e5 + zh: 3dbe65c2df463ec0 +/deepseek-ai-dsh-jobs-local/understand-the-implementation: + en: f782557ca8da3138 + zh: e8f0082b9692cacc +/deepseek-ai-dsh-jobs-local/understand-the-implementation/design-philosophy: + en: b92e6e5415553e2e + zh: c3e0be579af4c7fb +/deepseek-ai-dsh-jobs-local/understand-the-implementation/source-map: + en: 6b4071b9c15ee800 + zh: 40410e03c9a38937 +/deepseek-ai-dsh-jobs-local/understand-the-implementation/scope-layers: + en: 2c53e11a60965985 + zh: 63adc1628c71e62e +/deepseek-ai-dsh-jobs-local/understand-the-implementation/admission-and-settlement: + en: b9634939c81b46cb + zh: a18f90caf7c61e87 +/deepseek-ai-dsh-jobs-local/understand-the-implementation/teardown: + en: 49e8bd5e2c1f6ffd + zh: ad3e1aa712fd59b3 +/deepseek-ai-dsh-jobs-local/further-exploration: + en: d91bf997352940be + zh: 98540d56253fb950 +/deepseek-ai-dsh-jobs-local/model-experience: + en: 873ef364fc8d6f2f + zh: 4d0bb38a9c9639c0 +/deepseek-ai-dsh-jobs-local/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: d75d48f485447a74 +/deepseek-ai-dsh-jobs-local/known-limitations-and-deferred-work: + en: 5284107cbd22e3dd + zh: 9aa0048908c94e25 +/deepseek-ai-dsh-jobs-local/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/jobs/jobs/README.i18n.yaml b/packages/jobs/jobs/README.i18n.yaml index dfe7842a8b..80cc92a4e8 100644 --- a/packages/jobs/jobs/README.i18n.yaml +++ b/packages/jobs/jobs/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/jobs/jobs/README.md -README.md: 38454678cdaabb650ee02c55f60f71c6a9cd0e37 -README.zh.md: ab130743816a175d06976cad17a022e7e9a06421 +/: + en: 4055a3bc920e4ac2 + zh: 3bc99f3b5bc2fd71 +/deepseek-ai-dsh-jobs: + en: 721d849fde0fbebe + zh: 9578ffb37edc5d7b +/deepseek-ai-dsh-jobs/summary: + en: f64d24a22c76423c + zh: 5bfd3c04ce108bcb +/deepseek-ai-dsh-jobs/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-jobs/use-this-package: + en: 1246c880d1c61927 + zh: 157c703fd2da6b9c +/deepseek-ai-dsh-jobs/use-this-package/what-a-background-job-gives-you: + en: 56f117c80db88cb2 + zh: 4df7046e005f846c +/deepseek-ai-dsh-jobs/use-this-package/the-ownership-boundary: + en: 873494750b38dae5 + zh: 2e6142ab889f7a8b +/deepseek-ai-dsh-jobs/use-this-package/starting-background-work-needs-a-controller: + en: 68075d00cde8763d + zh: 4bc42c01d9e4dc8d +/deepseek-ai-dsh-jobs/use-this-package/smallest-working-composition: + en: cce846c7e3b0c33e + zh: 17f353d970b4216d +/deepseek-ai-dsh-jobs/use-this-package/what-can-go-wrong: + en: fcfee3f72ea703ac + zh: 80299901bd44783b +/deepseek-ai-dsh-jobs/understand-the-implementation: + en: 7e13d669ecc96d59 + zh: b5fe7ae65812d926 +/deepseek-ai-dsh-jobs/understand-the-implementation/design-philosophy: + en: 2a42e1e06dfc469e + zh: 5c2c77eca52846f0 +/deepseek-ai-dsh-jobs/understand-the-implementation/source-map: + en: 2416d5be526d4dba + zh: 1090a9373258d7bb +/deepseek-ai-dsh-jobs/understand-the-implementation/service-operations: + en: b2e4ef34ccf1e749 + zh: 128b57b57ed09316 +/deepseek-ai-dsh-jobs/further-exploration: + en: 14a42f5debabd3ea + zh: 16a60585a7280ccf +/deepseek-ai-dsh-jobs/model-experience: + en: efb58cac0fc08163 + zh: 838791f77fd79917 +/deepseek-ai-dsh-jobs/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: d75d48f485447a74 +/deepseek-ai-dsh-jobs/known-limitations-and-deferred-work: + en: bf4e5e0bd25d579e + zh: ed995c02012f0c72 +/deepseek-ai-dsh-jobs/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/jobs/tool-jobs/README.i18n.yaml b/packages/jobs/tool-jobs/README.i18n.yaml index 4c58868e42..9cb7591fa7 100644 --- a/packages/jobs/tool-jobs/README.i18n.yaml +++ b/packages/jobs/tool-jobs/README.i18n.yaml @@ -1,6 +1,97 @@ -# 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 packages/jobs/tool-jobs/README.md -README.md: 2836f10e160ae3ecfe9a2df7f6b82a88b4ddf33f -README.zh.md: 1311f5656ded91fd4cc520e1114a41bb87ebf4d3 +/: + en: bab11659311ef065 + zh: 00536402873e1a55 +/deepseek-ai-dsh-tool-jobs: + en: 256894de7b318e7e + zh: a6f3cb0060fe2c4d +/deepseek-ai-dsh-tool-jobs/summary: + en: 945e3cec059e1a89 + zh: 63142a605332b4b7 +/deepseek-ai-dsh-tool-jobs/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-jobs/use-this-package: + en: 823e94910a15e2e1 + zh: c23e0b605f32f0bd +/deepseek-ai-dsh-tool-jobs/use-this-package/the-three-tools: + en: e9e9cb2ee5cea462 + zh: 833beb2bca84bd6a +/deepseek-ai-dsh-tool-jobs/use-this-package/completion-notices: + en: f69e3f96353234c3 + zh: 6caa74174a2d79b1 +/deepseek-ai-dsh-tool-jobs/use-this-package/minimal-configuration: + en: fc08838f1843b8c7 + zh: e5d3c11216967aca +/deepseek-ai-dsh-tool-jobs/use-this-package/what-can-go-wrong: + en: a09c5c8225dec06c + zh: 3e9fcab42613775e +/deepseek-ai-dsh-tool-jobs/understand-the-implementation: + en: 32a36a3fe388e2c1 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-jobs/understand-the-implementation/design-philosophy: + en: 5b69ae2716a52951 + zh: fec78d84af7192b1 +/deepseek-ai-dsh-tool-jobs/understand-the-implementation/source-map: + en: 354782dee6840110 + zh: dfd46a4eee6b937d +/deepseek-ai-dsh-tool-jobs/understand-the-implementation/output-capping: + en: b47638fb0e80287a + zh: c47fa4b99b6df4c3 +/deepseek-ai-dsh-tool-jobs/understand-the-implementation/notice-delivery-lanes: + en: 2540b7abbb3c9710 + zh: 4fb355bceab2f865 +/deepseek-ai-dsh-tool-jobs/further-exploration: + en: 11250fc631d55d99 + zh: 7885ce173bd1cd5f +/deepseek-ai-dsh-tool-jobs/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-jobs/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-jobs/model-experience/system-prompt/what-the-model-sees: + en: 39e8a31dc801e9c5 + zh: 372c41269cf9c41b +/deepseek-ai-dsh-tool-jobs/model-experience/system-prompt/what-the-model-sees/background-job-guidance: + en: 3d751cf8e40e220f + zh: 91df3ed91d02b5f2 +/deepseek-ai-dsh-tool-jobs/model-experience/system-prompt/token-effect: + en: 544674c70d5e5e0f + zh: eec61a623f4cfc13 +/deepseek-ai-dsh-tool-jobs/model-experience/system-prompt/kv-cache-effect: + en: 13e7c6007bf6b5dc + zh: 9663c65441f0a3f0 +/deepseek-ai-dsh-tool-jobs/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-jobs/model-experience/tool-schemas/what-the-model-sees: + en: b7308bdfcca89613 + zh: 0e5c93d99d5a1d3c +/deepseek-ai-dsh-tool-jobs/model-experience/tool-schemas/token-effect: + en: 3ce42a9605c3596c + zh: ab29758f0fbbb1c6 +/deepseek-ai-dsh-tool-jobs/model-experience/tool-schemas/kv-cache-effect: + en: 24266e9d669810a2 + zh: bfde811c7e84890f +/deepseek-ai-dsh-tool-jobs/model-experience/results-and-notices: + en: 8160e01d6bfc5e0c + zh: 570dc95be7f13260 +/deepseek-ai-dsh-tool-jobs/model-experience/results-and-notices/what-the-model-sees: + en: 960436b3f61c7f96 + zh: 2c956bb4fee134c2 +/deepseek-ai-dsh-tool-jobs/model-experience/results-and-notices/token-effect: + en: 16efd9cb948ca4bf + zh: 563cc4c78dc63b4d +/deepseek-ai-dsh-tool-jobs/model-experience/results-and-notices/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-tool-jobs/known-limitations-and-deferred-work: + en: 1971e3b84c568c3c + zh: 3e357265178a8b00 +/deepseek-ai-dsh-tool-jobs/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/llm/README.i18n.yaml b/packages/llm/README.i18n.yaml index c65d056b93..bcf8132459 100644 --- a/packages/llm/README.i18n.yaml +++ b/packages/llm/README.i18n.yaml @@ -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 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 packages/llm/README.md -README.md: 6b90e917ebb8dc08b8cd74755fa8d93099d5ebcb -README.zh.md: 9afa16f63825a158ae23badc3b8de3b3d7c7b486 +/: + en: 2c229c1ca0bb752f + zh: d238dc305f853b48 +/llm-llm-capability-family: + en: ba3796ff9be68703 + zh: cc613f0edcbda1ee +/llm-llm-capability-family/summary: + en: 757ca5b6ecfda2bf + zh: b133a4be8fd9b803 +/llm-llm-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/llm-llm-capability-family/packages: + en: 4a2398259a40a3f2 + zh: 47eaba38b7a1843c +/llm-llm-capability-family/related-documentation: + en: a04b4267c869ee89 + zh: 618563325df0a372 +/llm-llm-capability-family/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/llm/deepseek-llm-api-extensions/README.i18n.yaml b/packages/llm/deepseek-llm-api-extensions/README.i18n.yaml index 44a416eea5..ad3321a809 100644 --- a/packages/llm/deepseek-llm-api-extensions/README.i18n.yaml +++ b/packages/llm/deepseek-llm-api-extensions/README.i18n.yaml @@ -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 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 packages/llm/deepseek-llm-api-extensions/README.md -README.md: 1505c644a32a8c90c38720ac6229eb3b654693a1 -README.zh.md: d27eca175c19bb914045958d1d748f427a4971b7 +/: + en: 8805672f8507e16d + zh: 07696ec60f8d86e8 +/deepseek-ai-dsh-deepseek-llm-api-extensions: + en: f49157e80e6436e6 + zh: 7dd755bd83603393 +/deepseek-ai-dsh-deepseek-llm-api-extensions/summary: + en: 2ee01d6439e60359 + zh: a1fb7c4c0d686895 +/deepseek-ai-dsh-deepseek-llm-api-extensions/table-of-contents: + en: 6b7f62c318c9aad6 + zh: 5e22d58884e60c87 +/deepseek-ai-dsh-deepseek-llm-api-extensions/service: + en: 5a7d0d78328568d0 + zh: c9180f610039e688 +/deepseek-ai-dsh-deepseek-llm-api-extensions/model-experience: + en: 88a785350ced5c14 + zh: 755349be023a3f5c +/deepseek-ai-dsh-deepseek-llm-api-extensions/model-experience/kv-cache-effect: + en: 83eb7f1e6ce80b45 + zh: 516811171411ffca +/deepseek-ai-dsh-deepseek-llm-api-extensions/known-limitations-and-deferred-work: + en: 440169524f1a1323 + zh: 935424afe40201b7 +/deepseek-ai-dsh-deepseek-llm-api-extensions/known-limitations-and-deferred-work/dev-note: + en: 0718d089fcbe4223 + zh: 5d6f73b7ecfe86ef diff --git a/packages/llm/llm-deepseek-account/README.i18n.yaml b/packages/llm/llm-deepseek-account/README.i18n.yaml index c55756b190..fd1e9e0ed0 100644 --- a/packages/llm/llm-deepseek-account/README.i18n.yaml +++ b/packages/llm/llm-deepseek-account/README.i18n.yaml @@ -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 packages/llm/llm-deepseek-account/README.md -README.md: 13b6df830e7ef16a0b75ff46678c507822f543b7 -README.zh.md: f2ca9fe281a9a10f1e75b9a941ad67da21d86b63 +/: + en: 5bbc9f976d7dcfda + zh: 5de13a931c992603 +/deepseek-ai-dsh-llm-deepseek-account: + en: 8fa1148e0ee9d351 + zh: 634ec9d79d5ffbf0 +/deepseek-ai-dsh-llm-deepseek-account/summary: + en: d859ec7a1db8a41b + zh: b05ff7d19cb94667 +/deepseek-ai-dsh-llm-deepseek-account/table-of-contents: + en: 23386452a66b2fbd + zh: 4cf93c4bf17b3da2 +/deepseek-ai-dsh-llm-deepseek-account/use-this-package: + en: 4fde33a269d60030 + zh: 22e522f4a3e25e8c +/deepseek-ai-dsh-llm-deepseek-account/understand-the-implementation: + en: 20ba5b235f0d989b + zh: b18aec33828852ea +/deepseek-ai-dsh-llm-deepseek-account/further-exploration: + en: e8bf99d78aa7035f + zh: e4a74d2d48b6d271 +/deepseek-ai-dsh-llm-deepseek-account/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-llm-deepseek-account/model-experience/authenticated-model-requests: + en: 5cf024f0d3370159 + zh: ed480db8f348a42f +/deepseek-ai-dsh-llm-deepseek-account/model-experience/authenticated-model-requests/what-the-model-sees: + en: bd62360e6e6965ab + zh: 519626fc34672187 +/deepseek-ai-dsh-llm-deepseek-account/model-experience/authenticated-model-requests/token-effect: + en: fecefb75b719c317 + zh: f0c2322f657c5914 +/deepseek-ai-dsh-llm-deepseek-account/model-experience/authenticated-model-requests/kv-cache-effect: + en: 2004df60d997da79 + zh: a215a6586b44746b +/deepseek-ai-dsh-llm-deepseek-account/known-limitations-and-deferred-work: + en: d5880c883b1b678f + zh: bf7a4da24ba75280 +/deepseek-ai-dsh-llm-deepseek-account/known-limitations-and-deferred-work/dev-note: + en: 0525041e573e96b6 + zh: b05ed8d852498e6b diff --git a/packages/llm/llm-deepseek-api-key/README.i18n.yaml b/packages/llm/llm-deepseek-api-key/README.i18n.yaml index 4a24a98eb7..ed861f822b 100644 --- a/packages/llm/llm-deepseek-api-key/README.i18n.yaml +++ b/packages/llm/llm-deepseek-api-key/README.i18n.yaml @@ -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 packages/llm/llm-deepseek-api-key/README.md -README.md: 4b22ef2ae97c46ab888714ad436f67f9df1ade3f -README.zh.md: df6baea12344db8873fc870027f92e0d5ae882a7 +/: + en: 3bc991d01c87c9c6 + zh: ba63ebb46b72bc3e +/deepseek-ai-dsh-llm-deepseek-api-key: + en: b6871195e386cc64 + zh: 742b05a3ca80883c +/deepseek-ai-dsh-llm-deepseek-api-key/summary: + en: ad5a00f16f233d42 + zh: 743d55599144836b +/deepseek-ai-dsh-llm-deepseek-api-key/table-of-contents: + en: 23386452a66b2fbd + zh: 4cf93c4bf17b3da2 +/deepseek-ai-dsh-llm-deepseek-api-key/use-this-package: + en: ab3d8cc5be370482 + zh: 8a8b9871d5afe1df +/deepseek-ai-dsh-llm-deepseek-api-key/understand-the-implementation: + en: a2a213e5629a569f + zh: eb23478d0081270a +/deepseek-ai-dsh-llm-deepseek-api-key/further-exploration: + en: e8bf99d78aa7035f + zh: e4a74d2d48b6d271 +/deepseek-ai-dsh-llm-deepseek-api-key/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-llm-deepseek-api-key/model-experience/authenticated-model-requests: + en: 5cf024f0d3370159 + zh: ed480db8f348a42f +/deepseek-ai-dsh-llm-deepseek-api-key/model-experience/authenticated-model-requests/what-the-model-sees: + en: e5624a2c7bb26e90 + zh: 44da0286a548f24a +/deepseek-ai-dsh-llm-deepseek-api-key/model-experience/authenticated-model-requests/token-effect: + en: fecefb75b719c317 + zh: f0c2322f657c5914 +/deepseek-ai-dsh-llm-deepseek-api-key/model-experience/authenticated-model-requests/kv-cache-effect: + en: 2004df60d997da79 + zh: a215a6586b44746b +/deepseek-ai-dsh-llm-deepseek-api-key/known-limitations-and-deferred-work: + en: d5880c883b1b678f + zh: bf7a4da24ba75280 +/deepseek-ai-dsh-llm-deepseek-api-key/known-limitations-and-deferred-work/dev-note: + en: 0525041e573e96b6 + zh: b05ed8d852498e6b diff --git a/packages/llm/llm-deepseek/README.i18n.yaml b/packages/llm/llm-deepseek/README.i18n.yaml index 8fc2c2ab8d..c122508d45 100644 --- a/packages/llm/llm-deepseek/README.i18n.yaml +++ b/packages/llm/llm-deepseek/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/llm/llm-deepseek/README.md -README.md: f877eb53db82e76b23509a20f39de66d72bc9386 -README.zh.md: cd2da99286705913c07bed9e9ded8a9c198e3d6b +/: + en: c6924d7c0d7c82ff + zh: 95fbf06db428f532 +/deepseek-ai-dsh-llm-deepseek: + en: e66a018af9e2de3c + zh: d7188003d01964bb +/deepseek-ai-dsh-llm-deepseek/summary: + en: a8871f9ce192ac6a + zh: 7d642e993f4ca71c +/deepseek-ai-dsh-llm-deepseek/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm-deepseek/use-this-package: + en: fe27b41cb85cd031 + zh: 52d833f0909d94f1 +/deepseek-ai-dsh-llm-deepseek/use-this-package/when-to-choose-it: + en: cbeb14a9a602c2c9 + zh: c78c0d26c5791085 +/deepseek-ai-dsh-llm-deepseek/use-this-package/minimal-configuration: + en: 2248932972465067 + zh: d1e4b7988d80d3b2 +/deepseek-ai-dsh-llm-deepseek/use-this-package/endpoint-and-wire-format: + en: 97d75cb85c9ecf8d + zh: 7dbf79d6b5bfb0ec +/deepseek-ai-dsh-llm-deepseek/use-this-package/account-credentials: + en: 3853ba1a1ffbb46c + zh: 97203e80ad933e59 +/deepseek-ai-dsh-llm-deepseek/use-this-package/streaming-with-thinking-and-images: + en: 9b82549c6ce25261 + zh: 22a3978c5022576b +/deepseek-ai-dsh-llm-deepseek/use-this-package/dynamic-configuration: + en: 49290fc5647136b4 + zh: 96fa9ce0f9e83c13 +/deepseek-ai-dsh-llm-deepseek/use-this-package/provider-specific-request-fields: + en: ec03fc11584fc698 + zh: a3f8645b0b817f67 +/deepseek-ai-dsh-llm-deepseek/use-this-package/failures-and-recovery: + en: d31bd24c8c419f88 + zh: 91205cb3cd754f39 +/deepseek-ai-dsh-llm-deepseek/understand-the-implementation: + en: 1598ac8a8bb9b6bf + zh: fdd089c5ae7722cd +/deepseek-ai-dsh-llm-deepseek/understand-the-implementation/design-philosophy: + en: 829203c4c282dc46 + zh: e05dada4a1420a95 +/deepseek-ai-dsh-llm-deepseek/understand-the-implementation/source-map: + en: dc2d2409ad8c41cc + zh: 51fc4ad65dab6378 +/deepseek-ai-dsh-llm-deepseek/understand-the-implementation/wire-flow: + en: 9477d8af3d762450 + zh: 52a2967518509f94 +/deepseek-ai-dsh-llm-deepseek/further-exploration: + en: 2154bec32e9a1875 + zh: edb1cd81c0cfedad +/deepseek-ai-dsh-llm-deepseek/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-request: + en: 1dc50052999253c6 + zh: 7abf968fc18bffcd +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-request/what-the-model-sees: + en: 14110610860656e8 + zh: 995e28d6931ebe4e +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-request/token-effect: + en: f6f8c890fb2465e4 + zh: cb9e4173a0d7415f +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-request/kv-cache-effect: + en: 87ac92776176ee15 + zh: bb49edf3a68dda07 +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-response: + en: 957d6665495e5ca5 + zh: 0aa72b2c2dc07167 +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-response/what-the-model-sees: + en: 36a3d0297d6ca209 + zh: bfc68b8300f61593 +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-response/token-effect: + en: 533309d1f93b89de + zh: 4cc0b86f05c9be53 +/deepseek-ai-dsh-llm-deepseek/model-experience/deepseek-response/kv-cache-effect: + en: ddfbea043596878d + zh: 4fbf5864a684c053 +/deepseek-ai-dsh-llm-deepseek/known-limitations-and-deferred-work: + en: ff85701e1d416ad9 + zh: 55c8b93908ab53c1 +/deepseek-ai-dsh-llm-deepseek/known-limitations-and-deferred-work/dev-note: + en: 5b9e571c20e4ac72 + zh: dbb07a72ddc8f08b diff --git a/packages/llm/llm-pi-ai/README.i18n.yaml b/packages/llm/llm-pi-ai/README.i18n.yaml index c5fbc218d7..8afec3d794 100644 --- a/packages/llm/llm-pi-ai/README.i18n.yaml +++ b/packages/llm/llm-pi-ai/README.i18n.yaml @@ -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 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 packages/llm/llm-pi-ai/README.md -README.md: 7b1708b957202369382d8a93b2bbcefd31565f67 -README.zh.md: ed780ad235b1d8df2b821be6a0595ecd8b8e951b +/: + en: 8a6ec0a589e6fd18 + zh: e85fc352c9cba373 +/deepseek-ai-dsh-llm-pi-ai: + en: 33763dd0a848143d + zh: 82743942bc6df660 +/deepseek-ai-dsh-llm-pi-ai/summary: + en: ee82d88fee1332d6 + zh: 3e66b494e4844f97 +/deepseek-ai-dsh-llm-pi-ai/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm-pi-ai/use-this-package: + en: 86cf1940fb8bb1dc + zh: 862c10b2ca45a893 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/when-to-choose-it: + en: f3b761c7c7ecb82f + zh: e10d999aa348ef86 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/configure-provider-routes: + en: c5d28300fa2cfc6f + zh: c162855dcb54b65b +/deepseek-ai-dsh-llm-pi-ai/use-this-package/sign-in-to-a-provider: + en: c36f66438638ae08 + zh: 066a2fc4cb97c86f +/deepseek-ai-dsh-llm-pi-ai/use-this-package/resolve-the-model-catalog: + en: 376f83206858b601 + zh: 38bb6993609c96a6 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/run-with-reasoning-and-wire-compatibility: + en: 86b456496b54854e + zh: ff77ca11d39ba8d2 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/change-configuration-at-runtime: + en: 92f554e1718614ca + zh: f17ed3ad3e5d28e2 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/discover-models-from-endpoints: + en: 6619e8cfe7555c73 + zh: b2f80c25acb81cf8 +/deepseek-ai-dsh-llm-pi-ai/use-this-package/failures-and-recovery: + en: 65bcc3b0db3f98e5 + zh: 3c994e74894bea52 +/deepseek-ai-dsh-llm-pi-ai/understand-the-implementation: + en: 1598ac8a8bb9b6bf + zh: fdd089c5ae7722cd +/deepseek-ai-dsh-llm-pi-ai/understand-the-implementation/design-philosophy: + en: 280416de410744bb + zh: 64cbfc0902e3f436 +/deepseek-ai-dsh-llm-pi-ai/understand-the-implementation/source-map: + en: 20afee7bbfb332ca + zh: b080cf4e97094366 +/deepseek-ai-dsh-llm-pi-ai/understand-the-implementation/registration-and-directory: + en: 4da379c9be65c18a + zh: fd305d4bd3dfa452 +/deepseek-ai-dsh-llm-pi-ai/understand-the-implementation/replay-and-vocabulary: + en: ad7f22c0eba06eb0 + zh: 451ec5836425d7a1 +/deepseek-ai-dsh-llm-pi-ai/further-exploration: + en: a2a2ccdeae59d408 + zh: c47ee091aa90ad91 +/deepseek-ai-dsh-llm-pi-ai/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-request-through-pi-ai: + en: e7348db3f7115960 + zh: 5fd5fb09d7d09982 +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-request-through-pi-ai/what-the-model-sees: + en: 34e63beee750a3a9 + zh: a869322d161d922f +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-request-through-pi-ai/token-effect: + en: 820221e8ae37aa61 + zh: 7e6ff4db10067fc0 +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-request-through-pi-ai/kv-cache-effect: + en: 8c1f842a95ab46fb + zh: d6dd124c82f1d96b +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-response: + en: 802d7ff60a1d03ff + zh: c41c56e28f3e8680 +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-response/what-the-model-sees: + en: 9b7d6b95ec2c4351 + zh: 356ac01aef9e8bed +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-response/token-effect: + en: f002b21d0f4c3df0 + zh: 388c8ed4676ed1af +/deepseek-ai-dsh-llm-pi-ai/model-experience/provider-response/kv-cache-effect: + en: b6bd570c0159ba08 + zh: 7d2d91eea6a8d830 +/deepseek-ai-dsh-llm-pi-ai/known-limitations-and-deferred-work: + en: b72e581a744cf2ab + zh: d3b0bc7c8ec716fe +/deepseek-ai-dsh-llm-pi-ai/known-limitations-and-deferred-work/dev-note: + en: be67a4547256efbf + zh: 8c32799683ba292c diff --git a/packages/llm/llm-retry/README.i18n.yaml b/packages/llm/llm-retry/README.i18n.yaml index 19949ab02d..4f57ab2ad9 100644 --- a/packages/llm/llm-retry/README.i18n.yaml +++ b/packages/llm/llm-retry/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/llm/llm-retry/README.md -README.md: f923140df30faa11c419ea34a7d2ba71f4102555 -README.zh.md: f8cc3f21f4ddfe54e070c2d79764000925c4d240 +/: + en: 48b7b8ee60e92601 + zh: 28dfac5ed11f58ce +/deepseek-ai-dsh-llm-retry: + en: 3520978b6095ca72 + zh: 6c3d4db6528f8510 +/deepseek-ai-dsh-llm-retry/summary: + en: 215c17e795c11707 + zh: c9f063f79ca8b78f +/deepseek-ai-dsh-llm-retry/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm-retry/use-this-package: + en: ecee4f255eaa53bd + zh: 2e7983fd7668fa00 +/deepseek-ai-dsh-llm-retry/use-this-package/when-to-choose-it: + en: 17f7e708d9daed6c + zh: 6ebf99501110948a +/deepseek-ai-dsh-llm-retry/use-this-package/minimal-configuration: + en: 95b1cf09ee2c77a9 + zh: 4d45e437db4988c7 +/deepseek-ai-dsh-llm-retry/use-this-package/what-you-can-observe: + en: 21267b22ad48e012 + zh: 521bfad2c2d8e418 +/deepseek-ai-dsh-llm-retry/use-this-package/failures-and-recovery: + en: 730567739a21a4d2 + zh: 3ea222c68d960948 +/deepseek-ai-dsh-llm-retry/understand-the-implementation: + en: cef3289094f94c25 + zh: c7f40ff6e4e56de6 +/deepseek-ai-dsh-llm-retry/understand-the-implementation/design-philosophy: + en: fc4f15a14435698c + zh: 3c6d83f5ba04ec0e +/deepseek-ai-dsh-llm-retry/understand-the-implementation/source-map: + en: f34b551859b68c88 + zh: 813ffa32497b1d9a +/deepseek-ai-dsh-llm-retry/understand-the-implementation/recovery-flow: + en: 85bace285b029101 + zh: 6e0237450ca6ccc0 +/deepseek-ai-dsh-llm-retry/understand-the-implementation/waterfall-composition: + en: 388e8db333e03cb1 + zh: 54b6446ac3584724 +/deepseek-ai-dsh-llm-retry/further-exploration: + en: 379f79ac2cafe26d + zh: e6d23a010079e41d +/deepseek-ai-dsh-llm-retry/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-llm-retry/model-experience/model-request-recovery: + en: 8496b7aefbe6fa20 + zh: ed7b60ef09380ec4 +/deepseek-ai-dsh-llm-retry/model-experience/model-request-recovery/what-the-model-sees: + en: 9772b77e48e70dba + zh: df3d4105f7b8c256 +/deepseek-ai-dsh-llm-retry/model-experience/model-request-recovery/token-effect: + en: f86254d7c2ed2444 + zh: 7e0f7b9e026e0bf2 +/deepseek-ai-dsh-llm-retry/model-experience/model-request-recovery/kv-cache-effect: + en: 82d6bdfc0ec747ea + zh: 14269c9dcd086611 +/deepseek-ai-dsh-llm-retry/known-limitations-and-deferred-work: + en: bef1baa545592b9c + zh: 61984a1e10de8294 +/deepseek-ai-dsh-llm-retry/known-limitations-and-deferred-work/dev-note: + en: ff38027230617ebb + zh: 4a7913e851407b0c diff --git a/packages/llm/llm/README.i18n.yaml b/packages/llm/llm/README.i18n.yaml index 9b050e6c47..7e81d0077f 100644 --- a/packages/llm/llm/README.i18n.yaml +++ b/packages/llm/llm/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/llm/llm/README.md -README.md: c6697f5570c1af2077585d586e38f024a7b14f16 -README.zh.md: c288c924ffbb15d590f4f2b25c97409ccf80a4bd +/: + en: 860509fb08c860f4 + zh: b2c4448e8afc1f12 +/deepseek-ai-dsh-llm: + en: 919467ab4b4ef583 + zh: cb5752f140e58813 +/deepseek-ai-dsh-llm/summary: + en: 9b9ea6fea3088244 + zh: 09f2eb6606a030da +/deepseek-ai-dsh-llm/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm/use-this-package: + en: 33738e61ce410ac0 + zh: 363760460f4d4bed +/deepseek-ai-dsh-llm/use-this-package/when-to-choose-it: + en: c3ecb5a1421f27db + zh: 4bbd3c0e513845e1 +/deepseek-ai-dsh-llm/use-this-package/minimal-composition: + en: 7550d716b90fcb09 + zh: 77891a44ee623c7a +/deepseek-ai-dsh-llm/use-this-package/what-you-can-do: + en: b45d7a414141734e + zh: a641c8ea3827cee6 +/deepseek-ai-dsh-llm/use-this-package/failures-and-recovery: + en: 4afed1d3fba1a05d + zh: 5b1727a4340b4dea +/deepseek-ai-dsh-llm/understand-the-implementation: + en: 9630d7e26193a512 + zh: 94222c2a487c4b8c +/deepseek-ai-dsh-llm/understand-the-implementation/design-philosophy: + en: 12d0444c18a397c7 + zh: 9d4a5468b4bb7fcd +/deepseek-ai-dsh-llm/understand-the-implementation/source-map: + en: ae1618577f4e8364 + zh: a6e8ab1563c08dfb +/deepseek-ai-dsh-llm/understand-the-implementation/main-flow: + en: 6dc955a0d80f6ca0 + zh: f81dbcaeacd8b269 +/deepseek-ai-dsh-llm/understand-the-implementation/invariants: + en: 0163a050239248e5 + zh: 885c95bedcbe2ff4 +/deepseek-ai-dsh-llm/further-exploration: + en: 37e1d696afef8a88 + zh: 81f99c4507663cad +/deepseek-ai-dsh-llm/model-experience: + en: fa5677003ad6bc0a + zh: ba33cfc860d9c37c +/deepseek-ai-dsh-llm/model-experience/kv-cache-effect: + en: a81634136baef72f + zh: b92dda883986b0e1 +/deepseek-ai-dsh-llm/known-limitations-and-deferred-work: + en: 9576799a43bd0c10 + zh: 3a42264f05da8682 +/deepseek-ai-dsh-llm/known-limitations-and-deferred-work/dev-note: + en: ecbc333b88e14d88 + zh: 77c725d92efd8646 +/deepseek-ai-dsh-llm/known-limitations-and-deferred-work/dev-note/open-items: + en: 6b1a7e903e13ee21 + zh: bb62f2b1cc484bd5 diff --git a/packages/llm/plugin-package-inventory-deepseek/README.i18n.yaml b/packages/llm/plugin-package-inventory-deepseek/README.i18n.yaml index d5accc6249..fbe6d14eb4 100644 --- a/packages/llm/plugin-package-inventory-deepseek/README.i18n.yaml +++ b/packages/llm/plugin-package-inventory-deepseek/README.i18n.yaml @@ -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 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 packages/llm/plugin-package-inventory-deepseek/README.md -README.md: 72af2b9e6263499e3826b4ac31485f4df72af745 -README.zh.md: e1e5189239f7a1e72e954fc9f9ae39eac725d96c +/: + en: e10b56fe6b85f93b + zh: 7e5d4b03db35a436 +/deepseek-ai-dsh-plugin-package-inventory-deepseek: + en: b0996e1a88373a84 + zh: 3116d7e2bfe79073 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/summary: + en: b5542cfe298a16d4 + zh: 9e90ee2202260495 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/table-of-contents: + en: 13227fb47b30946f + zh: 97fe1dca5445d22a +/deepseek-ai-dsh-plugin-package-inventory-deepseek/configuration: + en: dea20f16d15856af + zh: 6548dc9da63375e5 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/collection: + en: f66c9c9d4c3f79c0 + zh: ef792b9986c12413 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/model-experience/package-inventory-metadata: + en: 8404d42a8da26f33 + zh: b02b147c99b2d7eb +/deepseek-ai-dsh-plugin-package-inventory-deepseek/model-experience/package-inventory-metadata/what-the-model-sees: + en: 4bd17508e6d1b4f2 + zh: 1b9af6cb52fca0b7 +/deepseek-ai-dsh-plugin-package-inventory-deepseek/model-experience/package-inventory-metadata/token-effect: + en: 0f65cf393a8ea010 + zh: ed89ff386373899d +/deepseek-ai-dsh-plugin-package-inventory-deepseek/model-experience/package-inventory-metadata/kv-cache-effect: + en: 6dc3e97d0281180a + zh: 7abe4d4b128ef32d +/deepseek-ai-dsh-plugin-package-inventory-deepseek/known-limitations-and-deferred-work: + en: d46a9293ac3dcaa2 + zh: 53e86d9d54dd3f8a +/deepseek-ai-dsh-plugin-package-inventory-deepseek/known-limitations-and-deferred-work/dev-note: + en: 39e2b90768772390 + zh: d49e34ab1d02adbb diff --git a/packages/llm/token-meter/README.i18n.yaml b/packages/llm/token-meter/README.i18n.yaml index d0008ecc2f..161e2e3988 100644 --- a/packages/llm/token-meter/README.i18n.yaml +++ b/packages/llm/token-meter/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/llm/token-meter/README.md -README.md: e6d957bd14560d967fb221b147d87d7db42197ea -README.zh.md: 526be7b2e399bcf6f4638ece9a7315044fa48c55 +/: + en: 6eda56ef696001df + zh: 13f961071e8609a7 +/deepseek-ai-dsh-token-meter: + en: e51cc1114d193318 + zh: f45cbb692bc8de69 +/deepseek-ai-dsh-token-meter/summary: + en: 106e3eda9a85bdd1 + zh: 051bc764bf7a1912 +/deepseek-ai-dsh-token-meter/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-token-meter/use-this-package: + en: 5907ef1472773a47 + zh: 06f1e988290a32c6 +/deepseek-ai-dsh-token-meter/use-this-package/when-to-choose-it: + en: e8c4cd1e945f86ba + zh: 133c1f1a85179d30 +/deepseek-ai-dsh-token-meter/use-this-package/measuring-pressure: + en: 58de3b364ab5af6b + zh: c5440af43d321e56 +/deepseek-ai-dsh-token-meter/use-this-package/session-projections: + en: 0a4c3ae2763be227 + zh: 0e2c5a77f9b4b94f +/deepseek-ai-dsh-token-meter/use-this-package/composition: + en: 1a0b7f49e01cba08 + zh: 666213a1024767c5 +/deepseek-ai-dsh-token-meter/use-this-package/reading-the-numbers: + en: 7950203e0c146123 + zh: 4fe421b2268f12a9 +/deepseek-ai-dsh-token-meter/understand-the-implementation: + en: 9630d7e26193a512 + zh: 94222c2a487c4b8c +/deepseek-ai-dsh-token-meter/understand-the-implementation/design-philosophy: + en: 921a2c40433abc06 + zh: 5172de58e8724be8 +/deepseek-ai-dsh-token-meter/understand-the-implementation/source-map: + en: 0bea6321416c49d4 + zh: 5446b39910df9829 +/deepseek-ai-dsh-token-meter/understand-the-implementation/fold-flow: + en: c97959d84cf8a1a4 + zh: f17570caa42a1a8e +/deepseek-ai-dsh-token-meter/understand-the-implementation/projection-semantics: + en: 91930cc59e849205 + zh: a530fcc3d57133bc +/deepseek-ai-dsh-token-meter/further-exploration: + en: 32cf70f8c66ca097 + zh: a7daf5e0732f31c3 +/deepseek-ai-dsh-token-meter/model-experience: + en: 8aae37ff5ed5fc76 + zh: 5773d20de3acfb4f +/deepseek-ai-dsh-token-meter/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: c2284876b56d2dbc +/deepseek-ai-dsh-token-meter/known-limitations-and-deferred-work: + en: a8c57e6f8c5009a2 + zh: 5975018d14bfbdbb +/deepseek-ai-dsh-token-meter/known-limitations-and-deferred-work/dev-note: + en: ce725ee5fe2ebaa3 + zh: 0cd07dddbf4011c0 diff --git a/packages/lsp/README.i18n.yaml b/packages/lsp/README.i18n.yaml index b6a2758736..107a3fa604 100644 --- a/packages/lsp/README.i18n.yaml +++ b/packages/lsp/README.i18n.yaml @@ -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 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 packages/lsp/README.md -README.md: e9e8806fb1d915c4b8f03080d682a2ae7a5d4d8d -README.zh.md: add0ad640733d1ea12c7d950f5a8c1f62ad4810e +/: + en: de26a0afcbda2fda + zh: a4f20046396ddfd7 +/lsp-language-server-code-navigation: + en: b3663a479c6987c1 + zh: 0a77728178955b55 +/lsp-language-server-code-navigation/summary: + en: c519cb73d4fb82c8 + zh: cae489e30b74c832 +/lsp-language-server-code-navigation/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/lsp-language-server-code-navigation/packages: + en: cbf9c6ede451bdc5 + zh: e2bd760703c05834 +/lsp-language-server-code-navigation/related-documentation: + en: 4f3ff4a06e810f77 + zh: 89c0bdf89cdf4dbc +/lsp-language-server-code-navigation/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/lsp/lsp-stdio/README.i18n.yaml b/packages/lsp/lsp-stdio/README.i18n.yaml index f989eeb886..68cd4e3c5c 100644 --- a/packages/lsp/lsp-stdio/README.i18n.yaml +++ b/packages/lsp/lsp-stdio/README.i18n.yaml @@ -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 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 packages/lsp/lsp-stdio/README.md -README.md: 5f0f19255ed39432ce0bb1a59f7b9f08c02a4bf8 -README.zh.md: 5380f2cec79a34d8f40de8e195049699857f0d99 +/: + en: c9eac4288ae5293a + zh: fb718ad3c2da3e49 +/deepseek-ai-dsh-lsp-stdio: + en: 79147f5b588a6d6a + zh: 12d7ab50d6fe0850 +/deepseek-ai-dsh-lsp-stdio/summary: + en: 9bb3631289433c95 + zh: 4b30c9a4aa5186b8 +/deepseek-ai-dsh-lsp-stdio/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-lsp-stdio/use-this-package: + en: c632954ac645e57e + zh: 646525beedbdb97c +/deepseek-ai-dsh-lsp-stdio/use-this-package/minimal-configuration: + en: 3cf011ee27d835e8 + zh: f1a8fbf0f26b8f98 +/deepseek-ai-dsh-lsp-stdio/use-this-package/what-a-query-does: + en: 41363baf8fdba020 + zh: d1a6193b1aa813ba +/deepseek-ai-dsh-lsp-stdio/use-this-package/observable-success-and-failures: + en: 57f3a82c014af107 + zh: 770fc617c1ab0eab +/deepseek-ai-dsh-lsp-stdio/use-this-package/security-boundary: + en: f1f7fef771bcaa6d + zh: f11dcf771a6fecfc +/deepseek-ai-dsh-lsp-stdio/understand-the-implementation: + en: 8a5efa64f5b12f88 + zh: 451548c05c045c22 +/deepseek-ai-dsh-lsp-stdio/understand-the-implementation/design-philosophy: + en: 7e5e63f993a287f2 + zh: a5a01b22551e5d46 +/deepseek-ai-dsh-lsp-stdio/understand-the-implementation/source-map: + en: c1eb566e6aa64d09 + zh: 6fa10484e329e570 +/deepseek-ai-dsh-lsp-stdio/understand-the-implementation/protocol-behavior: + en: 0f9bac88ad9448b8 + zh: f5d3a2e61a596003 +/deepseek-ai-dsh-lsp-stdio/further-exploration: + en: 2b280b85054f6b9f + zh: 6e609d42db7da87c +/deepseek-ai-dsh-lsp-stdio/model-experience: + en: b366d0dfbfeb2d91 + zh: 72a7a8d957b13eb4 +/deepseek-ai-dsh-lsp-stdio/model-experience/kv-cache-effect: + en: 64354484a5367fbc + zh: aec3e5c7933389b6 +/deepseek-ai-dsh-lsp-stdio/known-limitations-and-deferred-work: + en: dc4fc5797b3b2d38 + zh: f04e4159ce280218 +/deepseek-ai-dsh-lsp-stdio/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/lsp/lsp/README.i18n.yaml b/packages/lsp/lsp/README.i18n.yaml index f31b242dd8..cd79e675c4 100644 --- a/packages/lsp/lsp/README.i18n.yaml +++ b/packages/lsp/lsp/README.i18n.yaml @@ -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 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 packages/lsp/lsp/README.md -README.md: 2dcd3c39ab4b82403794aaaf4b4ed6a79e7658f0 -README.zh.md: 57d4660f1461cb7b2da0cd130fc335f02c685060 +/: + en: 1a8099ab9b557ff7 + zh: 7054b2eab0e1fda8 +/deepseek-ai-dsh-lsp: + en: bb557e65ee422869 + zh: c08d0c2e9b2ee2ef +/deepseek-ai-dsh-lsp/summary: + en: bc28d928b7c91cdd + zh: cef56a54a4c37fb7 +/deepseek-ai-dsh-lsp/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-lsp/use-this-package: + en: 39ddcc57203b5a43 + zh: ee46b6bb58434337 +/deepseek-ai-dsh-lsp/use-this-package/when-to-choose-it: + en: 104953d3732e7d81 + zh: 54acd5d4742bd728 +/deepseek-ai-dsh-lsp/use-this-package/composing-a-navigation-stack: + en: 64b371f995cde1fa + zh: 7193378b7500fbc3 +/deepseek-ai-dsh-lsp/use-this-package/the-four-operations: + en: 201a9b2f8dfb13eb + zh: c9041adde15602c1 +/deepseek-ai-dsh-lsp/use-this-package/failures-and-recovery: + en: eeeff6f68bba6807 + zh: a83372441c505bb6 +/deepseek-ai-dsh-lsp/understand-the-implementation: + en: 1e0acac55fc6c314 + zh: fe4ebe8a86dc480f +/deepseek-ai-dsh-lsp/understand-the-implementation/design-philosophy: + en: cde960c2cecb7265 + zh: b6b2b355a68bf2e7 +/deepseek-ai-dsh-lsp/understand-the-implementation/source-map: + en: 25af1e58f8ab8854 + zh: 90aec5ee2441bd96 +/deepseek-ai-dsh-lsp/understand-the-implementation/registration-and-selection-lifecycle: + en: 549e97f436b1570c + zh: df0436c58dd31175 +/deepseek-ai-dsh-lsp/further-exploration: + en: 68ddb41fb1af51fb + zh: 6a68fc24a6a06d0c +/deepseek-ai-dsh-lsp/model-experience: + en: c3bcb4f1107907d4 + zh: 961e245182fac6d7 +/deepseek-ai-dsh-lsp/model-experience/kv-cache-effect: + en: 64354484a5367fbc + zh: aec3e5c7933389b6 +/deepseek-ai-dsh-lsp/known-limitations-and-deferred-work: + en: e7ba99257e4da9e6 + zh: e384e82d4c707af1 +/deepseek-ai-dsh-lsp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/lsp/tool-lsp/README.i18n.yaml b/packages/lsp/tool-lsp/README.i18n.yaml index bee14a7d64..68d60a7492 100644 --- a/packages/lsp/tool-lsp/README.i18n.yaml +++ b/packages/lsp/tool-lsp/README.i18n.yaml @@ -1,6 +1,103 @@ -# 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 packages/lsp/tool-lsp/README.md -README.md: 2a5483aabe75bbbf9ff39fa8263d97a1488d70b4 -README.zh.md: 8a5b91e049892e22480176790110aef3f253fa28 +/: + en: 9004a9a19d07ed3d + zh: 73bc717fc10e0f7c +/deepseek-ai-dsh-tool-lsp: + en: 075c562851f13855 + zh: f996f9cffba1ad5e +/deepseek-ai-dsh-tool-lsp/summary: + en: 61f5312c56bdafcf + zh: 1371bf41d5759adf +/deepseek-ai-dsh-tool-lsp/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-lsp/use-this-package: + en: 755832ede150d487 + zh: 5f5058b7f6b41f8e +/deepseek-ai-dsh-tool-lsp/use-this-package/the-tool: + en: 46cbff3bda30f0bc + zh: 66e209ae78fb4683 +/deepseek-ai-dsh-tool-lsp/use-this-package/what-the-model-gets-back: + en: a99cb065502a29df + zh: 3224078413b11e56 +/deepseek-ai-dsh-tool-lsp/use-this-package/configuration: + en: c6ca5869a35edefa + zh: 65378aff80dfc93c +/deepseek-ai-dsh-tool-lsp/use-this-package/failures-and-recovery: + en: 0a18aa55ff17c31c + zh: f7c1b9f34404d27e +/deepseek-ai-dsh-tool-lsp/understand-the-implementation: + en: 6574e484bce0e60b + zh: 75688d1f9dde8f48 +/deepseek-ai-dsh-tool-lsp/understand-the-implementation/design-notes: + en: 9e9f50894b853946 + zh: 7137a1894339ad5f +/deepseek-ai-dsh-tool-lsp/understand-the-implementation/source-map: + en: 6b14444729010597 + zh: de5b7453bb7fd3be +/deepseek-ai-dsh-tool-lsp/further-exploration: + en: f4965ba5ea4f8ee3 + zh: b85ee14edf9fdef0 +/deepseek-ai-dsh-tool-lsp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-lsp/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-lsp/model-experience/system-prompt/what-the-model-sees: + en: b98791f1e744d70d + zh: 8d032d65cc504ca2 +/deepseek-ai-dsh-tool-lsp/model-experience/system-prompt/what-the-model-sees/verbatim-guidance: + en: ee8865eda3bcc252 + zh: d803130744ad115b +/deepseek-ai-dsh-tool-lsp/model-experience/system-prompt/token-effect: + en: 87ab7d417091d6af + zh: 900fd47b43e30780 +/deepseek-ai-dsh-tool-lsp/model-experience/system-prompt/kv-cache-effect: + en: 06924f4bd0fe36e8 + zh: 9544e7b277410bdd +/deepseek-ai-dsh-tool-lsp/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-lsp/model-experience/tool-schema/what-the-model-sees: + en: 2492d9786f7e77dd + zh: 900efb8fcb0b7be4 +/deepseek-ai-dsh-tool-lsp/model-experience/tool-schema/token-effect: + en: 72a9d451f6de2b69 + zh: 5764c9b75aaf8696 +/deepseek-ai-dsh-tool-lsp/model-experience/tool-schema/kv-cache-effect: + en: fea26d63a22a24a5 + zh: 75221c0869277ba6 +/deepseek-ai-dsh-tool-lsp/model-experience/results: + en: 8e1b2953471f22ba + zh: 765a7c4655654c0a +/deepseek-ai-dsh-tool-lsp/model-experience/results/what-the-model-sees: + en: bd542c34738f89ff + zh: ea5dfb355a69b77d +/deepseek-ai-dsh-tool-lsp/model-experience/results/token-effect: + en: aabdabfa49d5d9ae + zh: e94db3156a4b89ba +/deepseek-ai-dsh-tool-lsp/model-experience/results/kv-cache-effect: + en: 9066617f92cf6f41 + zh: a483c096885dd13e +/deepseek-ai-dsh-tool-lsp/model-experience/ui-presentation: + en: 8dafa00fd9733662 + zh: 0247f0b45739dbf7 +/deepseek-ai-dsh-tool-lsp/model-experience/ui-presentation/what-the-model-sees: + en: 741711f836a55f96 + zh: 5ce94cfcd3ba690c +/deepseek-ai-dsh-tool-lsp/model-experience/ui-presentation/token-effect: + en: fd077e60d2f06116 + zh: aff2bd208af287c3 +/deepseek-ai-dsh-tool-lsp/model-experience/ui-presentation/kv-cache-effect: + en: eabdce686776b12b + zh: e611cb52a4f989f2 +/deepseek-ai-dsh-tool-lsp/known-limitations-and-deferred-work: + en: 3673e6b20a8b8ed7 + zh: d17ccdc0c5a8855b +/deepseek-ai-dsh-tool-lsp/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/mcp/README.i18n.yaml b/packages/mcp/README.i18n.yaml index e0024b3d18..1d198d6a2e 100644 --- a/packages/mcp/README.i18n.yaml +++ b/packages/mcp/README.i18n.yaml @@ -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 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 packages/mcp/README.md -README.md: 3eaf0ed269ea4c0e0dbc86ca0a376b8b1634f070 -README.zh.md: 85245bf415f3a558f11623327f93ff1639576e9b +/: + en: e6a2aa771ce2d33c + zh: e072e7f0f03d7f0f +/mcp-model-context-protocol: + en: be340e963004963c + zh: adc5f7ca52d59bb8 +/mcp-model-context-protocol/summary: + en: b7924c83f407b302 + zh: 87ce606631f8a3ec +/mcp-model-context-protocol/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/mcp-model-context-protocol/packages: + en: ff8d121ea1436a65 + zh: 6a66e0265884fa7b +/mcp-model-context-protocol/related-documentation: + en: cd505cf851d46a53 + zh: 7d47dd75334475ee +/mcp-model-context-protocol/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/mcp/mcp-client/README.i18n.yaml b/packages/mcp/mcp-client/README.i18n.yaml index b4d1c4a46f..9e74c74c4b 100644 --- a/packages/mcp/mcp-client/README.i18n.yaml +++ b/packages/mcp/mcp-client/README.i18n.yaml @@ -1,6 +1,97 @@ -# 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 packages/mcp/mcp-client/README.md -README.md: d9f81a79b8c54b1437d051f46a72196fd84742c9 -README.zh.md: d6f3e9337c80e5535bb1239dfb7752f3485dbde3 +/: + en: 6440e0efb151c0fa + zh: d767308eb95b9d3f +/deepseek-ai-dsh-mcp-client: + en: c3e635d210dd707e + zh: bd749579307d6a2d +/deepseek-ai-dsh-mcp-client/summary: + en: 428cc4078a9d5b53 + zh: 49b867131f518c0f +/deepseek-ai-dsh-mcp-client/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-mcp-client/use-this-package: + en: e77871d58566601a + zh: c5ef229d22eb3ebf +/deepseek-ai-dsh-mcp-client/use-this-package/minimal-configuration: + en: 4d8b58f6a5e0c3f1 + zh: 28e1c06aeef33131 +/deepseek-ai-dsh-mcp-client/use-this-package/tool-naming-and-coexistence: + en: 75ae9745d5b04796 + zh: 8ae5b8ca6e73296e +/deepseek-ai-dsh-mcp-client/use-this-package/calling-tools-and-reading-results: + en: cad16c6102b0e316 + zh: 03841eea6ead54cd +/deepseek-ai-dsh-mcp-client/use-this-package/startup-updates-and-reconnection: + en: d7b393106cf6b8fc + zh: a95bdc34e914b0da +/deepseek-ai-dsh-mcp-client/understand-the-implementation: + en: d33ddd080880b3f5 + zh: 64328f5239c26752 +/deepseek-ai-dsh-mcp-client/understand-the-implementation/design-philosophy: + en: 4e213d68082b07f0 + zh: 7617949ba46a3b63 +/deepseek-ai-dsh-mcp-client/understand-the-implementation/source-map: + en: ab2bbaa701f24c2c + zh: c6db79438239388e +/deepseek-ai-dsh-mcp-client/understand-the-implementation/lifecycle-and-sync: + en: ae9029b48b2a2e4e + zh: 048f08361b799667 +/deepseek-ai-dsh-mcp-client/understand-the-implementation/tool-execution-internals: + en: b4333df1bd3f027c + zh: 6bb4be691452c27a +/deepseek-ai-dsh-mcp-client/understand-the-implementation/environment-scrubbing-stdio: + en: fef482a6f8cc789f + zh: 08f4c594ec83b4a1 +/deepseek-ai-dsh-mcp-client/further-exploration: + en: 402f4148cc9a39eb + zh: 02060d6909b39f7e +/deepseek-ai-dsh-mcp-client/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-mcp-client/model-experience/discovered-mcp-tools: + en: 9f6397197d9a607d + zh: 79cf93aaf2e25a39 +/deepseek-ai-dsh-mcp-client/model-experience/discovered-mcp-tools/what-the-model-sees: + en: 866a129e71634e0e + zh: b27e4b22a07c2f26 +/deepseek-ai-dsh-mcp-client/model-experience/discovered-mcp-tools/token-effect: + en: ac85a6a5130c6440 + zh: 9a31229f5355432b +/deepseek-ai-dsh-mcp-client/model-experience/discovered-mcp-tools/kv-cache-effect: + en: dae97512f6d61027 + zh: 5e6103fab15ab42d +/deepseek-ai-dsh-mcp-client/model-experience/tool-call-history-and-results: + en: a8503137ad03720c + zh: 611a2dadf7c0c706 +/deepseek-ai-dsh-mcp-client/model-experience/tool-call-history-and-results/what-the-model-sees: + en: 5b3a7fe5bf11e73b + zh: e015c2468962fcf3 +/deepseek-ai-dsh-mcp-client/model-experience/tool-call-history-and-results/token-effect: + en: cc030374eca00e1c + zh: d4b19b9db621b367 +/deepseek-ai-dsh-mcp-client/model-experience/tool-call-history-and-results/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-mcp-client/model-experience/server-instructions: + en: a3cb7c5760a8c141 + zh: ec9fc8d4f00a5eb6 +/deepseek-ai-dsh-mcp-client/model-experience/server-instructions/what-the-model-sees: + en: d3e9d53702f9c494 + zh: 62bd2b185abbd38c +/deepseek-ai-dsh-mcp-client/model-experience/server-instructions/token-effect: + en: 082214331ebf38d7 + zh: 2251c4f8e4d2e05c +/deepseek-ai-dsh-mcp-client/model-experience/server-instructions/kv-cache-effect: + en: 189198f7ace2a991 + zh: 00948145a803d614 +/deepseek-ai-dsh-mcp-client/known-limitations-and-deferred-work: + en: 56be94497d0658a1 + zh: df9bfeee7300a101 +/deepseek-ai-dsh-mcp-client/known-limitations-and-deferred-work/dev-note: + en: 0ef388d17ea82af1 + zh: e7104aeb4b23c660 diff --git a/packages/mcp/mcp-resources/README.i18n.yaml b/packages/mcp/mcp-resources/README.i18n.yaml index 0d2f2cf4ca..180978c72c 100644 --- a/packages/mcp/mcp-resources/README.i18n.yaml +++ b/packages/mcp/mcp-resources/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/mcp/mcp-resources/README.md -README.md: 050cce658ffcb96e592320b028c757ed86ed3b53 -README.zh.md: 693c58face75da5bdbaadb0fac98b264dd4ed171 +/: + en: 34b851d97ea0313e + zh: 2fa00063647b6eee +/deepseek-ai-dsh-mcp-resources: + en: 81abc44a56e1c7d3 + zh: 34bb6d70ea0219a0 +/deepseek-ai-dsh-mcp-resources/summary: + en: 03c61c0b7beab085 + zh: 4c5efe7fa7d8da36 +/deepseek-ai-dsh-mcp-resources/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-mcp-resources/use-this-package: + en: 6df1a242b8679b3d + zh: 9dd9363d22d8a660 +/deepseek-ai-dsh-mcp-resources/use-this-package/server-configuration: + en: ec0195a4ad06b3ab + zh: 0b5c41a4f8ff511e +/deepseek-ai-dsh-mcp-resources/use-this-package/discover-and-read: + en: f7fb6597acd3c5dc + zh: 9c59219fb4ab00d9 +/deepseek-ai-dsh-mcp-resources/understand-the-implementation: + en: e0e93efbb88e6047 + zh: b941463944659422 +/deepseek-ai-dsh-mcp-resources/further-exploration: + en: 66e212708f2fa883 + zh: da8e26a414e86d55 +/deepseek-ai-dsh-mcp-resources/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-mcp-resources/model-experience/shared-resource-tools: + en: 520e0b6cb35e4285 + zh: 20a323f87e6d12fc +/deepseek-ai-dsh-mcp-resources/model-experience/shared-resource-tools/what-the-model-sees: + en: a4bcd3734a1fbd07 + zh: abc25fb23ebaf485 +/deepseek-ai-dsh-mcp-resources/model-experience/shared-resource-tools/token-effect: + en: 92682e15ca9e90a5 + zh: 3487ef2adb89c9e4 +/deepseek-ai-dsh-mcp-resources/model-experience/shared-resource-tools/kv-cache-effect: + en: fdb450babcdf877b + zh: f013ae46ce9e1125 +/deepseek-ai-dsh-mcp-resources/model-experience/resource-results: + en: f46ae3151a215b4d + zh: 8d15019792d3fe61 +/deepseek-ai-dsh-mcp-resources/model-experience/resource-results/what-the-model-sees: + en: 62d0a18c52283474 + zh: 70b2fbea70c98818 +/deepseek-ai-dsh-mcp-resources/model-experience/resource-results/token-effect: + en: e6fb5043a1ccc6ff + zh: d15d2e7b5986d614 +/deepseek-ai-dsh-mcp-resources/model-experience/resource-results/kv-cache-effect: + en: ea0dfc069bf175c0 + zh: 3e1465e56ff79764 +/deepseek-ai-dsh-mcp-resources/known-limitations-and-deferred-work: + en: 58d13dc99946c11d + zh: 4099c46a1ca60512 +/deepseek-ai-dsh-mcp-resources/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/plan/README.i18n.yaml b/packages/plan/README.i18n.yaml index 525c38610f..2c2c363e4f 100644 --- a/packages/plan/README.i18n.yaml +++ b/packages/plan/README.i18n.yaml @@ -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 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 packages/plan/README.md -README.md: 74d31556db057c6289d9738218cddac629e95c97 -README.zh.md: d0998088e50260fb8bf8d044147710a9d78065f0 +/: + en: 7d0618763591cc1e + zh: 2787cf286ad71524 +/plan-plan-collaboration-state: + en: 88bfa63f89c7720d + zh: 8017ab5c89bd13cf +/plan-plan-collaboration-state/summary: + en: e7e55e6490c766ec + zh: 16bc34cebd0b453a +/plan-plan-collaboration-state/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/plan-plan-collaboration-state/packages: + en: 851a053859e914fc + zh: 2430d56699265408 +/plan-plan-collaboration-state/related-documentation: + en: d67e4daabfde8465 + zh: 7fe00aa5e6b558e5 +/plan-plan-collaboration-state/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/plan/plan-mode/README.i18n.yaml b/packages/plan/plan-mode/README.i18n.yaml index 87aee0ed5e..38990a3225 100644 --- a/packages/plan/plan-mode/README.i18n.yaml +++ b/packages/plan/plan-mode/README.i18n.yaml @@ -1,6 +1,109 @@ -# 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 packages/plan/plan-mode/README.md -README.md: 642caf0c6db6470e93c7b0583d2bfe145ed99f29 -README.zh.md: 4165d5b925083d10c76312d00293fd0b0ac84ba0 +/: + en: 2d2e1f1234a40dd8 + zh: 137e06497bc0faa4 +/deepseek-ai-dsh-plan-mode: + en: bec45b226b0c8de7 + zh: 4058bc63ef4cf091 +/deepseek-ai-dsh-plan-mode/summary: + en: def14e1297455361 + zh: 3208d09bbb0edc3c +/deepseek-ai-dsh-plan-mode/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-plan-mode/use-this-package: + en: 97a276da34bf0e32 + zh: 8d13a8c5ef1436d7 +/deepseek-ai-dsh-plan-mode/use-this-package/when-to-choose-it: + en: a239fa47a3039164 + zh: 1181872cdf846357 +/deepseek-ai-dsh-plan-mode/use-this-package/minimal-configuration: + en: 30b67de3f6e97eab + zh: 746cc81fbf5e0ed1 +/deepseek-ai-dsh-plan-mode/use-this-package/entering-and-leaving-plan-mode: + en: 2d300cdb883352ec + zh: 5a81be005b3716d3 +/deepseek-ai-dsh-plan-mode/use-this-package/the-reviewed-exit: + en: ffc56477380b9411 + zh: 17cac060f2252d78 +/deepseek-ai-dsh-plan-mode/use-this-package/observing-plan-state: + en: b44e92bc38406015 + zh: ed56190bee5d71a4 +/deepseek-ai-dsh-plan-mode/understand-the-implementation: + en: 16370ef642feec6a + zh: 72aab8cf7795472e +/deepseek-ai-dsh-plan-mode/understand-the-implementation/design-philosophy: + en: 0acc88b042a99380 + zh: e4cf66b77f2fc7ae +/deepseek-ai-dsh-plan-mode/understand-the-implementation/durable-state-and-step-boundary-appends: + en: ff946ab59a7b4a0f + zh: b1c79937770f57ad +/deepseek-ai-dsh-plan-mode/understand-the-implementation/the-plan-command: + en: a7bf35c2a9da52bc + zh: dea9f4b3a41f1a6d +/deepseek-ai-dsh-plan-mode/understand-the-implementation/the-exit-tool: + en: 56798d0f45fb5775 + zh: 282e4a522ce6dae0 +/deepseek-ai-dsh-plan-mode/understand-the-implementation/session-projection-unit: + en: 74cd6bdf50af51f5 + zh: 67609cf7202ececb +/deepseek-ai-dsh-plan-mode/understand-the-implementation/source-map: + en: 4ee4cfb5fceccdf1 + zh: 12035b72e1996a55 +/deepseek-ai-dsh-plan-mode/further-exploration: + en: b6f3ce071f1b7e9b + zh: 84b7fe88e09866d8 +/deepseek-ai-dsh-plan-mode/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-plan-mode/model-experience/plan-policy-system-prompt: + en: 28219e680bcadc65 + zh: 264cddf4c1f282ab +/deepseek-ai-dsh-plan-mode/model-experience/plan-policy-system-prompt/what-the-model-sees: + en: 3298c6752fd67bab + zh: d0132ee432a2a671 +/deepseek-ai-dsh-plan-mode/model-experience/plan-policy-system-prompt/what-the-model-sees/configuration-example: + en: 85ceebb0d1aae24f + zh: 1954f2ad3d538621 +/deepseek-ai-dsh-plan-mode/model-experience/plan-policy-system-prompt/token-effect: + en: 4e339015c4c0dff8 + zh: a61e28944707f43d +/deepseek-ai-dsh-plan-mode/model-experience/plan-policy-system-prompt/kv-cache-effect: + en: 1331892c04e7a2f9 + zh: f35152173255962f +/deepseek-ai-dsh-plan-mode/model-experience/human-command: + en: 4d1ec2182c2ac7ec + zh: 1c9c4a30d8a89075 +/deepseek-ai-dsh-plan-mode/model-experience/human-command/what-the-model-sees: + en: 3aa6c3e57f8e6982 + zh: f11d289a94976e49 +/deepseek-ai-dsh-plan-mode/model-experience/human-command/token-effect: + en: fab2133874ee6b9a + zh: 835e97e46df66dc0 +/deepseek-ai-dsh-plan-mode/model-experience/human-command/kv-cache-effect: + en: 3fea3b0fa514c75c + zh: cd479f56ac1eae9d +/deepseek-ai-dsh-plan-mode/model-experience/exit-tool-schema-and-review-exchange: + en: 9622e96bdc01276d + zh: 53801e68a49f3d1d +/deepseek-ai-dsh-plan-mode/model-experience/exit-tool-schema-and-review-exchange/what-the-model-sees: + en: 3768d0189f9f13af + zh: 2168a9b24551b7c6 +/deepseek-ai-dsh-plan-mode/model-experience/exit-tool-schema-and-review-exchange/token-effect: + en: d1b1418f20ee119d + zh: c2b89ea3cae57175 +/deepseek-ai-dsh-plan-mode/model-experience/exit-tool-schema-and-review-exchange/kv-cache-effect: + en: 6b1404ea11f1e60d + zh: 348d0579de218652 +/deepseek-ai-dsh-plan-mode/known-limitations-and-deferred-work: + en: a87aabfede0087fd + zh: 201e9b3766980005 +/deepseek-ai-dsh-plan-mode/known-limitations-and-deferred-work/dev-note: + en: 7de02cd33a767bd6 + zh: d9e54003f230f725 +/deepseek-ai-dsh-plan-mode/known-limitations-and-deferred-work/dev-note/future-a-second-collaboration-mode: + en: 556b49684461978b + zh: 9ac9f09b0aedc589 diff --git a/packages/preset/README.i18n.yaml b/packages/preset/README.i18n.yaml index bd82e1ace2..3242855919 100644 --- a/packages/preset/README.i18n.yaml +++ b/packages/preset/README.i18n.yaml @@ -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 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 packages/preset/README.md -README.md: 1a68961007ab04d7266964760f3518d24a595c0c -README.zh.md: 4d9a096f2bf3a9689be5735ec751d1e8eeaf34f0 +/: + en: bf78775fc0ac661f + zh: 77736bbf08c5bdf1 +/packages-preset: + en: f29a516e6f4757bd + zh: f160326a4f7bb205 +/packages-preset/summary: + en: e0d647994002f9e9 + zh: 73611257a7484b0a +/packages-preset/table-of-contents: + en: 09848f4d056e4fc1 + zh: 6bca793b1f500b9b +/packages-preset/packages: + en: 251a41a763196f31 + zh: 42576a406ace69e0 +/packages-preset/related-documentation: + en: 2cc924ec88160d55 + zh: 2e41339440c4e69d +/packages-preset/dev-note: + en: 5de1d6304e00c58f + zh: 99af14fddf3db5e6 diff --git a/packages/preset/agent-preset-registry/README.i18n.yaml b/packages/preset/agent-preset-registry/README.i18n.yaml index a7792a0e26..7df320158f 100644 --- a/packages/preset/agent-preset-registry/README.i18n.yaml +++ b/packages/preset/agent-preset-registry/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/preset/agent-preset-registry/README.md -README.md: 44b01be1ceea5936668f091fb410137f3a139a88 -README.zh.md: a0c75fa50ba781ffc394e04502c922684beda387 +/: + en: e984a1ae0ffb6b97 + zh: f1246772a5b47191 +/deepseek-ai-dsh-agent-preset-registry: + en: 6b6e424e5365953e + zh: f0bd3469bd33e690 +/deepseek-ai-dsh-agent-preset-registry/summary: + en: a451ec1d5b54b334 + zh: 777d5043e9c2e9eb +/deepseek-ai-dsh-agent-preset-registry/table-of-contents: + en: d152484eb41ac6b4 + zh: b3ad7867f23dad1c +/deepseek-ai-dsh-agent-preset-registry/use-this-package: + en: bbff250eba0f1b89 + zh: b20a47f82d8ab6e0 +/deepseek-ai-dsh-agent-preset-registry/use-this-package/minimal-configuration: + en: 981929e49dca14b0 + zh: 4969893ca131039b +/deepseek-ai-dsh-agent-preset-registry/understand-the-implementation: + en: 11a1a4847ffc68b4 + zh: 9e1ca14d642b43ac +/deepseek-ai-dsh-agent-preset-registry/further-exploration: + en: bbae8d79844bc481 + zh: 4302107fd1f460e6 +/deepseek-ai-dsh-agent-preset-registry/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-agent-preset-registry/model-experience/preset-selection: + en: 9c05062c86e3d148 + zh: 2e894dd9d93b65ba +/deepseek-ai-dsh-agent-preset-registry/model-experience/preset-selection/what-the-model-sees: + en: 9266e780cd183409 + zh: b07bfe9fdb8b6f45 +/deepseek-ai-dsh-agent-preset-registry/model-experience/preset-selection/token-effect: + en: 5bc14d87cbb67afd + zh: 99f62bdfcb31ab90 +/deepseek-ai-dsh-agent-preset-registry/model-experience/preset-selection/kv-cache-effect: + en: 5e043b0b4ee03719 + zh: a929e47776e209e0 +/deepseek-ai-dsh-agent-preset-registry/known-limitations-and-deferred-work: + en: 8a32adf5c133fca3 + zh: a066085a05e9b103 +/deepseek-ai-dsh-agent-preset-registry/known-limitations-and-deferred-work/dev-note: + en: b84837a00b08ed7b + zh: 9de7aee8b9357fe9 diff --git a/packages/preset/agent-preset/README.i18n.yaml b/packages/preset/agent-preset/README.i18n.yaml index edcf09e391..df88f455fb 100644 --- a/packages/preset/agent-preset/README.i18n.yaml +++ b/packages/preset/agent-preset/README.i18n.yaml @@ -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 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 packages/preset/agent-preset/README.md -README.md: 99802e2592e046c0580a77b5891a5b79c1e3f1f5 -README.zh.md: 1130b015a8f7bafcf9b675abd3ca6d654d8e2d7f +/: + en: a3eb6ca39858c3d0 + zh: 6fc16750d5f06034 +/deepseek-ai-dsh-agent-preset: + en: 235ea99143b6a9e6 + zh: ce610d328ae84b89 +/deepseek-ai-dsh-agent-preset/summary: + en: af8933f035049563 + zh: ab7a5f3dc562e84d +/deepseek-ai-dsh-agent-preset/table-of-contents: + en: d152484eb41ac6b4 + zh: b3ad7867f23dad1c +/deepseek-ai-dsh-agent-preset/use-this-package: + en: a403abbf4d126f04 + zh: d8d1d643e789cd1f +/deepseek-ai-dsh-agent-preset/understand-the-implementation: + en: 7ac55a3a3af4fcef + zh: 95fe36abba794967 +/deepseek-ai-dsh-agent-preset/further-exploration: + en: bbae8d79844bc481 + zh: 4302107fd1f460e6 +/deepseek-ai-dsh-agent-preset/model-experience: + en: e982cd210104c513 + zh: cbde971d870c7ca5 +/deepseek-ai-dsh-agent-preset/model-experience/kv-cache-effect: + en: 4644bd5f0c865667 + zh: 9aedc8ac43fb8b61 +/deepseek-ai-dsh-agent-preset/known-limitations-and-deferred-work: + en: d4dbce86236e8e91 + zh: 11766aef5d0ff536 +/deepseek-ai-dsh-agent-preset/known-limitations-and-deferred-work/dev-note: + en: af1f8da6d3acb3e2 + zh: e0c4f6afeefd5214 diff --git a/packages/preset/persona/README.i18n.yaml b/packages/preset/persona/README.i18n.yaml index 20caa0182e..d9529819eb 100644 --- a/packages/preset/persona/README.i18n.yaml +++ b/packages/preset/persona/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/preset/persona/README.md -README.md: f5525c5ff77dbd73bfeaf99f3320a4c53690ba50 -README.zh.md: 96f126cd940402ca57e512b5d61200aa0b1e4036 +/: + en: fca2b93080507b37 + zh: 0a8c803deedc0731 +/deepseek-ai-dsh-persona: + en: 743695093b8a920e + zh: 3784b6641780bd27 +/deepseek-ai-dsh-persona/summary: + en: 147d5511056246c0 + zh: 9998f4c946957cf9 +/deepseek-ai-dsh-persona/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-persona/use-this-package: + en: 9b74e4172eaf5fdd + zh: ab94a985d1f96523 +/deepseek-ai-dsh-persona/use-this-package/configuration: + en: d6abd7f52ebb8e03 + zh: ff56b29693d3883b +/deepseek-ai-dsh-persona/use-this-package/persona-behavior: + en: 60a0513b27aa1204 + zh: a5604819b059dd86 +/deepseek-ai-dsh-persona/use-this-package/when-to-use-it: + en: 4721bb61679c0279 + zh: 51aaa09929dd06d0 +/deepseek-ai-dsh-persona/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-persona/understand-the-implementation/how-the-row-registers: + en: 72eeb11ca6e5401e + zh: f8b036d1d0444b56 +/deepseek-ai-dsh-persona/understand-the-implementation/why-the-row-is-scope-only: + en: bcd57eaefa6d1ff8 + zh: 8d7de63d2bfaa5ef +/deepseek-ai-dsh-persona/understand-the-implementation/source-map: + en: 6d3b20dc423825bf + zh: 2ada808509e73edc +/deepseek-ai-dsh-persona/further-exploration: + en: 2636f1f672f3d32e + zh: f1b4a371cc90cbd1 +/deepseek-ai-dsh-persona/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-persona/model-experience/the-persona-section: + en: 2b53c1d07ef68f24 + zh: 33a3c17ab56adf57 +/deepseek-ai-dsh-persona/model-experience/the-persona-section/what-the-model-sees: + en: 7f01b67034a26a2f + zh: 7f65b5eee49e71a4 +/deepseek-ai-dsh-persona/model-experience/the-persona-section/token-effect: + en: af8e73cbc540aa5a + zh: fa1182678427ab11 +/deepseek-ai-dsh-persona/model-experience/the-persona-section/kv-cache-effect: + en: e9f96cf496c544c7 + zh: b986f1b22d1beb70 +/deepseek-ai-dsh-persona/known-limitations-and-deferred-work: + en: dc09a92d00af8e8a + zh: 15f0f663ba6dc2cb +/deepseek-ai-dsh-persona/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/ptc-runtime/README.i18n.yaml b/packages/ptc-runtime/README.i18n.yaml index d14c2081b5..1f05818b82 100644 --- a/packages/ptc-runtime/README.i18n.yaml +++ b/packages/ptc-runtime/README.i18n.yaml @@ -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 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 packages/ptc-runtime/README.md -README.md: 049624bade5dac3d70e9916a37eb3639a1a31ed4 -README.zh.md: b0c46c8e7e17c9f3f6e5e132245b313627b006f7 +/: + en: 1bb0d1f590789f43 + zh: 2297f7fb333c7212 +/ptc-runtime-ptc-execution-capability-family: + en: d487c8e1301e1d5a + zh: a03fbc7abe89f9f8 +/ptc-runtime-ptc-execution-capability-family/summary: + en: 290cdca9c6eed6d5 + zh: ce01af0eecc9a3c8 +/ptc-runtime-ptc-execution-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/ptc-runtime-ptc-execution-capability-family/packages: + en: bc3268bd79908a8a + zh: c60ad4273375a919 +/ptc-runtime-ptc-execution-capability-family/related-documentation: + en: e31269015498917b + zh: 5298d3f5c02d20e5 +/ptc-runtime-ptc-execution-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml b/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml index 4c672e15a9..37c52ac21c 100644 --- a/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml +++ b/packages/ptc-runtime/ptc-runtime-node/README.i18n.yaml @@ -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 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 packages/ptc-runtime/ptc-runtime-node/README.md -README.md: 5196d6982c3bf8edda3b8b825e41db83f6994141 -README.zh.md: 16c9f8fc426b1f2d28eaa039ba259f08088664a8 +/: + en: 0743cf05fedb8321 + zh: 7ad0cfa1b6b8a46b +/deepseek-ai-dsh-ptc-runtime-node: + en: 7e1a8657a212c70b + zh: afb7a8c6a3afd718 +/deepseek-ai-dsh-ptc-runtime-node/summary: + en: 4d6be30d9289a58e + zh: b1b2b4d773d32029 +/deepseek-ai-dsh-ptc-runtime-node/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-ptc-runtime-node/use-this-package: + en: 246231cf2a529550 + zh: 2b4ed96194acc639 +/deepseek-ai-dsh-ptc-runtime-node/use-this-package/configuration: + en: e5bca585d02f08ca + zh: a2e9a32fe4052d90 +/deepseek-ai-dsh-ptc-runtime-node/use-this-package/execution-and-results: + en: 6d65b39223ca9f7a + zh: 96f96341ecab1317 +/deepseek-ai-dsh-ptc-runtime-node/use-this-package/deadlines-and-cancellation: + en: 803c1a6e876c68e6 + zh: 646232ebc4770680 +/deepseek-ai-dsh-ptc-runtime-node/use-this-package/failures: + en: 7682e50f9dcfa25c + zh: ddcb3502e12be06f +/deepseek-ai-dsh-ptc-runtime-node/understand-the-implementation: + en: 9020b491a39e4bf5 + zh: bcd1b2b1a3bde7f3 +/deepseek-ai-dsh-ptc-runtime-node/understand-the-implementation/launch-and-control: + en: 45527dad94dd9362 + zh: c1e1179391e89a3f +/deepseek-ai-dsh-ptc-runtime-node/understand-the-implementation/source-and-built-bootstraps: + en: c01071304a9d563a + zh: 2938a64b13a257d8 +/deepseek-ai-dsh-ptc-runtime-node/understand-the-implementation/source-map: + en: a6702856dec3d449 + zh: 0c442a74c8005571 +/deepseek-ai-dsh-ptc-runtime-node/further-exploration: + en: ac2e2ae13d3f1394 + zh: 5d08b9c658fcf83a +/deepseek-ai-dsh-ptc-runtime-node/model-experience: + en: 860e85b43c71bd0e + zh: 69b0fb05f9c5e43c +/deepseek-ai-dsh-ptc-runtime-node/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d91e7b78c0619c7e +/deepseek-ai-dsh-ptc-runtime-node/known-limitations-and-deferred-work: + en: 88eac5d4119c11f6 + zh: ba0861bf07c5e9df +/deepseek-ai-dsh-ptc-runtime-node/known-limitations-and-deferred-work/dev-note: + en: 6373aba4e08f7205 + zh: 2a8c33d1f2839df4 diff --git a/packages/ptc-runtime/ptc-runtime/README.i18n.yaml b/packages/ptc-runtime/ptc-runtime/README.i18n.yaml index 424c231bef..6d1b6c9c2a 100644 --- a/packages/ptc-runtime/ptc-runtime/README.i18n.yaml +++ b/packages/ptc-runtime/ptc-runtime/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/ptc-runtime/ptc-runtime/README.md -README.md: 658697a73f126722474c3280e74c1a73ec0c8320 -README.zh.md: 70c2315e9ab7ed8597f031fee95f2ca847a90a77 +/: + en: 8904d5f5d5251a83 + zh: 69b48f289b0416f0 +/deepseek-ai-dsh-ptc-runtime: + en: cced8c691b58657a + zh: 3da9cdf76a1a07ff +/deepseek-ai-dsh-ptc-runtime/summary: + en: d5a1f0be39931018 + zh: 3584bd577f654a38 +/deepseek-ai-dsh-ptc-runtime/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-ptc-runtime/use-this-package: + en: 7e5ebf7420c13af4 + zh: 9ad1e056e794ca4a +/deepseek-ai-dsh-ptc-runtime/use-this-package/run-a-program: + en: 6f97019cebc2f417 + zh: c56f18a690dbe814 +/deepseek-ai-dsh-ptc-runtime/use-this-package/choose-a-backend: + en: f2dd49b11ef5e888 + zh: f2be82b0cae2d8e4 +/deepseek-ai-dsh-ptc-runtime/use-this-package/name-your-bindings-portably: + en: 4e46c1672701b8df + zh: 0353c5855c9ff6be +/deepseek-ai-dsh-ptc-runtime/use-this-package/what-can-go-wrong: + en: 44f9fdf2c8e2cacc + zh: 99dd555a49075f88 +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation: + en: 686d570f5e669fa4 + zh: 2075cf27c30f251a +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation/design-concept: + en: 9f0055e22a1595a5 + zh: 0aa3ceb9dd145128 +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation/service-api: + en: 1d7a792c9a78a517 + zh: b49bddf18c259edc +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation/vocabulary: + en: 855cb8366e3bd293 + zh: da6d7a0ce51f97fc +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation/portable-identifiers: + en: 01c82c6e73180979 + zh: e29b066f9f82c8b4 +/deepseek-ai-dsh-ptc-runtime/understand-the-implementation/source-map: + en: 73b7deab23f3b00d + zh: 780ddf5ff0dd5f65 +/deepseek-ai-dsh-ptc-runtime/further-exploration: + en: a77e68bc4f5e66d9 + zh: 101a57bcad581668 +/deepseek-ai-dsh-ptc-runtime/model-experience: + en: 5506904c50c1ee20 + zh: f0ffa9f4f08b20cf +/deepseek-ai-dsh-ptc-runtime/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 081cebc2e2650f03 +/deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work: + en: 7f30f78c5d427667 + zh: 99d21160016deea2 +/deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note: + en: d56846da29ad869c + zh: 0397151a7e29b8ba +/deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/future-persistent-kernel-backend: + en: cfefaae6ed9705d5 + zh: 3cca5b1bd92445b0 +/deepseek-ai-dsh-ptc-runtime/known-limitations-and-deferred-work/dev-note/future-container-backend: + en: 2b94202842f0556c + zh: 5aa0311fa621a018 diff --git a/packages/runtime-diagnostics/README.i18n.yaml b/packages/runtime-diagnostics/README.i18n.yaml index e4674c9f6d..64ed4d88e3 100644 --- a/packages/runtime-diagnostics/README.i18n.yaml +++ b/packages/runtime-diagnostics/README.i18n.yaml @@ -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 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 packages/runtime-diagnostics/README.md -README.md: cf52e03087fe7acbe1d07b277fc52c5d1c588788 -README.zh.md: 74f6aa748756a2b013557f1286f2d19368116a08 +/: + en: 72ac685be7c23a54 + zh: 8bd65fdc41719ab0 +/packages-runtime-diagnostics: + en: d6f767a17b54561c + zh: 44cbd169cba5892b +/packages-runtime-diagnostics/summary: + en: 578162d5f05b52d1 + zh: c0f63fadbc090e4d +/packages-runtime-diagnostics/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-runtime-diagnostics/packages: + en: b8028d51121730a2 + zh: 1850138a730976c1 +/packages-runtime-diagnostics/related-documentation: + en: 69997d5b7c4c17de + zh: 82199b9f1b117210 +/packages-runtime-diagnostics/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/runtime-diagnostics/invariants/README.i18n.yaml b/packages/runtime-diagnostics/invariants/README.i18n.yaml index a21c30848b..76e368400c 100644 --- a/packages/runtime-diagnostics/invariants/README.i18n.yaml +++ b/packages/runtime-diagnostics/invariants/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/runtime-diagnostics/invariants/README.md -README.md: edb51231463cf68bc0562bd7dc54aa40a9cd4904 -README.zh.md: 1e2216a3b085cac083faddc3618c3d2c409f02bb +/: + en: 42e5357bcc6d4525 + zh: 59891074b3705f9e +/deepseek-ai-dsh-invariants: + en: 355d61820fca8c0b + zh: c272797e46060b16 +/deepseek-ai-dsh-invariants/summary: + en: cb7b0a0d555fafa6 + zh: 23522958d2c367dd +/deepseek-ai-dsh-invariants/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-invariants/use-this-package: + en: f0ff84f9852dca9b + zh: dd4ea4390478f0b7 +/deepseek-ai-dsh-invariants/use-this-package/when-to-use-it: + en: 597ae83b2c71897a + zh: f740fc18cbd3122f +/deepseek-ai-dsh-invariants/use-this-package/enabling-checks-and-selecting-packages: + en: ca8d647080cfb8c6 + zh: bbcc004ed3e81fae +/deepseek-ai-dsh-invariants/use-this-package/which-checks-run: + en: 9bb18846b6eeb906 + zh: fb79a5d6a71988fd +/deepseek-ai-dsh-invariants/use-this-package/adding-a-companion-to-a-custom-composition: + en: 25319ae89e0d6f21 + zh: e447f24be7b6a2d1 +/deepseek-ai-dsh-invariants/use-this-package/when-a-check-fails: + en: 74ced4bc91ead262 + zh: 966b5e607f507aee +/deepseek-ai-dsh-invariants/understand-the-implementation: + en: 5b23215f6331afac + zh: e2beea6daa73b614 +/deepseek-ai-dsh-invariants/understand-the-implementation/design-philosophy: + en: 556effb42afcaefd + zh: ff23afa308434b73 +/deepseek-ai-dsh-invariants/understand-the-implementation/source-map: + en: 08ade90614209295 + zh: d4862b249cb44379 +/deepseek-ai-dsh-invariants/understand-the-implementation/selection-and-registration-lifecycle: + en: 314e6dd14cc9228b + zh: da047ded06701b40 +/deepseek-ai-dsh-invariants/further-exploration: + en: 7ed5b0b9908a611f + zh: 76a8c00915ccda49 +/deepseek-ai-dsh-invariants/model-experience: + en: 269727a21a370a19 + zh: 9b9ab038146410cb +/deepseek-ai-dsh-invariants/model-experience/kv-cache-effect: + en: dffdf5a0451054bb + zh: 2a4a419d5b52f85e +/deepseek-ai-dsh-invariants/known-limitations-and-deferred-work: + en: 668ce3dea799676e + zh: 1970fbd1fa11ae17 +/deepseek-ai-dsh-invariants/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/sandbox/README.i18n.yaml b/packages/sandbox/README.i18n.yaml index a879904076..2eda43cac9 100644 --- a/packages/sandbox/README.i18n.yaml +++ b/packages/sandbox/README.i18n.yaml @@ -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 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 packages/sandbox/README.md -README.md: dbb26f792c51a95479e1913d44b267906ab5662c -README.zh.md: a1a134e7e28308c596e9a64e9449b7e54f018d80 +/: + en: 93824c4cf9c185e3 + zh: 08ab94b5ab4e1ca9 +/packages-sandbox: + en: 41d85aba1c7b5de0 + zh: 7fb27a52e4c36aca +/packages-sandbox/summary: + en: bf5684bc2296cc82 + zh: 18467207adb06951 +/packages-sandbox/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-sandbox/packages: + en: b6047824d045f4c1 + zh: 10f72b88621b2e20 +/packages-sandbox/related-documentation: + en: d7bd3e732ce3d9a9 + zh: 6634b0aec445ca18 +/packages-sandbox/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/sandbox/sandbox-local/README.i18n.yaml b/packages/sandbox/sandbox-local/README.i18n.yaml index 13441f23d7..7e7b0ba744 100644 --- a/packages/sandbox/sandbox-local/README.i18n.yaml +++ b/packages/sandbox/sandbox-local/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages//sandbox//sandbox-local//README.md -README.md: 278f2e5810e0dee12b061b33d08716cdcf5b7ae2 -README.zh.md: a7854c30d03d6be84bc0dc5b2a7a4bd1e07f97e4 +# 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 packages/sandbox/sandbox-local/README.md +/: + en: f172767891b86bf4 + zh: e66e1cc8c96cc259 +/deepseek-ai-dsh-sandbox-local: + en: 2331db3e4dfa8f89 + zh: 0182771f7e1b1cd4 +/deepseek-ai-dsh-sandbox-local/summary: + en: e8341fe6e38c08f6 + zh: e38d6ff18fd2b701 +/deepseek-ai-dsh-sandbox-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sandbox-local/use-this-package: + en: 3759ad594d0a27fb + zh: 722010d952b9f87f +/deepseek-ai-dsh-sandbox-local/use-this-package/when-to-choose-it: + en: 722ad601000b13c7 + zh: d2723f3743fe160b +/deepseek-ai-dsh-sandbox-local/use-this-package/minimal-configuration: + en: 5d5ac6aaea69b3db + zh: 8049d91463b6347d +/deepseek-ai-dsh-sandbox-local/use-this-package/confined-execution-and-enforcement: + en: 7282c9ec77fd6f01 + zh: 10e385a9489105e3 +/deepseek-ai-dsh-sandbox-local/use-this-package/failures-and-recovery: + en: 3808edb37dde5761 + zh: a8fef8a4fd33e364 +/deepseek-ai-dsh-sandbox-local/understand-the-implementation: + en: 15db6ec303151ccc + zh: 91f62c1f64192f92 +/deepseek-ai-dsh-sandbox-local/understand-the-implementation/runner-selection: + en: f0c44248c2ca6acc + zh: 554e9f706671d222 +/deepseek-ai-dsh-sandbox-local/understand-the-implementation/platform-profiles: + en: e87ee1858b20e643 + zh: fabdc6db8264dc11 +/deepseek-ai-dsh-sandbox-local/understand-the-implementation/denial-and-runner-failure-dialects: + en: 62adfc9229c656cc + zh: 11b1534b6d61e5de +/deepseek-ai-dsh-sandbox-local/understand-the-implementation/source-map: + en: 8ab5bcc8dd97df3c + zh: ee7a6a237a142cbd +/deepseek-ai-dsh-sandbox-local/further-exploration: + en: 53e91b8be78bed12 + zh: 70f382c800dc191a +/deepseek-ai-dsh-sandbox-local/model-experience: + en: 40d918676086c7fe + zh: d36023a60b28fd58 +/deepseek-ai-dsh-sandbox-local/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: 469589ac12cdadab +/deepseek-ai-dsh-sandbox-local/known-limitations-and-deferred-work: + en: b2a6a72e340bc620 + zh: 9d9b2894850a131d +/deepseek-ai-dsh-sandbox-local/known-limitations-and-deferred-work/dev-note: + en: cc273320f6a1beaf + zh: 5c57a312ddc50651 +/deepseek-ai-dsh-sandbox-local/known-limitations-and-deferred-work/dev-note/future-environment-coherent-groups: + en: d50bceeb4301cd97 + zh: d1c834aa2057b6e5 diff --git a/packages/sandbox/sandbox-policy/README.i18n.yaml b/packages/sandbox/sandbox-policy/README.i18n.yaml index cda3f9d99c..3456b48e82 100644 --- a/packages/sandbox/sandbox-policy/README.i18n.yaml +++ b/packages/sandbox/sandbox-policy/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/sandbox/sandbox-policy/README.md -README.md: 3b00f6992c67f6caec209a42dd84622b34d64a7b -README.zh.md: fa78849852f5dc46958fc53ca402a0aa693d5519 +/: + en: abf71058974a6f37 + zh: 45c76c1d645a0e67 +/deepseek-ai-dsh-sandbox-policy: + en: 2d1bbc7770b371d4 + zh: 5e0784ae0e0f3a82 +/deepseek-ai-dsh-sandbox-policy/summary: + en: 62e1a0a017d6bc07 + zh: 1d9f86eb54f51b8e +/deepseek-ai-dsh-sandbox-policy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sandbox-policy/use-this-package: + en: a75f214ba848bbd1 + zh: 8ad35e2513b53bd1 +/deepseek-ai-dsh-sandbox-policy/use-this-package/when-to-choose-it: + en: 6704447e52ec295b + zh: 9ed812d9e29d5533 +/deepseek-ai-dsh-sandbox-policy/use-this-package/minimal-configuration: + en: 01c4f068b702b49e + zh: a78ae88d3af889fe +/deepseek-ai-dsh-sandbox-policy/use-this-package/switching-a-session-s-mode: + en: 957d72691e470e5c + zh: c22a3a750af0e4a3 +/deepseek-ai-dsh-sandbox-policy/use-this-package/failures-and-recovery: + en: 9cef5f64a050f468 + zh: 5dc42c148b2c902d +/deepseek-ai-dsh-sandbox-policy/understand-the-implementation: + en: 2d560aa6681fcfb8 + zh: e1c6361a6fa40c63 +/deepseek-ai-dsh-sandbox-policy/understand-the-implementation/resolution-precedence: + en: f1f38b10c23947d2 + zh: 7a591e743d6793f5 +/deepseek-ai-dsh-sandbox-policy/understand-the-implementation/the-per-session-store: + en: d13dabff02f2acfd + zh: f593888b4ffddf36 +/deepseek-ai-dsh-sandbox-policy/understand-the-implementation/model-visible-text: + en: d427370cafeecb48 + zh: 70494b8400c45655 +/deepseek-ai-dsh-sandbox-policy/understand-the-implementation/source-map: + en: 184d0ece30be790f + zh: 84a1fd1b71f5154d +/deepseek-ai-dsh-sandbox-policy/further-exploration: + en: 8525667a02f4bbeb + zh: 2f09594fbf8d37ed +/deepseek-ai-dsh-sandbox-policy/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy: + en: 593b59dbbb02bc8c + zh: 38fa746346e9bc06 +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/what-the-model-sees: + en: 4cd0e0cf93a02d2c + zh: 0f8ece0297cf3c0b +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/what-the-model-sees/read-only: + en: 36f15579c9444eb9 + zh: 289f3c4ce040bfe9 +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/what-the-model-sees/workspace-write: + en: 269d494ad304638d + zh: a879c1d7cc03e6ac +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/what-the-model-sees/danger-full-access: + en: 4e28324a011422a1 + zh: bf31ffce30f06a09 +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/token-effect: + en: e3387fb6eeba1239 + zh: 06a47393057d3e9b +/deepseek-ai-dsh-sandbox-policy/model-experience/current-file-sandbox-policy/kv-cache-effect: + en: a16a657e0e5145fb + zh: 4b19263a728990dc +/deepseek-ai-dsh-sandbox-policy/known-limitations-and-deferred-work: + en: af363d6626eaa9b8 + zh: 93f8d5f9519db0ae +/deepseek-ai-dsh-sandbox-policy/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/sandbox/sandbox-windows-acl/README.i18n.yaml b/packages/sandbox/sandbox-windows-acl/README.i18n.yaml index 0e8cc8e2b6..899cb22541 100644 --- a/packages/sandbox/sandbox-windows-acl/README.i18n.yaml +++ b/packages/sandbox/sandbox-windows-acl/README.i18n.yaml @@ -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: -# pnpm run verify-translation-pairing --write packages//sandbox//sandbox-windows-acl//README.md -README.md: 42b2290028c9138e38594ae23ce94fb3f0ebaa85 -README.zh.md: 6a99eec14adf65027f199079f7ae08d94b0636ad +# 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 packages/sandbox/sandbox-windows-acl/README.md +/: + en: 14d3fdd57b94c86f + zh: abcd3b4f9dd908fa +/deepseek-ai-dsh-sandbox-windows-acl: + en: e7cdbd2652fe80ab + zh: 04e1d187313a0bd5 +/deepseek-ai-dsh-sandbox-windows-acl/summary: + en: 777921135c23ee55 + zh: 7c726cc63995d443 +/deepseek-ai-dsh-sandbox-windows-acl/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sandbox-windows-acl/use-this-package: + en: 58b220faa66b2f05 + zh: dda42e4197d80bfe +/deepseek-ai-dsh-sandbox-windows-acl/use-this-package/when-to-choose-it: + en: 510d0b1ef7db159d + zh: dc2cf25b3db14c63 +/deepseek-ai-dsh-sandbox-windows-acl/use-this-package/direct-api: + en: 16596607bbccc2a3 + zh: 30bc370a5281bf0d +/deepseek-ai-dsh-sandbox-windows-acl/use-this-package/what-confinement-gives-you: + en: 289e65bddf20dd79 + zh: 44b9fcedf944546a +/deepseek-ai-dsh-sandbox-windows-acl/use-this-package/failures-and-recovery: + en: f93372e784cda63e + zh: f8371114f3481550 +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation: + en: c2cde86c85c2c619 + zh: a29a114e591f9d3f +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation/mechanism: + en: a37ea37f2d527693 + zh: 749b5a263d0e1534 +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation/modes-and-token-lists: + en: 9c8d9af84f9abd99 + zh: 1c82b355aa5f210f +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation/the-confinement-runner: + en: 0847de0e53e50061 + zh: 90fa3dcaf080c3be +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation/verified-boundaries: + en: ad02570eae90037f + zh: fd78c2318de18dda +/deepseek-ai-dsh-sandbox-windows-acl/understand-the-implementation/header-verification-and-source-map: + en: c19df6b7a756b779 + zh: b8267b26bd191d97 +/deepseek-ai-dsh-sandbox-windows-acl/further-exploration: + en: 7850da9522bf984b + zh: a9f2273a85bafcf9 +/deepseek-ai-dsh-sandbox-windows-acl/model-experience: + en: c94416e26fec28cd + zh: a16f435e8afbdf30 +/deepseek-ai-dsh-sandbox-windows-acl/model-experience/kv-cache-effect: + en: 796af37d6f6add68 + zh: 1e0dc5a58e5456be +/deepseek-ai-dsh-sandbox-windows-acl/known-limitations-and-deferred-work: + en: 2b6b967c62766d47 + zh: 0faf9ec390504967 +/deepseek-ai-dsh-sandbox-windows-acl/known-limitations-and-deferred-work/dev-note: + en: cc273320f6a1beaf + zh: 5c57a312ddc50651 +/deepseek-ai-dsh-sandbox-windows-acl/known-limitations-and-deferred-work/dev-note/future-warnings-and-cleanup-surfaces: + en: 4c65be775f25c367 + zh: 467b2ce99030dcf5 diff --git a/packages/sandbox/sandbox/README.i18n.yaml b/packages/sandbox/sandbox/README.i18n.yaml index 0dfbb88d80..370f0de0cb 100644 --- a/packages/sandbox/sandbox/README.i18n.yaml +++ b/packages/sandbox/sandbox/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/sandbox/sandbox/README.md -README.md: 56cdd87c274cc8d951d4bc4e1388d7e985aa4a28 -README.zh.md: c09d7e31fca4825e370636a4c5d9648e145f6a54 +/: + en: 4308065a46738364 + zh: 2eb6ab7314e74976 +/deepseek-ai-dsh-sandbox: + en: 3d3312b2261f0a60 + zh: 47741e2a3d90da70 +/deepseek-ai-dsh-sandbox/summary: + en: be0473ca1d2dbb6c + zh: 8c6b097438d2c2af +/deepseek-ai-dsh-sandbox/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sandbox/use-this-package: + en: 5fbf0b48effb1143 + zh: 5c570dcc1a17e0ad +/deepseek-ai-dsh-sandbox/use-this-package/when-to-choose-it: + en: 4ddc504d2626fe3e + zh: ceb3dd93fb3835db +/deepseek-ai-dsh-sandbox/use-this-package/confining-a-command: + en: c5540889017b6a7f + zh: 679bfbd5254bf92d +/deepseek-ai-dsh-sandbox/use-this-package/modes-and-enforcement: + en: ab093e9042b86b99 + zh: d173df7cb3649446 +/deepseek-ai-dsh-sandbox/use-this-package/denied-calls-and-escalation: + en: ff24616d2a68ff77 + zh: 49cb99b3d941dab1 +/deepseek-ai-dsh-sandbox/use-this-package/fail-closed-behavior: + en: 6bf240632a7a6bf5 + zh: ebf414f5cf435875 +/deepseek-ai-dsh-sandbox/understand-the-implementation: + en: 7e13d669ecc96d59 + zh: b5fe7ae65812d926 +/deepseek-ai-dsh-sandbox/understand-the-implementation/design-philosophy: + en: 0fc96495c192b513 + zh: 38b51b9b3c208012 +/deepseek-ai-dsh-sandbox/understand-the-implementation/source-map: + en: 54cab3e684afb031 + zh: b49b476d2f965985 +/deepseek-ai-dsh-sandbox/understand-the-implementation/escalation-choreography: + en: 1b418d41f571ab3d + zh: 62b289cdd6f4d272 +/deepseek-ai-dsh-sandbox/understand-the-implementation/writable-roots: + en: 956d3195cf7a35f8 + zh: f83d8342e22bb7cd +/deepseek-ai-dsh-sandbox/further-exploration: + en: 9f0d57097c678a25 + zh: 58e765bf1b223215 +/deepseek-ai-dsh-sandbox/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-sandbox/model-experience/confinement-error-indirectly: + en: 35e1ea00601f4003 + zh: 08152430b840ea05 +/deepseek-ai-dsh-sandbox/model-experience/confinement-error-indirectly/what-the-model-sees: + en: 15bcb0abf4a06983 + zh: 801c506e47f8b063 +/deepseek-ai-dsh-sandbox/model-experience/confinement-error-indirectly/what-the-model-sees/exact-error: + en: e8b03df128b832a6 + zh: dc89500c436a39cf +/deepseek-ai-dsh-sandbox/model-experience/confinement-error-indirectly/token-effect: + en: 8f514efe94edfa8a + zh: a46f9f4cd4527f4e +/deepseek-ai-dsh-sandbox/model-experience/confinement-error-indirectly/kv-cache-effect: + en: 2fbf2175168e8244 + zh: f681f89596f500f5 +/deepseek-ai-dsh-sandbox/model-experience/escalation-request-and-outcome: + en: 67c621ef55ec8320 + zh: ae4bb9162a49e9fb +/deepseek-ai-dsh-sandbox/model-experience/escalation-request-and-outcome/what-the-model-sees: + en: c20128fa8f79c491 + zh: 96173408d176b9e6 +/deepseek-ai-dsh-sandbox/model-experience/escalation-request-and-outcome/token-effect: + en: 1a7b54d68b045beb + zh: 5dc6e824110c8fd8 +/deepseek-ai-dsh-sandbox/model-experience/escalation-request-and-outcome/kv-cache-effect: + en: ea21ed3a768ed4b8 + zh: 8e2f396a6875420e +/deepseek-ai-dsh-sandbox/known-limitations-and-deferred-work: + en: 63ff67b6fd13b4b0 + zh: 6c8efa9ee99ea9bf +/deepseek-ai-dsh-sandbox/known-limitations-and-deferred-work/dev-note: + en: cc273320f6a1beaf + zh: 5c57a312ddc50651 +/deepseek-ai-dsh-sandbox/known-limitations-and-deferred-work/dev-note/future-consumers-and-environments: + en: a7bc10cf027a51b8 + zh: 2562dd32d3859205 diff --git a/packages/schedule/README.i18n.yaml b/packages/schedule/README.i18n.yaml index 9bd6a263af..d956835aa0 100644 --- a/packages/schedule/README.i18n.yaml +++ b/packages/schedule/README.i18n.yaml @@ -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 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 packages/schedule/README.md -README.md: b3ca590532dc992f550dc154632a05fec8d971fb -README.zh.md: 85481c4df64a6f7dec6915578ba7029c720932af +/: + en: d8005dbd58b18c32 + zh: 4d6b174ee0703b14 +/schedule-session-local-reminders: + en: 0f46a400aa722f1b + zh: dee443afb0f3009d +/schedule-session-local-reminders/summary: + en: 0efa48b3bdfddd81 + zh: 5f2ef09c80a157c4 +/schedule-session-local-reminders/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/schedule-session-local-reminders/packages: + en: f5e5cf423f97dbd9 + zh: 7139b61f1ee874b3 +/schedule-session-local-reminders/related-documentation: + en: 89f3039ed9d7a538 + zh: 3eb1a802c9147872 +/schedule-session-local-reminders/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/schedule/schedule/README.i18n.yaml b/packages/schedule/schedule/README.i18n.yaml index 8cc722ee59..0ebc374940 100644 --- a/packages/schedule/schedule/README.i18n.yaml +++ b/packages/schedule/schedule/README.i18n.yaml @@ -1,6 +1,112 @@ -# 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 packages/schedule/schedule/README.md -README.md: 55a4c86b88ae5a28219fd927930ec68cc780185e -README.zh.md: 4670803e88b61501a03e9635f6b260948c98610f +/: + en: 858039eacc1d2d0f + zh: 880d1bdcac10c358 +/deepseek-ai-dsh-schedule: + en: 83c1ed891080cce4 + zh: ac08407f9bb63531 +/deepseek-ai-dsh-schedule/summary: + en: c331ddb94b2eff4e + zh: 9d49a28785da1da3 +/deepseek-ai-dsh-schedule/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-schedule/use-this-package: + en: 54bdf68b20112b78 + zh: 53ba066d0f30213b +/deepseek-ai-dsh-schedule/use-this-package/when-to-choose-it: + en: ed2db1b066841156 + zh: 610ee19ae06d6838 +/deepseek-ai-dsh-schedule/use-this-package/enable-schedule: + en: c1ef52c503af4cda + zh: 61640a96e5883c19 +/deepseek-ai-dsh-schedule/use-this-package/schedule-a-reminder: + en: b9dcbca982886e41 + zh: 7e9612c029cb5373 +/deepseek-ai-dsh-schedule/use-this-package/when-reminders-fire: + en: 0b5c8259cea580e2 + zh: 05f5b1e0dfe6a7cd +/deepseek-ai-dsh-schedule/understand-the-implementation: + en: 8e555f81bf4635f8 + zh: bce6ab53622ed3e3 +/deepseek-ai-dsh-schedule/understand-the-implementation/scope-and-composition: + en: 59cbf4ef4ee408b3 + zh: 11aebc95663477d7 +/deepseek-ai-dsh-schedule/understand-the-implementation/design-philosophy: + en: 45cde2c0238f7b6d + zh: ff6954ca10e04392 +/deepseek-ai-dsh-schedule/understand-the-implementation/source-map: + en: 72a5779c4e3c6614 + zh: 4d49a1710d08ca2f +/deepseek-ai-dsh-schedule/understand-the-implementation/durable-state-and-replay: + en: 1b60030eae89842a + zh: cb769795930235a9 +/deepseek-ai-dsh-schedule/understand-the-implementation/client-projection: + en: 64afc8a5b6922fb3 + zh: 1c6356cf36f016c2 +/deepseek-ai-dsh-schedule/understand-the-implementation/time-validation: + en: f447b80ee2a95556 + zh: 1a635c56abec6226 +/deepseek-ai-dsh-schedule/understand-the-implementation/management-pipeline: + en: 48b9358f7fc8769d + zh: cddcccfa451c219c +/deepseek-ai-dsh-schedule/understand-the-implementation/live-owner: + en: 99bc7475c38134d8 + zh: 23881143f1341a3d +/deepseek-ai-dsh-schedule/further-exploration: + en: 7068ce0bd542b08c + zh: c819212d9496df53 +/deepseek-ai-dsh-schedule/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-schedule/model-experience/scoped-management-tools: + en: 9a36762003cc60e9 + zh: 0e8590dfaa23e3f1 +/deepseek-ai-dsh-schedule/model-experience/scoped-management-tools/what-the-model-sees: + en: a96ffd10fdf3aa1a + zh: 72bf13124dfc1955 +/deepseek-ai-dsh-schedule/model-experience/scoped-management-tools/token-effect: + en: fa2ba2f8820558c1 + zh: ab44c0575a106868 +/deepseek-ai-dsh-schedule/model-experience/scoped-management-tools/kv-cache-effect: + en: ae851de8f2e6742a + zh: e8566a1e310ccfe4 +/deepseek-ai-dsh-schedule/model-experience/due-reminder-follow-up: + en: 8d7f454a3fd08c46 + zh: 72a626f9c28ed65d +/deepseek-ai-dsh-schedule/model-experience/due-reminder-follow-up/what-the-model-sees: + en: a93a3694e0509fa6 + zh: 604590a5a8a90168 +/deepseek-ai-dsh-schedule/model-experience/due-reminder-follow-up/what-the-model-sees/reminder-framing: + en: ce20963ce7b68129 + zh: fd6ba41b78b53ff6 +/deepseek-ai-dsh-schedule/model-experience/due-reminder-follow-up/token-effect: + en: 8a5a24d61ed252c8 + zh: c97fe88d60979a84 +/deepseek-ai-dsh-schedule/model-experience/due-reminder-follow-up/kv-cache-effect: + en: 337ecff4b767cff0 + zh: 0a9d7e2a50cc6014 +/deepseek-ai-dsh-schedule/model-experience/due-fixed-rate-batch: + en: 359e57f4f2132d0f + zh: 62ee6cf7ed8ffe55 +/deepseek-ai-dsh-schedule/model-experience/due-fixed-rate-batch/what-the-model-sees: + en: 48dbd6fd467bf430 + zh: 75a4a85422057727 +/deepseek-ai-dsh-schedule/model-experience/due-fixed-rate-batch/what-the-model-sees/fixed-rate-batch-framing: + en: 33875cd91268e870 + zh: e88284ae5bd00876 +/deepseek-ai-dsh-schedule/model-experience/due-fixed-rate-batch/token-effect: + en: e598e01fec42f091 + zh: f9bf9da5f09632d8 +/deepseek-ai-dsh-schedule/model-experience/due-fixed-rate-batch/kv-cache-effect: + en: b166477a7f5bac39 + zh: ae6c5e81c0d7e9be +/deepseek-ai-dsh-schedule/known-limitations-and-deferred-work: + en: 53e7624ab59b1606 + zh: 062c2513b14321fc +/deepseek-ai-dsh-schedule/known-limitations-and-deferred-work/dev-note: + en: 5bb80bafa47df4b5 + zh: 5f408796e66c790c diff --git a/packages/sdk/README.i18n.yaml b/packages/sdk/README.i18n.yaml index e08bf85fa0..fcc9150131 100644 --- a/packages/sdk/README.i18n.yaml +++ b/packages/sdk/README.i18n.yaml @@ -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 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 packages/sdk/README.md -README.md: 227175269b820b967c543c215926a3efe3ab7ea8 -README.zh.md: 55b7ee42badaad4c9f338104cf66a3f63d129176 +/: + en: 3345ee8fe0f8ee0c + zh: 541859dcfff0f0f4 +/sdk-drive-a-harness-runtime-from-another-process: + en: efbce831921b3f74 + zh: fe9b17c3a7eb2d5e +/sdk-drive-a-harness-runtime-from-another-process/summary: + en: 39c9cb8ecdb16158 + zh: d76f7d8796695bcc +/sdk-drive-a-harness-runtime-from-another-process/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/sdk-drive-a-harness-runtime-from-another-process/packages: + en: a3f3e5d6995e43e3 + zh: 96dbb7bffba5495d +/sdk-drive-a-harness-runtime-from-another-process/related-documentation: + en: 210c368adb807508 + zh: b71e550f542bdf57 +/sdk-drive-a-harness-runtime-from-another-process/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/sdk/client/README.i18n.yaml b/packages/sdk/client/README.i18n.yaml index 6be48b11b3..ad72cffd69 100644 --- a/packages/sdk/client/README.i18n.yaml +++ b/packages/sdk/client/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/sdk/client/README.md -README.md: bfbd522d120fb0a0123c0496394973e531a9ba6f -README.zh.md: ec54e8ae0e864378abd48d8af9b5db6b96418fe5 +/: + en: 09cb25e4bcf56851 + zh: a0a5913941d23eff +/deepseek-ai-dsh-sdk-client: + en: b786affe03adf63c + zh: aacb5d4af10ca477 +/deepseek-ai-dsh-sdk-client/summary: + en: 05b18f61ad4c2f54 + zh: 19f88d7bcd2cca0f +/deepseek-ai-dsh-sdk-client/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sdk-client/use-this-package: + en: 3c21c7ec64d17346 + zh: c6ba1b632b8a4d72 +/deepseek-ai-dsh-sdk-client/use-this-package/running-agent-turns-with-deepseekharness: + en: 01c58dddd7e62de2 + zh: 6dbd46e244f3f135 +/deepseek-ai-dsh-sdk-client/use-this-package/lower-level-control-with-harnessclient: + en: 8e7eb3a9b3f91404 + zh: 277a722586dcb549 +/deepseek-ai-dsh-sdk-client/understand-the-implementation: + en: 8773f50c51da85f0 + zh: 4649ebc69357deb0 +/deepseek-ai-dsh-sdk-client/understand-the-implementation/design-concept: + en: 6632c06d819233cc + zh: 207d55d8217ec6b1 +/deepseek-ai-dsh-sdk-client/understand-the-implementation/source-map: + en: f8a986c22b7a2953 + zh: 35937eb44e1ee909 +/deepseek-ai-dsh-sdk-client/understand-the-implementation/owned-activity-flow: + en: 94a42babac5f1c7d + zh: df9e42ed02f7d002 +/deepseek-ai-dsh-sdk-client/understand-the-implementation/errors-and-teardown: + en: 165364de2cee0a9f + zh: c4dc37b44e1e621e +/deepseek-ai-dsh-sdk-client/further-exploration: + en: 1048b6b2c0954717 + zh: 7ce29dd1ca545e06 +/deepseek-ai-dsh-sdk-client/model-experience: + en: e82a55513d3cd30e + zh: ecd8c0875ff2fb87 +/deepseek-ai-dsh-sdk-client/model-experience/kv-cache-effect: + en: 7abe0be104a791e7 + zh: 445311f78b1069ca +/deepseek-ai-dsh-sdk-client/known-limitations-and-deferred-work: + en: 3f51394ef0699943 + zh: 6d4c3180fced8db1 +/deepseek-ai-dsh-sdk-client/known-limitations-and-deferred-work/dev-note: + en: 6177a56f053936a4 + zh: 0f4b20228c2d15da diff --git a/packages/sdk/protocol/README.i18n.yaml b/packages/sdk/protocol/README.i18n.yaml index 6dd661c7e8..e935628d25 100644 --- a/packages/sdk/protocol/README.i18n.yaml +++ b/packages/sdk/protocol/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/sdk/protocol/README.md -README.md: 7cc6a28ac4424927613da6e64e4508e25659ab1f -README.zh.md: 69b85d6ca7858c826bed6269adcfb98fc2593543 +/: + en: f7e65364dfe462b8 + zh: 20d2b8f84f10f681 +/deepseek-ai-dsh-sdk-protocol: + en: dee270a439f6cd2d + zh: 44f5ec584c476872 +/deepseek-ai-dsh-sdk-protocol/summary: + en: 8813bd2a0bf7a55a + zh: 07d880c01d13f904 +/deepseek-ai-dsh-sdk-protocol/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sdk-protocol/use-this-package: + en: c4ca91b51aab452a + zh: 1c77b1deaeb34931 +/deepseek-ai-dsh-sdk-protocol/use-this-package/framing-and-transport: + en: be53c71505c0d1b4 + zh: 6210dee577715539 +/deepseek-ai-dsh-sdk-protocol/use-this-package/the-sdk-methods: + en: 8cfc9efc99c7198d + zh: ac00d94406fc2388 +/deepseek-ai-dsh-sdk-protocol/use-this-package/payload-semantics: + en: 3cf5d4ffbaf37f69 + zh: 23c4450e31c91d67 +/deepseek-ai-dsh-sdk-protocol/understand-the-implementation: + en: a11b136d8296deda + zh: 85081da5be53c9e1 +/deepseek-ai-dsh-sdk-protocol/understand-the-implementation/design-concept: + en: bc4b8dfc36ed4565 + zh: 6a707eff1a4bbf2f +/deepseek-ai-dsh-sdk-protocol/understand-the-implementation/source-map: + en: bfeb9999d7e71aaf + zh: afc873a229bb4bc5 +/deepseek-ai-dsh-sdk-protocol/understand-the-implementation/frame-dispatch: + en: eaf7d095810481c8 + zh: 92767f908500be5e +/deepseek-ai-dsh-sdk-protocol/further-exploration: + en: f8c31cd1ed16a4a5 + zh: 1669ef35992231a5 +/deepseek-ai-dsh-sdk-protocol/model-experience: + en: 1c3205c59385b059 + zh: 9198a341567beca0 +/deepseek-ai-dsh-sdk-protocol/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: 696d26adaf4eda6d +/deepseek-ai-dsh-sdk-protocol/known-limitations-and-deferred-work: + en: c83a6b621a8f8793 + zh: 32accb03ee0b8ac8 +/deepseek-ai-dsh-sdk-protocol/known-limitations-and-deferred-work/dev-note: + en: 951fa06249790ac1 + zh: da66e7f53df3ab00 diff --git a/packages/sdk/server/README.i18n.yaml b/packages/sdk/server/README.i18n.yaml index 0eda2a5541..fa434758ab 100644 --- a/packages/sdk/server/README.i18n.yaml +++ b/packages/sdk/server/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/sdk/server/README.md -README.md: 3598fc38c16b6c2387169c121eb88c0c0d45f7a5 -README.zh.md: 9fb80288c1fdee5ada86a3a2a419e4466e7e54da +/: + en: 9fd8e0cf5872dc5b + zh: c5209369edd2e941 +/deepseek-ai-dsh-sdk-jsonrpc-server: + en: 96813b70808d7c86 + zh: ab20ab1cb59432c1 +/deepseek-ai-dsh-sdk-jsonrpc-server/summary: + en: 1412ec56449364a9 + zh: 604f7127ce6e96b5 +/deepseek-ai-dsh-sdk-jsonrpc-server/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package: + en: 7abbf9c04a04b16c + zh: dc18b716ed3807d5 +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package/wiring: + en: 47a33e9397e36e15 + zh: e6d173820f9ea6e5 +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package/configuration: + en: a908534bf8193305 + zh: 6e3875e9ea0ccc79 +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package/stdout-is-the-protocol: + en: 784b68b5a498f2d5 + zh: 2c3c5a1490845179 +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package/what-sdk-clients-can-do: + en: 2b1b52a7467c557e + zh: 31f58d32469f9d50 +/deepseek-ai-dsh-sdk-jsonrpc-server/use-this-package/shutdown-and-exit: + en: 08c3858f53090f39 + zh: dfae960e11515b06 +/deepseek-ai-dsh-sdk-jsonrpc-server/understand-the-implementation: + en: eca39e7027d67d8f + zh: dd3f494276322857 +/deepseek-ai-dsh-sdk-jsonrpc-server/understand-the-implementation/design-concept: + en: e83e01184c1a45ee + zh: d54ed126d31ee6f1 +/deepseek-ai-dsh-sdk-jsonrpc-server/understand-the-implementation/source-map: + en: 27474bf15222a95a + zh: f293e9b9d9d5dca5 +/deepseek-ai-dsh-sdk-jsonrpc-server/understand-the-implementation/request-flow: + en: 2658804b2f90b135 + zh: 085aa00c8f0bbbcd +/deepseek-ai-dsh-sdk-jsonrpc-server/understand-the-implementation/teardown: + en: 81786b3bd70b389f + zh: da80b4f50f16a098 +/deepseek-ai-dsh-sdk-jsonrpc-server/further-exploration: + en: cea854984c56c75a + zh: 1ee5eaab8305e10d +/deepseek-ai-dsh-sdk-jsonrpc-server/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-sdk-jsonrpc-server/model-experience/sdk-user-message: + en: 04d1b73cd8e06dfe + zh: cd67fbbfdf39f776 +/deepseek-ai-dsh-sdk-jsonrpc-server/model-experience/sdk-user-message/what-the-model-sees: + en: 2b5a80ec4b4df11e + zh: e459fe77cc14d9b8 +/deepseek-ai-dsh-sdk-jsonrpc-server/model-experience/sdk-user-message/token-effect: + en: 372ed851986b76d2 + zh: 075b94a565275368 +/deepseek-ai-dsh-sdk-jsonrpc-server/model-experience/sdk-user-message/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-sdk-jsonrpc-server/known-limitations-and-deferred-work: + en: a6d0b12d02961572 + zh: 92822e033db55980 +/deepseek-ai-dsh-sdk-jsonrpc-server/known-limitations-and-deferred-work/dev-note: + en: 583a835f84c55c33 + zh: a4377e2c9bea8c4e diff --git a/packages/session-query/README.i18n.yaml b/packages/session-query/README.i18n.yaml index 308a79155e..81a886291c 100644 --- a/packages/session-query/README.i18n.yaml +++ b/packages/session-query/README.i18n.yaml @@ -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 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 packages/session-query/README.md -README.md: fe206a31aef78a73dfe3653ff75b3a666aaac24a -README.zh.md: f8200a90082172ee11e12a3dd5c393d5363fc77d +/: + en: 03834649fae34d8d + zh: c5faab18f14666f4 +/session-query-session-retrieval-capability-family: + en: 65758f8a3a8d5406 + zh: e6f4d737bf11851a +/session-query-session-retrieval-capability-family/summary: + en: 34f1f2b609594cfa + zh: 868a29d637dd7f8d +/session-query-session-retrieval-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/session-query-session-retrieval-capability-family/packages: + en: a4261b2c9c0fc9eb + zh: e1e439d5438e9542 +/session-query-session-retrieval-capability-family/related-documentation: + en: dae8951ca37f8c47 + zh: 1f63549ca52ed298 +/session-query-session-retrieval-capability-family/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/session-query/session-log-export/README.i18n.yaml b/packages/session-query/session-log-export/README.i18n.yaml index 4f7b54c1ea..2b09210496 100644 --- a/packages/session-query/session-log-export/README.i18n.yaml +++ b/packages/session-query/session-log-export/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/session-query/session-log-export/README.md -README.md: fa77afe55a12803b4c637b66768ab8eec671edee -README.zh.md: a266d3a30426b4efe188711f8322aafca6fb654c +/: + en: 3b67077a6dfacd19 + zh: e5b78d039d310dc2 +/deepseek-ai-dsh-session-log-export: + en: eea87f5da57ff494 + zh: db388203522b840f +/deepseek-ai-dsh-session-log-export/summary: + en: 26be400b3e9f7bb7 + zh: b6e78f1f417a0e4e +/deepseek-ai-dsh-session-log-export/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-log-export/use-this-package: + en: 1135b03eb3423c74 + zh: 2fd2a18d503df70c +/deepseek-ai-dsh-session-log-export/use-this-package/when-to-choose-it: + en: 2b9dbec4877d332e + zh: dcf6638938eedb01 +/deepseek-ai-dsh-session-log-export/use-this-package/composition: + en: 2fef1fe4411cc5da + zh: cff5dbcc4901402b +/deepseek-ai-dsh-session-log-export/use-this-package/configuration: + en: 377a0d8860c46f63 + zh: 9eb7698f813b2fa3 +/deepseek-ai-dsh-session-log-export/use-this-package/command-contract: + en: 26329688b9a924a7 + zh: 94e21c10fdcfc1ac +/deepseek-ai-dsh-session-log-export/use-this-package/what-to-expect: + en: 44be1f1d1903d12a + zh: c8f1eb5b92b71a30 +/deepseek-ai-dsh-session-log-export/use-this-package/failures: + en: 3fc8985946d67024 + zh: 5bb40a4b531d68f4 +/deepseek-ai-dsh-session-log-export/understand-the-implementation: + en: 7cb82a6851405f95 + zh: b8c525170d19dc6c +/deepseek-ai-dsh-session-log-export/understand-the-implementation/design-split: + en: 11290758041cc381 + zh: 5d5d003ec9cd86f7 +/deepseek-ai-dsh-session-log-export/understand-the-implementation/download-flow: + en: 028ea3bff05250ba + zh: 63250c4d3369ebbd +/deepseek-ai-dsh-session-log-export/further-exploration: + en: 8eef7e6c58c9f962 + zh: 6c720c91c7f26299 +/deepseek-ai-dsh-session-log-export/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-log-export/model-experience/human-export-control: + en: 55c1a61a041a2aeb + zh: 48e05043cc42304f +/deepseek-ai-dsh-session-log-export/model-experience/human-export-control/what-the-model-sees: + en: 6b3c3cfc5d68d5f9 + zh: b1689c57ee3b4ccb +/deepseek-ai-dsh-session-log-export/model-experience/human-export-control/token-effect: + en: 380535e564a4ea2c + zh: 2672eac76afd90f5 +/deepseek-ai-dsh-session-log-export/model-experience/human-export-control/kv-cache-effect: + en: 78163c30fdf0b43d + zh: 165043e307b38cb3 +/deepseek-ai-dsh-session-log-export/known-limitations-and-deferred-work: + en: 9978d234cbfe7e73 + zh: 9ba0b12300ff4d38 +/deepseek-ai-dsh-session-log-export/known-limitations-and-deferred-work/dev-note: + en: 4ee4d24c26c127bf + zh: 1facdfbfa3ccefbc +/deepseek-ai-dsh-session-log-export/known-limitations-and-deferred-work/dev-note/future-export-destinations-beyond-the-browser: + en: 226726899a479680 + zh: 26f72519513d4782 diff --git a/packages/session-query/session-query-sqlite/README.i18n.yaml b/packages/session-query/session-query-sqlite/README.i18n.yaml index eacb83a0cf..0661de6e19 100644 --- a/packages/session-query/session-query-sqlite/README.i18n.yaml +++ b/packages/session-query/session-query-sqlite/README.i18n.yaml @@ -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 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 packages/session-query/session-query-sqlite/README.md -README.md: da99dc20eee0b9366364f184c618a961d83ae044 -README.zh.md: 4ba088fc0dea55db60c1cc7a36743b6511a53481 +/: + en: c47de69fc9906da1 + zh: 6b89540bb5977d34 +/deepseek-ai-dsh-session-query-sqlite: + en: 1ea8c855c9e399bc + zh: 6c04c65b56aebf8b +/deepseek-ai-dsh-session-query-sqlite/summary: + en: e8970d4d9500f484 + zh: d96abbbe143b3ca9 +/deepseek-ai-dsh-session-query-sqlite/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-query-sqlite/use-this-package: + en: d3bed0996d9ba473 + zh: 2bbcbc19264c9e60 +/deepseek-ai-dsh-session-query-sqlite/use-this-package/when-to-choose-it: + en: d77054a6e8023089 + zh: d44f9a5cd54dd43a +/deepseek-ai-dsh-session-query-sqlite/use-this-package/minimal-configuration: + en: 1c9d4d7e60b93c65 + zh: b55bc598768398d3 +/deepseek-ai-dsh-session-query-sqlite/use-this-package/search-behavior: + en: 746bd842a7b9c157 + zh: 2515443f5d3f6656 +/deepseek-ai-dsh-session-query-sqlite/use-this-package/when-to-defer-or-disable-search: + en: 8df2c14374a1f3a6 + zh: e1dd3ff73de187c4 +/deepseek-ai-dsh-session-query-sqlite/use-this-package/failures-and-recovery: + en: 2baafe3969855b2a + zh: 2781c97457191214 +/deepseek-ai-dsh-session-query-sqlite/understand-the-implementation: + en: 1b4ba96f994a361d + zh: 50148b7af190aa0c +/deepseek-ai-dsh-session-query-sqlite/understand-the-implementation/design-philosophy: + en: 97d8f71fda5ed9b6 + zh: fe1d0bd886dc2437 +/deepseek-ai-dsh-session-query-sqlite/understand-the-implementation/source-map: + en: 49f5cc363a886430 + zh: f0e035cc2dc8d513 +/deepseek-ai-dsh-session-query-sqlite/understand-the-implementation/index-lifecycle: + en: 3a99cf9f8f64ec0e + zh: 40585b4764282881 +/deepseek-ai-dsh-session-query-sqlite/understand-the-implementation/schema-ownership: + en: cb1e6861a47a618c + zh: 18863cdd4986f4b7 +/deepseek-ai-dsh-session-query-sqlite/further-exploration: + en: 42b7e3cad4b867df + zh: 2549014912f746a9 +/deepseek-ai-dsh-session-query-sqlite/model-experience: + en: ff9dc9f0f67efd4d + zh: ad284a65c2091e0f +/deepseek-ai-dsh-session-query-sqlite/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-session-query-sqlite/known-limitations-and-deferred-work: + en: 9be1b4a66f06c413 + zh: 39b29034f3cc08b1 +/deepseek-ai-dsh-session-query-sqlite/known-limitations-and-deferred-work/dev-note: + en: d2f0d68fe29fb750 + zh: 323d21ee73a9e3f6 +/deepseek-ai-dsh-session-query-sqlite/known-limitations-and-deferred-work/dev-note/future-alternate-tokenizers-and-search-providers: + en: 66b67df07594267a + zh: 73b6e1fd6362f168 diff --git a/packages/session-query/session-query/README.i18n.yaml b/packages/session-query/session-query/README.i18n.yaml index 2292999440..66737691c6 100644 --- a/packages/session-query/session-query/README.i18n.yaml +++ b/packages/session-query/session-query/README.i18n.yaml @@ -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 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 packages/session-query/session-query/README.md -README.md: 5971903ef06035e73e6db57d3f437eec7a2aa8d9 -README.zh.md: e389975f436501093785e931c246d75279e2a0b6 +/: + en: 3d1caf01d90c7f34 + zh: 4fa615b905574d83 +/deepseek-ai-dsh-session-query: + en: 6c0fafecee38533e + zh: d3dfe3058d8332c3 +/deepseek-ai-dsh-session-query/summary: + en: 25e9ed4d6de7c4ac + zh: 8b57631f7207b959 +/deepseek-ai-dsh-session-query/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-query/use-this-package: + en: cc9eb8f214c57137 + zh: 76723633d0faee5d +/deepseek-ai-dsh-session-query/use-this-package/what-you-can-do: + en: 742b1358d97e56cc + zh: 00d75ce6e5769559 +/deepseek-ai-dsh-session-query/use-this-package/filters: + en: 1b95403461947ca1 + zh: cffa21b03df9f0ad +/deepseek-ai-dsh-session-query/use-this-package/configuration: + en: bec9cedaa219e297 + zh: e9cd16c0589fab4d +/deepseek-ai-dsh-session-query/use-this-package/failures-and-recovery: + en: d83f5cd557811b2f + zh: 1af658830259e637 +/deepseek-ai-dsh-session-query/understand-the-implementation: + en: 6a18034f1ccc247a + zh: aecd49a7b846f913 +/deepseek-ai-dsh-session-query/understand-the-implementation/design-philosophy: + en: b34fb0d209192ff4 + zh: 455bdb024d04f16a +/deepseek-ai-dsh-session-query/understand-the-implementation/source-map: + en: 7c546162fa3f75d4 + zh: c6910bc53ae0ff71 +/deepseek-ai-dsh-session-query/understand-the-implementation/corpus-resolution: + en: efa560c55a869c71 + zh: 451eb107825856ac +/deepseek-ai-dsh-session-query/understand-the-implementation/observation-cache: + en: abe122deb81566e5 + zh: 4c4f327f2ee1144e +/deepseek-ai-dsh-session-query/understand-the-implementation/reads-and-traces: + en: 48922e284adddd1b + zh: 9956dcc57e027d77 +/deepseek-ai-dsh-session-query/further-exploration: + en: 40a0579a433d568e + zh: c34ff46da6cbd3e5 +/deepseek-ai-dsh-session-query/model-experience: + en: dff12da8d1e64e66 + zh: e054b0d54e29f899 +/deepseek-ai-dsh-session-query/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-session-query/known-limitations-and-deferred-work: + en: e70a64614189c09c + zh: 88d2a6634385c501 +/deepseek-ai-dsh-session-query/known-limitations-and-deferred-work/dev-note: + en: d2f0d68fe29fb750 + zh: 323d21ee73a9e3f6 +/deepseek-ai-dsh-session-query/known-limitations-and-deferred-work/dev-note/future-extractor-and-search-provider-registries: + en: 605a72e65297c6cf + zh: 87aa75ec62eccbde diff --git a/packages/session-query/tool-session-query/README.i18n.yaml b/packages/session-query/tool-session-query/README.i18n.yaml index 4b780c586f..1c8ed85d46 100644 --- a/packages/session-query/tool-session-query/README.i18n.yaml +++ b/packages/session-query/tool-session-query/README.i18n.yaml @@ -1,6 +1,97 @@ -# 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 packages/session-query/tool-session-query/README.md -README.md: 61aca36ef987c260d50ec3e0aec69c8626171e3c -README.zh.md: 2e390e37a6eb81c9d8c6bff022e3df67897fe81d +/: + en: f6e08c67514237ad + zh: cfcb09b6263a9b00 +/deepseek-ai-dsh-tool-session-query: + en: e54233a0061ef78e + zh: b4569dd1d15f313b +/deepseek-ai-dsh-tool-session-query/summary: + en: d66e5b7500572fc2 + zh: 961ae6f7b640c3dc +/deepseek-ai-dsh-tool-session-query/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-session-query/use-this-package: + en: b85f7c70f31e69db + zh: 5076a98116181fcc +/deepseek-ai-dsh-tool-session-query/use-this-package/when-to-choose-it: + en: 2379fea607f05047 + zh: 948ccb2679cad04a +/deepseek-ai-dsh-tool-session-query/use-this-package/configuration: + en: 86517fff7b539e7d + zh: 46a37ee4f8e81b22 +/deepseek-ai-dsh-tool-session-query/use-this-package/what-the-model-can-do: + en: 560d8d66f8301213 + zh: f4f963d61df8d3a4 +/deepseek-ai-dsh-tool-session-query/use-this-package/failures-and-recovery: + en: 58559adb3f089356 + zh: eddd5dd65811901e +/deepseek-ai-dsh-tool-session-query/understand-the-implementation: + en: 32a36a3fe388e2c1 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-session-query/understand-the-implementation/design-philosophy: + en: 842498241ae23c71 + zh: 54d82883be3843bd +/deepseek-ai-dsh-tool-session-query/understand-the-implementation/source-map: + en: 605c35617d9555a6 + zh: fe0b245ff86505ea +/deepseek-ai-dsh-tool-session-query/understand-the-implementation/operation-flow: + en: 906e8fff04552ad3 + zh: a5ca1ae0f197186d +/deepseek-ai-dsh-tool-session-query/further-exploration: + en: 1d4a245fac001783 + zh: 661d5d7f6e15a229 +/deepseek-ai-dsh-tool-session-query/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-session-query/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-session-query/model-experience/system-prompt/what-the-model-sees: + en: 820d213b56d19115 + zh: 857735c2d9975538 +/deepseek-ai-dsh-tool-session-query/model-experience/system-prompt/what-the-model-sees/prior-history-guidance: + en: aaefd28412255851 + zh: 33147597191b2786 +/deepseek-ai-dsh-tool-session-query/model-experience/system-prompt/token-effect: + en: 6ee4d42e6b3b56c1 + zh: e6f8cc5d9461dcac +/deepseek-ai-dsh-tool-session-query/model-experience/system-prompt/kv-cache-effect: + en: 3bca5cdc9c4f1ad8 + zh: b4add65a8423ea2f +/deepseek-ai-dsh-tool-session-query/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-schemas/what-the-model-sees: + en: 9399fc8822bcee2e + zh: ce83ad6a03d32992 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-schemas/token-effect: + en: 3c001ca824c5bc52 + zh: 314a8fdf37a470c1 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-schemas/kv-cache-effect: + en: c8cbbef533bdb90f + zh: 9477247f981b9e7d +/deepseek-ai-dsh-tool-session-query/model-experience/tool-results: + en: beaabb79f229692a + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-results/what-the-model-sees: + en: 8a5d8fda38ed6940 + zh: 84c4047bb8127719 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-results/token-effect: + en: 8078153192ce8c6b + zh: 839e94c31f741241 +/deepseek-ai-dsh-tool-session-query/model-experience/tool-results/kv-cache-effect: + en: 9dbeb5d10d26d110 + zh: 277d8574207bcb90 +/deepseek-ai-dsh-tool-session-query/known-limitations-and-deferred-work: + en: 6aaaf928811fde0d + zh: ee1735af14560915 +/deepseek-ai-dsh-tool-session-query/known-limitations-and-deferred-work/dev-note: + en: d2f0d68fe29fb750 + zh: 323d21ee73a9e3f6 +/deepseek-ai-dsh-tool-session-query/known-limitations-and-deferred-work/dev-note/future-broader-workspace-semantics: + en: 540af3b250d4486d + zh: 5eae2bc1644b92b5 diff --git a/packages/session/README.i18n.yaml b/packages/session/README.i18n.yaml index a8c4662bfd..d6b0b37b2b 100644 --- a/packages/session/README.i18n.yaml +++ b/packages/session/README.i18n.yaml @@ -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 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 packages/session/README.md -README.md: 989a98f4b89ebf9ef66a05499e003bd13b6532ee -README.zh.md: 4f9a553188b6f49e0bafc6222581e147d8132a2d +/: + en: 4301d9cb9fc0a0e9 + zh: 3127f24ac355656b +/session-durable-session-data-plane: + en: 16a515a77b72eab0 + zh: 005647121230f6ec +/session-durable-session-data-plane/summary: + en: 4cced6bd65f9b42c + zh: 1e5c5fd08f3e2655 +/session-durable-session-data-plane/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/session-durable-session-data-plane/packages: + en: 7be50f4cafe40dab + zh: a6f06f187e686c05 +/session-durable-session-data-plane/packages/persistence: + en: 15b33178262b3852 + zh: 2df9aecdd82067ec +/session-durable-session-data-plane/packages/projection: + en: f1a70897ba39ef57 + zh: ba88ad9bbbc5c0ec +/session-durable-session-data-plane/packages/titles: + en: b59b3cf49aef2a4b + zh: d6078f3c96e4f5d1 +/session-durable-session-data-plane/packages/telemetry: + en: e0edfc0566463495 + zh: 4af9904d7ba97d97 +/session-durable-session-data-plane/related-documentation: + en: 9f19e2ae661f6405 + zh: 0cab6d3836b26b09 +/session-durable-session-data-plane/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/session/session-checkpoint-policy/README.i18n.yaml b/packages/session/session-checkpoint-policy/README.i18n.yaml index 4d4421d194..f1d5d301b8 100644 --- a/packages/session/session-checkpoint-policy/README.i18n.yaml +++ b/packages/session/session-checkpoint-policy/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/session/session-checkpoint-policy/README.md -README.md: 0114ffb82b53d456eb0677f209bff61c82bfbd98 -README.zh.md: 2abe4d4d6ec411434ea668d83995c1a76ae9a726 +/: + en: c1a916a186cc8718 + zh: df5c4fd5aa22f005 +/deepseek-ai-dsh-session-checkpoint-policy: + en: a81e37f590635a9f + zh: ad2699e68c7998c0 +/deepseek-ai-dsh-session-checkpoint-policy/summary: + en: 4c422b2080e00d23 + zh: a3a19de29dee904f +/deepseek-ai-dsh-session-checkpoint-policy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-checkpoint-policy/use-this-package: + en: 623577d7e2cb1b9f + zh: 16a95159209f76de +/deepseek-ai-dsh-session-checkpoint-policy/use-this-package/when-to-choose-it: + en: 228690f1706b19c6 + zh: 9a96ab84fe16d507 +/deepseek-ai-dsh-session-checkpoint-policy/use-this-package/minimal-configuration: + en: 876985641b6fe16c + zh: fe4f99cbe91a7445 +/deepseek-ai-dsh-session-checkpoint-policy/use-this-package/what-becomes-durable: + en: fce6fd58119eefdd + zh: 835a96d079993e01 +/deepseek-ai-dsh-session-checkpoint-policy/use-this-package/observable-behavior-and-failures: + en: b30a5a36f9a7960c + zh: 283e2a5579ae280b +/deepseek-ai-dsh-session-checkpoint-policy/understand-the-implementation: + en: 460ae50c9878a197 + zh: 526a8a465de55fcd +/deepseek-ai-dsh-session-checkpoint-policy/understand-the-implementation/design-concept: + en: cd40c7a1f0db9efb + zh: 17115c9612497465 +/deepseek-ai-dsh-session-checkpoint-policy/understand-the-implementation/source-map: + en: f9d06ce5e6ca68c1 + zh: 08c4c7a170f33737 +/deepseek-ai-dsh-session-checkpoint-policy/further-exploration: + en: d9b34c4e3ef78f1d + zh: 73e98eecc32ee654 +/deepseek-ai-dsh-session-checkpoint-policy/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-checkpoint-policy/model-experience/interrupted-calls: + en: 5cb4bf82d559c081 + zh: 649c4c50efbd84c7 +/deepseek-ai-dsh-session-checkpoint-policy/model-experience/interrupted-calls/what-the-model-sees: + en: 11ab6b8e058fd0f5 + zh: 962d12789d6ee01a +/deepseek-ai-dsh-session-checkpoint-policy/model-experience/interrupted-calls/token-effect: + en: f40f910529dce107 + zh: 39564b13a8263e9b +/deepseek-ai-dsh-session-checkpoint-policy/model-experience/interrupted-calls/kv-cache-effect: + en: b99544650c31f190 + zh: a08afbc2b5d5241c +/deepseek-ai-dsh-session-checkpoint-policy/known-limitations-and-deferred-work: + en: 5e4efe1b7d8a40e7 + zh: e593b2cd8810c9a7 +/deepseek-ai-dsh-session-checkpoint-policy/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-format-catalog/README.i18n.yaml b/packages/session/session-format-catalog/README.i18n.yaml index 880b30cf02..b8f3360a57 100644 --- a/packages/session/session-format-catalog/README.i18n.yaml +++ b/packages/session/session-format-catalog/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/session/session-format-catalog/README.md -README.md: 71caf0ac37e10e0ab4259229b51f58b222cb2cba -README.zh.md: ab9cbe1e7c21bdc5c456e6e886ab75c732212b93 +/: + en: 89c9b992aff39650 + zh: 94d371a24dedeec1 +/deepseek-ai-dsh-session-format-catalog: + en: f3d8ff5a8c114032 + zh: 9c44f1a7d6992f73 +/deepseek-ai-dsh-session-format-catalog/summary: + en: 9ba3c445056b28ed + zh: 267ba018514b5e12 +/deepseek-ai-dsh-session-format-catalog/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-format-catalog/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-session-format-catalog/use-this-package/when-to-use-it: + en: 705e341a9189d58f + zh: 849007446a7b8a46 +/deepseek-ai-dsh-session-format-catalog/use-this-package/entry-point: + en: f955b2fb458cf64d + zh: 0e0b6f025be928a7 +/deepseek-ai-dsh-session-format-catalog/understand-the-implementation: + en: cac81936d7b06de4 + zh: 6ec5b5af0c115464 +/deepseek-ai-dsh-session-format-catalog/further-exploration: + en: 48df998c195e1fc9 + zh: 4213cc5c7c19a73c +/deepseek-ai-dsh-session-format-catalog/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format-catalog/model-experience/catalog-dispatch: + en: 370b9bf19d575dbd + zh: e08724fcf4189634 +/deepseek-ai-dsh-session-format-catalog/model-experience/catalog-dispatch/what-the-model-sees: + en: 53fa22f9082ca037 + zh: 81c5ebd439d9afdf +/deepseek-ai-dsh-session-format-catalog/model-experience/catalog-dispatch/token-effect: + en: f7d1eb359afe1932 + zh: 5fc82f0403c52d19 +/deepseek-ai-dsh-session-format-catalog/model-experience/catalog-dispatch/kv-cache-effect: + en: 3796ca9965965a66 + zh: a6f655fa0d6e7aa4 +/deepseek-ai-dsh-session-format-catalog/known-limitations-and-deferred-work: + en: 9f86bd4bcaa5f43d + zh: aef8d58f4d1e0370 +/deepseek-ai-dsh-session-format-catalog/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-format-v0-to-v1/README.i18n.yaml b/packages/session/session-format-v0-to-v1/README.i18n.yaml index 305aea15b0..f5d06edff4 100644 --- a/packages/session/session-format-v0-to-v1/README.i18n.yaml +++ b/packages/session/session-format-v0-to-v1/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/session/session-format-v0-to-v1/README.md -README.md: 2ff830f4863a3e207f5c23be45b4765ebcb2a02b -README.zh.md: 057109a70a71d6ae4f068e1d2ef194839bc41747 +/: + en: 4ab6679a500310ef + zh: 26b95b9400580d46 +/deepseek-ai-dsh-session-format-v0-to-v1: + en: dff28f1741c3ef24 + zh: 3b4499f2e9838c21 +/deepseek-ai-dsh-session-format-v0-to-v1/summary: + en: e67a9a547320a867 + zh: dc724ea9d6e0905e +/deepseek-ai-dsh-session-format-v0-to-v1/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-format-v0-to-v1/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-session-format-v0-to-v1/use-this-package/when-to-use-it: + en: 7e0ddf0932b414b4 + zh: 4bf4dd76d465e490 +/deepseek-ai-dsh-session-format-v0-to-v1/use-this-package/entry-point: + en: 12e0858e80044921 + zh: 88b4e9709ce24d7d +/deepseek-ai-dsh-session-format-v0-to-v1/understand-the-implementation: + en: c0cf5fae48838078 + zh: 958edf61dabcbaba +/deepseek-ai-dsh-session-format-v0-to-v1/further-exploration: + en: 88c912ab06b3a305 + zh: 3cf1f3cfda3ae315 +/deepseek-ai-dsh-session-format-v0-to-v1/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format-v0-to-v1/model-experience/historical-restoration: + en: e63dd8ef6de7cf7c + zh: 4c3dde3b3052bb7a +/deepseek-ai-dsh-session-format-v0-to-v1/model-experience/historical-restoration/what-the-model-sees: + en: 2ef5c5585de26729 + zh: 456d352f16553c64 +/deepseek-ai-dsh-session-format-v0-to-v1/model-experience/historical-restoration/token-effect: + en: f7d1eb359afe1932 + zh: 5fc82f0403c52d19 +/deepseek-ai-dsh-session-format-v0-to-v1/model-experience/historical-restoration/kv-cache-effect: + en: c78d21c5c83e5854 + zh: 95c8f1a6948b8b56 +/deepseek-ai-dsh-session-format-v0-to-v1/known-limitations-and-deferred-work: + en: 8398f2f0e7c7a6b2 + zh: 73ec58c0ae513772 +/deepseek-ai-dsh-session-format-v0-to-v1/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-format-v1-to-v2/README.i18n.yaml b/packages/session/session-format-v1-to-v2/README.i18n.yaml index adfada7c15..07d3093543 100644 --- a/packages/session/session-format-v1-to-v2/README.i18n.yaml +++ b/packages/session/session-format-v1-to-v2/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/session/session-format-v1-to-v2/README.md -README.md: 9fc2e2b837df65bc3b2df9245c0cc44f84ae1ff2 -README.zh.md: 9bc82a5b1623cee24740ea69f03b03abf1b3ec5b +/: + en: 51a9837178b76f07 + zh: c65d20e60dc03963 +/deepseek-ai-dsh-session-format-v1-to-v2: + en: 7b5465c79976e0ab + zh: cc0f567f80e4ded8 +/deepseek-ai-dsh-session-format-v1-to-v2/summary: + en: 9adc4e80e72dbd43 + zh: 09467a857ef362f6 +/deepseek-ai-dsh-session-format-v1-to-v2/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-format-v1-to-v2/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-session-format-v1-to-v2/use-this-package/when-to-use-it: + en: 09ce83434449c1c2 + zh: 93423b64852fe877 +/deepseek-ai-dsh-session-format-v1-to-v2/use-this-package/entry-point: + en: da1fa33842f615b6 + zh: a43323304d35e4e8 +/deepseek-ai-dsh-session-format-v1-to-v2/understand-the-implementation: + en: 0bb8b6540497aadb + zh: 2e58741796cc096f +/deepseek-ai-dsh-session-format-v1-to-v2/further-exploration: + en: 792d57e291055422 + zh: 9da7d23c1900a8c3 +/deepseek-ai-dsh-session-format-v1-to-v2/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format-v1-to-v2/model-experience/historical-restoration: + en: e63dd8ef6de7cf7c + zh: 4c3dde3b3052bb7a +/deepseek-ai-dsh-session-format-v1-to-v2/model-experience/historical-restoration/what-the-model-sees: + en: 2ddaa78b39c35b34 + zh: 73fbbcbc84437fe2 +/deepseek-ai-dsh-session-format-v1-to-v2/model-experience/historical-restoration/token-effect: + en: 7ca5bfbdb1ff8411 + zh: fa679974c3225d4b +/deepseek-ai-dsh-session-format-v1-to-v2/model-experience/historical-restoration/kv-cache-effect: + en: 143165a394d4a7e1 + zh: e38769b25789e8dc +/deepseek-ai-dsh-session-format-v1-to-v2/known-limitations-and-deferred-work: + en: 9246dd685cc056ef + zh: 34a6010cacaa647d +/deepseek-ai-dsh-session-format-v1-to-v2/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-format-v2-to-v3/README.i18n.yaml b/packages/session/session-format-v2-to-v3/README.i18n.yaml index 7088b8a0e3..1ab0cb56d7 100644 --- a/packages/session/session-format-v2-to-v3/README.i18n.yaml +++ b/packages/session/session-format-v2-to-v3/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/session/session-format-v2-to-v3/README.md -README.md: 3f3fe7255a0542840db27d7ae605862e5cb97de9 -README.zh.md: 8f26cfcb6854a8b4fd6eec038c411bb1b524a535 +/: + en: d0920097a4f82e1c + zh: 49c1486c7342011b +/deepseek-ai-dsh-session-format-v2-to-v3: + en: a60f28fc631f2997 + zh: 105e1f6f31b0477c +/deepseek-ai-dsh-session-format-v2-to-v3/summary: + en: f07931a0033c4f9b + zh: aa126cc8c9a2c0df +/deepseek-ai-dsh-session-format-v2-to-v3/table-of-contents: + en: a53318ab96519b9a + zh: 5c0df2c9278c518f +/deepseek-ai-dsh-session-format-v2-to-v3/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-session-format-v2-to-v3/use-this-package/when-to-use-it: + en: 9fdd49c5c8047659 + zh: 25b04da32127eb6c +/deepseek-ai-dsh-session-format-v2-to-v3/use-this-package/entry-point: + en: f79ffa1ea825f0aa + zh: 54f2723f279f84d2 +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification: + en: 0132dbed9ea34acb + zh: 40eb4b1bb39504b8 +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/header-and-preset-references: + en: 04c39412c6bd4f0f + zh: e8143eaeb44ede63 +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/system-head-and-message-identities: + en: a8baba72b6c187e4 + zh: 51b56d009756e307 +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/sequence-references-and-inheritance: + en: 5a93128360de269c + zh: ca8364e14c8817f3 +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/ptc-vocabulary: + en: 00a5c78a2b461538 + zh: 7af981f092f34f1f +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/canonical-envelopes-and-tool-errors: + en: b95b6f9c72de67c7 + zh: 0a8a8e43a4a17e3f +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/delivery-guards: + en: deb9d987126fea8b + zh: f332e6746753b34a +/deepseek-ai-dsh-session-format-v2-to-v3/v2-to-v3-specification/source-audit-and-refusal: + en: 32a16980bf3b1090 + zh: aebed8681dcfbeca +/deepseek-ai-dsh-session-format-v2-to-v3/native-v3-admission: + en: 2f9127759a38289f + zh: d3c7b539f5e3c670 +/deepseek-ai-dsh-session-format-v2-to-v3/understand-the-implementation: + en: 6d630626cd7a5017 + zh: 8312cc7bd3abcab6 +/deepseek-ai-dsh-session-format-v2-to-v3/further-exploration: + en: 2c07a2d0f6157c4a + zh: db4910ffa738dd72 +/deepseek-ai-dsh-session-format-v2-to-v3/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format-v2-to-v3/model-experience/historical-restoration: + en: e63dd8ef6de7cf7c + zh: 2d2a6b61f5e5eb70 +/deepseek-ai-dsh-session-format-v2-to-v3/model-experience/historical-restoration/what-the-model-sees: + en: c9e089fffc6995fe + zh: 47b1f772b65eafa3 +/deepseek-ai-dsh-session-format-v2-to-v3/model-experience/historical-restoration/token-effect: + en: b4d1aba0150e8f4e + zh: 54729a19efe235a2 +/deepseek-ai-dsh-session-format-v2-to-v3/model-experience/historical-restoration/kv-cache-effect: + en: 2b3f89391a5d5369 + zh: 8ee03de5e07cd67d +/deepseek-ai-dsh-session-format-v2-to-v3/known-limitations-and-deferred-work: + en: eb15595f7db1cdef + zh: ef6d792b616e681a +/deepseek-ai-dsh-session-format-v2-to-v3/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/session/session-format-v3-to-v4/README.i18n.yaml b/packages/session/session-format-v3-to-v4/README.i18n.yaml index 9147e6978e..2ffbd40a88 100644 --- a/packages/session/session-format-v3-to-v4/README.i18n.yaml +++ b/packages/session/session-format-v3-to-v4/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/session/session-format-v3-to-v4/README.md -README.md: e7b232b73c7a06a34132970e6d82612c514c3e42 -README.zh.md: 768f8974d9d28a64d99ecb565227b7f786460651 +/: + en: a24b02a97921b07a + zh: 92428dfee88d27fd +/deepseek-ai-dsh-session-format-v3-to-v4: + en: f27dbda33d994f9b + zh: 209b0ad95219767a +/deepseek-ai-dsh-session-format-v3-to-v4/summary: + en: 0162a0e7e6493e0a + zh: 4107af760c449097 +/deepseek-ai-dsh-session-format-v3-to-v4/table-of-contents: + en: b501b06f4b21cc31 + zh: bd67928bedf6c786 +/deepseek-ai-dsh-session-format-v3-to-v4/use-this-package: + en: e3e7a08fb807c750 + zh: 9550a2094e203551 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification: + en: d3463f5e222c44a2 + zh: ec932eb4acac30f4 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/header-and-physical-framing: + en: 69f24696bd941ceb + zh: bc51ca330a4aa361 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/tool-result-representation: + en: 32b845f1e1867195 + zh: 3e4e046dbc36478e +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/extension-data: + en: 3e7af0248b029e9a + zh: b73ddd133db65d05 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/message-source-conversion: + en: 83df80655a2ea5ab + zh: be1dd03bc0464fce +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/parent-catalog-prerequisites: + en: 06093e37658e414b + zh: 2480e78d405af862 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/sequence-references-and-inheritance: + en: 8543a15b3c24cd43 + zh: 5eacb6ffd009d1bc +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/delivery-generations: + en: 1af75967fd8296c7 + zh: 4efd2a3a3a288610 +/deepseek-ai-dsh-session-format-v3-to-v4/v3-to-v4-specification/source-audit-and-refusal: + en: bfc56afb05348d19 + zh: 21afbb4ced91e87f +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission: + en: 7c2a1375c98e9b9f + zh: 39a57a82df56a2d4 +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission/header-messages-and-surface-metadata: + en: 610f35b8c44538a2 + zh: 17e5c07f09783106 +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission/lifecycle-and-reference-relationships: + en: 74f51036958ba3bc + zh: 6eeb65f15bb33e56 +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission/developer-changes-and-deferred-schemas: + en: ad811ee9b8d9e4dc + zh: 18494e67a8721fc3 +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission/fork-generated-results: + en: db82b002989ac151 + zh: da80b797bf321c3f +/deepseek-ai-dsh-session-format-v3-to-v4/native-v4-admission/validation-entry-points-and-recovery: + en: 1d6db95cf7a82846 + zh: 837c690fe87f47db +/deepseek-ai-dsh-session-format-v3-to-v4/understand-the-implementation: + en: d27e081c4e2ecd86 + zh: 0dd639484f67dba9 +/deepseek-ai-dsh-session-format-v3-to-v4/further-exploration: + en: d54326f96c09a0a0 + zh: 862147d701ce9049 +/deepseek-ai-dsh-session-format-v3-to-v4/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format-v3-to-v4/model-experience/historical-restoration: + en: e63dd8ef6de7cf7c + zh: f1e356f01b601079 +/deepseek-ai-dsh-session-format-v3-to-v4/model-experience/historical-restoration/what-the-model-sees: + en: 8885a0ae5f305b88 + zh: 2064d2d02dd1b303 +/deepseek-ai-dsh-session-format-v3-to-v4/model-experience/historical-restoration/token-effect: + en: adb2bef43125d1df + zh: 02f8d1d6a25d57ab +/deepseek-ai-dsh-session-format-v3-to-v4/model-experience/historical-restoration/kv-cache-effect: + en: 143ddba012e03d0c + zh: 93dfdb806bf9a697 +/deepseek-ai-dsh-session-format-v3-to-v4/known-limitations-and-deferred-work: + en: c5a232c1f0b8a5a5 + zh: 5634f98f97060c7c +/deepseek-ai-dsh-session-format-v3-to-v4/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 8ec3e73528ddb1a6 diff --git a/packages/session/session-format/README.i18n.yaml b/packages/session/session-format/README.i18n.yaml index e83afe2d20..17d139e04f 100644 --- a/packages/session/session-format/README.i18n.yaml +++ b/packages/session/session-format/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/session/session-format/README.md -README.md: 040d3383864d008b9df62378063a11223c1373be -README.zh.md: 48daefb306b02a3acad588165ab9eea1009af1ac +/: + en: 6b609172b64b4bf6 + zh: 51726d3f6a3862c9 +/deepseek-ai-dsh-session-format: + en: 41e4b37601a7d84a + zh: b90acce3ba79c48d +/deepseek-ai-dsh-session-format/summary: + en: fbf17197277c8d6d + zh: fe035e501ccee260 +/deepseek-ai-dsh-session-format/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-format/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-session-format/use-this-package/when-to-use-it: + en: 0eb581e31a01e375 + zh: 265952f3c3be73d4 +/deepseek-ai-dsh-session-format/use-this-package/entry-point: + en: 8d67ddec8cc4dea3 + zh: 0dede278e7c90f37 +/deepseek-ai-dsh-session-format/understand-the-implementation: + en: b864adbc60539188 + zh: 7589781800eb7937 +/deepseek-ai-dsh-session-format/further-exploration: + en: 3375aad1b00f2882 + zh: c6e22ecbda0daced +/deepseek-ai-dsh-session-format/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-format/model-experience/session-restoration: + en: d479123f6a4eb277 + zh: b33d9f380bc8b5e6 +/deepseek-ai-dsh-session-format/model-experience/session-restoration/what-the-model-sees: + en: 2da3e6c5baed1591 + zh: 3dff31b1285c569f +/deepseek-ai-dsh-session-format/model-experience/session-restoration/token-effect: + en: f7d1eb359afe1932 + zh: 5fc82f0403c52d19 +/deepseek-ai-dsh-session-format/model-experience/session-restoration/kv-cache-effect: + en: de4d8e1bb81443c4 + zh: 68c1b71894573928 +/deepseek-ai-dsh-session-format/known-limitations-and-deferred-work: + en: cb4666569ee6d1fe + zh: 7159ecfe0520e5b1 +/deepseek-ai-dsh-session-format/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-log-deepseek/README.i18n.yaml b/packages/session/session-log-deepseek/README.i18n.yaml index cf0a308cb4..d481cec0ae 100644 --- a/packages/session/session-log-deepseek/README.i18n.yaml +++ b/packages/session/session-log-deepseek/README.i18n.yaml @@ -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 packages/session/session-log-deepseek/README.md -README.md: 27396f96191e0f88268558a1426b28e0b7dc6f12 -README.zh.md: a2840223f043283b0f7f0176108d23a5c94213ef +/: + en: 29b2294131f1a592 + zh: 6d7f4fa9e1f46943 +/deepseek-ai-dsh-session-log-deepseek: + en: 6d991785cbfd70ae + zh: 0918e2462821cde4 +/deepseek-ai-dsh-session-log-deepseek/summary: + en: 19c182dbd7d8e064 + zh: 51c043d6ea52db0d +/deepseek-ai-dsh-session-log-deepseek/table-of-contents: + en: e2aa29e41bc101c4 + zh: 2ef629f2a444bc13 +/deepseek-ai-dsh-session-log-deepseek/configuration: + en: e6f01722d3049173 + zh: 4b513994e90902c4 +/deepseek-ai-dsh-session-log-deepseek/request-field: + en: f02b96016b0f5438 + zh: b66ed7647ced17c0 +/deepseek-ai-dsh-session-log-deepseek/acceptance-and-retry: + en: c5cef5d53ac28ec8 + zh: 2aba6bb2c80bb714 +/deepseek-ai-dsh-session-log-deepseek/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-log-deepseek/model-experience/session-log-metadata: + en: 468b9eaee350f6e2 + zh: c192ad6228e7044d +/deepseek-ai-dsh-session-log-deepseek/model-experience/session-log-metadata/what-the-model-sees: + en: 89fef23a54a0f9d6 + zh: fd17806f1df6083e +/deepseek-ai-dsh-session-log-deepseek/model-experience/session-log-metadata/token-effect: + en: 3402320d0f59a260 + zh: d23755791a712443 +/deepseek-ai-dsh-session-log-deepseek/model-experience/session-log-metadata/kv-cache-effect: + en: dcf00aa1af688f09 + zh: df5851d66c3a6b4f +/deepseek-ai-dsh-session-log-deepseek/known-limitations-and-deferred-work: + en: af7a14b23e811ec6 + zh: d63e6116cf101dd6 +/deepseek-ai-dsh-session-log-deepseek/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/session/session-persistence-jsonl/README.i18n.yaml b/packages/session/session-persistence-jsonl/README.i18n.yaml index 4b42d7fa5e..efd3f41872 100644 --- a/packages/session/session-persistence-jsonl/README.i18n.yaml +++ b/packages/session/session-persistence-jsonl/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/session/session-persistence-jsonl/README.md -README.md: 5846404961caaef7a91fb4dda562655d15fd2be9 -README.zh.md: b7dd646e57b75fe47f3683d2b230dace628f8eee +/: + en: cc97ed79d262bf09 + zh: 90a141669dc844f3 +/deepseek-ai-dsh-session-persistence-jsonl: + en: 719697c849e36229 + zh: 466ab1b89c10020c +/deepseek-ai-dsh-session-persistence-jsonl/summary: + en: 4821bd83813408c7 + zh: 2e5c721a19f549e7 +/deepseek-ai-dsh-session-persistence-jsonl/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package: + en: d6112142a705ec43 + zh: f0914d9e37216f97 +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package/when-to-choose-it: + en: 37c10302bbbde268 + zh: 3d5c027bac868efd +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package/minimal-configuration: + en: 22e8c3b2da45edff + zh: d9effd892b514520 +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package/on-disk-layout: + en: e20cf32540d7c785 + zh: 67e182529e9211ca +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package/durability-and-crash-semantics: + en: 1eaa87736cac029b + zh: 26224e8889786d69 +/deepseek-ai-dsh-session-persistence-jsonl/use-this-package/reading-the-logs: + en: c06983c4a73bebe1 + zh: 7319f8f44223685f +/deepseek-ai-dsh-session-persistence-jsonl/understand-the-implementation: + en: a35407bb25671e7e + zh: 6a00f9510c85adcb +/deepseek-ai-dsh-session-persistence-jsonl/understand-the-implementation/design-concept: + en: b69d4565a11b6f02 + zh: c8309690fc931f8d +/deepseek-ai-dsh-session-persistence-jsonl/understand-the-implementation/physical-encoding: + en: 011d56563b81acd9 + zh: 69122dbade603fe9 +/deepseek-ai-dsh-session-persistence-jsonl/understand-the-implementation/source-map: + en: 3bdb0f1dd4d69fba + zh: 8198d655d73d42e3 +/deepseek-ai-dsh-session-persistence-jsonl/further-exploration: + en: 827c04be7cd01514 + zh: 5e87603b3463db38 +/deepseek-ai-dsh-session-persistence-jsonl/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-persistence-jsonl/model-experience/resumed-conversation-history: + en: 062875aab7f3f138 + zh: c7285918227e6f5c +/deepseek-ai-dsh-session-persistence-jsonl/model-experience/resumed-conversation-history/what-the-model-sees: + en: 2a3b5c6e3860eef6 + zh: 82afe0f0359581b6 +/deepseek-ai-dsh-session-persistence-jsonl/model-experience/resumed-conversation-history/token-effect: + en: 8fb2f7cdba1ff320 + zh: e130ec2a92a53a5c +/deepseek-ai-dsh-session-persistence-jsonl/model-experience/resumed-conversation-history/kv-cache-effect: + en: 53ce4da7ce68d21c + zh: 10f40bc354100f77 +/deepseek-ai-dsh-session-persistence-jsonl/known-limitations-and-deferred-work: + en: e6343e8ad3f6fb71 + zh: fe632c9711e7921b +/deepseek-ai-dsh-session-persistence-jsonl/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-persistence/README.i18n.yaml b/packages/session/session-persistence/README.i18n.yaml index e9df426f61..970120bdcc 100644 --- a/packages/session/session-persistence/README.i18n.yaml +++ b/packages/session/session-persistence/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/session/session-persistence/README.md -README.md: 67ace6d102c0d58855c69987883208e819108ec8 -README.zh.md: f2f5e5f7d0c16e66b08a3fc2f65ed7efe447b128 +/: + en: 99acbd5c1e2a16ce + zh: 31342508a4e1bf09 +/deepseek-ai-dsh-session-persistence: + en: e80e5f59ceadaa37 + zh: f80ca64a74ca6e21 +/deepseek-ai-dsh-session-persistence/summary: + en: 31d5eec7694aa83f + zh: b91ea5b6daaec8a5 +/deepseek-ai-dsh-session-persistence/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-persistence/use-this-package: + en: bd48e96d14122170 + zh: f8a06e7246b55a6f +/deepseek-ai-dsh-session-persistence/use-this-package/choosing-a-backend: + en: 170892270261aae0 + zh: 7daf1edd4f764409 +/deepseek-ai-dsh-session-persistence/use-this-package/what-the-service-provides: + en: c10b9c7d9bad305c + zh: 0e9c391e9df37da6 +/deepseek-ai-dsh-session-persistence/use-this-package/ownership-and-visibility: + en: 16d4abbb05a67360 + zh: fc91863169570795 +/deepseek-ai-dsh-session-persistence/use-this-package/the-live-write-path-and-shutdown-drain: + en: 282c5bc8a391159f + zh: 96682e345ef301f6 +/deepseek-ai-dsh-session-persistence/use-this-package/resuming-and-crash-recovery: + en: 08b09dce0bcf47c8 + zh: b6c5926d6e440a7b +/deepseek-ai-dsh-session-persistence/use-this-package/failures-and-recovery: + en: 6d8beec038b1121a + zh: 1f02952eb2a0b386 +/deepseek-ai-dsh-session-persistence/understand-the-implementation: + en: 9e303bd09a71fef1 + zh: 1f631925081ae101 +/deepseek-ai-dsh-session-persistence/understand-the-implementation/design-concept: + en: 3d21cded1f7e74ff + zh: 5f624aefebb1f63d +/deepseek-ai-dsh-session-persistence/understand-the-implementation/the-invariants-every-backend-honors: + en: a3b5e0e6747f5ab4 + zh: fcbcc16c04e15edb +/deepseek-ai-dsh-session-persistence/understand-the-implementation/source-map: + en: 3868942fde28ff0a + zh: 865208afd7d04b49 +/deepseek-ai-dsh-session-persistence/understand-the-implementation/the-write-path-at-a-glance: + en: c920cf9262f4a563 + zh: 0f8e3ff17e39c861 +/deepseek-ai-dsh-session-persistence/understand-the-implementation/stored-record-validation: + en: b93ec8187f7f86b0 + zh: 578aa5c6cadafd5a +/deepseek-ai-dsh-session-persistence/further-exploration: + en: eae3982f64497a9c + zh: bfca52edcaeff828 +/deepseek-ai-dsh-session-persistence/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-persistence/model-experience/resumed-conversation-history: + en: 062875aab7f3f138 + zh: c7285918227e6f5c +/deepseek-ai-dsh-session-persistence/model-experience/resumed-conversation-history/what-the-model-sees: + en: f697ddcf1a13c439 + zh: a3b5050484be4b9b +/deepseek-ai-dsh-session-persistence/model-experience/resumed-conversation-history/token-effect: + en: 375253768652244e + zh: c5bf6c3dcf707ab2 +/deepseek-ai-dsh-session-persistence/model-experience/resumed-conversation-history/kv-cache-effect: + en: 70a8139de5fd1cec + zh: 66dfba4b93e63c55 +/deepseek-ai-dsh-session-persistence/known-limitations-and-deferred-work: + en: 97296c31399996e4 + zh: 86a5c1e771415e99 +/deepseek-ai-dsh-session-persistence/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-projection-cache/README.i18n.yaml b/packages/session/session-projection-cache/README.i18n.yaml index e935b623ce..ad963a3aea 100644 --- a/packages/session/session-projection-cache/README.i18n.yaml +++ b/packages/session/session-projection-cache/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/session/session-projection-cache/README.md -README.md: 0ba9c5a47fbf2006be1593cb1805adb5bf9fbc59 -README.zh.md: d697b0520c0edf89572e9994b62e987111481a77 +/: + en: 5701298a1670d9ec + zh: 7bb42d5f715e481c +/deepseek-ai-dsh-session-projection-cache: + en: 88c785e7f9d6e4be + zh: 95b5f979bf471d34 +/deepseek-ai-dsh-session-projection-cache/summary: + en: bf8d9303afdc56ad + zh: b6d54b39b6411be5 +/deepseek-ai-dsh-session-projection-cache/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-projection-cache/use-this-package: + en: 99e629888eec55e5 + zh: 3520f8f0cc64795d +/deepseek-ai-dsh-session-projection-cache/use-this-package/when-to-choose-it: + en: 96aa72949587ad79 + zh: 8e8727d59d3768c1 +/deepseek-ai-dsh-session-projection-cache/use-this-package/minimal-configuration: + en: 0ff4aa70ebfe918f + zh: 9235f115502717b7 +/deepseek-ai-dsh-session-projection-cache/use-this-package/how-checkpoints-are-written: + en: bae62224d0008bc0 + zh: 0daf92dab3314913 +/deepseek-ai-dsh-session-projection-cache/use-this-package/reading-cached-values: + en: e8dc676fbfe97c5b + zh: 686837459289fd41 +/deepseek-ai-dsh-session-projection-cache/use-this-package/what-the-cache-guarantees: + en: 6e4878de28ea113e + zh: 6f940a2220585b5e +/deepseek-ai-dsh-session-projection-cache/understand-the-implementation: + en: d3845f1edb97db3e + zh: 26d4e54a4f6c2b7b +/deepseek-ai-dsh-session-projection-cache/understand-the-implementation/design-concept: + en: fbc54d6055d5772a + zh: ebfa186b3702635f +/deepseek-ai-dsh-session-projection-cache/understand-the-implementation/read-and-write-ownership: + en: 8be14e573e0b3acf + zh: be96a2859be64e95 +/deepseek-ai-dsh-session-projection-cache/understand-the-implementation/source-map: + en: 546d7d0ff03b92c1 + zh: f3d56e81a738ce56 +/deepseek-ai-dsh-session-projection-cache/further-exploration: + en: 63e7495d8853b368 + zh: 754db26cb2b0bfba +/deepseek-ai-dsh-session-projection-cache/model-experience: + en: 25c9652e94565a76 + zh: efd5ca7105d8a561 +/deepseek-ai-dsh-session-projection-cache/model-experience/kv-cache-effect: + en: d483aa4968fa1955 + zh: 90f8c38f978123d2 +/deepseek-ai-dsh-session-projection-cache/known-limitations-and-deferred-work: + en: 1c4efba49a67f7b9 + zh: 494f1a6fa4207c3a +/deepseek-ai-dsh-session-projection-cache/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-projection/README.i18n.yaml b/packages/session/session-projection/README.i18n.yaml index 0a5ccf8611..f88687850a 100644 --- a/packages/session/session-projection/README.i18n.yaml +++ b/packages/session/session-projection/README.i18n.yaml @@ -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 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 packages/session/session-projection/README.md -README.md: 2fa7ddc096e64e622c814f216a6c606de6ba1689 -README.zh.md: 565b331cd7e0f5190b6da4e54ed659d9da6d96fc +/: + en: 85229e402add27cf + zh: 66473d34393c44db +/deepseek-ai-dsh-session-projection: + en: 4de14fc97cd52942 + zh: 7395050ab82d4f45 +/deepseek-ai-dsh-session-projection/summary: + en: 2a3b558f6432184f + zh: 205f43c59c6db2f5 +/deepseek-ai-dsh-session-projection/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-projection/use-this-package: + en: 3a15581f0b043e79 + zh: 302fc8afe8fb45fa +/deepseek-ai-dsh-session-projection/use-this-package/when-to-choose-it: + en: 90b7c26cb45be52a + zh: 386e294ec09607c1 +/deepseek-ai-dsh-session-projection/use-this-package/define-a-projection-unit: + en: 09758d1475fad86e + zh: 473637cb34aebe72 +/deepseek-ai-dsh-session-projection/use-this-package/register-and-read: + en: 5e754e67dff07b02 + zh: 2ba1bda464abaa45 +/deepseek-ai-dsh-session-projection/use-this-package/persisted-checkpoints: + en: 45f1c05fb7e08180 + zh: f8d62c749899651a +/deepseek-ai-dsh-session-projection/understand-the-implementation: + en: 3397f58d6f49bfda + zh: efb85d382e25574d +/deepseek-ai-dsh-session-projection/understand-the-implementation/design-concept: + en: 8afa0fdb49898f6d + zh: 6b2da34455963935 +/deepseek-ai-dsh-session-projection/understand-the-implementation/source-map: + en: 8b6672b48e7607d6 + zh: 33611e7ea13219f1 +/deepseek-ai-dsh-session-projection/understand-the-implementation/drive-and-checkpoint-flow: + en: 00136880bb586403 + zh: bd35f645111c068c +/deepseek-ai-dsh-session-projection/further-exploration: + en: 304a03d08ea5c9f9 + zh: 200a0505e8d11e0d +/deepseek-ai-dsh-session-projection/model-experience: + en: a24045627fb43695 + zh: a8465196c3948796 +/deepseek-ai-dsh-session-projection/model-experience/kv-cache-effect: + en: 8a592dae9bc946ab + zh: eca939995bb5f8e0 +/deepseek-ai-dsh-session-projection/known-limitations-and-deferred-work: + en: 8fd41113832feb7c + zh: d50021b135278d77 +/deepseek-ai-dsh-session-projection/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-stats/README.i18n.yaml b/packages/session/session-stats/README.i18n.yaml index 6066590356..c64aff7d5a 100644 --- a/packages/session/session-stats/README.i18n.yaml +++ b/packages/session/session-stats/README.i18n.yaml @@ -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 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 packages/session/session-stats/README.md -README.md: 6585b0af7d3385ad6bf9186a3f246f76dadf824e -README.zh.md: 452dae660f9e1469b1b1a8af9cfa2445afeb9ca0 +/: + en: 8c7837378d8b72ab + zh: b51c4d53251ef19e +/deepseek-ai-dsh-session-stats: + en: ad6bf372ea5d088f + zh: bb976e446cc0648f +/deepseek-ai-dsh-session-stats/summary: + en: 29638613271193ab + zh: 5ea89b571b7d15e2 +/deepseek-ai-dsh-session-stats/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-stats/use-this-package: + en: 2db3db321c81b26d + zh: 9f1037d209279c02 +/deepseek-ai-dsh-session-stats/use-this-package/composition: + en: 1ff253c3946b4ebe + zh: 103f66630a01e5f8 +/deepseek-ai-dsh-session-stats/use-this-package/what-the-figures-mean: + en: 178378a39ffcb22f + zh: 0143db1591f66f00 +/deepseek-ai-dsh-session-stats/use-this-package/failures-and-recovery: + en: 7dc55c15b7201cb3 + zh: da36bf1bd77c5eef +/deepseek-ai-dsh-session-stats/understand-the-implementation: + en: 5ff52cd012b71778 + zh: 96b2e0eafa20f3d0 +/deepseek-ai-dsh-session-stats/understand-the-implementation/design-concept: + en: 820099cdc96eba35 + zh: 23793632f93476cb +/deepseek-ai-dsh-session-stats/understand-the-implementation/source-map: + en: 49a9eaf7a65dbca5 + zh: 7ca852895aef70b5 +/deepseek-ai-dsh-session-stats/understand-the-implementation/data-model: + en: c6ecd89375983aaf + zh: e3b95e175b45ccdc +/deepseek-ai-dsh-session-stats/understand-the-implementation/fold-rules: + en: 19fa8e3c3a22610c + zh: b538777c3a4b3d17 +/deepseek-ai-dsh-session-stats/further-exploration: + en: 39e2876d4cea3c71 + zh: 55916dda642538dc +/deepseek-ai-dsh-session-stats/model-experience: + en: 53488853449684df + zh: 697e1bbb3f3a1dd2 +/deepseek-ai-dsh-session-stats/model-experience/kv-cache-effect: + en: 47f982e326fe77fd + zh: c2241315dc0c89c9 +/deepseek-ai-dsh-session-stats/known-limitations-and-deferred-work: + en: 60c96507fc36d60e + zh: 06b05dd61bd20ee4 +/deepseek-ai-dsh-session-stats/known-limitations-and-deferred-work/dev-note: + en: 2e77468b18faa618 + zh: 22215b9ec8883d88 diff --git a/packages/session/session-telemetry-otel/README.i18n.yaml b/packages/session/session-telemetry-otel/README.i18n.yaml index 37bcb508a3..b89f0da8de 100644 --- a/packages/session/session-telemetry-otel/README.i18n.yaml +++ b/packages/session/session-telemetry-otel/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/session/session-telemetry-otel/README.md -README.md: 35dc351bd56fdce396eb4c89c321008eb14796ce -README.zh.md: c414e6461a175412bd44e6fdacd22df0da2eb902 +/: + en: 356614b4af1ad375 + zh: f76a068b5f056574 +/deepseek-ai-dsh-session-telemetry-otel: + en: f8ea869792c8b207 + zh: bc076172ce22ba9b +/deepseek-ai-dsh-session-telemetry-otel/summary: + en: 1c5d2f15cb13e318 + zh: 5e061a16cd38c4c5 +/deepseek-ai-dsh-session-telemetry-otel/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-telemetry-otel/use-this-package: + en: 9b82f2819ddaa3f4 + zh: b6ad90b11e7e0ef7 +/deepseek-ai-dsh-session-telemetry-otel/use-this-package/modes: + en: bc7e598148a7f8c3 + zh: 0209c6aa258ec134 +/deepseek-ai-dsh-session-telemetry-otel/use-this-package/minimal-configuration: + en: 3de0d5db3156a7e4 + zh: 71199133cd9998c4 +/deepseek-ai-dsh-session-telemetry-otel/use-this-package/what-leaves-the-machine: + en: b94ca8299ad60c5d + zh: 3791131f3440e3b3 +/deepseek-ai-dsh-session-telemetry-otel/use-this-package/failures-and-shutdown: + en: 20c6e78df8ad2c2a + zh: fd6a00f98c4cc05c +/deepseek-ai-dsh-session-telemetry-otel/understand-the-implementation: + en: ee672a6a6f0fa02d + zh: c3bab8e6b60e768c +/deepseek-ai-dsh-session-telemetry-otel/understand-the-implementation/design-concept: + en: d5e1f8249d3eea34 + zh: 7a6915e33390f4ae +/deepseek-ai-dsh-session-telemetry-otel/understand-the-implementation/source-map: + en: 0b99d2e5c27213cd + zh: 3cbdaa7f6a45d81a +/deepseek-ai-dsh-session-telemetry-otel/understand-the-implementation/capture-wiring: + en: 9bdc01d0fa130b3a + zh: 63bf30c4cc983ca0 +/deepseek-ai-dsh-session-telemetry-otel/understand-the-implementation/field-mapping: + en: 38590f3afee40bb8 + zh: b2fc1f4341008d79 +/deepseek-ai-dsh-session-telemetry-otel/further-exploration: + en: 155b75490ec65d86 + zh: 07d37d6e4ac90c89 +/deepseek-ai-dsh-session-telemetry-otel/model-experience: + en: a5a1c890ddacd9a9 + zh: 019c0d113e141853 +/deepseek-ai-dsh-session-telemetry-otel/model-experience/kv-cache-effect: + en: 7593cf5d0d2cedd6 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-session-telemetry-otel/known-limitations-and-deferred-work: + en: e43087aea7af4c9e + zh: f8b529e2012b4c63 +/deepseek-ai-dsh-session-telemetry-otel/known-limitations-and-deferred-work/dev-note: + en: a770daec456212ab + zh: 1b861566d591837d diff --git a/packages/session/session-telemetry/README.i18n.yaml b/packages/session/session-telemetry/README.i18n.yaml index b51d905506..894c36f1e5 100644 --- a/packages/session/session-telemetry/README.i18n.yaml +++ b/packages/session/session-telemetry/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/session/session-telemetry/README.md -README.md: c7d76686415ee4874e29ec191d8456c31a3019f4 -README.zh.md: 2e9bc7e6619f30d18660ef2a11ab703b02647aa3 +/: + en: 5c553664bfb6ebaa + zh: 0ad10e1597cb65bc +/deepseek-ai-dsh-session-telemetry: + en: f38756c64b49af33 + zh: 837746cfd00d13ea +/deepseek-ai-dsh-session-telemetry/summary: + en: 2ee6fcb4e68f6c9b + zh: 8ddc8d1f3c645757 +/deepseek-ai-dsh-session-telemetry/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-telemetry/use-this-package: + en: f103da7913199503 + zh: 623f7a102c451289 +/deepseek-ai-dsh-session-telemetry/use-this-package/choosing-and-mounting-a-backend: + en: cc1b92c9563ec9e9 + zh: 6e80c5e002a6c83d +/deepseek-ai-dsh-session-telemetry/use-this-package/the-backend-contract: + en: e3cc8ee7774a0ad5 + zh: 3c039339870b8cf9 +/deepseek-ai-dsh-session-telemetry/use-this-package/what-gets-captured: + en: ed96f8ed3cf72fe8 + zh: b7f2b546b8639f43 +/deepseek-ai-dsh-session-telemetry/use-this-package/the-sharing-disclosure: + en: 5c325a8aaadf17c7 + zh: 5c493d2333f82b28 +/deepseek-ai-dsh-session-telemetry/use-this-package/redacting-records: + en: 22ed345bf7746611 + zh: a57d2eaa878c8cce +/deepseek-ai-dsh-session-telemetry/understand-the-implementation: + en: cad1e9d195916553 + zh: 2192f3ce5e2196bd +/deepseek-ai-dsh-session-telemetry/understand-the-implementation/design-concept: + en: 3bac6e75e9e442eb + zh: 88062e9d93a782eb +/deepseek-ai-dsh-session-telemetry/understand-the-implementation/source-map: + en: 5dc345ec3dda38b8 + zh: 189d673734a2c20e +/deepseek-ai-dsh-session-telemetry/understand-the-implementation/capture-flow: + en: f86c2777668ae89e + zh: 710c28c18f3f4402 +/deepseek-ai-dsh-session-telemetry/understand-the-implementation/the-handoff-cursor: + en: c213358e20f27173 + zh: 84a5501335891f0b +/deepseek-ai-dsh-session-telemetry/further-exploration: + en: 12c383ffe3448557 + zh: e78cbffe565ce340 +/deepseek-ai-dsh-session-telemetry/model-experience: + en: 6a6b429828997572 + zh: bde61df9dab8f840 +/deepseek-ai-dsh-session-telemetry/model-experience/kv-cache-effect: + en: 7593cf5d0d2cedd6 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-session-telemetry/known-limitations-and-deferred-work: + en: dc950b1f59a057ec + zh: 6f353d426b03abb1 +/deepseek-ai-dsh-session-telemetry/known-limitations-and-deferred-work/dev-note: + en: e10a3d2c84d710a6 + zh: 910927bba4d34a85 diff --git a/packages/session/session-title-all-prompts-llm/README.i18n.yaml b/packages/session/session-title-all-prompts-llm/README.i18n.yaml index 922ab282f5..d8e3e7eaa5 100644 --- a/packages/session/session-title-all-prompts-llm/README.i18n.yaml +++ b/packages/session/session-title-all-prompts-llm/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/session/session-title-all-prompts-llm/README.md -README.md: 449542440df08e21372164e67f1de24eecbbf694 -README.zh.md: 7aa8ac78287751ff1bba7e54c1c4e2a64ac5d3b4 +/: + en: 0718b02e4cdd4cc6 + zh: 2b5b4a729ce4d97e +/deepseek-ai-dsh-session-title-all-prompts-llm: + en: 14b9552b617bc7a9 + zh: 9253c5d935bff697 +/deepseek-ai-dsh-session-title-all-prompts-llm/summary: + en: 9f64c4dd5e30f1c8 + zh: 35cf397596083be5 +/deepseek-ai-dsh-session-title-all-prompts-llm/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-title-all-prompts-llm/use-this-package: + en: 2c0bccf753fe70eb + zh: 36b96a547ddddfc1 +/deepseek-ai-dsh-session-title-all-prompts-llm/use-this-package/when-titles-are-generated: + en: 3c9e14df96e6000e + zh: a13f12a3df426380 +/deepseek-ai-dsh-session-title-all-prompts-llm/use-this-package/configuration: + en: 1965c9ce7dedb2e7 + zh: 9b9c9b68af995b51 +/deepseek-ai-dsh-session-title-all-prompts-llm/use-this-package/failures-and-recovery: + en: 6077a4665a4edb87 + zh: 539c4e5969f9bb9b +/deepseek-ai-dsh-session-title-all-prompts-llm/understand-the-implementation: + en: 506933ffa7745b7d + zh: a9bb6f06a32b7c18 +/deepseek-ai-dsh-session-title-all-prompts-llm/understand-the-implementation/design-concept: + en: 2c307e1480e5c319 + zh: 60c7394728f7ff9c +/deepseek-ai-dsh-session-title-all-prompts-llm/understand-the-implementation/source-map: + en: e7ae42597cc501a6 + zh: 2e55e9b293b25958 +/deepseek-ai-dsh-session-title-all-prompts-llm/understand-the-implementation/scheduling: + en: ca23821924af2b14 + zh: a384479d5e69b0f8 +/deepseek-ai-dsh-session-title-all-prompts-llm/further-exploration: + en: 05c91c92fa3b1c7d + zh: 8e90078647bdb018 +/deepseek-ai-dsh-session-title-all-prompts-llm/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-title-all-prompts-llm/model-experience/all-messages-title-request: + en: 42380e2d029288cf + zh: e9c9f21ac00e3c9d +/deepseek-ai-dsh-session-title-all-prompts-llm/model-experience/all-messages-title-request/what-the-model-sees: + en: 39cb7059a3ab1fe6 + zh: a3fd93ac52f12a43 +/deepseek-ai-dsh-session-title-all-prompts-llm/model-experience/all-messages-title-request/token-effect: + en: 1a075b8073c16ce3 + zh: a51ff16156f9c137 +/deepseek-ai-dsh-session-title-all-prompts-llm/model-experience/all-messages-title-request/kv-cache-effect: + en: 6a70f43f38b8c075 + zh: 2b823aff93344134 +/deepseek-ai-dsh-session-title-all-prompts-llm/known-limitations-and-deferred-work: + en: d0486c65afaebb85 + zh: 186a77e0d68bd968 +/deepseek-ai-dsh-session-title-all-prompts-llm/known-limitations-and-deferred-work/dev-note: + en: 954d91e08a470fd6 + zh: e11425f8ec88d40a diff --git a/packages/session/session-title-first-prompt-llm/README.i18n.yaml b/packages/session/session-title-first-prompt-llm/README.i18n.yaml index 4a81634dac..25c614ffbc 100644 --- a/packages/session/session-title-first-prompt-llm/README.i18n.yaml +++ b/packages/session/session-title-first-prompt-llm/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/session/session-title-first-prompt-llm/README.md -README.md: b8823416f5d35f6ea4fd886d1ff99529974f2e2f -README.zh.md: 2d450cd07e021089c39ebff74d567655d2ce339a +/: + en: 9debfac1371e2e75 + zh: 48d13d8bde854157 +/deepseek-ai-dsh-session-title-first-prompt-llm: + en: c93e663d382f0ca7 + zh: ddbea0a6b61ddb72 +/deepseek-ai-dsh-session-title-first-prompt-llm/summary: + en: b83df8efb409c03b + zh: 9f1cba8b8a0964cb +/deepseek-ai-dsh-session-title-first-prompt-llm/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-title-first-prompt-llm/use-this-package: + en: 0b38e82526f23693 + zh: bea7720f64970d22 +/deepseek-ai-dsh-session-title-first-prompt-llm/use-this-package/when-titles-are-generated: + en: 3215179477572a94 + zh: 54bf9a139aeafa44 +/deepseek-ai-dsh-session-title-first-prompt-llm/use-this-package/configuration: + en: c466522189ef3c87 + zh: 7687088a350e781f +/deepseek-ai-dsh-session-title-first-prompt-llm/use-this-package/failures-and-recovery: + en: 9e5b1bd0b388b87d + zh: 7b1d07e48d4267ca +/deepseek-ai-dsh-session-title-first-prompt-llm/understand-the-implementation: + en: 506933ffa7745b7d + zh: a9bb6f06a32b7c18 +/deepseek-ai-dsh-session-title-first-prompt-llm/understand-the-implementation/design-concept: + en: de9d298216fda1c1 + zh: 7d14428cf3be3926 +/deepseek-ai-dsh-session-title-first-prompt-llm/understand-the-implementation/source-map: + en: 71705f6436e44daf + zh: 5796361346fd86ca +/deepseek-ai-dsh-session-title-first-prompt-llm/understand-the-implementation/scheduling: + en: a79488f550380f5e + zh: 0ca8a457084c0fca +/deepseek-ai-dsh-session-title-first-prompt-llm/further-exploration: + en: 5ba595b20a534949 + zh: 3c26ead34d3d06bd +/deepseek-ai-dsh-session-title-first-prompt-llm/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-title-first-prompt-llm/model-experience/first-message-title-request: + en: b216200be66e9ec4 + zh: 6805c5bfb9c55091 +/deepseek-ai-dsh-session-title-first-prompt-llm/model-experience/first-message-title-request/what-the-model-sees: + en: c465d920d61d8564 + zh: 4b8843f5dac13dd8 +/deepseek-ai-dsh-session-title-first-prompt-llm/model-experience/first-message-title-request/token-effect: + en: eba887955bf3f8af + zh: 61fdea0346e06428 +/deepseek-ai-dsh-session-title-first-prompt-llm/model-experience/first-message-title-request/kv-cache-effect: + en: 22c407527c295def + zh: c7e35aa298fe6b5f +/deepseek-ai-dsh-session-title-first-prompt-llm/known-limitations-and-deferred-work: + en: 7df1fa6515924136 + zh: 39535dca0c9fe9ab +/deepseek-ai-dsh-session-title-first-prompt-llm/known-limitations-and-deferred-work/dev-note: + en: 954d91e08a470fd6 + zh: d7e65137396b5d24 diff --git a/packages/session/session-title-llm/README.i18n.yaml b/packages/session/session-title-llm/README.i18n.yaml index bead49ee50..c455d250dd 100644 --- a/packages/session/session-title-llm/README.i18n.yaml +++ b/packages/session/session-title-llm/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/session/session-title-llm/README.md -README.md: 6a1cce9e2ce2d6725562af47dac4e2f6ef5aa6e3 -README.zh.md: 4b6e06377443de8fc6a9111e0c127c2d30f06e35 +/: + en: da5040a980850a60 + zh: 0a1c0f6afbfa6c9e +/deepseek-ai-dsh-session-title-llm: + en: 7ef6dbec913fd508 + zh: 87c2448be60fb88e +/deepseek-ai-dsh-session-title-llm/summary: + en: 741cd917e857bd99 + zh: 43c290b6baf222e6 +/deepseek-ai-dsh-session-title-llm/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-title-llm/use-this-package: + en: fa90841c0783ae27 + zh: 8fbd293f8050d345 +/deepseek-ai-dsh-session-title-llm/use-this-package/registering-a-provider: + en: cf61c021b1bdb52f + zh: dac17588e4143815 +/deepseek-ai-dsh-session-title-llm/use-this-package/route-and-failure-contract: + en: 400a69851b523f0b + zh: 90c147838ba38f82 +/deepseek-ai-dsh-session-title-llm/use-this-package/configuration: + en: 3c53156bd151068b + zh: 2bf03f0831025e78 +/deepseek-ai-dsh-session-title-llm/understand-the-implementation: + en: aa0fd15305df90bb + zh: d28e3a28bb324167 +/deepseek-ai-dsh-session-title-llm/understand-the-implementation/design-concept: + en: be8c34c44b1a8a90 + zh: 2a308143c209b5d2 +/deepseek-ai-dsh-session-title-llm/understand-the-implementation/source-map: + en: 0fdc928704abdd3a + zh: bd4c0a7dd47578cf +/deepseek-ai-dsh-session-title-llm/understand-the-implementation/request-flow: + en: 4a4ca58e3ae2e075 + zh: daf4a642d815833b +/deepseek-ai-dsh-session-title-llm/further-exploration: + en: 641f31c35c48916b + zh: 8e809fbdfef61b61 +/deepseek-ai-dsh-session-title-llm/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-title-llm/model-experience/auxiliary-title-request: + en: 7dcc6f74474f78e7 + zh: 64cffa0b4d94c69d +/deepseek-ai-dsh-session-title-llm/model-experience/auxiliary-title-request/what-the-model-sees: + en: d3f50a8dab65c53f + zh: 6d4f2e4183564e84 +/deepseek-ai-dsh-session-title-llm/model-experience/auxiliary-title-request/token-effect: + en: 4d59f31ebbff4d31 + zh: 6104f3b7a4c690af +/deepseek-ai-dsh-session-title-llm/model-experience/auxiliary-title-request/kv-cache-effect: + en: 5d3b5b7c8d8b4b67 + zh: 1b231d96bf6ca545 +/deepseek-ai-dsh-session-title-llm/known-limitations-and-deferred-work: + en: 8510fb2c4ed03011 + zh: 29fb15ec84dccf56 +/deepseek-ai-dsh-session-title-llm/known-limitations-and-deferred-work/dev-note: + en: 2d422956999aa8f8 + zh: 90441550709f6692 diff --git a/packages/session/session-title/README.i18n.yaml b/packages/session/session-title/README.i18n.yaml index f876fd25da..b1de0743f3 100644 --- a/packages/session/session-title/README.i18n.yaml +++ b/packages/session/session-title/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/session/session-title/README.md -README.md: 09778e4e2b1cf1e6e6e4dc20dbe9237a4a0cc51f -README.zh.md: db9efaa2ab0a226fb318b9b564d72f6f7e56be12 +/: + en: fc980ca9ef6bd49a + zh: 8c5f7b9dfe3046b5 +/deepseek-ai-dsh-session-title: + en: ea642fd4d4bed82c + zh: 90dcb6a7dac22ffe +/deepseek-ai-dsh-session-title/summary: + en: e118294657a08540 + zh: 729ff2c88ca3c971 +/deepseek-ai-dsh-session-title/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-title/use-this-package: + en: ea340b8dc55a6792 + zh: 8db3a4e92a46e8fd +/deepseek-ai-dsh-session-title/use-this-package/choosing-a-title-source: + en: ce4d31ea1dad6afc + zh: baf718edb594bfe2 +/deepseek-ai-dsh-session-title/use-this-package/minimal-configuration: + en: f72239b38a91783b + zh: 07e22375c09906a6 +/deepseek-ai-dsh-session-title/use-this-package/adding-a-provider: + en: 2e1e7b56a1f26478 + zh: 750800b2d9e73595 +/deepseek-ai-dsh-session-title/use-this-package/reading-titles: + en: 34148c23c20ee6f4 + zh: b0d10677722f3f63 +/deepseek-ai-dsh-session-title/use-this-package/failures-and-recovery: + en: 9acca330c1f36a5a + zh: 453fe66a6aee042a +/deepseek-ai-dsh-session-title/understand-the-implementation: + en: 55b154c6d77c4f5d + zh: 29c67a3a57b3c071 +/deepseek-ai-dsh-session-title/understand-the-implementation/design-concept: + en: 4fb45f133de0e8a3 + zh: 41b15f42100d816b +/deepseek-ai-dsh-session-title/understand-the-implementation/source-map: + en: 84f4a3ff08caf847 + zh: 9ed3acae2bb2a8b0 +/deepseek-ai-dsh-session-title/understand-the-implementation/lifecycle-and-concurrency: + en: 0167ad2951e5ae4d + zh: 0b1df4b7f20eb2f5 +/deepseek-ai-dsh-session-title/understand-the-implementation/normalization: + en: 0fa22531683cc824 + zh: c6379873eb809e76 +/deepseek-ai-dsh-session-title/further-exploration: + en: 8b405b3bb2abf7cd + zh: 71e8a58bfae99a36 +/deepseek-ai-dsh-session-title/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-session-title/model-experience/session-title-state: + en: 9cbc63f58901ad4a + zh: a3b3049b2392eaf0 +/deepseek-ai-dsh-session-title/model-experience/session-title-state/what-the-model-sees: + en: afa80385f0e94fc1 + zh: 47728506e55e29de +/deepseek-ai-dsh-session-title/model-experience/session-title-state/token-effect: + en: 3b9d201fd468e785 + zh: 14ab9ab70c39fa4f +/deepseek-ai-dsh-session-title/model-experience/session-title-state/kv-cache-effect: + en: 2e04436408a67949 + zh: 076e6a50c7357cd0 +/deepseek-ai-dsh-session-title/known-limitations-and-deferred-work: + en: 97affcb6a7089b59 + zh: c166733b7be38d9b +/deepseek-ai-dsh-session-title/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/session/session-turn-outline/README.i18n.yaml b/packages/session/session-turn-outline/README.i18n.yaml index d88b87b9c0..1b1eaee402 100644 --- a/packages/session/session-turn-outline/README.i18n.yaml +++ b/packages/session/session-turn-outline/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/session/session-turn-outline/README.md -README.md: 58a71c6977aaaae8663ea96651c50317a034bb8c -README.zh.md: 49c0aa3c4f7a9b4950d855359d8c789e375e0806 +/: + en: fe16836afda4a161 + zh: f8357b355323eff7 +/deepseek-ai-dsh-session-turn-outline: + en: 24d95ecd31ccb9c7 + zh: 7454a859221dee40 +/deepseek-ai-dsh-session-turn-outline/summary: + en: 6e52b4d6489aa252 + zh: d4c91b36c0878575 +/deepseek-ai-dsh-session-turn-outline/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-turn-outline/use-this-package: + en: 9d92d2e62ad0d988 + zh: 28f8135f75df3e49 +/deepseek-ai-dsh-session-turn-outline/use-this-package/composition: + en: 1ff253c3946b4ebe + zh: 103f66630a01e5f8 +/deepseek-ai-dsh-session-turn-outline/use-this-package/what-an-entry-means: + en: faf6f2af56847bd3 + zh: fdf0e21dccde33d5 +/deepseek-ai-dsh-session-turn-outline/use-this-package/failures-and-recovery: + en: cdfa6afebdb1926a + zh: d762a515be9de75f +/deepseek-ai-dsh-session-turn-outline/understand-the-implementation: + en: 80781d65311976eb + zh: 81979840fc59851f +/deepseek-ai-dsh-session-turn-outline/understand-the-implementation/design-concept: + en: a20da800a1fbe258 + zh: 7123399bb8d80806 +/deepseek-ai-dsh-session-turn-outline/understand-the-implementation/source-map: + en: dcf5614200fafbfc + zh: 2b25176a424b7b72 +/deepseek-ai-dsh-session-turn-outline/understand-the-implementation/fold-rules: + en: ac64b54bd3d619a1 + zh: 4f33bdf2693179a6 +/deepseek-ai-dsh-session-turn-outline/further-exploration: + en: 39e2876d4cea3c71 + zh: 55916dda642538dc +/deepseek-ai-dsh-session-turn-outline/model-experience: + en: 3cef0269156479b3 + zh: 6a34895207d2c583 +/deepseek-ai-dsh-session-turn-outline/model-experience/kv-cache-effect: + en: 47f982e326fe77fd + zh: c2241315dc0c89c9 +/deepseek-ai-dsh-session-turn-outline/known-limitations-and-deferred-work: + en: a304c63504adf171 + zh: 8a76e726962c6fa4 +/deepseek-ai-dsh-session-turn-outline/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/settings/README.i18n.yaml b/packages/settings/README.i18n.yaml index 3b17098c8f..0f0c230d3c 100644 --- a/packages/settings/README.i18n.yaml +++ b/packages/settings/README.i18n.yaml @@ -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 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 packages/settings/README.md -README.md: 63d9ed9e2cd533df7ee65b2df30565efbfd666ad -README.zh.md: cd4b9ed902c114113ad47bb0eca351b2400acaec +/: + en: a7df4a73b5bc97a3 + zh: d9e966126b2ae6e0 +/settings-plugin-configuration-forms: + en: 95c64f8cd2c3c6fd + zh: 980d612b82a8fad5 +/settings-plugin-configuration-forms/summary: + en: 069010e8669a54df + zh: d165c5c8b236d5ed +/settings-plugin-configuration-forms/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/settings-plugin-configuration-forms/packages: + en: c7f90f860be67ecd + zh: ddb24168e20ba599 +/settings-plugin-configuration-forms/related-documentation: + en: 398e01c5f85b9e00 + zh: cb3f5f6d8ce20dbf +/settings-plugin-configuration-forms/dev-note: + en: 5de1d6304e00c58f + zh: 3fee785f424f1018 diff --git a/packages/settings/settings/README.i18n.yaml b/packages/settings/settings/README.i18n.yaml index cf7563a580..87b96005b9 100644 --- a/packages/settings/settings/README.i18n.yaml +++ b/packages/settings/settings/README.i18n.yaml @@ -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 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 packages/settings/settings/README.md -README.md: a44dd50a4614401afa6e05bb5d55313a8b833732 -README.zh.md: 0f7df0dec04159eaca4e143e10b4a8e6f81452a0 +/: + en: 51da5e07db469e4d + zh: fbacb8b1ea8d70ca +/deepseek-ai-dsh-settings: + en: a80f54f8a1e0474f + zh: 9e54e2442f1597a4 +/deepseek-ai-dsh-settings/summary: + en: a5e84db91656bc73 + zh: 3fabc5eb76ae228f +/deepseek-ai-dsh-settings/table-of-contents: + en: 23386452a66b2fbd + zh: 70bba862b949b652 +/deepseek-ai-dsh-settings/use-this-package: + en: e0f5e49cf8137839 + zh: bdd8aff9b7773e5a +/deepseek-ai-dsh-settings/understand-the-implementation: + en: c0f2f476ce7a6e54 + zh: 16cbd0cf117a2c02 +/deepseek-ai-dsh-settings/further-exploration: + en: 468f217123040420 + zh: d7f753033d9f07b4 +/deepseek-ai-dsh-settings/model-experience: + en: 358d1a5b1d9f2fde + zh: a40c6e95f39032e8 +/deepseek-ai-dsh-settings/model-experience/kv-cache-effect: + en: f49cb624cd503dd1 + zh: 9944f21ab3458e4b +/deepseek-ai-dsh-settings/known-limitations-and-deferred-work: + en: 4ae53522f8a7d66d + zh: ee55c14ebd4575db +/deepseek-ai-dsh-settings/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/shell/README.i18n.yaml b/packages/shell/README.i18n.yaml index 032a330b43..f5cbfbbc98 100644 --- a/packages/shell/README.i18n.yaml +++ b/packages/shell/README.i18n.yaml @@ -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 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 packages/shell/README.md -README.md: 0d07e6551050ac58eaadd16233595abbf8f5fb5f -README.zh.md: 71bb622ba2d3cee44b1959f17d99ad849d742482 +/: + en: d6cefb5c7640e7e6 + zh: 55d41fa2f53300e6 +/shell-bash-capability-family: + en: 712a3d4fac6a470d + zh: bd628a49105b1532 +/shell-bash-capability-family/summary: + en: d1a8ea04bb48ab49 + zh: 14e06126bf109289 +/shell-bash-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/shell-bash-capability-family/packages: + en: e37d8906d04f2bc5 + zh: e6a672011f17fe73 +/shell-bash-capability-family/related-documentation: + en: afe5d0c108398796 + zh: 07912a7804b7d19f +/shell-bash-capability-family/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/shell/bash-local/README.i18n.yaml b/packages/shell/bash-local/README.i18n.yaml index 51d9a7fa8a..4fbf9ac6ca 100644 --- a/packages/shell/bash-local/README.i18n.yaml +++ b/packages/shell/bash-local/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/shell/bash-local/README.md -README.md: 578e5284e22d6ec6dda1590848734ac63d2399fc -README.zh.md: 4bac3b6cceced30935108ffd14665df51a0c23ce +/: + en: f70a1e0bb1e0d56d + zh: 927e75bc75573410 +/deepseek-ai-dsh-bash-local: + en: 49a2f5ded22f098e + zh: 5d75eea29ac486a0 +/deepseek-ai-dsh-bash-local/summary: + en: 518e199306e5cc7d + zh: ccfb150038dc4afa +/deepseek-ai-dsh-bash-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-bash-local/use-this-package: + en: 95ae7843275778ca + zh: 43b5069075a99625 +/deepseek-ai-dsh-bash-local/use-this-package/minimal-configuration: + en: eaf71726aaf5333d + zh: b658e8d0b77db826 +/deepseek-ai-dsh-bash-local/use-this-package/running-commands: + en: a27f24e1c9908612 + zh: 4183e0c89aebb96c +/deepseek-ai-dsh-bash-local/use-this-package/background-processes: + en: 3c580842cc8452af + zh: 5a156670a7cacc2a +/deepseek-ai-dsh-bash-local/use-this-package/adjusting-budgets-at-runtime: + en: 1098db4c932a48f8 + zh: 33f78ab65dbfeb1d +/deepseek-ai-dsh-bash-local/understand-the-implementation: + en: 05e2abe4a25886fd + zh: 3f7f1326dc3c1d3f +/deepseek-ai-dsh-bash-local/understand-the-implementation/design-concept: + en: ec84e5746de85fe0 + zh: 1c353325eeae87c6 +/deepseek-ai-dsh-bash-local/understand-the-implementation/source-map: + en: 254759ab26151a72 + zh: e94679a11b67dc10 +/deepseek-ai-dsh-bash-local/understand-the-implementation/main-flow: + en: 723bbaedc34e58f3 + zh: d0239dcfdd8a53c6 +/deepseek-ai-dsh-bash-local/understand-the-implementation/invariants-and-ownership: + en: dd0e8349896efbff + zh: 15cd675f9806468e +/deepseek-ai-dsh-bash-local/further-exploration: + en: 02adacff32fe6aaa + zh: 985d507298f0d113 +/deepseek-ai-dsh-bash-local/model-experience: + en: 6f1b2f8c867cac58 + zh: 36ce16f256972e88 +/deepseek-ai-dsh-bash-local/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 788a4799b1d65a8b +/deepseek-ai-dsh-bash-local/known-limitations-and-deferred-work: + en: f1f98b9ebab7e6d2 + zh: 803cc5e021de530f +/deepseek-ai-dsh-bash-local/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/bash-sandbox/README.i18n.yaml b/packages/shell/bash-sandbox/README.i18n.yaml index 704a1d909c..f9c08ae20c 100644 --- a/packages/shell/bash-sandbox/README.i18n.yaml +++ b/packages/shell/bash-sandbox/README.i18n.yaml @@ -1,6 +1,97 @@ -# 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 packages/shell/bash-sandbox/README.md -README.md: fea09e4ce13b0e7bd2841ff069c2aa61b30731bd -README.zh.md: 5daed6969cf1e66cff2241423d010aa0b860beb5 +/: + en: 2d1caa2e6179218a + zh: 0b51a5dbda727ffa +/deepseek-ai-dsh-bash-sandbox: + en: 63b29753d16046c9 + zh: c7be0b83f0d2911c +/deepseek-ai-dsh-bash-sandbox/summary: + en: 37a0fcab18f972c0 + zh: f7b4222e646e7050 +/deepseek-ai-dsh-bash-sandbox/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-bash-sandbox/use-this-package: + en: bd59d09bee36362c + zh: 7086c8268e7517d5 +/deepseek-ai-dsh-bash-sandbox/use-this-package/when-to-choose-it: + en: af387f23325c1435 + zh: 7a160aca5edd657e +/deepseek-ai-dsh-bash-sandbox/use-this-package/modes-and-file-effects: + en: bc096fe6f8eb54cd + zh: 1a3e3122ca40b0e5 +/deepseek-ai-dsh-bash-sandbox/use-this-package/minimal-configuration: + en: 7edc013af7a491f4 + zh: 7b64bed7e3e0d65d +/deepseek-ai-dsh-bash-sandbox/use-this-package/denials-are-result-facts: + en: a10127c3fb2869ef + zh: 17908b572ddb5507 +/deepseek-ai-dsh-bash-sandbox/use-this-package/failures-and-recovery: + en: 0d5b6818c3dad919 + zh: cd0357477c0726c3 +/deepseek-ai-dsh-bash-sandbox/understand-the-implementation: + en: 05e2abe4a25886fd + zh: 9240b331c45ac81e +/deepseek-ai-dsh-bash-sandbox/understand-the-implementation/design-concept: + en: e1b1ac62e94ce535 + zh: 5fa7a0353fbf777d +/deepseek-ai-dsh-bash-sandbox/understand-the-implementation/source-map: + en: 418d9c2a61061adb + zh: ffbc0d7723b45017 +/deepseek-ai-dsh-bash-sandbox/understand-the-implementation/main-flow: + en: 731878f592fa79c6 + zh: 3187f4c6907a13c2 +/deepseek-ai-dsh-bash-sandbox/understand-the-implementation/invariants: + en: 0b6c6d7e216e1d23 + zh: 15f94cfccf4fa242 +/deepseek-ai-dsh-bash-sandbox/further-exploration: + en: bc15c70d4fcc63c8 + zh: 9591b7fa6fdbf4fe +/deepseek-ai-dsh-bash-sandbox/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-schema-indirectly: + en: 8e3df84fdcaeee60 + zh: 25ad519340c6c232 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-schema-indirectly/what-the-model-sees: + en: a6d30d6d5f7d2a5e + zh: dfc77de2d2d66f9e +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-schema-indirectly/token-effect: + en: 2278530f1f9e93b2 + zh: 86e2a20746ce3f3c +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-schema-indirectly/kv-cache-effect: + en: d25d46a61dc2b0c1 + zh: e1deea6d70be4691 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-result-indirectly: + en: ba37fed04252f1eb + zh: 0e91d66334ec17c3 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-result-indirectly/what-the-model-sees: + en: 6b86ae2b3b41e8b2 + zh: 825a446625a1d594 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-result-indirectly/token-effect: + en: b06db71c69ceaf8c + zh: e0b8230b993c93cc +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-error-indirectly: + en: 8e6caeadd596ea8f + zh: fe525ddc52b2d711 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-error-indirectly/what-the-model-sees: + en: 74fcc73436adbb3b + zh: ae1387cf44c6ecb8 +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-error-indirectly/token-effect: + en: 8f514efe94edfa8a + zh: 8a7ae8a2bdb4c01a +/deepseek-ai-dsh-bash-sandbox/model-experience/bash-tool-error-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-bash-sandbox/known-limitations-and-deferred-work: + en: 056f7e09b6ad03f9 + zh: 2996d78fbe0c70e1 +/deepseek-ai-dsh-bash-sandbox/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/pwsh-local/README.i18n.yaml b/packages/shell/pwsh-local/README.i18n.yaml index c90a53c620..285a4e15ef 100644 --- a/packages/shell/pwsh-local/README.i18n.yaml +++ b/packages/shell/pwsh-local/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/shell/pwsh-local/README.md -README.md: f4001263ba06d02a4b4c3b801d9a518488a97327 -README.zh.md: e9e1c3246bef62f55c965d4974202646b5fc2096 +/: + en: 07482fe1f03de5e9 + zh: 8ec16b9f9ac73b38 +/deepseek-ai-dsh-pwsh-local: + en: 15364cd289d23957 + zh: d3e82667e954c58d +/deepseek-ai-dsh-pwsh-local/summary: + en: b3d58f4bee09b7ed + zh: 31f5ef9ba27a4df0 +/deepseek-ai-dsh-pwsh-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-pwsh-local/use-this-package: + en: f53013bc78e9367f + zh: cc15b499f6a95080 +/deepseek-ai-dsh-pwsh-local/use-this-package/when-to-choose-it: + en: 84f220a1eec48f24 + zh: 72cf0681212efe82 +/deepseek-ai-dsh-pwsh-local/use-this-package/minimal-configuration: + en: 47119e8b4e884a5d + zh: f9dfb155f06c4b73 +/deepseek-ai-dsh-pwsh-local/use-this-package/running-commands: + en: d0efd217ca8ce07d + zh: 76eda93aa7300f87 +/deepseek-ai-dsh-pwsh-local/use-this-package/background-processes: + en: 3c580842cc8452af + zh: 5a156670a7cacc2a +/deepseek-ai-dsh-pwsh-local/use-this-package/adjusting-budgets-at-runtime: + en: 1098db4c932a48f8 + zh: 33f78ab65dbfeb1d +/deepseek-ai-dsh-pwsh-local/understand-the-implementation: + en: 05e2abe4a25886fd + zh: 3f7f1326dc3c1d3f +/deepseek-ai-dsh-pwsh-local/understand-the-implementation/design-concept: + en: d065be99a0cea908 + zh: 50eee843e3b6860c +/deepseek-ai-dsh-pwsh-local/understand-the-implementation/source-map: + en: 299f4ffe25b4806d + zh: d0aced83a1950a91 +/deepseek-ai-dsh-pwsh-local/understand-the-implementation/main-flow: + en: 1cb78cfddb484576 + zh: 94e16b60c9cd458b +/deepseek-ai-dsh-pwsh-local/understand-the-implementation/invariants-and-ownership: + en: db6d1d14205d38ed + zh: 148b3764daee54e8 +/deepseek-ai-dsh-pwsh-local/further-exploration: + en: f88bd1a14fe62416 + zh: a7c4a8c9ce49d374 +/deepseek-ai-dsh-pwsh-local/model-experience: + en: cb8a0d1c1929e4ea + zh: 6b1d5aa2d10c0a01 +/deepseek-ai-dsh-pwsh-local/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 788a4799b1d65a8b +/deepseek-ai-dsh-pwsh-local/known-limitations-and-deferred-work: + en: dbe004f26cb332f2 + zh: 83dc82454ee6a92d +/deepseek-ai-dsh-pwsh-local/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/pwsh-sandbox/README.i18n.yaml b/packages/shell/pwsh-sandbox/README.i18n.yaml index 7e2da19ffd..af34c521b0 100644 --- a/packages/shell/pwsh-sandbox/README.i18n.yaml +++ b/packages/shell/pwsh-sandbox/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/shell/pwsh-sandbox/README.md -README.md: 8d75347efa49ff2697bab7a3fd5b6195faf6685f -README.zh.md: 295d60d9a63d4f039e49e52385561e51194bd25e +/: + en: d42333572a114759 + zh: 7de2bc8a30baf573 +/deepseek-ai-dsh-pwsh-sandbox: + en: e31fa5a5c2977440 + zh: 72eac87630e20992 +/deepseek-ai-dsh-pwsh-sandbox/summary: + en: b628a56aa2afe34b + zh: a6759e4d067f2e22 +/deepseek-ai-dsh-pwsh-sandbox/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-pwsh-sandbox/use-this-package: + en: 665eb9d5f77bcfe5 + zh: 0fc5adf8b49167e2 +/deepseek-ai-dsh-pwsh-sandbox/use-this-package/when-to-choose-it: + en: 8a43fa466bcf6fc7 + zh: 28d2381299d1e592 +/deepseek-ai-dsh-pwsh-sandbox/use-this-package/modes-and-file-effects: + en: a097100674539423 + zh: 6c25043f90650113 +/deepseek-ai-dsh-pwsh-sandbox/use-this-package/minimal-configuration: + en: b025d0473f259364 + zh: 3c6f2153a68189e1 +/deepseek-ai-dsh-pwsh-sandbox/use-this-package/denials-and-escalation: + en: b3deb62991a7388a + zh: 2b500e1912f95f28 +/deepseek-ai-dsh-pwsh-sandbox/use-this-package/failures-and-recovery: + en: 0d5b6818c3dad919 + zh: e1d21581d66efb78 +/deepseek-ai-dsh-pwsh-sandbox/understand-the-implementation: + en: 05e2abe4a25886fd + zh: 3f7f1326dc3c1d3f +/deepseek-ai-dsh-pwsh-sandbox/understand-the-implementation/design-concept: + en: 0209cfdeae41c9b5 + zh: f968694c21c96ec2 +/deepseek-ai-dsh-pwsh-sandbox/understand-the-implementation/source-map: + en: 71709a90dada216b + zh: 3679af6c61d08487 +/deepseek-ai-dsh-pwsh-sandbox/understand-the-implementation/main-flow: + en: 93f0842800cb0e52 + zh: cfde2946230560ee +/deepseek-ai-dsh-pwsh-sandbox/understand-the-implementation/invariants: + en: 56b6b8d45b5fc463 + zh: fe1a53e4ad514bc6 +/deepseek-ai-dsh-pwsh-sandbox/further-exploration: + en: ff69a14d11ec46e4 + zh: fd4994f0796fb9d2 +/deepseek-ai-dsh-pwsh-sandbox/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-pwsh-sandbox/model-experience/confinement-works-denial-surfaces-as-command-failure: + en: 2348d676f74cc6fc + zh: 845691fedce1e35c +/deepseek-ai-dsh-pwsh-sandbox/model-experience/confinement-works-denial-surfaces-as-command-failure/what-the-model-sees: + en: 0faadadd5c52f3d2 + zh: 28eec841864921d2 +/deepseek-ai-dsh-pwsh-sandbox/model-experience/confinement-works-denial-surfaces-as-command-failure/token-effect: + en: 7a9e4f861d7ede15 + zh: da79315a26df214b +/deepseek-ai-dsh-pwsh-sandbox/model-experience/confinement-works-denial-surfaces-as-command-failure/kv-cache-effect: + en: 796af37d6f6add68 + zh: 7975ff2a21c1b4f3 +/deepseek-ai-dsh-pwsh-sandbox/known-limitations-and-deferred-work: + en: 9afb663f40e5b8fd + zh: 76ceb6bfb2a5148e +/deepseek-ai-dsh-pwsh-sandbox/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/shell-env/README.i18n.yaml b/packages/shell/shell-env/README.i18n.yaml index e8589faa8a..b59fe5576f 100644 --- a/packages/shell/shell-env/README.i18n.yaml +++ b/packages/shell/shell-env/README.i18n.yaml @@ -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 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 packages/shell/shell-env/README.md -README.md: 6557049c8287348507e2f5fc8a824366949c2861 -README.zh.md: 32bd5e744af98ca84e426490765d15dd1701851c +/: + en: c54342d0151b089c + zh: 9ad6284f24c5e3f6 +/deepseek-ai-dsh-shell-env: + en: d26b77029fa722ab + zh: 8e6bed763372b561 +/deepseek-ai-dsh-shell-env/summary: + en: 021be213f32988e1 + zh: f3ce1ef82377b4f4 +/deepseek-ai-dsh-shell-env/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-shell-env/use-this-package: + en: 34d2f05183df200f + zh: 7753b97c91743901 +/deepseek-ai-dsh-shell-env/use-this-package/what-every-shell-call-receives: + en: eae86664fefc6690 + zh: 05a4e5946c8d2b87 +/deepseek-ai-dsh-shell-env/use-this-package/adding-your-own-environment-facts: + en: 21ef223626e35905 + zh: 5c468055099b0135 +/deepseek-ai-dsh-shell-env/use-this-package/choosing-the-harness-home: + en: 0041438f2b7f7e4f + zh: 93fa165b07adcdf4 +/deepseek-ai-dsh-shell-env/use-this-package/what-can-go-wrong: + en: 42c75945b581b7e6 + zh: 6b5c487cfa28b206 +/deepseek-ai-dsh-shell-env/understand-the-implementation: + en: f782557ca8da3138 + zh: e8f0082b9692cacc +/deepseek-ai-dsh-shell-env/understand-the-implementation/design-philosophy: + en: 311b66ea29b5702f + zh: 3a98c2fb1fcaa519 +/deepseek-ai-dsh-shell-env/understand-the-implementation/source-map: + en: d37531b816607220 + zh: 1f867ff7f422746b +/deepseek-ai-dsh-shell-env/understand-the-implementation/collection: + en: 0c2d7d5b2131630f + zh: b44d4f0ddf89421b +/deepseek-ai-dsh-shell-env/further-exploration: + en: 6a4175df7b7341c7 + zh: 7885831274008502 +/deepseek-ai-dsh-shell-env/model-experience: + en: 8acf3cd9aeef5f55 + zh: 69725e78f73c2f16 +/deepseek-ai-dsh-shell-env/model-experience/kv-cache-effect: + en: e95e649f0410fa75 + zh: b3d64877420b4c0d +/deepseek-ai-dsh-shell-env/known-limitations-and-deferred-work: + en: be9888161315f026 + zh: 97d1d05c1c322596 +/deepseek-ai-dsh-shell-env/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/shell/README.i18n.yaml b/packages/shell/shell/README.i18n.yaml index b0fc6901ef..31ba0b07d8 100644 --- a/packages/shell/shell/README.i18n.yaml +++ b/packages/shell/shell/README.i18n.yaml @@ -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 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 packages/shell/shell/README.md -README.md: b72440a38cefb67140ba0078169aac34f3ccdb19 -README.zh.md: 272ffc85f8c4880eb77348f2f5ce780a68529df6 +/: + en: 4a173bf52227a3b6 + zh: 76bb85595252765c +/deepseek-ai-dsh-shell: + en: 607578ed1d9dbabe + zh: e6c674aad094f056 +/deepseek-ai-dsh-shell/summary: + en: bb40932744bc4b80 + zh: 22e2af1327b2f835 +/deepseek-ai-dsh-shell/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-shell/use-this-package: + en: b81fffe9eb713a49 + zh: ac37478e7f1f7499 +/deepseek-ai-dsh-shell/use-this-package/foreground-commands: + en: cf38f6bc0e150602 + zh: 2ff6cfb0ce48a7b8 +/deepseek-ai-dsh-shell/use-this-package/background-processes: + en: 277c543917453017 + zh: d2c100e37944f151 +/deepseek-ai-dsh-shell/use-this-package/deadlines-and-bounded-waits: + en: 719b0708bf3cf1cf + zh: 044f53d543960f42 +/deepseek-ai-dsh-shell/use-this-package/requests-and-resolved-specs: + en: e104e13a7dae9491 + zh: 1b219491fabf780b +/deepseek-ai-dsh-shell/use-this-package/choosing-and-composing-an-executor: + en: ddcf8a0c7a45e8d3 + zh: e4ee99e2e27234fe +/deepseek-ai-dsh-shell/use-this-package/the-shared-exit-status-contract: + en: f4125282c1deab36 + zh: 46b8ee789ae68a9a +/deepseek-ai-dsh-shell/understand-the-implementation: + en: d2192b68c2faf92b + zh: 7678a2fd356d8587 +/deepseek-ai-dsh-shell/understand-the-implementation/design-philosophy: + en: a6467114855249e8 + zh: 65b53a2839cb411e +/deepseek-ai-dsh-shell/understand-the-implementation/source-map: + en: 80d45b2de500588a + zh: 23da8d99b05f4db6 +/deepseek-ai-dsh-shell/understand-the-implementation/settings-namespace: + en: a5b81ecee7fe9938 + zh: 25fcf060b48e14cf +/deepseek-ai-dsh-shell/understand-the-implementation/background-lifecycle-and-ownership: + en: 63853c610719e1bb + zh: 09668e6fd34c9161 +/deepseek-ai-dsh-shell/further-exploration: + en: e1653edf9807c768 + zh: bac6f0001ca214d6 +/deepseek-ai-dsh-shell/model-experience: + en: 7dec7effc0b15288 + zh: 6ac73faa9ae252ed +/deepseek-ai-dsh-shell/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 788a4799b1d65a8b +/deepseek-ai-dsh-shell/known-limitations-and-deferred-work: + en: d45d58f3ac323b73 + zh: a4a4fe86a4f9f15c +/deepseek-ai-dsh-shell/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3c8bbe93d71a3377 diff --git a/packages/shell/tool-bash-persistent/README.i18n.yaml b/packages/shell/tool-bash-persistent/README.i18n.yaml index df37df1263..947168a29f 100644 --- a/packages/shell/tool-bash-persistent/README.i18n.yaml +++ b/packages/shell/tool-bash-persistent/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/shell/tool-bash-persistent/README.md -README.md: f22004aa61b6099998d8a9e9a62cea7c6e5c3cf9 -README.zh.md: 6735ede17f63b9bfe5dc46581578435b07231806 +/: + en: 1516a333e77ca54a + zh: 53ef80da9cefd884 +/deepseek-ai-dsh-tool-bash-persistent: + en: 7182dce9573ad218 + zh: 2a103f9a62465adb +/deepseek-ai-dsh-tool-bash-persistent/summary: + en: c69d0b2f4043b9af + zh: 03a50ce77e9dd092 +/deepseek-ai-dsh-tool-bash-persistent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-bash-persistent/use-this-package: + en: ddec7cc1004498f8 + zh: cd0cba22e570d1e9 +/deepseek-ai-dsh-tool-bash-persistent/use-this-package/when-to-choose-it: + en: cabfbfebb53d909a + zh: 9e403f87f211cc4a +/deepseek-ai-dsh-tool-bash-persistent/use-this-package/minimal-configuration: + en: 83cb0aeb3b41f700 + zh: cb1316b70eb98a09 +/deepseek-ai-dsh-tool-bash-persistent/use-this-package/what-the-agent-can-rely-on: + en: b398f124ea7b77b0 + zh: 50855e601e6c1b88 +/deepseek-ai-dsh-tool-bash-persistent/use-this-package/what-can-go-wrong: + en: 2713550ebdb02f69 + zh: 52ed398dc541d1fc +/deepseek-ai-dsh-tool-bash-persistent/understand-the-implementation: + en: 8d94a7381bca3fa9 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-bash-persistent/understand-the-implementation/design-philosophy: + en: 61c39f52982612e3 + zh: 92bc7e3c8d13a211 +/deepseek-ai-dsh-tool-bash-persistent/understand-the-implementation/source-map: + en: 8dc5a2fb04ac01a2 + zh: ad7822d2f49fafce +/deepseek-ai-dsh-tool-bash-persistent/understand-the-implementation/command-flow: + en: 3b7bf7c20b266c31 + zh: 85a325ef65fa7ac7 +/deepseek-ai-dsh-tool-bash-persistent/further-exploration: + en: 3a700d3333442a0c + zh: 67fb851aaf297d27 +/deepseek-ai-dsh-tool-bash-persistent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-schema/what-the-model-sees: + en: b3bac26e0866aec6 + zh: 8ee63c4c128ea2b4 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-schema/token-effect: + en: feee7dec91ae7329 + zh: b62338fa72ad3b87 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-schema/kv-cache-effect: + en: 7d9323583a83cb95 + zh: cc5daa6bce8450f8 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-results: + en: beaabb79f229692a + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-results/what-the-model-sees: + en: 7c197e9bb86cc044 + zh: d8ffe918aab08250 +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-results/token-effect: + en: 5dea04ce6a30ad48 + zh: c2434253dc517d3d +/deepseek-ai-dsh-tool-bash-persistent/model-experience/tool-results/kv-cache-effect: + en: ba6a48888c3361e5 + zh: 3a8f648053555dc9 +/deepseek-ai-dsh-tool-bash-persistent/known-limitations-and-deferred-work: + en: dc5a908f2b2da040 + zh: 3afceaabcf324771 +/deepseek-ai-dsh-tool-bash-persistent/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/tool-bash/README.i18n.yaml b/packages/shell/tool-bash/README.i18n.yaml index e78e827df6..3cfb113c2a 100644 --- a/packages/shell/tool-bash/README.i18n.yaml +++ b/packages/shell/tool-bash/README.i18n.yaml @@ -1,6 +1,127 @@ -# 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 packages/shell/tool-bash/README.md -README.md: 3068e6d201758a2f66529155de12d1dbf912bae2 -README.zh.md: 032d59efa33b702c8d0b202ebd33e60ae63f6804 +/: + en: aa0f6a31440050d2 + zh: 388fc575115b9a4f +/deepseek-ai-dsh-tool-bash: + en: 76af715ac8c82942 + zh: d24ef2eef9e8f386 +/deepseek-ai-dsh-tool-bash/summary: + en: fea9162fe27f9091 + zh: 267c460b81aeddf6 +/deepseek-ai-dsh-tool-bash/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-bash/use-this-package: + en: e20abe0ff6964f16 + zh: 143d7c17499b2247 +/deepseek-ai-dsh-tool-bash/use-this-package/minimal-configuration: + en: 9a16909fc013c6e5 + zh: ba740dbce3cd2e93 +/deepseek-ai-dsh-tool-bash/use-this-package/running-a-command: + en: 92fd68a57eecc265 + zh: 715f22986827b692 +/deepseek-ai-dsh-tool-bash/use-this-package/running-long-commands-in-the-background: + en: a5eecea7bb7a75e8 + zh: fae7f08e0e11594e +/deepseek-ai-dsh-tool-bash/use-this-package/foreground-commands-as-jobs: + en: fbc10d2d8b6cd3bb + zh: cd454ecc521d1051 +/deepseek-ai-dsh-tool-bash/use-this-package/sandboxed-execution-and-escalation: + en: 472beeb895ca46cf + zh: ba110c9f62f7d5b8 +/deepseek-ai-dsh-tool-bash/use-this-package/what-can-go-wrong: + en: cc9a6cc87468d73a + zh: aaa94162ef9de2f0 +/deepseek-ai-dsh-tool-bash/understand-the-implementation: + en: 8d94a7381bca3fa9 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-bash/understand-the-implementation/design-philosophy: + en: 9332353fda6ac7be + zh: 45c17e5e83478032 +/deepseek-ai-dsh-tool-bash/understand-the-implementation/source-map: + en: 5fe11138a292e82d + zh: e3e94af07b90b5ba +/deepseek-ai-dsh-tool-bash/understand-the-implementation/request-resolution: + en: b03c1d84aa4b5cd4 + zh: 111eba387b7082ae +/deepseek-ai-dsh-tool-bash/understand-the-implementation/rendering-story: + en: 167c045d6a6278cc + zh: 3f17ee8d31e0bbad +/deepseek-ai-dsh-tool-bash/further-exploration: + en: 4ef40f3c178804f1 + zh: a7c2bfb9329568b8 +/deepseek-ai-dsh-tool-bash/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-bash/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-bash/model-experience/system-prompt/what-the-model-sees: + en: f8173d0103e0c6b6 + zh: ed8b92539ee74156 +/deepseek-ai-dsh-tool-bash/model-experience/system-prompt/what-the-model-sees/bash-guidance: + en: 2d65d6ca9b82df1d + zh: 016a14eee33eba62 +/deepseek-ai-dsh-tool-bash/model-experience/system-prompt/token-effect: + en: a38d59e3e6d8a1c9 + zh: 96d60abecd38307b +/deepseek-ai-dsh-tool-bash/model-experience/system-prompt/kv-cache-effect: + en: 06f29b209347522f + zh: 4dd39a5a3b738c59 +/deepseek-ai-dsh-tool-bash/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-bash/model-experience/tool-schemas/what-the-model-sees: + en: 2580605a7e7b431a + zh: 0cb6dfde14f3e215 +/deepseek-ai-dsh-tool-bash/model-experience/tool-schemas/token-effect: + en: cdbd4262314e6856 + zh: e8c12c0cf5492386 +/deepseek-ai-dsh-tool-bash/model-experience/tool-schemas/kv-cache-effect: + en: 8b821a8b34948af9 + zh: 858244c080bfc5cb +/deepseek-ai-dsh-tool-bash/model-experience/foreground-result: + en: d83f1f25a3719c54 + zh: 445ca808e28dc936 +/deepseek-ai-dsh-tool-bash/model-experience/foreground-result/what-the-model-sees: + en: 1cf435133078b803 + zh: 3e7eb766a62b7e77 +/deepseek-ai-dsh-tool-bash/model-experience/foreground-result/token-effect: + en: b2018adbda15b8a7 + zh: 79521073a45c7f80 +/deepseek-ai-dsh-tool-bash/model-experience/foreground-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-bash/model-experience/background-job-context-and-results: + en: 38ce70c1818a5694 + zh: ed3ad10f12ed1b8e +/deepseek-ai-dsh-tool-bash/model-experience/background-job-context-and-results/what-the-model-sees: + en: b2586ae30256dda7 + zh: 03000224da9a68d1 +/deepseek-ai-dsh-tool-bash/model-experience/background-job-context-and-results/token-effect: + en: 3a0d2d43640158d6 + zh: 45ae711aedaa1d41 +/deepseek-ai-dsh-tool-bash/model-experience/background-job-context-and-results/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-bash/model-experience/tool-errors: + en: 2d4f2c8605eccab3 + zh: 67f1f0218f73c6bf +/deepseek-ai-dsh-tool-bash/model-experience/tool-errors/what-the-model-sees: + en: d6d7068e23fc1b93 + zh: 515e8aa586415179 +/deepseek-ai-dsh-tool-bash/model-experience/tool-errors/token-effect: + en: a3a78ef476ec5e56 + zh: dd2c8ad0f69e8ff1 +/deepseek-ai-dsh-tool-bash/model-experience/tool-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-bash/known-limitations-and-deferred-work: + en: ccf18075dcff3d1f + zh: 3f4cf9e14465f3d8 +/deepseek-ai-dsh-tool-bash/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/tool-pwsh-persistent/README.i18n.yaml b/packages/shell/tool-pwsh-persistent/README.i18n.yaml index d0e2b2e198..bc6ff68375 100644 --- a/packages/shell/tool-pwsh-persistent/README.i18n.yaml +++ b/packages/shell/tool-pwsh-persistent/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/shell/tool-pwsh-persistent/README.md -README.md: cd78f224f9f85899cca1f578fd0316c6f4caab2f -README.zh.md: 53b0b4cdd69ac94556f16621ccd3d9ca205cc6f4 +/: + en: 07c1a52a0f913391 + zh: a0c8579b535a1782 +/deepseek-ai-dsh-tool-pwsh-persistent: + en: dc39535d57c8fdfc + zh: 953529db098cbda5 +/deepseek-ai-dsh-tool-pwsh-persistent/summary: + en: a0afc99c0526930b + zh: abce5685799601d2 +/deepseek-ai-dsh-tool-pwsh-persistent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-pwsh-persistent/use-this-package: + en: 9739e1cfe935d4a5 + zh: a2380d889e67b184 +/deepseek-ai-dsh-tool-pwsh-persistent/use-this-package/when-to-choose-it: + en: bf8a28b21acb1dbd + zh: 452afa796b0ae38e +/deepseek-ai-dsh-tool-pwsh-persistent/use-this-package/minimal-configuration: + en: 6faae7346983f822 + zh: c9b267634d4adffa +/deepseek-ai-dsh-tool-pwsh-persistent/use-this-package/what-the-agent-can-rely-on: + en: 9f4c22b06f940caf + zh: 61f755cec7ff5b76 +/deepseek-ai-dsh-tool-pwsh-persistent/use-this-package/what-can-go-wrong: + en: 70bf2e1e8d8ccbf6 + zh: 6c78d8c85113adf7 +/deepseek-ai-dsh-tool-pwsh-persistent/understand-the-implementation: + en: 8d94a7381bca3fa9 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-pwsh-persistent/understand-the-implementation/design-philosophy: + en: b8544c7025ef7f9e + zh: 573b0ec492dde975 +/deepseek-ai-dsh-tool-pwsh-persistent/understand-the-implementation/source-map: + en: bb2d17f1385fb11d + zh: 8e103837238ccda2 +/deepseek-ai-dsh-tool-pwsh-persistent/understand-the-implementation/command-flow: + en: 52f69b3256d2d2c2 + zh: 34ce45e101760793 +/deepseek-ai-dsh-tool-pwsh-persistent/further-exploration: + en: e836ecbf7370bc76 + zh: 84fed68318df81ff +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-schema/what-the-model-sees: + en: 9948cd040d944ea8 + zh: 07504b24c196dfd0 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-schema/token-effect: + en: 120147c962cbb894 + zh: 8952abc085cf3812 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-schema/kv-cache-effect: + en: 7d9323583a83cb95 + zh: cc5daa6bce8450f8 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-results: + en: beaabb79f229692a + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-results/what-the-model-sees: + en: bc99957e721951de + zh: e384874a0f2f63e8 +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-results/token-effect: + en: 5dea04ce6a30ad48 + zh: c2434253dc517d3d +/deepseek-ai-dsh-tool-pwsh-persistent/model-experience/tool-results/kv-cache-effect: + en: ba6a48888c3361e5 + zh: 3a8f648053555dc9 +/deepseek-ai-dsh-tool-pwsh-persistent/known-limitations-and-deferred-work: + en: e2f1a18c599a82ba + zh: 1f00c387a4bb85a8 +/deepseek-ai-dsh-tool-pwsh-persistent/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/shell/tool-pwsh/README.i18n.yaml b/packages/shell/tool-pwsh/README.i18n.yaml index 8c956db6d2..6018b22ae1 100644 --- a/packages/shell/tool-pwsh/README.i18n.yaml +++ b/packages/shell/tool-pwsh/README.i18n.yaml @@ -1,6 +1,124 @@ -# 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 packages/shell/tool-pwsh/README.md -README.md: 26bf4e30eb03a6e1d36afa2a7c1ccd60a1673ac2 -README.zh.md: fbf9fc61ba09ba2bc88daebffe46c52a64877208 +/: + en: 83e748b077469aac + zh: f858d23ea8c1c6ba +/deepseek-ai-dsh-tool-pwsh: + en: 7e214a666e7b1ef8 + zh: d9166b57a6f54afd +/deepseek-ai-dsh-tool-pwsh/summary: + en: c0470c24b1056b6c + zh: 8d9fcd643367e1c9 +/deepseek-ai-dsh-tool-pwsh/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-pwsh/use-this-package: + en: a49b7ebce02d3c94 + zh: 99c6cfbb42dbb6aa +/deepseek-ai-dsh-tool-pwsh/use-this-package/when-to-choose-it: + en: d274c33ae8a646f8 + zh: 99e3e64e61735e50 +/deepseek-ai-dsh-tool-pwsh/use-this-package/minimal-configuration: + en: addf35c4e607d33c + zh: 081f511d6b5a79d6 +/deepseek-ai-dsh-tool-pwsh/use-this-package/running-a-command: + en: b36e58810dc2b808 + zh: 8660bec08cda4592 +/deepseek-ai-dsh-tool-pwsh/use-this-package/foreground-commands-as-jobs: + en: d2b292d651535d34 + zh: 1c0ebf140458759c +/deepseek-ai-dsh-tool-pwsh/use-this-package/windows-specific-sandbox-behavior: + en: a2d3592afd0c5678 + zh: dc9ef914149c3604 +/deepseek-ai-dsh-tool-pwsh/use-this-package/what-can-go-wrong: + en: c1a9cc1201ed3a89 + zh: a43a659d350e9d4a +/deepseek-ai-dsh-tool-pwsh/understand-the-implementation: + en: 8d94a7381bca3fa9 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-pwsh/understand-the-implementation/design-philosophy: + en: 73b8e46017f19e22 + zh: 70f9f82b010b3dd0 +/deepseek-ai-dsh-tool-pwsh/understand-the-implementation/source-map: + en: 09557aa79cbe3a7d + zh: e5f36b411d01f844 +/deepseek-ai-dsh-tool-pwsh/understand-the-implementation/rendering-and-exit-markers: + en: facd01af9a403fec + zh: 7a943dac19a01c39 +/deepseek-ai-dsh-tool-pwsh/further-exploration: + en: 06ee35d909325d90 + zh: d01bbaf3fdbc444e +/deepseek-ai-dsh-tool-pwsh/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-pwsh/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-pwsh/model-experience/system-prompt/what-the-model-sees: + en: ed8a75117d71cc5d + zh: 7b9119a5246d096e +/deepseek-ai-dsh-tool-pwsh/model-experience/system-prompt/what-the-model-sees/pwsh-guidance: + en: de907562b460fc1b + zh: 2a398555cc929dd3 +/deepseek-ai-dsh-tool-pwsh/model-experience/system-prompt/token-effect: + en: 4fea242a5deec6d2 + zh: 8dcbe863eb960a4d +/deepseek-ai-dsh-tool-pwsh/model-experience/system-prompt/kv-cache-effect: + en: 3959f5f66ff2f4be + zh: 66636c0d90becdb1 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-schemas/what-the-model-sees: + en: 74ab02476c1e08e3 + zh: 3327fa00a5e38833 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-schemas/token-effect: + en: 97cce067584eadff + zh: 54b1f5cd5899e7f3 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-schemas/kv-cache-effect: + en: a6768b4fdc27de21 + zh: 6d1d9b8357441af8 +/deepseek-ai-dsh-tool-pwsh/model-experience/foreground-result: + en: d83f1f25a3719c54 + zh: 445ca808e28dc936 +/deepseek-ai-dsh-tool-pwsh/model-experience/foreground-result/what-the-model-sees: + en: f3691c5a09006efe + zh: 4e9fb6880fb3b0df +/deepseek-ai-dsh-tool-pwsh/model-experience/foreground-result/token-effect: + en: b2018adbda15b8a7 + zh: efa06f083800a36b +/deepseek-ai-dsh-tool-pwsh/model-experience/foreground-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-pwsh/model-experience/background-result: + en: 3f23f9211197b0b9 + zh: 8cff3c78249b66ff +/deepseek-ai-dsh-tool-pwsh/model-experience/background-result/what-the-model-sees: + en: a471e423bb4fd271 + zh: 8949b37acf642e0c +/deepseek-ai-dsh-tool-pwsh/model-experience/background-result/token-effect: + en: 1480a7a9ec4e3a96 + zh: c7ec0cee960c8c99 +/deepseek-ai-dsh-tool-pwsh/model-experience/background-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-errors: + en: 2d4f2c8605eccab3 + zh: 67f1f0218f73c6bf +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-errors/what-the-model-sees: + en: f0802a10dbe0f7d2 + zh: 80f8b312dcfc0065 +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-errors/token-effect: + en: 243bad012dd99c7f + zh: 5ee74905020bd49a +/deepseek-ai-dsh-tool-pwsh/model-experience/tool-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 31911b4f3506d6c8 +/deepseek-ai-dsh-tool-pwsh/known-limitations-and-deferred-work: + en: 7d165285266e6639 + zh: 541e6daf5169e24c +/deepseek-ai-dsh-tool-pwsh/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/skill/README.i18n.yaml b/packages/skill/README.i18n.yaml index bcc2766dbf..ceaab73ade 100644 --- a/packages/skill/README.i18n.yaml +++ b/packages/skill/README.i18n.yaml @@ -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 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 packages/skill/README.md -README.md: 75261bdca06b658f04fac17a3eab4306dbe5cecd -README.zh.md: 7d1c38a4fb456f26bf038c8ddfe6f8182d0058f8 +/: + en: b65db52ddcb307fe + zh: d599a27c5f80409f +/skill-skill-capability-family: + en: 0b439cfc74ac0737 + zh: fd4f28f03ac7c06c +/skill-skill-capability-family/summary: + en: 3119b70ce39aa67a + zh: ca05b86efbf84141 +/skill-skill-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/skill-skill-capability-family/packages: + en: c539cb44637a4415 + zh: e327e6dc6c84bf60 +/skill-skill-capability-family/related-documentation: + en: 98bb14ef9f1ec72d + zh: f20309f41603392a +/skill-skill-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/skill/skill-badge/README.i18n.yaml b/packages/skill/skill-badge/README.i18n.yaml index 95e4c897ad..fcaa721314 100644 --- a/packages/skill/skill-badge/README.i18n.yaml +++ b/packages/skill/skill-badge/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/skill/skill-badge/README.md -README.md: 973c4a003c8ac0f2e159bd886b01bc93735474e5 -README.zh.md: 1c2dbc056a545bba17748f615cf55e0549ec67cf +/: + en: c32f79a869ebd48a + zh: 44e64fb59fa75e57 +/deepseek-ai-dsh-skill-badge: + en: 173ba0ed0aa79510 + zh: 8b0cb7a81db06283 +/deepseek-ai-dsh-skill-badge/summary: + en: ccb1ebcc64163d39 + zh: 3c89c981873e3b5e +/deepseek-ai-dsh-skill-badge/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-skill-badge/use-this-package: + en: a559a5ed8a76e342 + zh: 6558f9af8d6c9625 +/deepseek-ai-dsh-skill-badge/use-this-package/when-to-choose-it: + en: a3276561ace9e681 + zh: d2541ab4846fefa2 +/deepseek-ai-dsh-skill-badge/use-this-package/enable-the-plugin: + en: fbee982ca0bbcf25 + zh: b3e802857d784384 +/deepseek-ai-dsh-skill-badge/use-this-package/what-the-badge-skill-provides: + en: 7144db5613266a9b + zh: d1b7edf6c1253e9a +/deepseek-ai-dsh-skill-badge/use-this-package/observable-success-and-failures: + en: 1b3c8501e0899f1e + zh: 909684f272051d5f +/deepseek-ai-dsh-skill-badge/understand-the-implementation: + en: 63465b0133f30e85 + zh: 84bebb7c1fe0ceba +/deepseek-ai-dsh-skill-badge/understand-the-implementation/design-concept: + en: 52ff92fad6d26ee9 + zh: 071c7859c158513d +/deepseek-ai-dsh-skill-badge/understand-the-implementation/source-map: + en: 028c0f62dca4cf28 + zh: 15deebc72d86e753 +/deepseek-ai-dsh-skill-badge/further-exploration: + en: 1b5434b8bcbd5b0b + zh: d170cddf3837e655 +/deepseek-ai-dsh-skill-badge/model-experience: + en: b9912bc3f1ba0680 + zh: e288cc67b6d079f6 +/deepseek-ai-dsh-skill-badge/model-experience/kv-cache-effect: + en: 6a8366520852a607 + zh: 453ec29827b82bbc +/deepseek-ai-dsh-skill-badge/known-limitations-and-deferred-work: + en: c7e405ebbc1d4602 + zh: 05a57fb4359da265 +/deepseek-ai-dsh-skill-badge/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/skill/skill-filesystem/README.i18n.yaml b/packages/skill/skill-filesystem/README.i18n.yaml index 6a1582ee7b..07add8fa79 100644 --- a/packages/skill/skill-filesystem/README.i18n.yaml +++ b/packages/skill/skill-filesystem/README.i18n.yaml @@ -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 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 packages/skill/skill-filesystem/README.md -README.md: 55ec66938f53fc282a51f9bf140ed2c999a937b7 -README.zh.md: f5ffb1f60b3fd908077038ae9479661266cdd160 +/: + en: ef9fab89ad1a57aa + zh: 6d434e8a3dae16ca +/deepseek-ai-dsh-skill-filesystem: + en: e0af59069c89278b + zh: 913d0088b2a7296d +/deepseek-ai-dsh-skill-filesystem/summary: + en: ef659bb1fd748f41 + zh: 9d40999be52526f5 +/deepseek-ai-dsh-skill-filesystem/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-skill-filesystem/use-this-package: + en: 2fcfbaea3c62a766 + zh: 27c917ba822329e5 +/deepseek-ai-dsh-skill-filesystem/use-this-package/when-to-choose-it: + en: 012a123601c7d8f2 + zh: 0e13f5e0d2e4ea7a +/deepseek-ai-dsh-skill-filesystem/use-this-package/skill-format: + en: 78ac4e731c6a24c1 + zh: e8c33db4aa0cc527 +/deepseek-ai-dsh-skill-filesystem/use-this-package/roots-and-priority: + en: 265594f30ba5d848 + zh: 5de6a94864cab8d6 +/deepseek-ai-dsh-skill-filesystem/use-this-package/mount-and-configure: + en: 5e7a4ff37f33f8a5 + zh: 2f6dd45e696cb92b +/deepseek-ai-dsh-skill-filesystem/use-this-package/change-detection: + en: 77acbd43e89b6043 + zh: 8169bbbc55f3f114 +/deepseek-ai-dsh-skill-filesystem/use-this-package/observable-success-and-failures: + en: 272693c35012ffb5 + zh: bbbe788b11ef567f +/deepseek-ai-dsh-skill-filesystem/understand-the-implementation: + en: a95eb63f5a570c79 + zh: cd964a36cf8a3715 +/deepseek-ai-dsh-skill-filesystem/understand-the-implementation/design-concept: + en: 8529fb4c1989d5fc + zh: 115372aaa959dc6c +/deepseek-ai-dsh-skill-filesystem/understand-the-implementation/source-map: + en: 1b1bc2d6b523f308 + zh: f7d0c0e0ab1adcf0 +/deepseek-ai-dsh-skill-filesystem/understand-the-implementation/discovery-flow: + en: 7e26750408a63587 + zh: 9eed631a7bdf00ae +/deepseek-ai-dsh-skill-filesystem/understand-the-implementation/watching-and-invalidation: + en: e1f03485692f61a0 + zh: 7c3ce24eacc3a047 +/deepseek-ai-dsh-skill-filesystem/further-exploration: + en: 4d1bb82d69fadd8a + zh: 91f6f8fb6533c976 +/deepseek-ai-dsh-skill-filesystem/model-experience: + en: 2276cca067cd120a + zh: 9986d49d39228243 +/deepseek-ai-dsh-skill-filesystem/model-experience/kv-cache-effect: + en: 14ddbda337682082 + zh: 2e4dc3c26b45f62c +/deepseek-ai-dsh-skill-filesystem/known-limitations-and-deferred-work: + en: a7f37a7b9e54945d + zh: b9d3b15027757301 +/deepseek-ai-dsh-skill-filesystem/known-limitations-and-deferred-work/dev-note: + en: 53584bc8292df1f9 + zh: 921253cd64aa7511 diff --git a/packages/skill/skill-office/README.i18n.yaml b/packages/skill/skill-office/README.i18n.yaml index 9eb581fe03..7c3388e39e 100644 --- a/packages/skill/skill-office/README.i18n.yaml +++ b/packages/skill/skill-office/README.i18n.yaml @@ -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 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 packages/skill/skill-office/README.md -README.md: 2e5bd0b007422a1923a5cff971c1e635b056ceea -README.zh.md: c2d6e22cdeafc7fb98721ffabcda45f2f9432f4a +/: + en: cc4e875ac37d9354 + zh: e121819cde2ce76c +/deepseek-ai-dsh-skill-office: + en: f855ac5e12b4e604 + zh: b2e875d31d56cb2e +/deepseek-ai-dsh-skill-office/summary: + en: 4fe3cb4544ce7d9d + zh: 2749b1d0ffa468a1 +/deepseek-ai-dsh-skill-office/table-of-contents: + en: d152484eb41ac6b4 + zh: 43ad67236ccda19a +/deepseek-ai-dsh-skill-office/use-this-package: + en: 6987594a0cf6e53d + zh: ecf4c4f52e7a50eb +/deepseek-ai-dsh-skill-office/use-this-package/minimal-configuration: + en: 088f223318dff9d7 + zh: ce944bf61fb1f821 +/deepseek-ai-dsh-skill-office/use-this-package/structural-checks: + en: 1bb872d63bdd78b7 + zh: 355dee19bdfb3798 +/deepseek-ai-dsh-skill-office/understand-the-implementation: + en: 3febb0cf7bad13a6 + zh: c3ab05db2b2f8828 +/deepseek-ai-dsh-skill-office/further-exploration: + en: b08fc992559d8fda + zh: ad74e037ecd81c0b +/deepseek-ai-dsh-skill-office/model-experience: + en: f9fe51841bd9de8d + zh: 773af8cc0e0335e4 +/deepseek-ai-dsh-skill-office/model-experience/kv-cache-effect: + en: c77beb1c0d28f221 + zh: 99643101d2b915b9 +/deepseek-ai-dsh-skill-office/known-limitations-and-deferred-work: + en: 22d0a8196c2c48c3 + zh: ef2e38a0a91476a8 +/deepseek-ai-dsh-skill-office/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/skill/skill/README.i18n.yaml b/packages/skill/skill/README.i18n.yaml index baeb1f8733..20a537f1bf 100644 --- a/packages/skill/skill/README.i18n.yaml +++ b/packages/skill/skill/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/skill/skill/README.md -README.md: 00857c826d5f4a1893766d0305d475866250144e -README.zh.md: b2f150cda8c8eba94c5149a12c224582e24bc4e9 +/: + en: ab82ac4bcc012854 + zh: 3e2a2326e66f4bc3 +/deepseek-ai-dsh-skill: + en: 083f1e1c7ffedaad + zh: e52812b66ea22539 +/deepseek-ai-dsh-skill/summary: + en: dac8069f518e183c + zh: 2e4f2983030f9270 +/deepseek-ai-dsh-skill/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-skill/use-this-package: + en: cb13ae81a3e0ae68 + zh: e709d66f4b6b4dd5 +/deepseek-ai-dsh-skill/use-this-package/when-to-choose-it: + en: ce05cda6706f18b7 + zh: 3262ebdaf645cb9a +/deepseek-ai-dsh-skill/use-this-package/mount-and-configure: + en: b8f130e081d14307 + zh: d227ad3298b20238 +/deepseek-ai-dsh-skill/use-this-package/what-the-registry-gives-you: + en: 0cb7936c76a84e45 + zh: a1fb8572481af54c +/deepseek-ai-dsh-skill/use-this-package/observable-success-and-failures: + en: b7331b6a9c0d5bb2 + zh: 3ea0785c3a8c7330 +/deepseek-ai-dsh-skill/understand-the-implementation: + en: 89be1dad151abb04 + zh: 9a1915c4d55bb9d2 +/deepseek-ai-dsh-skill/understand-the-implementation/design-concept: + en: c0fb1850f00f24b1 + zh: 226883ab5635435d +/deepseek-ai-dsh-skill/understand-the-implementation/source-map: + en: 6cfbcb24c960a60c + zh: 5db5bd40e76b492a +/deepseek-ai-dsh-skill/understand-the-implementation/catalog-collection: + en: 58a9b57dc504b69f + zh: 8fe8011247bc3f2b +/deepseek-ai-dsh-skill/understand-the-implementation/loading-and-staleness: + en: e855d39692737103 + zh: 396aa887a78989ec +/deepseek-ai-dsh-skill/understand-the-implementation/invalidation: + en: d73258316127f5b5 + zh: ddc6690f88922782 +/deepseek-ai-dsh-skill/further-exploration: + en: 3380abc631c2bc2f + zh: 00eec8eb8fb425d1 +/deepseek-ai-dsh-skill/model-experience: + en: 84f7d6e986f88425 + zh: 0fdc2326d8efb13e +/deepseek-ai-dsh-skill/model-experience/kv-cache-effect: + en: 628a45ff9f6b0e74 + zh: fda70b0eed2df1d7 +/deepseek-ai-dsh-skill/known-limitations-and-deferred-work: + en: c5456e001203fd7a + zh: 3cc6fa50700eec13 +/deepseek-ai-dsh-skill/known-limitations-and-deferred-work/dev-note: + en: 259ce6914314397d + zh: d500b1f988a83999 diff --git a/packages/skill/tool-skill/README.i18n.yaml b/packages/skill/tool-skill/README.i18n.yaml index a97524bc74..38fa753ad6 100644 --- a/packages/skill/tool-skill/README.i18n.yaml +++ b/packages/skill/tool-skill/README.i18n.yaml @@ -1,6 +1,136 @@ -# 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 packages/skill/tool-skill/README.md -README.md: eeee637c25bc38138deaf907e6bf73202f408b96 -README.zh.md: f2c1adf49a838e84fd488f0cb803d3aa30f8b8ca +/: + en: e1bb629bc25d7d51 + zh: 0018e221e28ddcff +/deepseek-ai-dsh-tool-skill: + en: 223816f8da89cf76 + zh: 7c54534f299141eb +/deepseek-ai-dsh-tool-skill/summary: + en: 399399741476179c + zh: 074ec6657481d320 +/deepseek-ai-dsh-tool-skill/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-skill/use-this-package: + en: 5c21d1ba71c1c3e1 + zh: 3e2505d4625b57b4 +/deepseek-ai-dsh-tool-skill/use-this-package/when-to-choose-it: + en: b7d33bd969826ee3 + zh: 4e155a0f14b41541 +/deepseek-ai-dsh-tool-skill/use-this-package/mount-and-configure: + en: 440b17442e431e27 + zh: f8e6d8ef9a954e86 +/deepseek-ai-dsh-tool-skill/use-this-package/what-the-model-gets: + en: cf02796bd3f8877e + zh: 81b93b1eb7f74690 +/deepseek-ai-dsh-tool-skill/use-this-package/observable-success-and-failures: + en: 813f1a7ab04d283e + zh: 4adfcffcbb131d54 +/deepseek-ai-dsh-tool-skill/understand-the-implementation: + en: 1aa627255c35178f + zh: 44d8633ea56765d3 +/deepseek-ai-dsh-tool-skill/understand-the-implementation/design-concept: + en: ee4380c98437d699 + zh: 25f35ec8c8c47c00 +/deepseek-ai-dsh-tool-skill/understand-the-implementation/source-map: + en: 9a8fa8b8305ef86a + zh: f80fbdfb2a8f1818 +/deepseek-ai-dsh-tool-skill/understand-the-implementation/catalog-lifecycle: + en: 847745cf78860904 + zh: 55137ebef224ad48 +/deepseek-ai-dsh-tool-skill/understand-the-implementation/invocation-boundary: + en: bb8543ea29cbc451 + zh: b1124fa489bf9ea4 +/deepseek-ai-dsh-tool-skill/further-exploration: + en: c4797732cde7d1f5 + zh: daabfd858cceb271 +/deepseek-ai-dsh-tool-skill/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-skill/model-experience/session-catalog: + en: ed929c61dd301a56 + zh: 376c8d69b6fa7df6 +/deepseek-ai-dsh-tool-skill/model-experience/session-catalog/what-the-model-sees: + en: 9ad58d88958630db + zh: 6ad1c30342e77fa4 +/deepseek-ai-dsh-tool-skill/model-experience/session-catalog/what-the-model-sees/skill-catalog-template: + en: 8ca9241e26124ce3 + zh: d083f87eaae40e15 +/deepseek-ai-dsh-tool-skill/model-experience/session-catalog/token-effect: + en: c05d3d46e5139c4d + zh: 8acfa475cddaeb18 +/deepseek-ai-dsh-tool-skill/model-experience/session-catalog/kv-cache-effect: + en: e6e6758c96527e19 + zh: 8f95e36da658c95a +/deepseek-ai-dsh-tool-skill/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-skill/model-experience/tool-schema/what-the-model-sees: + en: ddb8043726aba539 + zh: 6c76beea062921ea +/deepseek-ai-dsh-tool-skill/model-experience/tool-schema/token-effect: + en: 4a8881f7a361cb7f + zh: cba76f0578a36953 +/deepseek-ai-dsh-tool-skill/model-experience/tool-schema/kv-cache-effect: + en: 77f9b9513ed7692d + zh: 249f6b975a2db718 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result: + en: f8ffc2b983f05ffc + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees: + en: a1bc95abf3a7493c + zh: e3d200040493c0a7 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees/skill-result-template: + en: 66220f8d7628e5cc + zh: d8469e173485a5ca +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees/provider-managed-resource-guidance: + en: 80107e79cb15b0d0 + zh: c53f14bb87aa8395 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees/directory-resource-guidance: + en: 9a060c44c0d00e06 + zh: 13ccf1d8b8e3d865 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees/url-resource-guidance: + en: 6f4bc625155f73e3 + zh: 4bc8641df028caed +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/what-the-model-sees/opaque-resource-guidance: + en: 958b9c46d9785397 + zh: 34f053e4ab8296c2 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/token-effect: + en: 8604cca6caa413a0 + zh: 1b0412b8008e76c8 +/deepseek-ai-dsh-tool-skill/model-experience/tool-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: bee82b41983a66a0 +/deepseek-ai-dsh-tool-skill/model-experience/tool-errors: + en: 2d4f2c8605eccab3 + zh: 67f1f0218f73c6bf +/deepseek-ai-dsh-tool-skill/model-experience/tool-errors/what-the-model-sees: + en: 3e70742d93164968 + zh: 63fd2159c9cc5c8c +/deepseek-ai-dsh-tool-skill/model-experience/tool-errors/token-effect: + en: 681cadd5be7b8ac1 + zh: 5e169acfd30b2931 +/deepseek-ai-dsh-tool-skill/model-experience/tool-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: bee82b41983a66a0 +/deepseek-ai-dsh-tool-skill/model-experience/user-explicit-invocation-injection: + en: 657124bac34aba61 + zh: 00aae3514ab12676 +/deepseek-ai-dsh-tool-skill/model-experience/user-explicit-invocation-injection/what-the-model-sees: + en: f9c7b7c6cb042d2f + zh: ba3372515505f413 +/deepseek-ai-dsh-tool-skill/model-experience/user-explicit-invocation-injection/token-effect: + en: d1068ea431fb768f + zh: acacd161731c27c6 +/deepseek-ai-dsh-tool-skill/model-experience/user-explicit-invocation-injection/kv-cache-effect: + en: 127c0139472bfaab + zh: 805dc2f730c47f40 +/deepseek-ai-dsh-tool-skill/known-limitations-and-deferred-work: + en: 6017a1dc04618288 + zh: d613164f0e9258f9 +/deepseek-ai-dsh-tool-skill/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/skill/tool-workspace-dependencies/README.i18n.yaml b/packages/skill/tool-workspace-dependencies/README.i18n.yaml index e4f60d45f5..2855c549de 100644 --- a/packages/skill/tool-workspace-dependencies/README.i18n.yaml +++ b/packages/skill/tool-workspace-dependencies/README.i18n.yaml @@ -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 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 packages/skill/tool-workspace-dependencies/README.md -README.md: 1f7147a1febeb0210befe64dc462e2527013dab3 -README.zh.md: f2a1934256776ef97d414be4709a6b918989ae35 +/: + en: e562521af5095c9b + zh: f879f7db6ee3c2b9 +/deepseek-ai-dsh-tool-workspace-dependencies: + en: 36dcf46cd91bba1f + zh: 576d796ea71f640c +/deepseek-ai-dsh-tool-workspace-dependencies/summary: + en: 564382de2022c781 + zh: 22657ad5d2c8efd2 +/deepseek-ai-dsh-tool-workspace-dependencies/table-of-contents: + en: d152484eb41ac6b4 + zh: 43ad67236ccda19a +/deepseek-ai-dsh-tool-workspace-dependencies/use-this-package: + en: 5e244ff5e354bc47 + zh: 2ab0c4288708a59c +/deepseek-ai-dsh-tool-workspace-dependencies/use-this-package/minimal-configuration: + en: 97b1f99b4e9c2569 + zh: bf6c6ce74073413f +/deepseek-ai-dsh-tool-workspace-dependencies/use-this-package/payload-layout: + en: 0ba9c7e3b9738e4d + zh: a98344644ac55182 +/deepseek-ai-dsh-tool-workspace-dependencies/use-this-package/build-a-carrier-payload: + en: 0f3e570525053f09 + zh: 1b0cd3b653e1bd5d +/deepseek-ai-dsh-tool-workspace-dependencies/understand-the-implementation: + en: 6483ea7f648cf57f + zh: 772c40e5cbed21f7 +/deepseek-ai-dsh-tool-workspace-dependencies/further-exploration: + en: e78508a7d92652c4 + zh: 5788b94b7af15ada +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-schema/what-the-model-sees: + en: 5e004798009885c4 + zh: e80c616c7ece2b08 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-schema/token-effect: + en: 615cce9c7fcb746d + zh: 6b9f58e263a38d61 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-schema/kv-cache-effect: + en: 4ee92571a5f8a71a + zh: 6fa2a5b21b9f0150 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-result: + en: f8ffc2b983f05ffc + zh: 8573891441963be4 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-result/what-the-model-sees: + en: c25c9db51e7d06da + zh: a4cdcd37bd501503 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-result/token-effect: + en: 0efada793d1e65b1 + zh: 3eed908f43174b88 +/deepseek-ai-dsh-tool-workspace-dependencies/model-experience/tool-result/kv-cache-effect: + en: 42325f307b6c259d + zh: d53a45f1c00ba16f +/deepseek-ai-dsh-tool-workspace-dependencies/known-limitations-and-deferred-work: + en: 8aeacc5404854231 + zh: 43d970fa23ac2473 +/deepseek-ai-dsh-tool-workspace-dependencies/known-limitations-and-deferred-work/dev-note: + en: 1978677ea2592fc1 + zh: e85358cf79eb1fe0 diff --git a/packages/spill/README.i18n.yaml b/packages/spill/README.i18n.yaml index 6299648332..58ee24bbe7 100644 --- a/packages/spill/README.i18n.yaml +++ b/packages/spill/README.i18n.yaml @@ -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 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 packages/spill/README.md -README.md: d90c7606cecaf87fbbccad98afd1846c9f587520 -README.zh.md: cd5004b6fb75ef42008c57083bc4c071450e7bed +/: + en: a626d8ec938bc3c3 + zh: 2bbf8c20e53a3ea1 +/spill-text-spill-capability-family: + en: 460aaf62b79a5905 + zh: 849fd505e4e270b1 +/spill-text-spill-capability-family/summary: + en: 12bb37c0cd0f1a8e + zh: 33bba5023c23ba99 +/spill-text-spill-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/spill-text-spill-capability-family/packages: + en: 7780ec582560ff4d + zh: 710df2af9cf1e398 +/spill-text-spill-capability-family/related-documentation: + en: 1661fdc8da412f5a + zh: 59df6f3e5a22977c +/spill-text-spill-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/spill/spill-local/README.i18n.yaml b/packages/spill/spill-local/README.i18n.yaml index b0e642f6e3..ef311ddf34 100644 --- a/packages/spill/spill-local/README.i18n.yaml +++ b/packages/spill/spill-local/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/spill/spill-local/README.md -README.md: 1c7ea86631a7da51c774081c7178d1f29c5094c9 -README.zh.md: 93ed836b9fa7429eddcca2a4138cbdfba4d6ef5a +/: + en: 081da64c1be2d775 + zh: cd51e86e3c5c49cf +/deepseek-ai-dsh-spill-local: + en: 91630ef1d0319ea4 + zh: 0f5efea58fa94bec +/deepseek-ai-dsh-spill-local/summary: + en: 1d8b50741c23fe72 + zh: 9e3eb775ee92d964 +/deepseek-ai-dsh-spill-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-spill-local/use-this-package: + en: afebd49584624c46 + zh: d0655462bc01cfc7 +/deepseek-ai-dsh-spill-local/use-this-package/minimal-configuration: + en: a1ce98a82eac11cf + zh: 8d3abbbc081f1617 +/deepseek-ai-dsh-spill-local/use-this-package/what-you-get-back: + en: c8aca7d0d3fe321e + zh: b7f7a168d3ca78e0 +/deepseek-ai-dsh-spill-local/use-this-package/where-files-land: + en: 32262a03c40c49df + zh: 9a028fff66aed750 +/deepseek-ai-dsh-spill-local/use-this-package/startup-cleanup: + en: 33c695953619df83 + zh: a72ad3865baed8ac +/deepseek-ai-dsh-spill-local/use-this-package/failures-and-recovery: + en: 910bbe363921952d + zh: 1c21b9ca1d050a1e +/deepseek-ai-dsh-spill-local/understand-the-implementation: + en: deb655b3b1860576 + zh: d83d8a3c24a71a16 +/deepseek-ai-dsh-spill-local/understand-the-implementation/design-philosophy: + en: 905f7242345308cd + zh: 66907177a6dd4b94 +/deepseek-ai-dsh-spill-local/understand-the-implementation/source-map: + en: d7746db31950fddb + zh: d7e2190e5c821801 +/deepseek-ai-dsh-spill-local/understand-the-implementation/file-naming-and-write: + en: cb92a60310c465a8 + zh: ce474c16abd2df5d +/deepseek-ai-dsh-spill-local/further-exploration: + en: 8651e6ea70f0564d + zh: ec0bed43293ac04b +/deepseek-ai-dsh-spill-local/model-experience: + en: ae2966f8fc63dc5b + zh: 141aa4ebbc52574f +/deepseek-ai-dsh-spill-local/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: 6b9a967b5b4765e4 +/deepseek-ai-dsh-spill-local/known-limitations-and-deferred-work: + en: 363cf4b1b822e043 + zh: c28e52f67ef21400 +/deepseek-ai-dsh-spill-local/known-limitations-and-deferred-work/dev-note: + en: a63e51f03bdb279f + zh: 191a48d3bfc4a792 +/deepseek-ai-dsh-spill-local/known-limitations-and-deferred-work/dev-note/future-workspace-confinement-interplay: + en: 7cc389241a5b9a4c + zh: af4b8e65ed565ec6 diff --git a/packages/spill/spill-policy/README.i18n.yaml b/packages/spill/spill-policy/README.i18n.yaml index 7a5aad6057..4ccd736930 100644 --- a/packages/spill/spill-policy/README.i18n.yaml +++ b/packages/spill/spill-policy/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/spill/spill-policy/README.md -README.md: d9caa9b2eb00f05ee6df70b19646d555b14d77e0 -README.zh.md: 4d2b6e8fe88535c762964e7af4666492f68c9943 +/: + en: 07748986630e8da3 + zh: 4ff004a12b883fdf +/deepseek-ai-dsh-spill-policy: + en: e3d75c128bb2f4b9 + zh: 15daa9f8f3efaabd +/deepseek-ai-dsh-spill-policy/summary: + en: 225c013f0f230c37 + zh: 30634801496c205f +/deepseek-ai-dsh-spill-policy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-spill-policy/use-this-package: + en: 52e3b36ee5b98e7f + zh: 98380821aa7cde9d +/deepseek-ai-dsh-spill-policy/use-this-package/minimal-configuration: + en: a5d85ae7f7962b9e + zh: 73c44a9413c3c8cf +/deepseek-ai-dsh-spill-policy/use-this-package/what-the-model-sees: + en: 7cb5bba705975712 + zh: 26adbdee1252d2bb +/deepseek-ai-dsh-spill-policy/use-this-package/which-results-are-affected: + en: c419117e6b5f84f8 + zh: 1a43afb623346603 +/deepseek-ai-dsh-spill-policy/use-this-package/best-effort-failure-behavior: + en: b4d94d99a8a9e52f + zh: d5cec6295cbf5ef6 +/deepseek-ai-dsh-spill-policy/use-this-package/the-durable-log-copy: + en: b72e6e88ada5a957 + zh: 5c6167651618738a +/deepseek-ai-dsh-spill-policy/understand-the-implementation: + en: bb7cedc768113c0e + zh: ca05828dfe63b233 +/deepseek-ai-dsh-spill-policy/understand-the-implementation/design-philosophy: + en: a8e0d6d0651401c0 + zh: 0e159fc19caf9300 +/deepseek-ai-dsh-spill-policy/understand-the-implementation/the-two-arms: + en: a9233181feb1afb4 + zh: e54f1498a0dea843 +/deepseek-ai-dsh-spill-policy/understand-the-implementation/shared-notice-ownership: + en: 916aa902ea376c42 + zh: 51fbf25c1f1560d7 +/deepseek-ai-dsh-spill-policy/understand-the-implementation/source-map: + en: 9a63af71cc19194d + zh: 0937a72b5444cff2 +/deepseek-ai-dsh-spill-policy/understand-the-implementation/failure-modes: + en: 5640d59fdf0e064f + zh: 7f92c52a1bdf5bff +/deepseek-ai-dsh-spill-policy/further-exploration: + en: 2b5860d2cc9a6523 + zh: 006157ad7bc92891 +/deepseek-ai-dsh-spill-policy/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-spill-policy/model-experience/oversized-text-and-image-results: + en: 99c96010474af9cf + zh: 9a25fa709f21a494 +/deepseek-ai-dsh-spill-policy/model-experience/oversized-text-and-image-results/what-the-model-sees: + en: a701c098db84aff5 + zh: 2b04abc792def1a2 +/deepseek-ai-dsh-spill-policy/model-experience/oversized-text-and-image-results/token-effect: + en: 02ec4218006ecb65 + zh: 62f1d481ebf0c665 +/deepseek-ai-dsh-spill-policy/model-experience/oversized-text-and-image-results/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: bee82b41983a66a0 +/deepseek-ai-dsh-spill-policy/known-limitations-and-deferred-work: + en: bd38d2abae4cb4e6 + zh: 29acb530988ee2bd +/deepseek-ai-dsh-spill-policy/known-limitations-and-deferred-work/dev-note: + en: a63e51f03bdb279f + zh: 191a48d3bfc4a792 +/deepseek-ai-dsh-spill-policy/known-limitations-and-deferred-work/dev-note/future-per-tool-configuration: + en: 7e6c4300e87f3f07 + zh: 7b97be5218905ecc +/deepseek-ai-dsh-spill-policy/known-limitations-and-deferred-work/dev-note/future-earlier-spill: + en: dbb9f9fe93996893 + zh: d9d3c1a46ea67595 diff --git a/packages/spill/spill/README.i18n.yaml b/packages/spill/spill/README.i18n.yaml index 299511d0ac..9ab3849f4c 100644 --- a/packages/spill/spill/README.i18n.yaml +++ b/packages/spill/spill/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/spill/spill/README.md -README.md: 9208da2f63522e9b50d2511a78773df8e4216768 -README.zh.md: 279881b557765f06f98a2a210faba9bb9ef08fb2 +/: + en: 0ddb7676fe45581a + zh: 245f536e58988853 +/deepseek-ai-dsh-spill: + en: 421d61cb46bec05a + zh: 84e5c299511939c8 +/deepseek-ai-dsh-spill/summary: + en: 81b0a21d3f59cd8e + zh: 379cfc7845f399cd +/deepseek-ai-dsh-spill/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-spill/use-this-package: + en: 84d0be9b62843a6e + zh: 7e430d9438ed468f +/deepseek-ai-dsh-spill/use-this-package/when-to-choose-it: + en: b16ef40f98105af7 + zh: 44a4ec686474f3a7 +/deepseek-ai-dsh-spill/use-this-package/smallest-working-composition: + en: 6f5ac80b98eaae27 + zh: 2278dfb2c7c6c9b7 +/deepseek-ai-dsh-spill/use-this-package/saving-text: + en: 49a8fa179709a4e2 + zh: e22de74f2d75b329 +/deepseek-ai-dsh-spill/use-this-package/ownership-and-boundaries: + en: 59d9880807abdbc1 + zh: a484e95b459e99ed +/deepseek-ai-dsh-spill/use-this-package/failures-and-recovery: + en: 234f7da79dc937b8 + zh: 099397bb65d9b7d6 +/deepseek-ai-dsh-spill/understand-the-implementation: + en: a3364d8193deb7f0 + zh: 38ca428f37fc7190 +/deepseek-ai-dsh-spill/understand-the-implementation/design-philosophy: + en: e7ef4635f8ff511a + zh: 388fb525e843258e +/deepseek-ai-dsh-spill/understand-the-implementation/source-map: + en: 6d40fb287fcc3a06 + zh: a04c301c57df9a39 +/deepseek-ai-dsh-spill/understand-the-implementation/data-model: + en: 7b1480904f62a1a8 + zh: c51e680012536f2b +/deepseek-ai-dsh-spill/understand-the-implementation/lifecycle: + en: e66fa489470c595c + zh: a1870ddc42a846af +/deepseek-ai-dsh-spill/further-exploration: + en: d89cadb42124d093 + zh: 8cfb289372263267 +/deepseek-ai-dsh-spill/model-experience: + en: 76d7dd75ff4784d9 + zh: ef5c2e7a943923b8 +/deepseek-ai-dsh-spill/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d75d48f485447a74 +/deepseek-ai-dsh-spill/known-limitations-and-deferred-work: + en: eeb7f53fb1d76905 + zh: 5519325032645483 +/deepseek-ai-dsh-spill/known-limitations-and-deferred-work/dev-note: + en: a06f45acc8cb962a + zh: e314617f8a2309d4 +/deepseek-ai-dsh-spill/known-limitations-and-deferred-work/dev-note/future-executor-spill-file-integration: + en: 83e47ebe6d649546 + zh: 384bac7b717cf43c +/deepseek-ai-dsh-spill/known-limitations-and-deferred-work/dev-note/future-non-local-backends-and-cleanup: + en: ef2e905903f860ce + zh: 52aeb079b69de8db diff --git a/packages/ssh/README.i18n.yaml b/packages/ssh/README.i18n.yaml index 1a01bd9b8e..6417179845 100644 --- a/packages/ssh/README.i18n.yaml +++ b/packages/ssh/README.i18n.yaml @@ -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 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 packages/ssh/README.md -README.md: 905c17a8e59cd95ded0fc8b299eac83f8530004e -README.zh.md: 9833c8c087070a3ce62699a0e4c88f998491f79d +/: + en: cc733bef2f8faa24 + zh: 5af0a04d349066ce +/ssh-posix-remote-execution-providers: + en: b0cf352e20ea98f7 + zh: 2cd695d6e0710822 +/ssh-posix-remote-execution-providers/summary: + en: 0f6b92200d01f322 + zh: f6da6f842ccd7f9e +/ssh-posix-remote-execution-providers/table-of-contents: + en: 09848f4d056e4fc1 + zh: 8df6139cff0288f6 +/ssh-posix-remote-execution-providers/packages: + en: c17835929a260861 + zh: 6d847e8a12f62444 +/ssh-posix-remote-execution-providers/related-documentation: + en: 7ebd72bec519e550 + zh: 20023cb415ddae24 +/ssh-posix-remote-execution-providers/dev-note: + en: 1c6c2e1fc4a5c914 + zh: 16223cd641384c0e diff --git a/packages/ssh/fs-ssh/README.i18n.yaml b/packages/ssh/fs-ssh/README.i18n.yaml index 33b115144a..bf60aaadb5 100644 --- a/packages/ssh/fs-ssh/README.i18n.yaml +++ b/packages/ssh/fs-ssh/README.i18n.yaml @@ -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 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 packages/ssh/fs-ssh/README.md -README.md: fe777f672ab7cf474adf10b05f6d6f646864548f -README.zh.md: 9aa92d99584c48d9179e26ccd1f733d2bda36441 +/: + en: 7ee4b79f88be1b77 + zh: 915152892d037c3c +/deepseek-ai-dsh-fs-ssh: + en: 688d000c28794fd2 + zh: a5810a8ca2a43177 +/deepseek-ai-dsh-fs-ssh/summary: + en: 7af49b384ffaf77a + zh: b79e9ef0d4a1f608 +/deepseek-ai-dsh-fs-ssh/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-fs-ssh/use-this-package: + en: ce278245478a358d + zh: 9e292b591bcbaa70 +/deepseek-ai-dsh-fs-ssh/understand-the-implementation: + en: df9be336b11850b2 + zh: 6748e9993fa1e2ac +/deepseek-ai-dsh-fs-ssh/further-exploration: + en: 86d41ac2ed56c29f + zh: 462640a289037b19 +/deepseek-ai-dsh-fs-ssh/model-experience: + en: f8b078c320d36749 + zh: 5a0f4d1b72574d72 +/deepseek-ai-dsh-fs-ssh/model-experience/kv-cache-effect: + en: 21f304c66e5ba98b + zh: 18185d5b164f8216 +/deepseek-ai-dsh-fs-ssh/known-limitations-and-deferred-work: + en: 2e75cffd2ab863d6 + zh: f8fdbabe27082f08 +/deepseek-ai-dsh-fs-ssh/known-limitations-and-deferred-work/dev-note: + en: 6ca4f1d4b4810fff + zh: e42f580ca971972b diff --git a/packages/ssh/sandbox-ssh/README.i18n.yaml b/packages/ssh/sandbox-ssh/README.i18n.yaml index b6d4512077..37863b31a1 100644 --- a/packages/ssh/sandbox-ssh/README.i18n.yaml +++ b/packages/ssh/sandbox-ssh/README.i18n.yaml @@ -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 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 packages/ssh/sandbox-ssh/README.md -README.md: e8f6cb8d47288e92fe8082ae23d550dff344324d -README.zh.md: 694ff99cb0a5df0c45392de0211df2dfa223070d +/: + en: 222090dbd09cc030 + zh: 24e479b8ff87e6d4 +/deepseek-ai-dsh-sandbox-ssh: + en: ae397f91d266146f + zh: 1b6bf9730ed10edb +/deepseek-ai-dsh-sandbox-ssh/summary: + en: 8af877de577db380 + zh: e65585c91fd874b1 +/deepseek-ai-dsh-sandbox-ssh/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-sandbox-ssh/use-this-package: + en: 1a44e3c4d22d8bfe + zh: b53825c3da5e002c +/deepseek-ai-dsh-sandbox-ssh/understand-the-implementation: + en: b4c1c32707dc9f7e + zh: 33a0b69e312aa80d +/deepseek-ai-dsh-sandbox-ssh/further-exploration: + en: 56145c4fead194d7 + zh: 4e65796fc22b3031 +/deepseek-ai-dsh-sandbox-ssh/model-experience: + en: 586c0afcf6a3097d + zh: 4723c59f600a3b04 +/deepseek-ai-dsh-sandbox-ssh/model-experience/kv-cache-effect: + en: 21f304c66e5ba98b + zh: 18185d5b164f8216 +/deepseek-ai-dsh-sandbox-ssh/known-limitations-and-deferred-work: + en: 916d7c0e971765bb + zh: 56d347094c07bc5d +/deepseek-ai-dsh-sandbox-ssh/known-limitations-and-deferred-work/dev-note: + en: 6ca4f1d4b4810fff + zh: e42f580ca971972b diff --git a/packages/ssh/ssh/README.i18n.yaml b/packages/ssh/ssh/README.i18n.yaml index e62342e2a5..205811246b 100644 --- a/packages/ssh/ssh/README.i18n.yaml +++ b/packages/ssh/ssh/README.i18n.yaml @@ -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 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 packages/ssh/ssh/README.md -README.md: c978538491c3ce8045663b9e675d2141e541cacc -README.zh.md: 20c91b199aebdcf308d3e3f6c03f9188315e994a +/: + en: e8056e7ebc59ace5 + zh: 69512c6dc08b162f +/deepseek-ai-dsh-ssh: + en: aa72983e0421a4ab + zh: 5a916f668fa9be67 +/deepseek-ai-dsh-ssh/summary: + en: e502352c9360fce5 + zh: c61e21f82e4743d5 +/deepseek-ai-dsh-ssh/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-ssh/use-this-package: + en: 8fbb876fefb42f3c + zh: ddd38f747088e032 +/deepseek-ai-dsh-ssh/use-this-package/deployment-prerequisites: + en: 2c1bea2f0de4d928 + zh: aab17df22231b6a6 +/deepseek-ai-dsh-ssh/understand-the-implementation: + en: 745134e2c519e805 + zh: c2cfa395fca03d44 +/deepseek-ai-dsh-ssh/further-exploration: + en: 1d179b90a32af26b + zh: 683cf3c0085147e1 +/deepseek-ai-dsh-ssh/model-experience: + en: 46f8a19ad50774a3 + zh: cfa8af8f94f691f5 +/deepseek-ai-dsh-ssh/model-experience/kv-cache-effect: + en: 21f304c66e5ba98b + zh: 18185d5b164f8216 +/deepseek-ai-dsh-ssh/known-limitations-and-deferred-work: + en: c173949c197e6deb + zh: a951c8cfeca150ab +/deepseek-ai-dsh-ssh/known-limitations-and-deferred-work/dev-note: + en: 6ca4f1d4b4810fff + zh: e42f580ca971972b diff --git a/packages/ssh/subprocess-ssh/README.i18n.yaml b/packages/ssh/subprocess-ssh/README.i18n.yaml index 8e96b29f06..41d399c8db 100644 --- a/packages/ssh/subprocess-ssh/README.i18n.yaml +++ b/packages/ssh/subprocess-ssh/README.i18n.yaml @@ -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 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 packages/ssh/subprocess-ssh/README.md -README.md: ad5ddd52bd92574393a49067843fd95702c1363c -README.zh.md: c7a2e4d15e790dadcfbd1a76cf128d2770fb26b6 +/: + en: 3e3b8e1b999fccbb + zh: 996257b8c3c219a8 +/deepseek-ai-dsh-subprocess-ssh: + en: f08776b78c004de7 + zh: b5271644920635d5 +/deepseek-ai-dsh-subprocess-ssh/summary: + en: cb6269e406665507 + zh: 008781a25aa450e8 +/deepseek-ai-dsh-subprocess-ssh/table-of-contents: + en: d152484eb41ac6b4 + zh: 725b47765ee8f30b +/deepseek-ai-dsh-subprocess-ssh/use-this-package: + en: f8e932a09e252f0b + zh: acf54b75034707de +/deepseek-ai-dsh-subprocess-ssh/understand-the-implementation: + en: 2403aaafde22b671 + zh: c04f142f7742c392 +/deepseek-ai-dsh-subprocess-ssh/further-exploration: + en: 02c37175cea228e5 + zh: ef309107adc87bd3 +/deepseek-ai-dsh-subprocess-ssh/model-experience: + en: 02267d26e71b847c + zh: 749305233e7f63e4 +/deepseek-ai-dsh-subprocess-ssh/model-experience/kv-cache-effect: + en: 21f304c66e5ba98b + zh: 18185d5b164f8216 +/deepseek-ai-dsh-subprocess-ssh/known-limitations-and-deferred-work: + en: 0aa40f28ee1eb6e1 + zh: da785a9b66cdbed9 +/deepseek-ai-dsh-subprocess-ssh/known-limitations-and-deferred-work/dev-note: + en: 6ca4f1d4b4810fff + zh: e42f580ca971972b diff --git a/packages/storage/README.i18n.yaml b/packages/storage/README.i18n.yaml index c5ea351d26..2b3232e944 100644 --- a/packages/storage/README.i18n.yaml +++ b/packages/storage/README.i18n.yaml @@ -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 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 packages/storage/README.md -README.md: 4cf5771092daafd4f3c7c4dfd2c3f8422a7822c6 -README.zh.md: d10a54267b8b9e58ec974cd26dc5cfc77734b611 +/: + en: 919996d8e0d75b41 + zh: 326639b9a528917d +/packages-storage: + en: 7fb10039cf470970 + zh: 1ceec1df26a8b61b +/packages-storage/summary: + en: 589f00d7bbaa296f + zh: 9fce30d02e7b5f1b +/packages-storage/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-storage/packages: + en: 770491561a697bed + zh: ac61f655b921e690 +/packages-storage/related-documentation: + en: b7300f09b12dc383 + zh: abae37e079b7f5bc +/packages-storage/dev-note: + en: 4ac0fbe6dc61795e + zh: d92bf6b0a5ddaea4 diff --git a/packages/storage/storage-domain/README.i18n.yaml b/packages/storage/storage-domain/README.i18n.yaml index e6c6d7b2ce..327f412a71 100644 --- a/packages/storage/storage-domain/README.i18n.yaml +++ b/packages/storage/storage-domain/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/storage/storage-domain/README.md -README.md: bfe5cc6c5344dfc8cf09ac90184b96cf712b358d -README.zh.md: 692577b1d2e98f4794e7a4c392390233d4fc134f +/: + en: 6aefa593f50b7b9a + zh: 013e3bd1d843e39b +/deepseek-ai-dsh-storage-domain: + en: 854dd576e7d6a08d + zh: 4d19e9bde70ec0d7 +/deepseek-ai-dsh-storage-domain/summary: + en: 2b76bd793d7b8f28 + zh: 3fe5c99abf1bd05e +/deepseek-ai-dsh-storage-domain/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-storage-domain/use-this-package: + en: 371260c7041be164 + zh: d933049beb28ef40 +/deepseek-ai-dsh-storage-domain/use-this-package/when-to-use-it: + en: a96040b95821b5a9 + zh: 33bcd8ea7e3fa037 +/deepseek-ai-dsh-storage-domain/use-this-package/declaring-a-domain: + en: 3c9626dcbc42c9d0 + zh: e29ba23ab0c58e17 +/deepseek-ai-dsh-storage-domain/use-this-package/opening-and-using-a-domain: + en: 7355f5a286c30697 + zh: 15eaca07fc5f6d05 +/deepseek-ai-dsh-storage-domain/use-this-package/routing-domains-to-backends: + en: d64e0107381688b3 + zh: 7cb43a30677f5be6 +/deepseek-ai-dsh-storage-domain/use-this-package/observable-behavior-and-failures: + en: ed4b40d0c10ce081 + zh: 554e490deaaa6b33 +/deepseek-ai-dsh-storage-domain/understand-the-implementation: + en: 1cc8b33834457c38 + zh: c549afc7c4960e9e +/deepseek-ai-dsh-storage-domain/understand-the-implementation/design-concept: + en: 1e063b13eced114a + zh: f65c910b124fd595 +/deepseek-ai-dsh-storage-domain/understand-the-implementation/open-sequence: + en: 052da5d6c45205ca + zh: 724c875e3c431fee +/deepseek-ai-dsh-storage-domain/understand-the-implementation/source-map: + en: faade3f273420fc7 + zh: 2cd48a0e4a415f56 +/deepseek-ai-dsh-storage-domain/understand-the-implementation/invariant: + en: 03cb11c4ce394210 + zh: 0456212bf772c086 +/deepseek-ai-dsh-storage-domain/further-exploration: + en: 45403f2aa04996cf + zh: d9abd75cee7d413f +/deepseek-ai-dsh-storage-domain/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-storage-domain/model-experience/durable-domain-state: + en: 57b8c561d80ab712 + zh: 3246a498fe289ad8 +/deepseek-ai-dsh-storage-domain/model-experience/durable-domain-state/what-the-model-sees: + en: d265b549d349bb70 + zh: 8c8293c21e9aa8b1 +/deepseek-ai-dsh-storage-domain/model-experience/durable-domain-state/token-effect: + en: 2d6ab1c549d3f683 + zh: c0f264de06587598 +/deepseek-ai-dsh-storage-domain/model-experience/durable-domain-state/kv-cache-effect: + en: 0e7d1c06d17c542f + zh: ead94d355f161be1 +/deepseek-ai-dsh-storage-domain/known-limitations-and-deferred-work: + en: bd03348ad87d9210 + zh: f50d6f19bcac93b9 +/deepseek-ai-dsh-storage-domain/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/storage/storage-json/README.i18n.yaml b/packages/storage/storage-json/README.i18n.yaml index 0478928663..edd69413cc 100644 --- a/packages/storage/storage-json/README.i18n.yaml +++ b/packages/storage/storage-json/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/storage/storage-json/README.md -README.md: d36c6333392c3efe4462aebd82cf3ff9e76f66ae -README.zh.md: e94e714547d0101c232c1b0793b7957fa1cb0abb +/: + en: 322dcc67eb62e0eb + zh: 456d6b3d2514c508 +/deepseek-ai-dsh-storage-json: + en: b04256279a328d19 + zh: b0913489b49403b1 +/deepseek-ai-dsh-storage-json/summary: + en: 9eb9c035b03acd09 + zh: 2adec96e42a054e1 +/deepseek-ai-dsh-storage-json/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-storage-json/use-this-package: + en: 87ddc847b7024cac + zh: 6e97d0f216587d5b +/deepseek-ai-dsh-storage-json/use-this-package/when-to-choose-it: + en: 28ebb528cbe13f31 + zh: 7e3744e9d080d2bb +/deepseek-ai-dsh-storage-json/use-this-package/configuration: + en: 7144aa3b5af76874 + zh: dfc528d027f86037 +/deepseek-ai-dsh-storage-json/use-this-package/observable-behavior: + en: 44e1279b83c7d086 + zh: b7b920b737e9bfe0 +/deepseek-ai-dsh-storage-json/understand-the-implementation: + en: b7d222309b3e5438 + zh: 807c7314ee341d94 +/deepseek-ai-dsh-storage-json/understand-the-implementation/design-concept: + en: a5a4e3cf05597661 + zh: 539ad4b4045ff572 +/deepseek-ai-dsh-storage-json/understand-the-implementation/file-formats: + en: b3de0a697db4f916 + zh: 56b26f7823392bd5 +/deepseek-ai-dsh-storage-json/understand-the-implementation/source-map: + en: 43ece66ff547f01a + zh: 9670f78047f4e653 +/deepseek-ai-dsh-storage-json/further-exploration: + en: fa243a6d5778a3b4 + zh: 64189101520d677c +/deepseek-ai-dsh-storage-json/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-storage-json/model-experience/stored-domain-records: + en: c5d5ffaf6b114f3e + zh: 97db23b0b14ff1c0 +/deepseek-ai-dsh-storage-json/model-experience/stored-domain-records/what-the-model-sees: + en: d0798e9e30583b55 + zh: 968f7f595b4bf1ff +/deepseek-ai-dsh-storage-json/model-experience/stored-domain-records/token-effect: + en: 592ed887c69e5c46 + zh: cb9be9de6e38db55 +/deepseek-ai-dsh-storage-json/model-experience/stored-domain-records/kv-cache-effect: + en: c13c59d13a5f1651 + zh: 5aab838ae3ff5324 +/deepseek-ai-dsh-storage-json/known-limitations-and-deferred-work: + en: 76b327dc0d93f6ac + zh: f40530debdcd1fb7 +/deepseek-ai-dsh-storage-json/known-limitations-and-deferred-work/dev-note: + en: dd40dd4cb9109aea + zh: 3fd79d2242eccadb diff --git a/packages/storage/storage-sqlite/README.i18n.yaml b/packages/storage/storage-sqlite/README.i18n.yaml index 0d5087e612..7363a15dd4 100644 --- a/packages/storage/storage-sqlite/README.i18n.yaml +++ b/packages/storage/storage-sqlite/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/storage/storage-sqlite/README.md -README.md: 4744fa2a453e030ef2035e35040b158c703c5f77 -README.zh.md: b8357bfc4e4ce5a45a789f41c9be8b4ba09036ae +/: + en: 07adf973ef2924fb + zh: dbc6a9255d76b7e4 +/deepseek-ai-dsh-storage-sqlite: + en: ec2b5805a2c77212 + zh: 319135f3461ed09b +/deepseek-ai-dsh-storage-sqlite/summary: + en: 9cdc451cf6c54bb8 + zh: d3c86bf676052688 +/deepseek-ai-dsh-storage-sqlite/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-storage-sqlite/use-this-package: + en: 98de508e10f22c1e + zh: 1e7d0cadc10cba8d +/deepseek-ai-dsh-storage-sqlite/use-this-package/when-to-choose-it: + en: 8e1ba279af55e197 + zh: 7dfad7470534de6c +/deepseek-ai-dsh-storage-sqlite/use-this-package/configuration: + en: e21da50c3c40bcb8 + zh: 0ed58b20e4a32ce9 +/deepseek-ai-dsh-storage-sqlite/use-this-package/observable-behavior: + en: b260d7bdf7971f9d + zh: 22dd2f633f507545 +/deepseek-ai-dsh-storage-sqlite/understand-the-implementation: + en: 6867b52cbb94e572 + zh: 187d5d61980c8fe7 +/deepseek-ai-dsh-storage-sqlite/understand-the-implementation/design-concept: + en: 54ee8d9d7746e82d + zh: 2cc9f29ebcc29adc +/deepseek-ai-dsh-storage-sqlite/understand-the-implementation/open-sequence: + en: 50d85e8d8e8b5bc1 + zh: 2a7067bd7fb47b35 +/deepseek-ai-dsh-storage-sqlite/understand-the-implementation/source-map: + en: 67d89a03fae74e28 + zh: 853578def3ab01f1 +/deepseek-ai-dsh-storage-sqlite/further-exploration: + en: 07d30a2398975dae + zh: 747bd86ba1056eab +/deepseek-ai-dsh-storage-sqlite/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-storage-sqlite/model-experience/stored-domain-records: + en: c5d5ffaf6b114f3e + zh: 97db23b0b14ff1c0 +/deepseek-ai-dsh-storage-sqlite/model-experience/stored-domain-records/what-the-model-sees: + en: d0798e9e30583b55 + zh: 968f7f595b4bf1ff +/deepseek-ai-dsh-storage-sqlite/model-experience/stored-domain-records/token-effect: + en: 592ed887c69e5c46 + zh: cb9be9de6e38db55 +/deepseek-ai-dsh-storage-sqlite/model-experience/stored-domain-records/kv-cache-effect: + en: c13c59d13a5f1651 + zh: 5aab838ae3ff5324 +/deepseek-ai-dsh-storage-sqlite/known-limitations-and-deferred-work: + en: c24fe7a01bc44ed3 + zh: 69638d0692bdb637 +/deepseek-ai-dsh-storage-sqlite/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/storage/storage/README.i18n.yaml b/packages/storage/storage/README.i18n.yaml index 3e4e9b58a9..72f8b87b7d 100644 --- a/packages/storage/storage/README.i18n.yaml +++ b/packages/storage/storage/README.i18n.yaml @@ -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 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 packages/storage/storage/README.md -README.md: edb833ad29d38df3225edad6296096ddbd69107f -README.zh.md: 68609370534a33957fcbb8e2acca517ae8a7eb98 +/: + en: 8f04de41fc5df74d + zh: 966708180702ef43 +/deepseek-ai-dsh-storage: + en: 1cc96581ed1fb1f8 + zh: 20a7efe7e52ef7f9 +/deepseek-ai-dsh-storage/summary: + en: cc38123f23c34be3 + zh: 7cb2fbac54ee2945 +/deepseek-ai-dsh-storage/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-storage/use-this-package: + en: 1328892ee0bc22ed + zh: a49eab5e48a7e70b +/deepseek-ai-dsh-storage/use-this-package/when-to-use-it: + en: 6e4ea48645af5d26 + zh: cfe3e192216030d1 +/deepseek-ai-dsh-storage/use-this-package/a-minimal-composition: + en: 13a046a070842dc7 + zh: d72aa6b5cd515c99 +/deepseek-ai-dsh-storage/use-this-package/what-you-get: + en: 240ae33969a3b666 + zh: e9efb4a5d9a599e2 +/deepseek-ai-dsh-storage/use-this-package/failures-and-recovery: + en: 6dd7336d5970b6dd + zh: 7a729ff667dff0ff +/deepseek-ai-dsh-storage/understand-the-implementation: + en: c0990f4e7806a4c4 + zh: 5250e7b6a80653a4 +/deepseek-ai-dsh-storage/understand-the-implementation/design-concept: + en: bbdc4833afb85dad + zh: 7494de01d5a4aecf +/deepseek-ai-dsh-storage/understand-the-implementation/the-backend-contract: + en: 28b6c4e8efb4ffd1 + zh: 4726c72b925c333f +/deepseek-ai-dsh-storage/understand-the-implementation/source-map: + en: dc862f7fc6c02d10 + zh: 4600aeb07e2fdd4f +/deepseek-ai-dsh-storage/further-exploration: + en: b900d2accc282f55 + zh: 8079b59c6830d079 +/deepseek-ai-dsh-storage/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-storage/model-experience/backend-and-form-registrations: + en: 28a0394f484bf87b + zh: 9a08192ffdbb8ac3 +/deepseek-ai-dsh-storage/model-experience/backend-and-form-registrations/what-the-model-sees: + en: fda1261c4b916ad3 + zh: f8f4974cbf427621 +/deepseek-ai-dsh-storage/model-experience/backend-and-form-registrations/token-effect: + en: 5b83ac7ce1ea1346 + zh: 04b7d01da48ec90d +/deepseek-ai-dsh-storage/model-experience/backend-and-form-registrations/kv-cache-effect: + en: 5126a2c239cb5913 + zh: 0869bc380ea1dc1a +/deepseek-ai-dsh-storage/known-limitations-and-deferred-work: + en: cde920598e06282d + zh: ad808f95751317a9 +/deepseek-ai-dsh-storage/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subagent/README.i18n.yaml b/packages/subagent/README.i18n.yaml index 693f42f93c..1398dad945 100644 --- a/packages/subagent/README.i18n.yaml +++ b/packages/subagent/README.i18n.yaml @@ -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 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 packages/subagent/README.md -README.md: 265aec1072dcec736ea9d6a9be3d20f67ac4361e -README.zh.md: 4cf907d4df6d178aac8e43174e8ded973716b1cf +/: + en: 8f20c437b8a32075 + zh: 3057529ec3ceadca +/subagent-subagent-capability-family: + en: 08588a11264e9d49 + zh: d45e5ad1e3f73f6e +/subagent-subagent-capability-family/summary: + en: 4cb71f430f89dd03 + zh: 9cd59de2a92d0711 +/subagent-subagent-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/subagent-subagent-capability-family/packages: + en: 353b7465a154d0e9 + zh: a0a8f3150260100d +/subagent-subagent-capability-family/related-documentation: + en: 2245aba8b9f117fd + zh: 4f2e3f6a5dc4f3dd +/subagent-subagent-capability-family/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/subagent/subagent-acp/README.i18n.yaml b/packages/subagent/subagent-acp/README.i18n.yaml index b425d88095..27abbf3550 100644 --- a/packages/subagent/subagent-acp/README.i18n.yaml +++ b/packages/subagent/subagent-acp/README.i18n.yaml @@ -1,6 +1,85 @@ -# 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 packages/subagent/subagent-acp/README.md -README.md: 87fb7f3101d2d329300213bed2acb4a479c83b72 -README.zh.md: 72b94cc89d8318930cc89c4eac34bb2557a2ad58 +/: + en: 86941ae0e2ae97a3 + zh: ca2acb7bff6d53ab +/deepseek-ai-dsh-subagent-acp: + en: 552b89c7ea49f58f + zh: 30ae54c119cb58b9 +/deepseek-ai-dsh-subagent-acp/summary: + en: 39559d1c5892fed9 + zh: efd0fc17460a0b14 +/deepseek-ai-dsh-subagent-acp/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-acp/use-this-package: + en: 78623be74507229d + zh: b0ed9c9d0c6eb040 +/deepseek-ai-dsh-subagent-acp/use-this-package/when-to-choose-it: + en: 56946ab7637bb8f9 + zh: c54c4da98092dd9c +/deepseek-ai-dsh-subagent-acp/use-this-package/configuration: + en: 6f5fdf9a955841ce + zh: 7193a3c07fc54199 +/deepseek-ai-dsh-subagent-acp/use-this-package/what-you-get: + en: 0a809bd7b8cebddc + zh: e2c1edf8f485e8f8 +/deepseek-ai-dsh-subagent-acp/use-this-package/failure-and-recovery: + en: 312094fb2d293247 + zh: c9b48a6127532308 +/deepseek-ai-dsh-subagent-acp/use-this-package/safe-diagnostics: + en: 11a38ce5f9a97e1f + zh: 617ad40f3e37f742 +/deepseek-ai-dsh-subagent-acp/understand-the-implementation: + en: 663322a5de5a2112 + zh: 37d0602bb7e58c0e +/deepseek-ai-dsh-subagent-acp/understand-the-implementation/design-concept: + en: c98e6bcd784bbf8a + zh: b96218f6e639755c +/deepseek-ai-dsh-subagent-acp/understand-the-implementation/start-and-ownership-flow: + en: c0f7f78468f84c3b + zh: c9cb417d84d868ce +/deepseek-ai-dsh-subagent-acp/understand-the-implementation/stop-reason-mapping: + en: 88bb2b62c6e2f114 + zh: f6b720ca8ce90343 +/deepseek-ai-dsh-subagent-acp/understand-the-implementation/process-boundary: + en: 7217618a1d396333 + zh: c8f47e31c815bec8 +/deepseek-ai-dsh-subagent-acp/further-exploration: + en: 03bfe655b4b27ef7 + zh: dc9bdb7a6a56c42c +/deepseek-ai-dsh-subagent-acp/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request: + en: 05e6180f1498fdf9 + zh: 2b05d2b97bfa67da +/deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request/what-the-model-sees: + en: f7f619ca78d74c6f + zh: f642dc7b4ff69a10 +/deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request/token-effect: + en: c0b78d334d5d0a9c + zh: d54bf504933e132d +/deepseek-ai-dsh-subagent-acp/model-experience/child-agent-request/kv-cache-effect: + en: e9423135f647a086 + zh: 6b50cc215a8b4403 +/deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly: + en: 75d061c2151624a7 + zh: 71e58e020b60ff90 +/deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/what-the-model-sees: + en: 6779463ffe1c724c + zh: 9797d5910039fd3a +/deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/token-effect: + en: 600ac97cdd163650 + zh: cd26bb541f56699b +/deepseek-ai-dsh-subagent-acp/model-experience/parent-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-acp/known-limitations-and-deferred-work: + en: 53a0e7fb49fe6e23 + zh: 51096d4eb51fb4ba +/deepseek-ai-dsh-subagent-acp/known-limitations-and-deferred-work/dev-note: + en: 5f1add5d61924059 + zh: ab32b1c9d3433681 diff --git a/packages/subagent/subagent-claude-code/README.i18n.yaml b/packages/subagent/subagent-claude-code/README.i18n.yaml index 5c6051045a..d30826170c 100644 --- a/packages/subagent/subagent-claude-code/README.i18n.yaml +++ b/packages/subagent/subagent-claude-code/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/subagent/subagent-claude-code/README.md -README.md: 20bb0847fb688c37b6508b6eb335a23f3b442922 -README.zh.md: eabdadb243acf7f5ccdd81420268b259283182dc +/: + en: 098697371ce8b694 + zh: 1cf5aee9be614a5d +/deepseek-ai-dsh-subagent-claude-code: + en: 58cca9655f3f81ea + zh: 0a33d9a4ed461350 +/deepseek-ai-dsh-subagent-claude-code/summary: + en: 498d97a8dd913e53 + zh: d76f0cd25940c540 +/deepseek-ai-dsh-subagent-claude-code/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-claude-code/use-this-package: + en: e46eb1b8f7054196 + zh: fcba0b3fb2b5da93 +/deepseek-ai-dsh-subagent-claude-code/use-this-package/installing-the-bundle: + en: 10c373b4768ba361 + zh: a5de572bafb2f886 +/deepseek-ai-dsh-subagent-claude-code/use-this-package/configuration: + en: 6c61e906830ab904 + zh: 8464a1514cdc5a30 +/deepseek-ai-dsh-subagent-claude-code/use-this-package/exposing-the-tool: + en: b433b186c4e62396 + zh: 6cbb85855238272c +/deepseek-ai-dsh-subagent-claude-code/use-this-package/what-you-get: + en: 564a27820070ab0e + zh: 6ace69f237ac98aa +/deepseek-ai-dsh-subagent-claude-code/use-this-package/failure-and-recovery: + en: 3cfe78175e68269e + zh: 478666ce1fcb4e59 +/deepseek-ai-dsh-subagent-claude-code/understand-the-implementation: + en: a04818121f31d222 + zh: 2ed476ab086c1686 +/deepseek-ai-dsh-subagent-claude-code/understand-the-implementation/design-concept: + en: c01f4a013f7f1a2f + zh: 92221e45d438334d +/deepseek-ai-dsh-subagent-claude-code/understand-the-implementation/source-map: + en: 86286514b713e50c + zh: 5e29ecd8d15c0c50 +/deepseek-ai-dsh-subagent-claude-code/understand-the-implementation/run-flow: + en: 4dd16da30209644e + zh: 0679197e8b6d0a67 +/deepseek-ai-dsh-subagent-claude-code/further-exploration: + en: 909404f216738b6f + zh: 491c074d2a1f6c49 +/deepseek-ai-dsh-subagent-claude-code/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-claude-code/model-experience/child-request: + en: 1796fa78833bfc2b + zh: d925d4c0d6c46552 +/deepseek-ai-dsh-subagent-claude-code/model-experience/child-request/what-the-model-sees: + en: 35de120a073a2b78 + zh: 74ca577fb19027a8 +/deepseek-ai-dsh-subagent-claude-code/model-experience/child-request/token-effect: + en: 631f762d31c31a3d + zh: f32ad086756bf33d +/deepseek-ai-dsh-subagent-claude-code/model-experience/child-request/kv-cache-effect: + en: 1f37a0a78ef63223 + zh: b6543531dda88e22 +/deepseek-ai-dsh-subagent-claude-code/model-experience/parent-scheduling-and-results-indirectly: + en: 4c391bb16e3cd380 + zh: ab3847efe35fa6dc +/deepseek-ai-dsh-subagent-claude-code/model-experience/parent-scheduling-and-results-indirectly/what-the-model-sees: + en: a36839fc8f15c2f3 + zh: 2a7755a8d90fb5bc +/deepseek-ai-dsh-subagent-claude-code/model-experience/parent-scheduling-and-results-indirectly/token-effect: + en: 0bf99fe5b871cb64 + zh: 6bb608e9b39ffb5b +/deepseek-ai-dsh-subagent-claude-code/model-experience/parent-scheduling-and-results-indirectly/kv-cache-effect: + en: fdbb7dcbf8b37f2b + zh: c7bcbf1e91ffe1d4 +/deepseek-ai-dsh-subagent-claude-code/known-limitations-and-deferred-work: + en: 9fbe41d8185bc0bf + zh: 67435a4e57191729 +/deepseek-ai-dsh-subagent-claude-code/known-limitations-and-deferred-work/dev-note: + en: f4ee67014233d3f1 + zh: 89f5e6b29ea18392 diff --git a/packages/subagent/subagent-codex/README.i18n.yaml b/packages/subagent/subagent-codex/README.i18n.yaml index d26c9f95da..79f3fec38e 100644 --- a/packages/subagent/subagent-codex/README.i18n.yaml +++ b/packages/subagent/subagent-codex/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/subagent/subagent-codex/README.md -README.md: 3f90c9430c296d1233f1d2973e51ed3517e61dc1 -README.zh.md: 9b122325ea4672f461a5a6def87649fd6ac43e8d +/: + en: c0c24742184eba37 + zh: 2982b61ecfff95ce +/deepseek-ai-dsh-subagent-codex: + en: c3f2c833cb91228d + zh: 3267d24936c5973f +/deepseek-ai-dsh-subagent-codex/summary: + en: 2d790b5830aecb62 + zh: 5c59141aec808188 +/deepseek-ai-dsh-subagent-codex/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-codex/use-this-package: + en: b5a419bc17f9938f + zh: d3f864c694dcc3df +/deepseek-ai-dsh-subagent-codex/use-this-package/installing-the-bundle: + en: fd1a741f9ef67dd5 + zh: 6d4b6129543eeeed +/deepseek-ai-dsh-subagent-codex/use-this-package/configuration: + en: 1b77d332fd04117c + zh: 4271e338b55c3054 +/deepseek-ai-dsh-subagent-codex/use-this-package/exposing-the-tool: + en: ae49a2c17f98c205 + zh: 8cd118bdf4a6ac57 +/deepseek-ai-dsh-subagent-codex/use-this-package/what-you-get: + en: d095aece07cf4e43 + zh: 124065171903083e +/deepseek-ai-dsh-subagent-codex/use-this-package/failure-and-recovery: + en: 4ffe0312c5a8f722 + zh: 532a1997e9ae825b +/deepseek-ai-dsh-subagent-codex/understand-the-implementation: + en: d283c5564d6697e1 + zh: 723aa78188880979 +/deepseek-ai-dsh-subagent-codex/understand-the-implementation/design-concept: + en: 40315dca80a4e688 + zh: 6b12db5e1037db98 +/deepseek-ai-dsh-subagent-codex/understand-the-implementation/source-map: + en: ff3ba333a1cbb54e + zh: 1680115a5d1814b7 +/deepseek-ai-dsh-subagent-codex/understand-the-implementation/run-flow: + en: d330494dbded9388 + zh: ab996ff8a2f8b2fa +/deepseek-ai-dsh-subagent-codex/further-exploration: + en: 33987c399020d3c4 + zh: e2b658259b97f6c5 +/deepseek-ai-dsh-subagent-codex/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-codex/model-experience/child-request: + en: 1796fa78833bfc2b + zh: d925d4c0d6c46552 +/deepseek-ai-dsh-subagent-codex/model-experience/child-request/what-the-model-sees: + en: eb7be1567ceff373 + zh: bec1a36af27bd3e9 +/deepseek-ai-dsh-subagent-codex/model-experience/child-request/token-effect: + en: 7812d203a360434a + zh: 52c8b9a0cbfe39c3 +/deepseek-ai-dsh-subagent-codex/model-experience/child-request/kv-cache-effect: + en: cd1fb7e2382ad2a2 + zh: 2646d4b03a2e7220 +/deepseek-ai-dsh-subagent-codex/model-experience/parent-scheduling-and-results-indirectly: + en: 4c391bb16e3cd380 + zh: ab3847efe35fa6dc +/deepseek-ai-dsh-subagent-codex/model-experience/parent-scheduling-and-results-indirectly/what-the-model-sees: + en: 2547336cd3ac48d9 + zh: 871fba5c3d1e2f98 +/deepseek-ai-dsh-subagent-codex/model-experience/parent-scheduling-and-results-indirectly/token-effect: + en: 0bf99fe5b871cb64 + zh: 6bb608e9b39ffb5b +/deepseek-ai-dsh-subagent-codex/model-experience/parent-scheduling-and-results-indirectly/kv-cache-effect: + en: fdbb7dcbf8b37f2b + zh: c7bcbf1e91ffe1d4 +/deepseek-ai-dsh-subagent-codex/known-limitations-and-deferred-work: + en: 4716f8c13e7f1f24 + zh: ab1e66bc56cde32c +/deepseek-ai-dsh-subagent-codex/known-limitations-and-deferred-work/dev-note: + en: 7ab7eb087a0e3abb + zh: 5f3d74e7ad285e36 diff --git a/packages/subagent/subagent-dsh-sdk/README.i18n.yaml b/packages/subagent/subagent-dsh-sdk/README.i18n.yaml index 0fc408232f..bdbebfa328 100644 --- a/packages/subagent/subagent-dsh-sdk/README.i18n.yaml +++ b/packages/subagent/subagent-dsh-sdk/README.i18n.yaml @@ -1,6 +1,85 @@ -# 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 packages/subagent/subagent-dsh-sdk/README.md -README.md: 013fc6eed19c1e7b1849398ca9c002935a92d3bc -README.zh.md: b5d8816faedf05475584cc715114b833f765924e +/: + en: 96519565b888c154 + zh: 015dcb81826e5305 +/deepseek-ai-dsh-subagent-dsh-sdk: + en: 27cd27cb43ed149c + zh: 31efe5a8ecffada3 +/deepseek-ai-dsh-subagent-dsh-sdk/summary: + en: 0b7768cbc0d34ed5 + zh: 89af162c917e4ec0 +/deepseek-ai-dsh-subagent-dsh-sdk/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-dsh-sdk/use-this-package: + en: d6eb16d8fc690671 + zh: 5865ee3bed0b36ca +/deepseek-ai-dsh-subagent-dsh-sdk/use-this-package/when-to-choose-it: + en: 617cbcee49ca46d6 + zh: fbe52df163a1e64f +/deepseek-ai-dsh-subagent-dsh-sdk/use-this-package/configuration: + en: a242a1a4d16e5241 + zh: 20a8e87d4fec4117 +/deepseek-ai-dsh-subagent-dsh-sdk/use-this-package/what-you-get: + en: b9ccfa85b40b07eb + zh: 4f84e7327b4ff188 +/deepseek-ai-dsh-subagent-dsh-sdk/use-this-package/failure-and-recovery: + en: 21eb548e92fe20ce + zh: d865a29acf60018e +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation: + en: 00d076edd7fee716 + zh: 7aea818c13fe3cc1 +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation/design-concept: + en: e2f233b7d6e9ada8 + zh: 7e61dd4872b5a0aa +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation/source-map: + en: 1bed6c1577997df6 + zh: 8c99f132377f6ca2 +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation/run-flow: + en: f268db0520abf6f7 + zh: 4517fc7ea6bd099c +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation/stop-reason-mapping: + en: e040a57202916f91 + zh: 196bf38f0f0db310 +/deepseek-ai-dsh-subagent-dsh-sdk/understand-the-implementation/process-boundary: + en: 82aae1253bbb1b01 + zh: eda8f885542af88d +/deepseek-ai-dsh-subagent-dsh-sdk/further-exploration: + en: ffa3e7e1692e0ee1 + zh: 8800ffd71a35d8e4 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/child-agent-request: + en: 05e6180f1498fdf9 + zh: 2b05d2b97bfa67da +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/child-agent-request/what-the-model-sees: + en: df7729fa4e60d6f6 + zh: 458094fbb7a7ea07 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/child-agent-request/token-effect: + en: c0b78d334d5d0a9c + zh: 71d1a375a6ab4109 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/child-agent-request/kv-cache-effect: + en: ab1a7c0bf70e48cd + zh: bd699112b4067e95 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/parent-tool-result-indirectly: + en: 75d061c2151624a7 + zh: 71e58e020b60ff90 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/parent-tool-result-indirectly/what-the-model-sees: + en: e299c74b31e3ed7d + zh: 118adc28e0755bfb +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/parent-tool-result-indirectly/token-effect: + en: 600ac97cdd163650 + zh: d08f0a72321a9548 +/deepseek-ai-dsh-subagent-dsh-sdk/model-experience/parent-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-dsh-sdk/known-limitations-and-deferred-work: + en: 01cbee2a855b1d6a + zh: 701e7afc9a7fc862 +/deepseek-ai-dsh-subagent-dsh-sdk/known-limitations-and-deferred-work/dev-note: + en: 854b5d4640bb8c07 + zh: acd7a2aa4a4f457c diff --git a/packages/subagent/subagent-fork-in-process/README.i18n.yaml b/packages/subagent/subagent-fork-in-process/README.i18n.yaml index ab0bb07299..14024bb44e 100644 --- a/packages/subagent/subagent-fork-in-process/README.i18n.yaml +++ b/packages/subagent/subagent-fork-in-process/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/subagent/subagent-fork-in-process/README.md -README.md: 0c8ff5372717b26a4e5ee556655094a74c9d6dda -README.zh.md: c1098825dc0d27f854e7c4d283670d84a507999d +/: + en: a4a75d423f70c4de + zh: a60816274b877a80 +/deepseek-ai-dsh-subagent-fork-in-process: + en: c3a79ac7f78122a5 + zh: 6617b74690e8a8fb +/deepseek-ai-dsh-subagent-fork-in-process/summary: + en: 97309f84ffe50ba9 + zh: ce4121b0823b7c7f +/deepseek-ai-dsh-subagent-fork-in-process/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-fork-in-process/use-this-package: + en: 71affc798c840594 + zh: 258a2932c3c04841 +/deepseek-ai-dsh-subagent-fork-in-process/use-this-package/when-to-choose-it: + en: 05090df7cc302c6a + zh: bd988019ba062e0a +/deepseek-ai-dsh-subagent-fork-in-process/use-this-package/seed-boundary: + en: f4dfd1ce652f019b + zh: 9bb75239491f07cc +/deepseek-ai-dsh-subagent-fork-in-process/use-this-package/minimal-configuration: + en: d6058c358890c64c + zh: 93f8cc2b60975d42 +/deepseek-ai-dsh-subagent-fork-in-process/use-this-package/what-a-fork-delegation-does: + en: 221626f65c2faf04 + zh: dfa8200b5349340f +/deepseek-ai-dsh-subagent-fork-in-process/understand-the-implementation: + en: 6a0fe4b9cc780aaa + zh: 50cd69ceb8296827 +/deepseek-ai-dsh-subagent-fork-in-process/understand-the-implementation/design-concept: + en: 3917de9c152828e0 + zh: 4c48bb580510ef0e +/deepseek-ai-dsh-subagent-fork-in-process/understand-the-implementation/source-map: + en: b629a79a8b4de729 + zh: 3b3019101cf70c54 +/deepseek-ai-dsh-subagent-fork-in-process/understand-the-implementation/run-flow: + en: 59b82d0f46c21967 + zh: aacc5455eaabc8f7 +/deepseek-ai-dsh-subagent-fork-in-process/understand-the-implementation/lifecycle-binding: + en: 8f9a94404f719707 + zh: 60d2318aad2c2935 +/deepseek-ai-dsh-subagent-fork-in-process/further-exploration: + en: 40cb89910f190f45 + zh: ab9728a53d4b6123 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/child-agent-history-and-envelope: + en: 91a5bd22001586e9 + zh: 456e5bf20881a70d +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/child-agent-history-and-envelope/what-the-model-sees: + en: fe88f3e65bb01009 + zh: 64e05acfe80e81f3 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/child-agent-history-and-envelope/token-effect: + en: db9ae2edb5ee28ce + zh: 5a342ffa3e7a7b40 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/child-agent-history-and-envelope/kv-cache-effect: + en: 63138e06a9c24fa0 + zh: dca65fe91ff3534b +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/parent-tool-result-indirectly: + en: 75d061c2151624a7 + zh: 71e58e020b60ff90 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/parent-tool-result-indirectly/what-the-model-sees: + en: 0521a7cac72c880d + zh: 6ac7c5f25c7d55f6 +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/parent-tool-result-indirectly/token-effect: + en: 8c81bab3c5d6a38a + zh: 44c798432a4bfdfb +/deepseek-ai-dsh-subagent-fork-in-process/model-experience/parent-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-fork-in-process/known-limitations-and-deferred-work: + en: fb435c0512f2c2ee + zh: d325c13bf8a2afc7 +/deepseek-ai-dsh-subagent-fork-in-process/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subagent/subagent-in-process-driver/README.i18n.yaml b/packages/subagent/subagent-in-process-driver/README.i18n.yaml index d90925e085..0652ba509c 100644 --- a/packages/subagent/subagent-in-process-driver/README.i18n.yaml +++ b/packages/subagent/subagent-in-process-driver/README.i18n.yaml @@ -1,6 +1,106 @@ -# 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 packages/subagent/subagent-in-process-driver/README.md -README.md: fe9703a2bc735cfea81dbf921488edb786335f6f -README.zh.md: 5ee7447829985b71d7f2004bfaa94a98fc187ea1 +/: + en: 48d0cbb6479a9a54 + zh: 087c348c473987ef +/deepseek-ai-dsh-subagent-in-process-driver: + en: 07574fe8e07fa083 + zh: 1617f5475015bc06 +/deepseek-ai-dsh-subagent-in-process-driver/summary: + en: b26717dd72118825 + zh: ca9e400be4287a92 +/deepseek-ai-dsh-subagent-in-process-driver/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-in-process-driver/use-this-package: + en: be1a65c14a558b9e + zh: 9db7107ca2ec4b76 +/deepseek-ai-dsh-subagent-in-process-driver/use-this-package/what-one-run-provides: + en: 25243236b5740f5b + zh: 61a78dd7e6e147ba +/deepseek-ai-dsh-subagent-in-process-driver/use-this-package/the-one-input: + en: 29c896db729896a6 + zh: 5374bc93be2a4dd8 +/deepseek-ai-dsh-subagent-in-process-driver/use-this-package/what-the-child-gets: + en: 83d0b4d70227189f + zh: 0eaeb75d0843c2b9 +/deepseek-ai-dsh-subagent-in-process-driver/understand-the-implementation: + en: 58dae3be7d4ac072 + zh: 80f3af180c5d93c1 +/deepseek-ai-dsh-subagent-in-process-driver/understand-the-implementation/start-contract: + en: 345f767d40e54ffa + zh: 89fa4823080ee4a5 +/deepseek-ai-dsh-subagent-in-process-driver/understand-the-implementation/cancellation-and-ownership: + en: b57ef2abcfd01b57 + zh: ebefd069c20f1dd6 +/deepseek-ai-dsh-subagent-in-process-driver/understand-the-implementation/structured-output: + en: 102689042efe8d9d + zh: 6e9e8ffe2d4200e1 +/deepseek-ai-dsh-subagent-in-process-driver/understand-the-implementation/source-map: + en: 1afa2487d2e7273f + zh: 24ca22c87186d367 +/deepseek-ai-dsh-subagent-in-process-driver/further-exploration: + en: 092428bf90f2ed01 + zh: b5979a2a7bcfd083 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/child-agent-request: + en: 05e6180f1498fdf9 + zh: 2b05d2b97bfa67da +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/child-agent-request/what-the-model-sees: + en: 634b1242ccebcf19 + zh: a6a49f20598050c6 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/child-agent-request/token-effect: + en: 51be784700407d03 + zh: fe1a45f354cb1937 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/child-agent-request/kv-cache-effect: + en: 9d254c292e41c8de + zh: b2b1d2f2112e3268 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/structured-output-system-prompt-schema-and-results: + en: aa8f0750d887fed8 + zh: 7b0656e797f1c66d +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/structured-output-system-prompt-schema-and-results/what-the-model-sees: + en: 6d18ac880032e9d6 + zh: a99fd8d2289fc8d3 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/structured-output-system-prompt-schema-and-results/what-the-model-sees/structured-output-instruction: + en: 5b0b2689385519d0 + zh: d795d639de8afb4e +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/structured-output-system-prompt-schema-and-results/token-effect: + en: a19afb6ca2ea72f1 + zh: 51e4b80977c88619 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/structured-output-system-prompt-schema-and-results/kv-cache-effect: + en: 3563e6f87ed1d652 + zh: f77fb383f7b89861 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-start-error-indirectly: + en: 5d7172dca766092b + zh: 5d25ce70623c5cf7 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-start-error-indirectly/what-the-model-sees: + en: dfe035f5d9030a01 + zh: ad76d156002960f2 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-start-error-indirectly/token-effect: + en: d11cf9f005bdbbc8 + zh: cc2a1fa08888c5ef +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-start-error-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-result-indirectly: + en: 3aa666d3826db8da + zh: f4133701f40a93c5 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-result-indirectly/what-the-model-sees: + en: 9a8e239b45fb3d3d + zh: 1c14722ba3680ce7 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-result-indirectly/token-effect: + en: f7edbe0960717b2f + zh: fb2d58760d2b7432 +/deepseek-ai-dsh-subagent-in-process-driver/model-experience/parent-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-in-process-driver/known-limitations-and-deferred-work: + en: 00d0ed1651899c18 + zh: 74127bda3b57bd54 +/deepseek-ai-dsh-subagent-in-process-driver/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subagent/subagent-spawn-in-process/README.i18n.yaml b/packages/subagent/subagent-spawn-in-process/README.i18n.yaml index fae3963b0d..252819dbfb 100644 --- a/packages/subagent/subagent-spawn-in-process/README.i18n.yaml +++ b/packages/subagent/subagent-spawn-in-process/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/subagent/subagent-spawn-in-process/README.md -README.md: ce3909934efa1b2f5cc57ff046b892e3ec129444 -README.zh.md: 998b90ff0827e3cccc3be787e1941ca49aaeec0e +/: + en: d510765ec1bebc28 + zh: 35efb9f71f05f326 +/deepseek-ai-dsh-subagent-spawn-in-process: + en: c949befcfe1e376c + zh: 13c78d0fbbd323ae +/deepseek-ai-dsh-subagent-spawn-in-process/summary: + en: 84d0a0acfc4251fe + zh: 8480ddf68e377522 +/deepseek-ai-dsh-subagent-spawn-in-process/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent-spawn-in-process/use-this-package: + en: ca895c3af2ec6371 + zh: 51dbe9e2fa79de30 +/deepseek-ai-dsh-subagent-spawn-in-process/use-this-package/when-to-choose-it: + en: 5f14443940e59bb5 + zh: 3e8610aec21c55e8 +/deepseek-ai-dsh-subagent-spawn-in-process/use-this-package/minimal-configuration: + en: 3f53b0d5f4037171 + zh: e0f2ac931cfbef95 +/deepseek-ai-dsh-subagent-spawn-in-process/use-this-package/what-a-delegation-does: + en: 9f4e6f31ad4d86d1 + zh: 4ad77e0b80c6efcc +/deepseek-ai-dsh-subagent-spawn-in-process/understand-the-implementation: + en: 9e00b9dc2f9cf38c + zh: 60ce00ce6c3b5564 +/deepseek-ai-dsh-subagent-spawn-in-process/understand-the-implementation/design-concept: + en: 80716c24d7a0ee78 + zh: 9bead3317f5a357e +/deepseek-ai-dsh-subagent-spawn-in-process/understand-the-implementation/source-map: + en: 6252313b7a004fda + zh: 85c1b0a872d4d846 +/deepseek-ai-dsh-subagent-spawn-in-process/understand-the-implementation/run-flow: + en: 7b55a5649bc38155 + zh: 51fe220c84ca759a +/deepseek-ai-dsh-subagent-spawn-in-process/understand-the-implementation/ownership-and-scope: + en: 8af949dc29cb4a5c + zh: f4e4f9f9f4a4b7c9 +/deepseek-ai-dsh-subagent-spawn-in-process/further-exploration: + en: 742e34ea6c31adf9 + zh: 599d993ba5a3c8f1 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/child-agent-request: + en: 05e6180f1498fdf9 + zh: 2b05d2b97bfa67da +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/child-agent-request/what-the-model-sees: + en: 2035bdd8640e5a8a + zh: 5afa645d7dbe31a5 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/child-agent-request/token-effect: + en: e74d21e38e4a53a9 + zh: 6a5e3ef5fe0f4f14 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/child-agent-request/kv-cache-effect: + en: 78d800b26fb3b0af + zh: 313169b62c29af1d +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/parent-tool-result-indirectly: + en: 75d061c2151624a7 + zh: 71e58e020b60ff90 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/parent-tool-result-indirectly/what-the-model-sees: + en: 93ae79a8f38c984b + zh: 6ede5c4312685ff0 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/parent-tool-result-indirectly/token-effect: + en: ff8045aa0f466c2a + zh: e38fc5c6af2ce076 +/deepseek-ai-dsh-subagent-spawn-in-process/model-experience/parent-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-subagent-spawn-in-process/known-limitations-and-deferred-work: + en: 68720f2a663a4aad + zh: a472436c5cc2b801 +/deepseek-ai-dsh-subagent-spawn-in-process/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subagent/subagent/README.i18n.yaml b/packages/subagent/subagent/README.i18n.yaml index 97a07c3e7b..2a43314b40 100644 --- a/packages/subagent/subagent/README.i18n.yaml +++ b/packages/subagent/subagent/README.i18n.yaml @@ -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 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 packages/subagent/subagent/README.md -README.md: adffd0edfdc55177afee0390c8d1c2f7fbee7999 -README.zh.md: 79d39ca879c8a15385e1e97c6556178b04897fca +/: + en: 384d01a27a111f49 + zh: fbadc6917c3099c9 +/deepseek-ai-dsh-subagent: + en: 425344cec61f5c70 + zh: 48e8f2a2e3c1f418 +/deepseek-ai-dsh-subagent/summary: + en: 300242b82e87aa3e + zh: a4a1319487072484 +/deepseek-ai-dsh-subagent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subagent/use-this-package: + en: 4651aec03a1d2e21 + zh: 7b6d1d604bdb1bf1 +/deepseek-ai-dsh-subagent/use-this-package/enabling-delegation: + en: f66e74a5fa4e49b6 + zh: 8c3a793cc29fcc1b +/deepseek-ai-dsh-subagent/use-this-package/delegation-settings: + en: 86c982223fab1a3a + zh: d2136069185736e7 +/deepseek-ai-dsh-subagent/use-this-package/continuable-capacity: + en: 8346a0de39204c1c + zh: 9dd1d926790e5e8c +/deepseek-ai-dsh-subagent/use-this-package/one-shot-and-continuable-children: + en: 10d0a7e0513bf04b + zh: 0cf2c2d81e85d7a9 +/deepseek-ai-dsh-subagent/use-this-package/messaging-interrupting-and-discovering: + en: a38a8772a09b5c0e + zh: a896b41d1aab5ef2 +/deepseek-ai-dsh-subagent/use-this-package/failure-and-recovery: + en: 782aaaf8639c211c + zh: e2a873eece366e74 +/deepseek-ai-dsh-subagent/understand-the-implementation: + en: 74d91b364b23f88d + zh: 19cc558105efe8df +/deepseek-ai-dsh-subagent/understand-the-implementation/design-concept: + en: 26c4eb7592b77d14 + zh: c166fb6ee1a1c7d8 +/deepseek-ai-dsh-subagent/understand-the-implementation/source-map: + en: 80df1d5b9a6993c9 + zh: 6cf5550856c281aa +/deepseek-ai-dsh-subagent/understand-the-implementation/one-shot-flow: + en: 9439bd15ee2129c9 + zh: 6c275cf484efa0cf +/deepseek-ai-dsh-subagent/understand-the-implementation/continuable-flow: + en: 9703c868342826cc + zh: e300484cecf15835 +/deepseek-ai-dsh-subagent/understand-the-implementation/ownership-and-invariants: + en: 7384d01be46a2f0a + zh: 83373486ad10d6d5 +/deepseek-ai-dsh-subagent/further-exploration: + en: d1c1e87fc59ebfe5 + zh: b7ec9b870b514911 +/deepseek-ai-dsh-subagent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-subagent/model-experience/settlement-notice: + en: f7cec22ba9d3fb4f + zh: 67b1d40f9b136f71 +/deepseek-ai-dsh-subagent/model-experience/settlement-notice/what-the-model-sees: + en: 44ba290ef9896de9 + zh: 21d207c31228c0ce +/deepseek-ai-dsh-subagent/model-experience/settlement-notice/token-effect: + en: 45dc428c61f606f5 + zh: 7e9a2587e98c8ca6 +/deepseek-ai-dsh-subagent/model-experience/settlement-notice/kv-cache-effect: + en: d6b1d618083da79b + zh: 9a28942b7d53c382 +/deepseek-ai-dsh-subagent/model-experience/child-delegation-scope-statement: + en: dc8544657916e194 + zh: b0feff0764b5d903 +/deepseek-ai-dsh-subagent/model-experience/child-delegation-scope-statement/what-the-model-sees: + en: 61906b6a7b656eeb + zh: 2fa94349714efc9f +/deepseek-ai-dsh-subagent/model-experience/child-delegation-scope-statement/what-the-model-sees/the-delegation-scope-statement: + en: 960e4abc8393bcd1 + zh: e125aa2bab1570d0 +/deepseek-ai-dsh-subagent/model-experience/child-delegation-scope-statement/token-effect: + en: 4e0b922b186dc2a9 + zh: 7453563417c5b9a2 +/deepseek-ai-dsh-subagent/model-experience/child-delegation-scope-statement/kv-cache-effect: + en: 59e848fca82a46fb + zh: fcd6a8a2bb58609f +/deepseek-ai-dsh-subagent/known-limitations-and-deferred-work: + en: 0b20f405f38a2bd7 + zh: 714ad63da5cf3553 +/deepseek-ai-dsh-subagent/known-limitations-and-deferred-work/dev-note: + en: 25cc0909348666bb + zh: 95517f12de100049 diff --git a/packages/subagent/tool-subagent-control/README.i18n.yaml b/packages/subagent/tool-subagent-control/README.i18n.yaml index b8478ed970..d65d6953d7 100644 --- a/packages/subagent/tool-subagent-control/README.i18n.yaml +++ b/packages/subagent/tool-subagent-control/README.i18n.yaml @@ -1,6 +1,106 @@ -# 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 packages/subagent/tool-subagent-control/README.md -README.md: 2cfa000f1ba9f7950b28369a9b7bd3523610b579 -README.zh.md: f2154fde965899e7b4f30271846bce52414b010d +/: + en: 5413b8e52a0c8e3d + zh: 9b6d0385209ff9bb +/deepseek-ai-dsh-tool-subagent-control: + en: 465d36925c792167 + zh: 269cac314f638827 +/deepseek-ai-dsh-tool-subagent-control/summary: + en: 7464eb99b6f618eb + zh: 8c7628c8e9f163ca +/deepseek-ai-dsh-tool-subagent-control/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-subagent-control/use-this-package: + en: 27c5bbe682f0b72b + zh: b16aeb2c43f3692e +/deepseek-ai-dsh-tool-subagent-control/use-this-package/minimal-configuration: + en: 4a52c81317ec9001 + zh: ebd9f1ba920da50a +/deepseek-ai-dsh-tool-subagent-control/use-this-package/send-message: + en: d80bb1df2eb740b7 + zh: e3203d9868a82910 +/deepseek-ai-dsh-tool-subagent-control/use-this-package/interrupt-agent: + en: 01dd41fe11f294d7 + zh: f45a2e4073c0b206 +/deepseek-ai-dsh-tool-subagent-control/use-this-package/list-agents: + en: eaca9851b5b5e4b8 + zh: cf654cfa670a1d4b +/deepseek-ai-dsh-tool-subagent-control/understand-the-implementation: + en: c5cdf01a78c990f2 + zh: 53c180d726ce4502 +/deepseek-ai-dsh-tool-subagent-control/understand-the-implementation/design-concept: + en: 0af7238c690ee8d6 + zh: 5049eea23770ffed +/deepseek-ai-dsh-tool-subagent-control/understand-the-implementation/delivery-and-signal-ownership: + en: 4c7698ccea49a60b + zh: fbf129ff583e6ab9 +/deepseek-ai-dsh-tool-subagent-control/understand-the-implementation/listing-projection: + en: 44e4e03908573520 + zh: ca799bde1cfbe273 +/deepseek-ai-dsh-tool-subagent-control/understand-the-implementation/source-map: + en: a2a918cbad1a8313 + zh: 5bcddba1b2bdd26e +/deepseek-ai-dsh-tool-subagent-control/further-exploration: + en: df2bf39d0ffffd43 + zh: 4cd02551f7433c90 +/deepseek-ai-dsh-tool-subagent-control/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-subagent-control/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-subagent-control/model-experience/tool-schema/what-the-model-sees: + en: a63be096ee9c4873 + zh: cd1bd116ccc66318 +/deepseek-ai-dsh-tool-subagent-control/model-experience/tool-schema/token-effect: + en: db207dc8d5860684 + zh: ad2663b4967fbca9 +/deepseek-ai-dsh-tool-subagent-control/model-experience/tool-schema/kv-cache-effect: + en: 4b77d42b96b3519d + zh: dd393d8f0f6536c1 +/deepseek-ai-dsh-tool-subagent-control/model-experience/interrupt-result: + en: d64e936e83e89a2b + zh: b9905c33af6cca45 +/deepseek-ai-dsh-tool-subagent-control/model-experience/interrupt-result/what-the-model-sees: + en: 89305619897680ba + zh: e610a844fc09c53f +/deepseek-ai-dsh-tool-subagent-control/model-experience/interrupt-result/token-effect: + en: 5d1bcef28b5f18da + zh: 027d67d93d660e76 +/deepseek-ai-dsh-tool-subagent-control/model-experience/interrupt-result/kv-cache-effect: + en: 4a629edb36a17e32 + zh: 5a7539cfbf404c54 +/deepseek-ai-dsh-tool-subagent-control/model-experience/delivery-result: + en: ab964e307bd37dca + zh: 03f975252f838a42 +/deepseek-ai-dsh-tool-subagent-control/model-experience/delivery-result/what-the-model-sees: + en: 4a0a4955589012ae + zh: 2bbbb5196a8aa4fd +/deepseek-ai-dsh-tool-subagent-control/model-experience/delivery-result/token-effect: + en: 0f134e37e4bd9965 + zh: ceb858d01266e976 +/deepseek-ai-dsh-tool-subagent-control/model-experience/delivery-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-subagent-control/model-experience/listing-result: + en: 094e55d258f2ec2e + zh: f364bc9046530bff +/deepseek-ai-dsh-tool-subagent-control/model-experience/listing-result/what-the-model-sees: + en: 7c3afa572fca7fd2 + zh: 45b3f9e5a080fbef +/deepseek-ai-dsh-tool-subagent-control/model-experience/listing-result/token-effect: + en: d5c21b66bbbed504 + zh: 58e26de0773deeaf +/deepseek-ai-dsh-tool-subagent-control/model-experience/listing-result/kv-cache-effect: + en: 4a629edb36a17e32 + zh: 5a7539cfbf404c54 +/deepseek-ai-dsh-tool-subagent-control/known-limitations-and-deferred-work: + en: 31cd8a1934cf0093 + zh: 2fd07e05c8e58e9a +/deepseek-ai-dsh-tool-subagent-control/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subagent/tool-subagent/README.i18n.yaml b/packages/subagent/tool-subagent/README.i18n.yaml index d7216ced87..e294d69580 100644 --- a/packages/subagent/tool-subagent/README.i18n.yaml +++ b/packages/subagent/tool-subagent/README.i18n.yaml @@ -1,6 +1,121 @@ -# 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 packages/subagent/tool-subagent/README.md -README.md: 2d5ace8de9c640784aaae6bf525db61941c9f724 -README.zh.md: d4181caf32dd56ad849cd12b6461d440987c15b4 +/: + en: c6db6e2344a91be8 + zh: 4febc8331d506a22 +/deepseek-ai-dsh-tool-subagent: + en: 686fb5136bef0a3b + zh: d25d6569174a01b5 +/deepseek-ai-dsh-tool-subagent/summary: + en: 04da983479776bfa + zh: 17b955b0390dc448 +/deepseek-ai-dsh-tool-subagent/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-subagent/use-this-package: + en: 3248a28bba2ef809 + zh: 807cc32c49fcb0cb +/deepseek-ai-dsh-tool-subagent/use-this-package/minimal-configuration: + en: a8809e00166c7f2f + zh: 261432232638c445 +/deepseek-ai-dsh-tool-subagent/use-this-package/foreground-and-background-modes: + en: 8e7319bc2887ae5c + zh: 87d5abdfbe7562df +/deepseek-ai-dsh-tool-subagent/use-this-package/selecting-a-child-llm: + en: 0d37e3b3957515e4 + zh: ea1a94b2f29e7d9a +/deepseek-ai-dsh-tool-subagent/understand-the-implementation: + en: 6ce5f749256a7e6c + zh: a4f2adb04a70d9cf +/deepseek-ai-dsh-tool-subagent/understand-the-implementation/design-concept: + en: 5ceacfed4ea0c648 + zh: 005284534923d854 +/deepseek-ai-dsh-tool-subagent/understand-the-implementation/foreground-settlement: + en: ccb36af6884ec89f + zh: 41e9aa6d3cd75a41 +/deepseek-ai-dsh-tool-subagent/understand-the-implementation/background-routes: + en: dfd6306019a63bea + zh: 5055b66e19885e8d +/deepseek-ai-dsh-tool-subagent/understand-the-implementation/context-sensitive-wording: + en: 1733728ac5aa6bb0 + zh: 341ffc6e21a289af +/deepseek-ai-dsh-tool-subagent/understand-the-implementation/source-map: + en: 1f52c5f5c7caf04a + zh: dba288fd0cf51e5d +/deepseek-ai-dsh-tool-subagent/further-exploration: + en: bfe8b6bc5af43b98 + zh: dbc040e7c9ad6838 +/deepseek-ai-dsh-tool-subagent/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-subagent/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-subagent/model-experience/tool-schema/what-the-model-sees: + en: 5d88050d9496b928 + zh: 1278b3b7da4335db +/deepseek-ai-dsh-tool-subagent/model-experience/tool-schema/token-effect: + en: 1aa53b7a4c24cc25 + zh: bebd5c5ce6443259 +/deepseek-ai-dsh-tool-subagent/model-experience/tool-schema/kv-cache-effect: + en: 46f736c6c389052a + zh: a7765541030e9104 +/deepseek-ai-dsh-tool-subagent/model-experience/model-selection-and-discovery: + en: a4ca31b9cbacda6b + zh: 91ac3e0784a14697 +/deepseek-ai-dsh-tool-subagent/model-experience/model-selection-and-discovery/what-the-model-sees: + en: 1c9dd328eaf96683 + zh: 3be88d3b00f51cfa +/deepseek-ai-dsh-tool-subagent/model-experience/model-selection-and-discovery/token-effect: + en: 8137e72f630f0190 + zh: 73b1d9374b6cbccd +/deepseek-ai-dsh-tool-subagent/model-experience/model-selection-and-discovery/kv-cache-effect: + en: 7dc47a34d5574fbd + zh: bd7bd2a4da2f8ae2 +/deepseek-ai-dsh-tool-subagent/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-subagent/model-experience/system-prompt/what-the-model-sees: + en: 875f8a89292dde21 + zh: 670f911b0a149690 +/deepseek-ai-dsh-tool-subagent/model-experience/system-prompt/what-the-model-sees/tool-guidance-section: + en: 82b3cd08b3961c98 + zh: bdc2a34bcea16cac +/deepseek-ai-dsh-tool-subagent/model-experience/system-prompt/token-effect: + en: ed03868e8f551001 + zh: 53c10b979a48cf9b +/deepseek-ai-dsh-tool-subagent/model-experience/system-prompt/kv-cache-effect: + en: 5f2491d0ee8f440c + zh: 14c06b9fe7096e09 +/deepseek-ai-dsh-tool-subagent/model-experience/foreground-result: + en: d83f1f25a3719c54 + zh: 445ca808e28dc936 +/deepseek-ai-dsh-tool-subagent/model-experience/foreground-result/what-the-model-sees: + en: 7e5d19839fa69495 + zh: 0e7ff0d92571ec60 +/deepseek-ai-dsh-tool-subagent/model-experience/foreground-result/token-effect: + en: 995810727b29f85f + zh: 4ede7b437091d6ee +/deepseek-ai-dsh-tool-subagent/model-experience/foreground-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-subagent/model-experience/background-result: + en: 3f23f9211197b0b9 + zh: 8cff3c78249b66ff +/deepseek-ai-dsh-tool-subagent/model-experience/background-result/what-the-model-sees: + en: d2ba2d8a3e88478d + zh: dee910d1d271f75c +/deepseek-ai-dsh-tool-subagent/model-experience/background-result/token-effect: + en: 3c67cdb1cbf53647 + zh: bfed5f2945a79c9d +/deepseek-ai-dsh-tool-subagent/model-experience/background-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-subagent/known-limitations-and-deferred-work: + en: 30b202766dae2b9d + zh: e2654c858b5a2378 +/deepseek-ai-dsh-tool-subagent/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subprocess/README.i18n.yaml b/packages/subprocess/README.i18n.yaml index 8b95a0187a..113311965c 100644 --- a/packages/subprocess/README.i18n.yaml +++ b/packages/subprocess/README.i18n.yaml @@ -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 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 packages/subprocess/README.md -README.md: 17e1f903c3216ac4b6ad4b217c025cb94db42b29 -README.zh.md: e8c019fac739de73da77f53d817d9e15206cdb89 +/: + en: 8a625c05bd33b1ae + zh: ca401fbbcb64368f +/subprocess-subprocess-capability-family: + en: 5e231b038b3a2641 + zh: 4cc7da13fb30c672 +/subprocess-subprocess-capability-family/summary: + en: cccfd01eaced10a3 + zh: b7372e340927a6ea +/subprocess-subprocess-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/subprocess-subprocess-capability-family/packages: + en: a8043895aaaef16a + zh: 2171b5d972662b0d +/subprocess-subprocess-capability-family/related-documentation: + en: 6ad442808d72f9a0 + zh: 482e8a1b15f4c7ba +/subprocess-subprocess-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/subprocess/subprocess-local/README.i18n.yaml b/packages/subprocess/subprocess-local/README.i18n.yaml index 52a8c84a8e..e5827af896 100644 --- a/packages/subprocess/subprocess-local/README.i18n.yaml +++ b/packages/subprocess/subprocess-local/README.i18n.yaml @@ -1,6 +1,70 @@ -# 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 packages/subprocess/subprocess-local/README.md -README.md: 0e5423aecd46a18cde79437ca5707be5ee58d59b -README.zh.md: 32a1b937e5768ad87d72914fb6c8a90a33c5899f +/: + en: 6569fcd132144a11 + zh: 2f632189747feb07 +/deepseek-ai-dsh-subprocess-local: + en: 5b4986ccda3a5135 + zh: 3aac611780972806 +/deepseek-ai-dsh-subprocess-local/summary: + en: ea90a41d1f8feca7 + zh: a44f4b25ba0bdd48 +/deepseek-ai-dsh-subprocess-local/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subprocess-local/use-this-package: + en: a26b360a0d1b847a + zh: c0e1139451e51fc8 +/deepseek-ai-dsh-subprocess-local/use-this-package/mounting-the-provider: + en: 7fe1c62a71f22310 + zh: 25fe64af82c42004 +/deepseek-ai-dsh-subprocess-local/use-this-package/resolving-executables: + en: b770dddf2a9c3d1e + zh: f5cb27e63a589a1b +/deepseek-ai-dsh-subprocess-local/use-this-package/collecting-output: + en: 8dc283e0b25399c9 + zh: 9c129dce09e36c91 +/deepseek-ai-dsh-subprocess-local/use-this-package/control-transport: + en: 7f14cd108b614c98 + zh: da54e49e2b1896d2 +/deepseek-ai-dsh-subprocess-local/use-this-package/running-terminal-sessions: + en: cc8e9b90f1d2e3de + zh: f85fdcd1c783bbfc +/deepseek-ai-dsh-subprocess-local/use-this-package/shutdown-behavior: + en: cd0b8a5dc61335a5 + zh: ac5077a9ac277141 +/deepseek-ai-dsh-subprocess-local/use-this-package/what-can-go-wrong: + en: 1e1ce532b004c92b + zh: ca7274b7a9207a5d +/deepseek-ai-dsh-subprocess-local/understand-the-implementation: + en: 531a48766c666ea0 + zh: b40df533a2fd7244 +/deepseek-ai-dsh-subprocess-local/understand-the-implementation/design-concept: + en: c1f9a5ee756547b9 + zh: d47d9f6175f5cbc9 +/deepseek-ai-dsh-subprocess-local/understand-the-implementation/source-map: + en: 155e6b83a97de7a2 + zh: b8a2c29bb1635d7d +/deepseek-ai-dsh-subprocess-local/understand-the-implementation/main-flow: + en: 6b6e17fa0d1b39b7 + zh: 0b40691719ce658f +/deepseek-ai-dsh-subprocess-local/understand-the-implementation/safety-invariants: + en: 8a1c2f5be5ac659c + zh: 5c108bd23a7eee85 +/deepseek-ai-dsh-subprocess-local/further-exploration: + en: b15c86ee670899d9 + zh: a18f23e9f3e36727 +/deepseek-ai-dsh-subprocess-local/model-experience: + en: a39b4c2a8755aff2 + zh: 1c13e5e0f7db3dab +/deepseek-ai-dsh-subprocess-local/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: d75d48f485447a74 +/deepseek-ai-dsh-subprocess-local/known-limitations-and-deferred-work: + en: 8c32701df6418b62 + zh: 3d8da68737d2f500 +/deepseek-ai-dsh-subprocess-local/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/subprocess/subprocess/README.i18n.yaml b/packages/subprocess/subprocess/README.i18n.yaml index d2fb05b6b7..73986014a7 100644 --- a/packages/subprocess/subprocess/README.i18n.yaml +++ b/packages/subprocess/subprocess/README.i18n.yaml @@ -1,6 +1,73 @@ -# 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 packages/subprocess/subprocess/README.md -README.md: 0c5a56987a44e71a174065e7bd9d3caca590d45b -README.zh.md: 42141d9828d4720b9009be785931fdebfda21511 +/: + en: 04735af7a998f2ae + zh: ab6bf3d0f098877a +/deepseek-ai-dsh-subprocess: + en: f692e3fa2c598b70 + zh: f7d899b31647ead9 +/deepseek-ai-dsh-subprocess/summary: + en: 4c3e83922d6ba18c + zh: d794f5cb99939e6d +/deepseek-ai-dsh-subprocess/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-subprocess/use-this-package: + en: a43391b5840a4c58 + zh: a0a9c3fa577d92c0 +/deepseek-ai-dsh-subprocess/use-this-package/mounting-the-service: + en: 82be7c63ab95994f + zh: 8810e7c489b444df +/deepseek-ai-dsh-subprocess/use-this-package/starting-a-managed-process: + en: 891cb74d5d35095c + zh: 296cb1890116fb05 +/deepseek-ai-dsh-subprocess/use-this-package/choosing-how-output-is-delivered: + en: c02fe7246326c164 + zh: 1d31096e31e1feee +/deepseek-ai-dsh-subprocess/use-this-package/using-a-control-pipe: + en: 0d1d6d55cd5f7ec4 + zh: bab0c3f51ed743cb +/deepseek-ai-dsh-subprocess/use-this-package/managing-process-lifetime: + en: 83d662d278184411 + zh: 2c4e7fbe76823fa8 +/deepseek-ai-dsh-subprocess/use-this-package/running-a-terminal-session: + en: e3631497344c2ebd + zh: c4ebc7b08f0a316e +/deepseek-ai-dsh-subprocess/use-this-package/environment-every-child-starts-from: + en: 4d4cbb311575d071 + zh: 7be2d265adb661bc +/deepseek-ai-dsh-subprocess/use-this-package/what-can-go-wrong: + en: 51f2f43087a1ed18 + zh: 6d2ebb099b707df3 +/deepseek-ai-dsh-subprocess/understand-the-implementation: + en: 25cd344c959cfd9e + zh: 045880776ab82d1e +/deepseek-ai-dsh-subprocess/understand-the-implementation/design-concept: + en: 07201ec2256c25f6 + zh: 046109cfa92194f3 +/deepseek-ai-dsh-subprocess/understand-the-implementation/source-map: + en: 30de3ce459e02570 + zh: ff32b0cb28da5772 +/deepseek-ai-dsh-subprocess/understand-the-implementation/data-model-and-flow: + en: 9998dc0a990fbcf1 + zh: ba179617f60cb9bc +/deepseek-ai-dsh-subprocess/understand-the-implementation/lifecycle-and-invariants: + en: a132325eea7cadb4 + zh: 434cbbc61ff9cd0e +/deepseek-ai-dsh-subprocess/further-exploration: + en: f560a70ff8ad00db + zh: 1a51eca4b30055cb +/deepseek-ai-dsh-subprocess/model-experience: + en: 36d8f1820f81de29 + zh: da18a4123bdd28b7 +/deepseek-ai-dsh-subprocess/model-experience/kv-cache-effect: + en: e290ccc9b3c92c08 + zh: d75d48f485447a74 +/deepseek-ai-dsh-subprocess/known-limitations-and-deferred-work: + en: 0b1c46aec1ba628d + zh: cf2a0db9d0682155 +/deepseek-ai-dsh-subprocess/known-limitations-and-deferred-work/dev-note: + en: 56709c22873429b5 + zh: c0e86c62982a3e29 diff --git a/packages/subprocess/win32-process/README.i18n.yaml b/packages/subprocess/win32-process/README.i18n.yaml index 77ef70c41d..09c8ba1b52 100644 --- a/packages/subprocess/win32-process/README.i18n.yaml +++ b/packages/subprocess/win32-process/README.i18n.yaml @@ -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 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 packages/subprocess/win32-process/README.md -README.md: 155ca3807791a83fef437af67312b3480ce7d2a2 -README.zh.md: f0c4439af27ef45c88d73bcba54851d789da063d +/: + en: db276aeb82a48db9 + zh: 1c8a9dd88ae46710 +/deepseek-ai-dsh-win32-process: + en: d0f1b3fbea235dfa + zh: 8e253d46b74becdb +/deepseek-ai-dsh-win32-process/summary: + en: 42ad2ffcf9f12d54 + zh: cbfe9568356ec50a +/deepseek-ai-dsh-win32-process/table-of-contents: + en: a3450c8cdd5f5802 + zh: 15eec66f42e42ce7 +/deepseek-ai-dsh-win32-process/behavior: + en: 77806095cd7f781d + zh: 69d09cabc4d49185 +/deepseek-ai-dsh-win32-process/header-verification: + en: 2b60a9001b480546 + zh: 12a621e421c7d789 +/deepseek-ai-dsh-win32-process/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-win32-process/model-experience/process-primitives: + en: b002d2485eefd20f + zh: fdf07032ec9556bd +/deepseek-ai-dsh-win32-process/model-experience/process-primitives/what-the-model-sees: + en: 973baec28c6a918c + zh: 057044d193626dd6 +/deepseek-ai-dsh-win32-process/model-experience/process-primitives/token-effect: + en: 0d02f5258e0937b3 + zh: 3c0d20a82023c891 +/deepseek-ai-dsh-win32-process/model-experience/process-primitives/kv-cache-effect: + en: c5961328f1ae01cf + zh: 890142bc50091faf +/deepseek-ai-dsh-win32-process/known-limitations-and-deferred-work: + en: e97c61be17a1db4f + zh: 11dbf9721db63877 +/deepseek-ai-dsh-win32-process/known-limitations-and-deferred-work/dev-note: + en: b395f1375ae2d653 + zh: 39f0fb47eedc996c diff --git a/packages/terminal/README.i18n.yaml b/packages/terminal/README.i18n.yaml index cc9cf742ac..81ab999d6f 100644 --- a/packages/terminal/README.i18n.yaml +++ b/packages/terminal/README.i18n.yaml @@ -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 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 packages/terminal/README.md -README.md: 3f63b1b1f8de3dbe9cc23b64849886cada67d4cb -README.zh.md: a3c21d9f90fea2347abbff4c3e310011f69e21de +/: + en: fdd04a148c1d980e + zh: 49025df3a0380a37 +/terminal-persistent-pty-capability-family: + en: 23811d44b564b29d + zh: a74d2f7625f5f6dd +/terminal-persistent-pty-capability-family/summary: + en: 46a33b055e27a19a + zh: 63be22dcced5db81 +/terminal-persistent-pty-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/terminal-persistent-pty-capability-family/packages: + en: 5e04c5c04ff4133b + zh: 55913a1fc3537342 +/terminal-persistent-pty-capability-family/related-documentation: + en: 2abf795bb34e5aea + zh: a268d0d5bb74e4d7 +/terminal-persistent-pty-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/terminal/terminal-bash/README.i18n.yaml b/packages/terminal/terminal-bash/README.i18n.yaml index 39eb44a0cc..f908f43f13 100644 --- a/packages/terminal/terminal-bash/README.i18n.yaml +++ b/packages/terminal/terminal-bash/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/terminal/terminal-bash/README.md -README.md: 466a42f46844d16b85d8754df0bd910361e2e401 -README.zh.md: 7ca41883f6c807102c75b25e531187a7ab148cbf +/: + en: 7451cb97579aa088 + zh: 836bff293fae7bd3 +/deepseek-ai-dsh-terminal-bash: + en: 70eb464a6754f633 + zh: f7ad67d8a9eb7195 +/deepseek-ai-dsh-terminal-bash/summary: + en: b50ba02f6602a1fd + zh: 1c954a0e0999280d +/deepseek-ai-dsh-terminal-bash/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-terminal-bash/use-this-package: + en: 13e1b604a235290e + zh: 5292c92ffe20537e +/deepseek-ai-dsh-terminal-bash/use-this-package/when-to-choose-it: + en: f4304ced55e55d4f + zh: 739d7a16691e4cc0 +/deepseek-ai-dsh-terminal-bash/use-this-package/composition: + en: 71449ef1985b2f1b + zh: 562e9b5ef73cd5e1 +/deepseek-ai-dsh-terminal-bash/use-this-package/configuration: + en: 229375735e02e80a + zh: 347c617ae312643a +/deepseek-ai-dsh-terminal-bash/use-this-package/shell-dialects-and-readiness: + en: bab340c3347f1794 + zh: a4c32b651fea000d +/deepseek-ai-dsh-terminal-bash/use-this-package/sandboxing-and-safe-operation: + en: 39e0f0b429b024a7 + zh: 440171193664d13b +/deepseek-ai-dsh-terminal-bash/use-this-package/observable-outcomes-and-failures: + en: 71726aa75e303acd + zh: 4dc311eeed75fa09 +/deepseek-ai-dsh-terminal-bash/understand-the-implementation: + en: 97f4f07114f5a995 + zh: d30b07058a3103c7 +/deepseek-ai-dsh-terminal-bash/understand-the-implementation/design-concept: + en: 5808eba7c8ff1993 + zh: c85f1ab0a869c177 +/deepseek-ai-dsh-terminal-bash/understand-the-implementation/source-map: + en: 9a525f7a7228a09b + zh: d57537edfacc9f8b +/deepseek-ai-dsh-terminal-bash/understand-the-implementation/readiness-model: + en: a768d621c2ea2585 + zh: 8213317da48766e3 +/deepseek-ai-dsh-terminal-bash/understand-the-implementation/send-cancellation-and-teardown: + en: 025325caab883327 + zh: 1decfdea61e95ae1 +/deepseek-ai-dsh-terminal-bash/understand-the-implementation/sandbox-mode-fence: + en: a88b693ec539ac28 + zh: a309bbe671166027 +/deepseek-ai-dsh-terminal-bash/further-exploration: + en: 648ee87712ed5c66 + zh: 6444df8b1fabbc17 +/deepseek-ai-dsh-terminal-bash/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-terminal-bash/model-experience/indirect-consumer: + en: a601a3c4f5b848cd + zh: ec617f79f706aaa1 +/deepseek-ai-dsh-terminal-bash/model-experience/indirect-consumer/what-the-model-sees: + en: ffd1d7a3a65ce703 + zh: 6e892fb3aa6ac293 +/deepseek-ai-dsh-terminal-bash/model-experience/indirect-consumer/token-effect: + en: 41bd9bec80350376 + zh: bdd2db111e86282f +/deepseek-ai-dsh-terminal-bash/model-experience/indirect-consumer/kv-cache-effect: + en: 4ded19a792b5b94a + zh: 82029b44250df6a0 +/deepseek-ai-dsh-terminal-bash/model-experience/sandbox-policy-context: + en: 0342db1221081250 + zh: 6a510f03982e2d56 +/deepseek-ai-dsh-terminal-bash/model-experience/sandbox-policy-context/what-the-model-sees: + en: d9cc7077b03fa969 + zh: 91af4f3451603759 +/deepseek-ai-dsh-terminal-bash/model-experience/sandbox-policy-context/token-effect: + en: d3b7f8f648fd0aa4 + zh: 954f662ddafaedbb +/deepseek-ai-dsh-terminal-bash/model-experience/sandbox-policy-context/kv-cache-effect: + en: 5e4dc482b93e2b06 + zh: 5b56af99bcfd74ed +/deepseek-ai-dsh-terminal-bash/known-limitations-and-deferred-work: + en: 2dc221de0d3a76a7 + zh: 822cef044e765459 +/deepseek-ai-dsh-terminal-bash/known-limitations-and-deferred-work/dev-note: + en: 979c4600ed8a81d5 + zh: 4016ea615f638036 diff --git a/packages/terminal/terminal/README.i18n.yaml b/packages/terminal/terminal/README.i18n.yaml index 33e9890aaa..ec4e1fe120 100644 --- a/packages/terminal/terminal/README.i18n.yaml +++ b/packages/terminal/terminal/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/terminal/terminal/README.md -README.md: 99b2a687cf7e1a581c48ebbc877bf226180077a1 -README.zh.md: ea4f926c204442832277dd3cacc30c2b0d59c8c3 +/: + en: 3d90ab1819787962 + zh: d5279e899341168a +/deepseek-ai-dsh-terminal: + en: 51faab4a45b4d0a3 + zh: c026cbe279584a55 +/deepseek-ai-dsh-terminal/summary: + en: b275cca5aa0ccbd6 + zh: 0452420c4b45c7db +/deepseek-ai-dsh-terminal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-terminal/use-this-package: + en: 51bfe428d2b44ee2 + zh: 557154468269985e +/deepseek-ai-dsh-terminal/use-this-package/when-to-choose-it: + en: c4244a1757ca3584 + zh: b6fb10e30146b347 +/deepseek-ai-dsh-terminal/use-this-package/composition: + en: c6562461d8c66517 + zh: 8bab392367901144 +/deepseek-ai-dsh-terminal/use-this-package/what-sessions-give-you: + en: 6527302f4ad84cbb + zh: 8edc988f1d0a3cee +/deepseek-ai-dsh-terminal/use-this-package/ownership-and-isolation: + en: 47820d85ea37cb36 + zh: 857686d08af67fcb +/deepseek-ai-dsh-terminal/use-this-package/observable-outcomes-and-failures: + en: 4fcedb18b5e8d5f2 + zh: d72bb1a45e45cfff +/deepseek-ai-dsh-terminal/understand-the-implementation: + en: 0d0669b98b14a3dd + zh: 57416c205270e4e1 +/deepseek-ai-dsh-terminal/understand-the-implementation/design-concept: + en: 6bae42fb7275816f + zh: 5f75e1b26074108c +/deepseek-ai-dsh-terminal/understand-the-implementation/source-map: + en: a958f52bab5cf58d + zh: 5ae1e96dc2a5a09c +/deepseek-ai-dsh-terminal/understand-the-implementation/data-model-and-lifecycle: + en: a2adfa2708882e19 + zh: 002f257fd8c4addb +/deepseek-ai-dsh-terminal/understand-the-implementation/ownership-and-cleanup-rules: + en: 7af36e58919e41d5 + zh: 4fe7b4db1099bcbf +/deepseek-ai-dsh-terminal/understand-the-implementation/send-reservation: + en: 5815723cd0c6089c + zh: 0c612ffa4b8c466c +/deepseek-ai-dsh-terminal/further-exploration: + en: 0e744f900665e8ad + zh: bd7b20a82fad207e +/deepseek-ai-dsh-terminal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-terminal/model-experience/indirect-consumer: + en: a601a3c4f5b848cd + zh: ec617f79f706aaa1 +/deepseek-ai-dsh-terminal/model-experience/indirect-consumer/what-the-model-sees: + en: be5049f4851a1b2a + zh: 056ddf9f9f1fc112 +/deepseek-ai-dsh-terminal/model-experience/indirect-consumer/token-effect: + en: 477da21b0a5be3a6 + zh: 3ae1d37fe671ef96 +/deepseek-ai-dsh-terminal/model-experience/indirect-consumer/kv-cache-effect: + en: 2d1f12c1eb4164e5 + zh: 7d22b2cd3f9649ff +/deepseek-ai-dsh-terminal/known-limitations-and-deferred-work: + en: a133ebc47a4df34f + zh: 9bb949487ee566d5 +/deepseek-ai-dsh-terminal/known-limitations-and-deferred-work/dev-note: + en: 112f870e68bd1ff3 + zh: 693f37bbd32497a0 +/deepseek-ai-dsh-terminal/known-limitations-and-deferred-work/dev-note/undecided-directions: + en: 3c5203a9c40a38ef + zh: a7660ca08bd0d279 diff --git a/packages/terminal/tool-terminal/README.i18n.yaml b/packages/terminal/tool-terminal/README.i18n.yaml index 776b71415b..6898124046 100644 --- a/packages/terminal/tool-terminal/README.i18n.yaml +++ b/packages/terminal/tool-terminal/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/terminal/tool-terminal/README.md -README.md: 20fec33477d817e05cdd87228f6777ff5cb24f19 -README.zh.md: bc78e1800ed6278bc193a685c016d809d1704e2f +/: + en: fc74eecdf1f2ad5b + zh: dc9c2a28ce96ce67 +/deepseek-ai-dsh-tool-terminal: + en: 47fa84b67ff171b9 + zh: bbd625bbf85694e1 +/deepseek-ai-dsh-tool-terminal/summary: + en: c0e810d4279333a5 + zh: 7e79b6a63fa10029 +/deepseek-ai-dsh-tool-terminal/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-terminal/use-this-package: + en: dcc6b2ac23494026 + zh: f5b755ec75994458 +/deepseek-ai-dsh-tool-terminal/use-this-package/the-six-tools: + en: 3e9b6211dd72ec64 + zh: aa4cd15195cb43d6 +/deepseek-ai-dsh-tool-terminal/use-this-package/composition: + en: 4ce2a232b60ff77d + zh: 3a8a0f13371ca6b9 +/deepseek-ai-dsh-tool-terminal/use-this-package/configuration: + en: 0af09df923fcb322 + zh: 6d9d766c24c530bc +/deepseek-ai-dsh-tool-terminal/use-this-package/background-sends: + en: 2ad49d4f69deb06d + zh: 5f29972b5feec7e3 +/deepseek-ai-dsh-tool-terminal/use-this-package/observable-outcomes-and-failures: + en: 321a982fdbbf4ada + zh: 8c2636e5379815e1 +/deepseek-ai-dsh-tool-terminal/understand-the-implementation: + en: 6302fca8fef89136 + zh: 6327d56edb798ab2 +/deepseek-ai-dsh-tool-terminal/understand-the-implementation/design-concept: + en: dc500eeff749a06f + zh: 9402f5005d7ca338 +/deepseek-ai-dsh-tool-terminal/understand-the-implementation/source-map: + en: a59f4e76dc926bed + zh: 24813cb1bd8fbf32 +/deepseek-ai-dsh-tool-terminal/understand-the-implementation/result-bounding: + en: c1953779a1617d09 + zh: cc6a4a6e76fa021c +/deepseek-ai-dsh-tool-terminal/understand-the-implementation/ui-render-intents: + en: 03e5bb37f0c3aada + zh: 8d51eeb758eabe9c +/deepseek-ai-dsh-tool-terminal/further-exploration: + en: 45a0c33ed8104fb1 + zh: ae50c9e583ef4867 +/deepseek-ai-dsh-tool-terminal/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-terminal/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-terminal/model-experience/system-prompt/what-the-model-sees: + en: 99887ae1de81aaeb + zh: 4846a1d3ea8a3dc3 +/deepseek-ai-dsh-tool-terminal/model-experience/system-prompt/what-the-model-sees/terminal-guidance: + en: 3ab4211f41e40211 + zh: b730cc3f278be17c +/deepseek-ai-dsh-tool-terminal/model-experience/system-prompt/token-effect: + en: c9d6d1a8238b74ab + zh: 7f4b12d6180b9bac +/deepseek-ai-dsh-tool-terminal/model-experience/system-prompt/kv-cache-effect: + en: 7fdc10b826aeeb51 + zh: 998c86c09efe43bd +/deepseek-ai-dsh-tool-terminal/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-terminal/model-experience/tool-schemas/what-the-model-sees: + en: 32127d768242d8c4 + zh: 3095d987d6011f44 +/deepseek-ai-dsh-tool-terminal/model-experience/tool-schemas/token-effect: + en: 824644a1f5fe76df + zh: b34c7dd78c5ce3cd +/deepseek-ai-dsh-tool-terminal/model-experience/tool-schemas/kv-cache-effect: + en: c8cbbef533bdb90f + zh: c0b00813b8419f46 +/deepseek-ai-dsh-tool-terminal/model-experience/tool-results-and-task-context: + en: 54e0c8a019f02479 + zh: 7331b10d1a455d59 +/deepseek-ai-dsh-tool-terminal/model-experience/tool-results-and-task-context/what-the-model-sees: + en: cc1e88a508d0679e + zh: a219be277705c0ab +/deepseek-ai-dsh-tool-terminal/model-experience/tool-results-and-task-context/token-effect: + en: e4746b7b386944df + zh: be52cd2fd38276b5 +/deepseek-ai-dsh-tool-terminal/model-experience/tool-results-and-task-context/kv-cache-effect: + en: ac583ab16185a93c + zh: 78df55a519b2ec1f +/deepseek-ai-dsh-tool-terminal/known-limitations-and-deferred-work: + en: ba974b703d6ed0bc + zh: 655810d5d338343c +/deepseek-ai-dsh-tool-terminal/known-limitations-and-deferred-work/dev-note: + en: a4c4901129addb49 + zh: 78f339ece6da423b diff --git a/packages/test-support/README.i18n.yaml b/packages/test-support/README.i18n.yaml index 3ddf790562..bd9356f42c 100644 --- a/packages/test-support/README.i18n.yaml +++ b/packages/test-support/README.i18n.yaml @@ -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 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 packages/test-support/README.md -README.md: 88dfcb941aaac3e7c36ddb484b655b37e6bb9c2a -README.zh.md: 8034b8fb79bc229d79f15a11a683346d8d1582b4 +/: + en: 153552d99906a932 + zh: 1ec65b3c667ee9e0 +/packages-test-support: + en: 26c7cdd3ac864a70 + zh: 9abb6890cea6d237 +/packages-test-support/summary: + en: bff3516d0a7412e5 + zh: 8f50c44d73116bed +/packages-test-support/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-test-support/packages: + en: 94395ff952ce77ee + zh: 4ae6afc3fe0c71dd +/packages-test-support/related-documentation: + en: 268c38e4774534b5 + zh: 73ebf722cc254644 +/packages-test-support/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/test-support/agent-loop-testkit/README.i18n.yaml b/packages/test-support/agent-loop-testkit/README.i18n.yaml index 729da4df08..d937d7bfb5 100644 --- a/packages/test-support/agent-loop-testkit/README.i18n.yaml +++ b/packages/test-support/agent-loop-testkit/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/test-support/agent-loop-testkit/README.md -README.md: abcd5966399998fbbeea5ac7573a9ee4085e05ca -README.zh.md: 1ff404930dae45d6453ed4b00486e4059b9d8cff +/: + en: 56bf98b380f80f74 + zh: 4e26deb963e89c68 +/deepseek-ai-dsh-agent-loop-testkit: + en: 52b308fffde03f7e + zh: e7b7ae2c1fdc2ed4 +/deepseek-ai-dsh-agent-loop-testkit/summary: + en: 75e381f4663191cb + zh: ec2aa78d37d3459f +/deepseek-ai-dsh-agent-loop-testkit/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-agent-loop-testkit/use-this-package: + en: c0e407323250d8a9 + zh: 0d0d6c7862c3d61e +/deepseek-ai-dsh-agent-loop-testkit/use-this-package/drive-a-production-agent: + en: 55af6e8dcc16bf46 + zh: 9e1a6a7f70fde817 +/deepseek-ai-dsh-agent-loop-testkit/use-this-package/build-a-structural-agent-stub: + en: 0b80eeb902e129d0 + zh: 93352ffbc3154bef +/deepseek-ai-dsh-agent-loop-testkit/use-this-package/when-to-use-it: + en: 7afa2a3c8ff17664 + zh: 6c8cad1daf3a5df3 +/deepseek-ai-dsh-agent-loop-testkit/use-this-package/what-can-go-wrong: + en: 41914c28f6796ea8 + zh: 52d8f4bf3e4f447a +/deepseek-ai-dsh-agent-loop-testkit/understand-the-implementation: + en: b2297e57abf5258a + zh: 4595256c059896ce +/deepseek-ai-dsh-agent-loop-testkit/understand-the-implementation/design: + en: 8fd7577505e2efa7 + zh: 6bbf46bcf9e3f5bc +/deepseek-ai-dsh-agent-loop-testkit/further-exploration: + en: 60f39b14b0ccbcf6 + zh: f193710189d3cc10 +/deepseek-ai-dsh-agent-loop-testkit/model-experience: + en: c21ad81372e78a7c + zh: 09aff9564389400b +/deepseek-ai-dsh-agent-loop-testkit/model-experience/kv-cache-effect: + en: be3fa044c8f27bf0 + zh: bf187c9c93627193 +/deepseek-ai-dsh-agent-loop-testkit/known-limitations-and-deferred-work: + en: f5d4afb4bb94709c + zh: 9a1a57a5efebec82 +/deepseek-ai-dsh-agent-loop-testkit/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/client-runtime/README.i18n.yaml b/packages/test-support/client-runtime/README.i18n.yaml index aa99103e9c..55ec4b8fd6 100644 --- a/packages/test-support/client-runtime/README.i18n.yaml +++ b/packages/test-support/client-runtime/README.i18n.yaml @@ -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 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 packages/test-support/client-runtime/README.md -README.md: 06455888a87fa03b1960574d25cbc9ce69e2c9aa -README.zh.md: edad3ae12b76fef8ed230953866341d345e0cdc6 +/: + en: 6fd77b7a27000bf1 + zh: 4a9606aa75285111 +/deepseek-ai-dsh-client-test-runtime: + en: edb01d7d9545062d + zh: de5e5ac8a9ff2f9b +/deepseek-ai-dsh-client-test-runtime/summary: + en: ff69de920b4ab273 + zh: 225437473535326a +/deepseek-ai-dsh-client-test-runtime/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-client-test-runtime/use-this-package: + en: 12afbb217bc06678 + zh: c07f001ed8bb3300 +/deepseek-ai-dsh-client-test-runtime/use-this-package/setting-up-a-feature-spec: + en: db486a54e1ff92ca + zh: b7cbb4078eedce4e +/deepseek-ai-dsh-client-test-runtime/use-this-package/local-dom-snapshots: + en: 1abbbed6cc4cf57b + zh: ab3975178b589653 +/deepseek-ai-dsh-client-test-runtime/use-this-package/scripting-remote-answers-and-failures: + en: cbcfc9a331783c98 + zh: 1cc2f8e21a3d0dd4 +/deepseek-ai-dsh-client-test-runtime/use-this-package/whole-client-tier: + en: 1442fc215c8128e8 + zh: 8439861b08e46ea2 +/deepseek-ai-dsh-client-test-runtime/use-this-package/roster-and-startup-behavior: + en: 964236f295b61c0c + zh: 863a9342b1169ad8 +/deepseek-ai-dsh-client-test-runtime/use-this-package/when-to-use-it: + en: eb2f9bc90acb7a62 + zh: cb59a2134bc83106 +/deepseek-ai-dsh-client-test-runtime/use-this-package/what-can-go-wrong: + en: c6bfe837a9221cf5 + zh: 8d8fadea54f9e295 +/deepseek-ai-dsh-client-test-runtime/understand-the-implementation: + en: 70d19a7761d06ac9 + zh: 2a3e648ee3dc51c1 +/deepseek-ai-dsh-client-test-runtime/understand-the-implementation/design: + en: 3264640018c1a0e8 + zh: d777e0b8ad8b602f +/deepseek-ai-dsh-client-test-runtime/understand-the-implementation/source-map: + en: 1c38acf76aef7251 + zh: 6c104a965263f443 +/deepseek-ai-dsh-client-test-runtime/understand-the-implementation/lifecycle: + en: b42779f364504719 + zh: a10bad7ea1161388 +/deepseek-ai-dsh-client-test-runtime/further-exploration: + en: 7da91d03f5e40b35 + zh: c35021982fdde126 +/deepseek-ai-dsh-client-test-runtime/model-experience: + en: 53b590e95981d312 + zh: 326a89a5a4e15155 +/deepseek-ai-dsh-client-test-runtime/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-client-test-runtime/known-limitations-and-deferred-work: + en: da5c7983453b2515 + zh: 7f558354e84abff5 +/deepseek-ai-dsh-client-test-runtime/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/llm-mock-server/README.i18n.yaml b/packages/test-support/llm-mock-server/README.i18n.yaml index 22fcf568b1..fea5816802 100644 --- a/packages/test-support/llm-mock-server/README.i18n.yaml +++ b/packages/test-support/llm-mock-server/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/test-support/llm-mock-server/README.md -README.md: 2f83cf66c02728820a4f8aa6f14b1a091d092626 -README.zh.md: ad85853fb4a20c3ccdb444508da8032c18d7538a +/: + en: 7a361871c93c1d91 + zh: dd8097d1293fa845 +/deepseek-ai-dsh-llm-mock-server: + en: bf31466ee0c85b69 + zh: 77ac4edc39b8fc19 +/deepseek-ai-dsh-llm-mock-server/summary: + en: a9e09bb7e96cc08a + zh: a317c2318fda0b60 +/deepseek-ai-dsh-llm-mock-server/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm-mock-server/use-this-package: + en: 63ee5ceab28cd036 + zh: d0028db082c0eb66 +/deepseek-ai-dsh-llm-mock-server/use-this-package/running-it-standalone: + en: d0e61cdbdfb31f04 + zh: ee15e7717cd58253 +/deepseek-ai-dsh-llm-mock-server/use-this-package/scripting-behaviors: + en: 6b7a2b230324c945 + zh: b90a504e7eef1ed6 +/deepseek-ai-dsh-llm-mock-server/use-this-package/random-mode: + en: 8287cedf469f450f + zh: cdf4509f60441983 +/deepseek-ai-dsh-llm-mock-server/use-this-package/timing-and-content-controls: + en: 82bfb84a4c299dcb + zh: faa501b565972dbf +/deepseek-ai-dsh-llm-mock-server/use-this-package/what-can-go-wrong: + en: 36649554f10ab587 + zh: ef58d0b44e514387 +/deepseek-ai-dsh-llm-mock-server/understand-the-implementation: + en: 14ffdce5018881ec + zh: 7701df55150a8704 +/deepseek-ai-dsh-llm-mock-server/understand-the-implementation/design: + en: 393a6ca8f1eb021e + zh: d71bc369d550b527 +/deepseek-ai-dsh-llm-mock-server/understand-the-implementation/source-map: + en: ac683a0f364b53e4 + zh: 3b4c782b56e024db +/deepseek-ai-dsh-llm-mock-server/understand-the-implementation/wire-flow: + en: 34abeb79b2e0cdcd + zh: d175185e4f1cc190 +/deepseek-ai-dsh-llm-mock-server/further-exploration: + en: 79a13f659787f291 + zh: e9068375f5a55211 +/deepseek-ai-dsh-llm-mock-server/model-experience: + en: cab9e731c97838bd + zh: 9a540b7a27929ea9 +/deepseek-ai-dsh-llm-mock-server/model-experience/kv-cache-effect: + en: 59d1d037a1ddde08 + zh: 08a72ec95d5bf454 +/deepseek-ai-dsh-llm-mock-server/known-limitations-and-deferred-work: + en: 968ce23ce200caf5 + zh: 953408a424bc0297 +/deepseek-ai-dsh-llm-mock-server/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/llm-replay/README.i18n.yaml b/packages/test-support/llm-replay/README.i18n.yaml index 125108504b..13543bcd00 100644 --- a/packages/test-support/llm-replay/README.i18n.yaml +++ b/packages/test-support/llm-replay/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/test-support/llm-replay/README.md -README.md: 1124572ce28375a1d67b474c23dbe29000124f01 -README.zh.md: ee7f75509687da17867adbb5e414b74b8775addf +/: + en: 80e8e69cb5216e23 + zh: cd84f0762bc67487 +/deepseek-ai-dsh-llm-replay: + en: dd20eb4783680487 + zh: 990036cd77298507 +/deepseek-ai-dsh-llm-replay/summary: + en: 9db70d252b8e2902 + zh: 26c3e40a0fef9b53 +/deepseek-ai-dsh-llm-replay/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-llm-replay/use-this-package: + en: e2116be9c7a5c18f + zh: dc89da423decf4aa +/deepseek-ai-dsh-llm-replay/use-this-package/mounting-it: + en: 8885809b3bc7da3e + zh: cb3f1a3268164d11 +/deepseek-ai-dsh-llm-replay/use-this-package/how-the-fixture-works: + en: d7dd048cd69e723d + zh: 9f5dfa5186549cd0 +/deepseek-ai-dsh-llm-replay/use-this-package/nested-agents: + en: 7745c49d10a63b0e + zh: 937b954c664f1973 +/deepseek-ai-dsh-llm-replay/use-this-package/failure-modes-and-overrides: + en: 319e95521a4a06fe + zh: 884c8299028df8a3 +/deepseek-ai-dsh-llm-replay/use-this-package/what-can-go-wrong: + en: 965da31d63ec88fe + zh: 8ca1428daae5d583 +/deepseek-ai-dsh-llm-replay/understand-the-implementation: + en: 1d2dbd8b50da6f22 + zh: ab738914c74212ff +/deepseek-ai-dsh-llm-replay/understand-the-implementation/design: + en: dfd1dd70ea389c66 + zh: 3c0f2e0ee601e3f5 +/deepseek-ai-dsh-llm-replay/understand-the-implementation/source-map: + en: cbf5c51583663671 + zh: 794ec0b8873736cc +/deepseek-ai-dsh-llm-replay/understand-the-implementation/binding-and-stream-flow: + en: 484c98a2679b218f + zh: 8d3266a0f3deac87 +/deepseek-ai-dsh-llm-replay/further-exploration: + en: 3ae8fe611d1e1335 + zh: bc4f80df80e879bf +/deepseek-ai-dsh-llm-replay/model-experience: + en: ad4fe7025029da90 + zh: 1cced10c67323c37 +/deepseek-ai-dsh-llm-replay/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-llm-replay/known-limitations-and-deferred-work: + en: 003f1d9c1ec49eed + zh: 116bcde9030e4cb4 +/deepseek-ai-dsh-llm-replay/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/loader-smoke/README.i18n.yaml b/packages/test-support/loader-smoke/README.i18n.yaml index e06664e1d3..a3ba0d25f0 100644 --- a/packages/test-support/loader-smoke/README.i18n.yaml +++ b/packages/test-support/loader-smoke/README.i18n.yaml @@ -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 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 packages/test-support/loader-smoke/README.md -README.md: 2bdee79f8e6d769f9713466128c931d749fc6950 -README.zh.md: ba83f0def2be1a77c7d2514b9c7b9ed76b3ec0ad +/: + en: 00a7ac59f751e4d0 + zh: 35334966b956621d +/deepseek-ai-dsh-loader-smoke: + en: 28364f937b7e24e7 + zh: 6e5d0574c5331643 +/deepseek-ai-dsh-loader-smoke/summary: + en: b7b36ca4623a546e + zh: 8c9be89d36f19423 +/deepseek-ai-dsh-loader-smoke/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-loader-smoke/use-this-package: + en: 682780f6cbeb85cb + zh: 07a2458db985471a +/deepseek-ai-dsh-loader-smoke/use-this-package/booting-an-application-fixture: + en: e2144d78d4e83030 + zh: b3e415f69dac20a2 +/deepseek-ai-dsh-loader-smoke/use-this-package/testing-a-shipped-profile: + en: aa24542429ab0917 + zh: 0725fd0950e0993b +/deepseek-ai-dsh-loader-smoke/use-this-package/driving-a-fixture-turn: + en: c99402b3d2219738 + zh: cbff00f4bfb7d625 +/deepseek-ai-dsh-loader-smoke/use-this-package/source-or-built-mode: + en: 312abd1eddcc5015 + zh: 4fb5c6842f4d49d1 +/deepseek-ai-dsh-loader-smoke/use-this-package/what-can-go-wrong: + en: cd38599b474efc54 + zh: 353237fb992a1b1c +/deepseek-ai-dsh-loader-smoke/understand-the-implementation: + en: 3ffb8df759bf5071 + zh: a93d3dd6472d9782 +/deepseek-ai-dsh-loader-smoke/understand-the-implementation/design: + en: f3407557b8aafb9c + zh: 06c9faf218c69829 +/deepseek-ai-dsh-loader-smoke/understand-the-implementation/source-map: + en: 4212f963f739e76e + zh: 1a08bcb7654df951 +/deepseek-ai-dsh-loader-smoke/further-exploration: + en: f6719ecd2dbb7870 + zh: 758b46fefe666dbd +/deepseek-ai-dsh-loader-smoke/model-experience: + en: 27696a3c4d31d171 + zh: 48b6df074e0b0911 +/deepseek-ai-dsh-loader-smoke/model-experience/kv-cache-effect: + en: c204a02c386ca3a0 + zh: ce9b24304f9644aa +/deepseek-ai-dsh-loader-smoke/known-limitations-and-deferred-work: + en: a3e0e21178bb00cc + zh: f3dc6139370330f6 +/deepseek-ai-dsh-loader-smoke/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/remote-mock/README.i18n.yaml b/packages/test-support/remote-mock/README.i18n.yaml index 63dbc05d7e..54555bfc73 100644 --- a/packages/test-support/remote-mock/README.i18n.yaml +++ b/packages/test-support/remote-mock/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/test-support/remote-mock/README.md -README.md: 7f76ce6217d7cc6f86923aa1ee4f7257ad30926e -README.zh.md: b79849fe3b23b5135feff7095468f65809b0d506 +/: + en: 5807aeb1022af801 + zh: 1b8715d41b159629 +/deepseek-ai-dsh-remote-mock: + en: c3f8bf28950c870f + zh: 6348be0d6f910cce +/deepseek-ai-dsh-remote-mock/summary: + en: a8195f61b1341ebb + zh: 1d058f9ca3e42562 +/deepseek-ai-dsh-remote-mock/table-of-contents: + en: 76368b6b1da79c80 + zh: 52384aee991ac542 +/deepseek-ai-dsh-remote-mock/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-remote-mock/use-this-package/when-to-use-it: + en: 0d7cdedee1c07e7a + zh: 2fef0c2109425f25 +/deepseek-ai-dsh-remote-mock/use-this-package/use-the-remote-proxy: + en: 5dca47c5bedcf13b + zh: 92cbe6b3fbb4ddfa +/deepseek-ai-dsh-remote-mock/use-this-package/register-default-responses: + en: c7022d673fbbb095 + zh: aa827878f3215388 +/deepseek-ai-dsh-remote-mock/use-this-package/drive-streams: + en: 0a466b4351c5ad4c + zh: 602d87000880166f +/deepseek-ai-dsh-remote-mock/use-this-package/connect-a-client: + en: 302d3015e5d82fd8 + zh: 2e83a236952ba390 +/deepseek-ai-dsh-remote-mock/use-this-package/observe-and-assert: + en: 56fcb7912f6365ec + zh: 299299e8afad0512 +/deepseek-ai-dsh-remote-mock/use-this-package/what-can-go-wrong: + en: 441ed8ae66b85a7d + zh: b9eea1cbaeefa086 +/deepseek-ai-dsh-remote-mock/understand-the-implementation: + en: 42b15ac6321706aa + zh: 4ed0861911abaf5d +/deepseek-ai-dsh-remote-mock/understand-the-implementation/design: + en: 6385fe57822aa455 + zh: 53eda1b6a602f357 +/deepseek-ai-dsh-remote-mock/understand-the-implementation/source-map: + en: ddecff98fb835572 + zh: 66a17c9059f79069 +/deepseek-ai-dsh-remote-mock/model-experience: + en: 53b590e95981d312 + zh: 231c0245f6b6b827 +/deepseek-ai-dsh-remote-mock/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-remote-mock/known-limitations-and-deferred-work: + en: 281c77a33b08da46 + zh: 13f9efe0045b0f42 +/deepseek-ai-dsh-remote-mock/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/test-support/session-snapshot/README.i18n.yaml b/packages/test-support/session-snapshot/README.i18n.yaml index 72781bd95e..dd6388d100 100644 --- a/packages/test-support/session-snapshot/README.i18n.yaml +++ b/packages/test-support/session-snapshot/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/test-support/session-snapshot/README.md -README.md: 2bc7b9eaf9ebd8e7a2fa357e60eddd594d21d9a7 -README.zh.md: ea26aa50d9dc835c8f234ad224afff9f5a33483e +/: + en: 35f64a68381efbd0 + zh: dd2c508ba263d788 +/deepseek-ai-dsh-session-snapshot: + en: b184b97e2d1e1fa7 + zh: 7d4b4cc8d73446af +/deepseek-ai-dsh-session-snapshot/summary: + en: 71cd3441e7189ac4 + zh: 874ae7ac5fd231c9 +/deepseek-ai-dsh-session-snapshot/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-session-snapshot/use-this-package: + en: 594ad1f3e6f02054 + zh: 7ca4f565976704be +/deepseek-ai-dsh-session-snapshot/use-this-package/writing-a-snapshot-suite: + en: b753e44790d4df99 + zh: 5547c21757797d9b +/deepseek-ai-dsh-session-snapshot/use-this-package/record-replay-and-refresh: + en: 4c4b1d6a459d2dc6 + zh: 10c1bb216c50fea8 +/deepseek-ai-dsh-session-snapshot/use-this-package/pinning-request-headers-and-system-prompts: + en: d5c04a18000c705c + zh: baef265c203f86e1 +/deepseek-ai-dsh-session-snapshot/use-this-package/platform-and-composition-variants: + en: 64666ea2894acc4a + zh: 0e78df32bcfd3633 +/deepseek-ai-dsh-session-snapshot/use-this-package/what-can-go-wrong: + en: f9dc0b285401e01e + zh: e2b365b082dbaa82 +/deepseek-ai-dsh-session-snapshot/understand-the-implementation: + en: 18ff76b440fe40da + zh: 4dbf2eb5f9ee98a2 +/deepseek-ai-dsh-session-snapshot/understand-the-implementation/design: + en: 8771607f15c4f4e1 + zh: 7c2cf395f704717c +/deepseek-ai-dsh-session-snapshot/understand-the-implementation/source-map: + en: 4c3ff235ca8fe261 + zh: 0f03425b926721cc +/deepseek-ai-dsh-session-snapshot/understand-the-implementation/data-flow: + en: a71c8ab2e78798c5 + zh: 419cebed1c023fbf +/deepseek-ai-dsh-session-snapshot/further-exploration: + en: 84279d50373a156a + zh: fcd600bf386f6efe +/deepseek-ai-dsh-session-snapshot/model-experience: + en: 9f12d94ab5e31ade + zh: 7c75a17565caca1c +/deepseek-ai-dsh-session-snapshot/model-experience/kv-cache-effect: + en: ca75c51c89c2c9b0 + zh: f57cc48a1b5cbfa9 +/deepseek-ai-dsh-session-snapshot/known-limitations-and-deferred-work: + en: 42e871839dddaf6d + zh: b7ab1d313527612b +/deepseek-ai-dsh-session-snapshot/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/todo/README.i18n.yaml b/packages/todo/README.i18n.yaml index f5a88eb465..454854f08a 100644 --- a/packages/todo/README.i18n.yaml +++ b/packages/todo/README.i18n.yaml @@ -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 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 packages/todo/README.md -README.md: f43cabe8de26b448807c0db27b610516f62bc24d -README.zh.md: 38bda81c4add50500b44208bbccf601e46a866f7 +/: + en: f9468c9e9689351a + zh: b56e2a1624ef7d3d +/packages-todo: + en: 9402aaa4ac047a22 + zh: 96ff5f09e974cade +/packages-todo/summary: + en: 8e99ed58cb881726 + zh: a0342c8c1abdb676 +/packages-todo/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-todo/packages: + en: 812e0f54dc1972a2 + zh: 0acffa7fcffc487f +/packages-todo/related-documentation: + en: c9e3603df924f7ca + zh: 3f46dd9c40365da1 +/packages-todo/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/todo/tool-todo/README.i18n.yaml b/packages/todo/tool-todo/README.i18n.yaml index d2d48c41bb..273ebaf8a4 100644 --- a/packages/todo/tool-todo/README.i18n.yaml +++ b/packages/todo/tool-todo/README.i18n.yaml @@ -1,6 +1,91 @@ -# 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 packages/todo/tool-todo/README.md -README.md: 0547688d833f10ae9504496d703ed7532e397e3e -README.zh.md: 1bf055cb769455802620a7d7c77dc80851456ffe +/: + en: 94e53ef3423c197f + zh: ad579992506261fa +/deepseek-ai-dsh-tool-todo: + en: 06114b7b88112609 + zh: a53c75adeeecf917 +/deepseek-ai-dsh-tool-todo/summary: + en: b6b3f4e412f33da2 + zh: b4dbbe1a1e093179 +/deepseek-ai-dsh-tool-todo/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-todo/use-this-package: + en: d10c650faab8695d + zh: 6018b5a53501d88b +/deepseek-ai-dsh-tool-todo/use-this-package/when-to-choose-it: + en: c964ee10289fcd21 + zh: 4c1e68220906eb06 +/deepseek-ai-dsh-tool-todo/use-this-package/minimal-configuration: + en: 02ee43b537f8ab85 + zh: a20116a4fcc36a33 +/deepseek-ai-dsh-tool-todo/use-this-package/what-each-call-does: + en: 415a6775984f539d + zh: 04e6f16e7c81b8ba +/deepseek-ai-dsh-tool-todo/use-this-package/single-owner: + en: f051cbd97dab2436 + zh: 18976a8affed8cab +/deepseek-ai-dsh-tool-todo/understand-the-implementation: + en: 8d94a7381bca3fa9 + zh: f4bd2866fff6fa8d +/deepseek-ai-dsh-tool-todo/understand-the-implementation/design-philosophy: + en: 79e0ce717098e5eb + zh: ec34658fb269c2e1 +/deepseek-ai-dsh-tool-todo/understand-the-implementation/source-map: + en: d53829e90f7f63ca + zh: fc3006d788a84013 +/deepseek-ai-dsh-tool-todo/understand-the-implementation/export-shape: + en: 35b4f6c718e60dab + zh: 9bffe86c88a7ad6d +/deepseek-ai-dsh-tool-todo/understand-the-implementation/session-projection: + en: 2d49c8af46b16dd2 + zh: 71a3073433b579d4 +/deepseek-ai-dsh-tool-todo/understand-the-implementation/durable-log-invariant: + en: 3234e0405b88e314 + zh: 135a5b12d810e6dd +/deepseek-ai-dsh-tool-todo/understand-the-implementation/call-mechanics: + en: d55f6a32b05ed686 + zh: c815f930a2acebda +/deepseek-ai-dsh-tool-todo/further-exploration: + en: 38488722b03c25dd + zh: 23efe2cce1e29917 +/deepseek-ai-dsh-tool-todo/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-todo/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-todo/model-experience/tool-schema/what-the-model-sees: + en: a6b40ca3f9c93a79 + zh: ac829d5668e16b7f +/deepseek-ai-dsh-tool-todo/model-experience/tool-schema/token-effect: + en: a0a8f5ec3db0f500 + zh: eac37a524c6e777e +/deepseek-ai-dsh-tool-todo/model-experience/tool-schema/kv-cache-effect: + en: b385b04c94496e5b + zh: 3a361ac90ef5f037 +/deepseek-ai-dsh-tool-todo/model-experience/tool-call-history-and-result: + en: 9717b983b6a857e3 + zh: 611a2dadf7c0c706 +/deepseek-ai-dsh-tool-todo/model-experience/tool-call-history-and-result/what-the-model-sees: + en: 05644654d1bce8c6 + zh: ea2a42470fbb2ee1 +/deepseek-ai-dsh-tool-todo/model-experience/tool-call-history-and-result/token-effect: + en: 7763a0e875faf53d + zh: fe33c3973215dc53 +/deepseek-ai-dsh-tool-todo/model-experience/tool-call-history-and-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: a5411047e008a0c1 +/deepseek-ai-dsh-tool-todo/known-limitations-and-deferred-work: + en: 71e2aed21b2545c3 + zh: 775300a3618a861a +/deepseek-ai-dsh-tool-todo/known-limitations-and-deferred-work/dev-note: + en: ac1d08360a93382b + zh: 703a65fbcc38edc7 +/deepseek-ai-dsh-tool-todo/known-limitations-and-deferred-work/dev-note/future-cross-agent-and-shared-lists: + en: 071b9c5be71f799f + zh: dee15fe922a3ab95 diff --git a/packages/typert/README.i18n.yaml b/packages/typert/README.i18n.yaml index ad523dcb5f..ebd32f8c91 100644 --- a/packages/typert/README.i18n.yaml +++ b/packages/typert/README.i18n.yaml @@ -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 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 packages/typert/README.md -README.md: 952e5befb227a6586cfe240648ebc92647dd4c18 -README.zh.md: f0d9352487e8948efd7253bbbca1b1d86b35648e +/: + en: 43fe34a7197464c7 + zh: daece7b90e4daad9 +/packages-typert: + en: e40877a2c7aa409f + zh: 4c8399e41b2530b3 +/packages-typert/summary: + en: 0d9c8dbe70597f50 + zh: 44e0f56a1140b912 +/packages-typert/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-typert/packages: + en: 02a7abfa8c4d5283 + zh: d98c274255478861 +/packages-typert/related-documentation: + en: 579a757871b6cec6 + zh: 7a559d7661631629 +/packages-typert/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/typert/generator/README.i18n.yaml b/packages/typert/generator/README.i18n.yaml index 7b0c085cd5..47d0408069 100644 --- a/packages/typert/generator/README.i18n.yaml +++ b/packages/typert/generator/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/typert/generator/README.md -README.md: 9c207574e9bb576a965ab1a91576a3b5a9db397e -README.zh.md: 9a6fa9e81d7950efb4d4b76df6921bc5a83b6adf +/: + en: 3fe330c4d51197ec + zh: 5874f3bcd419dbbc +/deepseek-ai-dsh-typert-generator: + en: 572884e8456e3876 + zh: 766da5ce0943f314 +/deepseek-ai-dsh-typert-generator/summary: + en: c481285bb066ad9f + zh: b5d9e32c7747f04a +/deepseek-ai-dsh-typert-generator/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-typert-generator/use-this-package: + en: 949dec3bb987644a + zh: 0ed333a6067465dc +/deepseek-ai-dsh-typert-generator/use-this-package/publishing-typert-artifacts-from-a-package: + en: b8720f6ac186a8e8 + zh: 3e04a4c1bebc2cf4 +/deepseek-ai-dsh-typert-generator/use-this-package/analyzing-a-workspace-statically: + en: 88f4e7fc9d4c7701 + zh: cecd35ff4f35bfd2 +/deepseek-ai-dsh-typert-generator/use-this-package/running-generation-inside-a-tsdown-build: + en: cc3f7d23739380f6 + zh: 864d15088f581271 +/deepseek-ai-dsh-typert-generator/understand-the-implementation: + en: b90762df7a978580 + zh: 123ab225a2b5df2a +/deepseek-ai-dsh-typert-generator/understand-the-implementation/design-concept: + en: 0a515742229bf442 + zh: dfd2c5eddd943af9 +/deepseek-ai-dsh-typert-generator/understand-the-implementation/source-map: + en: 783dec50106bcabb + zh: 2627f55ce69a1a2c +/deepseek-ai-dsh-typert-generator/understand-the-implementation/analysis-and-faces: + en: a844aafcafbc27b6 + zh: 8efe7d472361bbc2 +/deepseek-ai-dsh-typert-generator/understand-the-implementation/emission-and-publication-contract: + en: 2f6f72eecffc33c2 + zh: ded33dbc1d9a4ea5 +/deepseek-ai-dsh-typert-generator/understand-the-implementation/catalog-projection: + en: e85b521a1e01ab2c + zh: 4416dca569de0f61 +/deepseek-ai-dsh-typert-generator/further-exploration: + en: 6df514142eaad512 + zh: e1ca60bd9fa30096 +/deepseek-ai-dsh-typert-generator/model-experience: + en: e6641e8b5e5f42ca + zh: 2fdc0d3fde7e9216 +/deepseek-ai-dsh-typert-generator/model-experience/kv-cache-effect: + en: 09310605f7d136d4 + zh: 3535ec7eba83b90f +/deepseek-ai-dsh-typert-generator/known-limitations-and-deferred-work: + en: f3b1002133fe8736 + zh: e8d5fecd10db5e3a +/deepseek-ai-dsh-typert-generator/known-limitations-and-deferred-work/dev-note: + en: cc7e47f271475e4c + zh: 8426eb322816bd28 diff --git a/packages/typert/loader/README.i18n.yaml b/packages/typert/loader/README.i18n.yaml index 88b3683dfb..d3ba7af24a 100644 --- a/packages/typert/loader/README.i18n.yaml +++ b/packages/typert/loader/README.i18n.yaml @@ -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 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 packages/typert/loader/README.md -README.md: c45fbdebe7c2a05491515c3679ca2a3338285ca1 -README.zh.md: 9cb6ae6da5da30292d74e05932cd147090aa4dc8 +/: + en: 3fa30a143acc79d7 + zh: 0c6fe79fba20f26f +/deepseek-ai-dsh-typert-loader: + en: a36dc226bf1f8372 + zh: 043fb410e2037c71 +/deepseek-ai-dsh-typert-loader/summary: + en: be19cf069f29d225 + zh: d2e50148ebe20bcc +/deepseek-ai-dsh-typert-loader/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-typert-loader/use-this-package: + en: a755161460d28bd2 + zh: 15db6beb30e87926 +/deepseek-ai-dsh-typert-loader/use-this-package/minimal-configuration: + en: 881670b2d7dfb04d + zh: fbf612e945aaf066 +/deepseek-ai-dsh-typert-loader/use-this-package/what-gets-registered: + en: 01318fcba39e9b0f + zh: c5f6528a91b335ac +/deepseek-ai-dsh-typert-loader/use-this-package/observable-behavior-and-failures: + en: 01494e9fbd469ec8 + zh: 3025d870c0f36e2b +/deepseek-ai-dsh-typert-loader/understand-the-implementation: + en: 519c0242ef4d9e21 + zh: a72967feb0ea1b41 +/deepseek-ai-dsh-typert-loader/understand-the-implementation/design-concept: + en: 03fc077e58271e18 + zh: 20f8fc02008cee5e +/deepseek-ai-dsh-typert-loader/understand-the-implementation/manifest-validation: + en: eb246aef15ea0532 + zh: 7a4a7bcc788b3ba3 +/deepseek-ai-dsh-typert-loader/understand-the-implementation/caching-and-ownership: + en: 38e781e052fdf44e + zh: d8f6b4d119bf9856 +/deepseek-ai-dsh-typert-loader/understand-the-implementation/source-map: + en: 40a8a6723d33b335 + zh: 5b806e49b6279818 +/deepseek-ai-dsh-typert-loader/further-exploration: + en: 9665bb4850bb92de + zh: 508eaf81dee2a10b +/deepseek-ai-dsh-typert-loader/model-experience: + en: d3555a846d0b19a6 + zh: eb4815fbd81a3561 +/deepseek-ai-dsh-typert-loader/model-experience/kv-cache-effect: + en: f8a0ad3d0fc0eb32 + zh: 7649a694b279f5f3 +/deepseek-ai-dsh-typert-loader/known-limitations-and-deferred-work: + en: a7e281826b58b218 + zh: b4347c965151a1a9 +/deepseek-ai-dsh-typert-loader/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/typert/protocol/README.i18n.yaml b/packages/typert/protocol/README.i18n.yaml index d1073f7952..45d814c323 100644 --- a/packages/typert/protocol/README.i18n.yaml +++ b/packages/typert/protocol/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/typert/protocol/README.md -README.md: 8a97bb339d462c8dbea7666c7855a7e51ae9b113 -README.zh.md: 9bb2cae765ee5747bf11a92d44ec2bb201b0285d +/: + en: f05430dc6311d1e1 + zh: ad9779e051bc21f8 +/deepseek-ai-dsh-typert-protocol: + en: c0a0d129924ee1ed + zh: b0edfa8b75f8de41 +/deepseek-ai-dsh-typert-protocol/summary: + en: 2eaad6529802274f + zh: 6a8aa3cbc2ea6aad +/deepseek-ai-dsh-typert-protocol/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-typert-protocol/use-this-package: + en: c479b5b665822198 + zh: 1ffb789c18043baf +/deepseek-ai-dsh-typert-protocol/use-this-package/exposing-a-host-method: + en: fae902875c18ef33 + zh: ed4332cabe0e3a45 +/deepseek-ai-dsh-typert-protocol/use-this-package/associating-host-objects-and-contexts-with-wire-identities: + en: 3db384ae6f215632 + zh: 56207184b09d4018 +/deepseek-ai-dsh-typert-protocol/use-this-package/reporting-and-reading-a-remote-failure: + en: 4ba5266ddb014029 + zh: e31ae6438b9b4aa5 +/deepseek-ai-dsh-typert-protocol/use-this-package/receiving-forwarded-host-events-on-the-client: + en: 1101bd1d1419618c + zh: 6ff036538d237e0a +/deepseek-ai-dsh-typert-protocol/understand-the-implementation: + en: f1a51c9826244574 + zh: bd3ebd8831c6bf84 +/deepseek-ai-dsh-typert-protocol/understand-the-implementation/design-concept: + en: 4f45bb46a1920984 + zh: 70408d3b59d2735a +/deepseek-ai-dsh-typert-protocol/understand-the-implementation/remote-markers: + en: 93b83a9441a5a3c2 + zh: c4eb143ddd167a27 +/deepseek-ai-dsh-typert-protocol/understand-the-implementation/protocol-maps-and-descriptors: + en: 164b30b3fa543936 + zh: 0831edd3e04a3d3a +/deepseek-ai-dsh-typert-protocol/understand-the-implementation/wire-identity-grammar: + en: aac79a7b4682371e + zh: bc9cc513c1ced3e6 +/deepseek-ai-dsh-typert-protocol/understand-the-implementation/source-map: + en: c8834e55e3e3db73 + zh: d820bc330814b240 +/deepseek-ai-dsh-typert-protocol/further-exploration: + en: 84191d1b07fb8bb6 + zh: 9a5212732ed38ab6 +/deepseek-ai-dsh-typert-protocol/model-experience: + en: dc0c83c97e195e97 + zh: 1f11dd080898d6c0 +/deepseek-ai-dsh-typert-protocol/model-experience/kv-cache-effect: + en: b1c49d5e440d9d41 + zh: 87ead78472415189 +/deepseek-ai-dsh-typert-protocol/known-limitations-and-deferred-work: + en: 0be59e6d97923487 + zh: 70523fb0dc567ed6 +/deepseek-ai-dsh-typert-protocol/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/typert/registry/README.i18n.yaml b/packages/typert/registry/README.i18n.yaml index d2b1d12036..ca9dffd1ce 100644 --- a/packages/typert/registry/README.i18n.yaml +++ b/packages/typert/registry/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/typert/registry/README.md -README.md: 75a3d2bc495db97067818fe9c16e835e8e1f98bc -README.zh.md: b47d735c17ca4e51f41c82916a4b402ddf84e853 +/: + en: c7c547de25c95016 + zh: 983f6b8444a4bd1a +/deepseek-ai-dsh-typert-registry: + en: 29e8c4fd205aba1a + zh: 47ebdd8757aa3d1d +/deepseek-ai-dsh-typert-registry/summary: + en: 3030bf6eaf134d98 + zh: 83169febbb6c9cbf +/deepseek-ai-dsh-typert-registry/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-typert-registry/use-this-package: + en: d885ccd8f13315f1 + zh: cea7c258f5f57e2d +/deepseek-ai-dsh-typert-registry/use-this-package/minimal-setup: + en: 1ec4b304a024bb3c + zh: f17e796c26faabab +/deepseek-ai-dsh-typert-registry/use-this-package/querying-schemas-and-reflection: + en: bc75ee0cfdd77fee + zh: f0fc5bfffe0cc063 +/deepseek-ai-dsh-typert-registry/use-this-package/registering-a-contribution: + en: 2b2f750a1b145d85 + zh: d15c55c01af1755a +/deepseek-ai-dsh-typert-registry/use-this-package/lookup-and-context-providers: + en: bc9ea8f035ec1199 + zh: d25f1dc16cfc8654 +/deepseek-ai-dsh-typert-registry/understand-the-implementation: + en: 1a78dfbae50a8b0d + zh: dc10b4b3f3d832ed +/deepseek-ai-dsh-typert-registry/understand-the-implementation/design-concept: + en: 4d50f3efeb45eaa4 + zh: ec3575d29d5a040b +/deepseek-ai-dsh-typert-registry/understand-the-implementation/sub-registries: + en: cc0deb5e1ae93fd6 + zh: 4bb6c88213262afe +/deepseek-ai-dsh-typert-registry/understand-the-implementation/identity-and-validation: + en: 4764fc33a7e16e60 + zh: 1ddf03cbe16197da +/deepseek-ai-dsh-typert-registry/understand-the-implementation/source-map: + en: ec30fd742ee246b1 + zh: 7fff86709e5ea4a1 +/deepseek-ai-dsh-typert-registry/further-exploration: + en: da1350150eaff076 + zh: c7099f0b2b31ec4f +/deepseek-ai-dsh-typert-registry/model-experience: + en: c2fafdfead674c9d + zh: d6c506ac82390512 +/deepseek-ai-dsh-typert-registry/model-experience/kv-cache-effect: + en: b3c95d3ac849684a + zh: 6eb941bb28aa6aea +/deepseek-ai-dsh-typert-registry/known-limitations-and-deferred-work: + en: f3e6c1b0ee101919 + zh: 3fb5366a014aade7 +/deepseek-ai-dsh-typert-registry/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/README.i18n.yaml b/packages/util/README.i18n.yaml index 2499f0a247..04623b60ca 100644 --- a/packages/util/README.i18n.yaml +++ b/packages/util/README.i18n.yaml @@ -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 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 packages/util/README.md -README.md: a51f8304e621e1c4fba79e5492c8eddc4d786a8e -README.zh.md: d2b8734543a7332b8a18fd9202c6fcf3b9736af9 +/: + en: 036b48d7ea9bdc0e + zh: e8e35eb01d8eb2d4 +/util-shared-utilities: + en: 7283f2afb343d150 + zh: 32c56bd67c0314c6 +/util-shared-utilities/summary: + en: 63e37eb06d07deb5 + zh: 26d94a8a8f9079ce +/util-shared-utilities/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/util-shared-utilities/packages: + en: e6311743f2e50607 + zh: 48b15913d8bf503f +/util-shared-utilities/related-documentation: + en: 432ae81110914571 + zh: c5bf4efc007311f3 +/util-shared-utilities/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/util/atomic-write/README.i18n.yaml b/packages/util/atomic-write/README.i18n.yaml index 31a0a8a4b9..e75a0f3933 100644 --- a/packages/util/atomic-write/README.i18n.yaml +++ b/packages/util/atomic-write/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/util/atomic-write/README.md -README.md: fa2a77c8ba11e1dd80fecef6da09fa32a608b523 -README.zh.md: 020d379c876733d5de11c63887de8d3168eac3b3 +/: + en: 1065a4fcafd0430d + zh: 40bc911b6d01288b +/deepseek-ai-dsh-atomic-write: + en: ed491d62812ad8cc + zh: 653e184dd035ec71 +/deepseek-ai-dsh-atomic-write/summary: + en: 6c4c49bda04ed05f + zh: 1080ddd179d0a3d2 +/deepseek-ai-dsh-atomic-write/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-atomic-write/use-this-package: + en: 9cc27a0ee5ae0808 + zh: d0ee06b54452f600 +/deepseek-ai-dsh-atomic-write/use-this-package/writing-a-file-atomically: + en: 7b757dc3c3b27335 + zh: a097d90a2561475d +/deepseek-ai-dsh-atomic-write/use-this-package/coordinating-writers: + en: 0df598416555ab91 + zh: 67991b30dac16834 +/deepseek-ai-dsh-atomic-write/use-this-package/failures-to-plan-for: + en: 3e6366e5ff94a740 + zh: b34755231a5ee0c1 +/deepseek-ai-dsh-atomic-write/understand-the-implementation: + en: 93b537308f7c88c7 + zh: 282e0d2042aeb1be +/deepseek-ai-dsh-atomic-write/understand-the-implementation/source-map: + en: 725509a8b621c668 + zh: c11e3ffdf73af844 +/deepseek-ai-dsh-atomic-write/understand-the-implementation/write-path: + en: 64f38c4178d39a32 + zh: f19794800d41f289 +/deepseek-ai-dsh-atomic-write/understand-the-implementation/why-the-swap-stays-safe: + en: 4e1f8c7441af84dc + zh: 893620e84d8181f5 +/deepseek-ai-dsh-atomic-write/further-exploration: + en: 16ece9b754f7fff6 + zh: 2456fe14cc5a658b +/deepseek-ai-dsh-atomic-write/model-experience: + en: 225fc1d94a284905 + zh: 7319a43c3b8a884d +/deepseek-ai-dsh-atomic-write/model-experience/kv-cache-effect: + en: 815e93723a98919c + zh: 921da870f67e4033 +/deepseek-ai-dsh-atomic-write/known-limitations-and-deferred-work: + en: 5c1ec4b86e5aea48 + zh: a973f3758a67a293 +/deepseek-ai-dsh-atomic-write/known-limitations-and-deferred-work/dev-note: + en: d3461ceeaf041974 + zh: f59df2adbf52fed9 diff --git a/packages/util/brand/README.i18n.yaml b/packages/util/brand/README.i18n.yaml index 3e48d534f1..8a62a68d07 100644 --- a/packages/util/brand/README.i18n.yaml +++ b/packages/util/brand/README.i18n.yaml @@ -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 packages/util/brand/README.md -README.md: f9bcea11d223645a9bb1d2194a129f353220c684 -README.zh.md: f27be07053e3f34bb7bbf298e9d161590386de1c +/: + en: 9c53a07c1a04a19a + zh: 1fd4666fbc6c39a8 +/deepseek-ai-dsh-brand: + en: 7c38b29da46ac02f + zh: 4548a6802dc98508 +/deepseek-ai-dsh-brand/summary: + en: a6ee5719ee74cc75 + zh: 329397be6f7228be +/deepseek-ai-dsh-brand/table-of-contents: + en: c992e0cd2e7042d6 + zh: 2e8cd826664632d1 +/deepseek-ai-dsh-brand/use-this-package: + en: abdf7a28d3af06f0 + zh: 8d68807326b03898 +/deepseek-ai-dsh-brand/use-this-package/branding-a-string: + en: 49b137dc146f5c0a + zh: 7fe82acb5ba633e8 +/deepseek-ai-dsh-brand/use-this-package/branding-a-number: + en: fd9617ca2804f47b + zh: cd3c0e6bda613509 +/deepseek-ai-dsh-brand/use-this-package/when-to-brand: + en: 4c8008d670bf2b4d + zh: 1bd3dcebe557f7b0 +/deepseek-ai-dsh-brand/understand-the-implementation: + en: 98a62299f46d5050 + zh: 042d3c626e1fbe34 +/deepseek-ai-dsh-brand/understand-the-implementation/source-map: + en: 4adda24125bd07aa + zh: bfcc7be63f134658 +/deepseek-ai-dsh-brand/understand-the-implementation/how-values-stay-portable: + en: 6a126aa2e31591c0 + zh: c85e395cdb0bbb0e +/deepseek-ai-dsh-brand/understand-the-implementation/why-it-stays-dependency-free: + en: d9731342b094bbe7 + zh: 81d9f2e0e359d2e7 +/deepseek-ai-dsh-brand/further-exploration: + en: 4213546b8b921601 + zh: ba6a6fe0ef44aabf +/deepseek-ai-dsh-brand/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/util/chunked-list/README.i18n.yaml b/packages/util/chunked-list/README.i18n.yaml index f9a75dcf71..dacfe41255 100644 --- a/packages/util/chunked-list/README.i18n.yaml +++ b/packages/util/chunked-list/README.i18n.yaml @@ -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 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 packages/util/chunked-list/README.md -README.md: f0af89e5dd6cfdc6388fe90aaeaf2fb70b149827 -README.zh.md: 429554742a19d275d494b00919720d05a7d09380 +/: + en: e29affc07acbcf4f + zh: 10e2da625e145a68 +/deepseek-ai-dsh-chunked-list: + en: 5a07c629854f4bd6 + zh: bc82f5005c4f447e +/deepseek-ai-dsh-chunked-list/summary: + en: 15a30013f54b2076 + zh: b287f44dfd029f20 +/deepseek-ai-dsh-chunked-list/table-of-contents: + en: d152484eb41ac6b4 + zh: 75f067b4c4218355 +/deepseek-ai-dsh-chunked-list/use-this-package: + en: 6808bfba89c5ffbf + zh: f80761fdcd3db317 +/deepseek-ai-dsh-chunked-list/understand-the-implementation: + en: c1d571642af3feeb + zh: c942c041a396ea94 +/deepseek-ai-dsh-chunked-list/further-exploration: + en: dc2a6afae1585ff7 + zh: 133604f9e6f08072 +/deepseek-ai-dsh-chunked-list/model-experience: + en: bc7e4d8a0c8b8ebb + zh: e11fe3bd45d4354a +/deepseek-ai-dsh-chunked-list/model-experience/kv-cache-effect: + en: e7ba08477bf22c4e + zh: c38c528fe563bb51 +/deepseek-ai-dsh-chunked-list/known-limitations-and-deferred-work: + en: fdc87d52574748eb + zh: e1e7cbd86cd2bde0 +/deepseek-ai-dsh-chunked-list/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/crypto/README.i18n.yaml b/packages/util/crypto/README.i18n.yaml index daab181c01..20c6829162 100644 --- a/packages/util/crypto/README.i18n.yaml +++ b/packages/util/crypto/README.i18n.yaml @@ -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 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 packages/util/crypto/README.md -README.md: 5f35d5165603e49392b09d37f1eb5ba33c9e954f -README.zh.md: c79f2838b0d6391c0ae5bbf06cee050245714786 +/: + en: c3004d7d489da8f1 + zh: 8b6af2f3f48d5544 +/dsh-util-crypto: + en: 6dc993c2420066da + zh: d9da22117dc5dcd9 +/dsh-util-crypto/summary: + en: 55f117af7ba9f8fe + zh: 2cde7f6b69dc4bf8 +/dsh-util-crypto/table-of-contents: + en: cd2a60a905c978d6 + zh: cc71d387d0cbd442 +/dsh-util-crypto/use-this-package: + en: 594d34627be8618a + zh: 68723dfafb88ac84 +/dsh-util-crypto/api: + en: 21d8f33a1c652edb + zh: 07a3629d66301d85 +/dsh-util-crypto/model-experience: + en: beb00a2635b78870 + zh: d93b828c08217472 +/dsh-util-crypto/model-experience/kv-cache-effect: + en: 3f396619298fe1ae + zh: d46e51c86231d485 +/dsh-util-crypto/known-limitations-and-deferred-work: + en: 2c79cf7c12f39ab1 + zh: c6f2ad3e53a62473 +/dsh-util-crypto/known-limitations-and-deferred-work/dev-note: + en: 214df5375bd84f76 + zh: fa3912dd609838fb diff --git a/packages/util/deque/README.i18n.yaml b/packages/util/deque/README.i18n.yaml index c364b68d5b..802e53d21a 100644 --- a/packages/util/deque/README.i18n.yaml +++ b/packages/util/deque/README.i18n.yaml @@ -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 packages/util/deque/README.md -README.md: 7ddf9ae1645a60b85def0d64cfb261ec48c3cb36 -README.zh.md: 14b89c0589b27c52468401ccc7d711c7911e2d37 +/: + en: d0d9e1665b0ea874 + zh: 6a8366be71b5d6d9 +/deepseek-ai-dsh-deque: + en: b495ce86332048e5 + zh: 141499abfe5ddc03 +/deepseek-ai-dsh-deque/summary: + en: 321f05cea32f6f72 + zh: c47b11b14c151ae0 +/deepseek-ai-dsh-deque/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-deque/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-deque/use-this-package/when-to-use-it: + en: e9c6c998f8d0542a + zh: edc2133eaf273054 +/deepseek-ai-dsh-deque/use-this-package/entry-point: + en: 3e3fca15c9656d45 + zh: 43e70c7381fc21f9 +/deepseek-ai-dsh-deque/understand-the-implementation: + en: 1439df275cf4305f + zh: 09fb7ae6048c065c +/deepseek-ai-dsh-deque/understand-the-implementation/source-map: + en: f3f22e80f9919ff5 + zh: 839ed17098fdfee9 +/deepseek-ai-dsh-deque/further-exploration: + en: 0b3c7ebb1012b51a + zh: f35eb5cebe4ddeba +/deepseek-ai-dsh-deque/model-experience: + en: 8347ed3429dab61e + zh: c634a286fa463342 +/deepseek-ai-dsh-deque/model-experience/kv-cache-effect: + en: e7ba08477bf22c4e + zh: f365439c69beb722 +/deepseek-ai-dsh-deque/known-limitations-and-deferred-work: + en: ade2165d7c740ba7 + zh: 05296ebd057e9beb +/deepseek-ai-dsh-deque/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/home-paths/README.i18n.yaml b/packages/util/home-paths/README.i18n.yaml index 0268c25623..59150c4332 100644 --- a/packages/util/home-paths/README.i18n.yaml +++ b/packages/util/home-paths/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/util/home-paths/README.md -README.md: eb595a7c468ac47128d30e95771a1c0905571834 -README.zh.md: 215317cd42d5d72319cc7af008ba2f4dbe1a26fb +/: + en: 049f902daeb4f8fd + zh: c0688e7cb5d9c5a9 +/deepseek-ai-dsh-home-paths: + en: 6a18bcb84ce35987 + zh: f26144b659925421 +/deepseek-ai-dsh-home-paths/summary: + en: 0d5f47f14146d38f + zh: f92e92f30ed8798d +/deepseek-ai-dsh-home-paths/table-of-contents: + en: 80b31a934611cb4a + zh: 05f3f7f9cb2fd881 +/deepseek-ai-dsh-home-paths/use-this-package: + en: 5322022224da2f27 + zh: d5cba67f4ea3e429 +/deepseek-ai-dsh-home-paths/use-this-package/resolving-the-home: + en: e681c83a7977404f + zh: 618c04e09385c417 +/deepseek-ai-dsh-home-paths/use-this-package/displaying-a-home: + en: 21f16eb64bca4038 + zh: f8c2af8f52880aa3 +/deepseek-ai-dsh-home-paths/use-this-package/expanding-user-paths: + en: 80bf5dead177c1d8 + zh: 6faf257afbb9c246 +/deepseek-ai-dsh-home-paths/use-this-package/canonicalizing-watch-paths: + en: 55c5d8179de704c5 + zh: b86395e9605807cd +/deepseek-ai-dsh-home-paths/understand-the-implementation: + en: a3896db883f77b47 + zh: 45c71eccc31682b5 +/deepseek-ai-dsh-home-paths/understand-the-implementation/source-map: + en: ab001f10961a5a98 + zh: 2209a79d2d5d9b68 +/deepseek-ai-dsh-home-paths/understand-the-implementation/resolution-rules: + en: 5356ed79a458f46b + zh: ec00a3151bbba0aa +/deepseek-ai-dsh-home-paths/understand-the-implementation/canonicalization-mechanics: + en: a79aecd162317dc2 + zh: 342f9bae0231c3de +/deepseek-ai-dsh-home-paths/further-exploration: + en: 20c1a7aad2c891e7 + zh: 66977a9714e6eff8 +/deepseek-ai-dsh-home-paths/known-limitations-and-deferred-work: + en: aa4aecf31a596da0 + zh: 22dea997610fae2d +/deepseek-ai-dsh-home-paths/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/http-proxy/README.i18n.yaml b/packages/util/http-proxy/README.i18n.yaml index bf46fb0186..90ae297a32 100644 --- a/packages/util/http-proxy/README.i18n.yaml +++ b/packages/util/http-proxy/README.i18n.yaml @@ -1,6 +1,55 @@ -# 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 packages/util/http-proxy/README.md -README.md: 9b098432f3aaa3f351e48060a9336d0fa4cb2e9e -README.zh.md: 70b81429bcb45074a2a0c5f5a9a36f09c290270b +/: + en: 117b4d191f773a9c + zh: 0b9e150f6cd23b04 +/deepseek-ai-dsh-http-proxy: + en: 6c9406455954c0e3 + zh: 5bcd0337d80a2047 +/deepseek-ai-dsh-http-proxy/summary: + en: c3b1b32ab36f5f97 + zh: 143b744ab361f0d4 +/deepseek-ai-dsh-http-proxy/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-http-proxy/use-this-package: + en: bc67087b571aa603 + zh: 264ac9bb95c8efe8 +/deepseek-ai-dsh-http-proxy/use-this-package/writing-a-new-outbound-call: + en: 782b24f91ee8ce71 + zh: af4b75a0d5a98fdc +/deepseek-ai-dsh-http-proxy/use-this-package/what-the-policy-reads: + en: a1f74dd3a34ed97e + zh: d9440a0666caccb6 +/deepseek-ai-dsh-http-proxy/use-this-package/failures: + en: 4248bc9a662680ed + zh: 4150ade9f1aa9287 +/deepseek-ai-dsh-http-proxy/understand-the-implementation: + en: ee4615a04fa6503d + zh: ee2c5fb2204a43cf +/deepseek-ai-dsh-http-proxy/understand-the-implementation/design-philosophy: + en: 73c3a16dedfe00e2 + zh: e8d949b479ca3dde +/deepseek-ai-dsh-http-proxy/understand-the-implementation/source-map: + en: a099f88dd0c7d394 + zh: 7325b7ea973bce13 +/deepseek-ai-dsh-http-proxy/understand-the-implementation/bypass-matching: + en: e9ad6c2e8ee2fc21 + zh: c10de6995cf594bc +/deepseek-ai-dsh-http-proxy/further-exploration: + en: 0dd5fcdee64f39f1 + zh: acc3c6b84021f19e +/deepseek-ai-dsh-http-proxy/model-experience: + en: e0af6a1073934d5a + zh: d8bf9c77b54ed5ae +/deepseek-ai-dsh-http-proxy/model-experience/kv-cache-effect: + en: 7f12ca92e7722f98 + zh: 97fa75de6a3f6a3f +/deepseek-ai-dsh-http-proxy/known-limitations-and-deferred-work: + en: 26e0a7fd9dccf81c + zh: c61ad5d4dfc91cb8 +/deepseek-ai-dsh-http-proxy/known-limitations-and-deferred-work/dev-note: + en: e7d8628ccd7e0d36 + zh: 751da266bfb84bef diff --git a/packages/util/launch-environment/README.i18n.yaml b/packages/util/launch-environment/README.i18n.yaml index 687a97a2b0..3edc680101 100644 --- a/packages/util/launch-environment/README.i18n.yaml +++ b/packages/util/launch-environment/README.i18n.yaml @@ -1,6 +1,49 @@ -# 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 packages/util/launch-environment/README.md -README.md: 43d3e27b1901ac7fea655a08ae183084bbbab1ff -README.zh.md: 0e161e46219d4175950e3b1fe70950bdd7c1b732 +/: + en: 6bd544ce4e92a4e1 + zh: cb05ca5ce08f4bd4 +/deepseek-ai-dsh-launch-environment: + en: 5f0bd56ca8f1fb22 + zh: 92b4c6684ca29352 +/deepseek-ai-dsh-launch-environment/summary: + en: 45f36a3eceabaab0 + zh: 2ec9ea17a592aa7a +/deepseek-ai-dsh-launch-environment/table-of-contents: + en: 80b31a934611cb4a + zh: 05f3f7f9cb2fd881 +/deepseek-ai-dsh-launch-environment/use-this-package: + en: c9df1b8cf300ab4f + zh: 6f80e2e72fc5b1d4 +/deepseek-ai-dsh-launch-environment/use-this-package/resolving-a-value: + en: 5aed2d5fa0b116c0 + zh: 9ad018c5cb09791d +/deepseek-ai-dsh-launch-environment/use-this-package/how-layers-rank: + en: ed6c00ea45dbd45d + zh: a8655d8c5663c9cc +/deepseek-ai-dsh-launch-environment/use-this-package/when-no-launcher-booted-the-tree: + en: 3c368938c6960588 + zh: c704bee90390f259 +/deepseek-ai-dsh-launch-environment/understand-the-implementation: + en: c2cdb9ea66c61cc5 + zh: 5ccf1802da65483d +/deepseek-ai-dsh-launch-environment/understand-the-implementation/source-map: + en: eed450e5587bdd6e + zh: 986cf651a118b3f2 +/deepseek-ai-dsh-launch-environment/understand-the-implementation/how-the-snapshot-stays-frozen: + en: f933fc349e258d27 + zh: 717166c9a80a4821 +/deepseek-ai-dsh-launch-environment/understand-the-implementation/what-omission-means: + en: 03782c3e48792227 + zh: c83116ba53b3ab12 +/deepseek-ai-dsh-launch-environment/further-exploration: + en: 1ea92e9c40187327 + zh: 1620765915d0ddf3 +/deepseek-ai-dsh-launch-environment/known-limitations-and-deferred-work: + en: 47164f90c43f59a1 + zh: a6856705b4467898 +/deepseek-ai-dsh-launch-environment/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/lazy-require/README.i18n.yaml b/packages/util/lazy-require/README.i18n.yaml index 6b42906dd7..0af9d94e93 100644 --- a/packages/util/lazy-require/README.i18n.yaml +++ b/packages/util/lazy-require/README.i18n.yaml @@ -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 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 packages/util/lazy-require/README.md -README.md: d75a7626da61522939f17f6caec1f5d14e6da6c6 -README.zh.md: 7d8e66f15957a990ae37ed04b627dd4a4f147fa0 +/: + en: e5a2fddbf7e87185 + zh: 6a416161c9fb4a42 +/deepseek-ai-dsh-lazy-require: + en: 50a89d91b63bf486 + zh: 20436f06d9e92fc0 +/deepseek-ai-dsh-lazy-require/summary: + en: 3a49032ebd0b88ed + zh: 0a54994d3ada3131 +/deepseek-ai-dsh-lazy-require/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-lazy-require/use-this-package: + en: fcc361ec6f3eedb6 + zh: be2fee303fcdba1a +/deepseek-ai-dsh-lazy-require/understand-the-implementation: + en: 4344e07bfc2f4ea7 + zh: aa9127a1a2f199d8 +/deepseek-ai-dsh-lazy-require/understand-the-implementation/source-map: + en: 483265845e364e38 + zh: bd45f2adbd18f020 +/deepseek-ai-dsh-lazy-require/further-exploration: + en: a298452c8de02534 + zh: c8e542eb859c09db +/deepseek-ai-dsh-lazy-require/model-experience: + en: 2e5c9a1971d91c2e + zh: f3618c564abc7f1c +/deepseek-ai-dsh-lazy-require/model-experience/kv-cache-effect: + en: 4f0eadf94828e66e + zh: 4f8a6ec170ebbfb6 +/deepseek-ai-dsh-lazy-require/known-limitations-and-deferred-work: + en: 0973de93cdfa0bee + zh: 22e1e00a8df2f3f2 +/deepseek-ai-dsh-lazy-require/known-limitations-and-deferred-work/dev-note: + en: 0a1253c6f7b5e8b9 + zh: 9f56528562c7c914 diff --git a/packages/util/native-command/README.i18n.yaml b/packages/util/native-command/README.i18n.yaml index 0f50bd4a58..c72d8c6def 100644 --- a/packages/util/native-command/README.i18n.yaml +++ b/packages/util/native-command/README.i18n.yaml @@ -1,6 +1,52 @@ -# 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 packages/util/native-command/README.md -README.md: 7d3aa8b8f35d483f9936440cb4cd35bf1e785f1a -README.zh.md: 672bbd6eba39ab88f1822562e7fc6a780d3c276e +/: + en: 3e0acbcc586810bb + zh: 688d34f126d1450e +/deepseek-ai-dsh-native-command: + en: 5ebca99c0488e1c8 + zh: 24b2f8f341ff648d +/deepseek-ai-dsh-native-command/summary: + en: 18e2f1f3798079dd + zh: 6f5579374e208624 +/deepseek-ai-dsh-native-command/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-native-command/use-this-package: + en: aba695cba233905f + zh: c6359da30eb8e372 +/deepseek-ai-dsh-native-command/use-this-package/running-a-command: + en: 3a499bda33e33102 + zh: d01abbf863810607 +/deepseek-ai-dsh-native-command/use-this-package/injecting-the-command-boundary: + en: 987bed629737b59d + zh: 258e30f813b0edcb +/deepseek-ai-dsh-native-command/use-this-package/opening-a-host-path: + en: b4ec677605b12ff8 + zh: f35256957eea141a +/deepseek-ai-dsh-native-command/understand-the-implementation: + en: 78e86818bea36f9f + zh: 71dc1ad3e4cbe9f1 +/deepseek-ai-dsh-native-command/understand-the-implementation/source-map: + en: a19bb4cb9f6de785 + zh: cc930d8facf1ca07 +/deepseek-ai-dsh-native-command/understand-the-implementation/what-execfile-gives-the-runner: + en: b16da99b2ed73bfd + zh: 5e806c31a6296366 +/deepseek-ai-dsh-native-command/further-exploration: + en: a3af562edb6e0385 + zh: e26e2c311c07d1c5 +/deepseek-ai-dsh-native-command/model-experience: + en: d478457568b9517e + zh: 0460368e7567a13f +/deepseek-ai-dsh-native-command/model-experience/kv-cache-effect: + en: 296c060e95197cc5 + zh: b9d3fdf11b5ebe1e +/deepseek-ai-dsh-native-command/known-limitations-and-deferred-work: + en: d3af15e86d679b8e + zh: ee5aa3c8cbd9d2db +/deepseek-ai-dsh-native-command/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/output-retention/README.i18n.yaml b/packages/util/output-retention/README.i18n.yaml index 71736fe9bf..2b9331854a 100644 --- a/packages/util/output-retention/README.i18n.yaml +++ b/packages/util/output-retention/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/util/output-retention/README.md -README.md: bb0902b959f298f9f7b0a64de23d48e29bfd75ad -README.zh.md: 7d96ba4da33a98b24eba53f9dd5a2f2c98b79f39 +/: + en: 058416b280f64a3a + zh: 6dd741394b67bd30 +/deepseek-ai-dsh-output-retention: + en: 909b14f93584c835 + zh: da2b6de301df901a +/deepseek-ai-dsh-output-retention/summary: + en: c9dbec0027735a9c + zh: 5a77a10641e06b94 +/deepseek-ai-dsh-output-retention/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-output-retention/use-this-package: + en: f62f2da3b880d972 + zh: be8b8bea3bff9cb6 +/deepseek-ai-dsh-output-retention/use-this-package/bounding-a-list-of-items: + en: 4e33df2bffae04a9 + zh: b79773e1936605bf +/deepseek-ai-dsh-output-retention/use-this-package/bounding-a-text-stream: + en: c0002b8dd81f4732 + zh: 4f8c0e9f03e4ecf9 +/deepseek-ai-dsh-output-retention/use-this-package/building-the-omission-footer: + en: 24a79057aea704e0 + zh: ab6b91d0d1c3b8d7 +/deepseek-ai-dsh-output-retention/use-this-package/what-truncated-means: + en: d496be708ac637dc + zh: 739017ce47f08148 +/deepseek-ai-dsh-output-retention/use-this-package/how-the-current-tools-use-it: + en: ed4b3b343ad80143 + zh: 65dd1f707c3ac747 +/deepseek-ai-dsh-output-retention/understand-the-implementation: + en: fd2a6c959bfe864e + zh: 25b11d28aced568c +/deepseek-ai-dsh-output-retention/understand-the-implementation/source-map: + en: 3f1ca257232b5991 + zh: 29bc947d6dff05cb +/deepseek-ai-dsh-output-retention/understand-the-implementation/two-retainers-two-resource-models: + en: 6a5dd228d9f9808b + zh: 9bba82c5771ee705 +/deepseek-ai-dsh-output-retention/understand-the-implementation/how-the-budget-facts-stay-honest: + en: 101d99e1107d91c7 + zh: ab64a35b62938db1 +/deepseek-ai-dsh-output-retention/understand-the-implementation/the-read-render-exclusion: + en: f76b67fa9e940705 + zh: e7731bfd31cc9f5c +/deepseek-ai-dsh-output-retention/further-exploration: + en: 32497c10ffb10c75 + zh: 1176c882cbed93c0 +/deepseek-ai-dsh-output-retention/model-experience: + en: 247cdeeae9390244 + zh: 0720d77e0a1d1c15 +/deepseek-ai-dsh-output-retention/model-experience/kv-cache-effect: + en: 4487c456cf996b48 + zh: 2c25fe4a5a53f345 +/deepseek-ai-dsh-output-retention/known-limitations-and-deferred-work: + en: dabd5ca291570e70 + zh: d1d98ece31eaa664 +/deepseek-ai-dsh-output-retention/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/package-manifest/README.i18n.yaml b/packages/util/package-manifest/README.i18n.yaml index a83ac511d7..41446bb257 100644 --- a/packages/util/package-manifest/README.i18n.yaml +++ b/packages/util/package-manifest/README.i18n.yaml @@ -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 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 packages/util/package-manifest/README.md -README.md: 7c4c4935412ca481dc5db2f9c182abf471faf269 -README.zh.md: 58a150ae32a7129c1f213f9268869b99ada99655 +/: + en: 8cffb2f57844db66 + zh: 20b158511886ac50 +/deepseek-ai-dsh-package-manifest: + en: 90fdf4daddb42135 + zh: 42350a2d78d2bd81 +/deepseek-ai-dsh-package-manifest/summary: + en: f68bfdd934eb4af6 + zh: 41a873a9f251c814 +/deepseek-ai-dsh-package-manifest/table-of-contents: + en: d152484eb41ac6b4 + zh: 1db86285abf6c499 +/deepseek-ai-dsh-package-manifest/use-this-package: + en: 43fb882676bf22dd + zh: 04e512bc4059e5d4 +/deepseek-ai-dsh-package-manifest/understand-the-implementation: + en: 64e1e57d1c3761e0 + zh: 9fc039770ce43c63 +/deepseek-ai-dsh-package-manifest/further-exploration: + en: f2352ec5d94ac3bd + zh: c2eb0889554f1a7f +/deepseek-ai-dsh-package-manifest/model-experience: + en: 0b5aaa4787068a57 + zh: bdb5dabe0b33ff9d +/deepseek-ai-dsh-package-manifest/model-experience/kv-cache-effect: + en: 2ed74a2a33958543 + zh: 7d63c3a3801bef13 +/deepseek-ai-dsh-package-manifest/known-limitations-and-deferred-work: + en: e64464780f3e36b6 + zh: fec64944da4710ce +/deepseek-ai-dsh-package-manifest/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/time/README.i18n.yaml b/packages/util/time/README.i18n.yaml index 505daf518a..6e0e48d71a 100644 --- a/packages/util/time/README.i18n.yaml +++ b/packages/util/time/README.i18n.yaml @@ -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 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 packages/util/time/README.md -README.md: 788d7310f5f5aaed572f415212ed7fceeb6dce9d -README.zh.md: 48f9d60919b3ddd46d158a501c7488ab423d44b1 +/: + en: 1816778111548561 + zh: 460c67cc44e59372 +/dsh-util-time: + en: bc299a9b8fe7717f + zh: 896661ee0c4edf25 +/dsh-util-time/summary: + en: f37c9eb6571622ac + zh: d782978ff11bd40f +/dsh-util-time/table-of-contents: + en: cd2a60a905c978d6 + zh: cc71d387d0cbd442 +/dsh-util-time/use-this-package: + en: 1472cf19b0bd7447 + zh: 73bf36759bc2d492 +/dsh-util-time/api: + en: cbb4b726e939fc03 + zh: e9df4a7487433146 +/dsh-util-time/model-experience: + en: 02d997b5c1318f27 + zh: 5c55d060adea756d +/dsh-util-time/model-experience/kv-cache-effect: + en: f63edbd9621eee70 + zh: 5e3982508b32b039 +/dsh-util-time/known-limitations-and-deferred-work: + en: 130db809b9a6db90 + zh: 5b0b72ada5b131dd +/dsh-util-time/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/util/timeout/README.i18n.yaml b/packages/util/timeout/README.i18n.yaml index 3d3c39799c..48d6dc1658 100644 --- a/packages/util/timeout/README.i18n.yaml +++ b/packages/util/timeout/README.i18n.yaml @@ -1,6 +1,64 @@ -# 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 packages/util/timeout/README.md -README.md: 80f8dc7c427ba045e36343d009a93828a45b1a69 -README.zh.md: 9d711ecfd24857e5bb83ea102dd6c3a5c86254d3 +/: + en: 118428acb1b2d2e4 + zh: e5ca5ae92e8a7e4b +/deepseek-ai-dsh-timeout: + en: af0ef4476e8b699f + zh: 1071d810d1080026 +/deepseek-ai-dsh-timeout/summary: + en: 13fc36a866f4ae6d + zh: 02a9ab4bd48e968a +/deepseek-ai-dsh-timeout/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-timeout/use-this-package: + en: f000e79268bb4b39 + zh: 82c40259b95776be +/deepseek-ai-dsh-timeout/use-this-package/clamping-a-timeout-hint: + en: f8c517a0c27ebeec + zh: 0b6eed0130330349 +/deepseek-ai-dsh-timeout/use-this-package/running-work-under-a-deadline: + en: 5cfa732a396484a6 + zh: d114cd5ea1ddeb3f +/deepseek-ai-dsh-timeout/use-this-package/classifying-the-outcome: + en: 0c1e99daa88e0ea0 + zh: fc92bc0add2e9a49 +/deepseek-ai-dsh-timeout/use-this-package/streaming-with-an-idle-watchdog: + en: f464a16371ff00d1 + zh: 3c62c560c9dbc804 +/deepseek-ai-dsh-timeout/use-this-package/what-does-not-get-a-timeout: + en: 73e04894d01ddb23 + zh: 4830e47cc55143ff +/deepseek-ai-dsh-timeout/understand-the-implementation: + en: 6c052aa1171a2e3b + zh: 2a37575eb6059cc9 +/deepseek-ai-dsh-timeout/understand-the-implementation/source-map: + en: be1b396f4153b9d0 + zh: a762ab1642b3431e +/deepseek-ai-dsh-timeout/understand-the-implementation/how-a-deadline-fuses-sources: + en: 940080c53d1d0dac + zh: b86e7f51434a3f2c +/deepseek-ai-dsh-timeout/understand-the-implementation/the-no-timeout-sentinel: + en: ceea0b46e6b8e15f + zh: de87dccf08764061 +/deepseek-ai-dsh-timeout/understand-the-implementation/why-an-idle-watchdog-rearms: + en: 7200cfa587c53a9c + zh: 09d6b67dc1a31c5e +/deepseek-ai-dsh-timeout/further-exploration: + en: 4c29a947e28047ad + zh: d80f5ecb50b16203 +/deepseek-ai-dsh-timeout/model-experience: + en: 5c35c77e4625b8ac + zh: 8142da11ba1a6d11 +/deepseek-ai-dsh-timeout/model-experience/kv-cache-effect: + en: 04cc18d90bf9382d + zh: 2c8b75063c46c620 +/deepseek-ai-dsh-timeout/known-limitations-and-deferred-work: + en: cff4b9d3cfc23a97 + zh: 9eb52fbe4c8a6c30 +/deepseek-ai-dsh-timeout/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/values/README.i18n.yaml b/packages/util/values/README.i18n.yaml index 5a7772659a..83356bc623 100644 --- a/packages/util/values/README.i18n.yaml +++ b/packages/util/values/README.i18n.yaml @@ -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 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 packages/util/values/README.md -README.md: a61b1c26992d8d6df6712d178563c99acd6045ca -README.zh.md: c15ad967547bb9e449239eac167ce9e59064cc50 +/: + en: 6b543e93639271ad + zh: 397ce501111fc943 +/deepseek-ai-dsh-util-values: + en: d4e5c3dd11f4c1f4 + zh: ac01621284cc2f99 +/deepseek-ai-dsh-util-values/summary: + en: 0900fbf667e6bb37 + zh: 2ea81387d169a116 +/deepseek-ai-dsh-util-values/table-of-contents: + en: 80b31a934611cb4a + zh: 05f3f7f9cb2fd881 +/deepseek-ai-dsh-util-values/use-this-package: + en: bbff250eba0f1b89 + zh: 0a618f05cc88ee2b +/deepseek-ai-dsh-util-values/use-this-package/validate-or-snapshot-json-data: + en: dc6de9f27cc98557 + zh: 9c2bac179e536147 +/deepseek-ai-dsh-util-values/use-this-package/publish-compare-or-retain-keyed-values: + en: 13628af2abe3eea6 + zh: e284bb8d3ebe38ea +/deepseek-ai-dsh-util-values/use-this-package/close-a-discriminated-union: + en: f21b7bd8040a72eb + zh: 19548d3e537c0b5b +/deepseek-ai-dsh-util-values/understand-the-implementation: + en: 997cf0e584054ace + zh: 5e71d64eb1e32ddd +/deepseek-ai-dsh-util-values/understand-the-implementation/source-map: + en: a3e80436a6006043 + zh: 1de25c1bf436e494 +/deepseek-ai-dsh-util-values/further-exploration: + en: 3be59be736dc8e9a + zh: 4f419cb5db38fd12 +/deepseek-ai-dsh-util-values/known-limitations-and-deferred-work: + en: dc3626bb369e1230 + zh: e292836d13ee512c +/deepseek-ai-dsh-util-values/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/util/workspace-path/README.i18n.yaml b/packages/util/workspace-path/README.i18n.yaml index 1ebe67bac4..8bfe770341 100644 --- a/packages/util/workspace-path/README.i18n.yaml +++ b/packages/util/workspace-path/README.i18n.yaml @@ -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 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 packages/util/workspace-path/README.md -README.md: 2de3157ee8bbe5ea216be303c1a1520d4b92126c -README.zh.md: b46402b0ecf4025224768a29af1ea984ff7d497f +/: + en: e8d97ffa99a57ab7 + zh: 2d7247c47412c30a +/dsh-util-workspace-path: + en: 328c592b68c88e44 + zh: 7a2f03def21b86fe +/dsh-util-workspace-path/summary: + en: ffdecddc9c4957ad + zh: 33cf84892aa5e669 +/dsh-util-workspace-path/table-of-contents: + en: e8236aa6cbcb7dca + zh: 500e57982344c0fa +/dsh-util-workspace-path/file-addresses: + en: ea8f0aa7a8263449 + zh: 231dce3a1b7adf6d +/dsh-util-workspace-path/known-limitations-and-deferred-work: + en: 1e6d448f4f0030c4 + zh: c050dd5e470fe47b +/dsh-util-workspace-path/known-limitations-and-deferred-work/dev-note: + en: cfc7173facebc57c + zh: 4ea51377d7c9c147 diff --git a/packages/web/README.i18n.yaml b/packages/web/README.i18n.yaml index 897eafc472..b5a2373c5a 100644 --- a/packages/web/README.i18n.yaml +++ b/packages/web/README.i18n.yaml @@ -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 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 packages/web/README.md -README.md: 22ef641e29c4626b2af40ed07a5d13b5cc0700c9 -README.zh.md: 74d4b2c60008261949546cac4e93d112e5ae41ca +/: + en: 7dfc084b2dd79648 + zh: b11c557d53877e9b +/web-web-access-capability-family: + en: 5709ff524bf366c8 + zh: b2114dc15899b7ae +/web-web-access-capability-family/summary: + en: 7967ae58f0b2ccf9 + zh: 6336c2c40f3178da +/web-web-access-capability-family/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/web-web-access-capability-family/packages: + en: 6e341c4815689ceb + zh: 696777679cf61f94 +/web-web-access-capability-family/related-documentation: + en: be5d968ca450364b + zh: 813606f36b569d56 +/web-web-access-capability-family/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/web/tool-web/README.i18n.yaml b/packages/web/tool-web/README.i18n.yaml index 4aed8cb78c..e4e4e3ed5d 100644 --- a/packages/web/tool-web/README.i18n.yaml +++ b/packages/web/tool-web/README.i18n.yaml @@ -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 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 packages/web/tool-web/README.md -README.md: 33ed07491928e310010f3555f510b5c4fccd1fbc -README.zh.md: ae67cd1e3abe31652e2d93dc17499dcda662b73f +/: + en: 168a71c4ccff0f74 + zh: ea4a9a476e3a5aec +/deepseek-ai-dsh-tool-web: + en: cdabe4ab4c0906c3 + zh: 8a63cab0d0e813bb +/deepseek-ai-dsh-tool-web/summary: + en: b4f56962c6718f4c + zh: dccc3ce4bce3744d +/deepseek-ai-dsh-tool-web/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-web/use-this-package: + en: ea08bd365428ac95 + zh: 58b60e3adf39a191 +/deepseek-ai-dsh-tool-web/use-this-package/when-to-choose-it: + en: b476ed2e08c158e1 + zh: 17ddc6ee8123cbb4 +/deepseek-ai-dsh-tool-web/use-this-package/minimal-configuration: + en: e16670a5cd6a81c2 + zh: 6f362ec6af764545 +/deepseek-ai-dsh-tool-web/use-this-package/using-web-search: + en: c6a1bb6f22c1aca1 + zh: a006306b95cc61b1 +/deepseek-ai-dsh-tool-web/use-this-package/using-web-fetch: + en: 402540da7e990147 + zh: 1adbbcc261777b30 +/deepseek-ai-dsh-tool-web/use-this-package/stable-registration: + en: 7b87e7f2208e354c + zh: 6709ce199e4be8f3 +/deepseek-ai-dsh-tool-web/use-this-package/failures-and-recovery: + en: 19581f8f8947611b + zh: 8eca83f619382659 +/deepseek-ai-dsh-tool-web/understand-the-implementation: + en: 8d42e5fa5b3215ad + zh: ce3eeb2b28718089 +/deepseek-ai-dsh-tool-web/understand-the-implementation/design-philosophy: + en: d0cb2277a9a79e1b + zh: 6a37f975b3075ea3 +/deepseek-ai-dsh-tool-web/understand-the-implementation/source-map: + en: 245e4ef7953ba060 + zh: 8551a198c701653c +/deepseek-ai-dsh-tool-web/understand-the-implementation/search-flow: + en: 80b7de753fe6b0de + zh: 09727a7727248888 +/deepseek-ai-dsh-tool-web/understand-the-implementation/fetch-flow: + en: bcb3270167081dbf + zh: 82036ab27ae6fd96 +/deepseek-ai-dsh-tool-web/understand-the-implementation/presentation: + en: 3ecc07b408e6045e + zh: 19eed773277be7be +/deepseek-ai-dsh-tool-web/further-exploration: + en: 77bd76fd7a99016c + zh: a906725eb506ac39 +/deepseek-ai-dsh-tool-web/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-web/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/what-the-model-sees: + en: 332095657265dbfc + zh: bb2b01af968eab3e +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/what-the-model-sees/web-search-guidance-with-fetch-enabled: + en: 8221f44691b46903 + zh: 783e44de387666e9 +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/what-the-model-sees/web-search-only-guidance: + en: e868e27d7138b132 + zh: efad6229f10847b2 +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/what-the-model-sees/web-fetch-guidance: + en: 14e07e00636efc17 + zh: 6f2b22015dc3293a +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/token-effect: + en: 2701b438293d63e5 + zh: ac6e234498e161c4 +/deepseek-ai-dsh-tool-web/model-experience/system-prompt/kv-cache-effect: + en: b4fddfb807d4ba2d + zh: e0fe349c5caf0a33 +/deepseek-ai-dsh-tool-web/model-experience/tool-schemas: + en: 3039bc5e7a796b21 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-web/model-experience/tool-schemas/what-the-model-sees: + en: 1d30b997ee27dbcc + zh: 6553a79a7c80f69f +/deepseek-ai-dsh-tool-web/model-experience/tool-schemas/token-effect: + en: 04929d386f2d55a1 + zh: 49b160f15e792ee8 +/deepseek-ai-dsh-tool-web/model-experience/tool-schemas/kv-cache-effect: + en: 72f983b0fdc81e41 + zh: 9b58de4a7d9393c9 +/deepseek-ai-dsh-tool-web/model-experience/search-result: + en: 359575da2aa5601e + zh: ca79357c6191e253 +/deepseek-ai-dsh-tool-web/model-experience/search-result/what-the-model-sees: + en: 6efbe62b255cab5c + zh: c119438662b0e00b +/deepseek-ai-dsh-tool-web/model-experience/search-result/token-effect: + en: fa91a84df42ad470 + zh: e52fa1b5f538887e +/deepseek-ai-dsh-tool-web/model-experience/search-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-tool-web/model-experience/search-failure: + en: f48f5b863cd62217 + zh: e17659aeffcb9919 +/deepseek-ai-dsh-tool-web/model-experience/search-failure/what-the-model-sees: + en: 840ff1bde3856cb5 + zh: e5f5807681efa62c +/deepseek-ai-dsh-tool-web/model-experience/search-failure/token-effect: + en: 801116478749b452 + zh: 646645de480ee586 +/deepseek-ai-dsh-tool-web/model-experience/search-failure/kv-cache-effect: + en: 4c29fa07e83d79f5 + zh: 537e382d22728304 +/deepseek-ai-dsh-tool-web/model-experience/fetch-result: + en: 3b38b49152238d9a + zh: 97dc2f6cef13803b +/deepseek-ai-dsh-tool-web/model-experience/fetch-result/what-the-model-sees: + en: 9498444a7d33c10b + zh: 12600b7a1e4b945c +/deepseek-ai-dsh-tool-web/model-experience/fetch-result/token-effect: + en: 55b062b0eed6ad7b + zh: 460f35f5881d11ca +/deepseek-ai-dsh-tool-web/model-experience/fetch-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-tool-web/model-experience/argument-errors: + en: 747ee6b906decbc6 + zh: 7bc64dddaac7d259 +/deepseek-ai-dsh-tool-web/model-experience/argument-errors/what-the-model-sees: + en: 89b00918380c78ad + zh: 24261bbf568d9d0d +/deepseek-ai-dsh-tool-web/model-experience/argument-errors/token-effect: + en: 0fc27f9f2a60c868 + zh: c11730b8c8b2ac4f +/deepseek-ai-dsh-tool-web/model-experience/argument-errors/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-tool-web/known-limitations-and-deferred-work: + en: aa23b6943fc9870c + zh: 180d50b1161e7eef +/deepseek-ai-dsh-tool-web/known-limitations-and-deferred-work/dev-note: + en: 7f775cc79dbce94b + zh: 12b8f68f9e7c48ca +/deepseek-ai-dsh-tool-web/known-limitations-and-deferred-work/dev-note/future-model-facing-result-count-argument: + en: 3d3b2ccb34883308 + zh: 53f1a846631d68e4 diff --git a/packages/web/web-fetch-http/README.i18n.yaml b/packages/web/web-fetch-http/README.i18n.yaml index 179fc5ba40..0c12396788 100644 --- a/packages/web/web-fetch-http/README.i18n.yaml +++ b/packages/web/web-fetch-http/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/web/web-fetch-http/README.md -README.md: a3e6da087df37b051aa2dc506eb718b4876601de -README.zh.md: d57d10545ae8da63515ba1e3d53a06bca5090b67 +/: + en: a55f23f2363fdbd6 + zh: b1fd7328e041ec52 +/deepseek-ai-dsh-web-fetch-http: + en: 2e839bfc4c365701 + zh: 62dd5239ae93471c +/deepseek-ai-dsh-web-fetch-http/summary: + en: 88157c32f36635d5 + zh: a149d576df0349bc +/deepseek-ai-dsh-web-fetch-http/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web-fetch-http/use-this-package: + en: 630b12516d53e905 + zh: eed124cfe9c8dc1f +/deepseek-ai-dsh-web-fetch-http/use-this-package/when-to-choose-it: + en: eb52e77279c21d6f + zh: 0560e89caa377bfc +/deepseek-ai-dsh-web-fetch-http/use-this-package/minimal-configuration: + en: e4534189d5230861 + zh: 5905731d7b5d9c60 +/deepseek-ai-dsh-web-fetch-http/use-this-package/what-a-fetch-returns: + en: 2d18cdcc9b53dd0f + zh: 3bc6ca7c5933ee5d +/deepseek-ai-dsh-web-fetch-http/use-this-package/transport-behavior: + en: c432147daf2877cf + zh: c14d507dd66e124a +/deepseek-ai-dsh-web-fetch-http/use-this-package/failures-and-recovery: + en: 35407f106dc65deb + zh: 02118072fba68b8f +/deepseek-ai-dsh-web-fetch-http/understand-the-implementation: + en: 9842c69ad3636bb3 + zh: 3cdc3f816cbdd0cb +/deepseek-ai-dsh-web-fetch-http/understand-the-implementation/design-philosophy: + en: a8d806f0706f02e2 + zh: d922732a5b7e88bd +/deepseek-ai-dsh-web-fetch-http/understand-the-implementation/source-map: + en: e22ec70d55e0d8f7 + zh: 1a333660eae37b1f +/deepseek-ai-dsh-web-fetch-http/understand-the-implementation/read-path: + en: 749c0ffeac145807 + zh: 1468821a33a9518a +/deepseek-ai-dsh-web-fetch-http/further-exploration: + en: eeaaf0b455673a1c + zh: 0874f9f44ff9a220 +/deepseek-ai-dsh-web-fetch-http/model-experience: + en: 5c488f8d23ce3e90 + zh: 3cc8f8dc3ab60b65 +/deepseek-ai-dsh-web-fetch-http/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d75d48f485447a74 +/deepseek-ai-dsh-web-fetch-http/known-limitations-and-deferred-work: + en: 4d935fd8f466a234 + zh: c398eb7aa737f5ea +/deepseek-ai-dsh-web-fetch-http/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/web/web-search-deepseek/README.i18n.yaml b/packages/web/web-search-deepseek/README.i18n.yaml index 78947cae70..d6192fd142 100644 --- a/packages/web/web-search-deepseek/README.i18n.yaml +++ b/packages/web/web-search-deepseek/README.i18n.yaml @@ -1,6 +1,85 @@ -# 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 packages/web/web-search-deepseek/README.md -README.md: 6ac35d899ebfc281a3d830bd6050be46309f4ec9 -README.zh.md: 7693a7470872b59065e66cdf2d71e41bb9a1e016 +/: + en: d3ed4f8639422b9d + zh: 35c2ac10b0158bd3 +/deepseek-ai-dsh-web-search-deepseek: + en: d2c50aae9d869902 + zh: ee9f3f0ff575cbf9 +/deepseek-ai-dsh-web-search-deepseek/summary: + en: b5aa65b385b55fac + zh: 8ca37926bec97052 +/deepseek-ai-dsh-web-search-deepseek/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web-search-deepseek/use-this-package: + en: e0d352d6402d9d3b + zh: a449234557ef8bd6 +/deepseek-ai-dsh-web-search-deepseek/use-this-package/when-to-choose-it: + en: 942798c9aa6ba90f + zh: 800ddd760ff4ae0b +/deepseek-ai-dsh-web-search-deepseek/use-this-package/minimal-configuration: + en: edd0d2c2f18d0277 + zh: e3921e7e080a16a5 +/deepseek-ai-dsh-web-search-deepseek/use-this-package/what-a-search-returns: + en: e30442c90365357b + zh: 9c9e2f1182963a8a +/deepseek-ai-dsh-web-search-deepseek/use-this-package/request-logging: + en: 467b8238cf7e140c + zh: 85a519c8811557aa +/deepseek-ai-dsh-web-search-deepseek/use-this-package/failures-and-recovery: + en: 8b9211a88d2927dd + zh: a2b6bbaa8c4e1996 +/deepseek-ai-dsh-web-search-deepseek/understand-the-implementation: + en: 9842c69ad3636bb3 + zh: 3cdc3f816cbdd0cb +/deepseek-ai-dsh-web-search-deepseek/understand-the-implementation/design-philosophy: + en: 39d77f6c18cc791c + zh: d03a8d0a4e4addb2 +/deepseek-ai-dsh-web-search-deepseek/understand-the-implementation/source-map: + en: d354ae3f0f21f7c6 + zh: 95eb16d30d9c7a9c +/deepseek-ai-dsh-web-search-deepseek/understand-the-implementation/request-flow: + en: e2462cb33430dc4c + zh: c31579cf224dcda2 +/deepseek-ai-dsh-web-search-deepseek/further-exploration: + en: 59a97f197c044508 + zh: de191dd060c31801 +/deepseek-ai-dsh-web-search-deepseek/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-web-search-deepseek/model-experience/auxiliary-deepseek-search-request: + en: 722e4bf02953e236 + zh: b3432958beb7b60f +/deepseek-ai-dsh-web-search-deepseek/model-experience/auxiliary-deepseek-search-request/what-the-model-sees: + en: cac44ad2353afadd + zh: 23b27f833e47bf7e +/deepseek-ai-dsh-web-search-deepseek/model-experience/auxiliary-deepseek-search-request/token-effect: + en: f244b4dd6c9e6ad4 + zh: 50f2434d5119296b +/deepseek-ai-dsh-web-search-deepseek/model-experience/auxiliary-deepseek-search-request/kv-cache-effect: + en: 2bac9662f1792a79 + zh: 556d9baabd79f9cb +/deepseek-ai-dsh-web-search-deepseek/model-experience/conversation-tool-result-indirectly: + en: 666f5753c99783ab + zh: b44328e99bcc45c9 +/deepseek-ai-dsh-web-search-deepseek/model-experience/conversation-tool-result-indirectly/what-the-model-sees: + en: d438b6d9bc0dcc3c + zh: 93a311af5a178113 +/deepseek-ai-dsh-web-search-deepseek/model-experience/conversation-tool-result-indirectly/token-effect: + en: 01ec43a9b616139d + zh: 0a5b7c28fde34bcf +/deepseek-ai-dsh-web-search-deepseek/model-experience/conversation-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-web-search-deepseek/known-limitations-and-deferred-work: + en: c9fa522bcfa7bfef + zh: f95aeb879603bb62 +/deepseek-ai-dsh-web-search-deepseek/known-limitations-and-deferred-work/dev-note: + en: 7f775cc79dbce94b + zh: 12b8f68f9e7c48ca +/deepseek-ai-dsh-web-search-deepseek/known-limitations-and-deferred-work/dev-note/future-dedicated-retrieval-endpoint: + en: 5cfe3e3773c0abe7 + zh: a97e11f22b7a0434 diff --git a/packages/web/web-search-exa/README.i18n.yaml b/packages/web/web-search-exa/README.i18n.yaml index eb572e5988..62d49d070a 100644 --- a/packages/web/web-search-exa/README.i18n.yaml +++ b/packages/web/web-search-exa/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/web/web-search-exa/README.md -README.md: 2bfa2a40adba5636abf599d2579ede961702c997 -README.zh.md: 0511710df6aa2f0a57bafc91a17672bad7bc05fb +/: + en: 4b8ba0a939fdf9d4 + zh: 8b8ddab7cef0f022 +/deepseek-ai-dsh-web-search-exa: + en: 1e59112a8781b6f5 + zh: 858672d6f86534b5 +/deepseek-ai-dsh-web-search-exa/summary: + en: 0cd54ea674cbf9ff + zh: 62214ad882ff0e44 +/deepseek-ai-dsh-web-search-exa/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web-search-exa/use-this-package: + en: 44ecd69ae3a9e8d3 + zh: b5f26aa1580f90fc +/deepseek-ai-dsh-web-search-exa/use-this-package/when-to-choose-it: + en: d33f61122c271792 + zh: e097094e69b3f425 +/deepseek-ai-dsh-web-search-exa/use-this-package/minimal-configuration: + en: a90f952a3cb9a155 + zh: 27c8402fb6f85be2 +/deepseek-ai-dsh-web-search-exa/use-this-package/what-a-search-returns: + en: 72c9eb8a1563bfd6 + zh: 26f7069376a74090 +/deepseek-ai-dsh-web-search-exa/use-this-package/failures-and-recovery: + en: 5740595fa2cebf20 + zh: 7316e46e09d8ad9f +/deepseek-ai-dsh-web-search-exa/understand-the-implementation: + en: 9842c69ad3636bb3 + zh: 3cdc3f816cbdd0cb +/deepseek-ai-dsh-web-search-exa/understand-the-implementation/design-philosophy: + en: 341f17a367eca5b0 + zh: ca3a4e4b4956892d +/deepseek-ai-dsh-web-search-exa/understand-the-implementation/source-map: + en: 58dfdd4423914f34 + zh: 82c95e00bbb88028 +/deepseek-ai-dsh-web-search-exa/understand-the-implementation/request-and-mapping-flow: + en: 1fe92c2ad0408273 + zh: cc8c573e0accc8dc +/deepseek-ai-dsh-web-search-exa/further-exploration: + en: 3184010b324cfe4c + zh: e92c26f5ae57f21b +/deepseek-ai-dsh-web-search-exa/model-experience: + en: b1b5d9c71a0b07b4 + zh: 2802bef7723b6bf4 +/deepseek-ai-dsh-web-search-exa/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d75d48f485447a74 +/deepseek-ai-dsh-web-search-exa/known-limitations-and-deferred-work: + en: 24860838d1b7462e + zh: 4eb921101d89c877 +/deepseek-ai-dsh-web-search-exa/known-limitations-and-deferred-work/dev-note: + en: 7f775cc79dbce94b + zh: 12b8f68f9e7c48ca +/deepseek-ai-dsh-web-search-exa/known-limitations-and-deferred-work/dev-note/future-wider-exa-control-surface: + en: 7a6c72d34be40225 + zh: b525946646a9f856 diff --git a/packages/web/web-search-perplexity/README.i18n.yaml b/packages/web/web-search-perplexity/README.i18n.yaml index 93a0452ad8..9c22ccaeb6 100644 --- a/packages/web/web-search-perplexity/README.i18n.yaml +++ b/packages/web/web-search-perplexity/README.i18n.yaml @@ -1,6 +1,82 @@ -# 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 packages/web/web-search-perplexity/README.md -README.md: 21754cea3aeb7e288a8fa085bc5561a25144d6c7 -README.zh.md: 03ee456cc1d5288c0f5b45a7da03cd6e7c098107 +/: + en: 526b58d952111706 + zh: 463049f0091c6fa3 +/deepseek-ai-dsh-web-search-perplexity: + en: 81fab27010167b07 + zh: 673d38ae33bd95c0 +/deepseek-ai-dsh-web-search-perplexity/summary: + en: 355bf2550d1655df + zh: c659fa3e25a02d91 +/deepseek-ai-dsh-web-search-perplexity/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web-search-perplexity/use-this-package: + en: 1b854e582c65f3b4 + zh: 0e5dd9657ac6a721 +/deepseek-ai-dsh-web-search-perplexity/use-this-package/when-to-choose-it: + en: 194e1c83cf5a3281 + zh: c262d5dd92b62ea7 +/deepseek-ai-dsh-web-search-perplexity/use-this-package/minimal-configuration: + en: c253774c9d932f39 + zh: 08f693d10dcd54ed +/deepseek-ai-dsh-web-search-perplexity/use-this-package/what-a-search-returns: + en: 99d01f74dcf5aed9 + zh: 3c7bdaa3bd35847f +/deepseek-ai-dsh-web-search-perplexity/use-this-package/failures-and-recovery: + en: 5740595fa2cebf20 + zh: d99555411a131d2f +/deepseek-ai-dsh-web-search-perplexity/understand-the-implementation: + en: 9842c69ad3636bb3 + zh: 3cdc3f816cbdd0cb +/deepseek-ai-dsh-web-search-perplexity/understand-the-implementation/design-philosophy: + en: aee86ee45c4635c0 + zh: 45cecc44ae467520 +/deepseek-ai-dsh-web-search-perplexity/understand-the-implementation/source-map: + en: f481a8541f09f1cf + zh: c0c47902eae6973d +/deepseek-ai-dsh-web-search-perplexity/understand-the-implementation/request-and-mapping-flow: + en: ff5efa9c7b1a9cda + zh: ca1e246eb8e7eaee +/deepseek-ai-dsh-web-search-perplexity/further-exploration: + en: 67cf289420662cf2 + zh: 9f7e6e7d32e45ee7 +/deepseek-ai-dsh-web-search-perplexity/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-web-search-perplexity/model-experience/auxiliary-perplexity-request: + en: 9d564a5863828a46 + zh: 143112cfc85fe3f3 +/deepseek-ai-dsh-web-search-perplexity/model-experience/auxiliary-perplexity-request/what-the-model-sees: + en: eacb10a5e907e796 + zh: 74fbd30db7c983a1 +/deepseek-ai-dsh-web-search-perplexity/model-experience/auxiliary-perplexity-request/token-effect: + en: 5f5b2bf40168d371 + zh: 25bc3b50bc74ff20 +/deepseek-ai-dsh-web-search-perplexity/model-experience/auxiliary-perplexity-request/kv-cache-effect: + en: ca308291b52b8028 + zh: 12e8f89f79a2756c +/deepseek-ai-dsh-web-search-perplexity/model-experience/conversation-tool-result-indirectly: + en: 666f5753c99783ab + zh: b44328e99bcc45c9 +/deepseek-ai-dsh-web-search-perplexity/model-experience/conversation-tool-result-indirectly/what-the-model-sees: + en: 1bab9dad335b62eb + zh: 1d64c077b88c316e +/deepseek-ai-dsh-web-search-perplexity/model-experience/conversation-tool-result-indirectly/token-effect: + en: 8c5d9983ba129daf + zh: 3e7889629bed353d +/deepseek-ai-dsh-web-search-perplexity/model-experience/conversation-tool-result-indirectly/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: f681f89596f500f5 +/deepseek-ai-dsh-web-search-perplexity/known-limitations-and-deferred-work: + en: db86c590e6ffb159 + zh: 35c4cfa9f4b6a1fa +/deepseek-ai-dsh-web-search-perplexity/known-limitations-and-deferred-work/dev-note: + en: 7f775cc79dbce94b + zh: 12b8f68f9e7c48ca +/deepseek-ai-dsh-web-search-perplexity/known-limitations-and-deferred-work/dev-note/future-wider-perplexity-control-surface: + en: 86cd7f67c96e6b0e + zh: ab991807ddf2f470 diff --git a/packages/web/web/README.i18n.yaml b/packages/web/web/README.i18n.yaml index ae99fe307e..af1d8e19b2 100644 --- a/packages/web/web/README.i18n.yaml +++ b/packages/web/web/README.i18n.yaml @@ -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 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 packages/web/web/README.md -README.md: 157c6d9e3a33b58b982e7c513b5e89af3878fa6d -README.zh.md: f937fc127b7f6e1021e5f1d8ce210605ca8c8bd1 +/: + en: 31868a4f15364a93 + zh: 86824e1a18e237a7 +/deepseek-ai-dsh-web: + en: 638e10f75ba99e83 + zh: 048f07902d57284b +/deepseek-ai-dsh-web/summary: + en: 1b5907fc6e19e082 + zh: 7e9ec25da5405e31 +/deepseek-ai-dsh-web/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-web/use-this-package: + en: 785a97708cc9181c + zh: 0d39ff291d483102 +/deepseek-ai-dsh-web/use-this-package/when-to-choose-it: + en: 557a8a3f2dfebae4 + zh: 3c85382484e4b717 +/deepseek-ai-dsh-web/use-this-package/minimal-configuration: + en: 71517ad8040d3c0c + zh: 003068238cb40fa5 +/deepseek-ai-dsh-web/use-this-package/searching-and-fetching: + en: 713944abf68263cd + zh: c428cb53b8708e99 +/deepseek-ai-dsh-web/use-this-package/provider-selection: + en: a1d16fc8e3d3d7eb + zh: d7c91ce0bbd5e0e7 +/deepseek-ai-dsh-web/use-this-package/failures-and-recovery: + en: d8d09ed3839f6474 + zh: 7164d902f333592a +/deepseek-ai-dsh-web/understand-the-implementation: + en: a3364d8193deb7f0 + zh: d1c4afbf25a7ae4d +/deepseek-ai-dsh-web/understand-the-implementation/design-philosophy: + en: c4d5437cfb1e2157 + zh: 411b1b398de73426 +/deepseek-ai-dsh-web/understand-the-implementation/source-map: + en: 75e450b263def321 + zh: 7f28ff78ba2a5f03 +/deepseek-ai-dsh-web/understand-the-implementation/data-model: + en: 300340ff8465a03e + zh: 34ab66eb6969dc94 +/deepseek-ai-dsh-web/understand-the-implementation/selection-flow: + en: 07dcd35a0a6369b2 + zh: 927fe797d9079547 +/deepseek-ai-dsh-web/further-exploration: + en: 4d20191bdcda4090 + zh: 304bade4ce9db317 +/deepseek-ai-dsh-web/model-experience: + en: 63b036297656ad0b + zh: 86148aba2555a37f +/deepseek-ai-dsh-web/model-experience/kv-cache-effect: + en: 40294c1c31b74824 + zh: d75d48f485447a74 +/deepseek-ai-dsh-web/known-limitations-and-deferred-work: + en: 351cb8edb6898838 + zh: ed5b3f95a542e6bf +/deepseek-ai-dsh-web/known-limitations-and-deferred-work/dev-note: + en: 7f775cc79dbce94b + zh: 12b8f68f9e7c48ca +/deepseek-ai-dsh-web/known-limitations-and-deferred-work/dev-note/future-observing-provider-state: + en: 855f97574a820579 + zh: 360ff6cd2ed82904 diff --git a/packages/webhook/README.i18n.yaml b/packages/webhook/README.i18n.yaml index f0c3490182..0f3a4c5b42 100644 --- a/packages/webhook/README.i18n.yaml +++ b/packages/webhook/README.i18n.yaml @@ -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 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 packages/webhook/README.md -README.md: fa35bf07d20760dd66b8443af27d79c12c2ba676 -README.zh.md: fa941391b23a2bd68d0e615245290e2b9cc9f19d +/: + en: 4b01653e4ccb53d2 + zh: 85df5bd61bac9fe6 +/webhook-verified-external-events-to-dsh-sessions: + en: 56361bc7c10f73ad + zh: 2a40c90775045766 +/webhook-verified-external-events-to-dsh-sessions/summary: + en: 297975121095f74a + zh: 9530dbf3c90d1ae0 +/webhook-verified-external-events-to-dsh-sessions/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/webhook-verified-external-events-to-dsh-sessions/packages: + en: 7bebbc165a382b0d + zh: ee601ab6a4c467ee +/webhook-verified-external-events-to-dsh-sessions/related-documentation: + en: 24b7903a3f1f7dce + zh: fab213faf1d22760 +/webhook-verified-external-events-to-dsh-sessions/dev-note: + en: b75c8458928b72b9 + zh: 003ba4e17b4b5269 diff --git a/packages/webhook/webhook-github/README.i18n.yaml b/packages/webhook/webhook-github/README.i18n.yaml index eb3c5eed64..56b4a4c005 100644 --- a/packages/webhook/webhook-github/README.i18n.yaml +++ b/packages/webhook/webhook-github/README.i18n.yaml @@ -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 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 packages/webhook/webhook-github/README.md -README.md: 9c2b20f4abbc183fd5aa78454ce3b2c9266aa79c -README.zh.md: 8dae90aaa7a1d6df6d50e3170f841e986ce6e97d +/: + en: 60db7ae899ed9fd9 + zh: 4fe10fa8823aa6d1 +/deepseek-ai-dsh-webhook-github: + en: 23be5c358de960ea + zh: 23862fc948bc76a2 +/deepseek-ai-dsh-webhook-github/summary: + en: 2db19f03dc3daea7 + zh: 291598d5f67485b9 +/deepseek-ai-dsh-webhook-github/table-of-contents: + en: b946752a1c17cd00 + zh: cdaaea55e4da6831 +/deepseek-ai-dsh-webhook-github/configuration: + en: a32a5195a6ae6a61 + zh: a135089e86948290 +/deepseek-ai-dsh-webhook-github/http-contract: + en: 2d8b5cb8d44bef8e + zh: a98ec470d9d6bc2d +/deepseek-ai-dsh-webhook-github/dedicated-listener-composition: + en: 8197edec97bbd8fe + zh: 7e3d070a5d4a985d +/deepseek-ai-dsh-webhook-github/model-experience: + en: 17c5ff7cc39c5a2e + zh: f6fe32ae981dc4b6 +/deepseek-ai-dsh-webhook-github/model-experience/kv-cache-effect: + en: a7c54f451f61179e + zh: aaf25d0781ad4d6b +/deepseek-ai-dsh-webhook-github/known-limitations-and-deferred-work: + en: 0c3192c3e300bb46 + zh: 7c84d20e6a8a768e +/deepseek-ai-dsh-webhook-github/known-limitations-and-deferred-work/dev-note: + en: cd9dd4a041ca520e + zh: 9fd648221ae335c4 diff --git a/packages/webhook/webhook/README.i18n.yaml b/packages/webhook/webhook/README.i18n.yaml index a4c53cdbf7..a67106a1a8 100644 --- a/packages/webhook/webhook/README.i18n.yaml +++ b/packages/webhook/webhook/README.i18n.yaml @@ -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 packages/webhook/webhook/README.md -README.md: 685bf3befa1aee3af336452d771c40c01d42c70d -README.zh.md: db0801fcbd4aa81a8f24bd706673d1ee4629ed1f +/: + en: e4ac1bc2fef159c0 + zh: a2d724d2cffb6608 +/deepseek-ai-dsh-webhook: + en: eb5cd36cbfde500e + zh: 482692e07c7aea4e +/deepseek-ai-dsh-webhook/summary: + en: 406c9bffd5078cb3 + zh: c7e732b80df254a8 +/deepseek-ai-dsh-webhook/table-of-contents: + en: 2c6f2175556251ee + zh: 753d216d980e1735 +/deepseek-ai-dsh-webhook/rule-interface: + en: d9674188535399ab + zh: c52fe9b7ebe8fe79 +/deepseek-ai-dsh-webhook/session-request: + en: e4d096efc8633575 + zh: b1bf7d45fe76c380 +/deepseek-ai-dsh-webhook/composition: + en: 6a19f22997772945 + zh: b92bec411e0406bc +/deepseek-ai-dsh-webhook/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-webhook/model-experience/rule-authored-initial-prompt: + en: d9d6f7525ae75c28 + zh: 981d9ea68b9e884b +/deepseek-ai-dsh-webhook/model-experience/rule-authored-initial-prompt/what-the-model-sees: + en: 44859d5d877a1484 + zh: 0f6c96ff6435167b +/deepseek-ai-dsh-webhook/model-experience/rule-authored-initial-prompt/token-effect: + en: 13937f95014a6bea + zh: c61031459298c4ab +/deepseek-ai-dsh-webhook/model-experience/rule-authored-initial-prompt/kv-cache-effect: + en: 88b78de3ce71698f + zh: d13964bad7485d4e +/deepseek-ai-dsh-webhook/known-limitations-and-deferred-work: + en: 49d9bd7c7c327cc0 + zh: ab94de11bbda1936 +/deepseek-ai-dsh-webhook/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: e88aeb617ffb74ea diff --git a/packages/workflow/README.i18n.yaml b/packages/workflow/README.i18n.yaml index 4b3f4ae283..c3d01c9685 100644 --- a/packages/workflow/README.i18n.yaml +++ b/packages/workflow/README.i18n.yaml @@ -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 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 packages/workflow/README.md -README.md: 2eb78c2b8fce87aeadad5fab4f3d5a5ea983e514 -README.zh.md: 33f590e36b01d138438a491b4521e27b82da9f10 +/: + en: 0b277ab2cedf1fd0 + zh: 50be5faef003fdcf +/packages-workflow: + en: 8c61f1eb2b3756e5 + zh: ee5ac986d79f877c +/packages-workflow/summary: + en: 3fee8a896346ff4d + zh: fb37dbe9ac084eb5 +/packages-workflow/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-workflow/packages: + en: 02e5fd1d11016051 + zh: 750f4df962466241 +/packages-workflow/related-documentation: + en: 03d86d53ef4808f6 + zh: 8e760143cd34cf14 +/packages-workflow/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/workflow/tool-ralph/README.i18n.yaml b/packages/workflow/tool-ralph/README.i18n.yaml index 383e97d8ad..15437507a1 100644 --- a/packages/workflow/tool-ralph/README.i18n.yaml +++ b/packages/workflow/tool-ralph/README.i18n.yaml @@ -1,6 +1,100 @@ -# 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 packages/workflow/tool-ralph/README.md -README.md: d94d3a6ca9b74e65a386b3ca43c8dd34ce8781a0 -README.zh.md: bb7b3bd81d1b72a501a687dc92e5f2ce49ac7969 +/: + en: e2a31cca62823561 + zh: c06ff93cf98b67e4 +/deepseek-ai-dsh-tool-ralph: + en: 9b8347f16cf12c09 + zh: f5593f514c261301 +/deepseek-ai-dsh-tool-ralph/summary: + en: 9821960147153443 + zh: 0b24aab94a5dc12b +/deepseek-ai-dsh-tool-ralph/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-ralph/use-this-package: + en: 13380e1170c6a3b5 + zh: 2f2665f2ee5ff6f7 +/deepseek-ai-dsh-tool-ralph/use-this-package/calling-the-tool: + en: f43e8fbcf272ac45 + zh: 46719b415d9ad4bf +/deepseek-ai-dsh-tool-ralph/use-this-package/what-each-round-sees: + en: 2d8b861c4bcb9424 + zh: 63c7b2d00c324727 +/deepseek-ai-dsh-tool-ralph/use-this-package/config: + en: 4f0ba81742e46af0 + zh: e47ba7d9737fa51f +/deepseek-ai-dsh-tool-ralph/understand-the-implementation: + en: 0999ea3a4c9da48c + zh: 83013ee36a8689af +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/design-concept: + en: a6aea42b6289ec9e + zh: 305461828b33e67a +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/fixed-script-and-routing: + en: fa2cfda2d9d121e6 + zh: 75720bd6244a2c96 +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/report-validation: + en: 65f90bce7ef1fe5b + zh: 04c8d5ad08a9007c +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/lifecycle-and-cancellation: + en: fdd98f9e2d2ec378 + zh: 72e3da1f3c717aa6 +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/render-intent: + en: 07e071bd44b1df65 + zh: 26f1cb2eab8c25b0 +/deepseek-ai-dsh-tool-ralph/understand-the-implementation/source-map: + en: b0cf0927913968fb + zh: 6170b4c8d2529a41 +/deepseek-ai-dsh-tool-ralph/further-exploration: + en: 9ab6ec527d57aee1 + zh: e0258a158b8027ea +/deepseek-ai-dsh-tool-ralph/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-ralph/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-ralph/model-experience/system-prompt/what-the-model-sees: + en: bcfb20c5be49c2c4 + zh: c666f686a648fc0f +/deepseek-ai-dsh-tool-ralph/model-experience/system-prompt/what-the-model-sees/ralph-guidance: + en: 4ee32d69a7ae2aba + zh: bdf2035f010ab56a +/deepseek-ai-dsh-tool-ralph/model-experience/system-prompt/token-effect: + en: dab67480bfde6224 + zh: 85bbf18da3767aa7 +/deepseek-ai-dsh-tool-ralph/model-experience/system-prompt/kv-cache-effect: + en: 13e7c6007bf6b5dc + zh: 2b0da8b6dc00aa5e +/deepseek-ai-dsh-tool-ralph/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-ralph/model-experience/tool-schema/what-the-model-sees: + en: d3e219e3f0e507ed + zh: daf8093ed21eb9cf +/deepseek-ai-dsh-tool-ralph/model-experience/tool-schema/token-effect: + en: 0af719618f9f99d2 + zh: a719a4e5df1406a4 +/deepseek-ai-dsh-tool-ralph/model-experience/tool-schema/kv-cache-effect: + en: 79a20d1db0f4a32e + zh: c72a19d9a6c0bff3 +/deepseek-ai-dsh-tool-ralph/model-experience/child-requests-and-parent-result: + en: 55181fb745ab8135 + zh: ebeea6a8748986d2 +/deepseek-ai-dsh-tool-ralph/model-experience/child-requests-and-parent-result/what-the-model-sees: + en: 788029304e88ea74 + zh: 0e0281c7cc393dff +/deepseek-ai-dsh-tool-ralph/model-experience/child-requests-and-parent-result/token-effect: + en: ab2d30ed91979cbc + zh: bb074b02c4b05e4f +/deepseek-ai-dsh-tool-ralph/model-experience/child-requests-and-parent-result/kv-cache-effect: + en: 8f28959dc87d1f2f + zh: c034c5c0bdaf9bba +/deepseek-ai-dsh-tool-ralph/known-limitations-and-deferred-work: + en: 922fd33532125ebb + zh: 27d508697ebc7668 +/deepseek-ai-dsh-tool-ralph/known-limitations-and-deferred-work/dev-note: + en: 8f24c317039e1974 + zh: c6209969ad21f16c diff --git a/packages/workflow/tool-workflow/README.i18n.yaml b/packages/workflow/tool-workflow/README.i18n.yaml index 01e58ec339..94be1a230d 100644 --- a/packages/workflow/tool-workflow/README.i18n.yaml +++ b/packages/workflow/tool-workflow/README.i18n.yaml @@ -1,6 +1,103 @@ -# 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 packages/workflow/tool-workflow/README.md -README.md: ce2804d2db83e410edb248332c517200dd6963dc -README.zh.md: 2ef39745a74eb6ab899108613c8cc8ac396f1352 +/: + en: de1de2c83432e095 + zh: facea56204dc9c76 +/deepseek-ai-dsh-tool-workflow: + en: b8980ef14abe1385 + zh: 4052bf0c13f7917a +/deepseek-ai-dsh-tool-workflow/summary: + en: c18878dbaecc42bb + zh: 360e2a13717bdb04 +/deepseek-ai-dsh-tool-workflow/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-tool-workflow/use-this-package: + en: a0a9d655187f285d + zh: 230b4556fff9f08b +/deepseek-ai-dsh-tool-workflow/use-this-package/calling-the-tool: + en: 56fbfa179831e1b1 + zh: b8eaf46fa0e40cf2 +/deepseek-ai-dsh-tool-workflow/use-this-package/what-to-expect-during-a-run: + en: 19ec4f830edb8e1a + zh: 8579ae5274aca6de +/deepseek-ai-dsh-tool-workflow/use-this-package/background-runs: + en: 3083f3f2657a46e3 + zh: bca5cb741ea76798 +/deepseek-ai-dsh-tool-workflow/use-this-package/config: + en: 18d1067a480e072e + zh: cf27e51f0dec2f4d +/deepseek-ai-dsh-tool-workflow/understand-the-implementation: + en: 18684e6da513cdb5 + zh: bd4cdcabfe4722ec +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/design-concept: + en: 6d09119d1393c254 + zh: a7cc03daa59650ec +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/run-lifecycle: + en: 8ea9ce564251249a + zh: a59b88cc14a25a1f +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/background-lifecycle: + en: 35950b2015800ec5 + zh: 5ae6f5a5e53dc585 +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/durable-session-records: + en: b491e7ab9590e625 + zh: c0a2fb797eb1cca0 +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/render-intent: + en: 389b3740ec1f5ac2 + zh: 78430014f5e270e2 +/deepseek-ai-dsh-tool-workflow/understand-the-implementation/source-map: + en: 8a426c65b06a2320 + zh: e2bb8f12252fbd4d +/deepseek-ai-dsh-tool-workflow/further-exploration: + en: cf5f97e745586c05 + zh: 32fa36224cde5d83 +/deepseek-ai-dsh-tool-workflow/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-tool-workflow/model-experience/system-prompt: + en: cf78b9dd5596495f + zh: bd44560f8c2435e8 +/deepseek-ai-dsh-tool-workflow/model-experience/system-prompt/what-the-model-sees: + en: 13411e342534174d + zh: 0991c63ac26ada3f +/deepseek-ai-dsh-tool-workflow/model-experience/system-prompt/what-the-model-sees/workflow-guidance: + en: 214b61fe5bdb1097 + zh: 2358fc753d21f12c +/deepseek-ai-dsh-tool-workflow/model-experience/system-prompt/token-effect: + en: dab67480bfde6224 + zh: 85bbf18da3767aa7 +/deepseek-ai-dsh-tool-workflow/model-experience/system-prompt/kv-cache-effect: + en: 13e7c6007bf6b5dc + zh: 1690c361c6f07ba4 +/deepseek-ai-dsh-tool-workflow/model-experience/tool-schema: + en: e4c7376d4f29dbd5 + zh: 6b7a9eaf69c9ea53 +/deepseek-ai-dsh-tool-workflow/model-experience/tool-schema/what-the-model-sees: + en: 5af871e5bc1126c7 + zh: 07b5e2b37c766a7e +/deepseek-ai-dsh-tool-workflow/model-experience/tool-schema/token-effect: + en: 2038bdeb03f99195 + zh: 90959fa2708b910f +/deepseek-ai-dsh-tool-workflow/model-experience/tool-schema/kv-cache-effect: + en: e01353abf883d9ba + zh: 3c9e5d6bd7f4e831 +/deepseek-ai-dsh-tool-workflow/model-experience/tool-call-history-and-result: + en: 9717b983b6a857e3 + zh: 611a2dadf7c0c706 +/deepseek-ai-dsh-tool-workflow/model-experience/tool-call-history-and-result/what-the-model-sees: + en: acd5e87161ced588 + zh: 5ffe85926ee1b88d +/deepseek-ai-dsh-tool-workflow/model-experience/tool-call-history-and-result/token-effect: + en: 88cfc89c7dc19dbb + zh: 75e674844f311937 +/deepseek-ai-dsh-tool-workflow/model-experience/tool-call-history-and-result/kv-cache-effect: + en: f5d5f97a153f7c70 + zh: 3d6bc05b9eadfbc2 +/deepseek-ai-dsh-tool-workflow/known-limitations-and-deferred-work: + en: 28e362db0d4d929f + zh: d2b1a4da09f55a42 +/deepseek-ai-dsh-tool-workflow/known-limitations-and-deferred-work/dev-note: + en: 9e9abf9ef01e719a + zh: df286968b39ec955 diff --git a/packages/workflow/workflow-ptc/README.i18n.yaml b/packages/workflow/workflow-ptc/README.i18n.yaml index 4b17b7fd9c..b4149410cf 100644 --- a/packages/workflow/workflow-ptc/README.i18n.yaml +++ b/packages/workflow/workflow-ptc/README.i18n.yaml @@ -1,6 +1,79 @@ -# 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 packages/workflow/workflow-ptc/README.md -README.md: ddc160a2725d36cf30afede2d4afed746a6b89d1 -README.zh.md: 3b562bfe12f5dfdc22b55f209d2120a548d60c24 +/: + en: c38b437e7e319d4b + zh: 2da5213a6120586c +/deepseek-ai-dsh-workflow-ptc: + en: 9f43ea90b0eb3f34 + zh: dc0afea0b135f671 +/deepseek-ai-dsh-workflow-ptc/summary: + en: 9b6df6defa779ce7 + zh: 43db3d8918707117 +/deepseek-ai-dsh-workflow-ptc/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-workflow-ptc/use-this-package: + en: 83b0c102b3c07260 + zh: 7890bb8609063777 +/deepseek-ai-dsh-workflow-ptc/use-this-package/minimal-configuration: + en: 9c31c6e17ba018ed + zh: 85ffe20ce8a5a371 +/deepseek-ai-dsh-workflow-ptc/use-this-package/results-and-failures: + en: 483134c11525910a + zh: d2ad48023e4a4be9 +/deepseek-ai-dsh-workflow-ptc/use-this-package/file-policy-and-cancellation: + en: abc56c2117c83d1c + zh: 4574a44302f70c20 +/deepseek-ai-dsh-workflow-ptc/understand-the-implementation: + en: 52aee3bea250e968 + zh: d606ae0fbb5c97b4 +/deepseek-ai-dsh-workflow-ptc/understand-the-implementation/design-concept: + en: 9b3beda22fb408f7 + zh: ac8701b4a7591b0e +/deepseek-ai-dsh-workflow-ptc/understand-the-implementation/source-map: + en: 5196e336f2c9323c + zh: 6663f239334ee9fe +/deepseek-ai-dsh-workflow-ptc/understand-the-implementation/values-and-child-ownership: + en: 4e866f00a49d76e7 + zh: 15a02d9ccc33d08f +/deepseek-ai-dsh-workflow-ptc/understand-the-implementation/cancellation-and-outcomes: + en: 8b8806d701e3d32d + zh: cfa21c4962be2fa4 +/deepseek-ai-dsh-workflow-ptc/further-exploration: + en: 8fa36196dfbb0906 + zh: 301c6efb8a7dfffe +/deepseek-ai-dsh-workflow-ptc/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-workflow-ptc/model-experience/child-agent-requests: + en: 8f3d45818caf7681 + zh: 2b05d2b97bfa67da +/deepseek-ai-dsh-workflow-ptc/model-experience/child-agent-requests/what-the-model-sees: + en: 207131ad9d942e73 + zh: 482dc514468f6adf +/deepseek-ai-dsh-workflow-ptc/model-experience/child-agent-requests/token-effect: + en: 1bae55249b0f3074 + zh: dc173f1b0d84e4ae +/deepseek-ai-dsh-workflow-ptc/model-experience/child-agent-requests/kv-cache-effect: + en: 69bb287c8fb3fa53 + zh: 5601479497ae38f2 +/deepseek-ai-dsh-workflow-ptc/model-experience/parent-tool-result-indirectly: + en: 75d061c2151624a7 + zh: 71e58e020b60ff90 +/deepseek-ai-dsh-workflow-ptc/model-experience/parent-tool-result-indirectly/what-the-model-sees: + en: 0bcd125dbda955d8 + zh: b92b5a58e3630522 +/deepseek-ai-dsh-workflow-ptc/model-experience/parent-tool-result-indirectly/token-effect: + en: 4de147b4a1fd87cb + zh: 772f8777b67ebbb1 +/deepseek-ai-dsh-workflow-ptc/model-experience/parent-tool-result-indirectly/kv-cache-effect: + en: 19f4d26f590d11ac + zh: 64e6e18b2a8a8395 +/deepseek-ai-dsh-workflow-ptc/known-limitations-and-deferred-work: + en: b95d53d19ceb44ff + zh: 082d51f78b68aea5 +/deepseek-ai-dsh-workflow-ptc/known-limitations-and-deferred-work/dev-note: + en: e67f633dc6fe7773 + zh: 3bb0c20c93f16f98 diff --git a/packages/workflow/workflow/README.i18n.yaml b/packages/workflow/workflow/README.i18n.yaml index 99f5cc5abd..6c21794753 100644 --- a/packages/workflow/workflow/README.i18n.yaml +++ b/packages/workflow/workflow/README.i18n.yaml @@ -1,6 +1,61 @@ -# 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 packages/workflow/workflow/README.md -README.md: de167e520e34d823f14cb6c13c57b24067ceb85a -README.zh.md: 77f2cddd3dbdb07df994d203892d1ed3ab359eed +/: + en: 2db6c7ad9f69f2b8 + zh: ccfc28844ee5cebd +/deepseek-ai-dsh-workflow: + en: 66b7ebaf4283775e + zh: 70e7cef1a19a52d4 +/deepseek-ai-dsh-workflow/summary: + en: c7603bd9094b5102 + zh: 661b875a7683e5fc +/deepseek-ai-dsh-workflow/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-workflow/use-this-package: + en: bda974ed11bff0cb + zh: 91724b1f624a4ca6 +/deepseek-ai-dsh-workflow/use-this-package/the-model-facing-path: + en: ce15aee67cce8b25 + zh: 1a7a812f5fd77492 +/deepseek-ai-dsh-workflow/use-this-package/running-a-workflow-script: + en: 938a268642212305 + zh: 08d094d12060e349 +/deepseek-ai-dsh-workflow/use-this-package/programmatic-runs: + en: 7a7173fc43e9e5f4 + zh: 2488e8bb8c69bb4b +/deepseek-ai-dsh-workflow/use-this-package/failures-and-recovery: + en: 69e3e5358c089908 + zh: 1d17b4e8aad5f028 +/deepseek-ai-dsh-workflow/understand-the-implementation: + en: 32d9c2e2fd581462 + zh: 04ed23a3d3bb4e19 +/deepseek-ai-dsh-workflow/understand-the-implementation/design-concept: + en: 274b3de2f7b713ec + zh: e3953c1ae1f59442 +/deepseek-ai-dsh-workflow/understand-the-implementation/source-map: + en: 67240e519a3e725f + zh: 495f806856054230 +/deepseek-ai-dsh-workflow/understand-the-implementation/lifecycle-and-ownership: + en: 95b074d816b52323 + zh: dfa070a1531651f9 +/deepseek-ai-dsh-workflow/understand-the-implementation/failure-discipline: + en: e2c2a6e2876457e8 + zh: 764cba9eede4bb79 +/deepseek-ai-dsh-workflow/further-exploration: + en: 727ba336da235497 + zh: 4562f0653af6b975 +/deepseek-ai-dsh-workflow/model-experience: + en: e8bb1d12900a4025 + zh: b8936a40dc5867d6 +/deepseek-ai-dsh-workflow/model-experience/kv-cache-effect: + en: 243e59cc08420e3b + zh: 14d648f12ae48786 +/deepseek-ai-dsh-workflow/known-limitations-and-deferred-work: + en: 5f6f60fbb44f67e9 + zh: 0b1b9018f09aad25 +/deepseek-ai-dsh-workflow/known-limitations-and-deferred-work/dev-note: + en: e225f492e530edc1 + zh: 62234cac2367cc97 diff --git a/packages/workspace/README.i18n.yaml b/packages/workspace/README.i18n.yaml index 9d378b0880..0ca322de35 100644 --- a/packages/workspace/README.i18n.yaml +++ b/packages/workspace/README.i18n.yaml @@ -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 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 packages/workspace/README.md -README.md: fee300207fc53bbf4eae64a3537594dbb17a26fa -README.zh.md: c0401946f6a14a2c3cb5ffb04af2f2ccc8f53f8c +/: + en: 79b8272a8456d63f + zh: f3882bd5e142ef5c +/packages-workspace: + en: 18277b1abbfdb875 + zh: 81bc5f86ae94de79 +/packages-workspace/summary: + en: 0a47673229612c3d + zh: a57b8789d68c85f6 +/packages-workspace/table-of-contents: + en: 1eb35b015a6c423f + zh: a8a3dceee2c9e943 +/packages-workspace/packages: + en: 35dfc3e7873380fa + zh: fa48b9976a592a27 +/packages-workspace/related-documentation: + en: 3d60a9bf7ec74e51 + zh: 534e123cc6ff0410 +/packages-workspace/dev-note: + en: 5de1d6304e00c58f + zh: 8d8225361cfa29e5 diff --git a/packages/workspace/workspace/README.i18n.yaml b/packages/workspace/workspace/README.i18n.yaml index 74ba415914..dfd1b7da69 100644 --- a/packages/workspace/workspace/README.i18n.yaml +++ b/packages/workspace/workspace/README.i18n.yaml @@ -1,6 +1,88 @@ -# 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 packages/workspace/workspace/README.md -README.md: 59b314a7302c5cf83314d08f6e8bdfe2dccba37f -README.zh.md: 78d563ee59048d5b1b6f976ac26f64907174645d +/: + en: d112c03aefc9a73d + zh: e2ea3f0a9c814a23 +/deepseek-ai-dsh-workspace: + en: 7a12adba4e7766e3 + zh: f6d5c8374f4512c8 +/deepseek-ai-dsh-workspace/summary: + en: 58d66b238882b849 + zh: a427930afd293c6b +/deepseek-ai-dsh-workspace/table-of-contents: + en: d152484eb41ac6b4 + zh: 09388d293f9be9cb +/deepseek-ai-dsh-workspace/use-this-package: + en: 37d744451570942e + zh: 7f8200725a1cca54 +/deepseek-ai-dsh-workspace/use-this-package/when-to-use-it: + en: f24dd905d5bcac3e + zh: 16b91b99fdaf5add +/deepseek-ai-dsh-workspace/use-this-package/setting-up: + en: f4611634be527eb0 + zh: 89d35d640a2c1cc4 +/deepseek-ai-dsh-workspace/use-this-package/creating-and-ordering-projects: + en: a092fc7b0db9c299 + zh: 6d7ed93e34237773 +/deepseek-ai-dsh-workspace/use-this-package/first-use-workspace: + en: 82035b4879d77b17 + zh: 3a867af2f0e6fc3f +/deepseek-ai-dsh-workspace/use-this-package/grouping-sessions-under-a-project: + en: 510be21d012de28c + zh: fdcb05447d6ba93c +/deepseek-ai-dsh-workspace/use-this-package/hiding-and-restoring-sessions-and-removing-projects: + en: f6f19cd64d8db3b0 + zh: 55875a2c4d8e4d1f +/deepseek-ai-dsh-workspace/understand-the-implementation: + en: 447ced401b3b14a8 + zh: 3ce2105605223945 +/deepseek-ai-dsh-workspace/understand-the-implementation/design-philosophy: + en: e8ff536e19566447 + zh: 53ba4c15f10c1549 +/deepseek-ai-dsh-workspace/understand-the-implementation/api-behavior: + en: 69327adb9ea52680 + zh: fa32eea5019c7abb +/deepseek-ai-dsh-workspace/understand-the-implementation/source-map: + en: c6de390af6b1a187 + zh: 85699c7c5c3afe3a +/deepseek-ai-dsh-workspace/understand-the-implementation/durable-shape: + en: 056a266f4a15b29d + zh: e1589f5750662887 +/deepseek-ai-dsh-workspace/understand-the-implementation/lifecycle: + en: e41db10d48acbf9a + zh: 457d329fe37ba33c +/deepseek-ai-dsh-workspace/understand-the-implementation/failure-and-recovery: + en: 7a2f7802debbdd75 + zh: fbf4603f52863a6c +/deepseek-ai-dsh-workspace/understand-the-implementation/invariant: + en: d20f2bba9aab0d1d + zh: 2ff06f27e7a8a867 +/deepseek-ai-dsh-workspace/further-exploration: + en: ea6e4da02bc6da4e + zh: 5168484d76a27436 +/deepseek-ai-dsh-workspace/model-experience: + en: 215e7ba838619b7b + zh: a311da3843709f90 +/deepseek-ai-dsh-workspace/model-experience/workspace-records-and-session-accounts: + en: c5c7dfdfe3cea27f + zh: 6e75bd1afacba4c4 +/deepseek-ai-dsh-workspace/model-experience/workspace-records-and-session-accounts/what-the-model-sees: + en: ab7deb3130db939e + zh: b717a7fc60146cd3 +/deepseek-ai-dsh-workspace/model-experience/workspace-records-and-session-accounts/token-effect: + en: 5b83ac7ce1ea1346 + zh: dc56664cd257ab8e +/deepseek-ai-dsh-workspace/model-experience/workspace-records-and-session-accounts/kv-cache-effect: + en: 524afbded27fb06b + zh: 9dcf8539495e9c68 +/deepseek-ai-dsh-workspace/known-limitations-and-deferred-work: + en: ca8f1d8617b303eb + zh: aeff1adad175ebb5 +/deepseek-ai-dsh-workspace/known-limitations-and-deferred-work/dev-note: + en: ac1d08360a93382b + zh: 6c58749bae9a6e65 +/deepseek-ai-dsh-workspace/known-limitations-and-deferred-work/dev-note/open-the-create-path-title-title-parameter: + en: 65867b2bb7aba416 + zh: 38547efe92828640 diff --git a/python/README.i18n.yaml b/python/README.i18n.yaml index 380b2edc46..2244d7f779 100644 --- a/python/README.i18n.yaml +++ b/python/README.i18n.yaml @@ -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 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 python/README.md -README.md: d82195fa8a3f39bea129030b2eaf7d65536041e0 -README.zh.md: c1432ae94369c37df548d2fd09fb3a7ac088e393 +/deepseek-harness-python-sdk: + en: aa08432a8887185d + zh: 85b40b48790c04db +/deepseek-harness-python-sdk/packages: + en: 485e9978ed4f6dee + zh: fccda14b1b84cecf +/deepseek-harness-python-sdk/behavior: + en: ccb264c8850ae568 + zh: 2580e6d587193bb0 +/deepseek-harness-python-sdk/contributor-workflows: + en: 292b8aab762f515a + zh: 93da3d5c6af97d70 diff --git a/python/development.i18n.yaml b/python/development.i18n.yaml index f568fedc82..87d4d3503b 100644 --- a/python/development.i18n.yaml +++ b/python/development.i18n.yaml @@ -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 development.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 python/development.md -development.md: b36a26b08631ae02532d6f190bab968c1ec24720 -development.zh.md: 81e8015bbcf45424dfb595154bab0ffe1e501251 +/python-contributor-workflows: + en: e14647f4d39e03f6 + zh: 354bd37e6aea1e86 +/python-contributor-workflows/build-runtime-artifacts: + en: 8e99640e4936332d + zh: 729d5de1e0ad2869 +/python-contributor-workflows/validate-the-sdk: + en: a5d58453392437d2 + zh: aa3fa84703d894da +/python-contributor-workflows/run-against-node-source: + en: 4d30c74632781443 + zh: 13191cb05f99dd31 +/python-contributor-workflows/build-distributions: + en: 4aa941562dba5482 + zh: 50543a92b3d0cf04 +/python-contributor-workflows/validate-a-release-candidate: + en: dd3298f2b221451f + zh: 8dad5bf59caa2636 diff --git a/python/sdk-runtime/README.i18n.yaml b/python/sdk-runtime/README.i18n.yaml index c93c9f7c0d..5e935c8d47 100644 --- a/python/sdk-runtime/README.i18n.yaml +++ b/python/sdk-runtime/README.i18n.yaml @@ -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 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 python/sdk-runtime/README.md -README.md: 39d1ce71c4c291650e4e1bafcf28f3bde4d0659a -README.zh.md: 4dd2b363cc3e436691be47b6500e515352163e34 +/deepseek-harness-runtime-bin: + en: 1ea1d8e6d2c14b02 + zh: 8e0b9903158667a1 +/deepseek-harness-runtime-bin/installed-commands-and-artifacts: + en: af4e7919327e1991 + zh: b4114823b4f1a3fa +/deepseek-harness-runtime-bin/python-module-api: + en: a88b7574e0e00a28 + zh: 3fd4fe8c0b338e79 +/deepseek-harness-runtime-bin/packaged-profile-resolution: + en: 641c647efc49c568 + zh: a29371de9fbbebfd +/deepseek-harness-runtime-bin/build-and-distribution: + en: 9a4ba11944fbfc54 + zh: 2ae046803108df2b diff --git a/python/sdk/README.i18n.yaml b/python/sdk/README.i18n.yaml index 43dda5870e..ddc16b98c6 100644 --- a/python/sdk/README.i18n.yaml +++ b/python/sdk/README.i18n.yaml @@ -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 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 python/sdk/README.md -README.md: bfca3b0dda6c97bbef255815f33ca81121832f4e -README.zh.md: a10f1f501357e4a9f5c8eaf9aca9f8b408803e80 +/deepseek-harness-python-sdk: + en: 43f7de064985e731 + zh: 9ad59629660b1f13 +/deepseek-harness-python-sdk/start-a-runtime: + en: 9a069c1a7cbb0779 + zh: 7f625a802cd1e9ea +/deepseek-harness-python-sdk/customize-plugins: + en: d32ee602f121e6af + zh: fdea4487688e5774 +/deepseek-harness-python-sdk/results-and-notifications: + en: 2658424dd12e1ad9 + zh: 110d72f5bd836caf diff --git a/python/sdk/examples/README.i18n.yaml b/python/sdk/examples/README.i18n.yaml index 1aa0f69688..f7ca1c4cf9 100644 --- a/python/sdk/examples/README.i18n.yaml +++ b/python/sdk/examples/README.i18n.yaml @@ -1,6 +1,13 @@ -# 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 python/sdk/examples/README.md -README.md: 82715c67cebe5d06decd3a6301cb1a8c245958c6 -README.zh.md: 6821be33bf2e04fab0c7ba4f216f95a607e1693a +/python-sdk-example: + en: d9dfc996ea2ace40 + zh: 33de241bad6c4ee1 +/python-sdk-example/run-the-minimal-agent: + en: 0a23802ca759a16c + zh: 9a68ff9642f90efb +/python-sdk-example/add-plugins: + en: 5e1e30dac13f6c9e + zh: 0af98ebb75c88f43 diff --git a/scripts/coverage-exempt.ts b/scripts/coverage-exempt.ts index 1ccaeca2c1..4a64fd4698 100644 --- a/scripts/coverage-exempt.ts +++ b/scripts/coverage-exempt.ts @@ -48,7 +48,6 @@ export const coverageExemptHeavySuites: readonly CoverageExemptSuite[] = [ { filter: 'scripts/install-lefthook.spec.ts', exclude: 'scripts/install-lefthook.spec.ts' }, { filter: 'scripts/oxlint-contract.spec.ts', exclude: 'scripts/oxlint-contract.spec.ts' }, { filter: 'scripts/change-scope.spec.ts', exclude: 'scripts/change-scope.spec.ts' }, - { filter: 'scripts/translation-pairing-merge.spec.ts', exclude: 'scripts/translation-pairing-merge.spec.ts' }, // Built-artifact proof. Packer/runtime src is threshold-excluded, and the // suite self-skips on unbuilt checkouts; the serial-windows complete // reference still starts this uninstrumented gate after its build gate, so diff --git a/scripts/doc-standard.spec.ts b/scripts/doc-standard.spec.ts index 6c6663f286..3f9db9dba8 100644 --- a/scripts/doc-standard.spec.ts +++ b/scripts/doc-standard.spec.ts @@ -447,7 +447,6 @@ describe('reference-example README pair', () => { it('keeps the sidecar consistency record present', () => { const sidecar = readFileSync(resolve(root, dir, 'README.i18n.yaml'), 'utf8') - expect(sidecar).toMatch(/^README\.md: [0-9a-f]{40}$/m) - expect(sidecar).toMatch(/^README\.zh\.md: [0-9a-f]{40}$/m) + expect(sidecar).toMatch(/^\/[^\s:]*:\n {2}en: [0-9a-f]{16}\n {2}zh: [0-9a-f]{16}$/m) }) }) diff --git a/scripts/gen-config-catalog.spec.ts b/scripts/gen-config-catalog.spec.ts index 321bdc38ca..e4f2dd2c09 100644 --- a/scripts/gen-config-catalog.spec.ts +++ b/scripts/gen-config-catalog.spec.ts @@ -4,7 +4,9 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { dirname, join } from 'node:path' import { afterEach, describe, expect, it } from 'vitest' -import { collectConfigCatalog } from './gen-config-catalog.ts' +import { collectConfigCatalog, render, type CatalogEntry } from './gen-config-catalog.ts' +import { computeTranslationPairingRecord, translationPairPaths } from './translation-pairing-record.ts' +import { generatedRegions } from './translation-pairing.ts' const roots: string[] = [] const sharedSchema = ` @@ -137,3 +139,41 @@ export const Shared = Schema.union([MissingSchema]) expect(() => collectConfigCatalog(root)).toThrow("schema alias 'MissingSchema' must name a const or named value import") }) }) + +describe('config catalog rendering', () => { + const entries = (inject: string[]): CatalogEntry[] => [ + { + pkg: '@deepseek-ai/dsh-demo', + dir: 'packages/demo/demo', + entry: 'packages/demo/demo/src/index.ts', + kind: 'config', + inject, + pastes: [{ text: 'export interface DemoConfig {}', source: 'packages/demo/demo/src/index.ts:3' }], + }, + { pkg: '@deepseek-ai/dsh-plain', dir: 'packages/demo/plain', entry: 'packages/demo/plain/src/index.ts', kind: 'no-config', inject }, + ] + const paths = translationPairPaths('docs/config-catalog.md') + const record = (inject: string[]) => computeTranslationPairingRecord( + paths, + render(entries(inject), 'en'), + render(entries(inject), 'zh'), + { repoRoot: process.cwd(), isTranslationPairSource: () => false }, + ) + + it('keeps package data in generated regions shared by both languages', () => { + const en = generatedRegions(render(entries(['jobs']), 'en')).map(region => region.text) + expect(en.map(region => region.split('\n')[0])).toEqual([ + '', + '', + '', + '', + ]) + expect(generatedRegions(render(entries(['jobs']), 'zh')).map(region => region.text)).toEqual(en) + expect(en[0]).toContain('- `inject`: `jobs`') + }) + + it('leaves the consistency record unchanged when only package data changes', () => { + expect(record(['jobs', 'typert'])).toEqual(record(['jobs'])) + expect([...record(['jobs']).keys()].some(key => key.includes('dsh-demo'))).toBe(false) + }) +}) diff --git a/scripts/gen-config-catalog.ts b/scripts/gen-config-catalog.ts index 2be0cf424e..e22799839f 100644 --- a/scripts/gen-config-catalog.ts +++ b/scripts/gen-config-catalog.ts @@ -7,15 +7,27 @@ * the committed artifact. */ -import { globSync, readFileSync, writeFileSync } from 'node:fs' +import { existsSync, globSync, readFileSync, writeFileSync } from 'node:fs' import { dirname, isAbsolute, relative, resolve, sep } from 'node:path' import ts from 'typescript' import { LINK_MAP } from './gen-cordis-catalog.ts' import { parseJsDoc, pointer, rawJsDoc } from './jsdoc.ts' +import { rewriteTranslationLinkLocales } from './translation-links.ts' +import { + computeTranslationPairingRecord, + renderTranslationPairingRecord, + translationPairPaths, +} from './translation-pairing-record.ts' +import { + languageSwitcherTargets, + parseTranslationPairingManifest, + renderGeneratedRegion, + translationPairSourcePredicate, +} from './translation-pairing.ts' import { githubSlug } from './verify-md-links.ts' const root = resolve(import.meta.dirname, '..') -const OUT = 'docs/config-catalog.md' +const PATHS = translationPairPaths('docs/config-catalog.md') /** The fenced-block info string for pasted config declarations (skipped by * doc-typecheck, since a lone declaration referencing imports is not @@ -864,11 +876,6 @@ export function collectConfigCatalog(scanRoot: string = root): CatalogEntry[] { return entries.sort((a, b) => a.pkg.localeCompare(b.pkg)) } -/** Render the `Requires:` service-key line, or '' when the plugin injects nothing. */ -function requiresLine(inject: string[]): string { - return inject.length ? `Requires: ${inject.map(k => `\`${k}\``).join(' · ')}` : '' -} - /** Render one reference as a link: another plugin's config type → its section, * a curated subsystems name → its page, any other workspace type → * its source file, an external type → named with its module, unlinked. */ @@ -883,92 +890,181 @@ function refLink(ref: TypeRef, byName: Map): string { return `\`${ref.alias}\` (\`${ref.specifier}\`)` } -/** Render one configurable plugin's section. */ -function renderConfigEntry(entry: CatalogEntry, byName: Map): string[] { - const out = [``, '', `## \`${entry.pkg}\``, ''] - const requires = requiresLine(entry.inject) - if (requires) out.push(requires, '') - out.push('```' + FENCE, ...(entry.pastes ?? []).map(p => p.text).join('\n\n').split('\n'), '```', '') - if (entry.refs && entry.refs.length > 0) { - out.push(`Depends on: ${entry.refs.map(r => refLink(r, byName)).join(' · ')}`, '') - } - const source = entry.pastes?.[0]?.source ?? entry.entry - out.push(`Source: [\`${source}\`](../${source.split(':')[0]})`, '') - return out +type Locale = 'en' | 'zh' + +/** Locale-owned prose; every other byte of both pages is shared generated content. */ +const TEXT: Record = { + en: { + header: [ + '', + ], + title: '# Plugin Config Catalog', + switcher: [], + intro: [ + 'Every `config:` block a `cordis.yml` entry can set: for each loadable harness package, the verbatim config declaration (JSDoc included) its `apply` function or service constructor receives, with every referenced type pasted alongside (package-local types) or linked (everything else). The paste is the plugin\'s full declared config type — a field the runtime schema deliberately excludes is a runtime-only seam (its own JSDoc says so) and is not settable from `cordis.yml`. This is the **deployment**-axis reference — the wiring a plugin author works against is the generated Cordis API region on each [subsystem page](subsystems/core.md), the model-facing tool schemas are the [tool catalog](tool-catalog.md), and [subsystems/](subsystems/core.md) documents the types these declarations reference.', + 'Both language versions of this file are GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit them by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field.', + 'Each package entry labels its data with three identifiers: `inject` lists the service keys the plugin injects, so its `cordis.yml` tree must also load providers for those services; `refs` lists the referenced types that are not pasted here; `source` links the file that declares the config. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here.', + ], + noConfig: [ + '## Loadable plugins with no config', + 'These load from a `cordis.yml` entry with no `config:` block; they declare no configuration API.', + ], + seam: [ + '## Seam packages (not directly loadable)', + 'Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md)).', + ], + library: [ + '## Library packages (no plugin entry)', + 'Imported as libraries by other packages; a `cordis.yml` cannot load them.', + ], + }, + zh: { + header: [ + '', + ], + title: '# 插件配置目录', + switcher: ['[English](config-catalog.md) | 中文', ''], + intro: [ + '每个 `config:` 块均可由 `cordis.yml` 条目设置:针对每个可加载的 harness 包,原样列出其 `apply` 函数或服务构造函数接收的配置声明(包括 JSDoc),并附上所有引用类型——包内类型直接粘贴,其他类型则提供链接。粘贴的内容是插件声明的完整配置类型——运行时 schema 有意排除的字段是仅供运行时使用的 seam(其自身的 JSDoc 会如此说明),不能通过 `cordis.yml` 设置。这是以**部署**为轴的参考文档——插件作者所依据的连接方式请参阅各[子系统页面](subsystems/core.md)中的生成 `cordis-surface` 区域,面向模型的工具 schema 请参阅[工具目录](tool-catalog.md),而 [subsystems/](subsystems/core.md) 则记录了这些声明所引用的类型。', + '本文件的两种语言版本都由源代码(`scripts/gen-config-catalog.ts`)生成,并通过 `pnpm run verify-config-catalog`(`doc-sync` 的一部分)验证新鲜度——请勿手工编辑。声明块使用 `ts config-catalog` 围栏(doc-typecheck 会跳过它,因为单独引用导入项的声明无法独立编译)。生成器还会将运行时 schemastery schema 与粘贴的声明进行交叉核对——每个经 schema 验证的键(包括嵌套键)都必须能在声明的配置类型中找到——因此,粘贴内容无法隐藏加载器接受的字段。', + '每个包的条目用三个标识符标注:`inject` 列出插件注入的服务键,其 `cordis.yml` 树还必须加载这些服务的提供者;`refs` 列出声明引用、但未粘贴在此处的类型;`source` 链接到声明配置的源文件。范围限定为 harness 层级(`packages/`);配置树还可能加载的 vendored cordis 插件(控制台日志记录器等)固定为上游源代码(参见 [vendoring policy](../vendor/README.md)),未收录于此目录。', + ], + noConfig: [ + '## 无配置的可加载插件', + '这些插件通过 `cordis.yml` 中不含 `config:` 块的条目加载;它们未声明任何配置接口。', + ], + seam: [ + '## Seam 包(不可直接加载)', + '抽象服务类——部署时应改为加载具体的实现包(参见[能力 seam](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md))。', + ], + library: [ + '## 库包(无插件入口)', + '由其他包作为库导入;`cordis.yml` 无法加载它们。', + ], + }, } -/** Render one terse list line (the no-config / seam / library sections). */ -function renderTerse(entry: CatalogEntry, detail: string): string { - const requires = entry.inject.length ? ` — requires ${entry.inject.map(k => `\`${k}\``).join(' · ')}` : '' - return `- \`${entry.pkg}\`${detail}${requires} ([\`${entry.entry}\`](../${entry.entry}))` +function codeList(values: readonly string[]): string { + return values.map(value => `\`${value}\``).join(' · ') } -/** Render the full catalog (pure, deterministic given sorted entries). */ -export function render(entries: CatalogEntry[]): string { - const byName = new Map(entries.map(e => [e.pkg, e])) - const lines: string[] = [ - '', - '', - '# Plugin Config Catalog', - '', - 'Every `config:` block a `cordis.yml` entry can set: for each loadable harness package, the verbatim config declaration (JSDoc included) its `apply` function or service constructor receives, with every referenced type pasted alongside (package-local types) or linked (everything else). The paste is the plugin\'s full declared config type — a field the runtime schema deliberately excludes is a runtime-only seam (its own JSDoc says so) and is not settable from `cordis.yml`. This is the **deployment**-axis reference — the wiring a plugin author works against is the generated Cordis API region on each [subsystem page](subsystems/core.md), the model-facing tool schemas are the [tool catalog](tool-catalog.md), and [subsystems/](subsystems/core.md) documents the types these declarations reference.', - '', - 'This file is GENERATED from source (`scripts/gen-config-catalog.ts`) and verified fresh by `pnpm run verify-config-catalog` (part of `doc-sync`) — do not edit it by hand. Declaration blocks use a `ts config-catalog` fence (skipped by doc-typecheck, since a lone declaration referencing imports is not standalone-compilable). The generator also cross-checks the runtime schemastery schema against the pasted declaration — every schema-validated key, nested keys included, must be locatable on the declared config type — so the paste cannot hide a loader-accepted field.', - '', - 'A `Requires:` line lists the service keys the plugin `inject`s: its `cordis.yml` tree must also load providers for those services. Scope is the harness tier (`packages/`); the vendored cordis plugins a config tree may also load (the console logger, …) are pinned upstream source ([vendoring policy](../vendor/README.md)) and not catalogued here.', - '', +function sourceLink(source: string): string { + return `[\`${source}\`](../${source.split(':')[0]})` +} + +/** Render one configurable plugin as a generated region shared by both languages. */ +function renderConfigEntry(entry: CatalogEntry, byName: Map): string { + const fields = [ + ...(entry.inject.length > 0 ? [`- \`inject\`: ${codeList(entry.inject)}`] : []), + ...(entry.refs && entry.refs.length > 0 ? [`- \`refs\`: ${entry.refs.map(r => refLink(r, byName)).join(' · ')}`] : []), + `- \`source\`: ${sourceLink(entry.pastes?.[0]?.source ?? entry.entry)}`, ] - for (const entry of entries.filter(e => e.kind === 'config')) { - lines.push(...renderConfigEntry(entry, byName)) - } - lines.push( - '## Loadable plugins with no config', + return renderGeneratedRegion(`config-catalog:${entry.pkg}`, [ + ``, '', - 'These load from a `cordis.yml` entry with no `config:` block; they declare no configuration API.', + `## \`${entry.pkg}\``, '', - ...entries.filter(e => e.kind === 'no-config').map(e => renderTerse(e, '')), + ...fields, '', - '## Seam packages (not directly loadable)', - '', - 'Abstract service classes — a deployment loads a concrete implementation package instead ([capability seams](../.agents/notes/implemented/architecture/2026-06-13-capability-seams.md)).', - '', - ...entries.filter(e => e.kind === 'seam').map(e => renderTerse(e, ` — abstract \`${e.className ?? ''}\``)), - '', - '## Library packages (no plugin entry)', - '', - 'Imported as libraries by other packages; a `cordis.yml` cannot load them.', - '', - ...entries.filter(e => e.kind === 'library').map(e => renderTerse(e, '')), - '', - ) - return lines.join('\n') + '```' + FENCE, + ...(entry.pastes ?? []).map(p => p.text).join('\n\n').split('\n'), + '```', + ].join('\n')) } -/** CLI entry: default writes the catalog, `--check` fails if the committed - * copy is stale. Guarded behind an entry-point check so importing this module - * for tests neither regenerates the committed file nor calls process.exit. */ +/** Render one package table (the no-config / seam / library sections) as a generated region. */ +function renderTable(slug: string, entries: readonly CatalogEntry[], withClass: boolean): string { + const columns = ['package', ...(withClass ? ['class'] : []), 'inject', 'source'] + return renderGeneratedRegion(`config-catalog:${slug}`, [ + `| ${columns.map(column => `\`${column}\``).join(' | ')} |`, + `| ${columns.map(() => '---').join(' | ')} |`, + ...entries.map(entry => `| ${[ + `\`${entry.pkg}\``, + ...(withClass ? [`\`${entry.className ?? ''}\``] : []), + entry.inject.length > 0 ? codeList(entry.inject) : '—', + sourceLink(entry.entry), + ].join(' | ')} |`), + ].join('\n')) +} + +/** + * Render one language version of the catalog (pure, deterministic given sorted entries). + * @param entries - Catalog entries sorted by package name. + * @param locale - Language whose prose surrounds the shared generated regions. + * @returns The page with English-side document links; the caller localizes the Chinese page. + */ +export function render(entries: CatalogEntry[], locale: Locale = 'en'): string { + const byName = new Map(entries.map(e => [e.pkg, e])) + const text = TEXT[locale] + const section = ([heading, intro]: [string, string], region: string): string[] => [heading, '', intro, '', region, ''] + return [ + ...text.header, + '', + text.title, + '', + ...text.switcher, + ...text.intro.flatMap(paragraph => [paragraph, '']), + ...entries.filter(e => e.kind === 'config').flatMap(entry => [renderConfigEntry(entry, byName), '']), + ...section(text.noConfig, renderTable('no-config', entries.filter(e => e.kind === 'no-config'), false)), + ...section(text.seam, renderTable('seam', entries.filter(e => e.kind === 'seam'), true)), + ...section(text.library, renderTable('library', entries.filter(e => e.kind === 'library'), false)), + ].join('\n') +} + +/** + * Compute both language versions and their consistency record. + * @param scanRoot - Repository root used to resolve paired-document links. + * @returns Repository-relative output paths and exact generated content. + */ +export function computeConfigCatalogOutputs(scanRoot: string = root): ReadonlyMap { + const entries = collectConfigCatalog() + const context = { + repoRoot: scanRoot, + isTranslationPairSource: translationPairSourcePredicate(parseTranslationPairingManifest( + readFileSync(resolve(scanRoot, 'scripts/translation-pairing.manifest.json'), 'utf8'), + )), + } + const en = render(entries, 'en') + const zh = rewriteTranslationLinkLocales( + render(entries, 'zh'), + { ...context, sourcePath: PATHS.zh }, + languageSwitcherTargets(PATHS.source), + ).content + return new Map([ + [PATHS.source, en], + [PATHS.zh, zh], + [PATHS.meta, renderTranslationPairingRecord(PATHS, computeTranslationPairingRecord(PATHS, en, zh, context))], + ]) +} + +/** CLI entry: default writes the catalog pair and record, `--check` fails if any + * committed copy is stale. Guarded behind an entry-point check so importing this + * module for tests neither regenerates the committed files nor calls process.exit. */ function main(): void { - const content = render(collectConfigCatalog()) + const outputs = computeConfigCatalogOutputs() + const stale = [...outputs].filter(([path, content]) => ( + !existsSync(resolve(root, path)) || readFileSync(resolve(root, path), 'utf8') !== content + )).map(([path]) => path) if (process.argv.includes('--check')) { - let committed: string | null = null - try { - committed = readFileSync(resolve(root, OUT), 'utf8') - } catch { - // Only ENOENT (not yet generated) is expected; a present-but-unreadable - // file is not a state this repo produces. Either way the remedy is the - // same — regenerate — so treat a read failure as "stale". - committed = null - } - if (committed === content) { - console.log(`gen-config-catalog: ${OUT} is up to date.`) + if (stale.length === 0) { + console.log(`gen-config-catalog: ${outputs.size} artifact(s) are up to date.`) process.exit(0) } - console.error(`gen-config-catalog: ${OUT} is stale. Run \`pnpm run gen-config-catalog\` and commit ${OUT}.`) + console.error(`gen-config-catalog: stale — ${stale.join(', ')}. Run \`pnpm run gen-config-catalog\` and commit the result.`) process.exit(1) } - writeFileSync(resolve(root, OUT), content) - console.log(`gen-config-catalog: wrote ${OUT}.`) + for (const path of stale) writeFileSync(resolve(root, path), outputs.get(path) ?? '') + console.log(`gen-config-catalog: ${outputs.size} artifact(s) computed, ${stale.length} written.`) } if (process.argv[1] && import.meta.filename === resolve(process.argv[1])) { diff --git a/scripts/gen-cordis-catalog-record.spec.ts b/scripts/gen-cordis-catalog-record.spec.ts deleted file mode 100644 index 3b51562768..0000000000 --- a/scripts/gen-cordis-catalog-record.spec.ts +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Negative-path coverage for the guarded pair auto-record - * (`maybeRecordPair`): the safety property is that regeneration re-records a - * pair's `.i18n.yaml` ONLY for a region-confined write over a well-formed, - * previously-consistent record — every other state is left for the pairing - * gate to report. - */ - -import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' -import { tmpdir } from 'node:os' -import { join } from 'node:path' -import { afterEach, describe, expect, it } from 'vitest' -import { - localizePageRegion, - maybeRecordPair, - REGION_BEGIN, - REGION_END, - spliceRegion, -} from './gen-cordis-catalog.ts' -import { blobHash, renderPairMeta } from './translation-pairing.ts' - -const PAGE = 'docs/subsystems/fix.md' -const ZH = 'docs/subsystems/fix.zh.md' -const META = 'docs/subsystems/fix.i18n.yaml' - -function page(prose: string, region: string): string { - return `# Fix\n\n${prose}\n\n${REGION_BEGIN}\n${region}\n${REGION_END}\n` -} - -const roots: string[] = [] -afterEach(() => { - for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true }) -}) - -/** Lay out a pair on disk and return { root, before } for a regeneration that already wrote `current`. */ -function setup(options: { - beforeEn: string - beforeZh: string - currentEn: string - currentZh: string - meta?: string | null - omitZhSnapshot?: boolean -}): { root: string; before: Map } { - const root = mkdtempSync(join(tmpdir(), 'record-guard-')) - roots.push(root) - mkdirSync(join(root, 'docs/subsystems'), { recursive: true }) - writeFileSync(join(root, PAGE), options.currentEn) - writeFileSync(join(root, ZH), options.currentZh) - const meta = options.meta === undefined - ? renderPairMeta(PAGE, blobHash(Buffer.from(options.beforeEn)), ZH, blobHash(Buffer.from(options.beforeZh))) - : options.meta - if (meta !== null) writeFileSync(join(root, META), meta) - const before = new Map([[PAGE, Buffer.from(options.beforeEn)]]) - if (!options.omitZhSnapshot) before.set(ZH, Buffer.from(options.beforeZh)) - return { root, before } -} - -describe('maybeRecordPair', () => { - const beforeEn = page('prose.', 'old region') - const beforeZh = page('散文。', 'old region') - const currentEn = page('prose.', 'new region') - const currentZh = page('散文。', 'new region') - - it('re-records a region-confined write over a consistent record', () => { - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh }) - expect(maybeRecordPair(PAGE, before, root)).toBe(true) - expect(readFileSync(join(root, META), 'utf8')) - .toBe(renderPairMeta(PAGE, blobHash(Buffer.from(currentEn)), ZH, blobHash(Buffer.from(currentZh)))) - }) - - it('refuses when the pair was already out of sync before the run', () => { - const stale = renderPairMeta(PAGE, blobHash(Buffer.from('drifted long ago\n')), ZH, blobHash(Buffer.from(beforeZh))) - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, meta: stale }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - expect(readFileSync(join(root, META), 'utf8')).toBe(stale) - }) - - it('refuses a malformed record even when its hashes are current', () => { - // A renamed key with preserved hashes must stay the pairing gate's error, - // never become valid through regeneration. - const renamedKeys = [ - '# comment', - `fixXmd: ${blobHash(Buffer.from(beforeEn))}`, - `fix.zh.md: ${blobHash(Buffer.from(beforeZh))}`, - '', - ].join('\n') - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, meta: renamedKeys }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - expect(readFileSync(join(root, META), 'utf8')).toBe(renamedKeys) - }) - - it('refuses a record with extra entries', () => { - const extra = renderPairMeta(PAGE, blobHash(Buffer.from(beforeEn)), ZH, blobHash(Buffer.from(beforeZh))) - + `other.md: ${blobHash(Buffer.from(beforeEn))}\n` - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, meta: extra }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - }) - - it('refuses a record with a duplicated expected key', () => { - // Map#set would collapse the duplicate back to size 2; the parser must - // reject the repeat instead of letting the guard accept the record. - const duplicated = [ - `fix.md: ${blobHash(Buffer.from(beforeEn))}`, - `fix.md: ${blobHash(Buffer.from(beforeEn))}`, - `fix.zh.md: ${blobHash(Buffer.from(beforeZh))}`, - '', - ].join('\n') - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, meta: duplicated }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - expect(readFileSync(join(root, META), 'utf8')).toBe(duplicated) - }) - - it('refuses when prose drifted alongside the region write', () => { - const proseDrift = page('prose, edited by a human.', 'new region') - const { root, before } = setup({ beforeEn, beforeZh, currentEn: proseDrift, currentZh }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - }) - - it('refuses a brand-new pair with no record', () => { - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, meta: null }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - }) - - it('refuses when a side has no pre-write snapshot', () => { - const { root, before } = setup({ beforeEn, beforeZh, currentEn, currentZh, omitZhSnapshot: true }) - expect(maybeRecordPair(PAGE, before, root)).toBe(false) - }) -}) - -describe('spliceRegion', () => { - it('replaces exactly the cordis-surface region', () => { - const doc = `# T\n\nprose\n\n${REGION_BEGIN}\nold\n${REGION_END}\ntail\n` - expect(spliceRegion(doc, `${REGION_BEGIN}\nnew\n${REGION_END}`)) - .toBe(`# T\n\nprose\n\n${REGION_BEGIN}\nnew\n${REGION_END}\ntail\n`) - }) - - it('fails loud on a page carrying only some other generator\'s region', () => { - // Another generator's markers satisfy the generic region grammar but must - // never be overwritten by THIS generator's splice. - const foreign = '# T\n\n\ntheirs\n\n' - expect(() => spliceRegion(foreign, `${REGION_BEGIN}\nnew\n${REGION_END}`)) - .toThrow('expected exactly 1 cordis-surface region, found 0 BEGIN/0 END') - }) - - it('fails loud on duplicate cordis-surface markers', () => { - const doubled = `${REGION_BEGIN}\na\n${REGION_END}\n${REGION_BEGIN}\nb\n${REGION_END}\n` - expect(() => spliceRegion(doubled, `${REGION_BEGIN}\nnew\n${REGION_END}`)) - .toThrow('found 2 BEGIN/2 END') - }) -}) - -describe('localizePageRegion', () => { - it('changes only paired Markdown paths for the Chinese generated region', () => { - const root = mkdtempSync(join(tmpdir(), 'cordis-region-locale-')) - roots.push(root) - mkdirSync(join(root, 'docs/subsystems'), { recursive: true }) - mkdirSync(join(root, 'packages'), { recursive: true }) - mkdirSync(join(root, 'scripts'), { recursive: true }) - writeFileSync(join(root, 'docs/subsystems/target.md'), '# Target\n') - writeFileSync(join(root, 'docs/subsystems/target.zh.md'), '# 目标\n') - writeFileSync(join(root, 'docs/subsystems/excluded.md'), '# Excluded\n') - writeFileSync(join(root, 'docs/subsystems/excluded.zh.md'), '# 排除\n') - writeFileSync(join(root, 'packages/outside.md'), '# Outside\n') - writeFileSync(join(root, 'packages/outside.zh.md'), '# 范围外\n') - writeFileSync(join(root, 'scripts/translation-pairing.manifest.json'), JSON.stringify({ - excluded: ['docs/subsystems/excluded.md'], - })) - const region = `${REGION_BEGIN}\n[Target](target.md#api) [Excluded](excluded.md) [Outside](../../packages/outside.md)\n${REGION_END}` - - expect(localizePageRegion(region, 'docs/subsystems/page.md', root)).toBe(region) - expect(localizePageRegion(region, 'docs/subsystems/page.zh.md', root)).toBe( - `${REGION_BEGIN}\n[Target](target.zh.md#api) [Excluded](excluded.md) [Outside](../../packages/outside.md)\n${REGION_END}`, - ) - }) -}) diff --git a/scripts/gen-cordis-catalog.ts b/scripts/gen-cordis-catalog.ts index 631632678f..794bc1e92b 100644 --- a/scripts/gen-cordis-catalog.ts +++ b/scripts/gen-cordis-catalog.ts @@ -18,7 +18,7 @@ * a missing regeneration. */ -import { mkdirSync, readFileSync, writeFileSync } from 'node:fs' +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs' import { dirname, resolve } from 'node:path' import { projectCordisCatalog, @@ -31,11 +31,7 @@ import type { CordisCatalogPolicy } from '@deepseek-ai/dsh-typert-generator' import { renderCordisCoreApiPages } from './cordis-core-api.ts' import { contextKeyMap, contextMergeFiles, eventNameList } from './cordis-walk.ts' import { - blobHash, - parsePairMeta, parseTranslationPairingManifest, - partitionGeneratedRegions, - renderPairMeta, translationPairSourcePredicate, } from './translation-pairing.ts' import { rewriteTranslationLinkLocales } from './translation-links.ts' @@ -1189,51 +1185,6 @@ export function computeOutputs(): [string, string][] { return outputs } -/** - * Re-record a pair's `.i18n.yaml` after a region write ONLY when the write is - * region-confined: both sides' region-stripped content must be byte-equal to - * the region-stripped previous content whose hashes the record holds. The - * caller supplies the previous bytes (read before writing); human-content - * drift leaves the record untouched so the pairing gate still demands the - * normal translation flow. - * @param pageRel - repo-relative English page path (`docs/subsystems/x.md`). - * @param before - pre-write bytes per repo-relative path. - * @param scanRoot - repository root override for tests. - * @returns true when the record was refreshed. - */ -export function maybeRecordPair(pageRel: string, before: Map, scanRoot: string = root): boolean { - const zhRel = pageRel.replace(/\.md$/, '.zh.md') - const metaRel = pageRel.replace(/\.md$/, '.i18n.yaml') - const metaAbs = resolve(scanRoot, metaRel) - let meta: string - try { - meta = readFileSync(metaAbs, 'utf8') - } catch { - // No record yet: a brand-new pair is recorded by the author's --write - // after review, never silently by regeneration. - return false - } - // The record must contain exactly the two valid entries for THIS pair; - // a malformed or renamed-key sidecar is the pairing gate's problem to - // report, never something regeneration silently repairs into validity. - const recorded = parsePairMeta(meta) - const names = [pageRel, zhRel].map(rel => rel.split('/').at(-1) ?? rel) - if (!recorded || recorded.size !== 2 || !names.every(name => recorded.has(name))) return false - for (const rel of [pageRel, zhRel]) { - const previous = before.get(rel) - if (!previous) return false - if (recorded.get(rel.split('/').at(-1) ?? rel) !== blobHash(previous)) return false - const current = readFileSync(resolve(scanRoot, rel)) - const strippedBefore = partitionGeneratedRegions(previous.toString('utf8')).stripped - const strippedAfter = partitionGeneratedRegions(current.toString('utf8')).stripped - if (strippedBefore !== strippedAfter) return false - } - const source = readFileSync(resolve(scanRoot, pageRel)) - const zh = readFileSync(resolve(scanRoot, zhRel)) - writeFileSync(metaAbs, renderPairMeta(pageRel, blobHash(source), zhRel, blobHash(zh))) - return true -} - /** CLI entry: default regenerates every artifact, `--check` fails if any is * stale. Guarded behind an entry-point check so importing this module for * tests neither regenerates the committed files nor calls process.exit. @@ -1266,33 +1217,15 @@ export function main(): void { process.exit(1) } - const before = new Map() - for (const [out] of outputs) { - try { - before.set(out, readFileSync(resolve(root, out))) - } catch { - // First generation of this artifact; nothing to guard, nothing to record. - } - } let changedPages = 0 - let recorded = 0 for (const [out, content] of outputs) { const destination = resolve(root, out) - if (before.get(out)?.toString('utf8') === content) continue + if (existsSync(destination) && readFileSync(destination, 'utf8') === content) continue mkdirSync(dirname(destination), { recursive: true }) writeFileSync(destination, content) changedPages++ } - for (const page of [...new Set([...Object.values(SERVICE_PAGE), ...Object.values(EVENT_SCOPE_PAGE)])]) { - const rel = `${SUBSYSTEMS_DIR}/${page}` - const zhRel = rel.replace(/\.md$/, '.zh.md') - const wroteEither = [rel, zhRel].some((side) => { - const previous = before.get(side) - return previous !== undefined && previous.toString('utf8') !== readFileSync(resolve(root, side), 'utf8') - }) - if (wroteEither && maybeRecordPair(rel, before)) recorded++ - } - console.log(`gen-cordis-catalog: ${outputs.length} artifact(s) computed, ${changedPages} written, ${recorded} pair record(s) refreshed.`) + console.log(`gen-cordis-catalog: ${outputs.length} artifact(s) computed, ${changedPages} written.`) } if (process.argv[1] && import.meta.filename === resolve(process.argv[1])) { diff --git a/scripts/gen-doc-graphs.ts b/scripts/gen-doc-graphs.ts index f2195887e9..59f1c4a8ee 100644 --- a/scripts/gen-doc-graphs.ts +++ b/scripts/gen-doc-graphs.ts @@ -17,6 +17,14 @@ import { graphNodeId as nodeId, type PackageGraphNode, } from './package-graph.ts' +import { rewriteTranslationLinkLocales } from './translation-links.ts' +import { + generatedRegions, + parseTranslationPairingManifest, + renderGeneratedRegion, + spliceGeneratedRegion, + translationPairSourcePredicate, +} from './translation-pairing.ts' import { TypeScriptProject } from './ts-project.ts' const root = resolve(import.meta.dirname, '..') @@ -1407,13 +1415,13 @@ function renderEventRelations(pkgs: Pkg[], events: readonly EventEntry[]): strin lines.push( 'This matrix shows which packages dispatch each harness-owned event and which packages listen to it. Events are many-to-many, so the dense relation data is presented as a table rather than one large graph. Receiver and event-name types also cover contained dispatch sites that deliberately bypass `ctx.emit`, such as subagent lifecycle containment.', '', - '| Event | Mode | Declared in | Dispatchers | Listeners |', - '| --- | --- | --- | --- | --- |', ) + const rows = ['| Event | Mode | Declared in | Dispatchers | Listeners |', '| --- | --- | --- | --- | --- |'] for (const event of [...events].sort((a, b) => a.name.localeCompare(b.name))) { const relation = relations.get(event.name) ?? { dispatchers: new Map>(), listeners: new Set() } - lines.push(`| \`${event.name}\` | \`${event.mode}\` | ${sourceLink(event.source)} | ${relationPackages(relation.dispatchers, pkgsByShort)} | ${listenerPackages(relation.listeners, pkgsByShort)} |`) + rows.push(`| \`${event.name}\` | \`${event.mode}\` | ${sourceLink(event.source)} | ${relationPackages(relation.dispatchers, pkgsByShort)} | ${listenerPackages(relation.listeners, pkgsByShort)} |`) } + lines.push(renderGeneratedRegion('event-producer-consumer:events', rows.join('\n'))) // Every declared event needs a dispatcher: zero means dead vocabulary or an // unrecognized semantic dispatch form. Listener-free extension points remain // valid. Client-declared events are exempt: the relation scan seeds the HOST @@ -1435,12 +1443,18 @@ function renderEventRelations(pkgs: Pkg[], events: readonly EventEntry[]): strin const declared = new Set(events.map(event => event.name)) const extra = [...relations.keys()].filter(event => !declared.has(event)).sort() if (extra.length > 0) { - lines.push('', '## Non-harness or undeclared event strings seen in package source', '', '| Event string | Dispatchers | Listeners |', '| --- | --- | --- |') + const extraRows = ['| Event string | Dispatchers | Listeners |', '| --- | --- | --- |'] for (const event of extra) { const relation = relations.get(event) if (!relation) continue - lines.push(`| \`${event}\` | ${relationPackages(relation.dispatchers, pkgsByShort)} | ${listenerPackages(relation.listeners, pkgsByShort)} |`) + extraRows.push(`| \`${event}\` | ${relationPackages(relation.dispatchers, pkgsByShort)} | ${listenerPackages(relation.listeners, pkgsByShort)} |`) } + lines.push( + '', + '## Non-harness or undeclared event strings seen in package source', + '', + renderGeneratedRegion('event-producer-consumer:undeclared', extraRows.join('\n')), + ) } lines.push('', ...maintenanceFooter(maintenance)) return lines.join('\n') @@ -1617,9 +1631,31 @@ function renderDocs(): GraphDoc[] { { rel: 'docs/tool-execution-pipeline.md', content: renderToolPipeline() }, ] docs.unshift({ rel: 'docs/graph-atlas.md', content: renderIndex(docs) }) + const events = docs.find(doc => doc.rel === 'docs/event-producer-consumer.md') + if (events !== undefined) docs.push(spliceChineseRegions(events)) return docs } +/** + * Splice a generated page's regions into its authored Chinese counterpart, + * localizing paired-document links; the surrounding Chinese prose stays authored. + */ +function spliceChineseRegions(doc: GraphDoc): GraphDoc { + const rel = doc.rel.replace(/\.md$/, '.zh.md') + const context = { + repoRoot: root, + sourcePath: rel, + isTranslationPairSource: translationPairSourcePredicate(parseTranslationPairingManifest( + readFileSync(resolve(root, 'scripts/translation-pairing.manifest.json'), 'utf8'), + )), + } + let content = readFileSync(resolve(root, rel), 'utf8') + for (const region of generatedRegions(doc.content)) { + content = spliceGeneratedRegion(content, rewriteTranslationLinkLocales(region.text, context).content) + } + return { rel, content } +} + function renderIndex(docs: GraphDoc[]): string { const labels: Record = { 'docs/capability-seams.md': 'capability seams and core services', diff --git a/scripts/gen-module-graph.ts b/scripts/gen-module-graph.ts index d095c1afed..fa7f28cef4 100644 --- a/scripts/gen-module-graph.ts +++ b/scripts/gen-module-graph.ts @@ -8,8 +8,16 @@ import { graphNodeId as nodeId, type PackageGraphNode, } from './package-graph.ts' -import { gitBlobHash, storeGitBlob } from './translation-pairing-git.ts' -import { renderTranslationPairingRecord, translationPairPaths } from './translation-pairing-record.ts' +import { + computeTranslationPairingRecord, + renderTranslationPairingRecord, + translationPairPaths, +} from './translation-pairing-record.ts' +import { + parseTranslationPairingManifest, + renderGeneratedRegion, + translationPairSourcePredicate, +} from './translation-pairing.ts' const root = resolve(import.meta.dirname, '..') const SOURCE = 'docs/module-graph.md' @@ -102,9 +110,11 @@ export function renderModuleGraph(pkgs: readonly Pkg[], locale: Locale): string ...edges, '```', '', - chinese ? '| 包 | 分组 | Peer 依赖 |' : '| Package | Group | Peer dependencies |', - '| --- | --- | --- |', - ...rows, + renderGeneratedRegion('module-graph:packages', [ + '| `package` | `group` | `peerDependencies` |', + '| --- | --- | --- |', + ...rows, + ].join('\n')), '', ].join('\n') } @@ -122,8 +132,21 @@ export function computeModuleGraphOutputs(scanRoot: string = root): ReadonlyMap< ]) } +/** Render the consistency record for the two computed graph documents. */ +function moduleGraphRecord(scanRoot: string, outputs: ReadonlyMap): string { + const manifest = parseTranslationPairingManifest( + readFileSync(resolve(scanRoot, 'scripts/translation-pairing.manifest.json'), 'utf8'), + ) + return renderTranslationPairingRecord(PATHS, computeTranslationPairingRecord( + PATHS, + outputs.get(PATHS.source) ?? '', + outputs.get(PATHS.zh) ?? '', + { repoRoot: scanRoot, isTranslationPairSource: translationPairSourcePredicate(manifest) }, + )) +} + /** - * Write both graph documents and their recovery record. + * Write both graph documents and their consistency record. * @param scanRoot - Repository root containing packages and documentation. * @returns Repository-relative paths whose content changed. */ @@ -136,12 +159,7 @@ export function writeModuleGraph(scanRoot: string = root): string[] { writeFileSync(destination, content) changed.push(path) } - const source = Buffer.from(outputs.get(PATHS.source) ?? '') - const zh = Buffer.from(outputs.get(PATHS.zh) ?? '') - const record = renderTranslationPairingRecord(PATHS, { - sourceHash: storeGitBlob(scanRoot, source), - zhHash: storeGitBlob(scanRoot, zh), - }) + const record = moduleGraphRecord(scanRoot, outputs) const recordPath = resolve(scanRoot, PATHS.meta) if (!existsSync(recordPath) || readFileSync(recordPath, 'utf8') !== record) { writeFileSync(recordPath, record) @@ -153,11 +171,7 @@ export function writeModuleGraph(scanRoot: string = root): string[] { /** CLI entry: regenerate by default, or verify all paired outputs with `--check`. @returns Nothing. */ export function main(): void { const outputs = computeModuleGraphOutputs(root) - const record = renderTranslationPairingRecord(PATHS, { - sourceHash: gitBlobHash(Buffer.from(outputs.get(PATHS.source) ?? '')), - zhHash: gitBlobHash(Buffer.from(outputs.get(PATHS.zh) ?? '')), - }) - const expected = new Map([...outputs, [PATHS.meta, record]]) + const expected = new Map([...outputs, [PATHS.meta, moduleGraphRecord(root, outputs)]]) if (process.argv.includes('--check')) { const stale = [...expected].filter(([path, content]) => ( !existsSync(resolve(root, path)) || readFileSync(resolve(root, path), 'utf8') !== content diff --git a/scripts/gen-translation-brief.ts b/scripts/gen-translation-brief.ts index fac9e9bcb4..e8dfbfe484 100644 --- a/scripts/gen-translation-brief.ts +++ b/scripts/gen-translation-brief.ts @@ -26,6 +26,11 @@ import { translationStructureDiff, translationStructureSignature, } from './translation-pairing.ts' +import { + computeTranslationPairingRecord, + renderTranslationPairingRecord, + translationPairPaths, +} from './translation-pairing-record.ts' import { changedSpanIndices, computeMechanicalUpdate, @@ -50,18 +55,6 @@ function isExcluded(file: string): boolean { return isTranslationPairingManifestExcluded(file, manifest) } -/** Recorded hashes of one consistency record: basename → blob hash. */ -function parseMeta(content: string): Map | undefined { - const out = new Map() - for (const line of content.split('\n')) { - if (line === '' || line.startsWith('#')) continue - const match = /^([^:#]+\.md): ([0-9a-f]{40})$/.exec(line) - if (!match?.[1] || !match[2]) return undefined - out.set(match[1], match[2]) - } - return out -} - function git(args: string[], allowedExitCodes: number[] = [0]): string { const result = spawnSync('git', ['-C', root, ...args], { encoding: 'utf8', maxBuffer: 1 << 26 }) if (result.error) throw result.error @@ -71,8 +64,28 @@ function git(args: string[], allowedExitCodes: number[] = [0]): string { return result.stdout } -function blobText(hash: string): string { - return git(['cat-file', '-p', hash]) +/** Render the record for one pair's contents, or `undefined` when its headings do not align. */ +function recordOf(anchor: string, en: string, zh: string): string | undefined { + const paths = translationPairPaths(anchor) + try { + return renderTranslationPairingRecord(paths, computeTranslationPairingRecord(paths, en, zh, { + repoRoot: root, + isTranslationPairSource, + })) + } catch { + // A heading-count mismatch, the only computation error, means these contents were never confirmed. + return undefined + } +} + +/** Both sides at the newest commit whose contents produce the confirmed record. */ +function lastConfirmed(anchor: string, zh: string, record: string): { en: string; zh: string } | undefined { + for (const commit of git(['log', '--format=%H', '--', anchor, zh]).split('\n').filter(Boolean)) { + const en = git(['show', `${commit}:${anchor}`], [0, 128]) + const zhText = git(['show', `${commit}:${zh}`], [0, 128]) + if (en !== '' && zhText !== '' && recordOf(anchor, en, zhText) === record) return { en, zh: zhText } + } + return undefined } /** Unified diff between two texts, headers stripped, via `git diff --no-index`. */ @@ -112,16 +125,18 @@ function loadPair(anchor: string): PairState | string { if (missing.length > 0) { return `${anchor}: incomplete pair (missing ${missing.join(', ')}) — a new counterpart is whole-document translation work, not a minimal update` } - const record = parseMeta(readFileSync(join(root, meta), 'utf8')) - const enRecorded = record?.get(basename(anchor)) - const zhRecorded = record?.get(basename(zh)) - if (record === undefined || enRecorded === undefined || zhRecorded === undefined) { - return `${meta}: malformed consistency record` - } + const record = readFileSync(join(root, meta), 'utf8') const enCurrent = readFileSync(join(root, anchor), 'utf8') const zhCurrent = readFileSync(join(root, zh), 'utf8') - const enLast = blobText(enRecorded) - const zhLast = blobText(zhRecorded) + if (recordOf(anchor, enCurrent, zhCurrent) === record) { + return { anchor, zh, meta, enDrifted: false, zhDrifted: false, enLast: enCurrent, zhLast: zhCurrent } + } + const confirmed = lastConfirmed(anchor, zh, record) + if (confirmed === undefined) { + return `${meta}: no commit of the pair produces this record — commit the confirmed pair before briefing its later edits` + } + const enLast = confirmed.en + const zhLast = confirmed.zh return { anchor, zh, diff --git a/scripts/install-lefthook.mjs b/scripts/install-lefthook.mjs index 172bd89a39..0ecbf072c2 100644 --- a/scripts/install-lefthook.mjs +++ b/scripts/install-lefthook.mjs @@ -27,20 +27,6 @@ const INSTALL_LOCK_INITIALIZATION_TIMEOUT_MS = 5_000 const INSTALL_LOCK_POLL_MS = 50 const ALLOW_HOOKS_PATH_OVERRIDE = 'DSH_LEFTHOOK_ALLOW_HOOKS_PATH_OVERRIDE' const REPOSITORY_EXTENSION_PATTERN = '^extensions\\.' -const PAIRING_MERGE_DRIVER_CONFIG = [ - ['merge.dsh-translation-pairing.name', 'DeepSeek Harness bilingual pairing records'], - [ - 'merge.dsh-translation-pairing.driver', - 'scripts/merge-translation-pairing-driver.sh %O %A %B %P', - ], -] -const PAIRING_MERGE_DRIVER_PROBE = [ - '--import', - 'tsx/esm', - 'scripts/merge-translation-pairing.ts', - '--probe', -] - function errorCode(error) { return typeof error === 'object' && error !== null && 'code' in error ? error.code @@ -622,86 +608,6 @@ function refuseScopedHooksPath(entry) { ) } -function installPairingMergeDriver(root, worktreeConfigPath) { - const added = [] - try { - for (const [key, expected] of PAIRING_MERGE_DRIVER_CONFIG) { - const entries = includedFileConfigEntries(root, worktreeConfigPath, key) - const includedEntry = entries.find(entry => !originIsFile(entry.origin, root, worktreeConfigPath)) - if (includedEntry !== undefined) { - throw new Error( - `refusing pairing merge-driver config from an included worktree file (${configSource(includedEntry)})`, - ) - } - const existing = assertSingle(entries.map(entry => entry.value), `worktree ${key}`) - const effectiveBefore = effectiveConfigEntry(root, key) - if (effectiveBefore?.scope === 'command') { - throw new Error( - `refusing command-scoped ${key} (${configSource(effectiveBefore)}); ` - + 'transient configuration cannot be replaced by the worktree installer', - ) - } - if (existing === undefined && effectiveBefore !== undefined && effectiveBefore.value !== expected) { - throw new Error( - `refusing to mask inherited ${key} (${configSource(effectiveBefore)}); ` - + 'remove or integrate the custom pairing merge driver explicitly', - ) - } - if (existing !== undefined && existing !== expected) { - throw new Error( - `refusing to replace worktree ${key} value ${JSON.stringify(existing)}; ` - + 'remove or integrate the custom pairing merge driver explicitly', - ) - } - if (existing === undefined) { - git(['config', '--worktree', key, expected], root) - added.push(key) - } - const installed = includedFileConfigEntries(root, worktreeConfigPath, key) - if ( - installed.length !== 1 - || installed[0]?.value !== expected - || !originIsFile(installed[0].origin, root, worktreeConfigPath) - ) { - throw new Error(`new worktree-local ${key} did not become the direct worktree value`) - } - const effectiveAfter = effectiveConfigEntry(root, key) - if ( - effectiveAfter === undefined - || effectiveAfter.scope !== 'worktree' - || effectiveAfter.value !== expected - || !originIsFile(effectiveAfter.origin, root, worktreeConfigPath) - ) { - throw new Error(`new worktree-local ${key} did not become the effective direct worktree value`) - } - } - } catch (error) { - const rollbackErrors = [] - for (const key of added.reverse()) { - try { - git(['config', '--worktree', '--unset-all', key], root) - } catch (rollbackError) { - rollbackErrors.push(rollbackError) - } - } - if (rollbackErrors.length > 0) { - throw new AggregateError( - [error, ...rollbackErrors], - `Pairing merge-driver configuration failed: ${String(error)}; ` - + `rollback also failed: ${rollbackErrors.map(String).join('; ')}`, - ) - } - throw error - } - return () => { - for (const key of added.reverse()) git(['config', '--worktree', '--unset-all', key], root) - } -} - -function probePairingMergeDriver(root) { - capture(process.execPath, PAIRING_MERGE_DRIVER_PROBE, { cwd: root }) -} - async function main() { if (process.env.CI === 'true' || process.env.GITHUB_ACTIONS === 'true') return if (typeof lefthookPackage.bin?.lefthook !== 'string') return @@ -789,10 +695,7 @@ async function main() { applyWorktreeConfigMigration(root, commonConfigPath, migration) let pathChanged = false - let rollbackPairingMergeDriver = () => {} try { - probePairingMergeDriver(root) - rollbackPairingMergeDriver = installPairingMergeDriver(root, worktreeConfigPath) git(['config', '--worktree', 'core.hooksPath', hooksPath], root) pathChanged = worktreePath !== hooksPath const installedEntry = effectiveConfigEntry(root, 'core.hooksPath') @@ -819,11 +722,6 @@ async function main() { rollbackErrors.push(rollbackError) } } - try { - rollbackPairingMergeDriver() - } catch (rollbackError) { - rollbackErrors.push(rollbackError) - } if (rollbackErrors.length > 0) { throw new AggregateError( [error, ...rollbackErrors], diff --git a/scripts/install-lefthook.spec.ts b/scripts/install-lefthook.spec.ts index a05cb8cf2a..f31274a1d2 100644 --- a/scripts/install-lefthook.spec.ts +++ b/scripts/install-lefthook.spec.ts @@ -16,12 +16,9 @@ import { tmpdir } from 'node:os' import { dirname, isAbsolute, join, resolve } from 'node:path' import { fileURLToPath } from 'node:url' import { afterEach, describe, expect, it } from 'vitest' -import { removeFixtureSafely, unlinkFixtureLinks } from './test-fixture-cleanup.ts' +import { removeFixtureSafely } from './test-fixture-cleanup.ts' const installer = fileURLToPath(new URL('./install-lefthook.mjs', import.meta.url)) -const pairingMergeDriver = 'scripts/merge-translation-pairing-driver.sh %O %A %B %P' -const scriptsDirectory = fileURLToPath(new URL('.', import.meta.url)) -const tsxPackageDirectory = dirname(fileURLToPath(import.meta.resolve('tsx/package.json'))) const fixtures: string[] = [] interface Fixture { @@ -125,12 +122,6 @@ function installFakeLefthook(root: string): void { chmodSync(shim, 0o755) } -function installPairingProbeFixture(root: string): void { - const linkType = process.platform === 'win32' ? 'junction' : 'dir' - symlinkSync(scriptsDirectory, join(root, 'scripts'), linkType) - symlinkSync(tsxPackageDirectory, join(root, 'node_modules/tsx'), linkType) -} - function createFixture(names: { main?: string; linked?: string } = {}): Fixture { const container = mkdtempSync(join(tmpdir(), 'dsh-lefthook-')) fixtures.push(container) @@ -160,8 +151,6 @@ function createFixture(names: { main?: string; linked?: string } = {}): Fixture write(join(linked, 'lefthook.yml'), 'linked-worktree-config\n') installFakeLefthook(main) installFakeLefthook(linked) - installPairingProbeFixture(main) - installPairingProbeFixture(linked) return fixture } @@ -241,9 +230,6 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(git(fixture, fixture.main, ['config', '--get', 'core.repositoryFormatVersion'])).toBe('0') expect(existsSync(hooksPath(fixture, fixture.main))).toBe(false) expect(existsSync(join(common, 'config.worktree'))).toBe(false) - expect(gitResult(fixture, fixture.main, [ - 'config', '--get', 'merge.dsh-translation-pairing.driver', - ]).status).toBe(1) }) } @@ -263,12 +249,6 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(mainHooks).not.toBe(linkedHooks) expect(git(fixture, fixture.main, ['config', '--worktree', '--get', 'core.hooksPath'])).toBe(mainHooks) expect(git(fixture, fixture.linked, ['config', '--worktree', '--get', 'core.hooksPath'])).toBe(linkedHooks) - expect(git(fixture, fixture.main, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.driver', - ])).toBe(pairingMergeDriver) - expect(git(fixture, fixture.linked, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.driver', - ])).toBe(pairingMergeDriver) const mainHook = readFileSync(join(mainHooks, 'pre-commit'), 'utf8') const linkedHook = readFileSync(join(linkedHooks, 'pre-commit'), 'utf8') @@ -290,10 +270,6 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(gitResult(fixture, fixture.main, ['config', '--file', commonConfig, '--get', 'core.bare']).status).toBe(1) const mainHookBeforeRemoval = readFileSync(join(mainHooks, 'pre-commit'), 'utf8') - // Windows Git follows the fixture's MOUNT_POINT junctions into their real - // targets while removing a worktree; unlink them first so the removal - // cannot delete the repository's scripts/ or tsx package. - unlinkFixtureLinks(fixture.linked) git(fixture, fixture.main, ['worktree', 'remove', '--force', fixture.linked]) expect(readFileSync(join(mainHooks, 'pre-commit'), 'utf8')).toBe(mainHookBeforeRemoval) expect(readFileSync(legacyHook, 'utf8')).toBe('#!/bin/sh\n# legacy hook\n') @@ -309,7 +285,6 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { git(fixture, fixture.main, ['worktree', 'add', '-b', 'late-linked', lateLinked]) write(join(lateLinked, 'lefthook.yml'), 'late-linked-worktree-config\n') installFakeLefthook(lateLinked) - installPairingProbeFixture(lateLinked) expect(git(fixture, lateLinked, ['config', '--worktree', '--get', 'core.hooksPath'])).toBe(mainHooks) const linkedInstall = await runInstaller(fixture, lateLinked) @@ -725,50 +700,9 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(result.stderr).toContain('command-scoped core.hooksPath') expect(readFileSync(sentinel, 'utf8')).toBe('#!/bin/sh\n# command-scope sentinel\n') expect(gitResult(fixture, fixture.main, ['config', '--get', 'core.hooksPath']).status).toBe(1) - expect(gitResult(fixture, fixture.main, [ - 'config', '--get', 'merge.dsh-translation-pairing.driver', - ]).status).toBe(1) expect(existsSync(hooksPath(fixture, fixture.main))).toBe(false) }) - it('never replaces a custom worktree pairing merge driver', async () => { - const fixture = createFixture() - const commonConfig = join(commonDirectory(fixture), 'config') - git(fixture, fixture.main, ['config', '--file', commonConfig, 'core.repositoryFormatVersion', '1']) - git(fixture, fixture.main, ['config', '--file', commonConfig, 'extensions.worktreeConfig', 'true']) - git(fixture, fixture.main, [ - 'config', '--worktree', 'merge.dsh-translation-pairing.driver', 'custom-driver %A', - ]) - - const result = await runInstaller(fixture, fixture.main) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('refusing to replace worktree merge.dsh-translation-pairing.driver') - expect(git(fixture, fixture.main, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.driver', - ])).toBe('custom-driver %A') - expect(gitResult(fixture, fixture.main, ['config', '--get', 'core.hooksPath']).status).toBe(1) - }) - - it('never masks an inherited custom pairing merge driver', async () => { - const fixture = createFixture() - git(fixture, fixture.main, [ - 'config', '--local', 'merge.dsh-translation-pairing.driver', 'inherited-driver %A', - ]) - - const result = await runInstaller(fixture, fixture.main) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('refusing to mask inherited merge.dsh-translation-pairing.driver') - expect(git(fixture, fixture.main, [ - 'config', '--local', '--get', 'merge.dsh-translation-pairing.driver', - ])).toBe('inherited-driver %A') - expect(gitResult(fixture, fixture.main, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.driver', - ]).status).toBe(1) - expect(gitResult(fixture, fixture.main, ['config', '--get', 'core.hooksPath']).status).toBe(1) - }) - it('does not pass unrelated command-scoped Git config to Lefthook', async () => { const fixture = createFixture() @@ -818,29 +752,9 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(result.stderr).toContain('exit status 77') expect(gitResult(fixture, fixture.main, ['config', '--worktree', '--get', 'core.hooksPath']).status).toBe(1) expect(gitResult(fixture, fixture.main, ['config', '--get', 'core.hooksPath']).status).toBe(1) - expect(gitResult(fixture, fixture.main, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.name', - ]).status).toBe(1) - expect(gitResult(fixture, fixture.main, [ - 'config', '--worktree', '--get', 'merge.dsh-translation-pairing.driver', - ]).status).toBe(1) expect(readFileSync(legacyHook, 'utf8')).toBe('#!/bin/sh\n# legacy pre-push\n') }) - it('does not publish worktree integration when the pairing driver probe fails', async () => { - const fixture = createFixture() - rmSync(join(fixture.main, 'node_modules/tsx'), { recursive: true, force: true }) - - const result = await runInstaller(fixture, fixture.main) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('merge-translation-pairing.ts --probe failed') - expect(gitResult(fixture, fixture.main, ['config', '--get', 'core.hooksPath']).status).toBe(1) - expect(gitResult(fixture, fixture.main, [ - 'config', '--get', 'merge.dsh-translation-pairing.driver', - ]).status).toBe(1) - }) - it('reports installation and hook-path rollback failures together', async () => { const fixture = createFixture() @@ -854,7 +768,6 @@ describe('worktree-local Lefthook installer', { timeout: 90_000 }, () => { expect(result.stderr).toContain('exit status 77') expect(result.stderr).toContain('worktree integration rollback also failed') expect(result.stderr).toContain('git config --worktree --unset-all core.hooksPath failed') - expect(result.stderr).toContain('git config --worktree --unset-all merge.dsh-translation-pairing.driver failed') }) it('refuses an unowned directory at the reserved worktree hook path', async () => { diff --git a/scripts/merge-translation-pairing-driver.sh b/scripts/merge-translation-pairing-driver.sh deleted file mode 100755 index c1fffaff20..0000000000 --- a/scripts/merge-translation-pairing-driver.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh - -if [ "$#" -ne 4 ]; then - echo 'merge-translation-pairing: expected ' >&2 - exit 129 -fi - -ancestor_path=$1 -current_path=$2 -other_path=$3 -meta_path=$4 -driver_directory=$(CDPATH= cd -P "$(dirname "$0")" && pwd) || exit 129 -driver_path=$driver_directory/merge-translation-pairing.ts - -if command -v node >/dev/null 2>&1 \ - && node --import tsx/esm "$driver_path" --probe >/dev/null 2>&1; then - exec node --import tsx/esm "$driver_path" \ - "$ancestor_path" "$current_path" "$other_path" "$meta_path" -fi - -echo "merge-translation-pairing: runtime is unavailable; leaving an ordinary text conflict in $meta_path" >&2 -git merge-file \ - -L "$meta_path:current" \ - -L "$meta_path:ancestor" \ - -L "$meta_path:other" \ - -- "$current_path" "$ancestor_path" "$other_path" -fallback_status=$? -echo 'merge-translation-pairing: restore Node dependencies, then rerun the merge or `pnpm run resolve-translation-pairing-conflicts`; use `git merge --abort` to cancel' >&2 - -# A clean text merge is still unverified pairing metadata, so the driver must -# leave Git's index stages unresolved until the repository-aware resolver runs. -if [ "$fallback_status" -gt 127 ]; then - exit "$fallback_status" -fi -exit 1 diff --git a/scripts/merge-translation-pairing.ts b/scripts/merge-translation-pairing.ts deleted file mode 100644 index b14305bddb..0000000000 --- a/scripts/merge-translation-pairing.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** Git merge-driver and explicit conflict-resolver entrypoint for pairing records. */ - -import { execFileSync } from 'node:child_process' -import { readFileSync, writeFileSync } from 'node:fs' -import { - mergeTranslationPairingRecords, - repositoryTranslationPairSource, - resolveTranslationPairingConflicts, -} from './translation-pairing-merge.ts' - -const args = process.argv.slice(2) - -try { - if (args[0] === '--probe') { - if (args.length !== 1) throw new Error('--probe takes no other arguments') - } else { - const root = execFileSync('git', ['rev-parse', '--show-toplevel'], { encoding: 'utf8' }).trim() - if (args[0] === '--resolve') { - if (args.length !== 1) throw new Error('--resolve takes no paths; it inspects the unmerged index') - const resolved = resolveTranslationPairingConflicts(root, repositoryTranslationPairSource(root)) - if (resolved.length === 0) { - console.log('merge-translation-pairing: no unresolved pairing records') - } else { - for (const path of resolved) console.log(`merge-translation-pairing: resolved ${path}`) - } - } else { - if (args.length !== 4) { - throw new Error('merge-driver mode requires ') - } - const [ancestorPath, currentPath, otherPath, metaPath] = args - if (ancestorPath === undefined || currentPath === undefined || otherPath === undefined || metaPath === undefined) { - throw new Error('merge-driver arguments are incomplete') - } - const result = mergeTranslationPairingRecords( - root, - metaPath, - readFileSync(ancestorPath, 'utf8'), - readFileSync(currentPath, 'utf8'), - readFileSync(otherPath, 'utf8'), - repositoryTranslationPairSource(root), - ) - writeFileSync(currentPath, result.record) - } - } -} catch (error) { - console.error(`merge-translation-pairing: ${error instanceof Error ? error.message : String(error)}`) - console.error( - 'merge-translation-pairing: resolve owner conflicts, then confirm the pair with ' - + '`pnpm run verify-translation-pairing --write `; rerun ' - + '`pnpm run resolve-translation-pairing-conflicts` for other safe records', - ) - process.exitCode = 1 -} diff --git a/scripts/persistence-artifacts.ts b/scripts/persistence-artifacts.ts index bc1d162e81..ec2fe8fd54 100644 --- a/scripts/persistence-artifacts.ts +++ b/scripts/persistence-artifacts.ts @@ -2,10 +2,12 @@ import { readFileSync } from 'node:fs' import { hasLanguageSwitcher } from './translation-links.ts' -import { translationPairPaths } from './translation-pairing-record.ts' import { - blobHash, languageSwitcherTargets, parseTranslationMarkdown, parseTranslationPairingManifest, - renderPairMeta, requiresSourceLanguageSwitcher, translationPairSourcePredicate, + computeTranslationPairingRecord, renderTranslationPairingRecord, translationPairPaths, +} from './translation-pairing-record.ts' +import { + languageSwitcherTargets, parseTranslationMarkdown, parseTranslationPairingManifest, + requiresSourceLanguageSwitcher, translationPairSourcePredicate, translationStructureDiff, translationStructureSignature, } from './translation-pairing.ts' @@ -21,8 +23,7 @@ export interface PersistenceArtifact { /** * Check a pair's code, structure and localized links, then render its three files. - * Link existence remains the Markdown gate's responsibility. Pair hashes are - * computed in-process; staging the documents stores the corresponding Git blobs. + * Link existence remains the Markdown gate's responsibility. * @param root - checkout root used to resolve relative link identities. * @param source - repository-relative English document path. * @param en - complete authored or generated English Markdown. @@ -48,6 +49,6 @@ export function renderPersistencePair(root: string, source: string, en: string, return [ { path: paths.source, content: en }, { path: paths.zh, content: zh }, - { path: paths.meta, content: renderPairMeta(paths.source, blobHash(Buffer.from(en)), paths.zh, blobHash(Buffer.from(zh))) }, + { path: paths.meta, content: renderTranslationPairingRecord(paths, computeTranslationPairingRecord(paths, en, zh, context)) }, ] } diff --git a/scripts/snapshots/translation-prompt-v4/request-response.expected.json b/scripts/snapshots/translation-prompt-v4/request-response.expected.json index 0e9d5ff7b0..dcef2cdc43 100644 --- a/scripts/snapshots/translation-prompt-v4/request-response.expected.json +++ b/scripts/snapshots/translation-prompt-v4/request-response.expected.json @@ -4,7 +4,7 @@ "messages": [ { "role": "system", - "content": "# Translation Prompt\n\nYou are a senior technical translator specializing in LLM and agent development documentation. Your task is to translate the complete source document from English to Chinese, producing natural, professional technical prose.\n\nRead each complete semantic unit, understand it, and restate it as a native technical author would write it in the target language. Do not mechanically preserve source-language syntax. Then verify the translation against the source clause by clause: preserve every proposition and add none. Fluency never justifies losing or altering meaning, and completeness never justifies unnatural word-for-word prose.\n\n## Priority\n\nApply these authorities in order:\n\n1. Preserve the source meaning and the required document structure, protected content, and formatting.\n2. Follow the injected terminology table exactly.\n3. Use the injected whole-document gold pairs to calibrate target-language voice and phrasing.\n4. Apply the general writing guidance and illustrative examples in this prompt.\n\nA lower-priority rule may refine but never override a higher-priority requirement. Gold pairs calibrate voice; they are not a translation memory. No style preference, gold-pair phrasing, or embedded example may override source meaning, required structure, protected content, or the terminology table.\n\n## Quality Requirements\n\n### Structure and Format Preservation\n- Output a complete translated document that maintains the same document frame as the source: heading hierarchy and order, list kinds and item counts, ordered-list starts, table rows and columns, link order and semantic targets, and code blocks.\n- Paragraph boundaries may change within the same structural unit when the target language needs different semantic grouping. Do not merge or move content across headings, list items, table cells, or other independent structural units.\n- Keep each prose paragraph on one physical line. Use paragraph breaks, not hard-wrapped lines inside a paragraph.\n- Fenced code blocks must be byte-identical to the source, including info strings, whitespace, and ALL comments inside them. Do NOT translate or reformat any content inside code blocks. This is a hard rule with no exceptions.\n- Inline code spans must be kept verbatim. This includes commands, flags, paths, identifiers, API and event names, config keys, protocol values, version numbers, and other machine-readable tokens. Never translate or reformat them.\n- Every repository-relative document link must keep the source link's semantic target and exact query/fragment suffix. When the target belongs to the active bilingual corpus, English output uses its `.md` path and Chinese output uses its `.zh.md` path; a missing counterpart in that corpus is an error, while targets outside it keep the original path. External URLs, images, and pure in-page fragments stay unchanged. Translate link text.\n- Language switcher line: when an English source contains `English | [中文](source-filename.zh.md)`, write `[English](source-filename.md) | 中文`. When a Chinese source contains `[English](source-filename.md) | 中文`, write `English | [中文](source-filename.zh.md)`. Do NOT copy the source switcher unchanged. If the source has no switcher, do not invent a filename or switcher; the pipeline inserts the canonical target switcher after parsing ``.\n- Preserve emphasis marker types and the semantic spans they cover. Do not add, remove, move, or change bold and italic markers.\n\n### Faithfulness\n- Preserve every proposition in the source and add none. Every sentence, list item, note, FIXME, warning, example, caveat, prerequisite, and guarantee must have an equivalent in the translation. Count list items on both sides.\n- Preserve actors, objects, conditions, exceptions, negation, modality, causal relationships, and distinctions between concepts.\n- Preserve the exact strength and orientation of contracts. Completion and lifecycle conditions, failure behavior, directions and data flow, normal and exceptional result channels, ownership changes, and quantitative bounds must not be weakened, strengthened, reversed, or merged.\n- Translate ideas rather than source-language idioms, but never use fluency as a reason to omit or alter meaning.\n\n### Tone and Style\n- The translation must read as if originally written in the target language by a native technical author. If an expression sounds like a word-for-word rendering from the source language, rephrase it.\n- Write in a professional, formal tone appropriate for developer documentation. Never use colloquial or casual expressions.\n- Name an actor when the target language would otherwise obscure an actor that the source states or unambiguously implies. Never invent responsibility merely to avoid a passive construction.\n- Prefer established target-language engineering terms over literal renderings. Replace metaphors with direct descriptions that preserve the source meaning.\n- Use polite imperative forms where the text instructs the reader to do something. In Chinese, address the reader as `你`, not `您`.\n- Keep the author's register: concise stays concise, detailed stays detailed.\n\n### Sentence Structure\n- Break long sentences where the target language needs a pause. Avoid run-on sentences.\n- Use active voice when it improves clarity without changing or inventing the actor. Retain passive voice when the actor is unknown, irrelevant, or intentionally omitted.\n- Restructure source-language syntax into clear target-language syntax. Preserve the logical scope of conditions, concessions, negation, coordination, and modifiers.\n- Split or combine clauses when needed for readability, provided every source relationship remains explicit.\n- Translate meaning, not words. Do not invent words or expressions that a native technical author would not use.\n\n### Word Choice\n- Prefer precise, formal vocabulary over casual or colloquial alternatives.\n- When multiple synonyms exist, choose the one most commonly used in professional technical documentation of the target language.\n- Translate ordinary prose when an established target-language expression is clear. Preserve proper nouns, canonical product names, code identifiers, APIs, paths, package names, and terms that the terminology table requires to remain in the source language.\n- Use context to resolve polysemous words. A familiar word does not have one fixed rendering in every technical domain.\n- Avoid slang, internal jargon, or overly literal translations that would not be recognized by the general developer audience.\n- Do not use the same word to translate distinct source-language concepts when their distinction matters.\n- Avoid repeating the same ordinary verb in close proximity when a natural equivalent preserves the exact meaning. Never vary a terminology-table form, defined concept, or contract verb merely for stylistic variety.\n\n#### When translating into Chinese\n- When a number modifies a noun, include a natural Chinese classifier or measure word when Chinese grammar requires one. For example: \"three-role capability seam\" → \"包含三种角色的能力 seam\", not \"三角色 seam\". Do not add classifiers to code, identifiers, versions, units, or fixed names.\n\n### Punctuation\n\n#### When translating into Chinese\n- Use full-width Chinese punctuation in Chinese prose: `,。:;?!()「」`. Keep half-width punctuation inside code spans, numbers, and complete verbatim English text.\n- Prefer colons, periods, commas, or parentheses over em dashes when they make the sentence clearer or more natural. Keep an em dash when it is the clearest natural punctuation.\n- Use enumeration commas (、) between parallel Chinese items, not regular commas.\n- Keep list-item endings consistent with their grammar. Complete sentences may end with periods or other grammatically required punctuation; do not end list items with commas.\n- Put one half-width space between Chinese text and Latin words or numerals. Do not add a space next to full-width punctuation, and do not leave a meaningless half-width space between two Chinese characters.\n- Markdown emphasis markers do not create a word boundary. Determine spacing from the rendered adjacent characters: Chinese next to Chinese takes no space, while Chinese next to a Latin word or numeral takes one half-width space.\n- Use half-width digits and Latin letters, never full-width forms.\n- For RFC 2119 keywords (MUST, MUST NOT, SHOULD, MAY), translate to the corresponding Chinese term (必须、禁止、应当、可以), preserve the SOURCE emphasis span exactly, and do not weaken its normative strength: plain source stays plain (必须), italic source stays italic (*必须*), and bold source stays bold (**必须**).\n\n#### When translating into English\n- Use half-width English punctuation and standard English spacing. Preserve full-width punctuation only in verbatim Chinese text.\n- Convert enumeration commas (、) to English commas and Chinese prose quotation marks to English double quotes.\n- Convert Chinese topic-comment sentences and omitted-subject constructions into clear English subjects when the actor is stated or unambiguously implied. Do not invent an actor.\n- Use concise professional developer prose and established English technical terms. Do not transliterate Chinese engineering idioms literally.\n- Use the terminology table's English column exactly and do not carry Chinese first-occurrence glosses into English prose.\n\n## Terminology\n\nA terminology table is provided below. Follow it strictly:\n- Render every listed term exactly as specified.\n- When the target language is Chinese, use the \"中文\" column. On the document's first prose occurrence, write the \"首次出现\" value when one is specified; on later occurrences, write only the part before the parenthetical gloss.\n- When the target language is English, use the \"English\" column without a Chinese gloss; do not copy the \"中文\" or \"首次出现\" value into English prose.\n- If a term has already been glossed as part of a compound term, do not gloss it again when it appears alone later.\n- NEVER use translations listed in the \"不要译作\" column.\n- Code spans and other protected tokens remain verbatim even when their text resembles a listed term.\n- For an unlisted technical term, use an established target-language technical term when its meaning is unambiguous in context. For a Chinese target, use an established Chinese rendering from a major Chinese-language OSS or vendor source; if you cannot reliably determine such a rendering, preserve the source term and record `[Terminology: pending]` in `` with a tentative rendering for human review. For an English target, use the established English technical term; if the source term has no unambiguous established equivalent, preserve it with the shortest English gloss needed to make it intelligible and record `[Terminology: pending]` in ``. A tentative rendering may appear in `` but must not be silently adopted in `` or ``, and you must not invent or claim a specific external precedent. This rule applies to terminology only; for general prose, freely restructure and paraphrase for natural expression.\n\n# Terminology\n\n本表约定本仓库的中英术语统一译法。\n\n**通用规则:**\n- \"中文\"列为中文译文的正文默认用词。若该列为英文,则中文译文的正文中保留英文不翻译。\n- 首次出现按\"首次出现\"列书写(带括号注释);后续出现只写括号前的部分(可能为中文,也可能为英文),不出现括号内的注释。\n- \"不要译作\"列为严格禁止的译法。\n- 如果某术语已经作为另一个术语的组成部分被括注过(如 `agent loop(智能体循环)` 中已包含 `agent` 的括注),则该术语后续单独出现时无需再次括注。\n\n## 缩写类(中英文文本中均使用缩写)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| ACP | ACP | ACP(Agent Client Protocol) | | |\n| AI | AI | AI(人工智能) | | |\n| API | API | | | |\n| CI | CI | | | |\n| CLI | CLI | CLI(命令行界面) | | |\n| e2e | e2e | | | |\n| HMR | HMR | HMR(热模块替换) | | |\n| JSON Schema | JSON Schema | | | |\n| JSONL | JSONL | | | |\n| LLM | LLM | LLM(大语言模型) | | |\n| MCP | MCP | | | |\n| PR | PR | PR(Pull Request) | | |\n| RAG | RAG | RAG(检索增强生成) | | |\n| SDK | SDK | | | 只指受支持的 Python 与 TypeScript SDK 所使用的 JSON-RPC 客户端/服务器协议;DeepSeek Harness 项目本身不是 SDK |\n| SSE | SSE | SSE(Server-Sent Events) | | |\n\n## 英文类(中英文文本中均使用英文)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| agent | agent | agent(智能体) | | |\n| Agent Note | Agent Note | | 智能体注记、智能体笔记 | 仓库定义的文档类型,涵盖提案、已实现决策和被否决提案;中文对侧 H1 保持固定前缀 `# Agent Note: `,标题中不加术语括注 |\n| agent harness | agent harness | agent harness(智能体框架) | | agent 组合词(agent harness/workflow/loop/skill 等)整体保留英文;未括注过 agent 时首现按对应组合词或 agent 行处理 |\n| agent loop | agent loop | agent loop(智能体循环) | | |\n| blob hash | blob hash | | | `git hash-object` 的结果 |\n| coding agent | coding agent | coding agent(编程智能体) | | agent 组合词,正文保留英文 |\n| Cordis | Cordis | | | |\n| dispose | dispose | dispose(资源释放) | | |\n| doc-sync | doc-sync | doc-sync(文档同步门禁) | | |\n| fiber | fiber | | | |\n| fixture | fixture | fixture(测试前置数据) | | |\n| fork | fork | | | |\n| Function Calling | Function Calling | Function Calling(函数调用) | | |\n| harness | harness | | | |\n| harness engineering | harness engineering | | | |\n| KV Cache | KV Cache | | | 专有技术名称,保持大小写与空格 |\n| lint | lint | | | |\n| mock | mock | | | 保留英文;指测试替身 |\n| loader | loader | | | |\n| manifest | manifest | manifest(元数据清单) | | |\n| monorepo | monorepo | | | |\n| Round | Round | | 回合、目标回合、Ralph 回合 | 外层策略使用 Round 时,领域层级为 Session > Round > Turn(轮次) > Step(步骤);Round 是可选的外层策略迭代,并非每个会话轮次都具有的通用层级。Goal Round 与 Ralph Round 均保留英文。一个 Round 承载一个轮次,步骤隶属于该轮次;明确的零步骤轮次仍保持原义。 |\n| schema | schema | | | |\n| schema DSL | schema DSL | | | |\n| seam | seam | | 接缝 | 一个可替换能力的整体,包含 Service Definition / Service Provider / Consumer 三种角色;角色需要独立演化时才拆包,也可由同一包承担多个角色。以 `packages/shell` 为范例;Service Definition 是 Cordis `Service`(抽象类或具体 registry 服务),不是 TypeScript interface。任何单一角色、普通边界或扩展点都不能称为 seam。本仓库正文保留英文;与 `extension point` 是不同概念 |\n| Service Provider | Service Provider | | Service provider | 能力 seam 的命名角色;单数固定写作 Service Provider,复数写作 Service Providers。泛指提供服务的 provider 不适用本词条 |\n| skill | skill | skill(技能) | | |\n| slot | slot | | 坑位、孔位 | 客户端架构中的具名可注册位置,保留英文 |\n| spill | spill | | | 工具输出超限落盘机制;组合词写 `spill 文件`、`spill 路径` |\n| spawn | spawn | | | |\n| steering | steering | steering(中途引导) | | |\n| job id | job id | | 任务 id | 保留英文 |\n| subagent | subagent | | | 文档正文保留英文;中文 UI 中译作「子智能体」,不使用「子代理」 |\n| transcript | transcript | transcript(文本记录) | | 指会话渲染给用户或编辑器的完整文本,区别于事件日志 |\n| Typert | Typert | | TypeRT、typeRT、Type RT | DeepSeek Harness 类型图、生成器、loader 与运行时 registry 的产品拼写 |\n| waterfall | waterfall | waterfall(瀑布式事件) | | |\n| wheel | wheel 包 | | | Python 打包格式 |\n| worktree | worktree | | | git 工作区概念 |\n| Zstandard | Zstandard | | | RFC 8878 compression format; `zstd` remains a code value. |\n\n## 双语类(中英文文本各自使用中英文)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| adapter | 适配器 | | | |\n| adapter contract | 适配器约定 | 适配器约定(adapter contract) | | |\n| append-only | 仅追加 | | | |\n| artifact | 产物 | | 制品 | |\n| backend | 后端 | | | |\n| binder | 绑定器 | | | 命名角色:把已声明接口绑定到调用方 context 或生命周期 |\n| config | 配置 | | | 命名角色:一个已解析配置值或边界严格的配置记录 |\n| controller | 控制器 | | | 命名角色:接受意图并改变一项既有领域或展示状态 |\n| directory | 目录 | | | 命名角色:暴露供发现或选择的条目及元数据 |\n| engine | 引擎 | | | 命名角色:实现领域算法或有状态执行模型 |\n| gateway | 网关 | | | 命名角色:适配进程、网络、RPC 或 API 边界 |\n| handle | 句柄 | | | 命名角色:引用并控制或观察一个实时资源 |\n| policy | 策略 | | | 命名角色:决定允许、选择、限制或观察什么 |\n| presenter | 展示转换器 | | | 命名角色:把领域值纯转换为渲染意图 |\n| resolver | 解析器 | | | 命名角色:根据输入计算或定位一个答案 |\n| store | 存储 | | | 命名角色:拥有一组数据并主要提供数据操作 |\n| background job | 后台任务 | | | |\n| block | 块 | | | |\n| build target | 构建目标 | | | |\n| cancel | 取消 | | | |\n| canary test | canary 测试 | | 金丝雀测试 | 本仓库保留 `canary` |\n| capability | 能力 | | | 必须与 `feature` → `功能` 区分 |\n| capability seam | 能力 seam | | 功能 seam、能力接缝 | 本仓库 Service Definition、Service Provider 与 Consumer 三种角色组成完整可替换能力的命名架构概念;普通 `seam` 仍按其词条处理 |\n| feature | 功能 | | 能力 | SDK 产品与工程模型中的可管理产品单元 |\n| feature option | 功能选项 | | variant | 一项 SDK 功能内有限、可选择的实现或配置 |\n| checkpoint | 检查点 | | | |\n| chunk | 分片 | | | |\n| compaction | 压缩 | 压缩(compaction) | | |\n| companion tool | 配套工具 | | | |\n| composition bundle | 组合包 | | | 只约束应用或插件的组合语境,不约束所有 `bundle` |\n| Cordis plugin config | Cordis 插件配置 | | | Cordis 插件公开的 `Config` 对象或配置结构 |\n| config key | 配置键 | | | Cordis 插件配置中的单个字段 |\n| consumer | 消费方 | | 消费者 | |\n| content block | 内容块 | | | |\n| Cookbook | 实操手册 | | | 文档标题用语 |\n| context | 上下文 | | | |\n| counterpart | 对侧文件 | | 对应物、配对物 | 双语配对语境;泛指\"另一侧\"时可写「另一侧」 |\n| configurable-provider directory | 可配置提供方目录 | | | llm seam 中 `registerConfigurableProviders()` 维护的目录;沿用 Service Catalog →「服务目录」先例 |\n| context compaction | 上下文压缩 | 上下文压缩(context compaction) | | |\n| contract | 约定 | | | 如:`pairing contract` →`配对约定` |\n| Cordis config entry | Cordis 配置项 | | | 指 `cordis.yml` 插件列表中的一项;插件实现本身写`Cordis 插件` |\n| Cordis plugin | Cordis 插件 | | | Cordis 加载的插件实现,不指 `cordis.yml` 中的一项配置 |\n| crash recovery | 崩溃恢复 | | | |\n| deploy root | 部署根目录 | | | |\n| dormant | 休眠 | | 睡眠、蛰伏 | 指已声明可配置但当前未注册路由的提供方 |\n| durability | 持久性 | | | |\n| feature requirement | 功能依赖 | | | 功能或功能选项通过 `requires` 声明的关系 |\n| event | 事件 | | | |\n| event log | 事件日志 | | | |\n| event stream | 事件流 | | | |\n| event-sourced | 事件溯源 | | | 沿用 DDD 社区通行译法 |\n| Executive summary | 摘要 | | | 事故复盘标题用语 |\n| executor | 执行器 | | | |\n| expected output | 预期输出 | | 金标 | 指 snapshot 比较产物;翻译语料的人工校准样例不在此列 |\n| extension | 扩展 | | | |\n| extension point | 扩展点 | | | 注意与 `seam` 区分 |\n| fail-fast | 快速失败 | | | |\n| fenced code block | 围栏代码块 | | | 沿用 MDN 中文翻译 |\n| fingerprint | 指纹 | | | 通用内容指纹;双语配对机制使用 sidecar record 记录两侧 blob hash |\n| finish reason | 结束原因 | | | |\n| fold | 折叠区 | | | 配置界面语境:默认收起的字段分区(collapsed →「收起」)|\n| foreground run | 前台运行 | | | |\n| freshness | 新鲜度 | | | 沿用 MDN 中文翻译;在本项目中指译文相对源文的同步状态 |\n| hook | 钩子 | | | |\n| implementation | 实现 | | | |\n| inference | 推理 | 推理(inference) | | 需要和 `reasoning` 区分时保留英文括注 |\n| info string | 信息字符串 | | | 沿用 CommonMark 中文翻译;指代码围栏 ``` 之后的语言标注 |\n| injection | 注入 | | | |\n| integration | 集成 | | | |\n| interface | 接口 | | | |\n| language switcher | 语言切换行 | | | i18n 配对机制用语:双语配对文件顶部的互链行 |\n| merge | 合并 | | | |\n| message | 消息 | | | |\n| mod | 模组 | | | |\n| model provider | 模型提供商 | | | 指为模型提供 API 的厂商或网关:模型设置页文案、用户指南 providers 与 `ui-settings-models` README 用「提供商」;llm seam 的开发者文档(可配置提供方目录、dormant 等)沿用「提供方」 |\n| model selection | 模型选择 | | 模型目标 | 面向 Agent 的提供方、模型和可选推理强度选择。 |\n| module | 模块 | | | |\n| non-escalation | 非升权 | | 非升级、不可升级 | 仅用于安全与权限语境,指主体不得获得超出既有授权的权限;普通升级不适用此行 |\n| npm dependency | NPM 依赖 | | | `package.json` 中的包关系;`dependencies`、`devDependencies` 等字段保持原样 |\n| opt-out ratio | opt-out 比例 | | 退出检查比例 | |\n| orphan | 遗留 | | 孤儿、孤立 | 指英文源已不存在的 `.zh.md`(如「遗留译文」);进程语境按 OS 惯用语译「孤儿进程」 |\n| orphan branch | 孤立分支 | | 孤儿分支 | 沿用 git 官方中文翻译 |\n| package | 包 | | | 指 npm 包(`@deepseek-ai/dsh-*`);`package.json` 等代码标识保持原样 |\n| pairing | 配对 | | | |\n| parent-subset grants | 父级子集授权 | | 父集合授权 | 指授权范围仅限于父级所持授权的子集 |\n| peer dependency | 对等依赖 | 对等依赖(peer dependency) | | |\n| permission | 权限 | | | |\n| persistence | 持久化 | | | |\n| pipeline | 流水线 | | | |\n| plugin | 插件 | | | |\n| postmortem | 事故复盘 | 事故复盘(postmortem) | 事后分析、事故记录 | 事故记录与分析文档;目录或路径中的 `postmortem` 保持代码形式 |\n| prompt | 提示词 | | | |\n| provider | 提供方 | | | 泛指的提供方(搜索、检查、settings 文件、subagent 等);模型厂商或网关见 model provider 行 |\n| provider-neutral | 提供方无关 | | 提供方中立 | |\n| quality gate | 质量门禁 | | | |\n| quiescence | 完全停稳 | | 静默、静止状态 | 指生命周期工作全部结算后的状态 |\n| reasoning | 推理 | 推理(reasoning) | | 需要和 `inference` 区分时保留英文括注 |\n| reasoning_content | 思考内容 | | | |\n| registry | 注册表 | | | |\n| replay | 回放 | | | |\n| resume | 恢复 | | | |\n| runtime | 运行时 | | | |\n| same-world subprocess | 与宿主共享文件系统和内核的子进程 | | 同世界子进程 | |\n| sandbox | 沙箱 | | | |\n| service | 服务 | | | |\n| serving interface | 对外服务接口 | | | |\n| session | 会话 | | | |\n| session event | 会话事件 | | | |\n| setup card | 设置卡片 | | | 首次运行时代替行卡直接展开的配置卡 |\n| sidecar file | 伴随文件 | | | 指与文档同目录的普通伴随文件 |\n| sidecar record | 伴随记录 | | 旁挂记录 | 指与文档同目录的伴随记录文件 |\n| smoke test | 冒烟测试 | | | |\n| snapshot | 快照 | | | |\n| source of truth | 真源 | | 事实来源、唯一来源 | |\n| spine | 主干 | | | |\n| stale | 陈旧 | | 过期 | 与 `fresh`(`新鲜`)成对;门禁输出中保留英文 `stale` 不翻译;`expired` 才译为`过期` |\n| step | 步骤 | | | |\n| stream | 流 | | | |\n| structural signature | 结构签名 | | | i18n 配对机制用语:门禁比对两侧文件时提取的有序结构序列(标题层级、代码块、列表等) |\n| Summary | 概述 | | | 事故复盘标题用语 |\n| system prompt | 系统提示词 | | | |\n| taxonomy | 分类体系 | | | |\n| token usage | token 用量 | | | |\n| tool | 工具 | | | |\n| tool call | 工具调用 | | | |\n| tool result | 工具结果 | | | |\n| tool schema | 工具 schema | | | |\n| toolkit | 工具包 | | | |\n| turn | 轮次 | | | |\n| VFS | VFS | 虚拟文件系统(VFS) | | |\n| typecheck | 类型检查 | | | |\n| vocabulary | 词汇 | | | |\n| wire format | 协议格式 | 协议格式(wire format) | | |\n| workflow | 工作流 | | | |\n| wrapper | 包装层 | | | 软件层或 SDK 包装层 |\n| wrapper script | 包装脚本 | | | 可执行脚本包装层 |\n\n\n## Output Format\n\nReturn exactly three raw XML sections in the order shown below. Do not wrap the response in a Markdown code fence and do not add analysis or text before, between, or after the sections. The fence below only displays the required format; do not reproduce the fence.\n\nThe outer section tags are framing. If Markdown inside any section body contains a line consisting only of ``, ``, ``, ``, ``, or ``, prefix that line with `\\`. If the original line already has one or more backslashes immediately before the tag, add one more. The parser removes exactly one framing escape; tags mentioned inline need no escaping.\n\n```xml\n\n(First pass: the complete translation, written as natural target-language technical prose)\n\n\n\n(Second pass: actual corrections only, one correction per line with a category tag, e.g.)\n- [Tone] \"旁挂记录\" → \"伴随记录\"(生造词)\n- [Sentence] 第 3 段补充逗号断句\n- [Punctuation] 两处破折号替换为冒号\n- [Terminology: pending] source term → tentative rendering\n- 无修正\n\n\n\n(Complete final translation after corrections)\n\n```\n\n## Self-Review Instructions\n\nAfter writing ``, verify it in two directions. First re-read it in the target language only without comparing it with the source; this makes awkward phrasing easier to notice. Then compare it against the source clause by clause for completeness and exact meaning. Resolve doubts before writing ``; do not include reasoning transcripts, checks that passed, tentative suggestions, retractions, or no-op corrections.\n\n**Structure**\n- Are the heading hierarchy and order, list kind and item count, ordered-list start, table dimensions, and code block content identical to the source?\n- Are ALL comments and info strings inside code blocks left untranslated and byte-identical to the source?\n- Are inline code spans and machine-readable tokens verbatim?\n- Is an existing language switcher correctly flipped, and is no switcher or filename invented when the source lacks one?\n- Do links preserve their semantic targets and exact query/fragment suffixes while using target-locale paths, and are emphasis spans preserved?\n- Does spacing across emphasis boundaries follow the same Chinese/Latin/numeral rule as ordinary prose?\n- Are wrapper-tag lines inside section bodies escaped with one additional backslash?\n\n**Faithfulness**\n- Clause by clause, is anything added, dropped, weakened, strengthened, reversed, merged, or re-bounded? Are list item counts identical on both sides?\n- Do actors, objects, conditions, exceptions, negation, modality, causal relationships, guarantees, contract directions, result channels, ownership changes, and quantities survive exactly?\n\n**Tone & Style**\n- Does every sentence read as if originally written by a native technical author?\n- Is there any colloquial, casual, overly informal, promotional, or metaphorical phrasing?\n- Are actors explicit where the target language needs them, without inventing responsibility?\n\n**Sentence Structure**\n- Are there run-on sentences that need breaking?\n- Are there stiff passive constructions that can safely become active, or active constructions that invent an actor?\n- Are conditions, concessions, negation, coordination, and modifiers scoped clearly?\n\n**Word Choice**\n- Are there overly literal translations that sound unnatural?\n- Are ordinary prose words left untranslated despite an established target-language expression?\n- Does each polysemous word fit its local context?\n- Is the same target-language word used for distinct source concepts, or is a defined term varied merely to avoid repetition?\n- Is any slang or internal jargon present?\n\n**Terminology**\n- For a Chinese target, are first-occurrence glosses correctly applied to the true first prose occurrence, neither missing nor repeated? For an English target, are Chinese glosses absent?\n- Are any \"不要译作\" forbidden translations present?\n- Do protected tokens remain untouched even when they resemble terminology entries?\n- For an unlisted term, does a Chinese target use an established Chinese rendering or preserve the source term as pending when no reliable rendering is known, and does an English target use the established English technical term or preserve only an ambiguous source term with the shortest necessary gloss and a pending notice?\n\n**Punctuation** (when target is Chinese)\n- Are punctuation, mixed-script spacing, quotation marks, Latin letters, and digits in their required forms?\n- Are there em dashes that make the sentence less clear and should be replaced, while natural em dashes remain intact?\n- Are list-item endings grammatically consistent, with none ending in commas?\n- Do RFC 2119 keywords preserve the source emphasis span and normative strength exactly?\n\nRecord actual corrections in ``, then output the corrected complete document in ``. If no correction or pending terminology notice is needed, write exactly `- 无修正` in `` and copy `` unchanged into ``. If `` contains only pending terminology notices, copy `` unchanged into ``.\n\n## Examples\n\nBelow are representative examples of common problems and their corrections. Follow the \"Good\" versions within the rule each example illustrates; examples do not override source context or higher-priority requirements.\n\n### Colloquial verb → Professional verb\n- Source: `The repo pins pnpm@11.7.0 in package.json`\n- Bad: `仓库在 package.json 中钉住 pnpm@11.7.0`\n- Good: `该仓库在 package.json 中固定使用 pnpm@11.7.0`\n\n### Run-on sentence → Natural phrasing with pause\n- Source: `Read docs/architecture.md before changing anything under packages/.`\n- Bad: `改动 packages/ 下的任何东西之前先读 docs/architecture.md。`\n- Good: `在修改 packages/ 目录下的任何内容之前,请先阅读 docs/architecture.md。`\n\n### Stiff passive voice → Active and natural\n- Source: `a green gate means the pair was confirmed consistent at these exact contents, not that the confirmation was sound.`\n- Bad: `门禁绿意味着这对文档曾在当前内容上被确认一致,不意味着这次确认本身是对的。`\n- Good: `门禁通过意味着这组文档在当前内容上的一致性得到了确认,不代表确认本身正确可靠。`\n\n### Invented word → Natural expression\n- Source: `A sidecar record of both blob hashes makes consistency checkable`\n- Bad: `旁挂记录两侧 blob hash,使一致性可检查`\n- Good: `伴随记录保存两侧 blob hash,使一致性可检查`\n\n### Em-dash → Colon/period\n- Source: `FIXME — an issue that should block a new release. A release should not ship with an open FIXME unless reviewers explicitly agree the change can be merged anyway.`\n- Bad: `FIXME——应当阻塞新版本发布的问题。除非评审者明确同意可以照常合入,发布不应带着未解决的 FIXME 出门。`\n- Good: `FIXME:应当阻塞新版本发布的问题。除非评审者明确同意该更改可以合并,否则发布版本不应包含未解决的 FIXME。`\n\n### Overly literal → Meaningful rendering\n- Source: `awkward phrasing is easier to notice when you read the translation without comparing it with the source`\n- Bad: `不把译文和原文比较时,尴尬的措辞更容易被注意`\n- Good: `不对照原文阅读译文时,更容易察觉别扭的表达`\n\n### Terminology — do not translate what should be kept in English\n- Source: `typed service seams, and explicit extension points`\n- Bad: `类型化的服务 seam(扩展点)与显式扩展点`\n- Good: `类型化的服务 seam 与显式扩展点`\n\n### Slang/jargon → Professional phrasing\n- Source: `The committed agent workflow lives in .agents/skills/dsh-translate-docs`\n- Bad: `进仓的 agent 工作流见 .agents/skills/dsh-translate-docs`\n- Good: `仓库内置的 agent 工作流见 .agents/skills/dsh-translate-docs`\n\n### \"For humans\" — translate the intent, not the word\n- Source: `For humans, start with the development guide`\n- Bad: `对于人工读者,请先从开发指南开始`(\"人工读者\"生硬)\n- Good: `面向开发者:请先阅读开发指南`(\"开发者\"自然,且中文里冒号在此处更自然)\n\n### Code block comments — NEVER translate\n- Source code block contains: `# full-screen TUI coding agent (needs DEEPSEEK_API_KEY)`\n- Bad: `# 全屏 TUI coding agent(需要 DEEPSEEK_API_KEY)`\n- Good: `# full-screen TUI coding agent (needs DEEPSEEK_API_KEY)` (keep exactly as-is, byte-for-byte)\n\n### Language switcher — flip direction\n- Source file (English) has: `English | [中文](README.zh.md)`\n- Bad (copying source unchanged): `English | [中文](README.zh.md)`\n- Good (flipped for Chinese file): `[English](README.md) | 中文`\n\n---\n\nNow translate the following document:" + "content": "# Translation Prompt\n\nYou are a senior technical translator specializing in LLM and agent development documentation. Your task is to translate the complete source document from English to Chinese, producing natural, professional technical prose.\n\nRead each complete semantic unit, understand it, and restate it as a native technical author would write it in the target language. Do not mechanically preserve source-language syntax. Then verify the translation against the source clause by clause: preserve every proposition and add none. Fluency never justifies losing or altering meaning, and completeness never justifies unnatural word-for-word prose.\n\n## Priority\n\nApply these authorities in order:\n\n1. Preserve the source meaning and the required document structure, protected content, and formatting.\n2. Follow the injected terminology table exactly.\n3. Use the injected whole-document gold pairs to calibrate target-language voice and phrasing.\n4. Apply the general writing guidance and illustrative examples in this prompt.\n\nA lower-priority rule may refine but never override a higher-priority requirement. Gold pairs calibrate voice; they are not a translation memory. No style preference, gold-pair phrasing, or embedded example may override source meaning, required structure, protected content, or the terminology table.\n\n## Quality Requirements\n\n### Structure and Format Preservation\n- Output a complete translated document that maintains the same document frame as the source: heading hierarchy and order, list kinds and item counts, ordered-list starts, table rows and columns, link order and semantic targets, and code blocks.\n- Paragraph boundaries may change within the same structural unit when the target language needs different semantic grouping. Do not merge or move content across headings, list items, table cells, or other independent structural units.\n- Keep each prose paragraph on one physical line. Use paragraph breaks, not hard-wrapped lines inside a paragraph.\n- Fenced code blocks must be byte-identical to the source, including info strings, whitespace, and ALL comments inside them. Do NOT translate or reformat any content inside code blocks. This is a hard rule with no exceptions.\n- Inline code spans must be kept verbatim. This includes commands, flags, paths, identifiers, API and event names, config keys, protocol values, version numbers, and other machine-readable tokens. Never translate or reformat them.\n- Every repository-relative document link must keep the source link's semantic target and exact query/fragment suffix. When the target belongs to the active bilingual corpus, English output uses its `.md` path and Chinese output uses its `.zh.md` path; a missing counterpart in that corpus is an error, while targets outside it keep the original path. External URLs, images, and pure in-page fragments stay unchanged. Translate link text.\n- Language switcher line: when an English source contains `English | [中文](source-filename.zh.md)`, write `[English](source-filename.md) | 中文`. When a Chinese source contains `[English](source-filename.md) | 中文`, write `English | [中文](source-filename.zh.md)`. Do NOT copy the source switcher unchanged. If the source has no switcher, do not invent a filename or switcher; the pipeline inserts the canonical target switcher after parsing ``.\n- Preserve emphasis marker types and the semantic spans they cover. Do not add, remove, move, or change bold and italic markers.\n\n### Faithfulness\n- Preserve every proposition in the source and add none. Every sentence, list item, note, FIXME, warning, example, caveat, prerequisite, and guarantee must have an equivalent in the translation. Count list items on both sides.\n- Preserve actors, objects, conditions, exceptions, negation, modality, causal relationships, and distinctions between concepts.\n- Preserve the exact strength and orientation of contracts. Completion and lifecycle conditions, failure behavior, directions and data flow, normal and exceptional result channels, ownership changes, and quantitative bounds must not be weakened, strengthened, reversed, or merged.\n- Translate ideas rather than source-language idioms, but never use fluency as a reason to omit or alter meaning.\n\n### Tone and Style\n- The translation must read as if originally written in the target language by a native technical author. If an expression sounds like a word-for-word rendering from the source language, rephrase it.\n- Write in a professional, formal tone appropriate for developer documentation. Never use colloquial or casual expressions.\n- Name an actor when the target language would otherwise obscure an actor that the source states or unambiguously implies. Never invent responsibility merely to avoid a passive construction.\n- Prefer established target-language engineering terms over literal renderings. Replace metaphors with direct descriptions that preserve the source meaning.\n- Use polite imperative forms where the text instructs the reader to do something. In Chinese, address the reader as `你`, not `您`.\n- Keep the author's register: concise stays concise, detailed stays detailed.\n\n### Sentence Structure\n- Break long sentences where the target language needs a pause. Avoid run-on sentences.\n- Use active voice when it improves clarity without changing or inventing the actor. Retain passive voice when the actor is unknown, irrelevant, or intentionally omitted.\n- Restructure source-language syntax into clear target-language syntax. Preserve the logical scope of conditions, concessions, negation, coordination, and modifiers.\n- Split or combine clauses when needed for readability, provided every source relationship remains explicit.\n- Translate meaning, not words. Do not invent words or expressions that a native technical author would not use.\n\n### Word Choice\n- Prefer precise, formal vocabulary over casual or colloquial alternatives.\n- When multiple synonyms exist, choose the one most commonly used in professional technical documentation of the target language.\n- Translate ordinary prose when an established target-language expression is clear. Preserve proper nouns, canonical product names, code identifiers, APIs, paths, package names, and terms that the terminology table requires to remain in the source language.\n- Use context to resolve polysemous words. A familiar word does not have one fixed rendering in every technical domain.\n- Avoid slang, internal jargon, or overly literal translations that would not be recognized by the general developer audience.\n- Do not use the same word to translate distinct source-language concepts when their distinction matters.\n- Avoid repeating the same ordinary verb in close proximity when a natural equivalent preserves the exact meaning. Never vary a terminology-table form, defined concept, or contract verb merely for stylistic variety.\n\n#### When translating into Chinese\n- When a number modifies a noun, include a natural Chinese classifier or measure word when Chinese grammar requires one. For example: \"three-role capability seam\" → \"包含三种角色的能力 seam\", not \"三角色 seam\". Do not add classifiers to code, identifiers, versions, units, or fixed names.\n\n### Punctuation\n\n#### When translating into Chinese\n- Use full-width Chinese punctuation in Chinese prose: `,。:;?!()「」`. Keep half-width punctuation inside code spans, numbers, and complete verbatim English text.\n- Prefer colons, periods, commas, or parentheses over em dashes when they make the sentence clearer or more natural. Keep an em dash when it is the clearest natural punctuation.\n- Use enumeration commas (、) between parallel Chinese items, not regular commas.\n- Keep list-item endings consistent with their grammar. Complete sentences may end with periods or other grammatically required punctuation; do not end list items with commas.\n- Put one half-width space between Chinese text and Latin words or numerals. Do not add a space next to full-width punctuation, and do not leave a meaningless half-width space between two Chinese characters.\n- Markdown emphasis markers do not create a word boundary. Determine spacing from the rendered adjacent characters: Chinese next to Chinese takes no space, while Chinese next to a Latin word or numeral takes one half-width space.\n- Use half-width digits and Latin letters, never full-width forms.\n- For RFC 2119 keywords (MUST, MUST NOT, SHOULD, MAY), translate to the corresponding Chinese term (必须、禁止、应当、可以), preserve the SOURCE emphasis span exactly, and do not weaken its normative strength: plain source stays plain (必须), italic source stays italic (*必须*), and bold source stays bold (**必须**).\n\n#### When translating into English\n- Use half-width English punctuation and standard English spacing. Preserve full-width punctuation only in verbatim Chinese text.\n- Convert enumeration commas (、) to English commas and Chinese prose quotation marks to English double quotes.\n- Convert Chinese topic-comment sentences and omitted-subject constructions into clear English subjects when the actor is stated or unambiguously implied. Do not invent an actor.\n- Use concise professional developer prose and established English technical terms. Do not transliterate Chinese engineering idioms literally.\n- Use the terminology table's English column exactly and do not carry Chinese first-occurrence glosses into English prose.\n\n## Terminology\n\nA terminology table is provided below. Follow it strictly:\n- Render every listed term exactly as specified.\n- When the target language is Chinese, use the \"中文\" column. On the document's first prose occurrence, write the \"首次出现\" value when one is specified; on later occurrences, write only the part before the parenthetical gloss.\n- When the target language is English, use the \"English\" column without a Chinese gloss; do not copy the \"中文\" or \"首次出现\" value into English prose.\n- If a term has already been glossed as part of a compound term, do not gloss it again when it appears alone later.\n- NEVER use translations listed in the \"不要译作\" column.\n- Code spans and other protected tokens remain verbatim even when their text resembles a listed term.\n- For an unlisted technical term, use an established target-language technical term when its meaning is unambiguous in context. For a Chinese target, use an established Chinese rendering from a major Chinese-language OSS or vendor source; if you cannot reliably determine such a rendering, preserve the source term and record `[Terminology: pending]` in `` with a tentative rendering for human review. For an English target, use the established English technical term; if the source term has no unambiguous established equivalent, preserve it with the shortest English gloss needed to make it intelligible and record `[Terminology: pending]` in ``. A tentative rendering may appear in `` but must not be silently adopted in `` or ``, and you must not invent or claim a specific external precedent. This rule applies to terminology only; for general prose, freely restructure and paraphrase for natural expression.\n\n# Terminology\n\n本表约定本仓库的中英术语统一译法。\n\n**通用规则:**\n- \"中文\"列为中文译文的正文默认用词。若该列为英文,则中文译文的正文中保留英文不翻译。\n- 首次出现按\"首次出现\"列书写(带括号注释);后续出现只写括号前的部分(可能为中文,也可能为英文),不出现括号内的注释。\n- \"不要译作\"列为严格禁止的译法。\n- 如果某术语已经作为另一个术语的组成部分被括注过(如 `agent loop(智能体循环)` 中已包含 `agent` 的括注),则该术语后续单独出现时无需再次括注。\n\n## 缩写类(中英文文本中均使用缩写)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| ACP | ACP | ACP(Agent Client Protocol) | | |\n| AI | AI | AI(人工智能) | | |\n| API | API | | | |\n| CI | CI | | | |\n| CLI | CLI | CLI(命令行界面) | | |\n| e2e | e2e | | | |\n| HMR | HMR | HMR(热模块替换) | | |\n| JSON Schema | JSON Schema | | | |\n| JSONL | JSONL | | | |\n| LLM | LLM | LLM(大语言模型) | | |\n| MCP | MCP | | | |\n| PR | PR | PR(Pull Request) | | |\n| RAG | RAG | RAG(检索增强生成) | | |\n| SDK | SDK | | | 只指受支持的 Python 与 TypeScript SDK 所使用的 JSON-RPC 客户端/服务器协议;DeepSeek Harness 项目本身不是 SDK |\n| SSE | SSE | SSE(Server-Sent Events) | | |\n\n## 英文类(中英文文本中均使用英文)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| agent | agent | agent(智能体) | | |\n| Agent Note | Agent Note | | 智能体注记、智能体笔记 | 仓库定义的文档类型,涵盖提案、已实现决策和被否决提案;中文对侧 H1 保持固定前缀 `# Agent Note: `,标题中不加术语括注 |\n| agent harness | agent harness | agent harness(智能体框架) | | agent 组合词(agent harness/workflow/loop/skill 等)整体保留英文;未括注过 agent 时首现按对应组合词或 agent 行处理 |\n| agent loop | agent loop | agent loop(智能体循环) | | |\n| blob hash | blob hash | | | `git hash-object` 的结果 |\n| coding agent | coding agent | coding agent(编程智能体) | | agent 组合词,正文保留英文 |\n| Cordis | Cordis | | | |\n| dispose | dispose | dispose(资源释放) | | |\n| doc-sync | doc-sync | doc-sync(文档同步门禁) | | |\n| fiber | fiber | | | |\n| fixture | fixture | fixture(测试前置数据) | | |\n| fork | fork | | | |\n| Function Calling | Function Calling | Function Calling(函数调用) | | |\n| harness | harness | | | |\n| harness engineering | harness engineering | | | |\n| KV Cache | KV Cache | | | 专有技术名称,保持大小写与空格 |\n| lint | lint | | | |\n| mock | mock | | | 保留英文;指测试替身 |\n| loader | loader | | | |\n| manifest | manifest | manifest(元数据清单) | | |\n| monorepo | monorepo | | | |\n| Round | Round | | 回合、目标回合、Ralph 回合 | 外层策略使用 Round 时,领域层级为 Session > Round > Turn(轮次) > Step(步骤);Round 是可选的外层策略迭代,并非每个会话轮次都具有的通用层级。Goal Round 与 Ralph Round 均保留英文。一个 Round 承载一个轮次,步骤隶属于该轮次;明确的零步骤轮次仍保持原义。 |\n| schema | schema | | | |\n| schema DSL | schema DSL | | | |\n| seam | seam | | 接缝 | 一个可替换能力的整体,包含 Service Definition / Service Provider / Consumer 三种角色;角色需要独立演化时才拆包,也可由同一包承担多个角色。以 `packages/shell` 为范例;Service Definition 是 Cordis `Service`(抽象类或具体 registry 服务),不是 TypeScript interface。任何单一角色、普通边界或扩展点都不能称为 seam。本仓库正文保留英文;与 `extension point` 是不同概念 |\n| Service Provider | Service Provider | | Service provider | 能力 seam 的命名角色;单数固定写作 Service Provider,复数写作 Service Providers。泛指提供服务的 provider 不适用本词条 |\n| skill | skill | skill(技能) | | |\n| slot | slot | | 坑位、孔位 | 客户端架构中的具名可注册位置,保留英文 |\n| spill | spill | | | 工具输出超限落盘机制;组合词写 `spill 文件`、`spill 路径` |\n| spawn | spawn | | | |\n| steering | steering | steering(中途引导) | | |\n| job id | job id | | 任务 id | 保留英文 |\n| subagent | subagent | | | 文档正文保留英文;中文 UI 中译作「子智能体」,不使用「子代理」 |\n| transcript | transcript | transcript(文本记录) | | 指会话渲染给用户或编辑器的完整文本,区别于事件日志 |\n| Typert | Typert | | TypeRT、typeRT、Type RT | DeepSeek Harness 类型图、生成器、loader 与运行时 registry 的产品拼写 |\n| waterfall | waterfall | waterfall(瀑布式事件) | | |\n| wheel | wheel 包 | | | Python 打包格式 |\n| worktree | worktree | | | git 工作区概念 |\n| Zstandard | Zstandard | | | RFC 8878 compression format; `zstd` remains a code value. |\n\n## 双语类(中英文文本各自使用中英文)\n\n| English | 中文 | 首次出现 | 不要译作 | 备注 |\n|---|---|---|---|---|\n| adapter | 适配器 | | | |\n| adapter contract | 适配器约定 | 适配器约定(adapter contract) | | |\n| append-only | 仅追加 | | | |\n| artifact | 产物 | | 制品 | |\n| backend | 后端 | | | |\n| binder | 绑定器 | | | 命名角色:把已声明接口绑定到调用方 context 或生命周期 |\n| config | 配置 | | | 命名角色:一个已解析配置值或边界严格的配置记录 |\n| controller | 控制器 | | | 命名角色:接受意图并改变一项既有领域或展示状态 |\n| directory | 目录 | | | 命名角色:暴露供发现或选择的条目及元数据 |\n| engine | 引擎 | | | 命名角色:实现领域算法或有状态执行模型 |\n| gateway | 网关 | | | 命名角色:适配进程、网络、RPC 或 API 边界 |\n| handle | 句柄 | | | 命名角色:引用并控制或观察一个实时资源 |\n| policy | 策略 | | | 命名角色:决定允许、选择、限制或观察什么 |\n| presenter | 展示转换器 | | | 命名角色:把领域值纯转换为渲染意图 |\n| resolver | 解析器 | | | 命名角色:根据输入计算或定位一个答案 |\n| store | 存储 | | | 命名角色:拥有一组数据并主要提供数据操作 |\n| background job | 后台任务 | | | |\n| block | 块 | | | |\n| build target | 构建目标 | | | |\n| cancel | 取消 | | | |\n| canary test | canary 测试 | | 金丝雀测试 | 本仓库保留 `canary` |\n| capability | 能力 | | | 必须与 `feature` → `功能` 区分 |\n| capability seam | 能力 seam | | 功能 seam、能力接缝 | 本仓库 Service Definition、Service Provider 与 Consumer 三种角色组成完整可替换能力的命名架构概念;普通 `seam` 仍按其词条处理 |\n| feature | 功能 | | 能力 | SDK 产品与工程模型中的可管理产品单元 |\n| feature option | 功能选项 | | variant | 一项 SDK 功能内有限、可选择的实现或配置 |\n| checkpoint | 检查点 | | | |\n| chunk | 分片 | | | |\n| compaction | 压缩 | 压缩(compaction) | | |\n| companion tool | 配套工具 | | | |\n| composition bundle | 组合包 | | | 只约束应用或插件的组合语境,不约束所有 `bundle` |\n| Cordis plugin config | Cordis 插件配置 | | | Cordis 插件公开的 `Config` 对象或配置结构 |\n| config key | 配置键 | | | Cordis 插件配置中的单个字段 |\n| consumer | 消费方 | | 消费者 | |\n| content block | 内容块 | | | |\n| Cookbook | 实操手册 | | | 文档标题用语 |\n| context | 上下文 | | | |\n| counterpart | 对侧文件 | | 对应物、配对物 | 双语配对语境;泛指\"另一侧\"时可写「另一侧」 |\n| configurable-provider directory | 可配置提供方目录 | | | llm seam 中 `registerConfigurableProviders()` 维护的目录;沿用 Service Catalog →「服务目录」先例 |\n| context compaction | 上下文压缩 | 上下文压缩(context compaction) | | |\n| contract | 约定 | | | 如:`pairing contract` →`配对约定` |\n| Cordis config entry | Cordis 配置项 | | | 指 `cordis.yml` 插件列表中的一项;插件实现本身写`Cordis 插件` |\n| Cordis plugin | Cordis 插件 | | | Cordis 加载的插件实现,不指 `cordis.yml` 中的一项配置 |\n| crash recovery | 崩溃恢复 | | | |\n| deploy root | 部署根目录 | | | |\n| dormant | 休眠 | | 睡眠、蛰伏 | 指已声明可配置但当前未注册路由的提供方 |\n| durability | 持久性 | | | |\n| feature requirement | 功能依赖 | | | 功能或功能选项通过 `requires` 声明的关系 |\n| event | 事件 | | | |\n| event log | 事件日志 | | | |\n| event stream | 事件流 | | | |\n| event-sourced | 事件溯源 | | | 沿用 DDD 社区通行译法 |\n| Executive summary | 摘要 | | | 事故复盘标题用语 |\n| executor | 执行器 | | | |\n| expected output | 预期输出 | | 金标 | 指 snapshot 比较产物;翻译语料的人工校准样例不在此列 |\n| extension | 扩展 | | | |\n| extension point | 扩展点 | | | 注意与 `seam` 区分 |\n| fail-fast | 快速失败 | | | |\n| fenced code block | 围栏代码块 | | | 沿用 MDN 中文翻译 |\n| fingerprint | 指纹 | | | 通用内容指纹;双语配对机制使用 sidecar record 按分节记录两侧 hash |\n| finish reason | 结束原因 | | | |\n| fold | 折叠区 | | | 配置界面语境:默认收起的字段分区(collapsed →「收起」)|\n| foreground run | 前台运行 | | | |\n| freshness | 新鲜度 | | | 沿用 MDN 中文翻译;在本项目中指译文相对源文的同步状态 |\n| hook | 钩子 | | | |\n| implementation | 实现 | | | |\n| inference | 推理 | 推理(inference) | | 需要和 `reasoning` 区分时保留英文括注 |\n| info string | 信息字符串 | | | 沿用 CommonMark 中文翻译;指代码围栏 ``` 之后的语言标注 |\n| injection | 注入 | | | |\n| integration | 集成 | | | |\n| interface | 接口 | | | |\n| language switcher | 语言切换行 | | | i18n 配对机制用语:双语配对文件顶部的互链行 |\n| merge | 合并 | | | |\n| message | 消息 | | | |\n| mod | 模组 | | | |\n| model provider | 模型提供商 | | | 指为模型提供 API 的厂商或网关:模型设置页文案、用户指南 providers 与 `ui-settings-models` README 用「提供商」;llm seam 的开发者文档(可配置提供方目录、dormant 等)沿用「提供方」 |\n| model selection | 模型选择 | | 模型目标 | 面向 Agent 的提供方、模型和可选推理强度选择。 |\n| module | 模块 | | | |\n| non-escalation | 非升权 | | 非升级、不可升级 | 仅用于安全与权限语境,指主体不得获得超出既有授权的权限;普通升级不适用此行 |\n| npm dependency | NPM 依赖 | | | `package.json` 中的包关系;`dependencies`、`devDependencies` 等字段保持原样 |\n| opt-out ratio | opt-out 比例 | | 退出检查比例 | |\n| orphan | 遗留 | | 孤儿、孤立 | 指英文源已不存在的 `.zh.md`(如「遗留译文」);进程语境按 OS 惯用语译「孤儿进程」 |\n| orphan branch | 孤立分支 | | 孤儿分支 | 沿用 git 官方中文翻译 |\n| package | 包 | | | 指 npm 包(`@deepseek-ai/dsh-*`);`package.json` 等代码标识保持原样 |\n| pairing | 配对 | | | |\n| parent-subset grants | 父级子集授权 | | 父集合授权 | 指授权范围仅限于父级所持授权的子集 |\n| peer dependency | 对等依赖 | 对等依赖(peer dependency) | | |\n| permission | 权限 | | | |\n| persistence | 持久化 | | | |\n| pipeline | 流水线 | | | |\n| plugin | 插件 | | | |\n| postmortem | 事故复盘 | 事故复盘(postmortem) | 事后分析、事故记录 | 事故记录与分析文档;目录或路径中的 `postmortem` 保持代码形式 |\n| prompt | 提示词 | | | |\n| provider | 提供方 | | | 泛指的提供方(搜索、检查、settings 文件、subagent 等);模型厂商或网关见 model provider 行 |\n| provider-neutral | 提供方无关 | | 提供方中立 | |\n| quality gate | 质量门禁 | | | |\n| quiescence | 完全停稳 | | 静默、静止状态 | 指生命周期工作全部结算后的状态 |\n| reasoning | 推理 | 推理(reasoning) | | 需要和 `inference` 区分时保留英文括注 |\n| reasoning_content | 思考内容 | | | |\n| registry | 注册表 | | | |\n| replay | 回放 | | | |\n| resume | 恢复 | | | |\n| runtime | 运行时 | | | |\n| same-world subprocess | 与宿主共享文件系统和内核的子进程 | | 同世界子进程 | |\n| sandbox | 沙箱 | | | |\n| service | 服务 | | | |\n| serving interface | 对外服务接口 | | | |\n| session | 会话 | | | |\n| session event | 会话事件 | | | |\n| setup card | 设置卡片 | | | 首次运行时代替行卡直接展开的配置卡 |\n| sidecar file | 伴随文件 | | | 指与文档同目录的普通伴随文件 |\n| sidecar record | 伴随记录 | | 旁挂记录 | 指与文档同目录的伴随记录文件 |\n| smoke test | 冒烟测试 | | | |\n| snapshot | 快照 | | | |\n| source of truth | 真源 | | 事实来源、唯一来源 | |\n| spine | 主干 | | | |\n| stale | 陈旧 | | 过期 | 与 `fresh`(`新鲜`)成对;门禁输出中保留英文 `stale` 不翻译;`expired` 才译为`过期` |\n| step | 步骤 | | | |\n| stream | 流 | | | |\n| structural signature | 结构签名 | | | i18n 配对机制用语:门禁比对两侧文件时提取的有序结构序列(标题层级、代码块、列表等) |\n| Summary | 概述 | | | 事故复盘标题用语 |\n| system prompt | 系统提示词 | | | |\n| taxonomy | 分类体系 | | | |\n| token usage | token 用量 | | | |\n| tool | 工具 | | | |\n| tool call | 工具调用 | | | |\n| tool result | 工具结果 | | | |\n| tool schema | 工具 schema | | | |\n| toolkit | 工具包 | | | |\n| turn | 轮次 | | | |\n| VFS | VFS | 虚拟文件系统(VFS) | | |\n| typecheck | 类型检查 | | | |\n| vocabulary | 词汇 | | | |\n| wire format | 协议格式 | 协议格式(wire format) | | |\n| workflow | 工作流 | | | |\n| wrapper | 包装层 | | | 软件层或 SDK 包装层 |\n| wrapper script | 包装脚本 | | | 可执行脚本包装层 |\n\n\n## Output Format\n\nReturn exactly three raw XML sections in the order shown below. Do not wrap the response in a Markdown code fence and do not add analysis or text before, between, or after the sections. The fence below only displays the required format; do not reproduce the fence.\n\nThe outer section tags are framing. If Markdown inside any section body contains a line consisting only of ``, ``, ``, ``, ``, or ``, prefix that line with `\\`. If the original line already has one or more backslashes immediately before the tag, add one more. The parser removes exactly one framing escape; tags mentioned inline need no escaping.\n\n```xml\n\n(First pass: the complete translation, written as natural target-language technical prose)\n\n\n\n(Second pass: actual corrections only, one correction per line with a category tag, e.g.)\n- [Tone] \"旁挂记录\" → \"伴随记录\"(生造词)\n- [Sentence] 第 3 段补充逗号断句\n- [Punctuation] 两处破折号替换为冒号\n- [Terminology: pending] source term → tentative rendering\n- 无修正\n\n\n\n(Complete final translation after corrections)\n\n```\n\n## Self-Review Instructions\n\nAfter writing ``, verify it in two directions. First re-read it in the target language only without comparing it with the source; this makes awkward phrasing easier to notice. Then compare it against the source clause by clause for completeness and exact meaning. Resolve doubts before writing ``; do not include reasoning transcripts, checks that passed, tentative suggestions, retractions, or no-op corrections.\n\n**Structure**\n- Are the heading hierarchy and order, list kind and item count, ordered-list start, table dimensions, and code block content identical to the source?\n- Are ALL comments and info strings inside code blocks left untranslated and byte-identical to the source?\n- Are inline code spans and machine-readable tokens verbatim?\n- Is an existing language switcher correctly flipped, and is no switcher or filename invented when the source lacks one?\n- Do links preserve their semantic targets and exact query/fragment suffixes while using target-locale paths, and are emphasis spans preserved?\n- Does spacing across emphasis boundaries follow the same Chinese/Latin/numeral rule as ordinary prose?\n- Are wrapper-tag lines inside section bodies escaped with one additional backslash?\n\n**Faithfulness**\n- Clause by clause, is anything added, dropped, weakened, strengthened, reversed, merged, or re-bounded? Are list item counts identical on both sides?\n- Do actors, objects, conditions, exceptions, negation, modality, causal relationships, guarantees, contract directions, result channels, ownership changes, and quantities survive exactly?\n\n**Tone & Style**\n- Does every sentence read as if originally written by a native technical author?\n- Is there any colloquial, casual, overly informal, promotional, or metaphorical phrasing?\n- Are actors explicit where the target language needs them, without inventing responsibility?\n\n**Sentence Structure**\n- Are there run-on sentences that need breaking?\n- Are there stiff passive constructions that can safely become active, or active constructions that invent an actor?\n- Are conditions, concessions, negation, coordination, and modifiers scoped clearly?\n\n**Word Choice**\n- Are there overly literal translations that sound unnatural?\n- Are ordinary prose words left untranslated despite an established target-language expression?\n- Does each polysemous word fit its local context?\n- Is the same target-language word used for distinct source concepts, or is a defined term varied merely to avoid repetition?\n- Is any slang or internal jargon present?\n\n**Terminology**\n- For a Chinese target, are first-occurrence glosses correctly applied to the true first prose occurrence, neither missing nor repeated? For an English target, are Chinese glosses absent?\n- Are any \"不要译作\" forbidden translations present?\n- Do protected tokens remain untouched even when they resemble terminology entries?\n- For an unlisted term, does a Chinese target use an established Chinese rendering or preserve the source term as pending when no reliable rendering is known, and does an English target use the established English technical term or preserve only an ambiguous source term with the shortest necessary gloss and a pending notice?\n\n**Punctuation** (when target is Chinese)\n- Are punctuation, mixed-script spacing, quotation marks, Latin letters, and digits in their required forms?\n- Are there em dashes that make the sentence less clear and should be replaced, while natural em dashes remain intact?\n- Are list-item endings grammatically consistent, with none ending in commas?\n- Do RFC 2119 keywords preserve the source emphasis span and normative strength exactly?\n\nRecord actual corrections in ``, then output the corrected complete document in ``. If no correction or pending terminology notice is needed, write exactly `- 无修正` in `` and copy `` unchanged into ``. If `` contains only pending terminology notices, copy `` unchanged into ``.\n\n## Examples\n\nBelow are representative examples of common problems and their corrections. Follow the \"Good\" versions within the rule each example illustrates; examples do not override source context or higher-priority requirements.\n\n### Colloquial verb → Professional verb\n- Source: `The repo pins pnpm@11.7.0 in package.json`\n- Bad: `仓库在 package.json 中钉住 pnpm@11.7.0`\n- Good: `该仓库在 package.json 中固定使用 pnpm@11.7.0`\n\n### Run-on sentence → Natural phrasing with pause\n- Source: `Read docs/architecture.md before changing anything under packages/.`\n- Bad: `改动 packages/ 下的任何东西之前先读 docs/architecture.md。`\n- Good: `在修改 packages/ 目录下的任何内容之前,请先阅读 docs/architecture.md。`\n\n### Stiff passive voice → Active and natural\n- Source: `a green gate means the pair was confirmed consistent at these exact contents, not that the confirmation was sound.`\n- Bad: `门禁绿意味着这对文档曾在当前内容上被确认一致,不意味着这次确认本身是对的。`\n- Good: `门禁通过意味着这组文档在当前内容上的一致性得到了确认,不代表确认本身正确可靠。`\n\n### Invented word → Natural expression\n- Source: `A sidecar record of both blob hashes makes consistency checkable`\n- Bad: `旁挂记录两侧 blob hash,使一致性可检查`\n- Good: `伴随记录保存两侧 blob hash,使一致性可检查`\n\n### Em-dash → Colon/period\n- Source: `FIXME — an issue that should block a new release. A release should not ship with an open FIXME unless reviewers explicitly agree the change can be merged anyway.`\n- Bad: `FIXME——应当阻塞新版本发布的问题。除非评审者明确同意可以照常合入,发布不应带着未解决的 FIXME 出门。`\n- Good: `FIXME:应当阻塞新版本发布的问题。除非评审者明确同意该更改可以合并,否则发布版本不应包含未解决的 FIXME。`\n\n### Overly literal → Meaningful rendering\n- Source: `awkward phrasing is easier to notice when you read the translation without comparing it with the source`\n- Bad: `不把译文和原文比较时,尴尬的措辞更容易被注意`\n- Good: `不对照原文阅读译文时,更容易察觉别扭的表达`\n\n### Terminology — do not translate what should be kept in English\n- Source: `typed service seams, and explicit extension points`\n- Bad: `类型化的服务 seam(扩展点)与显式扩展点`\n- Good: `类型化的服务 seam 与显式扩展点`\n\n### Slang/jargon → Professional phrasing\n- Source: `The committed agent workflow lives in .agents/skills/dsh-translate-docs`\n- Bad: `进仓的 agent 工作流见 .agents/skills/dsh-translate-docs`\n- Good: `仓库内置的 agent 工作流见 .agents/skills/dsh-translate-docs`\n\n### \"For humans\" — translate the intent, not the word\n- Source: `For humans, start with the development guide`\n- Bad: `对于人工读者,请先从开发指南开始`(\"人工读者\"生硬)\n- Good: `面向开发者:请先阅读开发指南`(\"开发者\"自然,且中文里冒号在此处更自然)\n\n### Code block comments — NEVER translate\n- Source code block contains: `# full-screen TUI coding agent (needs DEEPSEEK_API_KEY)`\n- Bad: `# 全屏 TUI coding agent(需要 DEEPSEEK_API_KEY)`\n- Good: `# full-screen TUI coding agent (needs DEEPSEEK_API_KEY)` (keep exactly as-is, byte-for-byte)\n\n### Language switcher — flip direction\n- Source file (English) has: `English | [中文](README.zh.md)`\n- Bad (copying source unchanged): `English | [中文](README.zh.md)`\n- Good (flipped for Chinese file): `[English](README.md) | 中文`\n\n---\n\nNow translate the following document:" }, { "role": "user", diff --git a/scripts/translation-pairing-git.ts b/scripts/translation-pairing-git.ts index 041a0bdb00..c1cf06871e 100644 --- a/scripts/translation-pairing-git.ts +++ b/scripts/translation-pairing-git.ts @@ -1,20 +1,6 @@ -/** Git-blob operations owned by the bilingual pairing workflow. */ +/** Git index reads owned by the bilingual pairing gate. */ import { spawnSync } from 'node:child_process' -import { createHash } from 'node:crypto' - -const SNAPSHOT_REF_PREFIX = 'refs/dsh/translation-pairing/snapshots' - -/** Maximum buffered stdout or stderr for repository-owned Git subprocesses. */ -export const GIT_COMMAND_MAX_BUFFER = 1 << 26 - -/** Full SHA-1 Git blob hash (the 40-hex format used by pairing records). */ -export function gitBlobHash(content: Buffer): string { - const hash = createHash('sha1') - hash.update(`blob ${content.byteLength}\0`) - hash.update(content) - return hash.digest('hex') -} /** * Run one Git subprocess and return its exact stdout bytes. @@ -22,15 +8,11 @@ export function gitBlobHash(content: Buffer): string { * @param root - Repository root used as Git's working directory. * @param args - Arguments following the `git` executable. * @param operation - Human-readable operation for failure diagnostics. - * @param input - Optional stdin bytes. * @returns Exact stdout bytes. * @throws Error when Git cannot start or exits unsuccessfully. */ -export function runGit(root: string, args: string[], operation: string, input?: Buffer): Buffer { - const result = spawnSync('git', ['-C', root, ...args], { - input, - maxBuffer: GIT_COMMAND_MAX_BUFFER, - }) +function runGit(root: string, args: string[], operation: string): Buffer { + const result = spawnSync('git', ['-C', root, ...args], { maxBuffer: 1 << 26 }) if (result.error) { throw new Error(`${operation} failed: ${result.error.message}`, { cause: result.error }) } @@ -40,12 +22,6 @@ export function runGit(root: string, args: string[], operation: string, input?: return result.stdout } -/** One regular stage-zero Git index entry and its exact blob bytes. */ -export interface GitIndexBlob { - objectId: string - content: Buffer -} - /** Every stage-zero path currently present in the Git index. */ export function gitIndexPaths(root: string): Set { const paths = new Set() @@ -61,38 +37,15 @@ export function gitIndexPaths(root: string): Set { return paths } -/** - * Paths visible to a custom merge driver from the current index plus every - * merge head Git advertises through `GITHEAD_` environment entries. - * - * Git invokes custom drivers before it writes clean additions from the other - * heads into stage zero. The explicit post-conflict resolver has no GITHEAD - * entries and therefore uses the already-merged index alone. - */ -export function gitMergeInputPaths(root: string, environment: NodeJS.ProcessEnv = process.env): Set { - const paths = gitIndexPaths(root) - const heads = Object.keys(environment) - .flatMap(key => /^GITHEAD_([0-9a-f]{40})$/.exec(key)?.[1] ?? []) - .sort() - for (const head of heads) { - const files = runGit(root, ['ls-tree', '-r', '--name-only', '-z', head], `listing merge-head ${head} paths`) - .toString('utf8') - .split('\0') - .filter(Boolean) - for (const file of files) paths.add(file) - } - return paths -} - /** * Read one path from the Git index without consulting working-tree bytes. * * @param root - Repository root. * @param path - Repository-relative path. - * @returns The stage-zero blob, or `undefined` when the path is absent. + * @returns The stage-zero blob bytes, or `undefined` when the path is absent. * @throws Error when the path is unmerged or its index entries are not a valid merge state. */ -export function readGitIndexBlob(root: string, path: string): GitIndexBlob | undefined { +export function readGitIndexBlob(root: string, path: string): Buffer | undefined { const output = runGit( root, ['ls-files', '--stage', '-z', '--', path], @@ -103,30 +56,5 @@ export function readGitIndexBlob(root: string, path: string): GitIndexBlob | und if (entries.length !== 1) throw new Error(`${path} does not have exactly one resolved index entry`) const match = /^(?:\d+) ([0-9a-f]+) 0\t[\s\S]+$/.exec(entries[0] ?? '') if (!match?.[1]) throw new Error(`${path} remains unmerged or has an invalid index entry`) - return { - objectId: match[1], - content: runGit(root, ['cat-file', 'blob', match[1]], `reading staged ${path}`), - } -} - -/** - * Persist exact working-tree bytes so a pairing record can later recover them - * with `git cat-file`, even when they have never appeared in the index or a - * commit. The returned object ID is checked against the pairing format's own - * content hash before the caller writes a sidecar. - */ -export function storeGitBlob(root: string, content: Buffer): string { - const expected = gitBlobHash(content) - const stored = runGit(root, ['hash-object', '-w', '--stdin'], 'git hash-object -w --stdin', content) - .toString('utf8') - .trim() - if (stored !== expected) { - throw new Error(`git hash-object -w --stdin returned unexpected object ID ${JSON.stringify(stored)}; expected ${expected}`) - } - runGit( - root, - ['update-ref', `${SNAPSHOT_REF_PREFIX}/${stored}`, stored], - 'git update-ref for translation snapshot', - ) - return stored + return runGit(root, ['cat-file', 'blob', match[1]], `reading staged ${path}`) } diff --git a/scripts/translation-pairing-merge.spec.ts b/scripts/translation-pairing-merge.spec.ts deleted file mode 100644 index ed42841246..0000000000 --- a/scripts/translation-pairing-merge.spec.ts +++ /dev/null @@ -1,704 +0,0 @@ -/** Integration coverage for automatic and explicit pairing-record conflict resolution. */ - -import { execFileSync, spawnSync } from 'node:child_process' -import { - chmodSync, - mkdtempSync, - mkdirSync, - readFileSync, - rmSync, - symlinkSync, - writeFileSync, -} from 'node:fs' -import { tmpdir } from 'node:os' -import { delimiter, dirname, join } from 'node:path' -import { fileURLToPath } from 'node:url' -import { afterEach, describe, expect, it } from 'vitest' -import { gitBlobHash, storeGitBlob } from './translation-pairing-git.ts' -import { - mergeTranslationPairingRecords as mergeTranslationPairingRecordsWithScope, - resolveTranslationPairingConflicts as resolveTranslationPairingConflictsWithScope, -} from './translation-pairing-merge.ts' -import { - renderTranslationPairingRecord, - translationPairPaths, -} from './translation-pairing-record.ts' -import { removeFixtureSafely } from './test-fixture-cleanup.ts' - -const driver = fileURLToPath(new URL('./merge-translation-pairing.ts', import.meta.url)) -const driverLauncher = fileURLToPath(new URL('./merge-translation-pairing-driver.sh', import.meta.url)) -const workspaceRoot = fileURLToPath(new URL('../', import.meta.url)) -const tsxLoader = import.meta.resolve('tsx/esm') -const fixtures: string[] = [] - -interface Fixture { - env: NodeJS.ProcessEnv - root: string -} - -function mergeTranslationPairingRecords( - root: string, - metaPath: string, - ancestorRecord: string, - currentRecord: string, - otherRecord: string, -) { - return mergeTranslationPairingRecordsWithScope( - root, - metaPath, - ancestorRecord, - currentRecord, - otherRecord, - () => true, - ) -} - -function resolveTranslationPairingConflicts(root: string): string[] { - return resolveTranslationPairingConflictsWithScope(root, () => true) -} - -afterEach(() => { - for (const fixture of fixtures.splice(0)) removeFixtureSafely(fixture) -}) - -function git(fixture: Fixture, args: string[]): string { - return execFileSync('git', ['-C', fixture.root, ...args], { - encoding: 'utf8', - env: fixture.env, - }).trim() -} - -function write(root: string, path: string, content: string): void { - const absolute = join(root, path) - mkdirSync(dirname(absolute), { recursive: true }) - writeFileSync(absolute, content) -} - -function shellQuote(value: string): string { - return `"${value.replace(/["\\$`]/g, '\\$&')}"` -} - -function installFixtureRuntime(root: string): void { - const linkType = process.platform === 'win32' ? 'junction' : 'dir' - symlinkSync( - join(workspaceRoot, 'node_modules'), - join(root, 'node_modules'), - linkType, - ) - symlinkSync(join(workspaceRoot, 'scripts'), join(root, 'scripts'), linkType) -} - -function startMergeWithFakeNode( - fixture: Fixture, - nodeScript = '#!/bin/sh\nexit 72\n', -) { - const fakeBin = join(fixture.root, 'fake-bin') - const fakeNode = join(fakeBin, 'node') - write(fixture.root, 'fake-bin/node', nodeScript) - chmodSync(fakeNode, 0o755) - git(fixture, [ - 'config', - 'merge.dsh-translation-pairing.driver', - `${shellQuote(driverLauncher)} %O %A %B %P`, - ]) - return spawnSync('git', ['-C', fixture.root, 'merge', '--no-commit', 'master'], { - encoding: 'utf8', - env: { - ...fixture.env, - PATH: `${fakeBin}${delimiter}${fixture.env.PATH ?? ''}`, - }, - }) -} - -function createFixture(attributes = true): Fixture { - const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-merge-')) - fixtures.push(root) - const env: NodeJS.ProcessEnv = { - ...process.env, - GIT_AUTHOR_EMAIL: 'pairing@example.test', - GIT_AUTHOR_NAME: 'Pairing Test', - GIT_COMMITTER_EMAIL: 'pairing@example.test', - GIT_COMMITTER_NAME: 'Pairing Test', - GIT_CONFIG_GLOBAL: join(root, 'global.gitconfig'), - GIT_CONFIG_NOSYSTEM: '1', - GIT_DEFAULT_HASH: 'sha1', - } - const fixture = { env, root } - execFileSync('git', ['init', '--quiet', '--initial-branch=master', root], { env }) - if (attributes) write(root, '.gitattributes', '*.i18n.yaml merge=dsh-translation-pairing\n') - return fixture -} - -function record(root: string, path: string, source: string, zh: string): string { - const paths = translationPairPaths(path) - write(root, paths.source, source) - write(root, paths.zh, zh) - const content = renderTranslationPairingRecord(paths, { - sourceHash: storeGitBlob(root, Buffer.from(source)), - zhHash: storeGitBlob(root, Buffer.from(zh)), - }) - write(root, paths.meta, content) - return content -} - -const baseSource = '# Guide\n\nEnglish | [中文](guide.zh.md)\n\nAlpha base.\n\nBeta base.\n' -const baseZh = '# 指南\n\n[English](guide.md) | 中文\n\n甲基础。\n\n乙基础。\n' -const currentSource = baseSource.replace('Alpha base.', 'Alpha current.') -const currentZh = baseZh.replace('甲基础。', '甲当前。') -const otherSource = baseSource.replace('Beta base.', 'Beta other.') -const otherZh = baseZh.replace('乙基础。', '乙对侧。') -const mergedSource = currentSource.replace('Beta base.', 'Beta other.') -const mergedZh = currentZh.replace('乙基础。', '乙对侧。') -const generatedBaseSource = '# Module graph\n\nAlpha base.\n\nBeta base.\n' -const generatedBaseZh = '# 模块图\n\n[English](module-graph.md) | 中文\n\n甲基础。\n\n乙基础。\n' -const generatedCurrentSource = generatedBaseSource.replace('Alpha base.', 'Alpha current.') -const generatedCurrentZh = generatedBaseZh.replace('甲基础。', '甲当前。') -const generatedOtherSource = generatedBaseSource.replace('Beta base.', 'Beta other.') -const generatedOtherZh = generatedBaseZh.replace('乙基础。', '乙对侧。') -const manualBaseSource = baseSource.replace('guide.zh.md', 'manual.zh.md') -const manualBaseZh = baseZh.replace('guide.md', 'manual.md') -const manualCurrentSource = manualBaseSource.replace('Alpha base.', 'Alpha current.') -const manualCurrentZh = manualBaseZh.replace('甲基础。', '甲当前。') -const manualOtherSource = manualBaseSource.replace('Alpha base.', 'Alpha other.') -const manualOtherZh = manualBaseZh.replace('甲基础。', '甲对侧。') - -function commitPair(fixture: Fixture, source: string, zh: string, message: string): string { - const sidecar = record(fixture.root, 'docs/guide.md', source, zh) - git(fixture, ['add', '.']) - git(fixture, ['commit', '-m', message]) - return sidecar -} - -function commitTextCleanPair(fixture: Fixture, source: string, zh: string, message: string): void { - const sidecar = record(fixture.root, 'docs/guide.md', source, zh) - write( - fixture.root, - 'docs/guide.i18n.yaml', - sidecar.replace('\nguide.zh.md:', '\n# Stable separator for independent line merges.\nguide.zh.md:'), - ) - git(fixture, ['add', '.']) - git(fixture, ['commit', '-m', message]) -} - -function createDivergedPair(fixture: Fixture): { ancestor: string; current: string; other: string } { - const ancestor = commitPair(fixture, baseSource, baseZh, 'base') - git(fixture, ['switch', '-c', 'current']) - const current = commitPair(fixture, currentSource, currentZh, 'current') - git(fixture, ['switch', 'master']) - const other = commitPair(fixture, otherSource, otherZh, 'other') - git(fixture, ['switch', 'current']) - return { ancestor, current, other } -} - -function createTextCleanDivergedPair(fixture: Fixture): void { - commitTextCleanPair(fixture, baseSource, baseZh, 'base') - git(fixture, ['switch', '-c', 'current']) - commitTextCleanPair(fixture, currentSource, baseZh, 'current source') - git(fixture, ['switch', 'master']) - commitTextCleanPair(fixture, baseSource, otherZh, 'other translation') - git(fixture, ['switch', 'current']) -} - -function startStoppedPairingMerge(fixture: Fixture): void { - createDivergedPair(fixture) - const merge = spawnSync('git', ['-C', fixture.root, 'merge', '--no-commit', 'master'], { - encoding: 'utf8', - env: fixture.env, - }) - expect(merge.status).toBe(1) - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('docs/guide.i18n.yaml') -} - -function commitMixedPairs( - fixture: Fixture, - guide: { source: string; zh: string }, - manual: { source: string; zh: string }, - message: string, -): void { - record(fixture.root, 'docs/guide.md', guide.source, guide.zh) - record(fixture.root, 'docs/manual.md', manual.source, manual.zh) - git(fixture, ['add', '.']) - git(fixture, ['commit', '-m', message]) -} - -function startMixedPairingMerge(fixture: Fixture): void { - commitMixedPairs( - fixture, - { source: baseSource, zh: baseZh }, - { source: manualBaseSource, zh: manualBaseZh }, - 'base', - ) - git(fixture, ['switch', '-c', 'current']) - commitMixedPairs( - fixture, - { source: currentSource, zh: currentZh }, - { source: manualCurrentSource, zh: manualCurrentZh }, - 'current', - ) - git(fixture, ['switch', 'master']) - commitMixedPairs( - fixture, - { source: otherSource, zh: otherZh }, - { source: manualOtherSource, zh: manualOtherZh }, - 'other', - ) - git(fixture, ['switch', 'current']) - const merge = spawnSync('git', ['-C', fixture.root, 'merge', '--no-commit', 'master'], { - encoding: 'utf8', - env: fixture.env, - }) - expect(merge.status).toBe(1) -} - -function expectMergedPair(fixture: Fixture): void { - expect(readFileSync(join(fixture.root, 'docs/guide.md'), 'utf8')).toBe(mergedSource) - expect(readFileSync(join(fixture.root, 'docs/guide.zh.md'), 'utf8')).toBe(mergedZh) - expect(readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8')).toBe( - renderTranslationPairingRecord(translationPairPaths('docs/guide.md'), { - sourceHash: gitBlobHash(Buffer.from(mergedSource)), - zhHash: gitBlobHash(Buffer.from(mergedZh)), - }), - ) -} - -// Every case in this suite drives real `git` invocations against a scratch -// repository, so it is bound by process creation rather than by its assertions. -// The value matches DSH_COVERAGE_TEST_TIMEOUT_MS, which the Windows coverage -// lane passes as --testTimeout: a describe value overrides that flag rather than -// yielding to it, so a smaller one here lowers what the lane grants every case -// in this file, none of which carries an allowance of its own. Measurements and -// the rejected alternatives are in -// .agents/notes/archived/testing/2026-08-27-translation-pairing-merge-budget.md. -describe('translation pairing merge composition', { timeout: 90_000 }, () => { - it('rejects a pairing-record path outside the repository', () => { - const fixture = createFixture(false) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - '../guide.i18n.yaml', - '', - '', - '', - )).toThrow('pairing record escapes the repository') - }) - - it('rejects a pairing record excluded from the active corpus', () => { - const fixture = createFixture(false) - - expect(() => mergeTranslationPairingRecordsWithScope( - fixture.root, - 'docs/guide.i18n.yaml', - '', - '', - '', - () => false, - )).toThrow('docs/guide.i18n.yaml is excluded from the active bilingual documentation corpus') - }) - - it('merges the owner blobs named by three valid records', () => { - const fixture = createFixture(false) - git(fixture, ['config', 'merge.default', 'text']) - const records = createDivergedPair(fixture) - - const result = mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - records.ancestor, - records.current, - records.other, - ) - - expect(result.sourceContent.toString('utf8')).toBe(mergedSource) - expect(result.zhContent.toString('utf8')).toBe(mergedZh) - expect(result.sourceHash).toBe(gitBlobHash(Buffer.from(mergedSource))) - expect(result.zhHash).toBe(gitBlobHash(Buffer.from(mergedZh))) - }) - - it('accepts locale-specific paths to the same paired document', () => { - const fixture = createFixture(false) - write(fixture.root, 'docs/reference.md', '# Overview\n') - write(fixture.root, 'docs/reference.zh.md', '# 概览\n') - git(fixture, ['add', 'docs/reference.md', 'docs/reference.zh.md']) - const source = baseSource.replace('Alpha base.', '[Reference](reference.md#overview)') - const zh = baseZh.replace('甲基础。', '[参考](reference.zh.md#overview)') - const ancestor = record(fixture.root, 'docs/guide.md', source, zh) - const current = record(fixture.root, 'docs/guide.md', source, zh) - const other = record(fixture.root, 'docs/guide.md', source, zh) - rmSync(join(fixture.root, 'docs/reference.md')) - rmSync(join(fixture.root, 'docs/reference.zh.md')) - - expect(mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - ancestor, - current, - other, - ).zhContent.toString('utf8')).toBe(zh) - }) - - it('rejects a clean merge whose Chinese link uses the English sibling', () => { - const fixture = createFixture(false) - write(fixture.root, 'docs/reference.md', '# Overview\n') - write(fixture.root, 'docs/reference.zh.md', '# 概览\n') - git(fixture, ['add', 'docs/reference.md', 'docs/reference.zh.md']) - const source = baseSource.replace('Alpha base.', '[Reference](reference.md)') - const zh = baseZh.replace('甲基础。', '[参考](reference.md)') - const ancestor = record(fixture.root, 'docs/guide.md', source, zh) - const current = record(fixture.root, 'docs/guide.md', source, zh) - const other = record(fixture.root, 'docs/guide.md', source, zh) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - ancestor, - current, - other, - )).toThrow('docs/guide.zh.md:5 clean merge uses "reference.md"; expected "reference.zh.md"') - }) - - it('merges a generated source without an English language switcher', () => { - const fixture = createFixture(false) - const ancestor = record(fixture.root, 'docs/module-graph.md', generatedBaseSource, generatedBaseZh) - const current = record(fixture.root, 'docs/module-graph.md', generatedCurrentSource, generatedCurrentZh) - const other = record(fixture.root, 'docs/module-graph.md', generatedOtherSource, generatedOtherZh) - - const result = mergeTranslationPairingRecords( - fixture.root, - 'docs/module-graph.i18n.yaml', - ancestor, - current, - other, - ) - - expect(result.sourceContent.toString('utf8')).toBe( - generatedCurrentSource.replace('Beta base.', 'Beta other.'), - ) - expect(result.zhContent.toString('utf8')).toBe(generatedCurrentZh.replace('乙基础。', '乙对侧。')) - }) - - it('rejects an authored source without an English language switcher', () => { - const fixture = createFixture(false) - const source = baseSource.replace('English | [中文](guide.zh.md)\n\n', '') - const ancestor = record(fixture.root, 'docs/guide.md', source, baseZh) - const current = record(fixture.root, 'docs/guide.md', source, baseZh) - const other = record(fixture.root, 'docs/guide.md', source, baseZh) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - ancestor, - current, - other, - )).toThrow('docs/guide.md clean merge lost its language-switcher link to guide.zh.md') - }) - - it('rejects generated Chinese content without its English backlink', () => { - const fixture = createFixture(false) - const zh = generatedBaseZh.replace('[English](module-graph.md) | 中文\n\n', '') - const ancestor = record(fixture.root, 'docs/module-graph.md', generatedBaseSource, zh) - const current = record(fixture.root, 'docs/module-graph.md', generatedBaseSource, zh) - const other = record(fixture.root, 'docs/module-graph.md', generatedBaseSource, zh) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/module-graph.i18n.yaml', - ancestor, - current, - other, - )).toThrow( - 'docs/module-graph.zh.md clean merge lost its language-switcher link to module-graph.md', - ) - }) - - it('leaves owner-content conflicts for a human', () => { - const fixture = createFixture(false) - const ancestor = record(fixture.root, 'docs/guide.md', baseSource, baseZh) - const current = record( - fixture.root, - 'docs/guide.md', - baseSource.replace('Alpha base.', 'Alpha current.'), - baseZh.replace('甲基础。', '甲当前。'), - ) - const other = record( - fixture.root, - 'docs/guide.md', - baseSource.replace('Alpha base.', 'Alpha other.'), - baseZh.replace('甲基础。', '甲对侧。'), - ) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - ancestor, - current, - other, - )).toThrow('docs/guide.md has content conflicts') - }) - - it('rejects structurally divergent clean owner merges', () => { - const fixture = createFixture(false) - const ancestor = record(fixture.root, 'docs/guide.md', baseSource, baseZh) - const current = record(fixture.root, 'docs/guide.md', currentSource, currentZh) - const other = record( - fixture.root, - 'docs/guide.md', - `${otherSource}\n## Extra\n`, - otherZh, - ) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - ancestor, - current, - other, - )).toThrow('clean merges diverge structurally') - }) - - it('refuses owners assigned to another merge strategy', () => { - const fixture = createFixture(false) - write(fixture.root, '.gitattributes', 'docs/*.md merge=custom-owner\n') - const records = createDivergedPair(fixture) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - records.ancestor, - records.current, - records.other, - )).toThrow('docs/guide.md uses merge=custom-owner') - }) - - it('refuses unspecified owners affected by merge.default', () => { - const fixture = createFixture(false) - git(fixture, ['config', 'merge.default', 'custom-owner']) - const records = createDivergedPair(fixture) - - expect(() => mergeTranslationPairingRecords( - fixture.root, - 'docs/guide.i18n.yaml', - records.ancestor, - records.current, - records.other, - )).toThrow('merge.default=custom-owner') - }) - - it('runs as Git\'s custom driver and commits a clean composed record', () => { - const fixture = createFixture() - createDivergedPair(fixture) - installFixtureRuntime(fixture.root) - git(fixture, [ - 'config', - 'merge.dsh-translation-pairing.driver', - 'scripts/merge-translation-pairing-driver.sh %O %A %B %P', - ]) - - git(fixture, ['merge', '--no-edit', 'master']) - - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('') - expectMergedPair(fixture) - }) - - it('sees a paired link target added by the other branch', () => { - const fixture = createFixture() - commitPair(fixture, baseSource, baseZh, 'base') - git(fixture, ['switch', '-c', 'current']) - commitPair(fixture, currentSource, currentZh, 'current guide') - git(fixture, ['switch', 'master']) - record( - fixture.root, - 'docs/guide.md', - baseSource.replace('Beta base.', '[Reference](reference.md#overview)'), - baseZh.replace('乙基础。', '[参考](reference.zh.md#overview)'), - ) - record( - fixture.root, - 'docs/reference.md', - '# Reference\n\nEnglish | [中文](reference.zh.md)\n\nOverview.\n', - '# 参考\n\n[English](reference.md) | 中文\n\n概览。\n', - ) - git(fixture, ['add', '.']) - git(fixture, ['commit', '-m', 'other guide and target']) - git(fixture, ['switch', 'current']) - installFixtureRuntime(fixture.root) - git(fixture, [ - 'config', - 'merge.dsh-translation-pairing.driver', - 'scripts/merge-translation-pairing-driver.sh %O %A %B %P', - ]) - - const merge = spawnSync('git', ['-C', fixture.root, 'merge', '--no-edit', 'master'], { - encoding: 'utf8', - env: fixture.env, - }) - - expect(merge.status, merge.stderr).toBe(0) - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('') - expect(readFileSync(join(fixture.root, 'docs/guide.md'), 'utf8')).toContain( - '[Reference](reference.md#overview)', - ) - expect(readFileSync(join(fixture.root, 'docs/guide.zh.md'), 'utf8')).toContain( - '[参考](reference.zh.md#overview)', - ) - }) - - it('leaves an ordinary recoverable conflict when the configured runtime is unavailable', () => { - const fixture = createFixture() - const records = createDivergedPair(fixture) - const headBefore = git(fixture, ['rev-parse', 'HEAD']) - - const result = startMergeWithFakeNode(fixture) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('runtime is unavailable; leaving an ordinary text conflict') - expect(git(fixture, ['rev-parse', 'HEAD'])).toBe(headBefore) - expect(git(fixture, ['rev-parse', '--verify', 'MERGE_HEAD'])).not.toBe('') - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('docs/guide.i18n.yaml') - expect(git(fixture, ['ls-files', '--unmerged', '--', 'docs/guide.i18n.yaml']).split('\n')).toHaveLength(3) - const conflicted = readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8') - expect(conflicted).toContain('<<<<<<< docs/guide.i18n.yaml:current') - for (const record of [records.current, records.other]) { - const dataLines = record.split('\n').filter(line => line !== '' && !line.startsWith('#')).join('\n') - expect(conflicted).toContain(dataLines) - } - - expect(resolveTranslationPairingConflicts(fixture.root)).toEqual(['docs/guide.i18n.yaml']) - expectMergedPair(fixture) - }) - - it('falls back before a broken driver entrypoint can replace the launcher', () => { - const fixture = createFixture() - createDivergedPair(fixture) - const result = startMergeWithFakeNode( - fixture, - '#!/bin/sh\nif [ "$3" = "--eval" ]; then exit 0; fi\nexit 72\n', - ) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('runtime is unavailable; leaving an ordinary text conflict') - expect(readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8')).toContain( - '<<<<<<< docs/guide.i18n.yaml:current', - ) - }) - - it('keeps a clean text fallback unresolved until the explicit resolver confirms it', () => { - const fixture = createFixture() - createTextCleanDivergedPair(fixture) - const result = startMergeWithFakeNode(fixture) - - expect(result.status).toBe(1) - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('docs/guide.i18n.yaml') - const canonicalRecord = renderTranslationPairingRecord(translationPairPaths('docs/guide.md'), { - sourceHash: gitBlobHash(Buffer.from(currentSource)), - zhHash: gitBlobHash(Buffer.from(otherZh)), - }) - expect(readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8')).toBe( - canonicalRecord.replace( - '\nguide.zh.md:', - '\n# Stable separator for independent line merges.\nguide.zh.md:', - ), - ) - - expect(resolveTranslationPairingConflicts(fixture.root)).toEqual(['docs/guide.i18n.yaml']) - expect(readFileSync(join(fixture.root, 'docs/guide.md'), 'utf8')).toBe(currentSource) - expect(readFileSync(join(fixture.root, 'docs/guide.zh.md'), 'utf8')).toBe(otherZh) - expect(readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8')).toBe(canonicalRecord) - }) - - it('leaves a staged merge when the pre-merge-commit hook rejects it', () => { - const fixture = createFixture() - createDivergedPair(fixture) - installFixtureRuntime(fixture.root) - git(fixture, [ - 'config', - 'merge.dsh-translation-pairing.driver', - 'scripts/merge-translation-pairing-driver.sh %O %A %B %P', - ]) - const hooks = join(fixture.root, 'hooks') - write( - fixture.root, - 'hooks/pre-merge-commit', - '#!/bin/sh\necho "fixture pre-merge-commit rejection" >&2\nexit 77\n', - ) - chmodSync(join(hooks, 'pre-merge-commit'), 0o755) - git(fixture, ['config', 'core.hooksPath', hooks]) - const headBefore = git(fixture, ['rev-parse', 'HEAD']) - - const result = spawnSync('git', ['-C', fixture.root, 'merge', '--no-edit', 'master'], { - encoding: 'utf8', - env: fixture.env, - }) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('fixture pre-merge-commit rejection') - expect(git(fixture, ['rev-parse', 'HEAD'])).toBe(headBefore) - expect(git(fixture, ['rev-parse', '--verify', 'MERGE_HEAD'])).not.toBe('') - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('') - expect(git(fixture, ['diff', '--cached', '--name-only']).split('\n')).toContain( - 'docs/guide.i18n.yaml', - ) - expectMergedPair(fixture) - }) - - it('prints the recovery path when driver input is not composable', () => { - const fixture = createFixture(false) - const result = spawnSync(process.execPath, ['--import', tsxLoader, driver], { - cwd: fixture.root, - encoding: 'utf8', - env: fixture.env, - }) - - expect(result.status).toBe(1) - expect(result.stderr).toContain('pnpm run verify-translation-pairing --write ') - expect(result.stderr).toContain('pnpm run resolve-translation-pairing-conflicts') - }) - - it('resolves an already-stopped generated-only conflict from index stages', () => { - const fixture = createFixture(false) - startStoppedPairingMerge(fixture) - - expect(resolveTranslationPairingConflicts(fixture.root)).toEqual(['docs/guide.i18n.yaml']) - - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('') - expectMergedPair(fixture) - }) - - it('refuses to confirm unstaged owner bytes after a stopped merge', () => { - const fixture = createFixture(false) - startStoppedPairingMerge(fixture) - write(fixture.root, 'docs/guide.md', `${mergedSource}\nunstaged\n`) - - expect(() => resolveTranslationPairingConflicts(fixture.root)).toThrow( - 'docs/guide.md has unstaged content', - ) - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('docs/guide.i18n.yaml') - }) - - it('refuses to overwrite an edited sidecar after a stopped merge', () => { - const fixture = createFixture(false) - startStoppedPairingMerge(fixture) - write(fixture.root, 'docs/guide.i18n.yaml', 'manually resolved\n') - - expect(() => resolveTranslationPairingConflicts(fixture.root)).toThrow( - 'docs/guide.i18n.yaml has edited conflict content', - ) - expect(readFileSync(join(fixture.root, 'docs/guide.i18n.yaml'), 'utf8')).toBe('manually resolved\n') - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U'])).toBe('docs/guide.i18n.yaml') - }) - - it('resolves safe records while leaving an owner-conflicted pair untouched', () => { - const fixture = createFixture(false) - startMixedPairingMerge(fixture) - - expect(() => resolveTranslationPairingConflicts(fixture.root)).toThrow( - 'docs/manual.i18n.yaml: docs/manual.md has content conflicts', - ) - - expect(git(fixture, ['diff', '--name-only', '--diff-filter=U']).split('\n')).toEqual([ - 'docs/manual.i18n.yaml', - 'docs/manual.md', - 'docs/manual.zh.md', - ]) - expectMergedPair(fixture) - }) -}) diff --git a/scripts/translation-pairing-merge.ts b/scripts/translation-pairing-merge.ts deleted file mode 100644 index 7f0f25114b..0000000000 --- a/scripts/translation-pairing-merge.ts +++ /dev/null @@ -1,408 +0,0 @@ -/** Fail-closed composition of bilingual pairing records during Git merges. */ - -import { spawnSync } from 'node:child_process' -import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' -import { tmpdir } from 'node:os' -import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path' -import { - GIT_COMMAND_MAX_BUFFER, - gitBlobHash, - gitMergeInputPaths, - readGitIndexBlob, - runGit, - storeGitBlob, -} from './translation-pairing-git.ts' -import { - isTranslationScopeFile, - languageSwitcherTargets, - parseTranslationMarkdown, - parseTranslationPairingManifest, - requiresSourceLanguageSwitcher, - translationPairSourcePredicate, - translationStructureDiff, - translationStructureSignature, -} from './translation-pairing.ts' -import { - hasLanguageSwitcher, - translationLinkLocaleViolations, -} from './translation-links.ts' -import { - parseTranslationPairingRecord, - renderTranslationPairingRecord, - translationPairPathsFromMeta, - type TranslationPairPaths, - type TranslationPairingRecord, -} from './translation-pairing-record.ts' - -const UNMERGED_ENTRY = /^(\d+) ([0-9a-f]+) ([123])\t([\s\S]+)$/ - -/** A mechanically composed record and the exact merged owner contents it names. */ -export interface TranslationPairingMergeResult extends TranslationPairingRecord { - /** Canonical generated sidecar text. */ - record: string - /** Clean three-way merge of the English owner. */ - sourceContent: Buffer - /** Clean three-way merge of the Simplified Chinese owner. */ - zhContent: Buffer -} - -interface UnmergedStages { - ancestor?: string - current?: string - other?: string -} - -function readGitBlob(root: string, objectId: string, owner: string): Buffer { - const content = runGit(root, ['cat-file', 'blob', objectId], `reading ${owner} blob ${objectId}`) - if (gitBlobHash(content) !== objectId) { - throw new Error(`${owner} record names ${objectId}, which is not its SHA-1 git blob hash`) - } - return content -} - -function readMergeDefault(root: string): string | undefined { - const result = spawnSync('git', ['-C', root, 'config', '--get', 'merge.default'], { - maxBuffer: GIT_COMMAND_MAX_BUFFER, - }) - if (result.error) { - throw new Error(`reading merge.default failed: ${result.error.message}`, { cause: result.error }) - } - if (result.status === 1) return undefined - if (result.status !== 0) { - throw new Error( - `reading merge.default failed with status ${String(result.status)}: ${result.stderr.toString('utf8').trim()}`, - ) - } - return result.stdout.toString('utf8').trim() -} - -function assertDefaultTextMerge(root: string, paths: TranslationPairPaths): void { - const output = runGit( - root, - ['check-attr', '-z', 'merge', '--', paths.source, paths.zh], - 'checking bilingual owner merge attributes', - ).toString('utf8') - const fields = output.split('\0') - fields.pop() - let mergeDefault: string | undefined - for (let index = 0; index < fields.length; index += 3) { - const path = fields[index] - const value = fields[index + 2] - if (path === undefined || value === undefined) { - throw new Error('git check-attr returned a malformed result') - } - if (!['unspecified', 'set', 'text'].includes(value)) { - throw new Error(`${path} uses merge=${value}; the pairing driver only composes Git's default text merge`) - } - if (value === 'unspecified') { - mergeDefault ??= readMergeDefault(root) - if (mergeDefault !== undefined && mergeDefault !== 'text') { - throw new Error( - `${path} inherits merge.default=${mergeDefault}; the pairing driver only composes Git's default text merge`, - ) - } - } - } -} - -function runTextMerge( - root: string, - label: string, - ancestor: Buffer | string, - current: Buffer | string, - other: Buffer | string, -): { output: Buffer; status: number | null } { - const temporary = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-merge-')) - try { - const ancestorPath = join(temporary, 'ancestor') - const currentPath = join(temporary, 'current') - const otherPath = join(temporary, 'other') - writeFileSync(ancestorPath, ancestor) - writeFileSync(currentPath, current) - writeFileSync(otherPath, other) - const result = spawnSync('git', [ - '-C', root, - 'merge-file', '-p', - '-L', `${label}:current`, - '-L', `${label}:ancestor`, - '-L', `${label}:other`, - currentPath, ancestorPath, otherPath, - ], { maxBuffer: GIT_COMMAND_MAX_BUFFER }) - if (result.error) { - throw new Error(`merging ${label} failed: ${result.error.message}`, { cause: result.error }) - } - return { output: result.stdout, status: result.status } - } finally { - rmSync(temporary, { recursive: true, force: true }) - } -} - -function mergeBlobTriplet( - root: string, - owner: string, - ancestor: Buffer, - current: Buffer, - other: Buffer, -): Buffer { - const result = runTextMerge(root, owner, ancestor, current, other) - if (result.status !== 0) { - const kind = result.status !== null && result.status > 0 && result.status <= 127 - ? 'has content conflicts' - : `failed with status ${String(result.status)}` - throw new Error(`${owner} ${kind}`) - } - return result.output -} - -function loadRecordOwners( - root: string, - label: string, - content: string, - paths: TranslationPairPaths, -): { source: Buffer; zh: Buffer } { - const record = parseTranslationPairingRecord(content, paths) - if (record === undefined) throw new Error(`${label} ${paths.meta} is not a valid two-hash pairing record`) - return { - source: readGitBlob(root, record.sourceHash, `${label} ${paths.source}`), - zh: readGitBlob(root, record.zhHash, `${label} ${paths.zh}`), - } -} - -function assertMergedPairStructure( - root: string, - paths: TranslationPairPaths, - source: Buffer, - zh: Buffer, - isTranslationPairSource: (sourcePath: string) => boolean, -): void { - const sourceText = source.toString('utf8') - const zhText = zh.toString('utf8') - const sourceTree = parseTranslationMarkdown(sourceText) - const zhTree = parseTranslationMarkdown(zhText) - const indexFiles = gitMergeInputPaths(root) - const repositoryFileExists = (path: string): boolean => indexFiles.has(path) - const sourceSwitcherTargets = languageSwitcherTargets(paths.source) - const zhSwitcherTargets = languageSwitcherTargets(paths.zh) - if (requiresSourceLanguageSwitcher(paths.source) - && !hasLanguageSwitcher(sourceTree, sourceText, zhSwitcherTargets)) { - throw new Error(`${paths.source} clean merge lost its language-switcher link to ${basename(paths.zh)}`) - } - if (!hasLanguageSwitcher(zhTree, zhText, sourceSwitcherTargets)) { - throw new Error(`${paths.zh} clean merge lost its language-switcher link to ${basename(paths.source)}`) - } - const localeViolations = [ - ...translationLinkLocaleViolations(sourceText, { - repoRoot: root, - sourcePath: paths.source, - isTranslationPairSource, - repositoryFileExists, - }, zhSwitcherTargets), - ...translationLinkLocaleViolations(zhText, { - repoRoot: root, - sourcePath: paths.zh, - isTranslationPairSource, - repositoryFileExists, - }, sourceSwitcherTargets), - ] - if (localeViolations.length > 0) { - const violation = localeViolations[0] - if (violation === undefined) throw new Error('translation locale violation disappeared') - throw new Error(`${violation.sourcePath}:${violation.line} clean merge uses ${JSON.stringify(violation.url)}; expected ${JSON.stringify(violation.expectedUrl)}`) - } - const divergences = translationStructureDiff( - translationStructureSignature(sourceTree, zhSwitcherTargets, { - repoRoot: root, - sourcePath: paths.source, - isTranslationPairSource, - repositoryFileExists, - markdown: sourceText, - }), - translationStructureSignature(zhTree, sourceSwitcherTargets, { - repoRoot: root, - sourcePath: paths.zh, - isTranslationPairSource, - repositoryFileExists, - markdown: zhText, - }), - ) - if (divergences.length > 0) { - throw new Error(`${paths.source} and ${paths.zh} clean merges diverge structurally: ${divergences.join('; ')}`) - } -} - -function normalizeMetaPath(root: string, meta: string): string { - if (isAbsolute(meta)) throw new Error(`pairing record must be repository-relative: ${JSON.stringify(meta)}`) - const repositoryRelative = relative(resolve(root), resolve(root, meta)) - if (repositoryRelative === '' || repositoryRelative === '..' || repositoryRelative.startsWith(`..${sep}`)) { - throw new Error(`pairing record escapes the repository: ${JSON.stringify(meta)}`) - } - return repositoryRelative.split(sep).join('/') -} - -/** - * Compose one generated sidecar from the ancestor, current, and other records. - * - * Each input record is already a confirmation of its two owner blobs. The - * result exists only when Git's default text merge succeeds independently for - * both languages and the composed documents retain the pairing structure. - * - * @param root - Repository root containing the referenced Git objects. - * @param metaPath - Repository-relative sidecar path. - * @param ancestorRecord - Common-ancestor sidecar text. - * @param currentRecord - Current-side sidecar text. - * @param otherRecord - Other-side sidecar text. - * @returns The canonical record and exact merged owner contents. - * @throws Error when the input is not mechanically composable. - */ -export function mergeTranslationPairingRecords( - root: string, - metaPath: string, - ancestorRecord: string, - currentRecord: string, - otherRecord: string, - isTranslationPairSource: (sourcePath: string) => boolean, -): TranslationPairingMergeResult { - const normalizedMeta = normalizeMetaPath(root, metaPath) - if (!isTranslationScopeFile(normalizedMeta)) { - throw new Error(`${normalizedMeta} is outside the active bilingual documentation corpus`) - } - const paths = translationPairPathsFromMeta(normalizedMeta) - if (!isTranslationPairSource(paths.source)) { - throw new Error(`${normalizedMeta} is excluded from the active bilingual documentation corpus`) - } - assertDefaultTextMerge(root, paths) - const ancestor = loadRecordOwners(root, 'ancestor', ancestorRecord, paths) - const current = loadRecordOwners(root, 'current', currentRecord, paths) - const other = loadRecordOwners(root, 'other', otherRecord, paths) - const sourceContent = mergeBlobTriplet(root, paths.source, ancestor.source, current.source, other.source) - const zhContent = mergeBlobTriplet(root, paths.zh, ancestor.zh, current.zh, other.zh) - assertMergedPairStructure(root, paths, sourceContent, zhContent, isTranslationPairSource) - const sourceHash = storeGitBlob(root, sourceContent) - const zhHash = storeGitBlob(root, zhContent) - return { - record: renderTranslationPairingRecord(paths, { sourceHash, zhHash }), - sourceContent, - sourceHash, - zhContent, - zhHash, - } -} - -/** Read the repository manifest and return its active bilingual-source predicate. */ -export function repositoryTranslationPairSource(root: string): (sourcePath: string) => boolean { - const path = 'scripts/translation-pairing.manifest.json' - const content = readGitIndexBlob(root, path)?.content ?? readFileSync(join(root, path)) - const manifest = parseTranslationPairingManifest( - content.toString('utf8'), - ) - return translationPairSourcePredicate(manifest) -} - -function unmergedSidecars(root: string): Map { - const output = runGit(root, ['ls-files', '--unmerged', '-z'], 'listing unresolved merge entries').toString('utf8') - const records = new Map() - for (const entry of output.split('\0')) { - if (entry === '') continue - const match = UNMERGED_ENTRY.exec(entry) - if (!match?.[2] || !match[3] || match[4] === undefined) { - throw new Error(`git ls-files returned a malformed unmerged entry: ${JSON.stringify(entry)}`) - } - const path = match[4] - if (!path.endsWith('.i18n.yaml')) continue - const stages = records.get(path) ?? {} - const field = match[3] === '1' ? 'ancestor' : match[3] === '2' ? 'current' : 'other' - stages[field] = match[2] - records.set(path, stages) - } - return records -} - -function assertUneditedSidecar( - root: string, - metaPath: string, - ancestorRecord: string, - currentRecord: string, - otherRecord: string, -): void { - const worktreeRecord = readFileSync(join(root, metaPath), 'utf8') - if (worktreeRecord === currentRecord || worktreeRecord === otherRecord) return - const textMerge = runTextMerge(root, metaPath, ancestorRecord, currentRecord, otherRecord) - if (textMerge.status === 0 && textMerge.output.toString('utf8') === worktreeRecord) return - const stageDataLines = [currentRecord, otherRecord] - .flatMap(record => record.split(/\r?\n/)) - .filter(line => line !== '' && !line.startsWith('#')) - const hasUneditedConflict = worktreeRecord.includes('<<<<<<<') - && worktreeRecord.includes('=======') - && worktreeRecord.includes('>>>>>>>') - && stageDataLines.every(line => worktreeRecord.includes(line)) - if (!hasUneditedConflict) { - throw new Error(`${metaPath} has edited conflict content; refusing to overwrite manual work`) - } -} - -/** - * Resolve every mechanically composable `.i18n.yaml` conflict in the index. - * - * The command first proves that Git's already-staged owner merges match the - * independently composed contents, then writes and stages all sidecars as one - * batch. Other conflicts remain untouched; after staging the safe records, an - * aggregate error reports any pairing conflicts that still need manual work. - * - * @param root - Repository root with an in-progress merge-like operation. - * @returns Repository-relative sidecar paths resolved and staged. - */ -export function resolveTranslationPairingConflicts( - root: string, - isTranslationPairSource: (sourcePath: string) => boolean, -): string[] { - const resolutions: { path: string; record: string }[] = [] - const failures: { path: string; reason: string }[] = [] - for (const [metaPath, stages] of [...unmergedSidecars(root)].sort(([left], [right]) => left.localeCompare(right))) { - try { - if (stages.ancestor === undefined || stages.current === undefined || stages.other === undefined) { - throw new Error('is an add/delete or incomplete-stage conflict and requires manual resolution') - } - const ancestorRecord = readGitBlob(root, stages.ancestor, `ancestor ${metaPath}`).toString('utf8') - const currentRecord = readGitBlob(root, stages.current, `current ${metaPath}`).toString('utf8') - const otherRecord = readGitBlob(root, stages.other, `other ${metaPath}`).toString('utf8') - assertUneditedSidecar(root, metaPath, ancestorRecord, currentRecord, otherRecord) - const result = mergeTranslationPairingRecords( - root, - metaPath, - ancestorRecord, - currentRecord, - otherRecord, - isTranslationPairSource, - ) - const paths = translationPairPathsFromMeta(metaPath) - if (readGitIndexBlob(root, paths.source)?.objectId !== result.sourceHash) { - throw new Error(`${paths.source} staged merge does not match the pairing driver's clean merge`) - } - if (readGitIndexBlob(root, paths.zh)?.objectId !== result.zhHash) { - throw new Error(`${paths.zh} staged merge does not match the pairing driver's clean merge`) - } - for (const [path, expected] of [[paths.source, result.sourceHash], [paths.zh, result.zhHash]] as const) { - if (gitBlobHash(readFileSync(join(root, path))) !== expected) { - throw new Error(`${path} has unstaged content; refusing to confirm bytes outside the merge result`) - } - } - resolutions.push({ path: metaPath, record: result.record }) - } catch (error) { - failures.push({ path: metaPath, reason: error instanceof Error ? error.message : String(error) }) - } - } - for (const resolution of resolutions) writeFileSync(join(root, resolution.path), resolution.record) - if (resolutions.length > 0) { - runGit(root, ['add', '--', ...resolutions.map(resolution => resolution.path)], 'staging resolved pairing records') - } - if (failures.length > 0) { - const resolved = resolutions.length === 0 - ? '' - : `resolved and staged ${resolutions.map(resolution => resolution.path).join(', ')}; ` - throw new Error( - `${resolved}left ${String(failures.length)} pairing conflict(s) unresolved:\n` - + failures.map(failure => `- ${failure.path}: ${failure.reason}`).join('\n'), - ) - } - return resolutions.map(resolution => resolution.path) -} diff --git a/scripts/translation-pairing-record.ts b/scripts/translation-pairing-record.ts index d4481ea5b4..3990ec11c2 100644 --- a/scripts/translation-pairing-record.ts +++ b/scripts/translation-pairing-record.ts @@ -1,6 +1,15 @@ -/** Canonical paths, parsing, and rendering for bilingual pairing records. */ +/** + * Canonical paths, section computation, parsing, and rendering for bilingual + * pairing records. A record holds one entry per heading section with + * translated content, so independent edits to different sections change + * separate record lines and merge with Git's default text merge. + */ +import { createHash } from 'node:crypto' import { basename } from 'node:path' +import type { Nodes } from 'mdast' +import { normalizeTranslationMarkdownLinks, type TranslationLinkContext } from './translation-links.ts' +import { generatedRegions, parseTranslationMarkdown } from './translation-pairing.ts' /** The three repository-relative paths that form one bilingual pair. */ export interface TranslationPairPaths { @@ -8,19 +17,24 @@ export interface TranslationPairPaths { source: string /** Simplified Chinese document path. */ zh: string - /** Generated consistency-record path. */ + /** Consistency-record path. */ meta: string } -/** The two content hashes recorded for a bilingual pair. */ -export interface TranslationPairingRecord { - /** Git blob hash of the English document. */ - sourceHash: string - /** Git blob hash of the Simplified Chinese document. */ - zhHash: string +/** Content hashes of one section's translated blocks. */ +export interface TranslationSectionHashes { + en: string + zh: string } -const META_LINE = /^([^:#]+\.md): ([0-9a-f]{40})$/ +/** Section key (English heading-slug path) → hashes, in document order. */ +export type TranslationPairingRecord = ReadonlyMap + +/** Link-resolution inputs shared by both sides of one pair. */ +export type TranslationPairingRecordContext = Omit + +const KEY_LINE = /^(\/[^\s:#]*):$/ +const HASH_LINE = /^ {2}(en|zh): ([0-9a-f]{16})$/ /** * Derive the counterpart and consistency-record paths from an English document. @@ -39,61 +53,157 @@ export function translationPairPaths(source: string): TranslationPairPaths { } } -/** - * Derive one pair from its consistency-record path. - * - * @param meta - Repository-relative `foo.i18n.yaml` path. - * @returns The complete three-path pair. - */ -export function translationPairPathsFromMeta(meta: string): TranslationPairPaths { - if (!meta.endsWith('.i18n.yaml')) { - throw new Error(`expected a bilingual consistency-record path, received ${JSON.stringify(meta)}`) - } - return translationPairPaths(meta.replace(/\.i18n\.yaml$/, '.md')) +interface Section { + heading?: Extract + blocks: string[] +} + +function headingText(node: Nodes): string { + if ('value' in node && (node.type === 'text' || node.type === 'inlineCode')) return node.value + return 'children' in node ? node.children.map(headingText).join('') : '' } /** - * Parse a consistency record for its expected sibling names. + * Split normalized Markdown into the preamble plus one section per heading. + * Fenced code blocks and generated regions, which the pairing gate requires to + * be identical on both sides, are left out of each section's blocks. + */ +function sections(markdown: string): Section[] { + const frontmatter = /^---\n[\s\S]*?\n---(?:\n|$)/.exec(markdown)?.[0].length ?? 0 + const result: Section[] = [{ blocks: frontmatter > 0 ? [markdown.slice(0, frontmatter)] : [] }] + const regionLines = generatedRegions(markdown).map(region => [region.begin + 1, region.end + 1] as const) + const tree = parseTranslationMarkdown(markdown) + if (tree.type !== 'root') throw new Error('Markdown parser returned a non-root tree') + for (const node of tree.children) { + if ((node.position?.start.offset ?? 0) < frontmatter) continue + if (node.type === 'heading') result.push({ heading: node, blocks: [] }) + const line = node.position?.start.line ?? 0 + if (node.type === 'code' || regionLines.some(([begin, end]) => line >= begin && line <= end)) continue + result.at(-1)?.blocks.push(markdown.slice(node.position?.start.offset, node.position?.end.offset)) + } + return result +} + +function slug(text: string): string { + return text.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'section' +} + +function sectionHash(blocks: string[]): string { + return createHash('sha256').update(blocks.join('\n')).digest('hex').slice(0, 16) +} + +/** + * Compute the record for one pair's current contents. + * + * Both sides are split at every heading; section `i` of one side corresponds + * to section `i` of the other. Each side's hash covers its top-level blocks + * except fenced code blocks and generated regions, which the pairing gate + * requires to be identical on both sides. A section with no remaining blocks + * has no entry. Keys are the English heading-slug paths, with `~2`, `~3`, … + * suffixes on repeats. + * + * @param paths - Pair paths used to resolve each side's relative links. + * @param en - English document text. + * @param zh - Chinese document text. + * @param context - Link-resolution inputs for both sides. + * @returns Entries in document order. + * @throws Error when the two sides have different heading counts or malformed generated regions. + */ +export function computeTranslationPairingRecord( + paths: TranslationPairPaths, + en: string, + zh: string, + context: TranslationPairingRecordContext, +): TranslationPairingRecord { + const enSections = sections(normalizeTranslationMarkdownLinks(en, { ...context, sourcePath: paths.source })) + const zhSections = sections(normalizeTranslationMarkdownLinks(zh, { ...context, sourcePath: paths.zh })) + if (enSections.length !== zhSections.length) { + throw new Error(`${paths.source} has ${enSections.length - 1} heading(s) but ${paths.zh} has ${zhSections.length - 1}`) + } + const record = new Map() + const ancestors: { depth: number; slug: string }[] = [] + const keys = new Set() + for (const [index, enSection] of enSections.entries()) { + const zhSection = zhSections[index] + if (zhSection === undefined) throw new Error('section alignment lost its counterpart') + let path = '/' + if (enSection.heading !== undefined) { + const depth = enSection.heading.depth + while ((ancestors.at(-1)?.depth ?? 0) >= depth) ancestors.pop() + ancestors.push({ depth, slug: slug(headingText(enSection.heading)) }) + path = `/${ancestors.map(ancestor => ancestor.slug).join('/')}` + } + let key = path + for (let repeat = 2; keys.has(key); repeat++) key = `${path}~${repeat}` + keys.add(key) + if (enSection.blocks.length === 0 && zhSection.blocks.length === 0) continue + record.set(key, { en: sectionHash(enSection.blocks), zh: sectionHash(zhSection.blocks) }) + } + return record +} + +/** + * Parse a consistency record. * * @param content - Complete sidecar text. - * @param paths - Expected sibling paths. - * @returns The two hashes, or `undefined` for malformed, duplicate, or unexpected keys. + * @returns Entries in file order, or `undefined` for malformed or duplicate entries. */ -export function parseTranslationPairingRecord( - content: string, - paths: TranslationPairPaths, -): TranslationPairingRecord | undefined { - const hashes = new Map() - for (const line of content.split('\n')) { - if (line === '' || line.startsWith('#')) continue - const match = META_LINE.exec(line) - if (!match?.[1] || !match[2] || hashes.has(match[1])) return undefined - hashes.set(match[1], match[2]) +export function parseTranslationPairingRecord(content: string): TranslationPairingRecord | undefined { + const record = new Map() + const lines = content.split('\n').filter(line => line !== '' && !line.startsWith('#')) + for (let index = 0; index < lines.length; index += 3) { + const key = KEY_LINE.exec(lines[index] ?? '')?.[1] + const en = HASH_LINE.exec(lines[index + 1] ?? '') + const zh = HASH_LINE.exec(lines[index + 2] ?? '') + if (key === undefined || record.has(key) || en?.[1] !== 'en' || zh?.[1] !== 'zh' || !en[2] || !zh[2]) { + return undefined + } + record.set(key, { en: en[2], zh: zh[2] }) } - const sourceHash = hashes.get(basename(paths.source)) - const zhHash = hashes.get(basename(paths.zh)) - if (hashes.size !== 2 || sourceHash === undefined || zhHash === undefined) return undefined - return { sourceHash, zhHash } + return record } /** * Render the canonical consistency record for a pair. * - * @param paths - Pair paths written into the record and its recovery command. - * @param record - Confirmed content hashes. + * @param paths - Pair paths written into the recovery command. + * @param record - Confirmed section hashes. * @returns Canonical YAML text with exactly one trailing newline. */ -export function renderTranslationPairingRecord( - paths: TranslationPairPaths, - record: TranslationPairingRecord, -): string { +export function renderTranslationPairingRecord(paths: TranslationPairPaths, record: TranslationPairingRecord): string { return [ - '# 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 ${basename(paths.source)} (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 ${paths.source}`, - `${basename(paths.source)}: ${record.sourceHash}`, - `${basename(paths.zh)}: ${record.zhHash}`, + ...[...record].flatMap(([key, hashes]) => [`${key}:`, ` en: ${hashes.en}`, ` zh: ${hashes.zh}`]), '', ].join('\n') } + +/** + * Describe how a current record differs from the confirmed one. + * + * @param recorded - Confirmed record. + * @param current - Record computed from current contents. + * @returns One message per changed, added, or removed section; empty when equal. + */ +export function translationPairingRecordDiff( + recorded: TranslationPairingRecord, + current: TranslationPairingRecord, +): string[] { + const out: string[] = [] + for (const [key, hashes] of current) { + const confirmed = recorded.get(key) + if (confirmed === undefined) { + out.push(`section ${key} has unconfirmed translated content`) + continue + } + const sides = (['en', 'zh'] as const).filter(side => confirmed[side] !== hashes[side]) + if (sides.length > 0) out.push(`section ${key} changed since confirmation (${sides.join(', ')})`) + } + for (const key of recorded.keys()) { + if (!current.has(key)) out.push(`section ${key} is recorded but no longer has translated content`) + } + return out +} diff --git a/scripts/translation-pairing.spec.ts b/scripts/translation-pairing.spec.ts index 1c902d3520..89ab41d09d 100644 --- a/scripts/translation-pairing.spec.ts +++ b/scripts/translation-pairing.spec.ts @@ -5,19 +5,16 @@ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs' import { tmpdir } from 'node:os' import { join } from 'node:path' import { describe, expect, it } from 'vitest' +import { gitIndexPaths, readGitIndexBlob } from './translation-pairing-git.ts' import { - gitBlobHash, - gitIndexPaths, - readGitIndexBlob, - storeGitBlob, -} from './translation-pairing-git.ts' -import { + computeTranslationPairingRecord, parseTranslationPairingRecord, renderTranslationPairingRecord, + translationPairingRecordDiff, translationPairPaths, + type TranslationPairingRecord, } from './translation-pairing-record.ts' import { - blobHash, isTranslationPairingManifestExcluded, isTranslationScopeFile, languageSwitcherTargets, @@ -25,7 +22,9 @@ import { parseTranslationMarkdown, parseTranslationPairingCliArgs, parseTranslationPairingManifest, - partitionGeneratedRegions, + generatedRegions, + renderGeneratedRegion, + spliceGeneratedRegion, requiresSourceLanguageSwitcher, translationPairSourcePredicate, translationStructureDiff, @@ -58,60 +57,7 @@ function fixtureSignature( ) } -function gitSupportsObjectFormat(format: 'sha256'): boolean { - const root = mkdtempSync(join(tmpdir(), 'dsh-git-object-format-')) - try { - return spawnSync('git', ['init', '--quiet', `--object-format=${format}`, root], { - stdio: 'ignore', - }).status === 0 - } finally { - rmSync(root, { recursive: true, force: true }) - } -} - -const supportsSha256ObjectFormat = gitSupportsObjectFormat('sha256') - -describe('translation pairing snapshots', () => { - it('stores exact uncommitted bytes for later recovery by object ID', () => { - const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-')) - try { - execFileSync('git', ['init', '--quiet', root], { - env: { ...process.env, GIT_DEFAULT_HASH: 'sha1' }, - }) - const content = Buffer.from([0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x0a, 0xff]) - - const objectId = storeGitBlob(root, content) - - expect(objectId).toBe(gitBlobHash(content)) - expect(execFileSync('git', [ - '-C', root, 'rev-parse', `refs/dsh/translation-pairing/snapshots/${objectId}`, - ], { encoding: 'utf8' }).trim()).toBe(objectId) - execFileSync('git', ['-C', root, 'gc', '--prune=now']) - expect(execFileSync('git', ['-C', root, 'cat-file', '-p', objectId])).toEqual(content) - } finally { - rmSync(root, { recursive: true, force: true }) - } - }) - - it('fails before a sidecar can reference an unavailable object', () => { - const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-')) - try { - expect(() => storeGitBlob(root, Buffer.from('snapshot'))).toThrow('git hash-object -w --stdin failed') - } finally { - rmSync(root, { recursive: true, force: true }) - } - }) - - it('fails clearly when Git cannot be started', () => { - const previousPath = process.env.PATH - try { - process.env.PATH = '' - expect(() => storeGitBlob('.', Buffer.from('snapshot'))).toThrow('git hash-object -w --stdin failed') - } finally { - process.env.PATH = previousPath - } - }) - +describe('translation pairing index reads', () => { it('reads staged bytes independently of the working tree', () => { const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-index-')) try { @@ -124,10 +70,7 @@ describe('translation pairing snapshots', () => { execFileSync('git', ['-C', root, 'add', 'owner.md']) writeFileSync(join(root, 'owner.md'), 'unstaged') - const indexed = readGitIndexBlob(root, 'owner.md') - - expect(indexed?.content.toString('utf8')).toBe('staged') - expect(indexed?.objectId).toBe(gitBlobHash(Buffer.from('staged'))) + expect(readGitIndexBlob(root, 'owner.md')?.toString('utf8')).toBe('staged') expect(readGitIndexBlob(root, 'absent.md')).toBeUndefined() } finally { rmSync(root, { recursive: true, force: true }) @@ -153,16 +96,6 @@ describe('translation pairing snapshots', () => { rmSync(root, { recursive: true, force: true }) } }) - - it.skipIf(!supportsSha256ObjectFormat)('rejects an object format that pairing records cannot represent', () => { - const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-')) - try { - execFileSync('git', ['init', '--quiet', '--object-format=sha256', root]) - expect(() => storeGitBlob(root, Buffer.from('snapshot'))).toThrow('returned unexpected object ID') - } finally { - rmSync(root, { recursive: true, force: true }) - } - }) }) describe('translation pairing manifest', () => { @@ -276,27 +209,95 @@ describe('translation pairing link language parity', () => { describe('translation pairing records', () => { const paths = translationPairPaths('docs/foo.md') - const record = { - sourceHash: '1'.repeat(40), - zhHash: '2'.repeat(40), - } + const context = { repoRoot: process.cwd(), isTranslationPairSource: fixturePairSource, repositoryFileExists: () => true } + const record = (en: string, zh: string): TranslationPairingRecord => ( + computeTranslationPairingRecord(paths, en, zh, context) + ) + const en = [ + '# Guide', '', 'English | [中文](foo.zh.md)', '', 'Intro.', '', + '## Events', '', 'Event table.', '', '| Event | Mode |', '| --- | --- |', '| `a` | `emit` |', '| `b` | `emit` |', '', + '## Code', '', '```sh', 'pnpm run x', '```', '', + ].join('\n') + const zh = [ + '# 指南', '', '[English](foo.md) | 中文', '', '简介。', '', + '## 事件', '', '事件表。', '', '| Event | Mode |', '| --- | --- |', '| `a` | `emit` |', '| `b` | `emit` |', '', + '## 代码', '', '```sh', 'pnpm run x', '```', '', + ].join('\n') - it('round-trips the canonical two-hash record', () => { - expect(parseTranslationPairingRecord(renderTranslationPairingRecord(paths, record), paths)).toEqual(record) + it('keys sections by English heading path and hashes everything outside code blocks and generated regions', () => { + const computed = record(en, zh) + expect([...computed.keys()]).toEqual(['/guide', '/guide/events', '/guide/code']) + expect(record(en.replace('pnpm run x', 'pnpm run y'), zh.replace('pnpm run x', 'pnpm run y'))).toEqual(computed) + expect(record( + en.replace('| `b` | `emit` |', '| `b` | `emit` |\n| `c` | `emit` |'), + zh.replace('| `b` | `emit` |', '| `b` | `emit` |\n| `c` | `emit` |'), + )).not.toEqual(computed) + const region = (rows: string): string => renderGeneratedRegion('events', `| Event |\n| --- |\n${rows}`) + expect(record(`${en}\n${region('| `a` |')}\n`, `${zh}\n${region('| `a` |')}\n`)) + .toEqual(record(`${en}\n${region('| `b` |')}\n`, `${zh}\n${region('| `b` |')}\n`)) + expect(record(`${en}\n## \`x\`\n\nshared\n`, `${zh}\n## \`x\`\n\nshared\n`).has('/guide/x')).toBe(true) + const packaged = renderGeneratedRegion('pkg', '## `x`\n\n- `inject`: `a`\n\n```sh\nx\n```') + expect(record(`${en}\n${packaged}\n`, `${zh}\n${packaged}\n`).has('/guide/x')).toBe(false) }) - it('rejects duplicate or unexpected keys', () => { - expect(parseTranslationPairingRecord([ - `foo.md: ${'1'.repeat(40)}`, - `foo.md: ${'3'.repeat(40)}`, - `foo.zh.md: ${'2'.repeat(40)}`, - '', - ].join('\n'), paths)).toBeUndefined() - expect(parseTranslationPairingRecord([ - `foo.md: ${'1'.repeat(40)}`, - `bar.zh.md: ${'2'.repeat(40)}`, - '', - ].join('\n'), paths)).toBeUndefined() + it('treats locale-localized paired links, frontmatter, and repeated headings deterministically', () => { + const computed = record( + `---\nkind: guide\n---\n${en}\nSee [bar](bar.md).\n\n## Events\n\nAgain.\n`, + `---\nkind: 指南\n---\n${zh}\nSee [bar](bar.zh.md).\n\n## 事件\n\n再次。\n`, + ) + expect([...computed.keys()]).toEqual(['/', '/guide', '/guide/events', '/guide/code', '/guide/events~2']) + expect(record(`${en}\nSee [bar](bar.md).\n`, `${zh}\nSee [bar](bar.zh.md).\n`)) + .toEqual(record(`${en}\nSee [bar](bar.zh.md).\n`, `${zh}\nSee [bar](bar.md).\n`)) + }) + + it('refuses sides with different heading counts', () => { + expect(() => record(en, `${zh}\n## 额外\n`)).toThrow('docs/foo.md has 3 heading(s) but docs/foo.zh.md has 4') + }) + + it('round-trips the canonical record and rejects malformed entries', () => { + const computed = record(en, zh) + const text = renderTranslationPairingRecord(paths, computed) + expect(parseTranslationPairingRecord(text)).toEqual(computed) + expect(parseTranslationPairingRecord(`/a:\n en: ${'1'.repeat(16)}\n`)).toBeUndefined() + expect(parseTranslationPairingRecord(`/a:\n zh: ${'1'.repeat(16)}\n en: ${'1'.repeat(16)}\n`)).toBeUndefined() + expect(parseTranslationPairingRecord( + `/a:\n en: ${'1'.repeat(16)}\n zh: ${'1'.repeat(16)}\n`.repeat(2), + )).toBeUndefined() + expect(parseTranslationPairingRecord('foo.md: 3f786850e387550fdab836ed7e6dc881de23001b\n')).toBeUndefined() + }) + + it('names changed, unconfirmed, and removed sections', () => { + const confirmed = record(en, zh) + expect(translationPairingRecordDiff(confirmed, confirmed)).toEqual([]) + expect(translationPairingRecordDiff(confirmed, record(en.replace('Intro.', 'Intro!'), zh))) + .toEqual(['section /guide changed since confirmation (en)']) + expect(translationPairingRecordDiff(confirmed, record(`${en}\n## Tail\n\nx\n`, `${zh}\n## 尾部\n\ny\n`))) + .toEqual(['section /guide/tail has unconfirmed translated content']) + expect(translationPairingRecordDiff( + new Map([...confirmed, ['/gone', { en: '0'.repeat(16), zh: '0'.repeat(16) }]]), + confirmed, + )).toEqual(['section /gone is recorded but no longer has translated content']) + }) + + it('merges records of edits to different sections with the default text merge', () => { + const edit = (heading: string, english: string, chinese: string): string => renderTranslationPairingRecord( + paths, + record(en.replace(heading, english), zh.replace(heading === 'Intro.' ? '简介。' : '事件表。', chinese)), + ) + const root = mkdtempSync(join(tmpdir(), 'dsh-translation-pairing-merge-')) + try { + writeFileSync(join(root, 'base'), renderTranslationPairingRecord(paths, record(en, zh))) + writeFileSync(join(root, 'current'), edit('Intro.', 'New intro.', '新简介。')) + writeFileSync(join(root, 'other'), edit('Event table.', 'New table.', '新表。')) + const merged = spawnSync('git', ['merge-file', '-p', 'current', 'base', 'other'], { cwd: root, encoding: 'utf8' }) + expect(merged.status).toBe(0) + expect(merged.stdout).toBe(renderTranslationPairingRecord(paths, record( + en.replace('Intro.', 'New intro.').replace('Event table.', 'New table.'), + zh.replace('简介。', '新简介。').replace('事件表。', '新表。'), + ))) + } finally { + rmSync(root, { recursive: true, force: true }) + } }) }) @@ -520,37 +521,34 @@ describe('generated regions', () => { const BEGIN = '' const END = '' - it('partitions marker-delimited regions from the hand-owned remainder', () => { + it('locates marker-delimited regions with their slugs and marker lines', () => { const doc = `# T\n\nprose\n\n${BEGIN}\ninjected\n${END}\ntail\n` - const { regions, stripped } = partitionGeneratedRegions(doc) - expect(regions).toEqual([`${BEGIN}\ninjected\n${END}`]) - expect(stripped).toBe('# T\n\nprose\n\ntail\n') + expect(generatedRegions(doc)).toEqual([ + { slug: 'cordis-surface', begin: 4, end: 6, text: `${BEGIN}\ninjected\n${END}` }, + ]) + expect(generatedRegions('# T\n\nprose\n')).toEqual([]) }) - it('treats a document without markers as one hand-owned remainder', () => { - const { regions, stripped } = partitionGeneratedRegions('# T\n\nprose\n') - expect(regions).toEqual([]) - expect(stripped).toBe('# T\n\nprose\n') + it('replaces exactly one region with the same slug', () => { + const doc = `a\n${renderGeneratedRegion('x', 'old')}\n${renderGeneratedRegion('y', 'keep')}\nb\n` + expect(spliceGeneratedRegion(doc, renderGeneratedRegion('x', 'new\nlines'))) + .toBe(`a\n${renderGeneratedRegion('x', 'new\nlines')}\n${renderGeneratedRegion('y', 'keep')}\nb\n`) + expect(() => spliceGeneratedRegion('a\n', renderGeneratedRegion('x', 'new'))) + .toThrow("expected exactly 1 generated region 'x', found 0") }) it('rejects unbalanced or nested markers', () => { - expect(() => partitionGeneratedRegions(`${END}\n`)).toThrow('without a BEGIN') - expect(() => partitionGeneratedRegions(`${BEGIN}\n`)).toThrow('without an END') - expect(() => partitionGeneratedRegions(`${BEGIN}\n${BEGIN}\n${END}\n`)).toThrow('nested') + expect(() => generatedRegions(`${END}\n`)).toThrow('without a BEGIN') + expect(() => generatedRegions(`${BEGIN}\n`)).toThrow('without an END') + expect(() => generatedRegions(`${BEGIN}\n${BEGIN}\n${END}\n`)).toThrow('nested') }) it('rejects mismatched slugs and malformed marker lines', () => { - expect(() => partitionGeneratedRegions('\nx\n\n')) + expect(() => generatedRegions('\nx\n\n')) .toThrow("END slug 'b' does not match its BEGIN slug 'a'") - expect(() => partitionGeneratedRegions(' trailing\nx\n\n')) + expect(() => generatedRegions(' trailing\nx\n\n')) .toThrow('malformed generated region marker line') - expect(() => partitionGeneratedRegions('x\n tail\n')) + expect(() => generatedRegions('x\n tail\n')) .toThrow('malformed generated region marker line') }) - - it('computes the exact git blob hash', () => { - // `git hash-object` of the empty file and of "x\n" — pinned upstream values. - expect(blobHash(Buffer.from(''))).toBe('e69de29bb2d1d6434b8b29ae775ad8c2e48c5391') - expect(blobHash(Buffer.from('x\n'))).toBe('587be6b4c3f93f93c489c0111bba5596147a26cb') - }) }) diff --git a/scripts/translation-pairing.ts b/scripts/translation-pairing.ts index 917b912c23..17a6641628 100644 --- a/scripts/translation-pairing.ts +++ b/scripts/translation-pairing.ts @@ -2,11 +2,10 @@ * Pure parsing and structural helpers for the bilingual-document pairing * gate. Kept separate from the CLI so corpus discovery and signature behavior * can be regression-tested without reading or mutating the repository tree. - * Also the one home of the generated-region grammar and the pair-record - * primitives, shared by the pairing gate and the region-injecting generators. + * Also the one home of the generated-region grammar, shared by the pairing + * gate and the region-injecting generators. */ -import { createHash } from 'node:crypto' import { basename } from 'node:path' import { fromMarkdown } from 'mdast-util-from-markdown' import { gfmFromMarkdown } from 'mdast-util-gfm' @@ -25,102 +24,81 @@ const GENERATED_REGION_END_LINE = /^$/ /** Loose marker detector: any line that LOOKS like a region marker must parse as one. */ const GENERATED_REGION_MARKER_HINT = /^`, body, ``].join('\n') } -const PAIR_META_LINE = /^([^:#]+\.md): ([0-9a-f]{40})$/ - /** - * Parse a `foo.i18n.yaml` consistency record into basename → recorded blob - * hash, or undefined when any non-comment line deviates from the exact - * `.md: <40-hex>` format or repeats a key. Consumers must - * additionally require exactly the two expected basenames — a renamed key is - * a malformed record, never a silently-missing entry. - * @param content - Sidecar file text. - * @returns The recorded map, or undefined for a malformed record. + * Replace the one region in a page whose slug matches a freshly rendered region. + * + * @param content - The page's current full Markdown text. + * @param region - The rendered marker-delimited region. + * @returns The page text with that region replaced. + * @throws Error when the page does not contain exactly one region with that slug. */ -export function parsePairMeta(content: string): Map | undefined { - const out = new Map() - for (const line of content.split('\n')) { - if (line === '' || line.startsWith('#')) continue - const match = PAIR_META_LINE.exec(line) - if (!match?.[1] || !match[2]) return undefined - if (out.has(match[1])) return undefined - out.set(match[1], match[2]) +export function spliceGeneratedRegion(content: string, region: string): string { + const slug = generatedRegions(region)[0]?.slug + const matches = generatedRegions(content).filter(candidate => candidate.slug === slug) + const match = matches[0] + if (slug === undefined || matches.length !== 1 || match === undefined) { + throw new Error(`expected exactly 1 generated region '${slug ?? '?'}', found ${matches.length}; add its BEGIN/END markers once`) } - return out -} - -/** - * Render a `foo.i18n.yaml` consistency record. - * @param source - Repo-relative English path. - * @param sourceHash - Blob hash of the English side. - * @param zh - Repo-relative Chinese path. - * @param zhHash - Blob hash of the Chinese side. - * @returns The exact sidecar file content. - */ -export function renderPairMeta(source: string, sourceHash: string, zh: string, zhHash: string): string { - return [ - '# 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 ${source}`, - `${basename(source)}: ${sourceHash}`, - `${basename(zh)}: ${zhHash}`, - '', - ].join('\n') + const lines = content.split('\n') + return [...lines.slice(0, match.begin), region, ...lines.slice(match.end + 1)].join('\n') } /** Validated fields of `scripts/translation-pairing.manifest.json`. */ diff --git a/scripts/verify-concrete-terms.spec.ts b/scripts/verify-concrete-terms.spec.ts index 738438efc5..8e43525e53 100644 --- a/scripts/verify-concrete-terms.spec.ts +++ b/scripts/verify-concrete-terms.spec.ts @@ -89,12 +89,17 @@ describe('concrete terminology policy', () => { expect(findConcreteTermViolations(`docs/persistence-changes/historical-formats/v${version}.schema.json`, blockedTerm)).toEqual([]) }) + it('preserves historical identifiers in section keys of a canonical historical-format pairing record', () => { + expect(findConcreteTermViolations('docs/persistence-changes/historical-formats/v1.i18n.yaml', blockedTerm)).toEqual([]) + }) + it.each([ 'docs/persistence-changes/historical-formats/v00.schema.json', 'docs/persistence-changes/historical-formats/v01.schema.json', 'docs/persistence-changes/historical-formats/v-1.schema.json', 'docs/persistence-changes/historical-formats/v1.zh.schema.json', 'docs/persistence-changes/historical-formats/v1.schema.json.backup', + 'docs/persistence-changes/historical-formats/v1.zh.i18n.yaml', 'docs/persistence-changes/historical-formats/V1.schema.json', 'docs/persistence-changes/historical-formats/versions/v1.schema.json', 'docs/persistence-changes/historical-formats-extra/v1.schema.json', diff --git a/scripts/verify-concrete-terms.ts b/scripts/verify-concrete-terms.ts index ca8acc815f..980a0b364b 100644 --- a/scripts/verify-concrete-terms.ts +++ b/scripts/verify-concrete-terms.ts @@ -20,9 +20,10 @@ export interface ConcreteTermViolation { function isExcluded(file: string): boolean { return excludedPrefixes.some(prefix => file.startsWith(prefix)) - // Release snapshots retain the identifiers present in their pinned source. + // Release snapshots retain the identifiers present in their pinned source; + // historical-format pairing records key sections by those identifiers' headings. || /^docs\/persistence-changes\/releases\/dsh-v\d+\.\d+\.\d+-(?:alpha|rc)\.\d+\.schema\.json$/u.test(file) - || /^docs\/persistence-changes\/historical-formats\/v(?:0|[1-9]\d*)\.schema\.json$/u.test(file) + || /^docs\/persistence-changes\/historical-formats\/v(?:0|[1-9]\d*)\.(?:schema\.json|i18n\.yaml)$/u.test(file) } function containsBlockedTerm(value: string): boolean { diff --git a/scripts/verify-translation-pairing.ts b/scripts/verify-translation-pairing.ts index 5b2b4052a4..fe2f1b494b 100644 --- a/scripts/verify-translation-pairing.ts +++ b/scripts/verify-translation-pairing.ts @@ -1,6 +1,6 @@ /** - * Enforce complete English/Chinese pairs, matching structure, and recorded git - * blob hashes for every in-scope document. The manifest contains only explicit + * Enforce complete English/Chinese pairs, matching structure, and recorded + * per-section hashes for every in-scope document. The manifest contains only explicit * exclusions, which may have neither a counterpart nor a sidecar. * `--list` reports state; `--write ` records the named confirmed * pairs (`--write --all` records every complete pair); `--cached ` @@ -12,15 +12,12 @@ import { existsSync, globSync, readFileSync, statSync, writeFileSync } from 'node:fs' import { basename, join, resolve, sep } from 'node:path' +import { gitIndexPaths, readGitIndexBlob } from './translation-pairing-git.ts' import { - gitBlobHash, - gitIndexPaths, - readGitIndexBlob, - storeGitBlob, -} from './translation-pairing-git.ts' -import { + computeTranslationPairingRecord, parseTranslationPairingRecord, renderTranslationPairingRecord, + translationPairingRecordDiff, translationPairPaths, } from './translation-pairing-record.ts' import { @@ -28,7 +25,7 @@ import { parseTranslationMarkdown, parseTranslationPairingCliArgs, parseTranslationPairingManifest, - partitionGeneratedRegions, + generatedRegions, requiresSourceLanguageSwitcher, isTranslationPairingManifestExcluded, isTranslationScopeFile, @@ -62,7 +59,7 @@ const contentCache = new Map() function readRepositoryFile(file: string): Buffer | undefined { if (contentCache.has(file)) return contentCache.get(file) const content = indexMode - ? indexFiles?.has(file) ? readGitIndexBlob(root, file)?.content : undefined + ? indexFiles?.has(file) ? readGitIndexBlob(root, file) : undefined : existsSync(join(root, file)) && statSync(join(root, file)).isFile() ? readFileSync(join(root, file)) : undefined @@ -100,6 +97,8 @@ function isExcluded(file: string): boolean { return isTranslationPairingManifestExcluded(file, manifest) } +const recordContext = { repoRoot: root, isTranslationPairSource, repositoryFileExists } + // Enumerate the scope once: the whole corpus, or exactly the named pairs' // three files (a named pair whose files are absent is caught by the same // completeness rules that cover discovered remnants). @@ -144,7 +143,7 @@ if (request.scope === 'pairs') { } } -// --write: (re)record both hashes for the requested complete pairs, creating +// --write: (re)record the section hashes for the requested complete pairs, creating // missing records. A named pair that cannot be recorded (missing counterpart) // fails loud; corpus scope (--all) skips pairless sources as before. if (writeMode) { @@ -163,13 +162,18 @@ if (writeMode) { const sourceContent = readRepositoryFile(source) const zhContent = readRepositoryFile(zh) if (sourceContent === undefined || zhContent === undefined) throw new Error(`${source}: complete pair became unreadable`) - // A consistency record is also a recovery pointer for the briefing - // generator. Persist both snapshots even when the sidecar text is already - // current, because the bytes may exist only in this working tree. - const record = renderTranslationPairingRecord(paths, { - sourceHash: storeGitBlob(root, sourceContent), - zhHash: storeGitBlob(root, zhContent), - }) + let record: string + try { + record = renderTranslationPairingRecord(paths, computeTranslationPairingRecord( + paths, + sourceContent.toString('utf8'), + zhContent.toString('utf8'), + recordContext, + )) + } catch (error) { + console.error(`verify-translation-pairing: cannot record ${source}: ${error instanceof Error ? error.message : String(error)}`) + process.exit(2) + } if (existsSync(join(root, meta)) && readFileSync(join(root, meta), 'utf8') === record) continue writeFileSync(join(root, meta), record) console.log(`verify-translation-pairing: recorded ${meta}`) @@ -225,28 +229,34 @@ for (const source of [...pairAnchors].sort()) { if (sourceContent === undefined || zhContent === undefined || metaContent === undefined) { throw new Error(`${source}: complete pair became unreadable`) } - const record = parseTranslationPairingRecord(metaContent.toString('utf8'), paths) + const record = parseTranslationPairingRecord(metaContent.toString('utf8')) if (record === undefined) { - errors.push(`${meta}: malformed consistency record (expected exactly \`${basename(source)}: <40-hex>\` and \`${basename(zh)}: <40-hex>\`)`) - continue - } - - let consistent = true - for (const [file, content] of [[source, sourceContent], [zh, zhContent]] as const) { - const current = gitBlobHash(content) - const recorded = file === source ? record.sourceHash : record.zhHash - if (recorded !== current) { - errors.push(`${file}: out of sync — content no longer matches the pair's last confirmed-consistent state in ${meta} (bring the other side along, then re-record with --write)`) - consistent = false - } - } - if (!consistent) { + errors.push(`${meta}: malformed consistency record (expected \`/
:\` entries, each followed by \` en: <16-hex>\` and \` zh: <16-hex>\`)`) state.set(source, 'out-of-sync') continue } const sourceText = sourceContent.toString('utf8') const zhText = zhContent.toString('utf8') + let current: ReturnType + try { + current = computeTranslationPairingRecord(paths, sourceText, zhText, recordContext) + } catch (error) { + errors.push(`${source} ↔ ${zh}: ${error instanceof Error ? error.message : String(error)}`) + state.set(source, 'out-of-sync') + continue + } + const recordErrors = translationPairingRecordDiff(record, current).map(message => ( + `${meta}: out of sync — ${message} (bring the other side along, then re-record with --write)` + )) + if (recordErrors.length === 0 && renderTranslationPairingRecord(paths, current) !== metaContent.toString('utf8')) { + recordErrors.push(`${meta}: not in canonical form (re-record with --write)`) + } + if (recordErrors.length > 0) { + errors.push(...recordErrors) + state.set(source, 'out-of-sync') + continue + } const sourceSwitcherTargets = languageSwitcherTargets(source) const zhSwitcherTargets = languageSwitcherTargets(zh) for (const violation of [ @@ -271,23 +281,23 @@ for (const source of [...pairAnchors].sort()) { // are normalized to one semantic target. The structural signature below // compares their contents again as part of the whole document; this named // check rejects any prose, ordering, code, marker, or non-locale URL drift. - let sourceRegions: { regions: string[]; stripped: string } - let zhRegions: { regions: string[]; stripped: string } + let sourceRegions: string[] + let zhRegions: string[] try { - sourceRegions = partitionGeneratedRegions(sourceText) - zhRegions = partitionGeneratedRegions(zhText) + sourceRegions = generatedRegions(sourceText).map(region => region.text) + zhRegions = generatedRegions(zhText).map(region => region.text) } catch (error) { errors.push(`${source} ↔ ${zh}: ${error instanceof Error ? error.message : String(error)}`) state.set(source, 'out-of-sync') continue } - const normalizedSourceRegions = sourceRegions.regions.map(region => normalizeTranslationMarkdownLinks(region, { + const normalizedSourceRegions = sourceRegions.map(region => normalizeTranslationMarkdownLinks(region, { repoRoot: root, sourcePath: source, isTranslationPairSource, repositoryFileExists, })) - const normalizedZhRegions = zhRegions.regions.map(region => normalizeTranslationMarkdownLinks(region, { + const normalizedZhRegions = zhRegions.map(region => normalizeTranslationMarkdownLinks(region, { repoRoot: root, sourcePath: zh, isTranslationPairSource,