From 6613660223a79b90254af7e1a3c9805e71e65d7f Mon Sep 17 00:00:00 2001 From: gengruilin Date: Sun, 20 Sep 2026 17:37:44 +0800 Subject: [PATCH 01/35] fix(web): keep model picker focus during mouse selection --- .github/workflows/ci-master.yml | 4 +- .github/workflows/ci.yml | 8 +- apps/web/tests/README.i18n.yaml | 4 +- apps/web/tests/README.md | 2 +- apps/web/tests/README.zh.md | 2 +- apps/web/tests/declared-reasoning.e2e.ts | 114 ++++++++++++++++-- .../pointer-menu.expected.md | 9 ++ .../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 | 7 ++ .../tests/model-select.client.spec.tsx | 22 +++- 12 files changed, 155 insertions(+), 25 deletions(-) create mode 100644 apps/web/tests/expected/declared-reasoning/pointer-menu.expected.md diff --git a/.github/workflows/ci-master.yml b/.github/workflows/ci-master.yml index be96b7effa..75410ad410 100644 --- a/.github/workflows/ci-master.yml +++ b/.github/workflows/ci-master.yml @@ -165,8 +165,8 @@ jobs: # The persistent VM image owns Playwright's Linux system packages; this # step also proves that browser provisioning remains usable for failover. - - name: Install Playwright Chromium - run: pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium + - name: Install Playwright Chromium and WebKit + run: pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium webkit - name: Prepare bubblewrap (unrestrict userns) run: bash scripts/prepare-ci-bubblewrap.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32b58e9bc1..a9c4a71988 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -344,18 +344,18 @@ jobs: r'https://\1/', source.read_text())) PY - - name: Install Playwright Chromium and hosted dependencies + - name: Install Playwright Chromium, WebKit, and hosted dependencies if: vars.DSH_CI_FAILOVER_LINUX != 'selfhosted' || github.event.pull_request.user.login == 'dependabot[bot]' # Ephemeral runner images can carry Ubuntu mirrors whose HTTP endpoints are unreachable. run: | sudo find /etc/apt -maxdepth 2 -type f \( -name '*.list' -o -name '*.sources' \) -exec sed -i -E 's@http://([a-z]{2}\.)?archive\.ubuntu\.com/ubuntu@https://archive.ubuntu.com/ubuntu@g; s@http://security\.ubuntu\.com/ubuntu@https://security.ubuntu.com/ubuntu@g' {} + - pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install --with-deps chromium + pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install --with-deps chromium webkit # The persistent VM image owns Playwright's Linux system packages; do # not mutate the shared host with apt on every failover run. - - name: Install Playwright Chromium on the failover VM + - name: Install Playwright Chromium and WebKit on the failover VM if: vars.DSH_CI_FAILOVER_LINUX == 'selfhosted' && github.event.pull_request.user.login != 'dependabot[bot]' - run: pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium + run: pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium webkit - name: Run compatibility, snapshot, and artifact gates run: pnpm run check:ci:consumers diff --git a/apps/web/tests/README.i18n.yaml b/apps/web/tests/README.i18n.yaml index cf707e6cb3..cb5d2c87e8 100644 --- a/apps/web/tests/README.i18n.yaml +++ b/apps/web/tests/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/web/tests/README.md -README.md: b2fa27bb7a60ed78309bf81e77b9cd5217bbee2a -README.zh.md: 29ae2e86018257a4fc2379ea2563c8b5e5e9036f +README.md: 784eb6c4ac87b3658d488b833ec1befc6aa16895 +README.zh.md: 50c806d1c47d4f8142bd350d44082e3309f06878 diff --git a/apps/web/tests/README.md b/apps/web/tests/README.md index b2fa27bb7a..784eb6c4ac 100644 --- a/apps/web/tests/README.md +++ b/apps/web/tests/README.md @@ -2,7 +2,7 @@ English | [中文](README.zh.md) -These tests boot the real web composition in-process and drive it with a real Chromium over real HTTP. The lane's mechanics — modes, fixtures, goldens, and the deliberate composition divergences from `dsh web` — are documented in [`scaffold.ts`](scaffold.ts) and the [browser e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md). +These tests boot the real web composition in-process and drive it with real browsers over real HTTP. Chromium runs the full lane; the [model and reasoning picker scenario](declared-reasoning.e2e.ts) also runs in WebKit to cover native mouse focus behavior. Both Playwright engines and their system dependencies must be installed. The lane's mechanics — modes, fixtures, goldens, and the deliberate composition divergences from `dsh web` — are documented in [`scaffold.ts`](scaffold.ts) and the [browser e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md). ## Completion observations diff --git a/apps/web/tests/README.zh.md b/apps/web/tests/README.zh.md index 29ae2e8601..50c806d1c4 100644 --- a/apps/web/tests/README.zh.md +++ b/apps/web/tests/README.zh.md @@ -2,7 +2,7 @@ [English](README.md) | 中文 -这些测试在进程内启动真实的 web 组合,并用真实 Chromium 通过真实 HTTP 驱动它。该 lane 的运行机制——模式、fixture(测试前置数据)、golden,以及与 `dsh web` 之间刻意保留的组合差异——记录在 [`scaffold.ts`](scaffold.ts) 和 [浏览器 e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md) 中。 +这些测试在进程内启动真实的 web 组合,并用真实浏览器通过真实 HTTP 驱动它。Chromium 运行整个 lane;[模型与推理强度选择场景](declared-reasoning.e2e.ts) 还在 WebKit 中运行,以覆盖原生鼠标焦点行为。运行前须安装这两种 Playwright 引擎及其系统依赖。该 lane 的运行机制——模式、fixture(测试前置数据)、golden,以及与 `dsh web` 之间刻意保留的组合差异——记录在 [`scaffold.ts`](scaffold.ts) 和 [浏览器 e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md) 中。 ## 完成状态观察 diff --git a/apps/web/tests/declared-reasoning.e2e.ts b/apps/web/tests/declared-reasoning.e2e.ts index 599d98acbf..506fb76397 100644 --- a/apps/web/tests/declared-reasoning.e2e.ts +++ b/apps/web/tests/declared-reasoning.e2e.ts @@ -7,7 +7,7 @@ import { readFile } from 'node:fs/promises' import { fileURLToPath } from 'node:url' import { join } from 'node:path' import type { Browser, Page } from 'playwright' -import { chromium } from 'playwright' +import { chromium, webkit } from 'playwright' import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest' import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, @@ -19,9 +19,13 @@ import { ZH_BROWSER_LOCALE, connectFreshWorkspaceZh, saveFailureShot } from './s const OVERLAY = fileURLToPath(new URL('./declared-reasoning.overlay.yml', import.meta.url)) const SNAPSHOT_DIR = fileURLToPath(new URL('./expected/declared-reasoning', import.meta.url)) const UI_EXPECTED = fileURLToPath(new URL('./expected/declared-reasoning/ui.expected.md', import.meta.url)) +const POINTER_EXPECTED = fileURLToPath(new URL('./expected/declared-reasoning/pointer-menu.expected.md', import.meta.url)) const MODE = webSnapshotMode() -describe.skipIf(MODE === 'record')('web e2e: declared reasoning efforts reach the composer', () => { +describe.skipIf(MODE === 'record').each([ + { name: 'Chromium', engine: chromium }, + { name: 'WebKit', engine: webkit }, +])('web e2e: declared reasoning efforts reach the composer ($name)', ({ engine }) => { let scaffold: WebScaffold let browser: Browser let page: Page @@ -39,15 +43,17 @@ describe.skipIf(MODE === 'record')('web e2e: declared reasoning efforts reach th displayName: 'Acme Gateway', api: 'openai-completions', baseURL: 'https://gateway.acme.example/v1', - models: [{ - id: 'acme-think', - name: 'Acme Think', + models: [ + { id: 'acme-think', name: 'Acme Think' }, + { id: 'acme-swift', name: 'Acme Swift' }, + ].map(model => ({ + ...model, reasoningEfforts: { off: null, high: 'high', max: 'ultra' }, - }], + })), }, }, }) - browser = await chromium.launch() + browser = await engine.launch() page = await browser.newPage({ viewport: { width: 1680, height: 1000 }, locale: ZH_BROWSER_LOCALE }) tripwire = watchConsole(page) await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) @@ -56,12 +62,15 @@ describe.skipIf(MODE === 'record')('web e2e: declared reasoning efforts reach th }, 120_000) afterAll(async () => { - await browser?.close() - await scaffold?.close() + try { + await browser?.close() + } finally { + await scaffold?.close() + } }) it('offers exactly the declared levels and records the picked one', async () => { - onTestFailed(() => saveFailureShot(page, 'web-e2e-declared-reasoning')) + onTestFailed(() => saveFailureShot(page, `web-e2e-declared-reasoning-${engine.name()}`)) const trigger = page.getByRole('button', { name: /^选择模型/ }) await trigger.waitFor({ timeout: 15_000 }) await trigger.click() @@ -125,7 +134,90 @@ describe.skipIf(MODE === 'record')('web e2e: declared reasoning efforts reach th expect(tripwire.pageErrors).toEqual([]) }, 60_000) + it('selects model and effort by mouse and keeps keyboard control after cancelled or rejected clicks', async () => { + onTestFailed(() => saveFailureShot(page, `web-e2e-model-pointer-${engine.name()}`)) + let selections = 0 + page.on('request', (request) => { + if (new URL(request.url()).pathname.endsWith('/session/selectModel')) selections++ + }) + const trigger = page.getByRole('button', { name: /^选择模型/ }) + const menu = page.getByRole('menu') + await trigger.click() + await page.getByRole('menuitem', { name: /^模型/ }).click() + const current = page.getByRole('menuitemradio', { name: 'Acme Think', exact: true }) + const target = page.getByRole('menuitemradio', { name: 'Acme Swift', exact: true }) + await expect.poll(() => current.evaluate(element => element === document.activeElement)).toBe(true) + + // Native mousedown must not blur the focused row and unmount the menu before click in WebKit. + await target.getByText('Acme Swift', { exact: true }).hover() + await page.mouse.down() + try { + expect(await menu.count()).toBe(1) + expect(await current.evaluate(element => element === document.activeElement)).toBe(true) + await page.getByText('Acme Gateway', { exact: true }).hover() + } finally { + await page.mouse.up() + } + expect(selections).toBe(0) + await page.keyboard.press('ArrowDown') + await expect.poll(() => target.evaluate(element => element === document.activeElement)).toBe(true) + await page.keyboard.press('Escape') + await page.keyboard.press('Shift+Tab') + await menu.waitFor({ state: 'detached' }) + + await trigger.click() + await page.getByRole('menuitem', { name: /^模型/ }).click() + await target.getByText('Acme Swift', { exact: true }).click() + await menu.waitFor({ state: 'detached' }) + expect(selections).toBe(1) + expect(scaffold.ctx.agentDefaultModel.currentSelection()?.model).toBe('acme-swift') + + await trigger.click() + await page.getByRole('menuitem', { name: /推理等级/ }).click() + await page.getByRole('menuitemradio', { name: 'Max', exact: true }).click() + await menu.waitFor({ state: 'detached' }) + expect(selections).toBe(2) + expect(scaffold.ctx.agentDefaultModel.currentSelection()?.reasoningEffort).toBe('max') + + await page.route('**/api/session/selectModel', async (route) => { + const envelope = route.request().postDataJSON() as { rpcId: string } + await route.fulfill({ + json: { + type: 'server-response', rpcId: envelope.rpcId, + result: { + ok: false, + error: { code: 'session/writer-held', message: 'writer held', details: { sessionId: 'held-session' } }, + }, + }, + }) + }, { times: 1 }) + await trigger.click() + await page.getByRole('menuitem', { name: /^模型/ }).click() + await expect.poll(() => target.evaluate(element => element === document.activeElement)).toBe(true) + await current.click() + await page.getByRole('alert').waitFor() + expect(selections).toBe(3) + await compareOrRefreshGolden(POINTER_EXPECTED, await captureStableAria(page, '[role="menu"]', scaffold.workspaceCwd), MODE) + expect(await trigger.evaluate(element => element === document.activeElement)).toBe(true) + await page.keyboard.press('Tab') + expect(await target.evaluate(element => element === document.activeElement)).toBe(true) + await page.keyboard.press('ArrowUp') + await expect.poll(() => current.evaluate(element => element === document.activeElement)).toBe(true) + await page.keyboard.press('Escape') + await page.keyboard.press('Escape') + await menu.waitFor({ state: 'detached' }) + + await trigger.click() + await page.getByRole('menuitem', { name: /^模型/ }).click() + await page.locator('[data-composer-input][contenteditable="true"]').focus() + await menu.waitFor({ state: 'detached' }) + await trigger.click() + await page.mouse.click(0, 0) + await menu.waitFor({ state: 'detached' }) + expect(tripwire.pageErrors).toEqual([]) + }) + it('keeps its snapshot inventory closed', async () => { - await assertFixtureInventory(SNAPSHOT_DIR, ['ui.expected.md']) + await assertFixtureInventory(SNAPSHOT_DIR, ['ui.expected.md', 'pointer-menu.expected.md']) }) }) diff --git a/apps/web/tests/expected/declared-reasoning/pointer-menu.expected.md b/apps/web/tests/expected/declared-reasoning/pointer-menu.expected.md new file mode 100644 index 0000000000..21a27082cd --- /dev/null +++ b/apps/web/tests/expected/declared-reasoning/pointer-menu.expected.md @@ -0,0 +1,9 @@ +- menu "模型与推理等级": + - group "DeepSeek": + - text: DeepSeek + - menuitemradio "DeepSeek-V4-Flash" + - menuitemradio "DeepSeek-V4-Flash-Vision-Exp" + - group "Acme Gateway": + - text: Acme Gateway + - menuitemradio "Acme Think" + - menuitemradio "Acme Swift" [checked] diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 671cf8ecc9..691299e059 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: 20d55111a298076a7f41db3a7bcd859f2c8433a6 -README.zh.md: d60c811e7fdd57936f11963916a835064e1fff96 +README.md: d37937178cde77d925087268a7ec247d3fa8d4b4 +README.zh.md: 35dbb28f36d2b5c7f1e254bb40ab5db54808f67c diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index 20d55111a2..d37937178c 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 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`. +Mouse clicks select models and efforts. Releasing a press off the menu button cancels the click and preserves keyboard navigation. While a selection is pending, focus stays on the trigger; a rejected selection leaves the menu open, and Tab returns to the current row. + ### 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. diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index d60c811e7f..35dbb28f36 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 模型控件切换既有 与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,可路由的选择保持不变,触发器提示 `Select model`。 +鼠标点击可选择模型与推理强度。按下后移出菜单按钮再松开会取消点击,并保留键盘导航。等待选择结果时,焦点停在触发按钮;选择被拒绝后菜单保持打开,Tab 可回到当前选中的行。 + ### 模型与推理强度 模型按提供方分组。composer 菜单只显示模型与推理强度名称。`/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..e0ee4c4992 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx +++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx @@ -297,6 +297,8 @@ export function ModelSelect( return } lastActionRef.current = 'select' + // Disabled option rows cannot retain focus while a selection is pending. + triggerRef.current?.focus() void select(selection).then(settleSelection) } @@ -312,6 +314,7 @@ export function ModelSelect( ...effort === undefined ? {} : { reasoningEffort: effort }, } lastActionRef.current = 'select' + triggerRef.current?.focus() void select(selection).then(settleSelection) } @@ -373,6 +376,10 @@ export function ModelSelect( role="menu" aria-label={t('menu.aria')} aria-busy={state.status === 'loading' || busy} + onMouseDown={(event) => { + // WebKit blurs a focused row before click unless the button's mousedown keeps focus. + if (event.target instanceof Element && event.target.closest('button') !== null) event.preventDefault() + }} > {pane === 'root' && ( <> 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..479d45aba3 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 @@ -87,6 +87,7 @@ describe('ModelSelect reasoning effort', () => { reasoningEffort: 'max', }) expect(trigger.getAttribute('aria-label')).toBe('选择模型,当前 DeepSeek-V4-Flash,推理等级 Max') + expect(document.activeElement).toBe(trigger) }) }) @@ -196,10 +197,12 @@ describe('ModelSelect reasoning effort', () => { t={t} />) - fireEvent.click(screen.getByRole('button', { name: /选择模型|当前/ })) + const trigger = screen.getByRole('button', { name: /选择模型|当前/ }) + fireEvent.click(trigger) fireEvent.click(screen.getByRole('menuitem', { name: /模型/ })) fireEvent.click(screen.getByRole('menuitemradio', { name: /DeepSeek-V4-Pro/ })) const toast = await screen.findByRole('alert') + expect(document.activeElement).toBe(trigger) expect(toast.textContent).toBe(sessionInUse ? zh['error.sessionInUse'] : '模型操作失败:session/model-unavailable: session already contains images') @@ -232,7 +235,7 @@ describe('ModelSelect reasoning effort', () => { expect(menu.style.left).toBe('12px') expect(menu.style.top).toBe('12px') // Interactions inside the trigger subtree or the portaled card stay open. - fireEvent.mouseDown(menu) + expect(fireEvent.mouseDown(menu)).toBe(true) fireEvent.mouseDown(trigger) fireEvent.blur(trigger, { relatedTarget: menu }) expect(screen.getByRole('menu')).toBeTruthy() @@ -275,6 +278,21 @@ describe('ModelSelect keyboard walk', () => { return select } + it.each(['model', 'effort'])('keeps focus through a mouse press on a %s row without selecting it', (pane) => { + const select = mountOpen() + const cell = screen.getByRole('menuitem', { name: pane === 'model' ? /^模型/ : /推理等级/ }) + expect(fireEvent.mouseDown(cell.firstElementChild!)).toBe(false) + fireEvent.click(cell) + const rows = screen.getAllByRole('menuitemradio') + const focused = document.activeElement + expect(fireEvent.mouseDown(rows[0]!.firstElementChild!)).toBe(false) + fireEvent.mouseUp(screen.getByRole('menu')) + expect(document.activeElement).toBe(focused) + expect(select).not.toHaveBeenCalled() + fireEvent.keyDown(focused!, { key: 'Escape' }) + expect(document.activeElement).toBe(screen.getByRole('menuitem', { name: pane === 'model' ? /^模型/ : /推理等级/ })) + }) + it('↑↓ walk the rows of the shown pane, wrapping, and stay open', () => { mountOpen() // The trigger holds focus while the menu opens: the first forward step From 06ef26a80fb6d0514d99207c5873531970388258 Mon Sep 17 00:00:00 2001 From: gengruilin Date: Sun, 20 Sep 2026 20:56:34 +0800 Subject: [PATCH 02/35] fix(web): preserve focus when toggling the model picker --- ...9-14-composer-selection-keyboard.i18n.yaml | 4 +- .../2026-09-14-composer-selection-keyboard.md | 4 +- ...26-09-14-composer-selection-keyboard.zh.md | 4 +- .../2026-07-26-ci-failover-runbook.i18n.yaml | 4 +- .../process/2026-07-26-ci-failover-runbook.md | 2 +- .../2026-07-26-ci-failover-runbook.zh.md | 2 +- ...6-07-24-web-gui-browser-e2e-lane.i18n.yaml | 4 +- .../2026-07-24-web-gui-browser-e2e-lane.md | 8 ++-- .../2026-07-24-web-gui-browser-e2e-lane.zh.md | 12 +++--- ...-30-web-browser-snapshot-ci-gate.i18n.yaml | 4 +- ...2026-07-30-web-browser-snapshot-ci-gate.md | 6 +-- ...6-07-30-web-browser-snapshot-ci-gate.zh.md | 6 +-- apps/web/tests/README.i18n.yaml | 4 +- apps/web/tests/README.md | 10 ++++- apps/web/tests/README.zh.md | 10 ++++- apps/web/tests/declared-reasoning.e2e.ts | 43 +++++++++++++++---- docs/testing.i18n.yaml | 4 +- docs/testing.md | 2 +- docs/testing.zh.md | 2 +- .../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 | 34 +++++++++------ .../tests/model-select.client.spec.tsx | 16 +++---- 24 files changed, 124 insertions(+), 69 deletions(-) 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 3476259680..9c3ae26c74 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 @@ -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-14-composer-selection-keyboard.md -2026-09-14-composer-selection-keyboard.md: fb353a7072e7c2245aeeb22af9018edd9a6009f0 -2026-09-14-composer-selection-keyboard.zh.md: f51e5ca5096785ae6d059e3c8497292483490437 +2026-09-14-composer-selection-keyboard.md: 675e7239108604c51f4e9a82b98e164833ff9173 +2026-09-14-composer-selection-keyboard.zh.md: 2b296a609cdd76a407fd4ddcc5855eef2fcfa047 diff --git a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.md b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.md index fb353a7072..675e723910 100644 --- a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.md +++ b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.md @@ -20,6 +20,8 @@ The model seat's dropdown (`ModelSelect`, whose Effort row opens the reasoning-l `ModelSelect` keeps `↑`/`↓` as its focus walk over the rows of the shown pane (wrapping; a step taken while the trigger still holds focus enters at the near end). Tab settles: it activates the row the keyboard is on, and with focus still on the trigger it enters the menu at the row of the value in use instead. Escape and Shift+Tab leave a drilled pane first and otherwise close back to the trigger. A pane switch replaces the row that had focus, so each switch names where the keyboard lands: drilling focuses the row of the value in use (its checked row, or the first row when none is marked), and returning to the root pane focuses the cell that opened the pane left. Without that handoff the focus the unmounted row left on the page body sits outside the card's subtree, where its key handling never sees a keystroke. +Mouse presses on the `ModelSelect` trigger or portaled menu buttons prevent the browser’s default focus transfer: WebKit can otherwise blur the focused row and close the menu before `click`. Native `click` still owns selection and cancellation. Opening the menu or closing it through the trigger puts focus on the trigger. Selection requests return focus there before disabling the option rows, so a rejected request leaves keyboard navigation available. + `Menu`, the shared anchored dropdown behind the composer's permission seat, the preset chip, file cards, and the settings rows, carries the same pairing: while its list is open, Tab settles the focused row — from the anchor's button, Tab enters the list instead — and Escape or Shift+Tab close it and return focus to the anchor's first button. Only a keyboard already on the anchor or inside the list is intercepted, so Tab presses elsewhere on the page keep the browser's traversal even while a menu is open. The row's focus fill is the row's own indication: the browser's default ring would double it, and the fill is the same one the row shows under the pointer, so the visual language stays one per state. Selecting a row hands the keyboard back to the anchor unless the owner moved it itself — a card that focuses its own preview keeps it. The arrows, Home, and End walk the list whether or not `autoFocus` is set — that option now decides only whether opening focuses the first row — the row the keyboard is on carries the same fill a hovered row gets, and closing on Escape or Shift+Tab returns focus to the anchor whenever the menu held it. A dismissed menu stays dismissed: `InputTriggerController` records the identity of the hit the user closed — Escape or Shift+Tab, a pointer dismissal, or a settling pick — and a re-track of that same token with the same query leaves the menu closed, so restoring the caret after a dismissal (or a settled command closing the surface it opened) cannot revive it. A new query or another token re-arms it. @@ -42,7 +44,7 @@ The row contracts are unchanged. Producers already mark their current row `activ ## Verification -[Seat browser evidence](../../../../apps/web/tests/declared-reasoning.e2e.ts) drives a real Chromium against the shipped bundles: it opens the drilled level pane, walks it with `↑`, settles a level with Tab and asserts the saved effort, then reopens the pane and asserts the keyboard lands on that level rather than the top of the list before Shift+Tab walks back to the drilled cell and closes. [Seat keyboard tests](../../../../packages/client/ui-model-selection/tests/model-select.client.spec.tsx) cover the drilled-pane handoff onto the value in use (and onto the first row when no row is marked), the handoff back onto the cell, the `↑`/`↓` walk with both wraps, Tab settling a focused row and entering the menu from the trigger, Shift+Tab leaving a pane then closing, and Tab staying native while the menu is closed. [Popup view tests](../../../../packages/client/ui-commands/tests/popup-view.client.spec.tsx) cover Tab settling the parked highlight with consumption and refocus, Shift+Tab dismissing without settling, Tab consumed while rows load without leaving the card, the arrows staying distinct from the native left/right caret, and the wrap on `↑`/`↓`. [Trigger tests](../../../../packages/client/ui-input-trigger/tests/service.client.spec.ts) cover a dismissal sticking to its hit (Escape, a pointer dismissal, and a settling pick), the same hit re-tracking closed, and a changed query re-arming the menu. [Menu tests](../../../../packages/client/ui-primitives/tests/atoms.client.spec.tsx) cover the arrow walk without `autoFocus` (entering at the near end, wrapping, and stepping over a disabled row), Escape returning focus to the anchor, Tab settling the focused row, Shift+Tab closing back to the anchor, Tab entering the list from the anchor, and an unrelated Tab staying native while the list is open. [Popup controller tests](../../../../packages/client/ui-commands/tests/popup.client.spec.ts) cover the parked highlight, its top-row fallback without a marked row, the re-park inside a search retained across a retry, and the rebase to the top row on typing. The popup panel's Tab has unit coverage only: no Web scenario drives `/model` or `/permission` yet. +[Seat browser evidence](../../../../apps/web/tests/declared-reasoning.e2e.ts) drives real Chromium and WebKit against the shipped bundles: both verify native mouse selection, cancellation, focus after rejected requests, and keyboard navigation. Each opens the drilled level pane, walks it with `↑`, settles a level with Tab and asserts the saved effort, then reopens the pane and asserts the keyboard lands on that level rather than the top of the list before Shift+Tab walks back to the drilled cell and closes. [Seat keyboard tests](../../../../packages/client/ui-model-selection/tests/model-select.client.spec.tsx) cover the drilled-pane handoff onto the value in use (and onto the first row when no row is marked), the handoff back onto the cell, the `↑`/`↓` walk with both wraps, Tab settling a focused row and entering the menu from the trigger, Shift+Tab leaving a pane then closing, and Tab staying native while the menu is closed. [Popup view tests](../../../../packages/client/ui-commands/tests/popup-view.client.spec.tsx) cover Tab settling the parked highlight with consumption and refocus, Shift+Tab dismissing without settling, Tab consumed while rows load without leaving the card, the arrows staying distinct from the native left/right caret, and the wrap on `↑`/`↓`. [Trigger tests](../../../../packages/client/ui-input-trigger/tests/service.client.spec.ts) cover a dismissal sticking to its hit (Escape, a pointer dismissal, and a settling pick), the same hit re-tracking closed, and a changed query re-arming the menu. [Menu tests](../../../../packages/client/ui-primitives/tests/atoms.client.spec.tsx) cover the arrow walk without `autoFocus` (entering at the near end, wrapping, and stepping over a disabled row), Escape returning focus to the anchor, Tab settling the focused row, Shift+Tab closing back to the anchor, Tab entering the list from the anchor, and an unrelated Tab staying native while the list is open. [Popup controller tests](../../../../packages/client/ui-commands/tests/popup.client.spec.ts) cover the parked highlight, its top-row fallback without a marked row, the re-park inside a search retained across a retry, and the rebase to the top row on typing. The popup panel's Tab has unit coverage only: no Web scenario drives `/model` or `/permission` yet. ## Consequences diff --git a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.zh.md b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.zh.md index f51e5ca509..2b296a609c 100644 --- a/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.zh.md +++ b/.agents/notes/implemented/feature/2026-09-14-composer-selection-keyboard.zh.md @@ -20,6 +20,8 @@ composer 内有两个选择界面在打开期间持有焦点,两者都把 Tab `ModelSelect` 的 `↑`/`↓` 仍是在所显示面板行间移动焦点(循环;焦点仍在触发器上时从近端进入)。Tab 执行接受:它激活键盘所在的那一行;焦点仍在触发器上时,改为进入菜单并把焦点放在正在使用的那一行。Escape 与 Shift+Tab 都先退出已下钻的面板,否则关闭并回到触发器。面板切换会替换持有焦点的那一行,因此每次切换都指明键盘的落点:下钻落在正在使用的值那一行(其选中行;没有标记行时为首行),返回根面板则落在打开该面板的那个格子上。没有这一步,已卸载的行留在页面 body 上的焦点就位于卡片自身子树之外,挂在那里的按键处理永远收不到键盘事件。 +在 `ModelSelect` 触发按钮或 portal 菜单按钮上按下鼠标时,阻止浏览器的默认焦点转移:否则 WebKit 可能先让聚焦行失焦,并在 `click` 前关闭菜单。选择和取消仍由原生 `click` 决定。打开菜单或通过触发按钮关闭菜单时,焦点落在触发按钮上。选择请求在禁用选项行前将焦点交回该按钮,因此请求被拒绝后仍可使用键盘导航。 + `Menu`——权限档位、预设芯片、文件卡与设置行背后的共享锚定下拉——沿用同一组配对:列表打开期间,Tab 选定聚焦行(键盘在锚点按钮上时,Tab 改为进入列表),Escape 或 Shift+Tab 关闭并把焦点还给锚点的第一个按钮。只拦截已经位于锚点或列表内的键盘,因此页面其它位置按下的 Tab 即使在菜单打开时也仍归浏览器。行的焦点填充就是行自己的焦点提示:浏览器默认轮廓会与之叠加,而这一填充与指针悬停时用的是同一个,视觉语言因此一态一义。选定一行会把键盘还给锚点——除非拥有者自己移动了焦点(例如文件卡把自己的预览按钮设为焦点)。`↑`/`↓` 与 Home/End 无论是否设置 `autoFocus` 都在列表中走位——该选项如今只决定打开时是否聚焦首行——键盘所在的那一行使用与悬停行相同的填充(否则键盘走位看不出当前行),而 Escape 或 Shift+Tab 关闭时,只要键盘原本在菜单里就把焦点归还锚点。 被关闭的菜单保持关闭:`InputTriggerController` 记下用户关闭的那个命中(Escape/Shift+Tab、指针关闭或一次落定选定)的身份,同一 token 以同一查询重新 track 时菜单保持关闭,因此关闭后恢复光标、或已选定命令关闭它打开的界面,都无法把它召回来;新的查询或另一个 token 才会重新武装。 @@ -42,7 +44,7 @@ composer 内有两个选择界面在打开期间持有焦点,两者都把 Tab ## 验证 -[模型位浏览器证据](../../../../apps/web/tests/declared-reasoning.e2e.ts) 用真实 Chromium 驱动已发布的 bundle:打开已下钻的等级面板,用 `↑` 走位,用 Tab 选定一档并断言保存下来的推理等级,随后重新打开该面板、断言键盘落在那一档而不是列表顶部,再用 Shift+Tab 退回被下钻的格子并关闭。[模型位键盘测试](../../../../packages/client/ui-model-selection/tests/model-select.client.spec.tsx) 覆盖下钻交接落在正在使用的值上(没有标记行时落在首行)、交回给该格子、`↑`/`↓` 的双向循环走位、Tab 选定聚焦行以及从触发器进入菜单、Shift+Tab 先退层再关闭,以及菜单关闭时 Tab 保持原生。[弹窗视图测试](../../../../packages/client/ui-commands/tests/popup-view.client.spec.tsx) 覆盖 Tab 接受停放的高亮并完成消费与焦点归还、Shift+Tab 关闭且不接受、行仍在加载时 Tab 被消费且焦点不离开卡片、方向键与原生左右光标互不干扰,以及 `↑`/`↓` 的循环。[触发流水线测试](../../../../packages/client/ui-input-trigger/tests/service.client.spec.ts) 覆盖关闭粘在它自己的命中上(Escape、指针关闭、落定选定三种)、同一命中重新 track 时保持关闭,以及查询改变后菜单重新武装。[Menu 测试](../../../../packages/client/ui-primitives/tests/atoms.client.spec.tsx) 覆盖不带 `autoFocus` 的方向键走位(从近端进入、两端循环、跳过禁用行)、Escape 把焦点还给锚点、Tab 选定聚焦行、Shift+Tab 关闭并把焦点还给锚点、Tab 从锚点进入列表,以及列表打开期间无关位置的 Tab 保持原生。[弹窗控制器测试](../../../../packages/client/ui-commands/tests/popup.client.spec.ts) 覆盖高亮的停放、没有标记行时退回首行、重试时在保留的搜索内重新停放,以及输入时重定到首行。弹窗面板的 Tab 只有单元覆盖:目前还没有 Web 场景驱动 `/model` 或 `/permission`。 +[模型位浏览器证据](../../../../apps/web/tests/declared-reasoning.e2e.ts) 用真实 Chromium 与 WebKit 驱动已发布的 bundle:两者都验证原生鼠标选择、取消、请求被拒绝后的焦点以及键盘导航。每种引擎都会打开已下钻的等级面板,用 `↑` 走位,用 Tab 选定一档并断言保存下来的推理等级,随后重新打开该面板、断言键盘落在那一档而不是列表顶部,再用 Shift+Tab 退回被下钻的格子并关闭。[模型位键盘测试](../../../../packages/client/ui-model-selection/tests/model-select.client.spec.tsx) 覆盖下钻交接落在正在使用的值上(没有标记行时落在首行)、交回给该格子、`↑`/`↓` 的双向循环走位、Tab 选定聚焦行以及从触发器进入菜单、Shift+Tab 先退层再关闭,以及菜单关闭时 Tab 保持原生。[弹窗视图测试](../../../../packages/client/ui-commands/tests/popup-view.client.spec.tsx) 覆盖 Tab 接受停放的高亮并完成消费与焦点归还、Shift+Tab 关闭且不接受、行仍在加载时 Tab 被消费且焦点不离开卡片、方向键与原生左右光标互不干扰,以及 `↑`/`↓` 的循环。[触发流水线测试](../../../../packages/client/ui-input-trigger/tests/service.client.spec.ts) 覆盖关闭粘在它自己的命中上(Escape、指针关闭、落定选定三种)、同一命中重新 track 时保持关闭,以及查询改变后菜单重新武装。[Menu 测试](../../../../packages/client/ui-primitives/tests/atoms.client.spec.tsx) 覆盖不带 `autoFocus` 的方向键走位(从近端进入、两端循环、跳过禁用行)、Escape 把焦点还给锚点、Tab 选定聚焦行、Shift+Tab 关闭并把焦点还给锚点、Tab 从锚点进入列表,以及列表打开期间无关位置的 Tab 保持原生。[弹窗控制器测试](../../../../packages/client/ui-commands/tests/popup.client.spec.ts) 覆盖高亮的停放、没有标记行时退回首行、重试时在保留的搜索内重新停放,以及输入时重定到首行。弹窗面板的 Tab 只有单元覆盖:目前还没有 Web 场景驱动 `/model` 或 `/permission`。 ## 影响 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 23d245c8c7..1be4833f09 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 @@ -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/process/2026-07-26-ci-failover-runbook.md -2026-07-26-ci-failover-runbook.md: c2fd2fa6cf673ec4d202702c16a9a85a3a609b8d -2026-07-26-ci-failover-runbook.zh.md: 7fa5887bb552afd98cebd7502202fb5e9f37b1ee +2026-07-26-ci-failover-runbook.md: d46f9d140860580011e06aa3b51bb8618a23a114 +2026-07-26-ci-failover-runbook.zh.md: a229d46f16d959356e9108842edd557420e699ae diff --git a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md index c2fd2fa6cf..d46f9d1408 100644 --- a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md +++ b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md @@ -20,7 +20,7 @@ The [superseded-CI cancellation policy](2026-09-09-cancel-superseded-ci.md) gove ### What the in-house pool is -`vm-backup`: one shared VM with multiple always-on systemd-managed runner instances. Registrations share its CPU, memory, and disk; their count is not a count of independent machines. Its image must preinstall Playwright Chromium's Linux system packages; CI downloads the lockfile-selected browser but never runs `apt` on this persistent shared host. Check the latest `serial / linux (self-hosted standby)` run before switching: its aggregate includes browser replay, so a green standby verifies both ordinary capacity and this browser prerequisite. +`vm-backup`: one shared VM with multiple always-on systemd-managed runner instances. Registrations share its CPU, memory, and disk; their count is not a count of independent machines. Its image must preinstall the Linux system packages for Playwright Chromium and WebKit; CI downloads the lockfile-selected browsers but never runs `apt` on this persistent shared host. Check the latest `serial / linux (self-hosted standby)` run before switching: its aggregate includes browser replay, so a green standby verifies both ordinary capacity and this browser prerequisite. #### Windows pool diff --git a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md index 7fa5887bb5..a229d46f16 100644 --- a/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md +++ b/.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md @@ -20,7 +20,7 @@ Status: implemented ### 自有池是什么 -`vm-backup`:一台共享虚拟机,运行多个常驻 systemd 管理的运行器实例。注册实例共享 CPU、内存和磁盘;实例数量不代表独立机器数量。其镜像必须预装 Playwright Chromium 的 Linux 系统软件包;CI 会下载锁文件选定的浏览器,但绝不在这台持久化共享主机上运行 `apt`。切换前先看 `serial / linux (self-hosted standby)` 最近一次运行:其聚合流程包含浏览器回放,因此绿色热备同时验证常规容量和这项浏览器先决条件。 +`vm-backup`:一台共享虚拟机,运行多个常驻 systemd 管理的运行器实例。注册实例共享 CPU、内存和磁盘;实例数量不代表独立机器数量。其镜像必须预装 Playwright Chromium 和 WebKit 所需的 Linux 系统软件包;CI 会下载锁文件选定的浏览器,但绝不在这台持久化共享主机上运行 `apt`。切换前先看 `serial / linux (self-hosted standby)` 最近一次运行:其聚合流程包含浏览器回放,因此绿色热备同时验证常规容量和这项浏览器先决条件。 #### Windows 池 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 dbe621f214..ac15111eb8 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 @@ -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/testing/2026-07-24-web-gui-browser-e2e-lane.md -2026-07-24-web-gui-browser-e2e-lane.md: b08d99a7d750bdeabac3dcbb7007e922d32dbdcd -2026-07-24-web-gui-browser-e2e-lane.zh.md: fbb92a094bbd14042d33e5ebd20d2d3ffd490d43 +2026-07-24-web-gui-browser-e2e-lane.md: eb79591e7b94fccb8eb92aec4024738825d214fc +2026-07-24-web-gui-browser-e2e-lane.zh.md: f715f4ca93b202f72e632e5ddae0d13559a927a7 diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md index b08d99a7d7..eb79591e7b 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md @@ -10,7 +10,7 @@ The web GUI ships as a real assembled chain — chromium page → client plugin ## Decision -`pnpm run test:web` carries a keyless, deterministic browser e2e lane under `apps/web/tests/`: recorded session-log fixtures replay through `@deepseek-ai/dsh-llm-replay` against the real in-process web composition, with normalized aria goldens for user-visible states and in-process assertions for durable world state. The supporting product contracts are `dsh-llm-replay` pacing, consumption checks, and validated indexed override patches; cross-package `dsh-llm` failures retain validated provider facts through own data properties; and the shipped web composition mounts `llm-retry` for transient model failures. +`pnpm run test:web` carries a keyless, deterministic browser e2e lane under `apps/web/tests/`: recorded session-log fixtures replay through `@deepseek-ai/dsh-llm-replay` against the real in-process web composition, with normalized aria goldens for user-visible states and in-process assertions for durable world state. Chromium runs the full lane; the [model and reasoning picker scenario](../../../../apps/web/tests/declared-reasoning.e2e.ts) also runs in WebKit to cover native mouse focus behavior. The supporting product contracts are `dsh-llm-replay` pacing, consumption checks, and validated indexed override patches; cross-package `dsh-llm` failures retain validated provider facts through own data properties; and the shipped web composition mounts `llm-retry` for transient model failures. ### Scaffold: `apps/web/tests/scaffold.ts` @@ -32,7 +32,7 @@ No single-shot transient-DOM assertions: every hop from replay yield to React co Pagination drivers wait for the interactive load row to leave its pending state and record the pre-request row count before scrolling. An immediately committed resident page therefore remains observable instead of becoming the baseline for a request that the scroll gesture does not repeat. -Every scenario fails on any pageerror and on the client's connection-loss/gap-repair console warnings: the reconnect machine plus history resync would otherwise self-heal a dead SSE path and the suite would certify a broken wire. Scaffold `close()` calls the `ReplayHandle.assertConsumed()` teardown check (every recorded script bound, every cursor drained), converting silent underruns and shifted bindings into crisp diagnostics. No vitest retry on the lane; one chromium per file, fresh context per scenario, one host per scenario; viewport pinned; interaction selectors anchor on roles, `data-*` attributes, and visible text, while the frame and conversation-region captures use the existing CSS-module local-name anchors. Standard scenarios open an `en-US` browser so localized role locators and goldens use one explicit language; scenarios asserting Chinese copy open a `zh-CN` browser instead, because the client derives its provisional locale from `navigator` when the Host settings document has no explicit preference ([browser-derived initial locale](../../archived/feature/2026-07-31-browser-derived-initial-locale.md)). `settings-chrome.e2e.ts` additionally covers both switch directions, a fresh English-browser default, and preference persistence across distinct ports sharing one DSH home. +Every scenario fails on any pageerror and on the client's connection-loss/gap-repair console warnings: the reconnect machine plus history resync would otherwise self-heal a dead SSE path and the suite would certify a broken wire. Scaffold `close()` calls the `ReplayHandle.assertConsumed()` teardown check (every recorded script bound, every cursor drained), converting silent underruns and shifted bindings into crisp diagnostics. No vitest retry on the lane; one browser per file and engine, fresh context per scenario, one host per scenario; viewport pinned; interaction selectors anchor on roles, `data-*` attributes, and visible text, while the frame and conversation-region captures use the existing CSS-module local-name anchors. Standard scenarios open an `en-US` browser so localized role locators and goldens use one explicit language; scenarios asserting Chinese copy open a `zh-CN` browser instead, because the client derives its provisional locale from `navigator` when the Host settings document has no explicit preference ([browser-derived initial locale](../../archived/feature/2026-07-31-browser-derived-initial-locale.md)). `settings-chrome.e2e.ts` additionally covers both switch directions, a fresh English-browser default, and preference persistence across distinct ports sharing one DSH home. ### Expected outputs @@ -50,7 +50,7 @@ The lane covers three behavior families. Live-turn scenarios pin ordinary tool e ### CI stance -The lane is a required compare-only gate for Linux pull requests under the [browser snapshot CI decision](2026-07-30-web-browser-snapshot-ci-gate.md). The `node 24 / snapshots and artifacts` consumer job owns the [single Linux build](../../archived/process/2026-07-30-independent-ci-consumer-build.md), installs the lockfile-selected Chromium, restores its OS-and-lockfile-keyed cache, and runs the lane with `DSH_SNAPSHOT=replay`. This is an intentional plane split: the host and specs use the [tsx source-launch contract](../architecture/2026-07-29-dsh-source-launch-tsx-esm.md), while the browser consumes `apps/web/dist` and package `lib/client.js` artifacts, so the gate depends on `built-package-invariants` for those client artifacts. The self-hosted default-branch Linux serial standby runs the same gate; there is no hosted Linux serial producer of the browser cache consumed by pull requests, and the persistent self-hosted pool needs no hosted cache. CI never records or refreshes goldens. Scenarios remain POSIX-oriented and stay outside the Windows and macOS matrices. +The lane is a required compare-only gate for Linux pull requests under the [browser snapshot CI decision](2026-07-30-web-browser-snapshot-ci-gate.md). The `node 24 / snapshots and artifacts` consumer job owns the [single Linux build](../../archived/process/2026-07-30-independent-ci-consumer-build.md), installs the lockfile-selected Chromium and WebKit, restores their OS-and-lockfile-keyed cache, and runs the lane with `DSH_SNAPSHOT=replay`. This is an intentional plane split: the host and specs use the [tsx source-launch contract](../architecture/2026-07-29-dsh-source-launch-tsx-esm.md), while the browser consumes `apps/web/dist` and package `lib/client.js` artifacts, so the gate depends on `built-package-invariants` for those client artifacts. The self-hosted default-branch Linux serial standby runs the same gate; there is no hosted Linux serial producer of the browser cache consumed by pull requests, and the persistent self-hosted pool needs no hosted cache. CI never records or refreshes goldens. Scenarios remain POSIX-oriented and stay outside the Windows and macOS matrices. High-cardinality performance diagnostics use the separate opt-in `apps/web/tests/**/*.perf.ts` inventory selected only by `vitest.web.perf.config.ts`. The isolated `complex-history.perf.ts` cases reuse the real scaffold: the workspace case seeds 1,000 compact sessions plus one 500-turn history containing 500 tool calls, exhausts and remounts that history in Chat, and reports Chromium main-thread, DOM, listener, heap, paging, search, and Trajectory measurements. Two continuation cases seed the same long history but compare the default 24-turn Chat window with all 500 turns expanded before each continues eight identical turns through the real composer, agent loop, SSE wire, tools, and persistence; two turns execute a real `bash` call and assert its durable result, while the final turn fills an 8,232-character mixed-language prompt and replays 120 paced text deltas. A separate soak case starts from a blank session, drives 100 consecutive real composer turns with a `bash` call and result every tenth turn, forces GC every ten turns, and reports ten-turn latency windows plus retained browser state. It then submits a 101st text-only turn with a trusted browser click and measures browser-clock send-to-transcript-DOM and send-to-post-paint latency, excluding the composer's draft mirrors, separately from full-turn completion. Per-turn diagnostics cover composer fill, click-to-user-echo, click-to-first-chunk, completion, browser mutations, persisted chunks, and tool events; the synthetic replay model has enough context capacity to keep fixture cardinality stable instead of consuming scripted calls through compaction. Structural assertions pin the intended load, stream, and tool shapes, but timing remains threshold-free because machine speed is not a correctness contract. The required `vitest.web.config.ts` inventory remains limited to `*.e2e.ts` and `*.snapshot.ts`, so neither `test:web:built` nor its CI gate collects performance cases. @@ -95,4 +95,4 @@ Surveyed AI-chat/agent web UIs and mocking layers (LibreChat, vercel/ai-chatbot ## Consequences -The web surface gains its record-once/replay-forever tier: the real chromium → SSE → apiproxy → loop → tools → persistence chain runs keylessly in ~10-30s, deterministic across repeat runs, with fixtures owned and re-recordable by the lane itself. Costs accepted: every intentional conversation-UI change ends with a keyless `DSH_SNAPSHOT=refresh` (golden churn is reviewed diff, anchors keep semantic green); the aria format is Playwright-owned — the one committed snapshot format the repo does not control — so playwright version bumps must be deliberate bump-and-refresh commits (the dependency floats `^1.49.0` in `apps/web/package.json`; pin exactly if churn bites); replay's first-call-order binding constrains scenarios to one prompting session each, with the consumption assertion as the tripwire; `compaction-basic` shares the session's replay cursor and stays inert only under the published 128k catalog window; and the required consumer job pays for Chromium provisioning and one browser run so the PR that changes the assembled UI owns its expected-output diff. The opt-in performance lane preserves a repeatable, threshold-free diagnostic workload whose measurements require manual interpretation. The separate required [frontend performance benchmarks](2026-09-06-frontend-performance-budgets.md) enforce calibrated budgets in the isolated benchmark CI job; they do not add thresholds to the manual inventory. +The web surface gains its record-once/replay-forever tier: the real chromium → SSE → apiproxy → loop → tools → persistence chain runs keylessly in ~10-30s, deterministic across repeat runs, with fixtures owned and re-recordable by the lane itself. Costs accepted: every intentional conversation-UI change ends with a keyless `DSH_SNAPSHOT=refresh` (golden churn is reviewed diff, anchors keep semantic green); the aria format is Playwright-owned — the one committed snapshot format the repo does not control — so playwright version bumps must be deliberate bump-and-refresh commits (the dependency floats `^1.49.0` in `apps/web/package.json`; pin exactly if churn bites); replay's first-call-order binding constrains scenarios to one prompting session each, with the consumption assertion as the tripwire; `compaction-basic` shares the session's replay cursor and stays inert only under the published 128k catalog window; and the required consumer job pays for Chromium and WebKit provisioning and the browser lane so the PR that changes the assembled UI owns its expected-output diff. The opt-in performance lane preserves a repeatable, threshold-free diagnostic workload whose measurements require manual interpretation. The separate required [frontend performance benchmarks](2026-09-06-frontend-performance-budgets.md) enforce calibrated budgets in the isolated benchmark CI job; they do not add thresholds to the manual inventory. diff --git a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md index fbb92a094b..f715f4ca93 100644 --- a/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md +++ b/.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md @@ -10,9 +10,7 @@ Web GUI 以一条真实组装链交付——chromium 页面 → client 插件 bu ## 决策 -布局断言先等待字体加载、框架过渡完成及 Conversation 宽度发布,再读取尺寸;触发合成 resize 后,还需等待其调度的 React 更新,才能测量通过 portal 挂载的面板。目录树的子目录和根目录读取使用相同的 Remote 等待预算。工作区重载场景在打开另一个路径编辑器前,等待 Session 选择恢复及输入框获得焦点,因为迟到的聚焦会取消路径草稿。响应式文件标签场景将实测通道宽度放在容器查询档位内部,并为平台字体度量保留明确余量。 - -`pnpm run test:web` 携带 `apps/web/tests/` 下的无密钥、确定性浏览器 e2e 车道:录制的会话日志 fixture 经 `@deepseek-ai/dsh-llm-replay` 对真实进程内 web 组合回放;用户可见状态使用规范化的 aria 预期输出,持久化的世界状态则使用进程内断言。配套的产品约定包括 `dsh-llm-replay` 的节奏控制、消费检查与已校验的索引式覆写 patch;跨包的 `dsh-llm` 失败通过自有数据属性保留经校验的提供方信息;已交付的 web 组合挂载 `llm-retry`,以处理瞬态模型失败。 +`pnpm run test:web` 携带 `apps/web/tests/` 下的无密钥、确定性浏览器 e2e 车道:录制的会话日志 fixture 经 `@deepseek-ai/dsh-llm-replay` 对真实进程内 web 组合回放;用户可见状态使用规范化的 aria 预期输出,持久化的世界状态则使用进程内断言。Chromium 运行整个车道;[模型与推理强度选择场景](../../../../apps/web/tests/declared-reasoning.e2e.ts) 还在 WebKit 中运行,以覆盖原生鼠标焦点行为。配套的产品约定包括 `dsh-llm-replay` 的节奏控制、消费检查与已校验的索引式覆写 patch;跨包的 `dsh-llm` 失败通过自有数据属性保留经校验的提供方信息;已交付的 web 组合挂载 `llm-retry`,以处理瞬态模型失败。 ### Scaffold:`apps/web/tests/scaffold.ts` @@ -28,11 +26,13 @@ Web GUI 以一条真实组装链交付——chromium 页面 → client 插件 bu 回放模式下浏览器断言的屏障栈,按序:(1)host 侧 `await agent.whenIdle()` 加超时,以进程内 `turn/end` 为锚——空闲翻转发生在持久化落盘之后,一次等待同时覆盖轮次完成与持久性;(2)浏览器安定轮询(流式输出节点已卸载、最终文本可见)。录制模式下,日志采收在 `whenIdle()` 之后、scaffold 释放之前进行,此时运行中的会话仍然可用。单独监听进程内 `turn/end` 是错误屏障(它先于 SSE 帧到达浏览器、先于 fsync 触发);禁止轮询持久化文件来充当轮次完成或持久性屏障(NFS 上慢,且被 `whenIdle` 取代),但工具控制的临时就绪标记可以仅作为该完成屏障之前的交互门控进行轮询;`networkidle` 被彻底禁止(SSE 流保持打开时它永不解析)。导航断言会在页面加载前同时监听 `session.list` 和 `workspace.list` 的初始响应,随后等待播种数据投影到 DOM;仅凭 shell 已挂载不能判定就绪,因为较晚完成的 bootstrap 可能替换受控状态。 +布局断言先等待字体加载、框架过渡完成及 Conversation 宽度发布,再读取尺寸;触发合成 resize 后,还需等待其调度的 React 更新,才能测量通过 portal 挂载的面板。目录树的子目录和根目录读取使用相同的 Remote 等待预算。工作区重载场景在打开另一个路径编辑器前,等待 Session 选择恢复及输入框获得焦点,因为迟到的聚焦会取消路径草稿。响应式文件标签场景将实测通道宽度放在容器查询档位内部,并为平台字体度量保留明确余量。 + 不做单次瞬态 DOM 断言:从 replay yield 到 React commit 的每一跳都可能合并 chunk,采样 `[data-streaming]` 天然就是竞态。流式增量性通过有序 `agent/assistant-stream` follow path 断言,最终持久 `assistant/message` 或 `assistant/attempt` 则嵌入 replay 使用的精确 stream。`dsh-llm-replay` 的可选 `paceMs`(默认缺省 = burst)只是让浏览器观察到真正增量 SSE 的真实感旋钮;正确性绝不依赖它,且 pace wait 期间 abort 会即时取消。 分页驱动会等待交互式加载行退出 pending 状态,并在滚动前记录请求前的行数。因此,即时提交的常驻页仍然可观测,不会变成一次滚动手势不会重复触发的请求基线。 -每个场景都会因任何 pageerror 或客户端的连接丢失/间隙修复控制台警告而失败:否则重连机制加历史重同步会把一条死掉的 SSE 通路自愈掉,套件反而认证了坏 wire。Scaffold 的 `close()` 调用 `ReplayHandle.assertConsumed()` 收尾检查(每个已录脚本都被绑定、每个游标都耗尽),把静默的少放与错绑变成清晰诊断。车道不设 vitest 重试;每文件一个 chromium、每场景一个新 context、每场景一个 host;视口固定;交互选择器锚定 role、`data-*` 属性和可见文本,而 frame 与会话区采集则使用既有的 CSS 模块局部类名锚点。常规场景开启 `en-US` 浏览器,使本地化的 role 定位器和预期输出统一采用明确指定的语言;断言中文文案的场景则开启 `zh-CN` 浏览器,因为 Host settings 文档没有显式偏好时,客户端的暂定 locale 由 `navigator` 推导([由浏览器推导初始 locale](../../archived/feature/2026-07-31-browser-derived-initial-locale.md))。`settings-chrome.e2e.ts` 还额外覆盖双向切换、全新英文浏览器默认态,以及共享同一 DSH home 的不同端口之间的偏好持久化。 +每个场景都会因任何 pageerror 或客户端的连接丢失/间隙修复控制台警告而失败:否则重连机制加历史重同步会把一条死掉的 SSE 通路自愈掉,套件反而认证了坏 wire。Scaffold 的 `close()` 调用 `ReplayHandle.assertConsumed()` 收尾检查(每个已录脚本都被绑定、每个游标都耗尽),把静默的少放与错绑变成清晰诊断。车道不设 vitest 重试;每个文件中的每种引擎各启动一个浏览器、每场景一个新 context、每场景一个 host;视口固定;交互选择器锚定 role、`data-*` 属性和可见文本,而 frame 与会话区采集则使用既有的 CSS 模块局部类名锚点。常规场景开启 `en-US` 浏览器,使本地化的 role 定位器和预期输出统一采用明确指定的语言;断言中文文案的场景则开启 `zh-CN` 浏览器,因为 Host settings 文档没有显式偏好时,客户端的暂定 locale 由 `navigator` 推导([由浏览器推导初始 locale](../../archived/feature/2026-07-31-browser-derived-initial-locale.md))。`settings-chrome.e2e.ts` 还额外覆盖双向切换、全新英文浏览器默认态,以及共享同一 DSH home 的不同端口之间的偏好持久化。 ### 预期输出 @@ -50,7 +50,7 @@ Web GUI 以一条真实组装链交付——chromium 页面 → client 插件 bu ### CI 立场 -根据[浏览器快照 CI 决策](2026-07-30-web-browser-snapshot-ci-gate.zh.md),该车道是 Linux 拉取请求必需的只比较门禁。`node 24 / snapshots and artifacts` 消费方任务在[消费方独立构建](../../archived/process/2026-07-30-independent-ci-consumer-build.md)中负责唯一一次 Linux 构建,安装锁文件选定的 Chromium,恢复以操作系统和锁文件为键的缓存,并用 `DSH_SNAPSHOT=replay` 运行该车道。这是有意的平面切分:host 与 spec 使用 [tsx 源码启动约定](../architecture/2026-07-29-dsh-source-launch-tsx-esm.zh.md),浏览器则消费 `apps/web/dist` 和包的 `lib/client.js` 产物,因此门禁依赖 `built-package-invariants` 提供这些客户端产物。自托管的默认分支 Linux 串行热备运行同一门禁;不存在托管 Linux 串行生产者生成供 PR 消费的浏览器缓存,持久化自托管池则不需要托管侧缓存。CI 从不录制或刷新预期输出。场景仍面向 POSIX,并继续置于 Windows 和 macOS 矩阵之外。 +根据[浏览器快照 CI 决策](2026-07-30-web-browser-snapshot-ci-gate.zh.md),该车道是 Linux 拉取请求必需的只比较门禁。`node 24 / snapshots and artifacts` 消费方任务在[消费方独立构建](../../archived/process/2026-07-30-independent-ci-consumer-build.md)中负责唯一一次 Linux 构建,安装锁文件选定的 Chromium 和 WebKit,恢复以操作系统和锁文件为键的缓存,并用 `DSH_SNAPSHOT=replay` 运行该车道。这是有意的平面切分:host 与 spec 使用 [tsx 源码启动约定](../architecture/2026-07-29-dsh-source-launch-tsx-esm.zh.md),浏览器则消费 `apps/web/dist` 和包的 `lib/client.js` 产物,因此门禁依赖 `built-package-invariants` 提供这些客户端产物。自托管的默认分支 Linux 串行热备运行同一门禁;不存在托管 Linux 串行生产者生成供 PR 消费的浏览器缓存,持久化自托管池则不需要托管侧缓存。CI 从不录制或刷新预期输出。场景仍面向 POSIX,并继续置于 Windows 和 macOS 矩阵之外。 高基数性能诊断使用单独按需启用的 `apps/web/tests/**/*.perf.ts` 清单,并且只由 `vitest.web.perf.config.ts` 选中。`complex-history.perf.ts` 的隔离用例复用真实 scaffold:工作区用例播种 1,000 个紧凑会话以及一份包含 500 次工具调用的 500 轮次历史,在 Chat 中穷尽并重新挂载该历史,并报告 Chromium 主线程、DOM、监听器、堆内存、分页、搜索和 Trajectory 测量结果。两个续聊用例播种同一份长历史,但比较默认的 24 轮次 Chat 窗口与展开全部 500 轮次的状态,然后各自通过真实输入框、agent loop、SSE wire、工具和持久化继续进行 8 个相同轮次;其中两轮执行真实 `bash` 调用并断言其持久化结果,最后一轮则填入一条包含 8,232 个字符的混合语言提示词,并回放 120 个带节奏的文本增量。一个单独的 soak 用例从空白会话开始,通过真实输入框连续驱动 100 轮,每第 10 轮执行一次 `bash` 调用并产生结果,每 10 轮强制执行一次 GC,并报告每 10 轮的延迟窗口及保留的浏览器状态。随后它通过受信任的浏览器点击提交第 101 个纯文本轮次,并使用浏览器时钟分别测量发送到 transcript DOM 和发送到绘制后的延迟,排除输入框的草稿镜像,并与完整轮次完成时间分开。逐轮诊断涵盖输入框填入、点击到用户消息回显、点击到首个分片、完成、浏览器变更、持久化分片和工具事件;合成回放模型拥有足够的上下文容量,可使 fixture 基数保持稳定,而不会因压缩(compaction)消耗脚本化调用。结构性断言钉住预期的负载、流和工具形状,但时间仍不设阈值,因为机器速度不属于正确性约定。必需的 `vitest.web.config.ts` 清单仍仅限 `*.e2e.ts` 和 `*.snapshot.ts`,因此 `test:web:built` 及其 CI 门禁都不会收集性能用例。 @@ -95,4 +95,4 @@ Web GUI 以一条真实组装链交付——chromium 页面 → client 插件 bu ## 后果 -Web 表面获得了录制一次/永久回放的层级:真实 chromium → SSE → apiproxy → 循环 → 工具 → 持久化的链路以约 10-30 秒无密钥运行,重复运行结果确定,fixture 由车道自身持有并可重录。接受的成本:每次有意的会话 UI 变更都以一次无密钥 `DSH_SNAPSHOT=refresh` 收尾(预期输出变动是受评审的 diff,锚断言保住语义绿色);aria 格式归 Playwright 所有——仓库唯一不受自己控制的提交快照格式——因此 playwright 版本升级必须是刻意的升级加刷新提交(依赖在 `apps/web/package.json` 中浮动为 `^1.49.0`;若变动伤人则改为精确锁定);回放的首次调用顺序绑定把每个场景限制为至多一个发起提示的会话,消费断言是绊线;`compaction-basic` 与会话共享回放游标,仅在目录中发布的 128k 上下文窗口下保持闲置;必需的消费方任务承担 Chromium 供给与一次浏览器运行的成本,使改动组装后 UI 的 PR(Pull Request)持有相应的预期输出 diff。按需启用的性能车道保留可重复、无阈值的诊断工作负载,其测量需要人工解读。独立的必需[前端性能基准](2026-09-06-frontend-performance-budgets.zh.md)在隔离的基准 CI job 中执行经校准的预算;它们不向手动清单添加阈值。 +Web 表面获得了录制一次/永久回放的层级:真实 chromium → SSE → apiproxy → 循环 → 工具 → 持久化的链路以约 10-30 秒无密钥运行,重复运行结果确定,fixture 由车道自身持有并可重录。接受的成本:每次有意的会话 UI 变更都以一次无密钥 `DSH_SNAPSHOT=refresh` 收尾(预期输出变动是受评审的 diff,锚断言保住语义绿色);aria 格式归 Playwright 所有——仓库唯一不受自己控制的提交快照格式——因此 playwright 版本升级必须是刻意的升级加刷新提交(依赖在 `apps/web/package.json` 中浮动为 `^1.49.0`;若变动伤人则改为精确锁定);回放的首次调用顺序绑定把每个场景限制为至多一个发起提示的会话,消费断言是绊线;`compaction-basic` 与会话共享回放游标,仅在目录中发布的 128k 上下文窗口下保持闲置;必需的消费方任务承担 Chromium 与 WebKit 供给及浏览器车道的成本,使改动组装后 UI 的 PR(Pull Request)持有相应的预期输出 diff。按需启用的性能车道保留可重复、无阈值的诊断工作负载,其测量需要人工解读。独立的必需[前端性能基准](2026-09-06-frontend-performance-budgets.zh.md)在隔离的基准 CI job 中执行经校准的预算;它们不向手动清单添加阈值。 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 f3df1f5527..8ee011ccaa 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 @@ -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/testing/2026-07-30-web-browser-snapshot-ci-gate.md -2026-07-30-web-browser-snapshot-ci-gate.md: d1c8dcdd859d0515804cc6aed0d2f3341beb6dd0 -2026-07-30-web-browser-snapshot-ci-gate.zh.md: 9d642819e09abc63384f4f4eb105d13261a9eb95 +2026-07-30-web-browser-snapshot-ci-gate.md: 352072bca6e1a9e1d5b72973d2c3c9e96bc58ad9 +2026-07-30-web-browser-snapshot-ci-gate.zh.md: e6a440bc909fa814da4e2a19a344982cc6f330fb diff --git a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md index d1c8dcdd85..352072bca6 100644 --- a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md +++ b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md @@ -12,13 +12,13 @@ The [keyless web browser e2e lane](2026-07-24-web-gui-browser-e2e-lane.md) runs For Linux PRs, the `node 24 / snapshots and artifacts` job must run the full web browser replay/compare suite. When `DSH_WEB_SNAPSHOT_WORKERS` is configured, `scripts/run-gates.ts` registers `test:web:ci` as the `ci-consumers` gate and explicitly injects `DSH_SNAPSHOT=replay`; CI never runs in `record` or `refresh` mode, so when the committed goldens disagree with the currently assembled application, the tests fail directly instead of silently rewriting them on the runner and then passing. -The consumer job owns the [single Linux build](../../archived/process/2026-07-30-independent-ci-consumer-build.md), so `apps/web/dist` and the package `lib/` directories remain in its workspace for the browser suite. On hosted runners, CI installs Chromium and its system dependencies at the Playwright version in the lockfile. On the persistent failover VM, the image owns the Linux system packages and CI installs only Chromium, avoiding per-run `apt` mutation. Pull requests restore the operating-system-and-lockfile-keyed browser cache without paying compression and upload on the required path, with an operating-system prefix fallback across lockfile changes. No master job produces these hosted caches, so restores hit archived entries until they evict. The self-hosted standby runs the same comparison without hosted cache actions. +The consumer job owns the [single Linux build](../../archived/process/2026-07-30-independent-ci-consumer-build.md), so `apps/web/dist` and the package `lib/` directories remain in its workspace for the browser suite. Chromium runs the full suite; the model and reasoning picker also runs in WebKit to cover native mouse focus behavior. On hosted runners, CI installs both engines and their system dependencies at the Playwright version in the lockfile. On the persistent failover VM, the image owns both engines’ Linux system packages and CI installs only the browser binaries, avoiding per-run `apt` mutation. Pull requests restore the operating-system-and-lockfile-keyed browser cache without paying compression and upload on the required path, with an operating-system prefix fallback across lockfile changes. No master job produces these hosted caches, so restores hit archived entries until they evict. The self-hosted standby runs the same comparison without hosted cache actions. Local `pnpm run test:web` continues to build first and then run the full browser suite serially; `test:web:built` is the serial entry point for existing build artifacts. Developers explicitly run `DSH_SNAPSHOT=refresh pnpm run test:web` only after confirming that user-visible output changed intentionally, review every expected-output diff, and then verify again in replay mode that no files are written. CI’s `scripts/run-web-snapshots.ts` runs `hmr-live.e2e.ts` separately because it mutates built workspace state. One six-worker Vitest pool then runs every remaining file, including historical Cordis-card rendering. Every child inherits stdio, and `run-gates` streams its output. -For pull requests, the gate runs only in the Linux consumer job: these scenarios target POSIX, and the other PR jobs do not provision Chromium. The self-hosted default-branch Linux serial standby also includes the comparison, while the macOS and Windows serial jobs remain browser-free (there is no hosted Linux serial aggregate). A PR's `all checks passed` verdict already depends on the consumer job, so a browser compare failure blocks the merge without requiring a new branch-protection check name. +For pull requests, the gate runs only in the Linux consumer job: these scenarios target POSIX, and the other PR jobs do not provision both engines. The self-hosted default-branch Linux serial standby also includes the comparison, while the macOS and Windows serial jobs remain browser-free (there is no hosted Linux serial aggregate). A PR's `all checks passed` verdict already depends on the consumer job, so a browser compare failure blocks the merge without requiring a new branch-protection check name. Completed local replays measured the six-worker browser command at about 65–71 seconds. A twelve-worker comparison completed in about 50 seconds, so halving the browser worker budget adds about 15–20 seconds rather than doubling wall time. The gate scheduler starts browser snapshots as soon as `built-package-invariants` succeeds and runs independent gates concurrently, so it needs neither a dedicated job timeout nor a manual YAML ordering rule. @@ -36,4 +36,4 @@ Completed local replays measured the six-worker browser command at about 65–71 ## Consequences -Before merge, every PR proves that the current web assembly matches all committed browser expected outputs; a missing refresh fails in the same PR that changes the assembly. The cost is Chromium provisioning, one serial scenario, and one bounded six-worker pool in the consumer job; the consumer-owned build and browser cache avoid duplicate builds and downloads on reruns. Parallel-file failures stream immediately, but a worker-budget change still requires a completed end-to-end measurement rather than an elapsed-time guess. The gate makes no claim of cross-platform browser consistency, and if a Playwright/Chromium upgrade changes the ARIA format, the upgrade PR must explicitly refresh the expected outputs and review the churn. +Before merge, every PR proves that the current web assembly matches all committed browser expected outputs; a missing refresh fails in the same PR that changes the assembly. The cost is Chromium and WebKit provisioning, one serial scenario, and one bounded six-worker pool in the consumer job; the consumer-owned build and browser cache avoid duplicate builds and downloads on reruns. Parallel-file failures stream immediately, but a worker-budget change still requires a completed end-to-end measurement rather than an elapsed-time guess. The gate makes no claim of cross-platform browser consistency, and if a Playwright or browser upgrade changes the ARIA format, the upgrade PR must explicitly refresh the expected outputs and review the churn. diff --git a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md index 9d642819e0..e6a440bc90 100644 --- a/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md +++ b/.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md @@ -12,13 +12,13 @@ Status: implemented Linux PR 的 `node 24 / snapshots and artifacts` 必须运行完整 Web 浏览器 replay/compare。配置 `DSH_WEB_SNAPSHOT_WORKERS` 后,`scripts/run-gates.ts` 把 `test:web:ci` 登记为 `ci-consumers` 门禁,并显式注入 `DSH_SNAPSHOT=replay`;CI 永不以 `record` 或 `refresh` 模式运行,因此提交的预期输出与当前组装应用不一致时测试直接失败,不会在 runner 内静默改写后通过。 -消费方 job 在[消费方独立构建](../../archived/process/2026-07-30-independent-ci-consumer-build.md)中负责唯一一次 Linux 构建,因此 `apps/web/dist` 和包的 `lib/` 目录会保留在其工作区中,供浏览器套件使用。在托管运行器上,CI 按锁文件中的 Playwright 版本安装 Chromium 及其系统依赖。在持久化故障切换 VM 上,镜像负责预装 Linux 系统软件包,CI 只安装 Chromium,避免每次运行都通过 `apt` 改动系统。PR 恢复以操作系统和锁文件为键的浏览器缓存,使必需路径无需承担压缩和上传开销,并可在锁文件变化时按操作系统前缀回退。没有任何 master 作业生成这些 hosted 缓存,因此恢复只能命中仍有归档的旧条目,直至其被逐出。自托管热备运行相同的比较,但不执行托管缓存操作。 +消费方 job 在[消费方独立构建](../../archived/process/2026-07-30-independent-ci-consumer-build.md)中负责唯一一次 Linux 构建,因此 `apps/web/dist` 和包的 `lib/` 目录会保留在其工作区中,供浏览器套件使用。Chromium 运行完整套件;模型与推理强度选择场景还在 WebKit 中运行,以覆盖原生鼠标焦点行为。在托管运行器上,CI 按锁文件中的 Playwright 版本安装这两种引擎及其系统依赖。在持久化故障切换 VM 上,镜像负责预装两种引擎的 Linux 系统软件包,CI 只安装浏览器程序,避免每次运行都通过 `apt` 改动系统。PR 恢复以操作系统和锁文件为键的浏览器缓存,使必需路径无需承担压缩和上传开销,并可在锁文件变化时按操作系统前缀回退。没有任何 master 作业生成这些 hosted 缓存,因此恢复只能命中仍有归档的旧条目,直至其被逐出。自托管热备运行相同的比较,但不执行托管缓存操作。 本地 `pnpm run test:web` 仍先构建,再串行运行完整浏览器套件;`test:web:built` 是已有构建产物的串行执行入口。开发者只在确认用户可见输出有意变化后显式运行 `DSH_SNAPSHOT=refresh pnpm run test:web`,评审每一处预期输出 diff,再以 replay 模式复验不再写文件。 CI 的 `scripts/run-web-snapshots.ts` 单独运行会修改构建产物的 `hmr-live.e2e.ts`。随后由一个六 worker Vitest 池运行其余文件,包括历史 Cordis 卡片渲染。所有子进程继承 stdio,由 `run-gates` 流式转发输出。 -对 PR 而言,门禁仅在 Linux 消费方 job 中运行:这些场景面向 POSIX,其他 PR job 不安装 Chromium。自托管的默认分支 Linux 串行热备也包含该比较,而 macOS 和 Windows 串行 job 仍不使用浏览器(不存在托管的 Linux 串行聚合)。PR 的 `all checks passed` 已依赖消费方 job,因此浏览器比较失败会阻止合并,无需新增 branch-protection check 名称。 +对 PR 而言,门禁仅在 Linux 消费方 job 中运行:这些场景面向 POSIX,其他 PR job 不安装这两种引擎。自托管的默认分支 Linux 串行热备也包含该比较,而 macOS 和 Windows 串行 job 仍不使用浏览器(不存在托管的 Linux 串行聚合)。PR 的 `all checks passed` 已依赖消费方 job,因此浏览器比较失败会阻止合并,无需新增 branch-protection check 名称。 完整本地 replay 中,6-worker 浏览器命令耗时约 65–71 秒。12-worker 对比约为 50 秒,因此把浏览器 worker 预算减半只增加约 15–20 秒,而不是让墙钟时间翻倍。门禁调度器会在 `built-package-invariants` 成功后立即启动浏览器快照,并发运行彼此独立的门禁,因此既不需要专用 job 超时,也不需要手动制定 YAML 顺序规则。 @@ -36,4 +36,4 @@ CI 的 `scripts/run-web-snapshots.ts` 单独运行会修改构建产物的 `hmr- ## 后果 -每个 PR 都在合并前证明当前 Web 组装与所有已提交的浏览器预期输出一致;漏刷会在改变该组装的同一个 PR 中失败。成本是消费方 job 需要安装 Chromium、串行运行 2 个场景并执行 1 个有界 6-worker 池;消费方独立构建与浏览器缓存避免重跑时重复构建和下载。并行文件的失败会立即流式显示,但 worker 预算的任何变化仍需要完整端到端测量,而不能依据运行中耗时猜测。门禁不声称跨平台浏览器一致性,Playwright/Chromium 升级若改变 ARIA 格式,升级 PR 必须显式 refresh 并评审 churn。 +每个 PR 都在合并前证明当前 Web 组装与所有已提交的浏览器预期输出一致;漏刷会在改变该组装的同一个 PR 中失败。成本是消费方 job 需要安装 Chromium 和 WebKit、串行运行 1 个场景并执行 1 个有界 6-worker 池;消费方独立构建与浏览器缓存避免重跑时重复构建和下载。并行文件的失败会立即流式显示,但 worker 预算的任何变化仍需要完整端到端测量,而不能依据运行中耗时猜测。门禁不声称跨平台浏览器一致性,Playwright 或浏览器升级若改变 ARIA 格式,升级 PR 必须显式 refresh 并评审 churn。 diff --git a/apps/web/tests/README.i18n.yaml b/apps/web/tests/README.i18n.yaml index cb5d2c87e8..3cb8ede0b0 100644 --- a/apps/web/tests/README.i18n.yaml +++ b/apps/web/tests/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/web/tests/README.md -README.md: 784eb6c4ac87b3658d488b833ec1befc6aa16895 -README.zh.md: 50c806d1c47d4f8142bd350d44082e3309f06878 +README.md: 13168c145ebb21763d015b7bf57de8f15026af1a +README.zh.md: 0afe359a4349c2df0326dcc3dca1e6de3db8201a diff --git a/apps/web/tests/README.md b/apps/web/tests/README.md index 784eb6c4ac..13168c145e 100644 --- a/apps/web/tests/README.md +++ b/apps/web/tests/README.md @@ -2,7 +2,15 @@ English | [中文](README.zh.md) -These tests boot the real web composition in-process and drive it with real browsers over real HTTP. Chromium runs the full lane; the [model and reasoning picker scenario](declared-reasoning.e2e.ts) also runs in WebKit to cover native mouse focus behavior. Both Playwright engines and their system dependencies must be installed. The lane's mechanics — modes, fixtures, goldens, and the deliberate composition divergences from `dsh web` — are documented in [`scaffold.ts`](scaffold.ts) and the [browser e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md). +These tests boot the real web composition in-process and drive it with real browsers over real HTTP. Chromium runs the full lane; the [model and reasoning picker scenario](declared-reasoning.e2e.ts) also runs in WebKit to cover native mouse focus behavior. The lane's mechanics — modes, fixtures, goldens, and the deliberate composition divergences from `dsh web` — are documented in [`scaffold.ts`](scaffold.ts) and the [browser e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md). + +After installing workspace dependencies, install the browser binaries from the repository root: + +```sh +pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium webkit +``` + +Linux also needs Playwright's system packages for both engines. The persistent CI VM must provide them through image maintenance, as required by the [failover runbook](../../../.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md). ## Completion observations diff --git a/apps/web/tests/README.zh.md b/apps/web/tests/README.zh.md index 50c806d1c4..0afe359a43 100644 --- a/apps/web/tests/README.zh.md +++ b/apps/web/tests/README.zh.md @@ -2,7 +2,15 @@ [English](README.md) | 中文 -这些测试在进程内启动真实的 web 组合,并用真实浏览器通过真实 HTTP 驱动它。Chromium 运行整个 lane;[模型与推理强度选择场景](declared-reasoning.e2e.ts) 还在 WebKit 中运行,以覆盖原生鼠标焦点行为。运行前须安装这两种 Playwright 引擎及其系统依赖。该 lane 的运行机制——模式、fixture(测试前置数据)、golden,以及与 `dsh web` 之间刻意保留的组合差异——记录在 [`scaffold.ts`](scaffold.ts) 和 [浏览器 e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md) 中。 +这些测试在进程内启动真实的 web 组合,并用真实浏览器通过真实 HTTP 驱动它。Chromium 运行整个 lane;[模型与推理强度选择场景](declared-reasoning.e2e.ts) 还在 WebKit 中运行,以覆盖原生鼠标焦点行为。该 lane 的运行机制——模式、fixture(测试前置数据)、golden,以及与 `dsh web` 之间刻意保留的组合差异——记录在 [`scaffold.ts`](scaffold.ts) 和 [浏览器 e2e Agent Note](../../../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md) 中。 + +安装工作区依赖后,在仓库根目录安装浏览器程序: + +```sh +pnpm --filter @deepseek-ai/dsh-web-frontend exec playwright install chromium webkit +``` + +Linux 还需要这两种引擎的 Playwright 系统软件包。持久化 CI VM 必须通过镜像维护提供这些依赖,遵循[故障切换手册](../../../.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md)的要求。 ## 完成状态观察 diff --git a/apps/web/tests/declared-reasoning.e2e.ts b/apps/web/tests/declared-reasoning.e2e.ts index 506fb76397..f82d72bd8b 100644 --- a/apps/web/tests/declared-reasoning.e2e.ts +++ b/apps/web/tests/declared-reasoning.e2e.ts @@ -6,9 +6,9 @@ import { readFile } from 'node:fs/promises' import { fileURLToPath } from 'node:url' import { join } from 'node:path' -import type { Browser, Page } from 'playwright' +import type { Browser, Page, Request } from 'playwright' import { chromium, webkit } from 'playwright' -import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest' +import { afterAll, beforeAll, describe, expect, it, onTestFailed, onTestFinished } from 'vitest' import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold, @@ -134,12 +134,38 @@ describe.skipIf(MODE === 'record').each([ expect(tripwire.pageErrors).toEqual([]) }, 60_000) + it('opens from the pointer with keyboard focus and closes from the trigger in every pane', async () => { + onTestFailed(() => saveFailureShot(page, `web-e2e-model-trigger-${engine.name()}`)) + const trigger = page.getByRole('button', { name: /^选择模型/ }) + const menu = page.getByRole('menu') + for (const pane of ['root', 'model', 'effort']) { + await page.locator('[data-composer-input][contenteditable="true"]').focus() + await trigger.click() + await expect.poll(() => trigger.evaluate(element => element === document.activeElement)).toBe(true) + if (pane === 'root') { + await page.keyboard.press('ArrowDown') + await expect.poll(() => page.getByRole('menuitem', { name: /^模型/ }) + .evaluate(element => element === document.activeElement)).toBe(true) + } else { + await page.getByRole('menuitem', { name: pane === 'model' ? /^模型/ : /推理等级/ }).click() + await expect.poll(() => page.locator('[role="menuitemradio"][aria-checked="true"]') + .evaluate(element => element === document.activeElement)).toBe(true) + } + await trigger.click() + await menu.waitFor({ state: 'detached' }) + await expect.poll(() => trigger.evaluate(element => element === document.activeElement)).toBe(true) + } + expect(tripwire.pageErrors).toEqual([]) + }) + it('selects model and effort by mouse and keeps keyboard control after cancelled or rejected clicks', async () => { onTestFailed(() => saveFailureShot(page, `web-e2e-model-pointer-${engine.name()}`)) let selections = 0 - page.on('request', (request) => { + const countSelection = (request: Request): void => { if (new URL(request.url()).pathname.endsWith('/session/selectModel')) selections++ - }) + } + page.on('request', countSelection) + onTestFinished(() => { page.off('request', countSelection) }) const trigger = page.getByRole('button', { name: /^选择模型/ }) const menu = page.getByRole('menu') await trigger.click() @@ -152,12 +178,13 @@ describe.skipIf(MODE === 'record').each([ await target.getByText('Acme Swift', { exact: true }).hover() await page.mouse.down() try { - expect(await menu.count()).toBe(1) - expect(await current.evaluate(element => element === document.activeElement)).toBe(true) + await expect.poll(() => menu.count()).toBe(1) + await expect.poll(() => current.evaluate(element => element === document.activeElement)).toBe(true) await page.getByText('Acme Gateway', { exact: true }).hover() } finally { await page.mouse.up() } + // Later selection counts also include any request from this cancelled press. expect(selections).toBe(0) await page.keyboard.press('ArrowDown') await expect.poll(() => target.evaluate(element => element === document.activeElement)).toBe(true) @@ -198,9 +225,9 @@ describe.skipIf(MODE === 'record').each([ await page.getByRole('alert').waitFor() expect(selections).toBe(3) await compareOrRefreshGolden(POINTER_EXPECTED, await captureStableAria(page, '[role="menu"]', scaffold.workspaceCwd), MODE) - expect(await trigger.evaluate(element => element === document.activeElement)).toBe(true) + await expect.poll(() => trigger.evaluate(element => element === document.activeElement)).toBe(true) await page.keyboard.press('Tab') - expect(await target.evaluate(element => element === document.activeElement)).toBe(true) + await expect.poll(() => target.evaluate(element => element === document.activeElement)).toBe(true) await page.keyboard.press('ArrowUp') await expect.poll(() => current.evaluate(element => element === document.activeElement)).toBe(true) await page.keyboard.press('Escape') diff --git a/docs/testing.i18n.yaml b/docs/testing.i18n.yaml index a044baf3b1..583a4c1f73 100644 --- a/docs/testing.i18n.yaml +++ b/docs/testing.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/testing.md -testing.md: 95badfd66ba49151a64dad3f5959a12265449f97 -testing.zh.md: a715fb0a6f285a908857a90e848213f42cc040cf +testing.md: c726270b796f6de125a762436ccd5bc7c74ba3bc +testing.zh.md: 977960c76d6455389a4058ebac305e6690342278 diff --git a/docs/testing.md b/docs/testing.md index 95badfd66b..c726270b79 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -12,7 +12,7 @@ How this repo tests, tier by tier, and the rules that keep a green suite meaning - **Owner-local expected output** (`pnpm run test:expected`): keyless assembled CLI/process expectations without a recorded-session round trip. Drivers use `*.expected.e2e.ts` beside `tests/expected/`; CI runs built exports. Package/script expectations use `test`, while browser expectations use `test:web`. - **Performance benchmarks** (`pnpm run test:bench`; required Linux PR gate `node 24 / benchmarks`): `benchmarks/` groups user-path gates. It builds libraries and workers; timed code runs under plain Node, never TSX. Synthetic inputs enforce time, heap, and scaling budgets; package-local `.perf.ts` stays diagnostic ([rules](../.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.md)). - **Snapshot** (`pnpm run test:snapshot`): a top-level scenario's highest recorded parent generation supplies user input and model replay, then serves as the expected persisted result. Parent filenames are `session[.vN].jsonl`; child roles are `session.[.vN].jsonl`; v0 omits `.v0`, positive versions require lowercase `.vN`, and each filename must agree with its header. Process scenarios start through `dsh`: headless owns one-shot behavior, the SDK owns persistent control, ACP owns automation-protocol behavior, and Web retains browser/ARIA evidence beside the same Session. `snapshot.yml` declares the profile, composition/header class, recording policy, exceptional replay or input metadata, and workspace facts. Typed tokens preserve parent/child identity relationships; only header pins own prompt/schema sidecars. A mutating scenario independently compares the complete `workspace.expected/` tree, which record and refresh never rewrite. Use `test:snapshot:record` when a model transcript changes and `test:snapshot:refresh` when replay input remains valid; review every resulting diff. -- **Web browser snapshot** (`pnpm run test:web`; required Linux PR gate): Chromium compares session-driven output under `snapshots/web/` and UI-only output under `apps/web/tests/expected/`. CI forces read-only `DSH_SNAPSHOT=replay`, never writing expected outputs; record/refresh stay local and every diff is reviewed ([web e2e lane](../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md), [CI gate decision](../.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md)). `test:web` builds first for plugin CSS. +- **Web browser snapshot** (`pnpm run test:web`; required Linux PR gate): The command builds plugin CSS, then compares all session-driven `snapshots/web/` and UI-only `apps/web/tests/expected/` output in Chromium; the model/reasoning picker also runs in WebKit. CI enforces read-only `DSH_SNAPSHOT=replay`; record/refresh stay local, with every diff reviewed ([web lane](../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.md), [CI decision](../.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.md)). Session fixtures retain headers and payloads but omit body sequence/time envelopes; replay synthesizes them. Replay, record, and refresh select each parent/child role's highest generation. Current fixtures use the [writer format](session-format-status.md) in their filenames and headers, one row per event, and embedded compact Assistant streams. Historical fixtures retain their released representation; explicit `sessionFormat` owners preserve migration coverage. Follow the [format-version cookbook](cookbook/adding-a-session-format-version.md#snapshot-successors) to add successors without changing predecessors. diff --git a/docs/testing.zh.md b/docs/testing.zh.md index a715fb0a6f..977960c76d 100644 --- a/docs/testing.zh.md +++ b/docs/testing.zh.md @@ -12,7 +12,7 @@ - **所属位置的预期输出**(`pnpm run test:expected`):无录制会话往返的无密钥组装 CLI/进程预期。驱动使用 `*.expected.e2e.ts`,并与 `tests/expected/` 同属一处;CI 针对构建产物运行。包/脚本预期使用 `test`,浏览器预期使用 `test:web`。 - **性能基准**(`pnpm run test:bench`;必需的 Linux PR gate `node 24 / benchmarks`):`benchmarks/` 按用户路径组织门禁。它先构建 library 和 worker;被计时代码在纯 Node 下运行,不使用 TSX。合成输入执行耗时、堆和缩放预算;包内 `.perf.ts` 保留为诊断([规则](../.agents/notes/implemented/testing/2026-09-04-session-open-performance-gate.zh.md))。 - **快照**(`pnpm run test:snapshot`):顶层场景数值最高的已录制 parent generation 同时提供用户输入和模型回放,并作为持久化结果的预期值。parent 文件名是 `session[.vN].jsonl`;child 角色使用 `session.[.vN].jsonl`;v0 省略 `.v0`,正版本必须使用小写 `.vN`,且每个文件名必须与其 header 一致。进程级场景都通过 `dsh` 启动:headless 负责一次性行为,SDK 负责持久控制,ACP 负责自动化协议行为,Web 在同一 Session 旁保留浏览器与 ARIA 证据。`snapshot.yml` 声明 profile、组合与请求头类别、录制策略、例外回放或输入元数据以及 workspace 事实。带类型的 token 保留父子身份关系;只有请求头 pin 拥有 prompt/schema sidecar。变更 workspace 的场景会独立比较完整的 `workspace.expected/` 目录,record 与 refresh 绝不改写该目录。当模型 transcript(文本记录)变化时使用 `test:snapshot:record`,回放输入仍有效时使用 `test:snapshot:refresh`;请审查所有结果差异。 -- **Web 浏览器快照**(`pnpm run test:web`;必需的 Linux PR(Pull Request)门禁):Chromium 比较 `snapshots/web/` 下由会话驱动的输出,以及 `apps/web/tests/expected/` 下仅含 UI 的输出。CI 强制只读的 `DSH_SNAPSHOT=replay`,绝不写入预期输出;record/refresh 留在本地,每处 diff 都须评审([web e2e 车道](../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md)、[CI 门禁决策](../.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md))。`test:web` 会先构建以交付插件 CSS。 +- **Web 浏览器快照**(`pnpm run test:web`;必需的 Linux PR(Pull Request)门禁):命令先构建插件 CSS,再用 Chromium 比较 `snapshots/web/` 下全部会话驱动输出和 `apps/web/tests/expected/` 下全部纯 UI 输出;模型与推理强度选择场景还在 WebKit 中运行。CI 强制只读的 `DSH_SNAPSHOT=replay`;record/refresh 留在本地,每处 diff 都须评审([web 车道](../.agents/notes/implemented/testing/2026-07-24-web-gui-browser-e2e-lane.zh.md)、[CI 决策](../.agents/notes/implemented/testing/2026-07-30-web-browser-snapshot-ci-gate.zh.md))。 Session fixture 保留 header 与 payload,但省略正文 seq/time envelope;replay 会合成这些 envelope。Replay、record 与 refresh 会选择每个 parent/child 角色的最高 generation。当前 fixture 在文件名与 header 中使用[写入格式](session-format-status.zh.md),每个事件一行,并嵌入紧凑 Assistant stream。历史 fixture 保留其已发布表示;显式 `sessionFormat` 所有者保留迁移覆盖。按照[格式版本实操手册](cookbook/adding-a-session-format-version.zh.md#snapshot-successors)添加后继代际,不改动前代。 diff --git a/packages/client/ui-model-selection/README.i18n.yaml b/packages/client/ui-model-selection/README.i18n.yaml index 691299e059..6266219e73 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: d37937178cde77d925087268a7ec247d3fa8d4b4 -README.zh.md: 35dbb28f36d2b5c7f1e254bb40ab5db54808f67c +README.md: e2e39df345b8f72e0a14ee011b5a2e75ad5c4832 +README.zh.md: 59bed7f2409833e156d32afcab76e9efc406ca0b diff --git a/packages/client/ui-model-selection/README.md b/packages/client/ui-model-selection/README.md index d37937178c..e2e39df345 100644 --- a/packages/client/ui-model-selection/README.md +++ b/packages/client/ui-model-selection/README.md @@ -27,7 +27,7 @@ The Web GUI lets users switch the model and reasoning effort for an existing ses 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`. -Mouse clicks select models and efforts. Releasing a press off the menu button cancels the click and preserves keyboard navigation. While a selection is pending, focus stays on the trigger; a rejected selection leaves the menu open, and Tab returns to the current row. +Mouse selection uses native browser clicks, including their cancellation behavior; a press alone never selects. Opening the menu focuses its trigger, and clicking the trigger again closes the menu and returns focus there. While a selection is pending, focus stays on the trigger; a rejected selection leaves the menu open, and Tab returns to the current row. ### Model and effort diff --git a/packages/client/ui-model-selection/README.zh.md b/packages/client/ui-model-selection/README.zh.md index 35dbb28f36..59bed7f240 100644 --- a/packages/client/ui-model-selection/README.zh.md +++ b/packages/client/ui-model-selection/README.zh.md @@ -27,7 +27,7 @@ Web GUI 允许用户通过 `/model` 弹窗或 composer 模型控件切换既有 与 `ui-conversation` 及命令包一起挂载本插件;composer 随即在待处理指示器旁显示模型位,`/model` 则以弹窗打开同一份目录。模型位菜单打开期间,`↑`/`↓` 在所显示面板的行间移动焦点,`Tab` 选定聚焦行,Escape 与 `Shift+Tab` 先退出已下钻的面板,否则关闭并回到触发器。下钻落在正在使用的那一行,返回则落在打开该面板的格子上。当确切提供方/模型对仍在已公布分组中时,两个界面都显示 Host 报告的当前选择;目录行缺席时,可路由的选择保持不变,触发器提示 `Select model`。 -鼠标点击可选择模型与推理强度。按下后移出菜单按钮再松开会取消点击,并保留键盘导航。等待选择结果时,焦点停在触发按钮;选择被拒绝后菜单保持打开,Tab 可回到当前选中的行。 +鼠标选择沿用浏览器原生点击及其取消行为;仅按下按钮不会选定。打开菜单时聚焦触发按钮,再次点击触发按钮会关闭菜单并把焦点还给它。等待选择结果时,焦点停在触发按钮;选择被拒绝后菜单保持打开,Tab 可回到当前选中的行。 ### 模型与推理强度 diff --git a/packages/client/ui-model-selection/src/client/ModelSelect.tsx b/packages/client/ui-model-selection/src/client/ModelSelect.tsx index e0ee4c4992..c7db6f1c0b 100644 --- a/packages/client/ui-model-selection/src/client/ModelSelect.tsx +++ b/packages/client/ui-model-selection/src/client/ModelSelect.tsx @@ -190,6 +190,7 @@ export function ModelSelect( if (!available) return null const show = (): void => { + triggerRef.current?.focus() setPane('root') setOpen(true) reload() @@ -291,15 +292,19 @@ export function ModelSelect( }) } + const submit = (selection: ModelSelection): void => { + lastActionRef.current = 'select' + // Disabled option rows cannot retain focus while a selection is pending. + triggerRef.current?.focus() + void select(selection).then(settleSelection) + } + const choose = (selection: ModelSelection): void => { if (state.current?.provider === selection.provider && state.current.model === selection.model) { close(true) return } - lastActionRef.current = 'select' - // Disabled option rows cannot retain focus while a selection is pending. - triggerRef.current?.focus() - void select(selection).then(settleSelection) + submit(selection) } const chooseEffort = (effort: string | undefined): void => { @@ -313,9 +318,7 @@ export function ModelSelect( model: state.current.model, ...effort === undefined ? {} : { reasoningEffort: effort }, } - lastActionRef.current = 'select' - triggerRef.current?.focus() - void select(selection).then(settleSelection) + submit(selection) } const waiting = state.current === null && state.status === 'loading' @@ -339,7 +342,16 @@ export function ModelSelect( } return ( -
+
{ + // WebKit blurs a focused row before click unless the button's mousedown keeps focus. + if (event.target instanceof Element && event.target.closest('button') !== null) event.preventDefault() + }} + > + + + )} + /> + ) + } if (phase === 'idle' || phase === 'checking') { const checking = phase === 'checking' const empty = install.spec.trim() === '' @@ -799,7 +817,7 @@ function InstallDialog({ onClose={onClose} title={t('installTitle')} closeLabel={t('close')} - description={t('installDescription')} + {...install.mirrorRecovery ? {} : { description: t('installDescription') }} className={css.installDialog as string} contentClassName={css.installContent as string} footer={( @@ -813,10 +831,11 @@ function InstallDialog({
{ onEditSpec(event.currentTarget.value) }} @@ -1321,6 +1340,7 @@ export function PluginManagerPage(props: PluginManagerPageProps): ReactNode { onToggleRegistry={props.toggleRegistryOptions} onChooseRegistry={props.chooseRegistry} onChangeRegistry={props.changeRegistry} + onUseGithubMirror={props.useGithubMirror} /> {state.confirm === null ? null diff --git a/packages/client/ui-plugin-manager/src/client/locales.ts b/packages/client/ui-plugin-manager/src/client/locales.ts index 30116aa2bf..856f4203dd 100644 --- a/packages/client/ui-plugin-manager/src/client/locales.ts +++ b/packages/client/ui-plugin-manager/src/client/locales.ts @@ -87,6 +87,10 @@ export const zh = { installingTitle: '插件安装中…', installedTitle: '已安装', installFailedTitle: '插件安装失败', + installGithubFailedTitle: '无法访问 GitHub', + installGithubFailedDescription: '请尝试其他安装来源。', + installUseGithubMirror: '改用国内镜像', + installPackageLabel: '插件包名', installEdit: '编辑', installEditAria: '返回编辑', installCancelAndEdit: '取消安装并返回编辑', @@ -271,6 +275,10 @@ export const en = { installingTitle: 'Installing the plugin…', installedTitle: 'Installed', installFailedTitle: 'The plugin could not be installed', + installGithubFailedTitle: 'Cannot access GitHub', + installGithubFailedDescription: 'Try another installation source.', + installUseGithubMirror: 'Use mainland China mirror', + installPackageLabel: 'Plugin package name', installEdit: 'Edit', installEditAria: 'Back to editing', installCancelAndEdit: 'Cancel installation and return to editing', diff --git a/packages/client/ui-plugin-manager/src/client/manager-store.ts b/packages/client/ui-plugin-manager/src/client/manager-store.ts index 93ede95a02..6f46e8d8d7 100644 --- a/packages/client/ui-plugin-manager/src/client/manager-store.ts +++ b/packages/client/ui-plugin-manager/src/client/manager-store.ts @@ -147,6 +147,8 @@ export interface InstallState { readonly open: boolean /** The package spec as typed. */ readonly spec: string + /** The spec form was reopened after switching away from a failed GitHub address. */ + readonly mirrorRecovery?: boolean /** The registries the Host configured, read when the dialog opens; null until the Host answered. */ readonly registries: PluginRegistries | null /** The registry this install asks first: the one last used, else the Host's first. */ @@ -204,6 +206,20 @@ export function isInstallPending(phase: InstallState['phase']): boolean { return phase === 'starting' || phase === 'running' || phase === 'cancelling' || phase === 'applying' || phase === 'unconfirmed' } +/** + * Offer the configured mainland mirror after a confirmed GitHub connection failure. + * @param install - the installation and the Host's failure attribution. + * @returns the offered mirror URL, or undefined when this recovery does not apply. + */ +export function githubRecoveryRegistry(install: InstallState): string | undefined { + if (install.phase !== 'failed' || install.failure?.failedAt !== 'spec-host' + || (install.failure.kind !== 'network' && install.failure.kind !== 'timeout')) return undefined + const host = install.subject?.host?.toLowerCase().split(':')[0] + if (host !== 'github.com' && !host?.endsWith('.github.com')) return undefined + return offeredRegistries(install.registries).find((registry): registry is string => + registry !== null && new URL(registry).hostname === 'registry.npmmirror.com') +} + /** A destructive action waiting for the user's confirmation: a package's uninstall. */ export interface ConfirmState { readonly action: 'uninstall' @@ -254,6 +270,8 @@ export interface PluginManagerFace { chooseRegistry: (choice: RegistryChoice) => void /** From the failed screen: back to the spec with the registry options unfolded. */ changeRegistry: () => void + /** Return from a GitHub connection failure to an empty spec with the offered mainland mirror selected. */ + useGithubMirror: () => void /** Allow the install scripts the failed run left pending, saved for this profile, and run the same spec again. */ approveBuildsAndRetry: () => void /** Leave the check or the failed screen for the spec, or ask the Host to stop the run and wait for its cleanup. */ @@ -374,8 +392,8 @@ const IDLE_INSTALL: InstallState = { /** The dialog back at its spec: the run and its outcome forgotten, the spec and the registries kept. */ function specAgain(install: InstallState): InstallState { - const { open, spec, registries, registry } = install - return { ...IDLE_INSTALL, open, spec, registries, registry } + const { open, spec, registries, registry, mirrorRecovery } = install + return { ...IDLE_INSTALL, open, spec, registries, registry, ...mirrorRecovery === undefined ? {} : { mirrorRecovery } } } /** @@ -490,6 +508,14 @@ export class PluginManagerController { const install = this.getSnapshot().install if (install.phase === 'failed') this.patch({ install: { ...specAgain(install), registryOpen: true } }) }, + useGithubMirror: () => { + const install = this.getSnapshot().install + const mirror = githubRecoveryRegistry(install) + if (mirror === undefined) return + const registry: RegistryChoice = { kind: 'offered', registry: mirror } + this.registryMemory.set(registry) + this.patch({ install: { ...specAgain(install), spec: '', mirrorRecovery: true, registry } }) + }, approveBuildsAndRetry: () => { void this.approveBuildsAndRetry() }, cancelInstall: () => { void this.cancelInstall() }, reconcileInstall: () => { void this.reconcileInstall() }, diff --git a/packages/client/ui-plugin-manager/tests/components.client.spec.tsx b/packages/client/ui-plugin-manager/tests/components.client.spec.tsx index 4e13674dd1..6b54050ac5 100644 --- a/packages/client/ui-plugin-manager/tests/components.client.spec.tsx +++ b/packages/client/ui-plugin-manager/tests/components.client.spec.tsx @@ -106,6 +106,7 @@ function renderTab( toggleRegistryOptions: vi.fn(), chooseRegistry: vi.fn(), changeRegistry: vi.fn(), + useGithubMirror: vi.fn(), approveBuildsAndRetry: vi.fn(), enableInstalled: vi.fn(), clearHighlight: vi.fn(), @@ -1056,6 +1057,57 @@ describe('PluginManagerPage', () => { expect(screen.getByText(en.installSubjectTarball)).toBeTruthy() }) + it('shows GitHub recovery only after a connection failure and returns to package input', () => { + const subject = { spec: 'github:a/b', status: 'accepted', kind: 'git', bundle: null, registry: null, host: 'github.com' } as const + const failed: InstallState = { + ...IDLE_INSTALL, open: true, spec: subject.spec, registries: REGISTRIES, phase: 'failed', subject, + failure: { reason: 'Could not resolve host: github.com', kind: 'network', failedAt: 'spec-host' }, + } + const { actions, set, setLanguage } = renderTab({ install: { ...failed, phase: 'idle', failure: null } }) + expect(screen.queryByText(en.installGithubFailedTitle)).toBeNull() + set({ install: failed }) + const dialog = screen.getByRole('dialog', { name: en.installGithubFailedTitle }) + expect(within(dialog).getByText(en.installGithubFailedDescription)).toBeTruthy() + expect(screen.queryByRole('button', { name: en.installRetry })).toBeNull() + fireEvent.click(within(dialog).getByRole('button', { name: en.installUseGithubMirror })) + expect(actions.useGithubMirror).toHaveBeenCalledOnce() + expect(actions.runInstall).not.toHaveBeenCalled() + fireEvent.click(within(dialog).getByRole('button', { name: en.cancel })) + expect(actions.closeInstall).toHaveBeenCalledOnce() + setLanguage(zh) + expect(screen.getByRole('dialog', { name: '无法访问 GitHub' })).toBeTruthy() + expect(screen.getByText('请尝试其他安装来源。')).toBeTruthy() + expect(screen.queryByText('通过国内镜像安装,需要填写插件包名。')).toBeNull() + set({ install: { ...IDLE_INSTALL, open: true, mirrorRecovery: true, registries: REGISTRIES, registry: { kind: 'offered', registry: MIRROR } } }) + const input = screen.getByRole('textbox', { name: zh.installPackageLabel }) + expect(input).toHaveProperty('value', '') + expect(document.activeElement).toBe(input) + expect(screen.getByRole('button', { name: '安装源 中国大陆镜像源' })).toBeTruthy() + expect(screen.getByRole('button', { name: zh.installRun })).toHaveProperty('disabled', true) + expect(screen.queryByRole('button', { name: '恢复 GitHub 链接' })).toBeNull() + }) + + it('keeps the ordinary failure view for registry errors, other hosts, and unavailable mirrors', () => { + const failed: InstallState = { + ...IDLE_INSTALL, open: true, registries: REGISTRIES, phase: 'failed', + subject: { spec: 'github:a/b', status: 'accepted', kind: 'git', bundle: null, registry: null, host: 'github.com' }, + failure: { reason: 'failed', kind: 'network', failedAt: 'registry' }, + } + const { set } = renderTab({ install: failed }) + expect(screen.getByRole('button', { name: en.installChangeRegistry })).toBeTruthy() + for (const patch of [ + { subject: { ...failed.subject!, host: 'gitlab.com' } }, + { subject: null }, + { registries: { ...REGISTRIES, fallbackRegistries: [] } }, + { registries: null }, + { failure: { reason: 'not found', kind: 'not-found' as const, failedAt: 'spec-host' as const } }, + ]) { + set({ install: { ...failed, failure: { reason: 'failed', kind: 'network', failedAt: 'spec-host' }, ...patch } }) + expect(screen.queryByRole('dialog', { name: en.installGithubFailedTitle })).toBeNull() + expect(screen.getByRole('button', { name: en.installRetry })).toBeTruthy() + } + }) + it('offers the registries under the spec, folded by default, and picks or types one', () => { const open = { ...IDLE_INSTALL, open: true, registries: REGISTRIES } const { actions, set } = renderTab({ install: open }) diff --git a/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts b/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts index d7960eeb54..bc9830d13c 100644 --- a/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts +++ b/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts @@ -1153,4 +1153,46 @@ describe('PluginManagerController', () => { face.changeRegistry() expect(state().install).toMatchObject({ phase: 'idle', spec: 'dsh-new', registryOpen: true, runs: [], failure: null }) }) + + it.each(['network', 'timeout'] as const)('recovers a GitHub %s failure without retrying its URL through a mirror', async (kind) => { + const spec = 'https://github.com/example/dsh-plugin.git' + const inspect = vi.fn().mockResolvedValueOnce(ok({ status: 'accepted', kind: 'git', bundle: null, registry: null, host: 'github.com' })) + .mockResolvedValue(ok({ ...INSPECTED, registry: MIRROR })) + const { face, state, plugins } = bench({ + inspect, + installBundle: vi.fn().mockResolvedValueOnce(ok({ + ...failed(undefined, { exitCode: 1, output: 'Could not resolve host: github.com', truncated: false, logPath: '/l', kind }), + failedAt: 'spec-host', + })).mockResolvedValueOnce(ok({ + ...failed(undefined, { exitCode: 1, output: 'Registry connection failed', truncated: false, logPath: '/l', kind: 'network' }), + failedAt: 'registry', + })).mockResolvedValue(ok({ ...APPLIED, bundle: 'dsh-new' })), + }) + face.openInstall() + await vi.waitFor(() => { expect(state().install.registries).toEqual(REGISTRIES) }) + face.useGithubMirror() + expect(state().install.spec).toBe('') + face.editInstallSpec(spec) + face.runInstall() + await vi.waitFor(() => { expect(state().install.phase).toBe('failed') }) + face.useGithubMirror() + expect(state().install).toMatchObject({ + phase: 'idle', open: true, spec: '', mirrorRecovery: true, registry: { kind: 'offered', registry: MIRROR }, + registryOpen: false, failure: null, runs: [], + }) + expect(plugins.installBundle).toHaveBeenCalledTimes(1) + face.editInstallSpec('dsh-new') + face.runInstall() + await vi.waitFor(() => { expect(state().install.phase).toBe('failed') }) + face.changeRegistry() + expect(state().install).toMatchObject({ phase: 'idle', spec: 'dsh-new', mirrorRecovery: true, registryOpen: true }) + face.runInstall() + await vi.waitFor(() => { expect(state().install.phase).toBe('done') }) + expect(plugins.inspect).toHaveBeenLastCalledWith('dsh-new', { registry: MIRROR }, expect.any(AbortSignal)) + expect(plugins.installBundle).toHaveBeenLastCalledWith('dsh-new', expect.objectContaining({ registry: MIRROR })) + face.closeInstall() + face.openInstall() + await vi.waitFor(() => { expect(state().install.registries).toEqual(REGISTRIES) }) + expect(state().install.registry).toEqual({ kind: 'offered', registry: MIRROR }) + }) }) diff --git a/tsconfig.host.json b/tsconfig.host.json index 159cbc0413..ce5eba44d6 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -58,6 +58,7 @@ "apps/web/tests/plugin-install-cancel.e2e.ts", "apps/web/tests/plugin-install-approve.e2e.ts", "apps/web/tests/plugin-install-registry.e2e.ts", + "apps/web/tests/plugin-install-github.e2e.ts", "apps/web/tests/client-plugin-live.e2e.ts", "apps/web/tests/settings-chrome.e2e.ts", "apps/web/tests/desktop-locale.e2e.ts", From 5b600047d2db362d6f59e19ef24e92c9d9d1cb94 Mon Sep 17 00:00:00 2001 From: Yif <877193178@qq.com> Date: Tue, 22 Sep 2026 18:52:15 +0800 Subject: [PATCH 05/35] docs(agents): add dsh-client-ui-ux skill for client UI/UX design and review Collects the standing judgment rules for product-user-visible GUI work: token and shared-treatment reuse, light/dark readability, font weight and size scale, feedback-surface choice (toast vs in-place notice vs empty state), loading treatments, overlay dismiss/fit/clip checks, macOS/Windows window adaptation, and spacing review. dsh-code-review links it from its sources of truth so UI PR reviews load it. --- .agents/skills/dsh-client-ui-ux/SKILL.md | 55 ++++++++++++++++++++++++ .agents/skills/dsh-code-review/SKILL.md | 1 + 2 files changed, 56 insertions(+) create mode 100644 .agents/skills/dsh-client-ui-ux/SKILL.md diff --git a/.agents/skills/dsh-client-ui-ux/SKILL.md b/.agents/skills/dsh-client-ui-ux/SKILL.md new file mode 100644 index 0000000000..c975f65cd0 --- /dev/null +++ b/.agents/skills/dsh-client-ui-ux/SKILL.md @@ -0,0 +1,55 @@ +--- +name: dsh-client-ui-ux +description: Design and review DeepSeek Harness client UI changes — visual token discipline, reuse-before-adding, feedback surfaces (toast vs in-place notice vs empty state), overlay and menu safety, platform window adaptation, loading states, and error copy placement. Use when adding or changing product-user-visible GUI behavior in packages/client, or when reviewing such a PR. +--- + +# DeepSeek Harness Client UI/UX + +This skill is guidance, not a complete checklist. It covers judgment calls that lint, typecheck, and the i18n gate cannot make: where feedback appears, what gets reused, and how surfaces behave at window edges and across platforms. Copy quality itself follows [dsh-prose-standard](../dsh-prose-standard/SKILL.md); locale ownership follows the [locale-owned copy decision](../../notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.md). + +## Visual foundation + +- **Use existing tokens for color, radius, and spacing.** Before introducing a literal value, search the target page and its nearest established sibling (the Plugins page is the usual reference for full-page surfaces) for the token or value already in use, and adopt it. The same applies to whole treatments — toasts, menus, in-message artifact previews, sidebar tab layout, colors, clearance rules, page padding: reuse the established component or rule wherever one exists instead of inventing a parallel one. +- **Verify every color in both light and dark mode.** An ink/background pair must stay readable under both themes before it ships. Dimmed tones are the standing counter-example: they suit decorative surfaces, but on text they routinely fall below readability in one theme — never put a dimmed color on text without checking both. +- **Font weight tops out at 500.** Do not use 600+ for emphasis; differentiate with size or ink instead. +- **Pick font sizes from the page's existing scale.** Parallel content shares one size; never invent a size for a single element, and keep the number of distinct sizes on a page small (13px is the established row/detail size). When the page itself has no precedent, borrow the size and spacing ratios of the most similar existing page or element. +- **Icons, text, and neighbouring elements stay proportionate and aligned.** Every element lines up with its siblings along a deliberate axis (baseline, vertical center, or shared edge), and an icon's size stays in proportion to the text beside it; never ship an element that aligns to nothing or visibly outweighs its neighbours. + +## Reuse before adding + +- **Extend an existing component, container, or interaction before creating a new one.** A new capability that fits an existing surface (an extra menu item, a new prop on a primitive, an interactive mode on Tooltip) beats a parallel element stacked beside it. +- **Icons come from the existing icon library.** Pick the semantically closest existing icon; a genuinely new glyph requires designer approval before it lands. +- **Right-sidebar content registers a slot in the existing sidebar**, never a separate sidebar. Every sidebar tab declares a tab icon matching its meaning. +- **Icon-only actions whose meaning is not obvious get a Tooltip.** Prefer the shared Tooltip primitive (with `interactive` for selectable informational content) over ad-hoc title attributes. + +## Feedback surfaces + +Choose the surface by the lifetime of the message relative to the surface that produced it: + +- **Transient operation outcomes use the app-wide Toast primitive**, not in-place notices. A deletion can close the panel or tab that requested it; only a toast outlives that surface. Report success and failure; do not report still-pending states. +- **A failed operation keeps the data visible.** A failed deletion keeps its row; the toast announces the failure. Never blank content to show an error for a transient operation. +- **In-place notices are for states tied to the surface itself**: a query failure with its Retry action, field validation on the form that owns the field. A populated panel keeps a compact notice beside its retained content; only an empty panel centers a full error state. +- **Error copy is plain language, and short.** No internal jargon or technical nouns unless an error code must be exposed for debugging. Prefer one clear sentence; anything explainable in two sentences must not grow into paragraphs. A Chinese notice of at most two sentences omits the trailing 句号(。). The notice must not break the existing layout — reserve its space or overlay it; never shift neighbouring elements. +## Loading states + +- Lists use their skeleton; every other page-level load centers a bare spinner. Never park a spinner at a corner of the page. +- One loading treatment per page/component — concurrent regions must not each flash their own style. +- No loading text unless the context genuinely needs it (narrow sidebars almost never do). + +## Overlays and menus + +Every menu, popover, and tooltip must be verified for all three before merge: + +- **Dismissable**: outside click (and Escape where focusable) closes it. +- **Viewport-fitting**: it slides or flips to stay inside the window with an edge margin, and flips only into a side that actually fits (no oscillation when neither side fits). +- **Unclipped**: it escapes `overflow` ancestors and containing blocks (portal to body where needed) and is never covered by neighbouring elements. + +## Platform window adaptation + +- Any new header element or full page must account for macOS and Windows window chrome. On macOS the titlebar clearance is `--dsh-frame-top-clearance`, consumed by Menu, Modal, and overlay primitives as their top safe margin — **never change the global variable to fix one page**. Add a scoped `[data-platform='darwin']` override on the page's own inset instead, and assert the override in the page's stylesheet spec. +- State the intended total offset (clearance + page inset) when reviewing, so two pages aligning to "the same top spacing" agree on the sum, not just one addend. + +## Spacing review + +- Review every changed region for gaps: nothing sits flush against its neighbour without an intentional gap, and adjacent icons and elements keep the region's established spacing. +- Prefer symmetry for parallel elements; an unexplained one-off gap or offset usually signals a missed shared value. diff --git a/.agents/skills/dsh-code-review/SKILL.md b/.agents/skills/dsh-code-review/SKILL.md index 7453e110ef..bc145e212a 100644 --- a/.agents/skills/dsh-code-review/SKILL.md +++ b/.agents/skills/dsh-code-review/SKILL.md @@ -14,6 +14,7 @@ description: Use when reviewing a pull request in the deepseek-harness repo — - [docs/AGENTS.md](../../../docs/AGENTS.md): documentation placement and prose discipline. - [dsh-prose-standard](../dsh-prose-standard/SKILL.md): required coverage and editorial judgment for comments, docs, prompts, and visible strings. - [dsh-ci-test-reliability](../dsh-ci-test-reliability/SKILL.md): isolation and regression-proof rules for resource-owning, asynchronous, or flaky tests and fixtures. +- [dsh-client-ui-ux](../dsh-client-ui-ux/SKILL.md): feedback-surface choice, overlay safety, platform window adaptation, and visual token discipline for product-user-visible GUI changes. - [docs/testing.md](../../../docs/testing.md) and the [quality-gates Agent Note](../../notes/implemented/process/2026-06-11-quality-gates.md): required test tiers and gates. - [Agent Notes](../../notes/README.md): design rationale. Treat disagreement with an Agent Note as a design discussion, not an automatic veto. - For bilingual changes, read [translation-rules.md](../../../docs/i18n/translation-rules.md) and [terminology.md](../../../docs/i18n/terminology.md); the extended translation skill is outside automatic review and runs only on explicit user invocation. From 82a7dd9c3fac8d41747b370e2a4d386da696a402 Mon Sep 17 00:00:00 2001 From: ZiyaZhang <199893125+ZiyaZhang@users.noreply.github.com> Date: Tue, 22 Sep 2026 04:04:33 -0700 Subject: [PATCH 06/35] test(plugin-manager): strengthen GitHub recovery assertions --- apps/web/tests/plugin-install-github.e2e.ts | 1 - .../tests/components.client.spec.tsx | 12 +++++++++--- .../tests/manager-store.client.spec.ts | 4 ++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/web/tests/plugin-install-github.e2e.ts b/apps/web/tests/plugin-install-github.e2e.ts index 7c4b4441fc..1cc860d125 100644 --- a/apps/web/tests/plugin-install-github.e2e.ts +++ b/apps/web/tests/plugin-install-github.e2e.ts @@ -65,7 +65,6 @@ it('offers a mirror after GitHub fails and waits for replacement input', async ( ) expect(await readFile(join(profile, '.attempts'), 'utf8')).toBe(attempts) expect(await readFile(manifestPath, 'utf8')).toBe(manifestBefore) - expect(await dialog.getByRole('button', { name: '恢复 GitHub 链接', exact: true }).count()).toBe(0) await input.fill(spec) await dialog.getByRole('button', { name: '安装', exact: true }).click() dialog = page.getByRole('dialog', { name: '无法访问 GitHub', exact: true }) diff --git a/packages/client/ui-plugin-manager/tests/components.client.spec.tsx b/packages/client/ui-plugin-manager/tests/components.client.spec.tsx index 6b54050ac5..c3ecd56900 100644 --- a/packages/client/ui-plugin-manager/tests/components.client.spec.tsx +++ b/packages/client/ui-plugin-manager/tests/components.client.spec.tsx @@ -1077,14 +1077,20 @@ describe('PluginManagerPage', () => { setLanguage(zh) expect(screen.getByRole('dialog', { name: '无法访问 GitHub' })).toBeTruthy() expect(screen.getByText('请尝试其他安装来源。')).toBeTruthy() - expect(screen.queryByText('通过国内镜像安装,需要填写插件包名。')).toBeNull() set({ install: { ...IDLE_INSTALL, open: true, mirrorRecovery: true, registries: REGISTRIES, registry: { kind: 'offered', registry: MIRROR } } }) + const form = within(screen.getByRole('dialog', { name: zh.installTitle })) + expect(form.queryByText(zh.installDescription)).toBeNull() + expect(form.queryByRole('textbox', { name: zh.installSpecLabel })).toBeNull() const input = screen.getByRole('textbox', { name: zh.installPackageLabel }) expect(input).toHaveProperty('value', '') expect(document.activeElement).toBe(input) - expect(screen.getByRole('button', { name: '安装源 中国大陆镜像源' })).toBeTruthy() expect(screen.getByRole('button', { name: zh.installRun })).toHaveProperty('disabled', true) - expect(screen.queryByRole('button', { name: '恢复 GitHub 链接' })).toBeNull() + expect(form.getAllByRole('button')).toEqual([ + form.getByRole('button', { name: zh.close }), + form.getByRole('button', { name: zh.installGuideToggle }), + form.getByRole('button', { name: '安装源 中国大陆镜像源' }), + form.getByRole('button', { name: zh.installRun }), + ]) }) it('keeps the ordinary failure view for registry errors, other hosts, and unavailable mirrors', () => { diff --git a/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts b/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts index bc9830d13c..f64c7ee219 100644 --- a/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts +++ b/packages/client/ui-plugin-manager/tests/manager-store.client.spec.ts @@ -1170,9 +1170,9 @@ describe('PluginManagerController', () => { }) face.openInstall() await vi.waitFor(() => { expect(state().install.registries).toEqual(REGISTRIES) }) - face.useGithubMirror() - expect(state().install.spec).toBe('') face.editInstallSpec(spec) + face.useGithubMirror() + expect(state().install.spec).toBe(spec) face.runInstall() await vi.waitFor(() => { expect(state().install.phase).toBe('failed') }) face.useGithubMirror() From a44ced5b96899f5bfa81e11719e58db4c401dc29 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 19:06:54 +0800 Subject: [PATCH 07/35] fix(web): gate Remote WebSockets on application readiness --- apps/web/tests/fixtures/restart-startup.js | 30 +++++++++ .../fixtures/restart-startup.overlay.yml | 5 ++ apps/web/tests/server-restart.e2e.ts | 51 ++++++++++++--- docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 2 +- docs/config-catalog.zh.md | 2 +- packages/api/gateway/README.i18n.yaml | 4 +- packages/api/gateway/README.md | 2 + packages/api/gateway/README.zh.md | 2 + packages/api/gateway/package.json | 1 + packages/api/gateway/src/index.ts | 62 ++++++++++++------- .../gateway/tests/gateway-stream.host.spec.ts | 62 +++++++++++++++++++ packages/api/gateway/tsconfig.host.json | 3 + pnpm-lock.yaml | 3 + 14 files changed, 196 insertions(+), 37 deletions(-) create mode 100644 apps/web/tests/fixtures/restart-startup.js create mode 100644 apps/web/tests/fixtures/restart-startup.overlay.yml diff --git a/apps/web/tests/fixtures/restart-startup.js b/apps/web/tests/fixtures/restart-startup.js new file mode 100644 index 0000000000..2967fcee10 --- /dev/null +++ b/apps/web/tests/fixtures/restart-startup.js @@ -0,0 +1,30 @@ +/** Hold one Host service until the restart test releases application startup. */ +export const name = 'web-restart-startup' + +/** Keep the carrier services available while Session Controller startup is held. */ +export const inject = ['typertGateway', 'connection', 'webServer'] + +/** + * Provide the test-only dependency after startup has been released. + * @param {import('@deepseek-ai/cordis').Context} ctx - Host plugin context. + * @returns {Promise} Once the barrier is released or the plugin is disposed. + */ +export async function apply(ctx) { + if (process.env.DSH_WEB_RESTART_HOLD_STARTUP === '1') { + if (typeof process.send !== 'function') throw new Error('web restart startup fixture requires an IPC channel') + const released = Promise.withResolvers() + const resume = (message) => { + if (message === 'resume-startup') released.resolve(true) + } + ctx.effect(() => { + process.on('message', resume) + return () => { + process.off('message', resume) + released.resolve(false) + } + }, 'web-restart: startup barrier') + process.send('startup-blocked') + if (!await released.promise) return + } + ctx.reflect.provide('webRestartReady', {}) +} diff --git a/apps/web/tests/fixtures/restart-startup.overlay.yml b/apps/web/tests/fixtures/restart-startup.overlay.yml new file mode 100644 index 0000000000..3f7b9bc45c --- /dev/null +++ b/apps/web/tests/fixtures/restart-startup.overlay.yml @@ -0,0 +1,5 @@ +- id: session-controller + inject: [webRestartReady] +- insert: + - id: web-restart-startup + name: ./restart-startup.js diff --git a/apps/web/tests/server-restart.e2e.ts b/apps/web/tests/server-restart.e2e.ts index c3d5565e40..736165c2dc 100644 --- a/apps/web/tests/server-restart.e2e.ts +++ b/apps/web/tests/server-restart.e2e.ts @@ -14,16 +14,18 @@ class RestartableServer { private child: ChildProcess | undefined private closed: Promise | undefined private output = '' + readonly startupBlocked = Promise.withResolvers() constructor(private readonly world: string, private readonly modelUrl: string) {} - async start(port: number): Promise { + async start(port: number, holdStartup = false): Promise { if (this.child !== undefined) throw new Error('Server is already running') this.output = '' const ready = Promise.withResolvers() const child = spawn(process.execPath, [ join(REPO_ROOT, 'apps/cli/lib/bin.js'), '--profile', 'web', '--patch', fileURLToPath(new URL('./pin-browse-picker.overlay.yml', import.meta.url)), + '--patch', fileURLToPath(new URL('./fixtures/restart-startup.overlay.yml', import.meta.url)), '--no-open', '--port', String(port), ], { cwd: this.world, @@ -32,8 +34,9 @@ class RestartableServer { DSH_HOME: join(this.world, 'home'), DSH_AGENTS_HOME: join(this.world, 'agents'), DSH_TELEMETRY_DISABLED: '1', DEEPSEEK_API_KEY: 'keyless-server-restart-fixture', DEEPSEEK_BASE_URL: this.modelUrl, + DSH_WEB_RESTART_HOLD_STARTUP: holdStartup ? '1' : '0', }, - stdio: ['ignore', 'pipe', 'pipe'], + stdio: ['ignore', 'pipe', 'pipe', 'ipc'], }) this.child = child const receive = (data: Buffer): void => { @@ -43,6 +46,9 @@ class RestartableServer { } child.stdout?.on('data', receive) child.stderr?.on('data', receive) + child.on('message', (message) => { + if (message === 'startup-blocked') this.startupBlocked.resolve(undefined) + }) child.once('error', (error) => { ready.reject(error) }) this.closed = new Promise((resolve) => { child.once('close', (code, signal) => { @@ -58,6 +64,7 @@ class RestartableServer { async stop(): Promise { const child = this.child if (child === undefined) return + this.resumeStartup() let forced = false const timer = setTimeout(() => { forced = true; child.kill('SIGKILL') }, 15_000) try { @@ -70,10 +77,14 @@ class RestartableServer { if (forced) throw new Error('Server did not stop after SIGTERM\n' + this.logs()) } + resumeStartup(): void { + if (this.child?.connected) this.child.send('resume-startup') + } + logs(): string { return this.output.replace(/([?&]token=)[A-Za-z0-9_-]+/gu, '$1') } } -it('keeps an opened Session and draft when the server restarts on the same port', async () => { +it.each([false, true])('keeps the same revision, Session and page across a server restart (delayed startup: %s)', async (holdStartup) => { const world = await mkdtemp(join(tmpdir(), 'dsh-server-restart-')) onTestFinished(() => rm(world, { recursive: true, force: true })) const model = createServer((request, response) => { @@ -126,6 +137,7 @@ it('keeps an opened Session and draft when the server restarts on the same port' onTestFinished(() => browser.close()) const page = await newEnglishPage(browser) const errors: string[] = [] + const streamErrors: unknown[] = [] const graphs: { rev: string; entries: { id: string; rev: string }[] }[] = [] let readyFrames = 0 let sessionBaselines = 0 @@ -140,7 +152,8 @@ it('keeps an opened Session and draft when the server restarts on the same port' }) socket.on('framereceived', ({ payload }) => { if (typeof payload !== 'string') return - const message = JSON.parse(payload) as { type?: string; streamId: string; value?: { type?: string } } + const message = JSON.parse(payload) as { type?: string; streamId: string; value?: { type?: string }; error?: unknown } + if (message.type === 'error') streamErrors.push(message.error) if (message.type === 'item' && message.value?.type === 'ready') readyFrames++ if (message.type === 'item' && endpoints.get(message.streamId) === 'session/follow' && message.value?.type === 'snapshot') sessionBaselines++ @@ -154,7 +167,7 @@ it('keeps an opened Session and draft when the server restarts on the same port' }) onTestFailed(async () => { await saveFailureShot(page, 'web-server-restart-' + scenarioId) - await writeFile(join(REPO_ROOT, '.artifacts', 'server-restart-' + scenarioId + '.json'), JSON.stringify({ errors, graphs, server: server.logs() }, null, 2)) + await writeFile(join(REPO_ROOT, '.artifacts', 'server-restart-' + scenarioId + '.json'), JSON.stringify({ errors, streamErrors, graphs, server: server.logs() }, null, 2)) }) await page.goto(url, { waitUntil: 'load' }) await page.locator('[data-slot="root"]').waitFor({ state: 'attached', timeout: 20_000 }) @@ -177,7 +190,29 @@ it('keeps an opened Session and draft when the server restarts on the same port' page.on('framenavigated', () => { navigations++ }) await server.stop() - const restarted = await server.start(port) + let restarted: string + const restarting = server.start(port, holdStartup) + try { + if (holdStartup) { + await Promise.race([ + server.startupBlocked.promise, + restarting.then(() => { throw new Error('the restarted Host did not hold controller startup') }), + ]) + const opened = await page.evaluate(() => new Promise((resolve) => { + const endpoint = new URL('api/remote.mux', location.href) + endpoint.protocol = 'ws:' + const socket = new WebSocket(endpoint) + let accepted = false + socket.addEventListener('open', () => { accepted = true; socket.close() }) + socket.addEventListener('close', () => { resolve(accepted) }) + })) + expect(opened).toBe(false) + expect(readyFrames).toBe(beforeReady) + } + } finally { + server.resumeStartup() + restarted = await restarting + } expect(new URL(restarted).origin).toBe(new URL(url).origin) await expect.poll(() => readyFrames, { timeout: 30_000 }).toBeGreaterThan(beforeReady) await expect.poll(() => sessionBaselines, { timeout: 30_000 }).toBeGreaterThan(beforeBaseline) @@ -187,7 +222,8 @@ it('keeps an opened Session and draft when the server restarts on the same port' })) expect(errors).toEqual([]) - expect(graphs.at(-1)).toEqual(graphs[beforeGraphs - 1]) + expect(streamErrors).toEqual([]) + for (const graph of graphs.slice(beforeGraphs)) expect(graph).toEqual(graphs[beforeGraphs - 1]) expect(await originalRoot!.evaluate(element => element.isConnected)).toBe(true) expect(await composer.textContent()).toBe(draft) expect(await response.isVisible()).toBe(true) @@ -195,5 +231,6 @@ it('keeps an opened Session and draft when the server restarts on the same port' await composer.press('Enter') await expect.poll(() => response.count(), { timeout: 20_000 }).toBe(2) expect(errors).toEqual([]) + expect(streamErrors).toEqual([]) expect(navigations).toBe(0) }) diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 16c39be505..106db59c55 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: 563c8d21896e93a76394937b55f841036ee74c42 -config-catalog.zh.md: f3505a577660a534e6c5a3d255d4c46a4cfaea05 +config-catalog.md: b9e75f6679d43aef41808a30ed370e26070c1331 +config-catalog.zh.md: d76c88fb806998abee414347822a3d11c3b2b7de diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 563c8d2189..b9e75f6679 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -194,7 +194,7 @@ export interface Config { } ``` -Source: [`packages/api/gateway/src/index.ts:144`](../packages/api/gateway/src/index.ts) +Source: [`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index f3505a5776..d76c88fb80 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -196,7 +196,7 @@ export interface Config { } ``` -来源:[`packages/api/gateway/src/index.ts:144`](../packages/api/gateway/src/index.ts) +来源:[`packages/api/gateway/src/index.ts:145`](../packages/api/gateway/src/index.ts) diff --git a/packages/api/gateway/README.i18n.yaml b/packages/api/gateway/README.i18n.yaml index e08b3475e6..7f47a6c9eb 100644 --- a/packages/api/gateway/README.i18n.yaml +++ b/packages/api/gateway/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/gateway/README.md -README.md: b5b64d3fa073c4f992529b63bc2e02117a28cecf -README.zh.md: 87919703fdb2a1f9e32603bf6a1d152d4cc5404e +README.md: 1a746a83eb966fba6ae40b61061d42bf478e1c84 +README.zh.md: 7b37548f6ad894b761457df80278eeed7aa6ca7b diff --git a/packages/api/gateway/README.md b/packages/api/gateway/README.md index b5b64d3fa0..1a746a83eb 100644 --- a/packages/api/gateway/README.md +++ b/packages/api/gateway/README.md @@ -34,6 +34,8 @@ A cancellation-aware Remote method declares `signal: AbortSignal` as its final H A stream Remote uses `@Remote({ mode: 'stream' })` and returns an `Iterable` or `AsyncIterable`. `ctx.typertGateway.stream()` applies the same endpoint, argument, lookup, and cancellation checks as unary invocation, then returns a cancellation-aware iterable over the business items. The Client opens the Gateway-owned `/api/remote.mux` WebSocket when its plugin activates and keeps it connected while idle. Connection owns the retry schedule; before each retry it asks the mux to cancel any candidate or active socket and make exactly one fresh physical attempt. The Host sends Ping control frames at the configured `websocketHeartbeatIntervalMs` interval (two seconds by default), and the browser answers Pong at the WebSocket protocol layer, so idle network intermediaries see traffic without any Remote stream frame. A socket that has not answered the previous Ping is terminated at the next interval. Independently cancellable logical streams share that socket; an in-process Connection carrier provides equivalent streams directly without opening it. +When the launcher supplies `ctx.appReady`, Gateway registers the WebSocket upgrade route only after successful application startup. Earlier connection attempts remain carrier failures handled by Connection's retry policy, so a restarting Host cannot accept streams while its controllers are still initializing. Unloading cancels a pending readiness subscription and closes any registered carrier. Embedded Hosts without `appReady` register immediately and own their startup ordering; in-process invocation is unchanged. + Every stream also carries a Client-to-Host uplink on the same logical stream. A method declares the uplink item type as the second type argument of its return type, `RemoteStream` from [`dsh-typert-protocol`](../../typert/protocol/README.md); `In` defaults to `never`, and a method that returns `Iterable`, `AsyncIterable`, or `RemoteStream` declares that it reads none. The running method reads its call as `this.ctx.invocation`: the Gateway derives the receiver from a Context carrying that `RemoteInvocation` — `request`, `service`, `peer`, `signal`, and `uplink()` — so nothing enters the parameter list, and `ctx.invocation` is `undefined` on a Context no Remote call derived. `uplink()` is available once per call. With a descriptor codec it decodes every item before delivery; without one — an SRC method, or a method whose `In` is `never` — it delivers JSON-safe `unknown` values. The Client sends each item as an `item` frame on the open logical stream, a top-level `undefined` item as an `item` frame without `value`, and its half-close as an `end` frame; the method observes the half-close as the end of the `uplink()` iteration and cancellation through `signal`. A rejected item fails the whole stream with `gateway/input-invalid` (field `uplink`). Uplink items are validated one by one at the Host because they arrive from the browser; downlink items are values the Host method produced and pass through unchecked. When the method finishes its downlink the Gateway returns the uplink iterator and drops unread items; items sent to a method that never takes its uplink wait in the inbox until then. Each logical stream buffers at most `streamInboxBytes` (262144 by default) of uplink frame bytes; overflow fails the stream with `gateway/uplink-overflow`, and an item after `end` fails it with `gateway/protocol`, in both cases without closing the socket. `item`, `end`, and `cancel` frames for a stream id the Host has already finished are dropped; only a duplicate `open` closes the socket. Gateway-owned streams such as `$events` return their uplink as soon as they open, so their `item` frames are dropped instead of buffered. A unary method may also call `uplink()`; its items are readable only while the method runs. Every stream speaks for the operator Peer: a WebSocket's streams for the Peer Connection admitted at upgrade, whose scope disposal closes the socket, and an in-process carrier's for the operator directly. Host composition can register one application event source through `registerRemoteEvents()`. Gateway reserves the internal `$events` logical endpoint for that source, accepts only empty `args`, and aborts streams opened by the registration when the source is withdrawn. API Remotes owns the event selection, argument validation, per-Client queues, and the Host home sent in the opening `{ type: 'ready', clientId, host: { home } }` frame. Its source factory attaches incremental listeners synchronously, so the Client publishes the generation and starts baseline reads only after incremental delivery is ready. diff --git a/packages/api/gateway/README.zh.md b/packages/api/gateway/README.zh.md index 87919703fd..7b37548f6a 100644 --- a/packages/api/gateway/README.zh.md +++ b/packages/api/gateway/README.zh.md @@ -34,6 +34,8 @@ Connection 可用时,Host 入口会在 Connection 共享的 `/api` FetchHandle 流式 Remote 使用 `@Remote({ mode: 'stream' })` 并返回 `Iterable` 或 `AsyncIterable`。`ctx.typertGateway.stream()` 执行与一元调用相同的 endpoint、参数、lookup 和取消校验,再返回可取消的业务项 iterable。Client 插件激活时打开 Gateway 自有的 `/api/remote.mux` WebSocket,并让它在空闲时保持连接。Connection 拥有重试调度;每次 retry 前,它要求 mux 取消候选或活动 socket,并且只做一次全新的物理连接尝试。Host 按配置的 `websocketHeartbeatIntervalMs` 间隔(默认 2 秒)发送 Ping 控制帧,浏览器在 WebSocket 协议层自动回复 Pong,使空闲网络中间层持续看到流量,而不新增 Remote 流帧。若 socket 尚未回复上一次 Ping,Host 会在下一间隔终止它。可独立取消的逻辑流共享这条连接;进程内 Connection 载体直接提供等价的流,不打开该 WebSocket。 +启动器提供 `ctx.appReady` 时,Gateway 仅在应用成功启动后注册 WebSocket 升级路由。此前的连接尝试仍属于载体故障,由 Connection 的重试策略处理,因此重启中的 Host 不会在控制器仍在初始化时接受流。卸载会取消尚未触发的就绪订阅,并关闭已注册的载体。不提供 `appReady` 的嵌入式 Host 会立即注册,并自行负责启动顺序;进程内调用不变。 + 每条流还在同一条逻辑流上携带从 Client 到 Host 的上行。方法把上行项类型声明为返回类型的第二个类型参数——来自 [`dsh-typert-protocol`](../../typert/protocol/README.zh.md) 的 `RemoteStream`;`In` 缺省为 `never`,返回 `Iterable`、`AsyncIterable` 或 `RemoteStream` 的方法即声明自己不读上行。运行中的方法通过 `this.ctx.invocation` 读取本次调用:Gateway 从携带该 `RemoteInvocation`(`request`、`service`、`peer`、`signal` 与 `uplink()`)的 Context 派生接收者,因此没有任何东西进入参数列表,而非 Remote 调用派生的 Context 上 `ctx.invocation` 为 `undefined`。`uplink()` 每次调用只能取一次。描述符带 codec 时它在交付前逐项解码;不带时——SRC 方法,或 `In` 为 `never` 的方法——它交付经 JSON 安全校验的 `unknown` 值。Client 在已打开的逻辑流上把每一项作为 `item` 帧发送(顶层 `undefined` 项是不带 `value` 的 `item` 帧),以 `end` 帧表示半关闭;方法通过 `uplink()` 迭代结束感知半关闭,通过 `signal` 感知取消。被拒绝的项使整条流以 `gateway/input-invalid`(字段 `uplink`)失败。上行项在 Host 逐项校验,因为它们来自浏览器;下行项是 Host 方法产出的值,不经校验原样透传。方法结束下行时 Gateway 调用 uplink 迭代器的 return 并丢弃未读的项;发给从未取用 uplink 的方法的项在 inbox 里等到那时为止。每条逻辑流最多缓冲 `streamInboxBytes`(默认 262144)字节的上行帧;超限使流以 `gateway/uplink-overflow` 失败,`end` 之后的项使流以 `gateway/protocol` 失败,两种情况都不关闭 socket。发给 Host 已结束的流 id 的 `item`、`end` 与 `cancel` 帧被丢弃;只有重复的 `open` 会关闭 socket。`$events` 这类 Gateway 自有的流在打开时立即 return 其 uplink,因此它们的 `item` 帧被丢弃而不缓冲。一元方法也可以调用 `uplink()`;其项只在方法运行期间可读。每条流都代表操作者 Peer:WebSocket 上的流代表 Connection 在升级时接纳的 Peer,该 scope 释放时 socket 关闭;进程内载体的流直接代表操作者。 Host 组合可通过 `registerRemoteEvents()` 注册唯一的应用事件 source。Gateway 为它保留内部 `$events` logical endpoint,只接受空 `args`,并在 source 撤回时中止该注册打开的流。事件名单、参数校验、每个 Client 的队列及 opening `{ type: 'ready', clientId, host: { home } }` frame 中的 Host home 由 API Remotes 拥有。source factory 在返回 iterable 前同步挂好增量 listener,因此 Client 只在增量投递就绪后发布 generation 并开始 baseline 读取。 diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index 9985966d8b..823fd1a6b5 100644 --- a/packages/api/gateway/package.json +++ b/packages/api/gateway/package.json @@ -67,6 +67,7 @@ }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-cmdline": "workspace:^", "@deepseek-ai/dsh-client-connection": "workspace:^", "@deepseek-ai/dsh-host-webserver": "workspace:^", "@deepseek-ai/dsh-remote-mock": "workspace:^", diff --git a/packages/api/gateway/src/index.ts b/packages/api/gateway/src/index.ts index d9bc91d52a..777da35065 100644 --- a/packages/api/gateway/src/index.ts +++ b/packages/api/gateway/src/index.ts @@ -15,6 +15,7 @@ import { import { Deque } from '@deepseek-ai/dsh-deque' import type { WebUpgradeRoute } from '@deepseek-ai/dsh-host-webserver' import { MAX_TIMER_DELAY_MS } from '@deepseek-ai/dsh-timeout' +import type {} from '@deepseek-ai/dsh-cmdline' import z from '@deepseek-ai/schemastery' export type { TypertGatewayFaultDetails } from './remote-error-codes.ts' import { @@ -217,6 +218,8 @@ export class TypertGatewayService extends Service implements TypertGateway { /** * Register the Gateway against the active Typert registry. + * WebSocket admission waits for launcher-owned application readiness when supplied; + * direct invocation and in-process streams remain available independently. * @param ctx - owning Host Context with Typert registry access. * @param config - validated Gateway transport configuration. */ @@ -234,31 +237,42 @@ export class TypertGatewayService extends Service implements TypertGateway { ) }) ctx.inject(['connection', 'webServer'], (webCtx) => { - const mux = new RemoteStreamMuxServer( - (endpoint, payload, uplink, peer, control) => - this.openWireStream(endpoint, payload, uplink, peer, control.signal, control), - this.wireStream.failure, - resolved.websocketHeartbeatIntervalMs, - resolved.streamInboxBytes, - ) - webCtx.effect(() => { - const route: WebUpgradeRoute = { - path: REMOTE_STREAM_MUX_PATH, - handler: (req, socket, head) => { - const admission = webCtx.connection.admit(req) - if ('rejection' in admission) { - rejectRemoteStreamUpgrade(socket, admission.rejection) - return - } - mux.handleUpgrade(req, socket, head, admission.peer) - }, + const listen = (): void => { + const mux = new RemoteStreamMuxServer( + (endpoint, payload, uplink, peer, control) => + this.openWireStream(endpoint, payload, uplink, peer, control.signal, control), + this.wireStream.failure, + resolved.websocketHeartbeatIntervalMs, + resolved.streamInboxBytes, + ) + webCtx.effect(function* () { + yield () => mux.close() + const route: WebUpgradeRoute = { + path: REMOTE_STREAM_MUX_PATH, + handler: (req, socket, head) => { + const admission = webCtx.connection.admit(req) + if ('rejection' in admission) { + rejectRemoteStreamUpgrade(socket, admission.rejection) + return + } + mux.handleUpgrade(req, socket, head, admission.peer) + }, + } + yield webCtx.webServer.registerUpgrade(route) + }, `api-gateway: ${REMOTE_STREAM_MUX_PATH} WebSocket`) + } + // Existing pages reconnect before the new Host prints its URL. No stream + // may enter until the launcher has activated and audited its controllers. + const ready = webCtx.get('appReady') + if (ready === undefined) listen() + else webCtx.effect(() => { + let closed = false + const cancel = ready.onReady(() => { if (!closed) listen() }) + return () => { + closed = true + cancel() } - const unregister = webCtx.webServer.registerUpgrade(route) - return async () => { - unregister() - await mux.close() - } - }, `api-gateway: ${REMOTE_STREAM_MUX_PATH} WebSocket`) + }, 'api-gateway: application readiness') }) } diff --git a/packages/api/gateway/tests/gateway-stream.host.spec.ts b/packages/api/gateway/tests/gateway-stream.host.spec.ts index 7ed908f620..4c2f0e27c6 100644 --- a/packages/api/gateway/tests/gateway-stream.host.spec.ts +++ b/packages/api/gateway/tests/gateway-stream.host.spec.ts @@ -6,6 +6,7 @@ import { Context, symbols } from '@deepseek-ai/cordis' import { apply as applyConnection, inject as connectionInject } from '@deepseek-ai/dsh-client-connection' import WebServer from '@deepseek-ai/dsh-host-webserver' import { MAX_TIMER_DELAY_MS } from '@deepseek-ai/dsh-timeout' +import type { AppReady } from '@deepseek-ai/dsh-cmdline' import { Remote, remoteErrorOf, @@ -229,6 +230,30 @@ class FeedService extends TypertRemoteService { const roots: Context[] = [] +class StartupProbe implements AppReady { + private ready = false + private readonly listeners = new Set<() => void>() + lastListener: (() => void) | undefined + + get pending(): number { return this.listeners.size } + + onReady(listener: () => void): () => void { + this.lastListener = listener + if (this.ready) { + listener() + return () => {} + } + this.listeners.add(listener) + return () => { this.listeners.delete(listener) } + } + + commit(): void { + this.ready = true + for (const listener of this.listeners) listener() + this.listeners.clear() + } +} + class RemoteEventSourceProbe { readonly source = (signal: AbortSignal): AsyncIterable => { this.signal = signal @@ -307,6 +332,30 @@ afterEach(async () => { }) describe('Typert Remote streams', () => { + it.each([false, true])('accepts WebSockets only after application readiness (already ready: %s)', async (alreadyReady) => { + const startup = new StartupProbe() + if (alreadyReady) startup.commit() + const { ctx } = await setup(true, {}, startup) + if (!alreadyReady) { + expect(startup.pending).toBe(1) + expect(await acceptsSocket(ctx)).toBe(false) + startup.commit() + } + expect(await acceptsSocket(ctx)).toBe(true) + expect(startup.pending).toBe(0) + }) + + it('withdraws a pending WebSocket startup subscription when the Gateway unloads', async () => { + const startup = new StartupProbe() + const { ctx } = await setup(true, {}, startup) + expect(startup.pending).toBe(1) + await ctx.fiber.dispose() + expect(startup.pending).toBe(0) + // A launcher commit can already hold a copy of the cancelled listener. + expect(() => { startup.lastListener?.() }).not.toThrow() + expect(() => { startup.commit() }).not.toThrow() + }) + it('validates the WebSocket heartbeat timer range and the stream inbox bound', () => { expect(TypertGatewayService.Config({})).toEqual({ websocketHeartbeatIntervalMs: 2_000, streamInboxBytes: 262_144 }) expect(TypertGatewayService.Config({ websocketHeartbeatIntervalMs: MAX_TIMER_DELAY_MS, streamInboxBytes: 1 })) @@ -1341,9 +1390,11 @@ describe('Typert Remote streams', () => { async function setup( transport: boolean, gatewayConfig: GatewayConfig = {}, + ready?: AppReady, ): Promise<{ readonly ctx: Context; readonly service: FeedService }> { const ctx = new Context() roots.push(ctx) + if (ready !== undefined) ctx.provide('appReady', ready) if (transport) { await ctx.plugin(WebServer, { host: '127.0.0.1', port: 0 }) provideBrowserCredentials(ctx) @@ -1365,6 +1416,17 @@ async function setup( return { ctx, service: receiver[symbols.original] ?? receiver } } +async function acceptsSocket(ctx: Context): Promise { + const socket = new WebSocket(`ws://127.0.0.1:${String(ctx.webServer.port)}/api/remote.mux`, { + headers: { cookie: browserCookie(ctx) }, + }) + const closed = new Promise((resolve) => { socket.once('close', () => { resolve() }) }) + const opened = await once(socket, 'open').then(() => true, () => false) + if (opened) socket.close() + await closed + return opened +} + function descriptors(): InvocationDescriptor[] { const label = { name: 'label', diff --git a/packages/api/gateway/tsconfig.host.json b/packages/api/gateway/tsconfig.host.json index 0b3353158f..5cb68a7183 100644 --- a/packages/api/gateway/tsconfig.host.json +++ b/packages/api/gateway/tsconfig.host.json @@ -13,6 +13,9 @@ "src/types.ts" ], "references": [ + { + "path": "../../boot/cmdline" + }, { "path": "../../../vendor/cosmokit" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 688e808575..c1afb1ed9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1034,6 +1034,9 @@ importers: '@deepseek-ai/dsh-client-connection': specifier: workspace:^ version: link:../../client/connection + '@deepseek-ai/dsh-cmdline': + specifier: workspace:^ + version: link:../../boot/cmdline '@deepseek-ai/dsh-host-webserver': specifier: workspace:^ version: link:../../host/webserver From 1498b0192361d16100f3684af1a89634e445596b Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Tue, 22 Sep 2026 20:06:00 +0800 Subject: [PATCH 08/35] feat(voice-input): select responsive model download mirrors --- .../voice-download-fallback.expected.md | 4 + apps/web/tests/voice-download.e2e.ts | 59 +++++++++++- docs/config-catalog.i18n.yaml | 4 +- docs/config-catalog.md | 8 +- docs/config-catalog.zh.md | 8 +- .../README.i18n.yaml | 4 +- .../speech-to-text-sensevoice/README.md | 6 +- .../speech-to-text-sensevoice/README.zh.md | 6 +- .../speech-to-text-sensevoice/src/config.ts | 13 ++- .../speech-to-text-sensevoice/src/index.ts | 2 +- .../src/model-sources.ts | 41 +++++++++ .../speech-to-text-sensevoice/src/runtime.ts | 19 +++- .../tests/installer.spec.ts | 64 ++++++++++++- .../tests/model-sources.spec.ts | 92 +++++++++++++++++++ .../tests/provider.spec.ts | 11 ++- 15 files changed, 318 insertions(+), 23 deletions(-) create mode 100644 apps/web/tests/expected/voice-download-fallback.expected.md create mode 100644 packages/experimental/speech-to-text-sensevoice/src/model-sources.ts create mode 100644 packages/experimental/speech-to-text-sensevoice/tests/model-sources.spec.ts diff --git a/apps/web/tests/expected/voice-download-fallback.expected.md b/apps/web/tests/expected/voice-download-fallback.expected.md new file mode 100644 index 0000000000..898f471215 --- /dev/null +++ b/apps/web/tests/expected/voice-download-fallback.expected.md @@ -0,0 +1,4 @@ +- alert: + - paragraph: "Cannot download model.int8.onnx: the download service returned HTTP 502." + - paragraph: Confirm that the download address is available and the proxy can reach the download service, or retry later. + - text: "Download source: https://fallback-model-source.example" diff --git a/apps/web/tests/voice-download.e2e.ts b/apps/web/tests/voice-download.e2e.ts index 32161bceb3..c9651f1b02 100644 --- a/apps/web/tests/voice-download.e2e.ts +++ b/apps/web/tests/voice-download.e2e.ts @@ -1,7 +1,7 @@ /** The real local provider publishes actionable download failures through the speech Remote to bundle details. */ import { once } from 'node:events' import { mkdtemp, rm, writeFile } from 'node:fs/promises' -import { createServer } from 'node:http' +import { createServer, type ServerResponse } from 'node:http' import { tmpdir } from 'node:os' import { join } from 'node:path' import { fileURLToPath } from 'node:url' @@ -59,3 +59,60 @@ it('shows the failed asset, actual download source and recovery advice, then ret expect(requests).toHaveLength(2) expect(tripwire.pageErrors).toEqual([]) }) + +it.each([0, 1])('starts at responsive source %s and reports the fallback source through the real preparation UI', async (winner) => { + const root = await mkdtemp(join(tmpdir(), 'dsh-voice-mirrors-')) + onTestFinished(async () => { await rm(root, { recursive: true, force: true }) }) + const resources: { scaffold?: WebScaffold; browser?: Browser } = {} + const probes = new Map(), downloads: number[] = [], requestedPaths: string[] = [] + const servers = [0, 1].map(index => createServer((request, response) => { + requestedPaths.push(request.url!) + if (request.method === 'HEAD') { + probes.set(index, response) + // Release the winner only after both real Host requests overlap. + if (probes.size === 2) { const selected = probes.get(winner)!; selected.writeHead(200); selected.end() } + } else { + downloads.push(index) + response.writeHead(index === winner ? 503 : 502); response.end() + } + })) + onTestFinished(async () => { + try { await resources.browser?.close() } finally { + try { await resources.scaffold?.close() } finally { + await Promise.all(servers.map(async (server) => { + const closed = new Promise((resolve, reject) => { server.close((error) => { if (error) reject(error); else resolve() }) }) + server.closeAllConnections(); await closed + })) + } + } + }) + const origins = await Promise.all(servers.map(async (server) => { + server.listen(0, '127.0.0.1'); await once(server, 'listening') + const address = server.address() + if (!address || typeof address === 'string') throw new Error('Expected a loopback listener') + return `http://127.0.0.1:${address.port}` + })) + const overlay = join(root, 'voice.patch.yml') + await writeFile(overlay, `- id: speech-to-text-sensevoice\n config: ${JSON.stringify({ + dataRoot: join(root, 'models'), modelOrigins: origins, modelProbeTimeoutMs: 10_000, + })}\n`) + const scaffold = await launchWebScaffold({ profile: { packages: [{ dir: bundle, enabled: true }] }, extraOverlayPath: overlay }) + resources.scaffold = scaffold + const browser = await chromium.launch(); resources.browser = browser + const page = await newEnglishPage(browser), tripwire = watchConsole(page) + await page.goto(scaffold.authenticatedUrl) + await page.getByRole('button', { name: 'Plugins', exact: true }).click() + await page.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-voice-input-bundle"]').getByRole('button').click() + await page.getByRole('button', { name: 'Download and prepare', exact: true }).click() + const alert = page.getByRole('alert').filter({ hasText: 'Cannot download model.int8.onnx' }) + await alert.waitFor() + expect(downloads).toEqual([winner, 1 - winner]) + expect(requestedPaths).toHaveLength(4) + expect(requestedPaths.every(path => path === '/csukuangfj/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/resolve/2365baeacb507f821a0c8120fcee3d484dba7a07/model.int8.onnx')).toBe(true) + expect(await alert.textContent()).toContain('HTTP 502') + expect(await alert.textContent()).toContain(`Download source: ${origins[1 - winner]}`) + await compareOrRefreshGolden(fileURLToPath(new URL('./expected/voice-download-fallback.expected.md', import.meta.url)), + (await captureStableAria(page, '[role="alert"]', scaffold.workspaceCwd)).replaceAll(origins[1 - winner]!, 'https://fallback-model-source.example'), + webSnapshotMode()) + expect(tripwire.pageErrors).toEqual([]) +}) diff --git a/docs/config-catalog.i18n.yaml b/docs/config-catalog.i18n.yaml index 16c39be505..035799ad3d 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: 563c8d21896e93a76394937b55f841036ee74c42 -config-catalog.zh.md: f3505a577660a534e6c5a3d255d4c46a4cfaea05 +config-catalog.md: 05ee813fed33a1b781da898838d67b6d1a23dc89 +config-catalog.zh.md: 6a40a7dd204fc9bfeb1b23fff1913838c30c54ba diff --git a/docs/config-catalog.md b/docs/config-catalog.md index 563c8d2189..05ee813fed 100644 --- a/docs/config-catalog.md +++ b/docs/config-catalog.md @@ -1033,8 +1033,12 @@ export interface Config { vadModelPath?: string | undefined /** Weight precision; INT8 minimizes first-use download and model storage. */ precision: 'int8' | 'fp32' - /** Hugging Face-compatible origin for pinned model URLs, including private mirrors. */ - modelOrigin: string + /** Explicit Hugging Face-compatible origin; bypasses automatic selection and public fallback. */ + modelOrigin?: string | undefined + /** Hugging Face-compatible origins compared before downloading each missing asset. */ + modelOrigins: string[] + /** Deadline for concurrent HEAD probes, including redirects to the actual asset. */ + modelProbeTimeoutMs: number /** CPU intra-operation thread count. */ threads: number /** Maximum speech segment length passed to the recognizer. */ diff --git a/docs/config-catalog.zh.md b/docs/config-catalog.zh.md index f3505a5776..6a40a7dd20 100644 --- a/docs/config-catalog.zh.md +++ b/docs/config-catalog.zh.md @@ -1035,8 +1035,12 @@ export interface Config { vadModelPath?: string | undefined /** Weight precision; INT8 minimizes first-use download and model storage. */ precision: 'int8' | 'fp32' - /** Hugging Face-compatible origin for pinned model URLs, including private mirrors. */ - modelOrigin: string + /** Explicit Hugging Face-compatible origin; bypasses automatic selection and public fallback. */ + modelOrigin?: string | undefined + /** Hugging Face-compatible origins compared before downloading each missing asset. */ + modelOrigins: string[] + /** Deadline for concurrent HEAD probes, including redirects to the actual asset. */ + modelProbeTimeoutMs: number /** CPU intra-operation thread count. */ threads: number /** Maximum speech segment length passed to the recognizer. */ diff --git a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml b/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml index a6f7e23754..7c78c1a4a6 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml +++ b/packages/experimental/speech-to-text-sensevoice/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/experimental/speech-to-text-sensevoice/README.md -README.md: 412b179d03e8b6a9eff143a5884bfb393996249b -README.zh.md: b9a00d7ba9cb454fab9b1153bb1855107b08a34a +README.md: 2dd4fe5f93248c4fde4752adbec19039afecd85c +README.zh.md: 570c343a8fef2834a8a0d00e07f3513e1d28fdb7 diff --git a/packages/experimental/speech-to-text-sensevoice/README.md b/packages/experimental/speech-to-text-sensevoice/README.md index 412b179d03..2dd4fe5f93 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.md +++ b/packages/experimental/speech-to-text-sensevoice/README.md @@ -25,7 +25,11 @@ This provider recognizes speech with SenseVoiceSmall ONNX and Silero VAD on the ## Use this package -The [bundle](../voice-input-bundle/README.md) supplies an absolute `dataRoot` under the DSH home. Preparation downloads revision-pinned model files, verifies their sizes and SHA-256 hashes, then loads them. `precision` defaults to `int8`; `fp32` selects the larger reference weights. `modelDirectory` supplies an existing absolute directory containing the selected ONNX file and `tokens.txt`; `vadModelPath` selects an existing Silero ONNX file. `modelOrigin` selects a Hugging Face-compatible download origin while preserving pinned paths and checksums. Verified completed files remain reusable after cancellation or failure. +The [bundle](../voice-input-bundle/README.md) supplies an absolute `dataRoot` under the DSH home. Preparation downloads revision-pinned model files, verifies their sizes and SHA-256 hashes, then loads them. `precision` defaults to `int8`; `fp32` selects the larger reference weights. `modelDirectory` supplies an existing absolute directory containing the selected ONNX file and `tokens.txt`; `vadModelPath` selects an existing Silero ONNX file. Verified completed files remain reusable after cancellation or failure. + +Before each missing asset is downloaded, the Host compares the Hugging Face-compatible `modelOrigins`, which default to `https://huggingface.co` and [HF-Mirror](https://hf-mirror.com). Concurrent HEAD requests follow the pinned file path and redirects through the Host's fetch proxy; the first 2xx response is tried first. `modelProbeTimeoutMs` defaults to 3000 ms; when every probe fails, downloads use the configured order. Network, HTTP, certificate and integrity failures try the remaining sources; cancellation, storage failures and unclassified failures stop preparation. Pinned revisions, sizes and SHA-256 hashes apply to every source. Response latency does not measure download throughput; the preparation deadline still bounds the complete download. + +An explicit `modelOrigin` uses only that origin, without probing or public fallback. A single-entry `modelOrigins` also skips probing. Verified caches and explicit offline paths require no source requests. Source selection adds no picker to the voice UI; preparation retains its progress and failure display. Download failures identify the asset and source origin, with a classified cause and HTTP status or diagnostic code when available. The public state omits URL credentials, query strings and raw cause messages. Retry reuses verified files; partial downloads restart. diff --git a/packages/experimental/speech-to-text-sensevoice/README.zh.md b/packages/experimental/speech-to-text-sensevoice/README.zh.md index b9a00d7ba9..570c343a8f 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.zh.md +++ b/packages/experimental/speech-to-text-sensevoice/README.zh.md @@ -25,7 +25,11 @@ kind: "package-reference" ## 使用此包 -[Bundle](../voice-input-bundle/README.zh.md) 在 DSH 主目录下提供绝对 `dataRoot`。准备会下载固定修订的模型文件,校验大小与 SHA-256,再加载模型。`precision` 默认为 `int8`,`fp32` 选择较大的参考权重。`modelDirectory` 提供包含所选 ONNX 文件和 `tokens.txt` 的已有绝对目录,`vadModelPath` 选择已有 Silero ONNX 文件。`modelOrigin` 选择兼容 Hugging Face 的下载源,固定路径和校验值保持不变。取消或失败后复用已完成并通过校验的文件。 +[Bundle](../voice-input-bundle/README.zh.md) 在 DSH 主目录下提供绝对 `dataRoot`。准备会下载固定修订的模型文件,校验大小与 SHA-256,再加载模型。`precision` 默认为 `int8`,`fp32` 选择较大的参考权重。`modelDirectory` 提供包含所选 ONNX 文件和 `tokens.txt` 的已有绝对目录,`vadModelPath` 选择已有 Silero ONNX 文件。取消或失败后复用已完成并通过校验的文件。 + +下载每个缺失文件前,Host 会比较兼容 Hugging Face 的 `modelOrigins`,默认为 `https://huggingface.co` 和 [HF-Mirror](https://hf-mirror.com)。并发 HEAD 请求沿用固定文件路径,通过 Host 的 fetch 代理跟随重定向,先返回 2xx 的源优先下载。`modelProbeTimeoutMs` 默认为 3000 毫秒;所有探测均失败时按配置顺序下载。网络、HTTP、证书或完整性校验失败会尝试其他源;取消、存储错误和未分类错误会停止准备。所有源都必须符合固定修订、大小和 SHA-256 校验值。响应延迟不代表下载吞吐量,完整下载仍受准备阶段的总超时约束。 + +显式 `modelOrigin` 仅使用指定源,不探测也不回退到公共源。只有一个地址的 `modelOrigins` 同样跳过探测。已校验的缓存和显式离线路径无需请求下载源。语音 UI 不新增源选择器,准备流程继续显示进度和失败原因。 下载失败会标明文件与下载源,并提供原因分类,以及可用的 HTTP 状态或错误码。公开状态不包含 URL 凭据、查询参数和原始底层错误消息。重试复用已校验文件,未完成的文件重新下载。 diff --git a/packages/experimental/speech-to-text-sensevoice/src/config.ts b/packages/experimental/speech-to-text-sensevoice/src/config.ts index 33729f2dd6..c3c24232d8 100644 --- a/packages/experimental/speech-to-text-sensevoice/src/config.ts +++ b/packages/experimental/speech-to-text-sensevoice/src/config.ts @@ -14,8 +14,12 @@ export interface Config { vadModelPath?: string | undefined /** Weight precision; INT8 minimizes first-use download and model storage. */ precision: 'int8' | 'fp32' - /** Hugging Face-compatible origin for pinned model URLs, including private mirrors. */ - modelOrigin: string + /** Explicit Hugging Face-compatible origin; bypasses automatic selection and public fallback. */ + modelOrigin?: string | undefined + /** Hugging Face-compatible origins compared before downloading each missing asset. */ + modelOrigins: string[] + /** Deadline for concurrent HEAD probes, including redirects to the actual asset. */ + modelProbeTimeoutMs: number /** CPU intra-operation thread count. */ threads: number /** Maximum speech segment length passed to the recognizer. */ @@ -53,7 +57,10 @@ export const Config: z, Config> = z.object({ modelDirectory: z.union([z.string().min(1), z.const(undefined)]), vadModelPath: z.union([z.string().min(1), z.const(undefined)]), precision: z.union(['int8', 'fp32']).default('int8'), - modelOrigin: z.string().pattern(/^https?:\/\/[^/\s?#@]+\/?$/).default('https://huggingface.co'), + modelOrigin: z.union([z.string().pattern(/^https?:\/\/[^/\s?#@]+\/?$/), z.const(undefined)]), + modelOrigins: z.array(z.string().pattern(/^https?:\/\/[^/\s?#@]+\/?$/)).min(1) + .default(['https://huggingface.co', 'https://hf-mirror.com']), + modelProbeTimeoutMs: z.natural().min(1).max(MAX_TIMER_DELAY_MS).default(3000), threads: z.natural().min(1).default(2), segmentSeconds: z.number().min(1).max(120).default(30), vadThreshold: z.number().min(0).max(1).default(0.5), diff --git a/packages/experimental/speech-to-text-sensevoice/src/index.ts b/packages/experimental/speech-to-text-sensevoice/src/index.ts index 987f0443ed..461ef415c2 100644 --- a/packages/experimental/speech-to-text-sensevoice/src/index.ts +++ b/packages/experimental/speech-to-text-sensevoice/src/index.ts @@ -21,7 +21,7 @@ export function apply(ctx: Context, config: Config): void { for (const path of [config.dataRoot, config.modelDirectory, config.vadModelPath]) { if (path !== undefined && !isAbsolute(path)) throw new Error(`SenseVoice paths must be absolute: ${path}`) } - new URL(config.modelOrigin) + for (const origin of config.modelOrigin === undefined ? config.modelOrigins : [config.modelOrigin]) new URL(origin) const worker = new SenseVoiceWorker(ctx, config) const estimatedBytes = config.precision === 'int8' ? 1_000_000_000 : 2_000_000_000 ctx.effect(() => { diff --git a/packages/experimental/speech-to-text-sensevoice/src/model-sources.ts b/packages/experimental/speech-to-text-sensevoice/src/model-sources.ts new file mode 100644 index 0000000000..e321dedbfa --- /dev/null +++ b/packages/experimental/speech-to-text-sensevoice/src/model-sources.ts @@ -0,0 +1,41 @@ +/** Host-side response comparison for pinned model files on Hugging Face-compatible origins. */ +import { deadline } from '@deepseek-ai/dsh-timeout' + +/** + * Prefer the first successful HEAD response while retaining other sources for download fallback. + * All probes settle before returning; if every probe fails, the configured order is preserved. + * @param assetUrl - revision-pinned upstream file URL. + * @param origins - nonempty configured origins, or one explicit deployment origin. + * @param timeoutMs - maximum probe duration, including redirects. + * @param signal - preparation cancellation or deadline. + * @returns deduplicated download URLs with the first responding source first; a single source needs no probe. + */ +export async function orderModelSources(assetUrl: string, origins: readonly string[], timeoutMs: number, + signal: AbortSignal): Promise { + signal.throwIfAborted() + const path = new URL(assetUrl).pathname + const urls = [...new Set(origins.map(origin => new URL(path, origin).href))] + if (urls.length === 1) return urls + const finished = new AbortController() + using timeout = deadline(signal, timeoutMs, 'SPEECH_SOURCE_PROBE_TIMEOUT') + const probing = AbortSignal.any([timeout.signal, finished.signal]) + const requests = urls.map(async url => ({ url, response: await fetch(url, { method: 'HEAD', signal: probing }) })) + let preferred: string | undefined + try { + preferred = await Promise.any(requests.map(async (request) => { + const { url, response } = await request + if (!response.ok) throw new Error(`Model source probe returned HTTP ${response.status}`) + return url + })) + } catch (_unavailableSources) { + // Downloads can still work when an origin refuses HEAD or exceeds the probe deadline. + } finally { + finished.abort() + const settled = await Promise.allSettled(requests) + await Promise.allSettled(settled.map(async (result) => { + if (result.status === 'fulfilled') await result.value.response.body?.cancel() + })) + } + signal.throwIfAborted() + return preferred === undefined ? urls : [preferred, ...urls.filter(url => url !== preferred)] +} diff --git a/packages/experimental/speech-to-text-sensevoice/src/runtime.ts b/packages/experimental/speech-to-text-sensevoice/src/runtime.ts index e67adfe240..67da743073 100644 --- a/packages/experimental/speech-to-text-sensevoice/src/runtime.ts +++ b/packages/experimental/speech-to-text-sensevoice/src/runtime.ts @@ -13,6 +13,7 @@ import type { Config } from './config.ts' import type { SpeechPreparationState } from '@deepseek-ai/dsh-experimental-speech-to-text/types' import { timeoutOf } from '@deepseek-ai/dsh-timeout' import { classifyDownloadFailure, SpeechDownloadError } from './download-error.ts' +import { orderModelSources } from './model-sources.ts' /** Release-pinned downloadable file. */ export interface Asset { @@ -113,6 +114,7 @@ export async function downloadAsset(asset: Asset, root: string, signal: AbortSig const response = await fetch(asset.url, { signal }) source = new URL(response.url || asset.url).origin if (!response.ok || !response.body) { + await response.body?.cancel() throw new SpeechDownloadError({ resource: asset.name, source, reason: 'http', status: response.status }) } const digest = createHash('sha256') @@ -148,7 +150,7 @@ export async function downloadAsset(asset: Asset, root: string, signal: AbortSig /** * Resolve the bundled native runtime and prepare verified ONNX models on demand. * @param _ctx - Host context owning the preparation task. - * @param config - model paths, precision, and download origin. + * @param config - model paths, precision, and download source policy. * @param signal - preparation cancellation or deadline. * @param report - Host-owned progress publisher. * @returns verified model and worker paths. @@ -157,9 +159,18 @@ export async function prepareRuntime(_ctx: Context, config: Config, signal: Abor report: (state: SpeechPreparationState) => void = () => {}): Promise { const { lock, modelRoot, paths } = resolveRuntime(config) const download = async (asset: Asset, root: string, step: 'model' | 'vad'): Promise => { - const url = new URL(asset.url) - const pinned = { ...asset, url: `${config.modelOrigin.replace(/\/$/, '')}${url.pathname}` } - await downloadAsset(pinned, root, signal, (state) => { report({ ...state, step }) }) + if (await matchesAsset(join(root, asset.name), asset, signal)) return + const origins = config.modelOrigin === undefined ? config.modelOrigins : [config.modelOrigin] + const urls = await orderModelSources(asset.url, origins, config.modelProbeTimeoutMs, signal) + for (const [index, url] of urls.entries()) { + try { + await downloadAsset({ ...asset, url }, root, signal, (state) => { report({ ...state, step }) }) + return + } catch (error) { + if (signal.aborted || !(error instanceof SpeechDownloadError) || error.download.reason === 'storage' + || error.download.reason === 'unknown' || index === urls.length - 1) throw error + } + } } if (config.modelDirectory === undefined) { report({ phase: 'checking', step: 'model', startedAt: Date.now() }) diff --git a/packages/experimental/speech-to-text-sensevoice/tests/installer.spec.ts b/packages/experimental/speech-to-text-sensevoice/tests/installer.spec.ts index 0e3b532f70..c6059e06a5 100644 --- a/packages/experimental/speech-to-text-sensevoice/tests/installer.spec.ts +++ b/packages/experimental/speech-to-text-sensevoice/tests/installer.spec.ts @@ -1,7 +1,7 @@ /** ONNX preparation reuses verified files and honors explicit offline deployments. */ import { writeFileSync } from 'node:fs' import { createHash } from 'node:crypto' -import { access, mkdtemp, mkdir, readFile, rm, writeFile } from 'node:fs/promises' +import { access, mkdtemp, mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' import { Context } from '@deepseek-ai/cordis' @@ -19,7 +19,7 @@ const asset = (name: string): Asset => ({ name, url: `https://huggingface.co/own const fake = vi.hoisted(() => ({ lock: {} })) vi.mock('node:fs/promises', async (importOriginal) => { const actual = await importOriginal() - return { ...actual, access: vi.fn(actual.access) } + return { ...actual, access: vi.fn(actual.access), rename: vi.fn(actual.rename) } }) vi.mock('node:fs', async (importOriginal) => { const actual = await importOriginal() @@ -92,7 +92,7 @@ it('reports filesystem access errors instead of treating unreadable caches as ab async function fixture() { const root = await mkdtemp(join(tmpdir(), 'dsh-speech-onnx-')); roots.push(root) fake.lock = { models: { int8: asset('model.int8.onnx'), fp32: asset('model.onnx') }, tokens: asset('tokens.txt'), vad: asset('silero_vad.onnx') } - const fetcher = vi.fn(async (_url: string) => new Response(bytes)); vi.stubGlobal('fetch', fetcher) + const fetcher = vi.fn(async (_url: string, _init?: RequestInit) => new Response(bytes)); vi.stubGlobal('fetch', fetcher) return { root, fetcher } } it.each(['darwin-arm64', 'darwin-x64', 'linux-arm64', 'linux-x64', 'win32-x64'])('prepares only model files on %s', async (target) => { @@ -143,3 +143,61 @@ it('rejects cached files changed before the final verification stage', async () if (state.step === 'verify') writeFileSync(join(root, 'models', 'sensevoice-onnx', 'model.int8.onnx'), 'changed') })).rejects.toThrow('verification failed') }) + +it('downloads missing assets from the first responsive mirror and reuses verified files without probes', async () => { + const { root, fetcher } = await fixture() + fetcher.mockImplementation(async (url, init) => init?.method === 'HEAD' + ? new Response(null, { status: url.startsWith('https://hf-mirror.com/') ? 200 : 503 }) : new Response(bytes)) + const config = Config({ dataRoot: root }) + await prepareRuntime(new Context(), config, new AbortController().signal) + const downloads = fetcher.mock.calls.filter(([, init]) => init?.method !== 'HEAD').map(([url]) => url) + expect(downloads).toEqual(['model.int8.onnx', 'tokens.txt', 'silero_vad.onnx'] + .map(name => `https://hf-mirror.com/owner/model/resolve/revision/${name}`)) + fetcher.mockClear() + await prepareRuntime(new Context(), config, new AbortController().signal) + expect(fetcher).not.toHaveBeenCalled() +}) + +it.each(['http', 'network', 'integrity'] as const)('falls back after a %s failure without accepting unverified bytes', async (reason) => { + const { root, fetcher } = await fixture() + fetcher.mockImplementation(async (url, init) => { + const mirror = url.startsWith('https://hf-mirror.com/') + if (init?.method === 'HEAD') return new Response(null, { status: mirror ? 200 : 503 }) + if (!mirror) return new Response(bytes) + if (reason === 'network') throw new TypeError('fetch failed') + return reason === 'http' ? new Response('unavailable', { status: 503 }) : new Response('corrupt') + }) + const paths = await prepareRuntime(new Context(), Config({ dataRoot: root }), new AbortController().signal) + expect(await readFile(paths.model)).toEqual(bytes) + const downloads = fetcher.mock.calls.filter(([, init]) => init?.method !== 'HEAD').map(([url]) => new URL(url).origin) + expect(downloads).toEqual(['https://hf-mirror.com', 'https://huggingface.co', + 'https://hf-mirror.com', 'https://huggingface.co', 'https://hf-mirror.com', 'https://huggingface.co']) +}) + +it.each(['EACCES', 'unclassified'])('does not switch sources for a local publication failure (%s)', async (code) => { + const { root, fetcher } = await fixture() + vi.mocked(rename).mockRejectedValueOnce(Object.assign(new Error('cannot publish'), { code })) + await expect(prepareRuntime(new Context(), Config({ dataRoot: root }), new AbortController().signal)).rejects.toMatchObject({ + download: { reason: code === 'EACCES' ? 'storage' : 'unknown' }, + }) + expect(fetcher.mock.calls.filter(([, init]) => init?.method !== 'HEAD')).toHaveLength(1) +}) + +it('does not switch sources after cancellation during a download', async () => { + const { root, fetcher } = await fixture(), abort = new AbortController(), reason = new Error('cancelled') + fetcher.mockImplementation(async (_url, init) => { + if (init?.method === 'HEAD') return new Response(null) + abort.abort(reason); throw reason + }) + await expect(prepareRuntime(new Context(), Config({ dataRoot: root }), abort.signal)).rejects.toBe(reason) + expect(fetcher.mock.calls.filter(([, init]) => init?.method !== 'HEAD')).toHaveLength(1) +}) + +it('reports the final source when every download fails', async () => { + const { root, fetcher } = await fixture() + fetcher.mockResolvedValue(new Response(null, { status: 503 })) + await expect(prepareRuntime(new Context(), Config({ dataRoot: root }), new AbortController().signal)).rejects.toMatchObject({ + download: { source: 'https://hf-mirror.com', reason: 'http', status: 503 }, + }) + expect(fetcher.mock.calls.filter(([, init]) => init?.method !== 'HEAD')).toHaveLength(2) +}) diff --git a/packages/experimental/speech-to-text-sensevoice/tests/model-sources.spec.ts b/packages/experimental/speech-to-text-sensevoice/tests/model-sources.spec.ts new file mode 100644 index 0000000000..43cc295d8c --- /dev/null +++ b/packages/experimental/speech-to-text-sensevoice/tests/model-sources.spec.ts @@ -0,0 +1,92 @@ +/** Source races are controlled by response barriers and share preparation cancellation. */ +import { afterEach, expect, it, onTestFinished, vi } from 'vitest' +import { orderModelSources } from '../src/model-sources.ts' + +const origins = ['https://huggingface.co', 'https://hf-mirror.com'] as const +const path = '/owner/model/resolve/pinned/model.onnx' +afterEach(() => { vi.unstubAllGlobals(); vi.useRealTimers() }) + +function race() { + const requests = new Map> & { signal: AbortSignal }>() + const fetcher = vi.fn((url: string, init: RequestInit) => { + const signal = init.signal! + const pending = Promise.withResolvers() + const abort = () => { pending.reject(signal.reason) } + signal.addEventListener('abort', abort, { once: true }) + requests.set(url, { ...pending, signal }) + return pending.promise.finally(() => { signal.removeEventListener('abort', abort) }) + }) + vi.stubGlobal('fetch', fetcher) + const cancel = new AbortController() + const result = orderModelSources(origins[0] + path, origins, 50, cancel.signal) + onTestFinished(async () => { cancel.abort(); await result.catch(() => {}) }) + const request = (origin: string) => requests.get(origin + path)! + return { request, fetcher, cancel, result } +} + +it.each(origins)('prefers %s after its first successful response and joins the other request', async (winner) => { + vi.useFakeTimers() + const { request, fetcher, result } = race() + expect(fetcher).toHaveBeenCalledTimes(2) + expect(fetcher).toHaveBeenCalledWith(winner + path, expect.objectContaining({ method: 'HEAD' })) + request(winner).resolve(new Response(null)) + expect(await result).toEqual([winner + path, ...origins.filter(origin => origin !== winner).map(origin => origin + path)]) + expect(origins.every(origin => request(origin).signal.aborted)).toBe(true) + expect(vi.getTimerCount()).toBe(0) +}) + +it('ignores a faster HTTP error and releases any returned bodies', async () => { + const { request, result } = race() + const cancel = vi.fn() + request(origins[0]).resolve(new Response(new ReadableStream({ cancel }), { status: 503 })) + request(origins[1]).resolve(new Response(null)) + expect(await result).toEqual([origins[1] + path, origins[0] + path]) + expect(cancel).toHaveBeenCalledOnce() +}) + +it('preserves configured order if every probe fails', async () => { + const { request, result } = race() + request(origins[0]).reject(new TypeError('offline')) + request(origins[1]).resolve(new Response(null, { status: 405 })) + expect(await result).toEqual(origins.map(origin => origin + path)) +}) + +it('bounds probes without cancelling the following download', async () => { + vi.useFakeTimers() + const { request, result, cancel } = race() + await vi.advanceTimersByTimeAsync(50) + expect(await result).toEqual(origins.map(origin => origin + path)) + expect(origins.every(origin => request(origin).signal.aborted)).toBe(true) + expect(cancel.signal.aborted).toBe(false) + expect(vi.getTimerCount()).toBe(0) +}) + +it('rejects preparation cancellation after joining both probes', async () => { + const { request, result, cancel } = race() + const reason = new Error('cancelled') + const rejected = expect(result).rejects.toBe(reason) + cancel.abort(reason) + await rejected + expect(origins.every(origin => request(origin).signal.aborted)).toBe(true) +}) + +it('uses a single deduplicated origin without probing and rejects already cancelled preparation', async () => { + const fetcher = vi.fn(); vi.stubGlobal('fetch', fetcher) + expect(await orderModelSources(origins[0] + path, ['https://private.example', 'https://private.example/'], 50, + new AbortController().signal)).toEqual(['https://private.example' + path]) + await expect(orderModelSources(origins[0] + path, origins, 50, AbortSignal.abort(new Error('cancelled')))).rejects.toThrow('cancelled') + expect(fetcher).not.toHaveBeenCalled() +}) + +it('waits for body cleanup without changing the winning source', async () => { + const { request, result } = race() + const cleanup = Promise.withResolvers(), cancelling = Promise.withResolvers(), settled = vi.fn() + void result.then(settled) + request(origins[1]).resolve(new Response(new ReadableStream({ cancel() { cancelling.resolve(undefined); return cleanup.promise } }))) + try { + await cancelling.promise + expect(settled).not.toHaveBeenCalled() + cleanup.resolve(undefined) + expect(await result).toEqual([origins[1] + path, origins[0] + path]) + } finally { cleanup.resolve(undefined); await result } +}) diff --git a/packages/experimental/speech-to-text-sensevoice/tests/provider.spec.ts b/packages/experimental/speech-to-text-sensevoice/tests/provider.spec.ts index a2fef1fd18..ed05490aa2 100644 --- a/packages/experimental/speech-to-text-sensevoice/tests/provider.spec.ts +++ b/packages/experimental/speech-to-text-sensevoice/tests/provider.spec.ts @@ -14,7 +14,9 @@ it.each(['int8', 'fp32'] as const)('registers %s lazily and joins inference befo await ctx.plugin(LocalSubprocess) await ctx.plugin(SpeechToText, { defaultProvider: 'sensevoice-local', language: 'auto' }) const transcribe = vi.spyOn(SenseVoiceWorker.prototype, 'transcribe') - const fiber = ctx.plugin(Provider, { dataRoot: process.cwd(), precision }) + const fiber = ctx.plugin(Provider, { dataRoot: process.cwd(), precision, + ...precision === 'fp32' ? { modelOrigin: 'https://private.example' } : {}, + }) await fiber expect(transcribe).not.toHaveBeenCalled() const speech = ctx.get('speechToText')! @@ -38,3 +40,10 @@ it('refuses relative runtime, model and cache paths before registration', () => } expect(() => Provider.Config({ dataRoot: process.cwd(), threads: 0 })).toThrow() }) + +it.each([ + { modelOrigins: [] }, { modelOrigins: ['https://example.com/path'] }, { modelOrigins: ['https://user:secret@example.com'] }, + { modelOrigin: 'file:///models' }, { modelProbeTimeoutMs: 0 }, { modelProbeTimeoutMs: 2_147_483_648 }, +])('rejects invalid download source configuration %j', (config) => { + expect(() => Provider.Config({ dataRoot: process.cwd(), ...config })).toThrow() +}) From 6a07033145bd40a45114861a0f13daa68ab3e1b5 Mon Sep 17 00:00:00 2001 From: Yif <877193178@qq.com> Date: Tue, 22 Sep 2026 20:39:38 +0800 Subject: [PATCH 09/35] docs(skills): require designer review for new icons and user-perceivable UI changes --- .agents/skills/dsh-client-ui-ux/SKILL.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.agents/skills/dsh-client-ui-ux/SKILL.md b/.agents/skills/dsh-client-ui-ux/SKILL.md index c975f65cd0..6b65494ec9 100644 --- a/.agents/skills/dsh-client-ui-ux/SKILL.md +++ b/.agents/skills/dsh-client-ui-ux/SKILL.md @@ -18,7 +18,7 @@ This skill is guidance, not a complete checklist. It covers judgment calls that ## Reuse before adding - **Extend an existing component, container, or interaction before creating a new one.** A new capability that fits an existing surface (an extra menu item, a new prop on a primitive, an interactive mode on Tooltip) beats a parallel element stacked beside it. -- **Icons come from the existing icon library.** Pick the semantically closest existing icon; a genuinely new glyph requires designer approval before it lands. +- **Icons come from the existing icon library.** Pick the semantically closest existing icon; a genuinely new glyph requires designer approval before it lands — when reviewing a PR that adds one, suggest requesting a designer review. - **Right-sidebar content registers a slot in the existing sidebar**, never a separate sidebar. Every sidebar tab declares a tab icon matching its meaning. - **Icon-only actions whose meaning is not obvious get a Tooltip.** Prefer the shared Tooltip primitive (with `interactive` for selectable informational content) over ad-hoc title attributes. @@ -53,3 +53,7 @@ Every menu, popover, and tooltip must be verified for all three before merge: - Review every changed region for gaps: nothing sits flush against its neighbour without an intentional gap, and adjacent icons and elements keep the region's established spacing. - Prefer symmetry for parallel elements; an unexplained one-off gap or offset usually signals a missed shared value. + +## Design review escalation + +- A PR with extensive UI changes, or any clearly user-perceivable change to UI or interaction, must get a designer or product review. When no approver holds that role, suggest requesting review from yx zhang, yifffan, zhangziya, or gaokaige. From e8d5278c4629bbcac2ec7f9a0ceee9645f157437 Mon Sep 17 00:00:00 2001 From: Yif <877193178@qq.com> Date: Tue, 22 Sep 2026 21:03:30 +0800 Subject: [PATCH 10/35] docs(skills): fix review findings in dsh-client-ui-ux and add scrollbar rule Point selectable hover content at HoverCard (Tooltip has no interactive prop), require a persistently mounted toast host, scope the font-weight cap to new feature CSS, prefer theme typography tokens, link the styling owners, date the design-reviewer roster, add the scrollbar containment rule, and make the skill discoverable from packages/client/AGENTS.md. --- .agents/skills/dsh-client-ui-ux/SKILL.md | 23 +++++++++++++---------- packages/client/AGENTS.md | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/.agents/skills/dsh-client-ui-ux/SKILL.md b/.agents/skills/dsh-client-ui-ux/SKILL.md index 6b65494ec9..de63792f72 100644 --- a/.agents/skills/dsh-client-ui-ux/SKILL.md +++ b/.agents/skills/dsh-client-ui-ux/SKILL.md @@ -5,36 +5,37 @@ description: Design and review DeepSeek Harness client UI changes — visual tok # DeepSeek Harness Client UI/UX -This skill is guidance, not a complete checklist. It covers judgment calls that lint, typecheck, and the i18n gate cannot make: where feedback appears, what gets reused, and how surfaces behave at window edges and across platforms. Copy quality itself follows [dsh-prose-standard](../dsh-prose-standard/SKILL.md); locale ownership follows the [locale-owned copy decision](../../notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.md). +This skill is guidance, not a complete checklist. It covers judgment calls that lint, typecheck, and the i18n gate cannot make: where feedback appears, what gets reused, and how surfaces behave at window edges and across platforms. Copy quality itself follows [dsh-prose-standard](../dsh-prose-standard/SKILL.md); locale ownership follows the [locale-owned copy decision](../../notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.md); styling ownership and token rules live in [docs/web-styling.md](../../../docs/web-styling.md) and the [ui-primitives component catalog](../../../packages/client/ui-primitives/README.md#component-catalog) — this skill adds judgment on top of those rules, not a second copy of them. ## Visual foundation - **Use existing tokens for color, radius, and spacing.** Before introducing a literal value, search the target page and its nearest established sibling (the Plugins page is the usual reference for full-page surfaces) for the token or value already in use, and adopt it. The same applies to whole treatments — toasts, menus, in-message artifact previews, sidebar tab layout, colors, clearance rules, page padding: reuse the established component or rule wherever one exists instead of inventing a parallel one. - **Verify every color in both light and dark mode.** An ink/background pair must stay readable under both themes before it ships. Dimmed tones are the standing counter-example: they suit decorative surfaces, but on text they routinely fall below readability in one theme — never put a dimmed color on text without checking both. -- **Font weight tops out at 500.** Do not use 600+ for emphasis; differentiate with size or ink instead. -- **Pick font sizes from the page's existing scale.** Parallel content shares one size; never invent a size for a single element, and keep the number of distinct sizes on a page small (13px is the established row/detail size). When the page itself has no precedent, borrow the size and spacing ratios of the most similar existing page or element. +- **Font weight tops out at 500 in feature CSS you add or change.** Do not use 600+ for emphasis; differentiate with size or ink instead. The markdown typography tokens owned by ui-theme are the standing exception. +- **Pick font sizes from the theme typography variables when an existing role matches, otherwise from the page's existing scale.** Parallel content shares one size; never invent a size for a single element, and keep the number of distinct sizes on a page small (13px is the established row/detail size). When the page itself has no precedent, borrow the size and spacing ratios of the most similar existing page or element. - **Icons, text, and neighbouring elements stay proportionate and aligned.** Every element lines up with its siblings along a deliberate axis (baseline, vertical center, or shared edge), and an icon's size stays in proportion to the text beside it; never ship an element that aligns to nothing or visibly outweighs its neighbours. ## Reuse before adding -- **Extend an existing component, container, or interaction before creating a new one.** A new capability that fits an existing surface (an extra menu item, a new prop on a primitive, an interactive mode on Tooltip) beats a parallel element stacked beside it. -- **Icons come from the existing icon library.** Pick the semantically closest existing icon; a genuinely new glyph requires designer approval before it lands — when reviewing a PR that adds one, suggest requesting a designer review. +- **Extend an existing component, container, or interaction before creating a new one.** A new capability that fits an existing surface (an extra menu item, a new prop on an existing primitive) beats a parallel element stacked beside it. +- **Icons come from the existing icon library.** Pick the semantically closest existing icon; a new glyph requires designer approval before it lands — when reviewing a PR that adds one, suggest requesting a designer review. - **Right-sidebar content registers a slot in the existing sidebar**, never a separate sidebar. Every sidebar tab declares a tab icon matching its meaning. -- **Icon-only actions whose meaning is not obvious get a Tooltip.** Prefer the shared Tooltip primitive (with `interactive` for selectable informational content) over ad-hoc title attributes. +- **Icon-only actions whose meaning is not obvious get a Tooltip.** Informational content the pointer must rest on or select uses HoverCard instead. Prefer these shared primitives over ad-hoc title attributes. ## Feedback surfaces Choose the surface by the lifetime of the message relative to the surface that produced it: -- **Transient operation outcomes use the app-wide Toast primitive**, not in-place notices. A deletion can close the panel or tab that requested it; only a toast outlives that surface. Report success and failure; do not report still-pending states. +- **Transient operation outcomes use the app-wide Toast primitive**, not in-place notices, and the toast's state and rendering live in a host that outlives the reporting surface (a `shell.overlay` entry, as RowActionToast does) — a toast rendered by the panel itself unmounts with that panel. A deletion can close the panel or tab that requested it; only a toast held outside that surface survives the close. Report success and failure; do not report still-pending states. - **A failed operation keeps the data visible.** A failed deletion keeps its row; the toast announces the failure. Never blank content to show an error for a transient operation. - **In-place notices are for states tied to the surface itself**: a query failure with its Retry action, field validation on the form that owns the field. A populated panel keeps a compact notice beside its retained content; only an empty panel centers a full error state. - **Error copy is plain language, and short.** No internal jargon or technical nouns unless an error code must be exposed for debugging. Prefer one clear sentence; anything explainable in two sentences must not grow into paragraphs. A Chinese notice of at most two sentences omits the trailing 句号(。). The notice must not break the existing layout — reserve its space or overlay it; never shift neighbouring elements. + ## Loading states -- Lists use their skeleton; every other page-level load centers a bare spinner. Never park a spinner at a corner of the page. +- Lists use their skeleton; every other page-level load centers a bare spinner. Never place a spinner in a corner of the page. - One loading treatment per page/component — concurrent regions must not each flash their own style. -- No loading text unless the context genuinely needs it (narrow sidebars almost never do). +- No loading text unless the context needs it (narrow sidebars almost never do). ## Overlays and menus @@ -44,6 +45,8 @@ Every menu, popover, and tooltip must be verified for all three before merge: - **Viewport-fitting**: it slides or flips to stay inside the window with an edge margin, and flips only into a side that actually fits (no oscillation when neither side fits). - **Unclipped**: it escapes `overflow` ancestors and containing blocks (portal to body where needed) and is never covered by neighbouring elements. +Scrollbars stay inside their container: use the shared scrollbar styles rather than component-specific selectors, and verify the bar neither overflows the container nor gets clipped by its rounded corners or edges — keep a small inset instead of letting it sit flush against the container edge. + ## Platform window adaptation - Any new header element or full page must account for macOS and Windows window chrome. On macOS the titlebar clearance is `--dsh-frame-top-clearance`, consumed by Menu, Modal, and overlay primitives as their top safe margin — **never change the global variable to fix one page**. Add a scoped `[data-platform='darwin']` override on the page's own inset instead, and assert the override in the page's stylesheet spec. @@ -56,4 +59,4 @@ Every menu, popover, and tooltip must be verified for all three before merge: ## Design review escalation -- A PR with extensive UI changes, or any clearly user-perceivable change to UI or interaction, must get a designer or product review. When no approver holds that role, suggest requesting review from yx zhang, yifffan, zhangziya, or gaokaige. +- A PR with extensive UI changes, or any clearly user-perceivable change to UI or interaction, must get a designer or product review. When no approver holds that role, suggest requesting one from the design/product reviewers (roster as of 2026-09: yx zhang, yifffan, zhangziya, gaokaige; update this list here when membership changes). diff --git a/packages/client/AGENTS.md b/packages/client/AGENTS.md index 1a729d3fa5..68b17f21c8 100644 --- a/packages/client/AGENTS.md +++ b/packages/client/AGENTS.md @@ -110,7 +110,7 @@ One UI feature = one plugin package (`src/client/` browser half). A multi-domain ## Styling and localization -[docs/web-styling.md](../../docs/web-styling.md) is authoritative. Shared `--dsw-*` tokens and global sheets live in `ui-theme/src/styles/`; feature components consume semantic aliases through CSS Modules and `clsx`, with no literal colors, component library, or Tailwind. Code comments are English. +[docs/web-styling.md](../../docs/web-styling.md) is authoritative. Shared `--dsw-*` tokens and global sheets live in `ui-theme/src/styles/`; feature components consume semantic aliases through CSS Modules and `clsx`, with no literal colors, component library, or Tailwind. Code comments are English. Design judgment beyond those rules — feedback surfaces, loading states, overlay safety, platform window adaptation — follows [dsh-client-ui-ux](../../.agents/skills/dsh-client-ui-ux/SKILL.md). Every product-visible string—including text, accessibility names, tooltips, placeholders, status/unit formatters, and primitive chrome—lives in a typed locale dictionary and reaches components through the standard `t` seat or an already-localized prop. Cordis-free primitives require complete label props and own no fallback copy. Keep user/model/wire data and code tokens verbatim; internal matching uses discriminants or stable ids, never localized text. `pnpm run verify-client-ui-i18n` enforces source ownership ([decision](../../.agents/notes/implemented/architecture/2026-08-23-locale-owned-client-ui-copy.md)). From 6b4055bf32595c922d5dffdecba8fe85c5b9aa56 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 15:55:50 +0800 Subject: [PATCH 11/35] fix(chat): keep floating controls outside transcript clipping --- apps/web/tests/chat-scroll-contract.e2e.ts | 48 ++++++ packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 2 + packages/client/ui-chat/README.zh.md | 2 + .../src/client/chat/ChatView.module.css | 26 ++- .../ui-chat/src/client/chat/ChatView.tsx | 156 +++++++++--------- .../src/client/chat/TurnNavigator.module.css | 15 +- .../ui-chat/tests/chat-view.client.spec.tsx | 54 +++--- 8 files changed, 190 insertions(+), 117 deletions(-) diff --git a/apps/web/tests/chat-scroll-contract.e2e.ts b/apps/web/tests/chat-scroll-contract.e2e.ts index a2fb4cc149..232b5dc1ee 100644 --- a/apps/web/tests/chat-scroll-contract.e2e.ts +++ b/apps/web/tests/chat-scroll-contract.e2e.ts @@ -524,6 +524,54 @@ describe('web e2e: long Chat scroll contract', () => { await browser?.close() }) + it.skipIf(MODE === 'record')('keeps floating controls anchored outside the clipped transcript', async () => { + await withScrollWorld({ + failureShot: 'web-e2e-chat-floating-controls', + seeds: [{ fixture: HISTORY_FIXTURE, id: HISTORY_SESSION_ID }], + }, async (world) => { + await openSeed(world.page, HISTORY_FIXTURE, HISTORY_FIXTURE.markers.assistant(HISTORY_FIXTURE.turns)) + const host = world.page.locator('[data-conversation-scroll]') + const backToBottom = world.page.getByRole('button', { name: 'Back to bottom', exact: true }) + const expectControls = async (): Promise => { + await expect.poll(() => host.evaluate((element) => { + const rail = element.querySelector('nav[aria-label="Turn navigation"]') + const button = element.querySelector('button[aria-label="Back to bottom"]') + const composer = element.querySelector('[data-composer-seat]') + if (rail === null || button === null || composer === null) return Infinity + const viewport = element.getBoundingClientRect() + const railBox = rail.getBoundingClientRect() + const buttonBox = button.getBoundingClientRect() + const composerBox = composer.getBoundingClientRect() + const top = viewport.top + element.clientTop + return Math.max( + Math.abs((railBox.top + railBox.bottom) / 2 - (top + composerBox.top) / 2), + Math.abs(viewport.left + element.clientLeft + element.clientWidth - railBox.right - 12), + Math.abs(composerBox.top - buttonBox.bottom - 16), + ) + }), { timeout: 10_000 }).toBeLessThanOrEqual(GEOMETRY_TOLERANCE) + } + + await wheelTranscript(world.page, -1_200) + await backToBottom.waitFor({ timeout: 10_000 }) + await expectControls() + await wheelTranscript(world.page, -1_200) + await expectControls() + + const seat = world.page.locator('[data-composer-seat]') + const initialHeight = await seat.evaluate(element => element.getBoundingClientRect().height) + const composer = world.page.locator('[data-composer-input][contenteditable="true"]').last() + await composer.fill(Array.from({ length: 8 }, (_, index) => `draft line ${index}`).join('\n')) + await expect.poll(() => seat.evaluate(element => element.getBoundingClientRect().height)) + .toBeGreaterThan(initialHeight + 40) + await expectControls() + await composer.fill('') + await expectControls() + await backToBottom.click() + await expectBottom(world.page) + assertClean(world) + }) + }) + it.skipIf(MODE === 'record')('preserves the reader anchor when history and streaming arrive concurrently', async () => { await withScrollWorld({ failureShot: 'web-e2e-chat-scroll-history-stream', diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 4f36865018..a22a5711b6 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: 285242c9dc9b8225711096aed03f183f5a8e36b7 -README.zh.md: 8844c9c361f7404af4ea22c645f18e2c9c4e1799 +README.md: 928165d9d103bc4c83fbec92f11abc2f8eb3abb4 +README.zh.md: ebb4cc986bdaa8e5eff49a4b32538db437ef9f30 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 285242c9dc..928165d9d1 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -100,6 +100,8 @@ The Chat-node slot injects a reset-bound `useDisclosure` Hook for reasoning and Chat restores semantic anchors across history prepend and renderer remounts, with browser scroll anchoring disabled on its scrollport only while following the tail. Pinned scroll deliveries without reader movement, and reader input that reaches the exact floor, update follow ownership immediately, before subsequent layout changes can invalidate their floor. Other reader movement remains pending until the sampling interval or `scrollend`, even inside the follow threshold, so layout growth cannot erase small scroll gestures. Submitting transcript input or steering immediately restores tail following and clears an older pending reader sample. While the reader is pinned to the floor, `ResizeObserver` follows the new floor and selects the latest loaded Turn without reading row geometry. Once the reader moves away, flow-height changes preserve the top position and the reading-line geometry selects the active Turn. Turn-rail previews paint above sticky Markdown code-block banners, while the rail frame remains inside the transcript band above the composer. +The turn rail and back-to-bottom button sit outside the clipped transcript. They use the shared conversation scrollport for sticky positioning, or the Chat frame for absolute positioning when Chat owns its scrollport. + The turn rail mounts only visible marks, overscan, and the focused mark's neighbors. Its fixed pitch and observed viewport size determine scroll offsets without reading the DOM scroll extent. Initial placement waits for the body's restored active Turn and the rail's first usable viewport size. The ref controls activate a Turn or scroll the rail independently; the transcript itself remains fully mounted. While the pointer is outside the rail, automatic follow keeps the rail still when the active mark's center is inside the fade-free band and centers it after it leaves that band. Previews follow pointer movement or focus; marks scrolling under a stationary pointer do not select another preview. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 8844c9c361..ebb4cc986b 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -100,6 +100,8 @@ Chat 节点 slot 为推理与工具注入绑定重置来源的 `useDisclosure` Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且只在跟随底部时禁用自己滚动区域的浏览器自动锚定。没有读者移动的贴底滚动事件,以及确实到达最底部的读者输入,会立即更新跟随归属,避免后续布局变化使其底部位置失效。其他读者移动即使位于跟随阈值内,也保持待处理直到采样周期或 `scrollend`,防止布局增长抵消小幅滚动操作。提交正文输入或 steering 时立即恢复跟随底部,并清除先前待处理的读者滚动采样。读者跟随底部时,`ResizeObserver` 追随新的底部,并且无需读取行几何就选中最后一个已加载轮次;读者离开底部后,高度变化会保持顶部位置,再由阅读线几何选择活跃轮次。轮次导航预览位于 Markdown 代码块粘性头栏上方,而导航外框始终处于 composer 上方的 transcript 区域内。 +轮次轨道与回到底部按钮位于正文裁剪层外。它们相对共享会话滚动容器做 sticky 定位;Chat 自己持有滚动容器时,则相对 Chat 外框做 absolute 定位。 + 轮次轨道只挂载可见刻度、预加载范围及键盘焦点刻度的相邻项。固定间距和观察到的视口尺寸决定滚动偏移,不读取 DOM 滚动总高度。初始定位等待正文恢复活跃轮次,以及轨道首次获得可用视口尺寸。ref 控制接口分别支持激活轮次和仅滚动轨道;正文自身仍完整挂载。 指针位于轨道外时,自动跟随在活跃刻度中心处于非渐隐区域内时保持轨道不动,越界后才将其居中。预览随指针移动或焦点切换;刻度在静止指针下滚动不会选中另一个预览。 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 ce6e7b94ea..d3428d9cc2 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.module.css +++ b/packages/client/ui-chat/src/client/chat/ChatView.module.css @@ -1,9 +1,19 @@ +.frame { + position: relative; + display: flex; + flex-direction: column; + min-height: 0; + flex: 1 1 auto; +} + .root { position: relative; display: flex; flex-direction: column; min-height: 0; flex: 1 1 auto; + + overflow-y: hidden; } .scroll { @@ -25,6 +35,7 @@ overflow-anchor: none; } +:global([data-conversation-scroll]) .frame, :global([data-conversation-scroll]) .root { flex: 0 0 auto; min-height: auto; @@ -113,12 +124,13 @@ opacity: 0.6; } -/* Back-to-bottom: zero-height sticky slot so the control does not extend - scrollHeight; the button translates up into the viewport. Under the - conversation host, clearance sits above the sticky composer stack. */ +/* Floating controls sit outside the clipped transcript. A standalone Chat + anchors them to its frame; the shared host supplies the sticky scrollport. */ .toBottomSlot { - position: sticky; + position: absolute; + right: 0; bottom: 16px; + left: 0; /* Above the sticky composer (z-index 7) so the control stays clickable and visible over the input card. Exception: while an @/slash menu is open the seat lifts to 9 (ui-conversation ConversationRoot) so the menu is never @@ -127,11 +139,15 @@ height: 0; display: flex; justify-content: flex-end; - padding-right: max(0px, calc((100% - var(--dsh-chat-content-width)) / 2)); + padding-right: max( + calc(var(--dsh-composer-side-clearance) + 16px), + calc((100% - var(--dsh-chat-content-width)) / 2) + ); pointer-events: none; } :global([data-conversation-scroll]) .toBottomSlot { + position: sticky; /* Clears the sticky composer stack (docks + input card + stats): the live height rides --dsh-composer-height (ConversationRoot's seat observer) so the control follows a growing textarea; the fallback covers the first diff --git a/packages/client/ui-chat/src/client/chat/ChatView.tsx b/packages/client/ui-chat/src/client/chat/ChatView.tsx index 69f2d58286..0c84666147 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatView.tsx @@ -191,85 +191,87 @@ export function ChatView({ }) return ( -
-
- {scroll.initialized && ( - - )} -
- {openState === 'loading' &&
{t('chat.loadingHistory')}
} - {openState === 'error' && openError !== null && ( -
- {t('chat.loadError', { message: openError.message, code: openError.code })} -
- )} - {hasMore && ( -
- -
- )} - - - - {/* 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. */} - {pendingInputs.map(item => 'requestId' in item ? ( - - ) : ( - - ))} -
- {!scroll.followingTail && ( -
- +
+ {scroll.initialized && ( + + )} +
+
+
+ {openState === 'loading' &&
{t('chat.loadingHistory')}
} + {openState === 'error' && openError !== null && ( +
+ {t('chat.loadError', { message: openError.message, code: openError.code })} +
+ )} + {hasMore && ( +
+ +
+ )} + + + + {/* 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. */} + {pendingInputs.map(item => 'requestId' in item ? ( + + ) : ( + + ))}
- )} +
+ {!scroll.followingTail && ( +
+ +
+ )} {fileOpenError !== null && ( { const view = render() const second = await view.findByRole('button', { name: '跳转到第 2 轮' }) - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) metrics.setLayout(1_000, 700) vi.spyOn(scroller, 'getBoundingClientRect').mockReturnValue({ top: 0, bottom: 300 } as DOMRect) @@ -1035,7 +1035,7 @@ describe('ChatView', () => { ] }) const view = render() const first = await view.findByRole('button', { name: '跳转到第 1 轮' }) - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement installScrollMetrics(scroller, 1_500, 300) const row = view.container.querySelector('[data-chat-anchor-key="fixture:user:1"]') as HTMLElement vi.spyOn(scroller, 'getBoundingClientRect').mockReturnValue(new DOMRect(0, 0, 800, 300)) @@ -1080,7 +1080,7 @@ describe('ChatView', () => { expect(view.getByRole('button', { name: '回到底部' })).toBeTruthy() // ...so a non-reader scroll delivery at the floor (the first prepend's // compensation fires one) no longer snaps to the tail and cancel the jump. - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLElement fireEvent.scroll(scroller) expect(first.getAttribute('aria-busy')).toBe('true') await act(async () => { releaseJump?.() }) @@ -1149,7 +1149,7 @@ describe('ChatView', () => { let releaseJump: (() => void) | undefined h.loadThrough.mockImplementation(() => new Promise((resolve) => { releaseJump = resolve })) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockImplementation(function (this: HTMLElement) { @@ -1197,7 +1197,7 @@ describe('ChatView', () => { { hasMore: true }, ) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const first = view.container.querySelector('[data-chat-flow-key="fixture:user:9"]') as HTMLDivElement const next = view.container.querySelector('[data-chat-flow-key="fixture:user:10"]') as HTMLDivElement let firstTop = 100 @@ -1256,7 +1256,7 @@ describe('ChatView', () => { const pinned = anchor === 'group' ? group : old const expectedTop = anchor === 'group' ? 30 : 60 const expectedScroll = anchor === 'group' ? 200 : 300 - const scroller = view.container.querySelector('[class*="scroll"]')! + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement! installScrollMetrics(scroller, 1500, 400) let paged = false vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockImplementation(function (this: HTMLElement) { @@ -1326,7 +1326,7 @@ describe('ChatView', () => { h.setGrouped(groups) h.setTranscriptView(mode) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]')! + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement! const column = scroller.querySelector('[data-chat-flow]')! const answer = view.container.querySelector('[data-chat-node-key="fixture:assistant:6"]')! const first = hasSteering ? view.container.querySelector('[data-chat-node-key="fixture:steering:5"]')! : answer @@ -1380,7 +1380,7 @@ describe('ChatView', () => { try { const h = makeHarness({ nodes: [user(1, 'visible row')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const anchor = view.container.querySelector('[data-chat-anchor-key="fixture:user:1"]') as HTMLElement installScrollMetrics(scroller, 4_000, 2_000) vi.spyOn(scroller, 'getBoundingClientRect').mockReturnValue({ @@ -1411,7 +1411,7 @@ describe('ChatView', () => { { hasMore: true }, ) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const rows = [...view.container.querySelectorAll('[data-chat-flow-key]')] let prepended = false let rowRectCalls = 0 @@ -1622,7 +1622,7 @@ describe('ChatView', () => { it('does not pull the reader back to the tail when a local steer becomes Host-pending', () => { const h = makeHarness({ nodes: [assistant(1, 'working')] }, { running: true }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]')! + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement! installScrollMetrics(scroller, 1_000, 300) act(() => { h.setSession({ pendingSubmissions: [{ requestId: 'req-steer' as never, placement: 'steering', time: 5_000, text: 'continue here', attachments: [], @@ -2307,7 +2307,7 @@ describe('ChatView', () => { turnTimings: new Map([[1, { startTime: 0 }]]), }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 1_000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 300, writable: true }) const firstRow = view.getByText('first answer').closest('[data-chat-flow-kind="assistant-step"]') as HTMLElement @@ -2331,7 +2331,7 @@ describe('ChatView', () => { }) const view = render() expect(turnProcessControl(view.container)).toBeNull() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 1_000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 300, writable: true }) const processRow = view.container.querySelector('[data-chat-node-key="fixture:assistant:2"]')! @@ -3199,7 +3199,7 @@ describe('ChatView', () => { { hasMore: true }, ) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement // jsdom has no layout: fake the metrics the anchor math reads. Object.defineProperty(scroller, 'scrollHeight', { value: 1000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 400, writable: true }) @@ -3229,7 +3229,7 @@ describe('ChatView', () => { it('back-to-bottom cancels an in-flight paging anchor', () => { const h = makeHarness({ nodes: [user(9, 'late')] }, { hasMore: true }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 800, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 200, writable: true }) readerScroll(scroller, 50) @@ -3244,7 +3244,7 @@ describe('ChatView', () => { it('scrolling away disables follow and shows the back-to-bottom button; clicking returns', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 1000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 300, writable: true }) readerScroll(scroller, 100) // far from bottom @@ -3266,7 +3266,7 @@ describe('ChatView', () => { it('keeps following when a stream-finalization shrink clamp delivers its scroll', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 fireEvent.scroll(scroller) @@ -3289,7 +3289,7 @@ describe('ChatView', () => { it('keeps following when a shrink clamp regrows before scrollend', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 fireEvent.scroll(scroller) @@ -3319,7 +3319,7 @@ describe('ChatView', () => { vi.stubGlobal('ResizeObserver', ResizeObserverStub) const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 9_931, 300) expect(notify).toBeDefined() scroller.scrollTop = 9_631 @@ -3357,7 +3357,7 @@ describe('ChatView', () => { vi.stubGlobal('ResizeObserver', ResizeObserverStub) const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) expect(notify).toBeDefined() scroller.scrollTop = 700 @@ -3380,7 +3380,7 @@ describe('ChatView', () => { it('keeps following when reader input reaches the floor before growth and scrollend', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) readerScroll(scroller, 100) expect(view.getByLabelText('回到底部')).toBeTruthy() @@ -3400,7 +3400,7 @@ describe('ChatView', () => { const nodes = [user(1, 'q'), assistant(2, 'a')] const h = makeHarness({ nodes }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) readerScroll(scroller, 700) scroller.scrollTop = 650 @@ -3431,7 +3431,7 @@ describe('ChatView', () => { it('clears an away sample when a back-to-bottom delivery restores pinned ownership', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 fireEvent.scroll(scroller) @@ -3453,7 +3453,7 @@ describe('ChatView', () => { try { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 fireEvent.scroll(scroller) @@ -3496,7 +3496,7 @@ describe('ChatView', () => { it('uses the last delivered top when compositor scrolling precedes scroll delivery', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 fireEvent.scroll(scroller) @@ -3524,7 +3524,7 @@ describe('ChatView', () => { vi.stubGlobal('ResizeObserver', ResizeObserverStub) const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 1_000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 300, writable: true }) scroller.scrollTop = 700 @@ -3578,7 +3578,7 @@ describe('ChatView', () => { }) const view = render() await view.findByRole('button', { name: '跳转到第 2 轮' }) - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement const metrics = installScrollMetrics(scroller, 1_000, 300) scroller.scrollTop = 700 act(() => { @@ -3604,7 +3604,7 @@ describe('ChatView', () => { it('entering the at-bottom threshold does not snap the remaining scroll distance', () => { const h = makeHarness({ nodes: [user(1, 'q'), assistant(2, 'a')] }) const view = render() - const scroller = view.container.querySelector('[class*="scroll"]') as HTMLDivElement + const scroller = view.container.querySelector('[data-chat-flow]')!.parentElement as HTMLDivElement Object.defineProperty(scroller, 'scrollHeight', { value: 1000, writable: true }) Object.defineProperty(scroller, 'clientHeight', { value: 300, writable: true }) // Inside FOLLOW_THRESHOLD (24) but not flush with the floor — the chrome From 633cf7394e6620af5faf7b84250020c271759146 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 16:15:38 +0800 Subject: [PATCH 12/35] fix(chat): share independent scroll following with native group animation --- apps/web/tests/chat-scroll-contract.e2e.ts | 101 ++++++++++++++ packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 11 ++ packages/client/ui-chat/README.zh.md | 11 ++ .../ui-chat/src/client/chat/ChatGroupSeat.tsx | 42 ++---- .../src/client/chat/use-chat-reading.ts | 24 ++-- .../src/client/chat/use-chat-viewport.ts | 24 ++-- .../src/client/chat/use-process-scroll.ts | 70 ++++++++++ .../src/client/chat/use-scroll-follow.ts | 132 ++++++++++++++++++ .../conversation-nodes/README.i18n.yaml | 4 +- .../src/client/conversation-nodes/README.md | 2 + .../client/conversation-nodes/README.zh.md | 2 + .../ui-chat/tests/chat-view.client.spec.tsx | 78 +++++++++-- .../tests/scroll-follow.client.spec.ts | 103 ++++++++++++++ 14 files changed, 540 insertions(+), 68 deletions(-) create mode 100644 packages/client/ui-chat/src/client/chat/use-process-scroll.ts create mode 100644 packages/client/ui-chat/src/client/chat/use-scroll-follow.ts create mode 100644 packages/client/ui-chat/tests/scroll-follow.client.spec.ts diff --git a/apps/web/tests/chat-scroll-contract.e2e.ts b/apps/web/tests/chat-scroll-contract.e2e.ts index 232b5dc1ee..884c7663db 100644 --- a/apps/web/tests/chat-scroll-contract.e2e.ts +++ b/apps/web/tests/chat-scroll-contract.e2e.ts @@ -656,6 +656,107 @@ describe('web e2e: long Chat scroll contract', () => { }) }, 180_000) + it.skipIf(MODE === 'record')('follows a growing process group independently of the outer transcript', async () => { + const parts = [ + 'GROUP_SCROLL_START\n\n', + ...Array.from({ length: 4 }, (_, batch) => Array.from({ length: 20 }, (_, row) => + `Group batch ${batch} paragraph ${row}: inspect the next recorded operation.\n\n`).join('')), + 'GROUP_SCROLL_END\n\n', + ] + const chunks: StreamChunk[] = [ + { type: 'block-start', index: 0, blockType: 'reasoning' }, + ...parts.map((text): StreamChunk => ({ type: 'reasoning-delta', index: 0, text })), + { type: 'block-end', index: 0, block: { type: 'reasoning', text: parts.join('') } }, + { type: 'block-start', index: 1, blockType: 'text' }, + { type: 'text-delta', index: 1, text: 'GROUP_SCROLL_DONE' }, + { type: 'block-end', index: 1, block: { type: 'text', text: 'GROUP_SCROLL_DONE' } }, + { type: 'usage', usage: { inputTokens: 256, outputTokens: 512 } }, + { type: 'finish', reason: { kind: 'stop' } }, + ] + await withScrollWorld({ + failureShot: 'web-e2e-chat-process-follow', + replay: [replayEntry(chunks)], + seeds: [{ fixture: HISTORY_FIXTURE, id: HISTORY_SESSION_ID }], + }, async (world) => { + await openSeed(world.page, HISTORY_FIXTURE, HISTORY_FIXTURE.markers.assistant(HISTORY_FIXTURE.turns)) + const gates = parts.slice(1).map(() => Promise.withResolvers()) + const dispose = world.scaffold.ctx.on('llm/stream', async function* (_options, next) { + let index = -1 + for await (const chunk of next()) { + if (chunk.type === 'reasoning-delta') await gates[index++]?.promise + yield chunk + } + }) + const settled = world.scaffold.whenTurnSettled(60_000) + try { + await world.page.locator('[data-composer-input][contenteditable="true"]').last().fill( + 'Inspect the recorded operations while I scroll the conversation.', + ) + await world.page.getByRole('button', { name: 'Send message', exact: true }).click() + const group = world.page.locator('[data-step-process]:has([data-variant="think"][data-state="running"])') + await group.locator('[data-process-activity]').click() + await group.locator('[data-disclosure-row]').click() + const body = group.locator('[data-step-process-body]') + await nextPaint(world.page) + expect(await body.evaluate(element => element.scrollHeight <= element.clientHeight)).toBe(true) + const height = () => body.evaluate(element => element.scrollHeight) + const top = () => body.evaluate(element => element.scrollTop) + const expectGroupBottom = async (): Promise => { + await expect.poll(() => body.evaluate(element => + element.scrollHeight - element.clientHeight - element.scrollTop)) + .toBeLessThanOrEqual(GEOMETRY_TOLERANCE) + } + const grow = async (index: number): Promise => { + const before = await height() + gates[index]!.resolve(undefined) + await expect.poll(height).toBeGreaterThan(before + 200) + } + + // Outer following is a precondition independent of opening the inner disclosure. + const backToBottom = world.page.getByRole('button', { name: 'Back to bottom', exact: true }) + await wheelTranscript(world.page, -400) + await backToBottom.click() + await expectBottom(world.page) + await grow(0) + await expectGroupBottom() + await expectBottom(world.page) + await wheelTranscript(world.page, -800) + await backToBottom.waitFor() + const outerTop = (await scrollGeometry(world.page)).scrollTop + await grow(1) + await expectGroupBottom() + expect(Math.abs((await scrollGeometry(world.page)).scrollTop - outerTop)).toBeLessThanOrEqual(GEOMETRY_TOLERANCE) + + await backToBottom.click() + await expectBottom(world.page) + const pinnedTop = await top() + await body.hover() + await world.page.mouse.wheel(0, -160) + await expect.poll(top).toBeLessThan(pinnedTop - 100) + await nextPaint(world.page) + const readerTop = await top() + await grow(2) + expect(Math.abs(await top() - readerTop)).toBeLessThanOrEqual(GEOMETRY_TOLERANCE) + await expectBottom(world.page) + + await group.locator('[data-process-activity]').click() + await group.locator('[data-process-activity]').click() + await expectGroupBottom() + + await body.hover() + await world.page.mouse.wheel(0, 10_000) + await expectGroupBottom() + await grow(3) + await expectGroupBottom() + assertClean(world) + } finally { + for (const gate of gates) gate.resolve(undefined) + dispose() + await settled + } + }) + }) + it.skipIf(MODE === 'record')('virtualizes the outline rail and jumps to an unloaded turn', async () => { await withScrollWorld({ failureShot: 'web-e2e-turn-rail-jump', diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index a22a5711b6..1ed11db483 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: 928165d9d103bc4c83fbec92f11abc2f8eb3abb4 -README.zh.md: ebb4cc986bdaa8e5eff49a4b32538db437ef9f30 +README.md: a640e246305a392c33a01c1c2b906fed2190bf7a +README.zh.md: 69ec1af4f1db10962969b8282db97699978d3fdd diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 928165d9d1..a640e24630 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -102,6 +102,15 @@ Chat restores semantic anchors across history prepend and renderer remounts, wit The turn rail and back-to-bottom button sit outside the clipped transcript. They use the shared conversation scrollport for sticky positioning, or the Chat frame for absolute positioning when Chat owns its scrollport. +Outer transcript following and each open capped group's following are independent. Native animation progress retains follow intent; a reader gesture interrupts the animation, and actual movement determines whether following remains enabled. Scroll chaining can move the outer transcript, which then applies its own distance threshold. The back-to-bottom button restores only outer following. + +| Outer follows | Open group follows | Back-to-bottom button | New content | +|---|---|---|---| +| Yes | Yes | Hidden | Each scrollport follows its own floor. | +| Yes | No | Hidden | The outer transcript follows; the group retains its position. | +| No | Yes | Visible | The group follows; the outer transcript retains its reading position. | +| No | No | Visible | Both retain their reading positions. | + The turn rail mounts only visible marks, overscan, and the focused mark's neighbors. Its fixed pitch and observed viewport size determine scroll offsets without reading the DOM scroll extent. Initial placement waits for the body's restored active Turn and the rail's first usable viewport size. The ref controls activate a Turn or scroll the rail independently; the transcript itself remains fully mounted. While the pointer is outside the rail, automatic follow keeps the rail still when the active mark's center is inside the fade-free band and centers it after it leaves that band. Previews follow pointer movement or focus; marks scrolling under a stationary pointer do not select another preview. @@ -109,6 +118,8 @@ While the pointer is outside the rail, automatic follow keeps the rail still whe
Scroll implementation — click to expand +`useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Opening placement remains immediate. + `useChatViewport` owns turn-aware DOM reads, clamped writes, native events, and one retained paging anchor. For Load older, Node and Group seats mark eligible anchors from their existing disclosure state. The viewport selects the first nonempty, unhidden marker in transcript order without hit testing or geometry-based search, then measures that element and its scroll containers. It compensates the anchor's capped group first, then gives the remaining displacement to the transcript scrollport. Commits and later content resizes reuse that anchor; a remounted row is resolved by the same semantic key. Compensation stays within the actual scroll ranges without adding bottom space. `useChatReading` owns follow policy, sampled reader input, and semantic memory; `useChatNavigation` owns turn jumps and requests preservation from the viewport. Reading gestures release the paging anchor, but composer clicks, typing, and non-scrolling keys retain it; while a page is still loading, `scrollend` captures the reader's new position. `useChatScroll` coordinates their committed inputs. Explicit navigation carries its measured landing into reading policy, so it does not rediscover the known target with a hit test. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index ebb4cc986b..69ec1af4f1 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -102,6 +102,15 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且 轮次轨道与回到底部按钮位于正文裁剪层外。它们相对共享会话滚动容器做 sticky 定位;Chat 自己持有滚动容器时,则相对 Chat 外框做 absolute 定位。 +外层文本记录与每个已展开限高组的跟随状态彼此独立。原生动画的中间滚动保留跟随意图;读者手势中断动画,是否继续跟随由实际位移决定。滚动传递可以带动外层,外层再按自身离底距离判断。回到底部按钮只恢复外层跟随。 + +| 外层跟随 | 已展开小组跟随 | 回到底部按钮 | 新增内容 | +|---|---|---|---| +| 开启 | 开启 | 隐藏 | 各自跟随自己的底部。 | +| 开启 | 关闭 | 隐藏 | 外层跟随,小组保持原位置。 | +| 关闭 | 开启 | 显示 | 小组跟随,外层保持阅读位置。 | +| 关闭 | 关闭 | 显示 | 两者都保持阅读位置。 | + 轮次轨道只挂载可见刻度、预加载范围及键盘焦点刻度的相邻项。固定间距和观察到的视口尺寸决定滚动偏移,不读取 DOM 滚动总高度。初始定位等待正文恢复活跃轮次,以及轨道首次获得可用视口尺寸。ref 控制接口分别支持激活轮次和仅滚动轨道;正文自身仍完整挂载。 指针位于轨道外时,自动跟随在活跃刻度中心处于非渐隐区域内时保持轨道不动,越界后才将其居中。预览随指针移动或焦点切换;刻度在静止指针下滚动不会选中另一个预览。 @@ -109,6 +118,8 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且
滚动实现——点击展开 +`useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。展开时仍即时定位。 + `useChatViewport` 负责识别轮次的 DOM 读取、限制范围后的写入、原生事件及一个持续保留的分页锚点。加载更早时,Node 与 Group 容器根据已有开合状态标记可选锚点。视口按正文顺序选择第一个非空、未隐藏的标记,不做命中测试或按几何位置搜索,再测量该元素及其滚动容器。先补偿锚点所在的限高组,再把剩余位移交给整段文本的滚动区域。提交和后续内容尺寸变化复用该锚点;消息行重挂载时按同一语义 key 重新定位。补偿限于实际可滚动范围,不增加底部空白。 `useChatReading` 负责跟随策略、读者输入采样和语义位置记忆;`useChatNavigation` 负责轮次跳转,并向视口请求位置保持。阅读手势释放分页锚点,composer 内的点击、打字和非滚动按键则保留锚点;分页仍在加载时,`scrollend` 会记录读者的新位置。`useChatScroll` 协调已提交的输入。显式导航把测得的落点交给阅读策略,因此无需通过命中测试重新寻找已知目标。 diff --git a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx index d56d652db8..f2d7fa17d3 100644 --- a/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx @@ -1,5 +1,5 @@ /** Stable process container; display policy changes visibility, never member parents. */ -import { memo, useCallback, useEffect, useId, useLayoutEffect, useRef, useState, type ComponentProps, type ReactNode } from 'react' +import { memo, useCallback, useEffect, useId, useRef, useState, type ComponentProps, type ReactNode } from 'react' import { IconAgentPresetOutlineRegular, IconApiOutlineRegular, IconBrowseOutlineRegular, IconChevronDownOutlineRegular, IconChevronUpOutlineRegular, IconCodeOutlineRegular, IconEditOutlineRegular, IconGlobeOutlineRegular, @@ -16,6 +16,7 @@ import { chatRenderKey } from './render-entry.ts' import { processTitle } from './step-process.ts' import { useSearchableHidden } from './searchable-hidden.ts' import { useDisclosure } from './use-disclosure.ts' +import { useProcessScroll } from './use-process-scroll.ts' import css from './ChatGroupSeat.module.css' type SeatProps = Omit, 'nodeKey' | 'groupPart'> @@ -23,8 +24,6 @@ type ChatGroupSeatProps = SeatProps & { readonly groupKey: GroupKey readonly useChatGroup: ChatViewSlotProps['useChatGroup'] } -interface ProcessScrollEdges { readonly canScrollUp: boolean; readonly canScrollDown: boolean } -const PROCESS_SCROLL_AT_REST: ProcessScrollEdges = { canScrollUp: false, canScrollDown: false } const PROCESS_TITLE_MINIMUM_MS = 150 type ProcessTitleActivity = ProcessActivity | 'thinking' @@ -49,17 +48,6 @@ const PROCESS_ICONS: Record = { tools: , } -function processScrollEdges(element: HTMLElement): ProcessScrollEdges { - return { - canScrollUp: element.scrollTop > 1, - canScrollDown: element.scrollTop < element.scrollHeight - element.clientHeight - 1, - } -} - -function sameProcessScrollEdges(left: ProcessScrollEdges, right: ProcessScrollEdges): boolean { - return left.canScrollUp === right.canScrollUp && left.canScrollDown === right.canScrollDown -} - function sameLiveProcessTitle(left: LiveProcessTitle, right: LiveProcessTitle): boolean { return left.activity === right.activity && left.detail === right.detail } @@ -135,8 +123,9 @@ const ProcessGroupHeader = memo(function ProcessGroupHeader({ groupKey, useChatG export const ChatGroupSeat = memo(function ChatGroupSeat({ groupKey, useChatGroup, ...props }: ChatGroupSeatProps) { const members = useChatGroup(groupKey, group => group?.members) const turn = useChatGroup(groupKey, group => group?.data.turn) + const closed = useChatGroup(groupKey, group => group?.data.closed) const foldCompleted = props.usePresentation(policy => policy.foldCompletedTurns) - const { expanded: open, setExpanded: setOpen, toggle } = useDisclosure() + const { expanded: open, setExpanded: setOpen } = useDisclosure() const firstKey = members?.[0]?.key ?? '' const presentation = props.useChatNodeProcess(firstKey) const turnLocation = props.useChatNode(firstKey, (node) => { @@ -164,22 +153,11 @@ export const ChatGroupSeat = memo(function ChatGroupSeat({ groupKey, useChatGrou const bodyRef = useSearchableHidden(grouped && !open, reveal) const contentRef = useRef(null) const bodyId = useId() - const [edges, setEdges] = useState(PROCESS_SCROLL_AT_REST) - const sync = useCallback(() => { - const body = bodyRef.current - const next = body === null || body.closest('[hidden], [data-group-expanded-mode]') !== null - ? PROCESS_SCROLL_AT_REST : processScrollEdges(body) - setEdges(previous => sameProcessScrollEdges(previous, next) ? previous : next) - }, [bodyRef]) - // The content box reports growth even when the scroll body remains height-capped. - useLayoutEffect(() => { - const body = bodyRef.current - if (body === null || !open || typeof ResizeObserver === 'undefined') return - const observer = new ResizeObserver(sync) - observer.observe(body) - if (contentRef.current !== null) observer.observe(contentRef.current) - return () => { observer.disconnect() } - }, [bodyRef, open, sync]) + const { edges, events, initialize } = useProcessScroll(bodyRef, contentRef, open, grouped) + const toggle = useCallback(() => { + if (!open) initialize(closed === false ? 'bottom' : 'top') + setOpen(!open) + }, [closed, initialize, open, setOpen]) if (members === undefined) return null const classes = [css.body, !grouped ? css.expandedBody : '', grouped && edges.canScrollUp ? css.fadeTop : '', grouped && edges.canScrollDown ? css.fadeBottom : ''] @@ -194,7 +172,7 @@ export const ChatGroupSeat = memo(function ChatGroupSeat({ groupKey, useChatGrou
+ {...events}>
diff --git a/packages/client/ui-chat/src/client/chat/use-chat-reading.ts b/packages/client/ui-chat/src/client/chat/use-chat-reading.ts index 8c4bcec675..010b49de0d 100644 --- a/packages/client/ui-chat/src/client/chat/use-chat-reading.ts +++ b/packages/client/ui-chat/src/client/chat/use-chat-reading.ts @@ -1,7 +1,8 @@ /** Follow-tail ownership, saved-position restoration, and sampled reader movement. */ import { useLayoutEffect, useState } from 'react' import type { ChatScrollPosition, ChatViewSlotProps } from '../contract/slots.ts' -import type { ChatViewport, ViewportLanding, ViewportMetrics, ViewportScroll } from './use-chat-viewport.ts' +import type { ChatViewport, ViewportLanding, ViewportScroll } from './use-chat-viewport.ts' +import { useScrollFollow, type ScrollFollow } from './use-scroll-follow.ts' const FOLLOW_THRESHOLD = 24 const SCROLL_SAMPLE_INTERVAL_MS = 500 @@ -33,6 +34,7 @@ export class ChatReading { private store: PositionStore, private state: ChatReadingState, private readonly onChange: (state: ChatReadingState) => void, + private readonly follow: ScrollFollow, ) {} /** @@ -76,7 +78,7 @@ export class ChatReading { /** Land at the current floor and clear saved reader position. */ followTail(): void { - const landing = this.viewport.scrollToBottom() + const landing = this.viewport.scrollToBottom(this.follow) if (landing === null) return this.cancelPending() this.commit(landing, true, this.viewport.latestTurn) @@ -89,7 +91,7 @@ export class ChatReading { const landing = this.viewport.restore(saved) if (landing === null) return this.cancelPending() - const following = this.nearBottom(landing.metrics) + const following = this.follow.nearBottom(landing.metrics) this.commit(landing, following, following ? this.viewport.latestTurn : this.state.activeTurn, following) if (!this.state.followingTail && landing.position === null) { const position = this.viewport.capturePosition() @@ -104,7 +106,7 @@ export class ChatReading { */ acceptNavigation(landing: ViewportLanding): void { this.cancelPending() - const following = this.nearBottom(landing.metrics) + const following = this.follow.nearBottom(landing.metrics) this.commit(landing, following, landing.turn ?? (following ? this.viewport.latestTurn : this.state.activeTurn)) } @@ -153,10 +155,6 @@ export class ChatReading { else this.probeFrame = requestAnimationFrame(this.probe) } - private nearBottom(metrics: ViewportMetrics): boolean { - return metrics.floor - metrics.top <= FOLLOW_THRESHOLD + 1 - } - private commit( landing: ViewportLanding, followingTail: boolean, activeTurn: number | null, initialized = true, ): void { @@ -166,6 +164,7 @@ export class ChatReading { } private publish(state: ChatReadingState): void { + this.follow.setFollowing(state.followingTail) if (state.initialized === this.state.initialized && state.followingTail === this.state.followingTail && state.activeTurn === this.state.activeTurn) return this.state = state @@ -184,7 +183,7 @@ export class ChatReading { if (this.pending) return const scroll = this.viewport.readScroll() if (scroll === null) return - const activeTurn = this.nearBottom(scroll.metrics) ? this.viewport.latestTurn : this.viewport.readVisibleTurn(scroll.metrics) + const activeTurn = this.follow.nearBottom(scroll.metrics) ? this.viewport.latestTurn : this.viewport.readVisibleTurn(scroll.metrics) this.publish({ ...this.state, initialized: true, activeTurn }) } @@ -193,14 +192,14 @@ export class ChatReading { this.cancelPending() const scroll = this.viewport.readScroll() if (scroll === null) return - const followingTail = scroll.movedByReader ? this.nearBottom(scroll.metrics) : this.state.followingTail + const followingTail = this.follow.sample(scroll.metrics, scroll.movedByReader) let position: ChatScrollPosition | null = null if (!scroll.movedByReader && followingTail) this.followTail() else { position = followingTail ? null : this.viewport.capturePosition() this.viewport.acknowledge(scroll.metrics) if (followingTail || position !== null) this.store.save(position) - const activeTurn = this.nearBottom(scroll.metrics) ? this.viewport.latestTurn : this.viewport.readVisibleTurn(scroll.metrics) + const activeTurn = this.follow.nearBottom(scroll.metrics) ? this.viewport.latestTurn : this.viewport.readVisibleTurn(scroll.metrics) this.publish({ initialized: true, followingTail, activeTurn }) } this.sampled?.({ position, movedByReader: scroll.movedByReader, followingTail }) @@ -222,7 +221,8 @@ export function useChatReading( followingTail: store.read() === null, activeTurn: initialTurn, })) - const [reading] = useState(() => new ChatReading(viewport, store, state, setState)) + const follow = useScrollFollow(state.followingTail, FOLLOW_THRESHOLD + 1) + const [reading] = useState(() => new ChatReading(viewport, store, state, setState, follow)) useLayoutEffect(() => { reading.setStore(store) }, [reading, store]) useLayoutEffect(() => () => { reading.dispose() }, [reading]) return { reading, state } diff --git a/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts b/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts index e61020e8ff..b9ab90c4e9 100644 --- a/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts +++ b/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts @@ -2,13 +2,8 @@ import { useLayoutEffect, useRef, useState, type RefObject } from 'react' import type { ChatScrollPosition } from '../contract/slots.ts' import type { ChatSnapshot } from '../contract/snapshot.ts' - -/** Scroll position, maximum top, and viewport height from one geometry read. */ -export interface ViewportMetrics { - readonly top: number - readonly floor: number - readonly height: number -} +import { scrollMetrics, type ScrollFollow, type ViewportMetrics } from './use-scroll-follow.ts' +export type { ViewportMetrics } from './use-scroll-follow.ts' /** Scroll geometry attributed against the last acknowledged position. */ export interface ViewportScroll { @@ -150,8 +145,7 @@ export class ChatViewport { private metrics(): ViewportMetrics | null { const scroller = this.elements?.scroller if (scroller === undefined) return null - const height = scroller.clientHeight - return { top: scroller.scrollTop, height, floor: Math.max(0, scroller.scrollHeight - height) } + return scrollMetrics(scroller) } private anchor(key: string, identity: 'position' | 'node' = 'position'): HTMLElement | null { @@ -379,11 +373,19 @@ export class ChatViewport { /** * Align the scrollport with its current floor. + * @param follow - independent follow intent and scrolling controller. * @returns the actual floor landing, or null while detached. */ - scrollToBottom(): ViewportLanding | null { + scrollToBottom(follow: ScrollFollow): ViewportLanding | null { const metrics = this.metrics() - return metrics === null ? null : this.write(metrics.floor, metrics, this.latestTurn) + if (metrics === null || this.elements === null) return null + const landing: ViewportLanding = { + metrics: follow.toBottom(this.elements.scroller, metrics, 'instant'), + position: null, + turn: this.latestTurn, + } + this.observation = { top: landing.metrics.top, landing } + return landing } private align(row: HTMLElement, offset: number, turn: number | null): ViewportLanding | null { diff --git a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts new file mode 100644 index 0000000000..b552daee6a --- /dev/null +++ b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts @@ -0,0 +1,70 @@ +/** Capped process-group scrolling and fades over the shared follow controller. */ +import { useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type RefObject } from 'react' +import { scrollMetrics, useScrollFollow } from './use-scroll-follow.ts' + +interface ScrollEdges { readonly canScrollUp: boolean; readonly canScrollDown: boolean } +const AT_REST: ScrollEdges = { canScrollUp: false, canScrollDown: false } +const SCROLL_KEYS = new Set(['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home', 'End', ' ']) + +/** + * Observe one group's body and content without coupling its follow intent to the outer transcript. + * @param bodyRef - capped scrolling body. + * @param contentRef - uncapped content whose size reports growth. + * @param open - local disclosure state. + * @param grouped - whether the display mode retains the group's height cap. + * @returns edge fades, DOM event bindings, and one-shot positioning for manual opening. + */ +export function useProcessScroll( + bodyRef: RefObject, contentRef: RefObject, open: boolean, grouped: boolean, +) { + const follow = useScrollFollow(false, 1) + const initialPosition = useRef<'top' | 'bottom' | null>(null) + const [edges, setEdges] = useState(AT_REST) + const initialize = useCallback((position: 'top' | 'bottom') => { initialPosition.current = position }, []) + const sync = useCallback((resized: boolean) => { + const body = bodyRef.current + let next = AT_REST + if (body !== null && body.closest('[hidden], [data-group-expanded-mode]') === null) { + let metrics = scrollMetrics(body) + const initial = resized ? initialPosition.current : null + if (initial !== null) { + metrics = follow.jump(body, metrics, initial === 'bottom' ? metrics.floor : 0) + initialPosition.current = null + } else { + follow.sample(metrics) + if (resized && follow.active) metrics = follow.toBottom(body, metrics, 'smooth') + } + next = { canScrollUp: metrics.top > 1, canScrollDown: metrics.top < metrics.floor - 1 } + } else follow.reset() + setEdges(previous => previous.canScrollUp === next.canScrollUp && previous.canScrollDown === next.canScrollDown + ? previous : next) + }, [bodyRef, follow]) + const interrupt = useCallback(() => { + const body = bodyRef.current + if (body !== null && follow.animating) follow.interrupt(body, scrollMetrics(body)) + }, [bodyRef, follow]) + const events = useMemo(() => ({ + onScroll: () => { sync(false) }, + onWheel: interrupt, + onTouchStart: interrupt, + onPointerDown: interrupt, + onKeyDown: (event: KeyboardEvent) => { + if (!event.defaultPrevented && SCROLL_KEYS.has(event.key)) interrupt() + }, + }), [interrupt, sync]) + + useLayoutEffect(() => { + interrupt() + follow.reset() + if (!grouped || !open) initialPosition.current = null + }, [follow, grouped, interrupt, open]) + useLayoutEffect(() => { + const body = bodyRef.current + if (body === null || !open || typeof ResizeObserver === 'undefined') return + const observer = new ResizeObserver(() => { sync(true) }) + observer.observe(body) + if (contentRef.current !== null) observer.observe(contentRef.current) + return () => { observer.disconnect() } + }, [bodyRef, contentRef, open, sync]) + return { edges, events, initialize } +} diff --git a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts new file mode 100644 index 0000000000..5595995974 --- /dev/null +++ b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts @@ -0,0 +1,132 @@ +/** Independent bottom-follow intent and native scrolling, without paging or DOM observers. */ +import { useState } from 'react' + +/** Scroll position, maximum top, and viewport height from one geometry read. */ +export interface ViewportMetrics { + readonly top: number + readonly floor: number + readonly height: number +} + +/** + * Read one scrollport without measuring its children. + * @param element - scrolling element. + * @returns current position and range. + */ +export function scrollMetrics(element: HTMLElement): ViewportMetrics { + const height = element.clientHeight + return { top: element.scrollTop, height, floor: Math.max(0, element.scrollHeight - height) } +} + +/** One scrollport's follow intent; native animation progress does not count as reader movement. */ +export class ScrollFollow { + private target: number | null = null + private sampledTop: number | undefined + + /** + * @param following - initial follow intent. + * @param threshold - accepted distance from the floor, in pixels. + */ + constructor(private following: boolean, private readonly threshold: number) {} + + /** @returns whether content growth should follow the floor. */ + get active(): boolean { return this.following } + + /** @returns whether a native follow animation has an outstanding target. */ + get animating(): boolean { return this.target !== null } + + /** + * @param metrics - current scroll geometry. + * @returns whether the position is within the follow threshold. + */ + nearBottom(metrics: ViewportMetrics): boolean { return metrics.floor - metrics.top <= this.threshold } + + /** @param active - externally committed follow intent. */ + setFollowing(active: boolean): void { + this.following = active + if (!active) this.target = null + } + + /** Adopt the next visible layout as a fresh reader position. */ + reset(): void { + this.setFollowing(false) + this.sampledTop = undefined + } + + /** + * Adopt delivered scrolling while retaining intent during native animation. + * @param metrics - current geometry. + * @param movedByReader - caller attribution; omitted callers compare the last sampled position. + * @returns updated follow intent. + */ + sample(metrics: ViewportMetrics, movedByReader = this.sampledTop === undefined + || Math.abs(metrics.top - this.sampledTop) > 0.5): boolean { + const animated = this.animating + this.sampledTop = metrics.top + if (this.nearBottom(metrics)) this.target = null + if (!animated && movedByReader) this.following = this.nearBottom(metrics) + return this.active + } + + /** + * Position immediately and adopt the resulting follow intent. + * @param element - scrolling element. + * @param metrics - geometry before positioning. + * @param top - requested offset, clamped to the measured range. + * @returns geometry after positioning. + */ + jump(element: HTMLElement, metrics: ViewportMetrics, top: number): ViewportMetrics { + const animated = this.animating + this.target = null + const target = Math.max(0, Math.min(metrics.floor, top)) + if (animated) element.scrollTo({ top: target, behavior: 'instant' }) + else if (target !== metrics.top) element.scrollTop = target + const landed = { ...metrics, top: element.scrollTop } + this.sampledTop = landed.top + this.following = this.nearBottom(landed) + return landed + } + + /** + * Follow the measured floor, respecting reduced motion for smooth requests. + * @param element - scrolling element. + * @param metrics - current geometry. + * @param behavior - native animation for growth, or immediate positioning. + * @returns current geometry; smooth requests retain their starting position until native scroll delivery. + */ + toBottom(element: HTMLElement, metrics: ViewportMetrics, behavior: 'instant' | 'smooth'): ViewportMetrics { + this.following = true + if (behavior === 'instant' || metrics.top >= metrics.floor) return this.jump(element, metrics, metrics.floor) + if (typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches) { + return this.jump(element, metrics, metrics.floor) + } + if (this.target !== metrics.floor) { + this.target = metrics.floor + element.scrollTo({ top: metrics.floor, behavior: 'smooth' }) + } + return metrics + } + + /** + * Cancel native motion before a reader gesture; only subsequent actual movement changes follow intent. + * @param element - scrolling element. + * @param metrics - position at interruption. + */ + interrupt(element: HTMLElement, metrics: ViewportMetrics): void { + if (!this.animating) return + this.target = null + this.sampledTop = metrics.top + element.scrollTo({ top: metrics.top, behavior: 'instant' }) + } +} + +/** + * Retain one independent follow controller without React updates for scroll samples. + * @param initial - initial follow intent. + * @param threshold - accepted distance from the floor, in pixels. + * @returns the stable controller shared by the caller's scroll and resize handlers. + */ +export function useScrollFollow(initial: boolean, threshold: number): ScrollFollow { + const [follow] = useState(() => new ScrollFollow(initial, threshold)) + return follow +} 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 e3771b719e..0e18736b2a 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 @@ -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/src/client/conversation-nodes/README.md -README.md: 9dca6245db9383f8632f45b514454ad3ef201f35 -README.zh.md: b0cc2cfa51306a614da36cb9f21734136864932a +README.md: 371c4cccd9b9e88cf518b99c48f84423908690d6 +README.zh.md: ddb1f9633be63adae7946e5cb32f98a1e9be9ee8 diff --git a/packages/client/ui-chat/src/client/conversation-nodes/README.md b/packages/client/ui-chat/src/client/conversation-nodes/README.md index 9dca6245db..371c4cccd9 100644 --- a/packages/client/ui-chat/src/client/conversation-nodes/README.md +++ b/packages/client/ui-chat/src/client/conversation-nodes/README.md @@ -153,6 +153,8 @@ English lowercases the initial letter of joined labels after the first. Closing Group headers show a category icon, replace it with a down arrow on hover or keyboard focus, and show an up arrow while open. Manually expanded group bodies use 8px row spacing, a `min(400px, 50vh)` height cap, and 24px directional fades. Wheel scrolling can continue into the outer transcript at an edge. Expanded mode removes the group-level cap and uses 16px row spacing only in running Turns. +An open capped group follows content growth only while its own scroll position is at the bottom. Scrolling away pauses that group's following; returning to the bottom resumes it, independently of outer transcript following. Manually opening an unclosed group starts at the bottom and follows growth; manually opening a closed group starts at the top. Closing the group in the data or restoring its height cap through a mode change does not reset an already-open reader's position. Browser find retains its own reveal position. + Individual reasoning starts collapsed, including while streaming. All modes preview the latest paragraph whose first line ends with a newline; an unfinished single line has no preview. Later text in that paragraph does not change the preview. After settlement, the mode table applies. Expanded reasoning uses compact Markdown typography. Switching modes retains manually opened groups and inner disclosures. It changes visibility and sizing without recreating the message rows. Expanded does not mean opening every individual disclosure or unfolding the whole Turn. diff --git a/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md b/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md index b0cc2cfa51..ddb1f9633b 100644 --- a/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md +++ b/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md @@ -153,6 +153,8 @@ description: "Chat 过程分组与活动摘要的明细业务规则。" 组头显示类别图标,悬停或键盘聚焦时替换为向下箭头,展开时显示向上箭头。手动展开的组正文使用 8px 行间距、`min(400px, 50vh)` 限高及 24px 方向渐隐;到达边缘时滚轮可以继续滚动外层文本记录。完全展开模式仅对运行中轮次取消组级限高,使用 16px 行间距。 +已展开的限高组仅在自己的滚动位置处于底部时跟随内容增长。滚离底部暂停该组跟随,滚回底部后恢复,与外层文本记录的跟随状态独立。手动展开未关闭的组时定位到底部并跟随增长;手动展开已关闭的组时从顶部开始。数据中的组变为已关闭,或通过模式切换恢复限高时,不重置已展开组的阅读位置。浏览器查找沿用自身的展开定位。 + 单个推理初始收起,包括流式输出期间。三档都预览最近一个首行以换行结束的段落;未完成的单行没有预览,该段落后续文本不改变预览。结算后按上表展示。展开的推理使用紧凑 Markdown 排版。 切换模式保留手动展开的组和内部开合状态,只改变显隐与尺寸,不重建消息行。完全展开不表示自动打开每个内部控件,也不表示展开整轮。 diff --git a/packages/client/ui-chat/tests/chat-view.client.spec.tsx b/packages/client/ui-chat/tests/chat-view.client.spec.tsx index aa0b0d3501..58ae08c999 100644 --- a/packages/client/ui-chat/tests/chat-view.client.spec.tsx +++ b/packages/client/ui-chat/tests/chat-view.client.spec.tsx @@ -755,7 +755,11 @@ describe('ChatView', () => { expect(bodies[1]!.hasAttribute('hidden')).toBe(true) }) - it('waits for observed layout before measuring an opened process group', () => { + it.each([ + { initialHeight: 200, closed: true }, + { initialHeight: 600, closed: true }, + { initialHeight: 600, closed: false }, + ])('opens and follows a $initialHeight px process group with closed=$closed', ({ initialHeight, closed }) => { const observers = new Set() class Observer implements ResizeObserver { readonly targets = new Set() @@ -769,12 +773,13 @@ describe('ChatView', () => { const h = makeHarness({}, {}, snapshot) const key = 'observed-process' as GroupKey const groups = new ConversationGroupStore() + const group: GroupSnapshot = { + key, members: [{ kind: 'node', key: snapshot.order[0] as NodeKey }], + data: { turn: 1, closed, summary: { counts: [], running: undefined, runningDetail: '' } }, + } groups.prepareAndInstall({ entries: [{ kind: 'group', key }], - groups: { kind: 'replace', snapshots: [{ - key, members: [{ kind: 'node', key: snapshot.order[0] as NodeKey }], - data: { turn: 1, closed: true, summary: { counts: [], running: undefined, runningDetail: '' } }, - }] }, + groups: { kind: 'replace', snapshots: [group] }, }, key => snapshot.nodes.get(key)) h.setGrouped(groups) const view = render() @@ -782,10 +787,12 @@ describe('ChatView', () => { const body = view.container.querySelector('[data-step-process-body]')! let reads = 0 let top = 0 + let height = initialHeight Object.defineProperties(body, { - scrollTop: { get: () => { reads++; return top } }, + scrollTop: { get: () => { reads++; return top }, set: (value: number) => { top = value } }, clientHeight: { get: () => { reads++; return 200 } }, - scrollHeight: { get: () => { reads++; return 600 } }, + scrollHeight: { get: () => { reads++; return height } }, + scrollTo: { value: (options: ScrollToOptions) => { top = options.top ?? top } }, }) fireEvent.click(header) @@ -793,16 +800,69 @@ describe('ChatView', () => { const observer = [...observers].find(observer => observer.targets.has(body))! expect(observer).toBeDefined() act(() => { observer.callback([], observer) }) - expect(body.hasAttribute('data-scroll-up')).toBe(false) - expect(body.hasAttribute('data-scroll-down')).toBe(true) + expect(top).toBe(closed ? 0 : initialHeight - 200) + expect(body.hasAttribute('data-scroll-up')).toBe(!closed && initialHeight > 200) + expect(body.hasAttribute('data-scroll-down')).toBe(closed && initialHeight > 200) + + height = 800 + act(() => { observer.callback([], observer) }) + fireEvent.scroll(body) + expect(top).toBe(!closed || initialHeight === 200 ? 600 : 0) + top = 400 fireEvent.scroll(body) expect(body.hasAttribute('data-scroll-up')).toBe(true) + expect(body.hasAttribute('data-scroll-down')).toBe(true) + height = 1_000 + act(() => { observer.callback([], observer) }) + expect(top).toBe(400) + + top = 800 + fireEvent.scroll(body) + height = 1_200 + act(() => { observer.callback([], observer) }) + fireEvent.scroll(body) + expect(top).toBe(1_000) expect(body.hasAttribute('data-scroll-down')).toBe(false) const measured = reads fireEvent.click(header) expect(reads).toBe(measured) expect(observers.has(observer)).toBe(false) + + height = 1_400 + fireEvent.click(header) + expect(reads).toBe(measured) + const reopened = [...observers].find(observer => observer.targets.has(body))! + act(() => { reopened.callback([], reopened) }) + expect(top).toBe(closed ? 0 : 1_200) + expect(body.hasAttribute('data-scroll-down')).toBe(closed) + + top = 400 + fireEvent.scroll(body) + act(() => { + groups.prepareAndInstall({ groups: { kind: 'apply', removes: [], upserts: [{ + ...group, data: { ...group.data, closed: true }, + }] } }, key => snapshot.nodes.get(key)) + groups.publish() + }) + expect(top).toBe(400) + expect(observers.has(reopened)).toBe(true) + height = 1_600 + act(() => { reopened.callback([], reopened) }) + expect(top).toBe(400) + fireEvent.click(header) + fireEvent.click(header) + const historical = [...observers].find(observer => observer.targets.has(body))! + act(() => { historical.callback([], historical) }) + expect(top).toBe(0) + + top = 300 + fireEvent.scroll(body) + fireEvent.click(header) + fireEvent(body, new Event('beforematch')) + const found = [...observers].find(observer => observer.targets.has(body))! + act(() => { found.callback([], found) }) + expect(top).toBe(300) }) it('does not recalculate settled group titles when work-details mode changes', () => { diff --git a/packages/client/ui-chat/tests/scroll-follow.client.spec.ts b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts new file mode 100644 index 0000000000..082c6f1afc --- /dev/null +++ b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts @@ -0,0 +1,103 @@ +// @vitest-environment jsdom +import { afterEach, describe, expect, it, vi } from 'vitest' +import { ScrollFollow, scrollMetrics } from '../src/client/chat/use-scroll-follow.ts' + +afterEach(() => { vi.unstubAllGlobals() }) + +function scrollport() { + const element = document.createElement('div') + let height = 600 + const scrollTo = vi.fn((options: ScrollToOptions) => { + if (options.behavior === 'instant') element.scrollTop = options.top ?? element.scrollTop + }) + Object.defineProperties(element, { + clientHeight: { value: 200 }, + scrollHeight: { get: () => height }, + scrollTo: { value: scrollTo }, + }) + return { element, scrollTo, metrics: () => scrollMetrics(element), grow: (value: number) => { height = value } } +} + +describe('ScrollFollow', () => { + it('keeps independent thresholds and adopts only attributed reader movement', () => { + const outer = new ScrollFollow(true, 25) + const inner = new ScrollFollow(true, 1) + const metrics = { top: 380, floor: 400, height: 200 } + expect(outer.sample(metrics, true)).toBe(true) + expect(inner.sample(metrics, true)).toBe(false) + expect(inner.sample({ ...metrics, top: 400 }, false)).toBe(false) + expect(inner.sample({ ...metrics, top: 400 }, true)).toBe(true) + inner.reset() + expect(inner.active).toBe(false) + expect(inner.sample({ ...metrics, top: 400 })).toBe(true) + expect(outer.active).toBe(true) + }) + + it('retains follow during native progress and retargets only a changed floor', () => { + const world = scrollport() + const follow = new ScrollFollow(false, 1) + expect(follow.toBottom(world.element, world.metrics(), 'smooth').top).toBe(0) + expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 400, behavior: 'smooth' }) + world.element.scrollTop = 100 + expect(follow.sample(world.metrics())).toBe(true) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).toHaveBeenCalledTimes(1) + world.grow(800) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 600, behavior: 'smooth' }) + world.element.scrollTop = 600 + expect(follow.sample(world.metrics())).toBe(true) + expect(follow.animating).toBe(false) + world.element.scrollTop = 300 + expect(follow.sample(world.metrics())).toBe(false) + }) + + it('cancels native motion before input without treating the cancellation itself as scrolling away', () => { + const world = scrollport() + const follow = new ScrollFollow(true, 1) + follow.interrupt(world.element, world.metrics()) + expect(world.scrollTo).not.toHaveBeenCalled() + follow.toBottom(world.element, world.metrics(), 'smooth') + world.element.scrollTop = 150 + follow.sample(world.metrics()) + follow.interrupt(world.element, world.metrics()) + expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 150, behavior: 'instant' }) + expect(follow.animating).toBe(false) + expect(follow.sample(world.metrics())).toBe(true) + world.element.scrollTop = 100 + expect(follow.sample(world.metrics())).toBe(false) + world.element.scrollTop = 400 + expect(follow.sample(world.metrics())).toBe(true) + }) + + it('positions opening and external landings immediately within the current range', () => { + const world = scrollport() + const follow = new ScrollFollow(false, 1) + expect(follow.toBottom(world.element, world.metrics(), 'instant').top).toBe(400) + expect(follow.toBottom(world.element, world.metrics(), 'smooth').top).toBe(400) + expect(world.scrollTo).not.toHaveBeenCalled() + expect(follow.jump(world.element, world.metrics(), -100).top).toBe(0) + expect(follow.active).toBe(false) + expect(follow.jump(world.element, world.metrics(), 1_000).top).toBe(400) + expect(follow.active).toBe(true) + }) + + it('uses immediate following under reduced motion', () => { + vi.stubGlobal('matchMedia', vi.fn(() => ({ matches: true }))) + const world = scrollport() + const follow = new ScrollFollow(false, 1) + expect(follow.toBottom(world.element, world.metrics(), 'smooth').top).toBe(400) + expect(follow.animating).toBe(false) + expect(world.scrollTo).not.toHaveBeenCalled() + }) + + it('stops a native animation when an explicit jump retains the current offset', () => { + const world = scrollport() + const follow = new ScrollFollow(false, 1) + follow.toBottom(world.element, world.metrics(), 'smooth') + follow.jump(world.element, world.metrics(), 0) + expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 0, behavior: 'instant' }) + expect(follow.animating).toBe(false) + expect(follow.active).toBe(false) + }) +}) From 1f029fc4425e0b4da8baacb7a7b528fa9d93ae35 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 17:06:03 +0800 Subject: [PATCH 13/35] docs(chat): record scroll ownership and control geometry --- ...9-18-chat-navigation-performance.i18n.yaml | 4 +- .../2026-09-18-chat-navigation-performance.md | 2 + ...26-09-18-chat-navigation-performance.zh.md | 2 + ...-09-21-conversation-build-groups.i18n.yaml | 4 +- .../2026-09-21-conversation-build-groups.md | 3 +- ...2026-09-21-conversation-build-groups.zh.md | 3 +- ...croll-follow-and-footer-geometry.i18n.yaml | 6 +++ ...-chat-scroll-follow-and-footer-geometry.md | 48 +++++++++++++++++++ ...at-scroll-follow-and-footer-geometry.zh.md | 48 +++++++++++++++++++ .../src/client/chat/use-process-scroll.ts | 8 +++- .../src/client/chat/use-scroll-follow.ts | 16 +++++-- 11 files changed, 133 insertions(+), 11 deletions(-) create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.i18n.yaml create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md 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 143d9ccffe..257088effa 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 @@ -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-18-chat-navigation-performance.md -2026-09-18-chat-navigation-performance.md: d990c0cb9a351ea3b3224ce5feec912c176a5fc9 -2026-09-18-chat-navigation-performance.zh.md: 1a330d3b6bf6357199eb09ffc1cdb434cda1c1af +2026-09-18-chat-navigation-performance.md: d82c68098fc422abb181ed4e5e1ca41189cd0951 +2026-09-18-chat-navigation-performance.zh.md: 9c2f81a51ce53660aabf2dd1e729d02e8028b7b6 diff --git a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.md b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.md index d990c0cb9a..d82c68098f 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.md +++ b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.md @@ -22,6 +22,8 @@ The rail uses ResizeObserver-delivered viewport dimensions and fixed item sizes. [ChatReading](../../../../packages/client/ui-chat/src/client/chat/use-chat-reading.ts) owns follow-tail policy, semantic restoration, and sampled reader movement. [ChatNavigation](../../../../packages/client/ui-chat/src/client/chat/use-chat-navigation.ts) owns loaded or unloaded jumps, paging anchors, replacement tasks, and fallback. [useChatScroll](../../../../packages/client/ui-chat/src/client/chat/use-chat-scroll.ts) supplies committed inputs and coordinates these owners. Timer and animation-frame completion invoke the owners directly instead of incrementing React tick state. The [pinned-delivery rule](../../../../packages/client/ui-chat/README.md#scroll-ownership) remains independently necessary: small reader gestures cannot be erased by intervening layout growth. +Shared nested-follow mechanics and control placement are recorded in the [Chat scroll and footer decision](../bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md); sampled outer reading and historical navigation retain the owners above. + ### One publication per historical jump [Session.loadThrough](../../../../packages/api/session-controller/src/client/sessions/session.ts) retains accepted pages and a private paging cursor until its shared target is covered or loading ends. It reverses the page list and flattens it once, then publishes one ordered prepend. Live events continue through their normal publication path. A later page failure publishes the successful prefix once; stream or window replacement discards obsolete buffered pages. Single-page `loadOlder` remains immediate, and repeated jump requests retain the existing lowest-target policy. diff --git a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.zh.md b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.zh.md index 1a330d3b6b..9c2f81a51c 100644 --- a/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.zh.md +++ b/.agents/notes/implemented/architecture/2026-09-18-chat-navigation-performance.zh.md @@ -22,6 +22,8 @@ Status: implemented [ChatReading](../../../../packages/client/ui-chat/src/client/chat/use-chat-reading.ts) 负责跟随底部、语义恢复和读者移动采样。[ChatNavigation](../../../../packages/client/ui-chat/src/client/chat/use-chat-navigation.ts) 负责已加载或未加载轮次跳转、分页锚点、任务替换和回退。[useChatScroll](../../../../packages/client/ui-chat/src/client/chat/use-chat-scroll.ts) 提供已提交输入并协调各对象。定时器与动画帧完成时直接调用负责对象,不再递增 React tick 状态。[贴底事件规则](../../../../packages/client/ui-chat/README.zh.md#scroll-ownership) 仍有独立必要性:期间发生的布局增长不能抵消读者的小幅操作。 +共用的嵌套跟随机制与控件定位见 [Chat 滚动与页脚决策](../bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md);外层采样阅读与历史导航仍由上述对象负责。 + ### 每次历史跳转统一发布 [Session.loadThrough](../../../../packages/api/session-controller/src/client/sessions/session.ts) 在共享目标被覆盖或加载结束前,保留已接受的页面和私有分页游标。它只反转一次页面列表并展开一次,然后发布一次有序前插。实时事件继续走正常发布路径。后续页面失败时,已成功取得的部分统一发布一次;流或窗口被替换时丢弃失效的暂存页面。单页 `loadOlder` 仍立即发布,重复跳转请求保留既有的最低目标策略。 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 8e9540156a..1bd7d91641 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 @@ -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-21-conversation-build-groups.md -2026-09-21-conversation-build-groups.md: 7c02de8dd0aaf842690806ea67ddaf5d4561fc4e -2026-09-21-conversation-build-groups.zh.md: 4f2b331596cacdd63d902c9db73931d65ac589ad +2026-09-21-conversation-build-groups.md: bccb48b0e40a076bbcb59aaca9e9ef6208e9469d +2026-09-21-conversation-build-groups.zh.md: 5d2ec9e684c75b3db3568c4f046129431295f736 diff --git a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.md b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.md index 7c02de8dd0..bccb48b0e4 100644 --- a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.md +++ b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.md @@ -35,6 +35,7 @@ The grouping foundation provides a separate, Node-input `ConversationGroupDefini | Record | Relationship | |---|---| | [Business Node assembly](2026-08-09-client-conversation-node-assembly.md) | Retains event matching, Contexts, Locations, one business Node per Context, and target Builders; grouping adds another input category. | +| [Chat scroll and footer](../bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md) | Owns clipping and independent nested following without changing Group Definition membership. | Grouping preserves the independent Node-assembly decisions. Cross-View navigation and `toolCallFocus` remain separate responsibilities; Group references carry no View handles or resource-navigation policy. @@ -106,7 +107,7 @@ Grouping never replays raw events. Node Definitions handle replay first; groupin | [group-store.ts](../../../../packages/client/ui-conversation/src/client/conversation/group-store.ts) | Atomic reference validation, keyed sources, array reuse, and local publication. | | [chat-snapshot-builder.ts](../../../../packages/client/ui-chat/src/client/conversation-nodes/chat-snapshot-builder.ts) | Record projected Node deltas, target positions, and changed Turn orders; provide indexed readers and defer source notification. No process grouping class. | | [ChatView.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatView.tsx) | Read optional root entries and switch between node/group; fallback to existing Node order. | -| [ChatGroupSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx) | Stable group parent, member-only subscription, nested Node seats. | +| [ChatGroupSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx) | Stable group parent, group-local subscriptions, nested Node seats. | | [ChatNodeSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx) | Existing Node sources/renderers, groupPart forwarding, distinct part anchors, Store-replacement rebind. | | [slots.ts](../../../../packages/client/ui-chat/src/client/contract/slots.ts) and [apply.ts](../../../../packages/client/ui-chat/src/client/apply.ts) | Existing keyed-hook injection for Group sources; no Slot-engine change. | diff --git a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.zh.md b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.zh.md index 4f2b331596..5d2ec9e684 100644 --- a/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.zh.md +++ b/.agents/notes/implemented/architecture/2026-09-21-conversation-build-groups.zh.md @@ -35,6 +35,7 @@ Chat Builder 汇总整个目标的节点及索引。在其中固定创建 Chat | 记录 | 关系 | |---|---| | [业务节点组装](2026-08-09-client-conversation-node-assembly.zh.md) | 保留事件匹配、Context、Location、每个 Context 一个业务 Node 及目标 Builder,分组增加另一种输入类别。 | +| [Chat 滚动与页脚](../bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md) | 负责裁剪与独立的嵌套跟随,不改变 Group Definition 成员关系。 | 分组保留独立的节点组装决策。跨 View 导航与 `toolCallFocus` 仍是独立职责,Group 引用不携带 View 句柄或资源导航策略。 @@ -106,7 +107,7 @@ GroupStore 按 GroupKey 索引记录和来源,不反复查找数组。等价 | [group-store.ts](../../../../packages/client/ui-conversation/src/client/conversation/group-store.ts) | 原子引用校验、按键来源、数组复用及局部发布。 | | [chat-snapshot-builder.ts](../../../../packages/client/ui-chat/src/client/conversation-nodes/chat-snapshot-builder.ts) | 记录投影后节点增量、目标位置及变化轮次顺序,提供索引读取器并推迟来源通知,不持有过程分组类。 | | [ChatView.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatView.tsx) | 读取可选根引用并切换 node/group,无分组时使用既有 Node 顺序。 | -| [ChatGroupSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx) | 稳定组父级、仅成员订阅及嵌套 Node 容器。 | +| [ChatGroupSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatGroupSeat.tsx) | 稳定组父级、组内订阅及嵌套 Node 容器。 | | [ChatNodeSeat.tsx](../../../../packages/client/ui-chat/src/client/chat/ChatNodeSeat.tsx) | 既有 Node 来源及渲染器、groupPart 传递、独立部分锚点及 Store 替换时重绑定。 | | [slots.ts](../../../../packages/client/ui-chat/src/client/contract/slots.ts) 与 [apply.ts](../../../../packages/client/ui-chat/src/client/apply.ts) | 使用现有按键钩子注入 Group 来源,不改 Slot 引擎。 | 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 new file mode 100644 index 0000000000..212244e077 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.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/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md +2026-09-22-chat-scroll-follow-and-footer-geometry.md: 550650f50108a5c03f0a1e37f90e727546845a69 +2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: f17f2b481119b855d7f1ef777b5f2211a503f673 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md new file mode 100644 index 0000000000..550650f501 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md @@ -0,0 +1,48 @@ +# Agent Note: Separate Chat clipping and independent follow intent + +Status: implemented + +English | [中文](2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md) + +## Problem + +Clipping transcript overflow and positioning floating controls require different ancestors. An `overflow-y: hidden` ancestor becomes the nearest scroll container for sticky descendants even when readers scroll a different outer element. A turn rail or back-to-bottom button inside that clipping ancestor therefore follows transcript geometry instead of the visible conversation scrollport. + +A height-capped process group also has a separate reading position. Outer bottom-follow cannot expose newly appended content inside a group whose own scroll offset stays unchanged. Treating every non-bottom scroll event as reader input does not support native smooth following: the browser emits those same events while an animation approaches its target. + +## Decision + +The transcript, floating controls, and scroll intent retain separate ownership. The [scroll-state table](../../../../packages/client/ui-chat/README.md#scroll-ownership) and [group display rules](../../../../packages/client/ui-chat/src/client/conversation-nodes/README.md#display-modes) define the current product behavior. + +| Area | Implementation | Reason | +|---|---|---| +| Transcript clipping | `ChatView` retains the clipped `.root` inside an unclipped frame. | Constrain transcript overflow without changing floating controls' scroll ancestor. | +| Floating controls | TurnNavigator and the back-to-bottom button are siblings of the clipped transcript. | Shared Conversations use the outer scrollport for sticky positioning; standalone Chat uses its frame for absolute positioning. | +| Follow intent | `useScrollFollow` retains one independent controller per scrollport. | Reuse thresholds, position sampling, and native scrolling without sharing one follow flag. | +| Group lifecycle | `useProcessScroll` owns its existing body/content observer, directional fades, and one-shot opening position. | Group growth remains observable after the body reaches its cap; opening performs no immediate geometry read. | + +An unclosed group opens at its bottom; a closed group opens at its top. The group’s `closed` value, not the whole Turn’s status or an all-node search, decides that initial position. A later close does not reset an already-open reader. Browser find keeps its own reveal position, and display-mode changes preserve mounted members. + +Native smooth growth keeps an outstanding target separate from the current position. Animation progress retains follow intent. Input interrupts native motion before the browser applies reader movement; the resulting actual displacement determines whether following stops or resumes. Repeated resize reports do not restart an unchanged target. Reduced motion and explicit opening positions use immediate scrolling. Outer following keeps its existing immediate behavior and sampling policy. + +The back-to-bottom button depends only on outer follow intent and restores only that intent. Inner scrolling affects the outer controller only when scroll chaining actually moves the outer scrollport. Group height growth can resize the outer transcript, but the controllers do not invoke each other’s follow actions. Paging and semantic restoration remain with the existing outer reading/navigation owners. + +## Alternatives considered + +**Remove or change the transcript clipping rule.** That would alter the overflow constraint instead of separating it from control positioning. An unclipped sibling frame retains both requirements without a Portal or document-level coordinate synchronization. + +**Share one follow flag, or duplicate the complete controllers.** One flag would pull a group away from a reader merely because the outer transcript follows. Two complete implementations would duplicate animation attribution and threshold rules. Sharing the small controller retains independent state without moving paging, Turn navigation, or semantic memory into it. + +**Only replace `scrollTop` assignment with smooth `scrollTo`.** Intermediate animation offsets would appear to be reader movement and disable following. Native motion needs an explicit target and input interruption; a custom animation-frame interpolator is unnecessary. + +## Verification + +[Controller tests](../../../../packages/client/ui-chat/tests/scroll-follow.client.spec.ts) cover independent thresholds, animation progress, target reuse, input interruption, reduced motion, and immediate positioning. [Chat component tests](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx) cover group opening, pause/resume, closing while open, and browser-find preservation. [Viewport tests](../../../../packages/client/ui-chat/tests/chat-viewport.client.spec.ts) retain the outer anchor and attribution behavior. + +[Browser scroll cases](../../../../apps/web/tests/chat-scroll-contract.e2e.ts) exercise floating-control geometry, nested following, paging, streaming, and real wheel input through the shipped Web composition. + +## Consequences + +The shared controller stores intent without scheduling React renders; callers still publish visible state changes, and group edge fades update only when their booleans change. Follow operations read the affected scrollport, not its Node collection. Native scrolling still performs browser layout and paint work. These changes establish behavior and ownership, not a measured latency or memory improvement. + +The [navigation decision](../architecture/2026-09-18-chat-navigation-performance.md) still owns sampled reading, known landings, and batched historical jumps. The [grouping decision](../architecture/2026-09-21-conversation-build-groups.md) still owns Definition-based membership and stable rendering identities. Extracting scroll-follow mechanics does not supersede either decision. diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md new file mode 100644 index 0000000000..f17f2b4811 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md @@ -0,0 +1,48 @@ +# Agent Note: 分离 Chat 裁剪与独立滚动跟随意图 + +Status: implemented + +[English](2026-09-22-chat-scroll-follow-and-footer-geometry.md) | 中文 + +## 问题 + +正文溢出裁剪与悬浮控件定位需要不同的祖先。即使读者实际滚动的是外层元素,`overflow-y: hidden` 祖先也会成为 sticky 子元素最近的滚动容器。轮次轨道或回到底部按钮位于该裁剪祖先内时,参照的是正文几何,而非可见会话滚动区域。 + +限高过程组也有独立阅读位置。若组内偏移不变,外层跟随底部无法展示组内新增内容。把每个未到底的滚动事件都当成读者输入,也无法支持原生平滑跟随:浏览器在动画接近目标期间同样会发出这些事件。 + +## 决策 + +正文、悬浮控件及滚动意图分别由独立对象负责。[滚动状态表](../../../../packages/client/ui-chat/README.zh.md#scroll-ownership)与[分组展示规则](../../../../packages/client/ui-chat/src/client/conversation-nodes/README.zh.md#display-modes)定义当前产品行为。 + +| 范围 | 实现 | 原因 | +|---|---|---| +| 正文裁剪 | `ChatView` 在无裁剪的外框内保留被裁剪的 `.root`。 | 限制正文溢出,同时不改变悬浮控件的滚动祖先。 | +| 悬浮控件 | TurnNavigator 与回到底部按钮位于正文裁剪层的同级。 | 共享 Conversation 相对外层滚动容器做 sticky 定位;独立 Chat 相对自身外框做 absolute 定位。 | +| 跟随意图 | `useScrollFollow` 为每个滚动区保留独立控制器。 | 共用阈值、位置采样及原生滚动,不共用一个跟随开关。 | +| 小组生命周期 | `useProcessScroll` 负责既有的正文与内容观察器、方向渐隐和一次性展开位置。 | 正文达到限高后,内容增长仍可被观察;展开时不立即读取几何。 | + +未关闭的小组展开到自己的底部,已关闭的小组展开到顶部。初始位置由组自身的 `closed` 决定,不取整个 Turn 的状态,也不遍历全部节点。组随后关闭不会重置已展开的阅读位置。浏览器查找保留自身的展开定位,模式切换保留已挂载成员。 + +原生平滑跟随将未完成的目标与当前位置分开记录。动画进度保留跟随意图。输入在浏览器处理读者移动前中断原生动画,再由实际位移决定是否暂停或恢复跟随。重复尺寸报告不会重启相同目标。减少动态效果与明确的展开定位使用即时滚动。外层跟随保留既有的即时行为和采样策略。 + +回到底部按钮只取决于外层跟随意图,也只恢复该意图。只有滚动传递确实移动外层滚动区域时,内层滚动才影响外层控制器。小组长高可以改变外层正文尺寸,但两个控制器不会互相调用跟随操作。分页和语义恢复仍由既有的外层阅读与导航对象负责。 + +## 考虑过的替代方案 + +**删除或修改正文裁剪规则。** 这会改变溢出约束,而不是将其与控件定位分离。无裁剪的同级外框可以同时保留两项要求,不需要 Portal 或文档级坐标同步。 + +**共用一个跟随开关,或复制完整控制器。** 共用开关会仅因外层跟随就把小组拉离读者位置。复制两套完整实现则会重复动画归因和阈值规则。共用小控制器可以保留独立状态,同时不把分页、轮次导航及语义记忆搬入其中。 + +**只把 `scrollTop` 赋值换成平滑 `scrollTo`。** 动画中间偏移会被误判为读者移动,导致跟随关闭。原生动画需要明确的目标与输入中断处理,无需自写动画帧插值器。 + +## 验证 + +[控制器测试](../../../../packages/client/ui-chat/tests/scroll-follow.client.spec.ts)覆盖独立阈值、动画进度、目标复用、输入中断、减少动态效果和即时定位。[Chat 组件测试](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx)覆盖小组展开、暂停与恢复、展开期间关闭及浏览器查找位置保持。[视口测试](../../../../packages/client/ui-chat/tests/chat-viewport.client.spec.ts)保留外层锚点与归因行为。 + +[浏览器滚动用例](../../../../apps/web/tests/chat-scroll-contract.e2e.ts)通过正式 Web 装配验证悬浮控件几何、嵌套跟随、分页、流式内容与真实滚轮输入。 + +## 影响 + +共享控制器只保存意图,不自行调度 React 渲染;调用方仍发布可见状态变化,小组边缘渐隐仅在布尔值变化时更新。跟随操作读取受影响的滚动容器,而非节点集合。原生滚动仍有浏览器布局和绘制成本。这些改动确立行为与职责,不代表已测得延迟或内存收益。 + +[导航决策](../architecture/2026-09-18-chat-navigation-performance.zh.md)继续负责采样阅读、已知落点与聚合历史跳转。[分组决策](../architecture/2026-09-21-conversation-build-groups.zh.md)继续负责 Definition 成员关系与稳定渲染身份。提取滚动跟随机制不取代这两项决策。 diff --git a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts index b552daee6a..61a45a7bbc 100644 --- a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts +++ b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts @@ -1,5 +1,5 @@ /** Capped process-group scrolling and fades over the shared follow controller. */ -import { useCallback, useLayoutEffect, useMemo, useRef, useState, type KeyboardEvent, type RefObject } from 'react' +import { useCallback, useLayoutEffect, useMemo, useRef, useState, type DOMAttributes, type KeyboardEvent, type RefObject } from 'react' import { scrollMetrics, useScrollFollow } from './use-scroll-follow.ts' interface ScrollEdges { readonly canScrollUp: boolean; readonly canScrollDown: boolean } @@ -16,7 +16,11 @@ const SCROLL_KEYS = new Set(['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home */ export function useProcessScroll( bodyRef: RefObject, contentRef: RefObject, open: boolean, grouped: boolean, -) { +): { + edges: ScrollEdges + events: Pick, 'onScroll' | 'onWheel' | 'onTouchStart' | 'onPointerDown' | 'onKeyDown'> + initialize: (position: 'top' | 'bottom') => void +} { const follow = useScrollFollow(false, 1) const initialPosition = useRef<'top' | 'bottom' | null>(null) const [edges, setEdges] = useState(AT_REST) diff --git a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts index 5595995974..d7c8ccb8f3 100644 --- a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts +++ b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts @@ -29,19 +29,29 @@ export class ScrollFollow { */ constructor(private following: boolean, private readonly threshold: number) {} - /** @returns whether content growth should follow the floor. */ + /** + * Expose follow intent independently of the current offset. + * @returns whether content growth should follow the floor. + */ get active(): boolean { return this.following } - /** @returns whether a native follow animation has an outstanding target. */ + /** + * Expose outstanding native motion before accepting reader input. + * @returns whether a native follow animation has an outstanding target. + */ get animating(): boolean { return this.target !== null } /** + * Classify bottom arrivals using this scrollport's own tolerance. * @param metrics - current scroll geometry. * @returns whether the position is within the follow threshold. */ nearBottom(metrics: ViewportMetrics): boolean { return metrics.floor - metrics.top <= this.threshold } - /** @param active - externally committed follow intent. */ + /** + * Commit caller-owned follow decisions without moving the scrollport. + * @param active - externally committed follow intent. + */ setFollowing(active: boolean): void { this.following = active if (!active) this.target = null From fb02779a26d6614d9c8abb80eeb1cb9e443e4544 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 17:10:42 +0800 Subject: [PATCH 14/35] fix(chat): restore turn rail container queries --- packages/client/ui-chat/src/client/chat/ChatView.module.css | 2 ++ 1 file changed, 2 insertions(+) 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 d3428d9cc2..91cdfb7b75 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.module.css +++ b/packages/client/ui-chat/src/client/chat/ChatView.module.css @@ -4,6 +4,8 @@ flex-direction: column; min-height: 0; flex: 1 1 auto; + /* Floating controls query this frame outside the clipped transcript. */ + container-type: inline-size; } .root { From 13dfae20c3c77589a295a7d7fb26a71232f86e1e Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 17:46:54 +0800 Subject: [PATCH 15/35] fix(chat): settle native scroll following before retargeting --- ...croll-follow-and-footer-geometry.i18n.yaml | 4 +- ...-chat-scroll-follow-and-footer-geometry.md | 2 +- ...at-scroll-follow-and-footer-geometry.zh.md | 2 +- apps/web/tests/chat-scroll-contract.e2e.ts | 24 +++++++++++ packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 2 +- packages/client/ui-chat/README.zh.md | 2 +- .../src/client/chat/use-process-scroll.ts | 23 ++++++---- .../src/client/chat/use-scroll-follow.ts | 19 +++++++-- .../ui-chat/tests/chat-view.client.spec.tsx | 35 ++++++++++++++-- .../tests/scroll-follow.client.spec.ts | 42 +++++++++++++++++-- 11 files changed, 134 insertions(+), 25 deletions(-) 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 212244e077..014ba6b9e7 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 @@ -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/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md -2026-09-22-chat-scroll-follow-and-footer-geometry.md: 550650f50108a5c03f0a1e37f90e727546845a69 -2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: f17f2b481119b855d7f1ef777b5f2211a503f673 +2026-09-22-chat-scroll-follow-and-footer-geometry.md: 5f01d09f3727f301399afaba643783f582680966 +2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: 372ffba78345f952b11be5f0296b7f989df9157a diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md index 550650f501..5f01d09f37 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md @@ -23,7 +23,7 @@ The transcript, floating controls, and scroll intent retain separate ownership. An unclosed group opens at its bottom; a closed group opens at its top. The group’s `closed` value, not the whole Turn’s status or an all-node search, decides that initial position. A later close does not reset an already-open reader. Browser find keeps its own reveal position, and display-mode changes preserve mounted members. -Native smooth growth keeps an outstanding target separate from the current position. Animation progress retains follow intent. Input interrupts native motion before the browser applies reader movement; the resulting actual displacement determines whether following stops or resumes. Repeated resize reports do not restart an unchanged target. Reduced motion and explicit opening positions use immediate scrolling. Outer following keeps its existing immediate behavior and sampling policy. +Native smooth growth keeps an outstanding target separate from the current position. Animation progress retains follow intent. Input interrupts native motion before the browser applies reader movement; the resulting actual displacement determines whether following stops or resumes. Further growth retains the issued target until `scrollend`. Arrival at that target, including shrink clamping, allows one request to the latest floor; an off-target stop releases following so focus and find keep their landing. Reduced motion and explicit opening positions use immediate scrolling. Outer following keeps its existing immediate behavior and sampling policy. The back-to-bottom button depends only on outer follow intent and restores only that intent. Inner scrolling affects the outer controller only when scroll chaining actually moves the outer scrollport. Group height growth can resize the outer transcript, but the controllers do not invoke each other’s follow actions. Paging and semantic restoration remain with the existing outer reading/navigation owners. diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md index f17f2b4811..372ffba783 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md @@ -23,7 +23,7 @@ Status: implemented 未关闭的小组展开到自己的底部,已关闭的小组展开到顶部。初始位置由组自身的 `closed` 决定,不取整个 Turn 的状态,也不遍历全部节点。组随后关闭不会重置已展开的阅读位置。浏览器查找保留自身的展开定位,模式切换保留已挂载成员。 -原生平滑跟随将未完成的目标与当前位置分开记录。动画进度保留跟随意图。输入在浏览器处理读者移动前中断原生动画,再由实际位移决定是否暂停或恢复跟随。重复尺寸报告不会重启相同目标。减少动态效果与明确的展开定位使用即时滚动。外层跟随保留既有的即时行为和采样策略。 +原生平滑跟随将未完成的目标与当前位置分开记录。动画进度保留跟随意图。输入在浏览器处理读者移动前中断原生动画,再由实际位移决定是否暂停或恢复跟随。后续增长保留已发出的目标,直到 `scrollend`。到达该目标(包括内容缩短后的钳制位置)才允许再次请求最新底部;停在目标之外则释放跟随,让焦点和查找保留落点。减少动态效果与明确的展开定位使用即时滚动。外层跟随保留既有的即时行为和采样策略。 回到底部按钮只取决于外层跟随意图,也只恢复该意图。只有滚动传递确实移动外层滚动区域时,内层滚动才影响外层控制器。小组长高可以改变外层正文尺寸,但两个控制器不会互相调用跟随操作。分页和语义恢复仍由既有的外层阅读与导航对象负责。 diff --git a/apps/web/tests/chat-scroll-contract.e2e.ts b/apps/web/tests/chat-scroll-contract.e2e.ts index 884c7663db..494eef8120 100644 --- a/apps/web/tests/chat-scroll-contract.e2e.ts +++ b/apps/web/tests/chat-scroll-contract.e2e.ts @@ -678,6 +678,7 @@ describe('web e2e: long Chat scroll contract', () => { replay: [replayEntry(chunks)], seeds: [{ fixture: HISTORY_FIXTURE, id: HISTORY_SESSION_ID }], }, async (world) => { + await world.page.emulateMedia({ reducedMotion: 'no-preference' }) await openSeed(world.page, HISTORY_FIXTURE, HISTORY_FIXTURE.markers.assistant(HISTORY_FIXTURE.turns)) const gates = parts.slice(1).map(() => Promise.withResolvers()) const dispose = world.scaffold.ctx.on('llm/stream', async function* (_options, next) { @@ -720,6 +721,29 @@ describe('web e2e: long Chat scroll contract', () => { await grow(0) await expectGroupBottom() await expectBottom(world.page) + // Per-frame growth exercises the real observer and native animation + // independently of transport batching while the next model chunk waits. + const content = group.locator('[data-step-process-content]') + const heightStyle = await content.evaluate(element => element.style.height) + const beforeGrowth = await top() + try { + const duringGrowth = await body.evaluate(async (scroller) => { + const content = scroller.querySelector('[data-step-process-content]')! + const initialHeight = content.getBoundingClientRect().height + let halfway = scroller.scrollTop + for (let frame = 1; frame <= 60; frame++) { + content.style.height = `${initialHeight + frame * 20}px` + await new Promise(resolve => requestAnimationFrame(() => { resolve() })) + if (frame === 30) halfway = scroller.scrollTop + } + return halfway + }) + expect(duringGrowth).toBeGreaterThan(beforeGrowth + 20) + await expectGroupBottom() + } finally { + await content.evaluate((element, previous) => { element.style.height = previous }, heightStyle) + } + await expectGroupBottom() await wheelTranscript(world.page, -800) await backToBottom.waitFor() const outerTop = (await scrollGeometry(world.page)).scrollTop diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 1ed11db483..16d9e60904 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: a640e246305a392c33a01c1c2b906fed2190bf7a -README.zh.md: 69ec1af4f1db10962969b8282db97699978d3fdd +README.md: 7eb391afc3e4ff7a5e44f14c2333c5f8d83d5ac8 +README.zh.md: b325a8ebc8d73485804fb31c790fdd9cb9de56fc diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index a640e24630..7eb391afc3 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -118,7 +118,7 @@ While the pointer is outside the rail, automatic follow keeps the rail still whe
Scroll implementation — click to expand -`useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Opening placement remains immediate. +`useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Growth retains an in-flight target until `scrollend`; arrival at that target or its shrink-clamped position continues toward the latest floor, while another endpoint releases following. Opening placement remains immediate. `useChatViewport` owns turn-aware DOM reads, clamped writes, native events, and one retained paging anchor. For Load older, Node and Group seats mark eligible anchors from their existing disclosure state. The viewport selects the first nonempty, unhidden marker in transcript order without hit testing or geometry-based search, then measures that element and its scroll containers. It compensates the anchor's capped group first, then gives the remaining displacement to the transcript scrollport. Commits and later content resizes reuse that anchor; a remounted row is resolved by the same semantic key. Compensation stays within the actual scroll ranges without adding bottom space. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 69ec1af4f1..b325a8ebc8 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -118,7 +118,7 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且
滚动实现——点击展开 -`useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。展开时仍即时定位。 +`useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。`scrollend` 前的增长保留当前动画目标;到达该目标或因内容缩短而钳制的位置后,再追随最新底部;停在其他位置则释放跟随。展开时仍即时定位。 `useChatViewport` 负责识别轮次的 DOM 读取、限制范围后的写入、原生事件及一个持续保留的分页锚点。加载更早时,Node 与 Group 容器根据已有开合状态标记可选锚点。视口按正文顺序选择第一个非空、未隐藏的标记,不做命中测试或按几何位置搜索,再测量该元素及其滚动容器。先补偿锚点所在的限高组,再把剩余位移交给整段文本的滚动区域。提交和后续内容尺寸变化复用该锚点;消息行重挂载时按同一语义 key 重新定位。补偿限于实际可滚动范围,不增加底部空白。 diff --git a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts index 61a45a7bbc..bb1f0961bf 100644 --- a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts +++ b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts @@ -25,18 +25,22 @@ export function useProcessScroll( const initialPosition = useRef<'top' | 'bottom' | null>(null) const [edges, setEdges] = useState(AT_REST) const initialize = useCallback((position: 'top' | 'bottom') => { initialPosition.current = position }, []) - const sync = useCallback((resized: boolean) => { + const sync = useCallback((cause: 'resize' | 'scroll' | 'scrollend') => { const body = bodyRef.current let next = AT_REST if (body !== null && body.closest('[hidden], [data-group-expanded-mode]') === null) { let metrics = scrollMetrics(body) - const initial = resized ? initialPosition.current : null + const initial = cause === 'resize' ? initialPosition.current : null if (initial !== null) { metrics = follow.jump(body, metrics, initial === 'bottom' ? metrics.floor : 0) initialPosition.current = null } else { - follow.sample(metrics) - if (resized && follow.active) metrics = follow.toBottom(body, metrics, 'smooth') + const wasAnimating = follow.animating + if (cause === 'scrollend') follow.settle(metrics) + else follow.sample(metrics) + if (follow.active && (cause === 'resize' || (cause === 'scrollend' && wasAnimating))) { + metrics = follow.toBottom(body, metrics, 'smooth') + } } next = { canScrollUp: metrics.top > 1, canScrollDown: metrics.top < metrics.floor - 1 } } else follow.reset() @@ -48,7 +52,7 @@ export function useProcessScroll( if (body !== null && follow.animating) follow.interrupt(body, scrollMetrics(body)) }, [bodyRef, follow]) const events = useMemo(() => ({ - onScroll: () => { sync(false) }, + onScroll: () => { sync('scroll') }, onWheel: interrupt, onTouchStart: interrupt, onPointerDown: interrupt, @@ -65,10 +69,15 @@ export function useProcessScroll( useLayoutEffect(() => { const body = bodyRef.current if (body === null || !open || typeof ResizeObserver === 'undefined') return - const observer = new ResizeObserver(() => { sync(true) }) + const observer = new ResizeObserver(() => { sync('resize') }) + const onScrollEnd = (event: Event): void => { if (event.target === body) sync('scrollend') } + body.addEventListener('scrollend', onScrollEnd) observer.observe(body) if (contentRef.current !== null) observer.observe(contentRef.current) - return () => { observer.disconnect() } + return () => { + observer.disconnect() + body.removeEventListener('scrollend', onScrollEnd) + } }, [bodyRef, contentRef, open, sync]) return { edges, events, initialize } } diff --git a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts index d7c8ccb8f3..7eaeea9939 100644 --- a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts +++ b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts @@ -71,13 +71,23 @@ export class ScrollFollow { */ sample(metrics: ViewportMetrics, movedByReader = this.sampledTop === undefined || Math.abs(metrics.top - this.sampledTop) > 0.5): boolean { - const animated = this.animating this.sampledTop = metrics.top - if (this.nearBottom(metrics)) this.target = null - if (!animated && movedByReader) this.following = this.nearBottom(metrics) + if (!this.animating && movedByReader) this.following = this.nearBottom(metrics) return this.active } + /** + * Settle native scrolling; an off-target stop releases follow intent. + * @param metrics - actual geometry delivered at scrollend. + * @returns follow intent after completing or interrupting native motion. + */ + settle(metrics: ViewportMetrics): boolean { + const target = this.target + this.target = null + return this.sample(metrics, target === null ? undefined + : Math.abs(metrics.top - Math.min(target, metrics.floor)) > this.threshold) + } + /** * Position immediately and adopt the resulting follow intent. * @param element - scrolling element. @@ -99,6 +109,7 @@ export class ScrollFollow { /** * Follow the measured floor, respecting reduced motion for smooth requests. + * An outstanding smooth target finishes before another is issued. * @param element - scrolling element. * @param metrics - current geometry. * @param behavior - native animation for growth, or immediate positioning. @@ -110,7 +121,7 @@ export class ScrollFollow { if (typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches) { return this.jump(element, metrics, metrics.floor) } - if (this.target !== metrics.floor) { + if (this.target === null) { this.target = metrics.floor element.scrollTo({ top: metrics.floor, behavior: 'smooth' }) } diff --git a/packages/client/ui-chat/tests/chat-view.client.spec.tsx b/packages/client/ui-chat/tests/chat-view.client.spec.tsx index 58ae08c999..b30209d1d0 100644 --- a/packages/client/ui-chat/tests/chat-view.client.spec.tsx +++ b/packages/client/ui-chat/tests/chat-view.client.spec.tsx @@ -788,11 +788,22 @@ describe('ChatView', () => { let reads = 0 let top = 0 let height = initialHeight + let animatedTop: number | null = null + const scrollTo = vi.fn((options: ScrollToOptions) => { + if (options.behavior === 'smooth') animatedTop = options.top ?? top + else { animatedTop = null; top = options.top ?? top } + }) + const finishScroll = (): void => { + top = animatedTop ?? top + animatedTop = null + fireEvent.scroll(body) + fireEvent(body, new Event('scrollend')) + } Object.defineProperties(body, { scrollTop: { get: () => { reads++; return top }, set: (value: number) => { top = value } }, clientHeight: { get: () => { reads++; return 200 } }, scrollHeight: { get: () => { reads++; return height } }, - scrollTo: { value: (options: ScrollToOptions) => { top = options.top ?? top } }, + scrollTo: { value: scrollTo }, }) fireEvent.click(header) @@ -806,7 +817,7 @@ describe('ChatView', () => { height = 800 act(() => { observer.callback([], observer) }) - fireEvent.scroll(body) + finishScroll() expect(top).toBe(!closed || initialHeight === 200 ? 600 : 0) top = 400 @@ -821,9 +832,27 @@ describe('ChatView', () => { fireEvent.scroll(body) height = 1_200 act(() => { observer.callback([], observer) }) - fireEvent.scroll(body) + finishScroll() expect(top).toBe(1_000) expect(body.hasAttribute('data-scroll-down')).toBe(false) + + height = 1_400 + act(() => { observer.callback([], observer) }) + expect(animatedTop).toBe(1_200) + const beforeNestedEnd = reads + fireEvent(body.firstElementChild!, new Event('scrollend', { bubbles: true })) + expect(reads).toBe(beforeNestedEnd) + // Find/focus can reposition the body without firing its input handlers. + top = 900 + animatedTop = null + const requests = scrollTo.mock.calls.length + finishScroll() + expect(animatedTop).toBeNull() + expect(scrollTo).toHaveBeenCalledTimes(requests) + height = 1_600 + act(() => { observer.callback([], observer) }) + expect(top).toBe(900) + expect(scrollTo).toHaveBeenCalledTimes(requests) const measured = reads fireEvent.click(header) expect(reads).toBe(measured) diff --git a/packages/client/ui-chat/tests/scroll-follow.client.spec.ts b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts index 082c6f1afc..b7e9a1fa8f 100644 --- a/packages/client/ui-chat/tests/scroll-follow.client.spec.ts +++ b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts @@ -33,7 +33,7 @@ describe('ScrollFollow', () => { expect(outer.active).toBe(true) }) - it('retains follow during native progress and retargets only a changed floor', () => { + it('finishes native motion before following the latest grown floor', () => { const world = scrollport() const follow = new ScrollFollow(false, 1) expect(follow.toBottom(world.element, world.metrics(), 'smooth').top).toBe(0) @@ -44,14 +44,49 @@ describe('ScrollFollow', () => { expect(world.scrollTo).toHaveBeenCalledTimes(1) world.grow(800) follow.toBottom(world.element, world.metrics(), 'smooth') - expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 600, behavior: 'smooth' }) - world.element.scrollTop = 600 + world.grow(1_000) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).toHaveBeenCalledTimes(1) + world.element.scrollTop = 400 expect(follow.sample(world.metrics())).toBe(true) + expect(follow.animating).toBe(true) + expect(follow.settle(world.metrics())).toBe(true) + expect(follow.animating).toBe(false) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).toHaveBeenCalledTimes(2) + expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 800, behavior: 'smooth' }) + world.element.scrollTop = 800 + expect(follow.sample(world.metrics())).toBe(true) + expect(follow.settle(world.metrics())).toBe(true) expect(follow.animating).toBe(false) world.element.scrollTop = 300 expect(follow.sample(world.metrics())).toBe(false) }) + it('finishes native motion when shrinking content clamps its target', () => { + const world = scrollport() + const follow = new ScrollFollow(true, 1) + follow.toBottom(world.element, world.metrics(), 'smooth') + world.grow(300) + world.element.scrollTop = 100 + expect(follow.sample(world.metrics())).toBe(true) + expect(follow.settle(world.metrics())).toBe(true) + expect(follow.animating).toBe(false) + }) + + it.each([150, 600])('releases following after a native stop at %i instead of its target', (top) => { + const world = scrollport() + const follow = new ScrollFollow(true, 1) + follow.toBottom(world.element, world.metrics(), 'smooth') + world.grow(1_000) + world.element.scrollTop = top + expect(follow.sample(world.metrics())).toBe(true) + expect(follow.settle(world.metrics())).toBe(false) + expect(follow.animating).toBe(false) + world.grow(1_200) + expect(follow.sample(world.metrics())).toBe(false) + }) + it('cancels native motion before input without treating the cancellation itself as scrolling away', () => { const world = scrollport() const follow = new ScrollFollow(true, 1) @@ -64,6 +99,7 @@ describe('ScrollFollow', () => { expect(world.scrollTo).toHaveBeenLastCalledWith({ top: 150, behavior: 'instant' }) expect(follow.animating).toBe(false) expect(follow.sample(world.metrics())).toBe(true) + expect(follow.settle(world.metrics())).toBe(true) world.element.scrollTop = 100 expect(follow.sample(world.metrics())).toBe(false) world.element.scrollTop = 400 From 2251b6189bb1378c4fb89bfe6895ea9d38c58445 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 18:52:16 +0800 Subject: [PATCH 16/35] fix(chat): preserve sticky headers with overflow clipping --- ...-chat-scroll-follow-and-footer-geometry.i18n.yaml | 4 ++-- ...6-09-22-chat-scroll-follow-and-footer-geometry.md | 12 +++++++++--- ...9-22-chat-scroll-follow-and-footer-geometry.zh.md | 12 +++++++++--- packages/client/ui-chat/README.i18n.yaml | 4 ++-- packages/client/ui-chat/README.md | 2 ++ packages/client/ui-chat/README.zh.md | 2 ++ .../ui-chat/src/client/chat/ChatView.module.css | 3 ++- 7 files changed, 28 insertions(+), 11 deletions(-) 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 014ba6b9e7..ceb40894c4 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 @@ -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/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md -2026-09-22-chat-scroll-follow-and-footer-geometry.md: 5f01d09f3727f301399afaba643783f582680966 -2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: 372ffba78345f952b11be5f0296b7f989df9157a +2026-09-22-chat-scroll-follow-and-footer-geometry.md: 56cd1681eef23162df2595a138545ade25e34212 +2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md: 9979688d52373ae7a64a3f4fc22b932b43091b34 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md index 5f01d09f37..56cd1681ee 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.md @@ -6,7 +6,7 @@ English | [中文](2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md) ## Problem -Clipping transcript overflow and positioning floating controls require different ancestors. An `overflow-y: hidden` ancestor becomes the nearest scroll container for sticky descendants even when readers scroll a different outer element. A turn rail or back-to-bottom button inside that clipping ancestor therefore follows transcript geometry instead of the visible conversation scrollport. +Transcript overflow must remain clipped without trapping floating controls or changing the scroll ancestor of sticky content. An `overflow-y: hidden` ancestor becomes the nearest scroll container even when readers scroll a different outer element. It prevents Markdown code banners and expanded compaction headers from sticking to the visible conversation scrollport; floating controls inside that ancestor also use transcript geometry instead of viewport geometry. A height-capped process group also has a separate reading position. Outer bottom-follow cannot expose newly appended content inside a group whose own scroll offset stays unchanged. Treating every non-bottom scroll event as reader input does not support native smooth following: the browser emits those same events while an animation approaches its target. @@ -16,11 +16,13 @@ The transcript, floating controls, and scroll intent retain separate ownership. | Area | Implementation | Reason | |---|---|---| -| Transcript clipping | `ChatView` retains the clipped `.root` inside an unclipped frame. | Constrain transcript overflow without changing floating controls' scroll ancestor. | +| Transcript clipping | `ChatView` uses `overflow-x: visible; overflow-y: clip` on `.root` inside an unclipped frame. | Constrain vertical overflow without introducing a scroll container between sticky content and its actual scrollport. | | Floating controls | TurnNavigator and the back-to-bottom button are siblings of the clipped transcript. | Shared Conversations use the outer scrollport for sticky positioning; standalone Chat uses its frame for absolute positioning. | | Follow intent | `useScrollFollow` retains one independent controller per scrollport. | Reuse thresholds, position sampling, and native scrolling without sharing one follow flag. | | Group lifecycle | `useProcessScroll` owns its existing body/content observer, directional fades, and one-shot opening position. | Group growth remains observable after the body reaches its cap; opening performs no immediate geometry read. | +The clipped root owns no scroll offset. Shared Conversation scrolling, standalone Chat scrolling, capped process groups, and terminal sections retain their existing scrollports. The horizontal axis stays `visible`: pairing vertical `clip` with horizontal `auto` or `hidden` computes the vertical overflow back to `hidden` and restores the unwanted scroll container. + An unclosed group opens at its bottom; a closed group opens at its top. The group’s `closed` value, not the whole Turn’s status or an all-node search, decides that initial position. A later close does not reset an already-open reader. Browser find keeps its own reveal position, and display-mode changes preserve mounted members. Native smooth growth keeps an outstanding target separate from the current position. Animation progress retains follow intent. Input interrupts native motion before the browser applies reader movement; the resulting actual displacement determines whether following stops or resumes. Further growth retains the issued target until `scrollend`. Arrival at that target, including shrink clamping, allows one request to the latest floor; an off-target stop releases following so focus and find keep their landing. Reduced motion and explicit opening positions use immediate scrolling. Outer following keeps its existing immediate behavior and sampling policy. @@ -29,7 +31,9 @@ The back-to-bottom button depends only on outer follow intent and restores only ## Alternatives considered -**Remove or change the transcript clipping rule.** That would alter the overflow constraint instead of separating it from control positioning. An unclipped sibling frame retains both requirements without a Portal or document-level coordinate synchronization. +**Remove transcript clipping.** That would abandon the overflow constraint. Vertical `clip` retains clipping without creating a scroll container; the unclipped sibling frame keeps floating controls outside the clipped area without a Portal or document-level coordinate synchronization. + +**Keep `overflow-y: hidden` and move only floating controls.** That protects the controls but leaves sticky content inside the unwanted scroll container. Changing the root to `clip` also preserves the scroll ancestor of code and compaction headers without moving those headers out of their content. **Share one follow flag, or duplicate the complete controllers.** One flag would pull a group away from a reader merely because the outer transcript follows. Two complete implementations would duplicate animation attribution and threshold rules. Sharing the small controller retains independent state without moving paging, Turn navigation, or semantic memory into it. @@ -41,6 +45,8 @@ The back-to-bottom button depends only on outer follow intent and restores only [Browser scroll cases](../../../../apps/web/tests/chat-scroll-contract.e2e.ts) exercise floating-control geometry, nested following, paging, streaming, and real wheel input through the shipped Web composition. +[Seeded-history cases](../../../../apps/web/tests/seeded-history.e2e.ts) check an expanded compaction header and its nested code banner against the actual conversation scrollport, including their stacking and copy-button access. + ## Consequences The shared controller stores intent without scheduling React renders; callers still publish visible state changes, and group edge fades update only when their booleans change. Follow operations read the affected scrollport, not its Node collection. Native scrolling still performs browser layout and paint work. These changes establish behavior and ownership, not a measured latency or memory improvement. diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md index 372ffba783..9979688d52 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-chat-scroll-follow-and-footer-geometry.zh.md @@ -6,7 +6,7 @@ Status: implemented ## 问题 -正文溢出裁剪与悬浮控件定位需要不同的祖先。即使读者实际滚动的是外层元素,`overflow-y: hidden` 祖先也会成为 sticky 子元素最近的滚动容器。轮次轨道或回到底部按钮位于该裁剪祖先内时,参照的是正文几何,而非可见会话滚动区域。 +正文溢出必须保持裁剪,同时不能限制悬浮控件或改变 sticky 内容的滚动祖先。即使读者实际滚动的是外层元素,`overflow-y: hidden` 祖先也会成为最近的滚动容器。这会阻止 Markdown 代码块头栏和展开的压缩摘要头栏吸附在可见会话滚动区域;位于该祖先内的悬浮控件也会参照正文几何,而非视口几何。 限高过程组也有独立阅读位置。若组内偏移不变,外层跟随底部无法展示组内新增内容。把每个未到底的滚动事件都当成读者输入,也无法支持原生平滑跟随:浏览器在动画接近目标期间同样会发出这些事件。 @@ -16,11 +16,13 @@ Status: implemented | 范围 | 实现 | 原因 | |---|---|---| -| 正文裁剪 | `ChatView` 在无裁剪的外框内保留被裁剪的 `.root`。 | 限制正文溢出,同时不改变悬浮控件的滚动祖先。 | +| 正文裁剪 | `ChatView` 在无裁剪的外框内,对 `.root` 使用 `overflow-x: visible; overflow-y: clip`。 | 限制纵向溢出,不在 sticky 内容与其实际滚动区域之间引入滚动容器。 | | 悬浮控件 | TurnNavigator 与回到底部按钮位于正文裁剪层的同级。 | 共享 Conversation 相对外层滚动容器做 sticky 定位;独立 Chat 相对自身外框做 absolute 定位。 | | 跟随意图 | `useScrollFollow` 为每个滚动区保留独立控制器。 | 共用阈值、位置采样及原生滚动,不共用一个跟随开关。 | | 小组生命周期 | `useProcessScroll` 负责既有的正文与内容观察器、方向渐隐和一次性展开位置。 | 正文达到限高后,内容增长仍可被观察;展开时不立即读取几何。 | +被裁剪的根节点不持有滚动偏移。共享 Conversation、独立 Chat、限高过程组和终端区域保留各自原有的滚动容器。横轴保持 `visible`:纵向 `clip` 如果与横向 `auto` 或 `hidden` 组合,纵向溢出的计算值会变回 `hidden`,重新引入不需要的滚动容器。 + 未关闭的小组展开到自己的底部,已关闭的小组展开到顶部。初始位置由组自身的 `closed` 决定,不取整个 Turn 的状态,也不遍历全部节点。组随后关闭不会重置已展开的阅读位置。浏览器查找保留自身的展开定位,模式切换保留已挂载成员。 原生平滑跟随将未完成的目标与当前位置分开记录。动画进度保留跟随意图。输入在浏览器处理读者移动前中断原生动画,再由实际位移决定是否暂停或恢复跟随。后续增长保留已发出的目标,直到 `scrollend`。到达该目标(包括内容缩短后的钳制位置)才允许再次请求最新底部;停在目标之外则释放跟随,让焦点和查找保留落点。减少动态效果与明确的展开定位使用即时滚动。外层跟随保留既有的即时行为和采样策略。 @@ -29,7 +31,9 @@ Status: implemented ## 考虑过的替代方案 -**删除或修改正文裁剪规则。** 这会改变溢出约束,而不是将其与控件定位分离。无裁剪的同级外框可以同时保留两项要求,不需要 Portal 或文档级坐标同步。 +**删除正文裁剪。** 这会放弃溢出约束。纵向 `clip` 保留裁剪而不创建滚动容器;无裁剪的同级外框让悬浮控件位于裁剪区域之外,不需要 Portal 或文档级坐标同步。 + +**保留 `overflow-y: hidden`,仅移动悬浮控件。** 这可以保护控件,但 sticky 内容仍位于不需要的滚动容器内。将根节点改为 `clip` 也能保留代码和压缩摘要头栏的滚动祖先,无需把这些头栏移出其正文。 **共用一个跟随开关,或复制完整控制器。** 共用开关会仅因外层跟随就把小组拉离读者位置。复制两套完整实现则会重复动画归因和阈值规则。共用小控制器可以保留独立状态,同时不把分页、轮次导航及语义记忆搬入其中。 @@ -41,6 +45,8 @@ Status: implemented [浏览器滚动用例](../../../../apps/web/tests/chat-scroll-contract.e2e.ts)通过正式 Web 装配验证悬浮控件几何、嵌套跟随、分页、流式内容与真实滚轮输入。 +[历史回放用例](../../../../apps/web/tests/seeded-history.e2e.ts)相对实际会话滚动区域检查展开的压缩摘要头栏及其内部代码头栏,包括层叠关系和复制按钮的可访问性。 + ## 影响 共享控制器只保存意图,不自行调度 React 渲染;调用方仍发布可见状态变化,小组边缘渐隐仅在布尔值变化时更新。跟随操作读取受影响的滚动容器,而非节点集合。原生滚动仍有浏览器布局和绘制成本。这些改动确立行为与职责,不代表已测得延迟或内存收益。 diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 16d9e60904..116c6b5ac5 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: 7eb391afc3e4ff7a5e44f14c2333c5f8d83d5ac8 -README.zh.md: b325a8ebc8d73485804fb31c790fdd9cb9de56fc +README.md: 09624a29e6769a48ab93a5a1e7080c196489ded9 +README.zh.md: 56c3e22bfed19057c0b6cf7e56cda6a666181e98 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 7eb391afc3..09624a29e6 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -102,6 +102,8 @@ Chat restores semantic anchors across history prepend and renderer remounts, wit The turn rail and back-to-bottom button sit outside the clipped transcript. They use the shared conversation scrollport for sticky positioning, or the Chat frame for absolute positioning when Chat owns its scrollport. +The transcript root uses `overflow-x: visible; overflow-y: clip`: vertical overflow is clipped without creating a scroll container. Sticky Markdown code banners and expanded compaction headers therefore retain the actual conversation scrollport as their reference when no nearer scrolling ancestor exists. Capped process groups and terminal sections keep their own scrollports. + Outer transcript following and each open capped group's following are independent. Native animation progress retains follow intent; a reader gesture interrupts the animation, and actual movement determines whether following remains enabled. Scroll chaining can move the outer transcript, which then applies its own distance threshold. The back-to-bottom button restores only outer following. | Outer follows | Open group follows | Back-to-bottom button | New content | diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index b325a8ebc8..56c3e22bfe 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -102,6 +102,8 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且 轮次轨道与回到底部按钮位于正文裁剪层外。它们相对共享会话滚动容器做 sticky 定位;Chat 自己持有滚动容器时,则相对 Chat 外框做 absolute 定位。 +正文根节点使用 `overflow-x: visible; overflow-y: clip`:裁剪纵向溢出,但不创建滚动容器。因此,在没有更近的滚动祖先时,Markdown 代码块的 sticky 头栏和展开的压缩摘要头栏仍以实际会话滚动容器为参照。限高过程组和终端区域保留各自的滚动容器。 + 外层文本记录与每个已展开限高组的跟随状态彼此独立。原生动画的中间滚动保留跟随意图;读者手势中断动画,是否继续跟随由实际位移决定。滚动传递可以带动外层,外层再按自身离底距离判断。回到底部按钮只恢复外层跟随。 | 外层跟随 | 已展开小组跟随 | 回到底部按钮 | 新增内容 | 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 91cdfb7b75..a6b3955f8c 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.module.css +++ b/packages/client/ui-chat/src/client/chat/ChatView.module.css @@ -15,7 +15,8 @@ min-height: 0; flex: 1 1 auto; - overflow-y: hidden; + overflow-x: visible; + overflow-y: clip; } .scroll { From 50ba2c8bb277aed2c058c91a3326cf75f1d7e347 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 18:53:16 +0800 Subject: [PATCH 17/35] fix(session): align history pagination with turn boundaries --- apps/web/tests/seeded-history.e2e.ts | 32 ++++++++ docs/event-producer-consumer.i18n.yaml | 4 +- docs/event-producer-consumer.md | 10 +-- docs/event-producer-consumer.zh.md | 10 +-- .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 6 +- packages/api/session-controller/README.zh.md | 6 +- .../src/client/contract/session.ts | 6 +- .../src/client/sessions/session.ts | 22 ++++-- .../src/client/transport.ts | 7 +- .../api/session-controller/src/history.ts | 33 +++++++-- packages/api/session-controller/src/types.ts | 10 ++- .../tests/manager.client.spec.ts | 3 +- .../session-history-journal.host.spec.ts | 74 ++++++++++++++++++- .../tests/session.client.spec.ts | 16 ++-- .../tests/transport.client.spec.ts | 16 ++-- .../tests/transport.host.spec.ts | 16 ++++ .../extensions/tool-cordis/src/api-catalog.ts | 4 +- 18 files changed, 220 insertions(+), 59 deletions(-) diff --git a/apps/web/tests/seeded-history.e2e.ts b/apps/web/tests/seeded-history.e2e.ts index 1534c7c76d..8419aae826 100644 --- a/apps/web/tests/seeded-history.e2e.ts +++ b/apps/web/tests/seeded-history.e2e.ts @@ -227,6 +227,7 @@ describe('web e2e: seeded history renders through cold resume', () => { let page: Page let tripwire: ReturnType let seededThroughSeq = -1 + let openingWindow: unknown beforeAll(async () => { // The POSIX terminal fixture stays off Windows; the pinned desktop applies @@ -266,6 +267,27 @@ describe('web e2e: seeded history renders through cold resume', () => { browser = await chromium.launch() page = await newEnglishPage(browser) tripwire = watchConsole(page) + if (MODE !== 'record') { + // A one-message tail makes this short recording exercise the real Load earlier path. + let pagedOpening = false + await page.routeWebSocket('**/api/remote.mux', (socket) => { + const server = socket.connectToServer() + socket.onMessage((message) => { + const frame = JSON.parse(String(message)) as { + type: string + endpoint?: string + payload: { args: { request: { maxMessages: number; turnWindow?: { minMessages: number; minTurns: number } } } } + } + if (!pagedOpening && frame.type === 'open' && frame.endpoint === 'session/follow') { + pagedOpening = true + openingWindow = { ...frame.payload.args.request } + frame.payload.args.request.maxMessages = 1 + delete frame.payload.args.request.turnWindow + server.send(JSON.stringify(frame)) + } else server.send(message) + }) + }) + } await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) await page.waitForSelector('[class*="frame"]', { timeout: 30_000 }) }, 120_000) @@ -330,6 +352,16 @@ describe('web e2e: seeded history renders through cold resume', () => { await sessionRow.click() // Settled barrier for history: the recorded final assistant text renders. await expect.poll(() => page.getByText('DONE', { exact: true }).count(), { timeout: 15_000 }).toBe(1) + expect(openingWindow).toMatchObject({ maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }) + expect(await page.getByText(PROMPT, { exact: true }).count()).toBe(0) + const [paging] = await Promise.all([ + page.waitForRequest('**/api/session/page'), + page.getByRole('button', { name: 'Load earlier', exact: true }).click(), + ]) + expect(paging.postDataJSON()).toMatchObject({ + payload: { args: { request: { maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } } } }, + }) + await expect.poll(() => page.getByText(PROMPT, { exact: true }).count(), { timeout: 10_000 }).toBe(1) await expect.poll(() => page.getByText('compact', { exact: true }).count(), { timeout: 10_000 }).toBe(1) await expect.poll(() => page.getByText(/^Compacted \d+ history items \(~\d+ tokens\)$/).count(), { timeout: 10_000, diff --git a/docs/event-producer-consumer.i18n.yaml b/docs/event-producer-consumer.i18n.yaml index 5f3fa3d374..a6e1582653 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: 13ac82b2c9fb0b2aeeaa2bec9c736db5b5b63992 -event-producer-consumer.zh.md: fce8463041181139e45fb5f3a9ab14c87117135f +event-producer-consumer.md: 1d844013f1230d6dbe535c3942279683f03738ce +event-producer-consumer.zh.md: 73438c3f19ef6850674a27bf8f490fe4cf52b420 diff --git a/docs/event-producer-consumer.md b/docs/event-producer-consumer.md index 13ac82b2c9..1d844013f1 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: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:603`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:583`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:610`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:589`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:596`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:609`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:589`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:616`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:595`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:602`](../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) | diff --git a/docs/event-producer-consumer.zh.md b/docs/event-producer-consumer.zh.md index fce8463041..73438c3f19 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: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:603`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:583`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:610`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:589`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | -| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:596`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/activity` | `emit` | [`packages/api/session-controller/src/types.ts:609`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/added` | `emit` | [`packages/api/session-controller/src/types.ts:589`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/error` | `emit` | [`packages/api/session-controller/src/types.ts:616`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/removed` | `emit` | [`packages/api/session-controller/src/types.ts:595`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | +| `api-session/status` | `emit` | [`packages/api/session-controller/src/types.ts:602`](../packages/api/session-controller/src/types.ts) | `session-controller` (`emit`) | `remotes` | | `app-boot/config-reload` | `emit` | [`packages/boot/app-boot/src/index.ts:43`](../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) | diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index a6a1d20012..7d9de200a5 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: e12ad7623eefc73c94e99cc3078e0ae78d6a969a -README.zh.md: 5f4ceec9a8e8303cad6651dbbe7af27fc07bccec +README.md: 438f57388d454b621835dccc3f0a87ea72249b3c +README.zh.md: aab5c0854821ae4bce3caf085939af0db7af5bf7 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index e12ad7623e..438f57388d 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -43,7 +43,7 @@ Projection reads retain loading and failure state independently of their values. Accepted prompts and observed running keep their Client display conversion across list refresh, reconnect, and Session-object replacement. The Manager retains these observations by Session id; they do not establish durable history. Drafts, projection stores, and sidebar display rules retain their existing behavior. The [blank rollback decision](../../../.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.md) defines retention and late-response handling. -The Client adapter exposes `SessionEventStream`, a Gateway `RemoteJournalStream` bound to one ordinary or direct-subagent address. It opens follow before the initial page, publishes only contiguous `replace`, `prepend`, `append`, and `settle-assistant` changes, and repairs reconnect or sequence gaps through a tail page. Backwards paging has two verbs: `loadOlder()` pulls one 50-message page, and `loadThrough(seq)` — the turn-jump loader — loops 200-message pages until the window covers the target seq, lowering a shared target on repeated calls, stopping on a page that makes no progress, and reporting busy through the same `loadingOlder` snapshot bit. The Web adapter explicitly opts into cursorless Assistant frames: each opening carries the active attempt's `startedAfterSeq`, `nextIndex`, and compact stream, and every stream member becomes a Client-only `assistant/live-chunk` entry ordered between durable cursors. The Host captures a follower-local arrival ordinal with that baseline and suppresses buffered frames at or before the cut; a replacement Agent may restart frame revision at one. A durable `assistant/message` or `assistant/attempt` arriving after an active opening stays staged only when its seq follows `startedAfterSeq` and its Turn and Step match; the matching end type, seq, and index publishes one named settlement delta that retires the attempt's transient rows and adds the durable entry while earlier same-step retries remain visible. Revision, dense-index, or settlement gaps for a known attempt reopen follow, while a controller that missed the start ignores unknown-attempt frames and publishes their durable settlement normally. An abandoned end publishes a settlement delta without a durable entry so its transient rows retire immediately. A durable gap-repair page has no Assistant baseline, so its held notification reopens follow once for a paired page and baseline. Every history record covers exactly its event seq. A business, persistence, or unresolved continuity failure terminates the stream, while only physical carrier loss selects automatic resumption. `SessionControlStream` is a Gateway `RemoteSnapshotStream`; every generation opens with a complete process-local baseline, so reconnect replaces projection state instead of treating transient values as durable events. At each ready Host generation, a synchronous Client subscription clears retained projection values and watermarks before refreshing queries and restarting the control stream, including Sessions absent from the control baseline. The first control stream waits for generation readiness, so its opening values cannot precede invalidation. Outstanding list responses from the previous generation cannot republish those values. Within a generation, a delayed control baseline cannot overwrite or clear newer sequenced values, whether they arrived through a live Session's list block, a history page, or a frame; a cached list block, viewed from the projection cache for a cold Session, yields to the connected Session's baseline whatever watermark it carries. The durable `inbox` projection carries both pending lists through the same cold-read and reconnect path as other projections. Client Agent contexts provide the identity used by the independent [`fileUpload`](../../client/file-upload/README.md) service; Session objects expose lifecycle, prompt, queue, and history operations rather than file transfer. +The Client adapter exposes `SessionEventStream`, a Gateway `RemoteJournalStream` bound to one ordinary or direct-subagent address. It opens follow before the initial page, publishes only contiguous `replace`, `prepend`, `append`, and `settle-assistant` changes, and repairs reconnect or sequence gaps through a tail page. Backwards paging has two verbs: `loadOlder()` pulls one Turn-aligned page, and `loadThrough(seq)` — the turn-jump loader — loops Turn-aligned pages until the window covers the target seq, lowering a shared target on repeated calls, stopping on a page that makes no progress, and reporting busy through the same `loadingOlder` snapshot bit. The Web adapter explicitly opts into cursorless Assistant frames: each opening carries the active attempt's `startedAfterSeq`, `nextIndex`, and compact stream, and every stream member becomes a Client-only `assistant/live-chunk` entry ordered between durable cursors. The Host captures a follower-local arrival ordinal with that baseline and suppresses buffered frames at or before the cut; a replacement Agent may restart frame revision at one. A durable `assistant/message` or `assistant/attempt` arriving after an active opening stays staged only when its seq follows `startedAfterSeq` and its Turn and Step match; the matching end type, seq, and index publishes one named settlement delta that retires the attempt's transient rows and adds the durable entry while earlier same-step retries remain visible. Revision, dense-index, or settlement gaps for a known attempt reopen follow, while a controller that missed the start ignores unknown-attempt frames and publishes their durable settlement normally. An abandoned end publishes a settlement delta without a durable entry so its transient rows retire immediately. A durable gap-repair page has no Assistant baseline, so its held notification reopens follow once for a paired page and baseline. Every history record covers exactly its event seq. A business, persistence, or unresolved continuity failure terminates the stream, while only physical carrier loss selects automatic resumption. `SessionControlStream` is a Gateway `RemoteSnapshotStream`; every generation opens with a complete process-local baseline, so reconnect replaces projection state instead of treating transient values as durable events. At each ready Host generation, a synchronous Client subscription clears retained projection values and watermarks before refreshing queries and restarting the control stream, including Sessions absent from the control baseline. The first control stream waits for generation readiness, so its opening values cannot precede invalidation. Outstanding list responses from the previous generation cannot republish those values. Within a generation, a delayed control baseline cannot overwrite or clear newer sequenced values, whether they arrived through a live Session's list block, a history page, or a frame; a cached list block, viewed from the projection cache for a cold Session, yields to the connected Session's baseline whatever watermark it carries. The durable `inbox` projection carries both pending lists through the same cold-read and reconnect path as other projections. Client Agent contexts provide the identity used by the independent [`fileUpload`](../../client/file-upload/README.md) service; Session objects expose lifecycle, prompt, queue, and history operations rather than file transfer. The Session object also carries local submission echoes: `session.beginSubmission` inserts one into `SessionSnapshot.pendingSubmissions` synchronously, before the caller serializes and prompts, so a conversation UI can show the message on the submit click's own frame. The echo stores ordered image previews and durable file references. Session derives its `transcript`, `queued`, or `steering` placement from the current running state and requested delivery mode, then retains that placement while serialization is in flight. The prompt's `requestId` is the correlation identity: the Host echoes it as the durable user source's `rpcId`, including pending messages in the `inbox` projection. An echo retires one animation frame after its durable event or queue occurrence is observed, immediately when its identified prompt fails or is abandoned, and as failed on disposal. Each retirement fires `onRetire` exactly once; an observed retirement includes the ordered durable attachment references so the composer can release successful cards while preserving failed drafts. Echoes are Client memory only; reload and reconnect rebuild the conversation from durable events alone. @@ -56,7 +56,9 @@ Fork copies the exact inclusive event prefix selected by `atSeq`, including a cu A resume blocked by an existing write handle returns `session/writer-held` with the Session id; other resume failures retain `gateway/internal`. -`loadThrough(seq)` retains older pages privately until its shared target is covered or loading ends, then publishes the successful pages as one ordered prepend. Live events remain visible while history loads. A later page failure retains the successful prefix; replacing the history window discards buffered pages from the replaced window. Ordinary `loadOlder()` still publishes its single page directly. +`loadThrough(seq)` retains older pages privately until its shared target is covered or loading ends, then publishes the successful pages as one ordered prepend. Live events remain visible while history loads. A later page failure retains the successful prefix; replacing the history window discards buffered pages from the replaced window. Ordinary `loadOlder()` publishes one Host-selected page directly. + +The Client's initial `follow`, reconnect openings, and `loadOlder()` request at least 50 append-origin `user/message` and `assistant/message` events and cross at least two `turn/start` events, including the partial Turn at the loaded window's beginning. The Host stops at the first Turn start satisfying both minima, or at 500 counted messages or history exhaustion, whichever comes first. Steering does not add a Turn boundary. Intervening events accompany the page without counting toward the message budget. The optional `turnWindow` on page and follow requests supplies these minima under `maxMessages`. `loadThrough()` uses the same rules with a 200-message minimum per page; the 500-message cap does not limit the whole jump. Requests without `turnWindow` retain message-aligned paging. Queue edits replace pending content with non-empty text only. diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index 5f4ceec9a8..aab5c08548 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -43,7 +43,7 @@ Client 列表刷新保留未变化的行对象,并在顺序和值均相同时 已受理的提示词与已观察到的运行,会使客户端展示转换跨列表刷新、重连及 Session 对象替换保留。Manager 按 Session id 保留这些观察;它们不证明持久历史已经产生。草稿、投影存储和侧边栏展示规则保留原有行为。[blank 回退修复决策](../../../.agents/notes/implemented/bug-fix/2026-09-15-client-session-blank-reconciliation.zh.md) 定义保留期限及迟到响应处理。 -Client 适配器提供 `SessionEventStream`,即绑定到一个普通 Session 或 direct subagent address 的 Gateway `RemoteJournalStream`。它在读取首个 page 前打开 follow,只发布连续的 `replace`、`prepend`、`append` 与 `settle-assistant` 变更,并通过 tail page 修复重连或 seq 缺口。向后分页有两个动词:`loadOlder()` 拉一页 50 条消息,而 `loadThrough(seq)`——轮次跳转加载器——按每页 200 条消息循环拉取直到窗口覆盖目标 seq,重复调用会下调共享目标,遇到无进展的页即停止,忙碌状态复用同一个 `loadingOlder` 快照位。Web 适配器显式选择接收无 cursor 的 Assistant frame:每个 opening 携带活跃 attempt 的 `startedAfterSeq`、`nextIndex` 与紧凑 stream,每个 stream member 都成为排在持久 cursor 之间的 Client-only `assistant/live-chunk` 条目。Host 会随该 baseline 捕获 follower 本地到达序号,并抑制该 cut 及之前的 buffered frame;replacement Agent 可以从 revision 一重新开始。活跃 opening 之后到达的持久 `assistant/message` 或 `assistant/attempt` 只有在其 seq 晚于 `startedAfterSeq` 且轮次与步骤匹配时才会保持暂存;匹配的 end type、seq 与 index 会发布一个具名 settlement delta,删除该 attempt 的瞬态 row、加入持久条目,并保留同一步骤中更早的 retry。已知 attempt 的 revision、密集 index 或 settlement 缺口会重新打开 follow;若 controller 错过 start,则忽略 unknown-attempt frame,并正常发布其持久 settlement。Abandoned end 会发布不含持久条目的 settlement delta,使瞬态 row 立即退出。持久缺口修复 page 不携带 Assistant baseline,因此 held notification 会重新打开 follow 一次,以取得配对的 page 与 baseline。每条历史 record 只覆盖自身的事件 seq。业务、persistence 或无法恢复的连续性错误会终止 stream,只有物理载体断开才触发自动恢复。`SessionControlStream` 是 Gateway `RemoteSnapshotStream`;每代都以完整的进程本地 baseline 开始,因此重连会替换 projection 状态,而不会把瞬态值当作 durable event。每次 Host generation 就绪时,同步的 Client 订阅会先清除保留的投影值及其水位,再刷新查询并重新打开 control stream,其中也包括 control baseline 中没有列出的 Session。首次 control stream 会等待 generation 就绪,确保其 opening 值不会先于旧状态清理到达。上一代尚未完成的 list 响应无法重新发布这些值。同一 generation 内,延迟到达的 control baseline 不能覆盖或清除较新的 sequenced 值,无论它们来自活 Session 的 list block、history page 还是 frame;冷 Session 从 projection cache 看出来的 cached list block 则不论水位都让位于建连 Session 的 baseline。持久 `inbox` 投影通过与其他投影相同的冷读取和重连路径传输两份待处理列表。Client Agent 上下文提供独立 [`fileUpload`](../../client/file-upload/README.zh.md) 服务使用的身份;Session 对象提供生命周期、prompt、queue 与历史操作,不提供文件传输。 +Client 适配器提供 `SessionEventStream`,即绑定到一个普通 Session 或 direct subagent address 的 Gateway `RemoteJournalStream`。它在读取首个 page 前打开 follow,只发布连续的 `replace`、`prepend`、`append` 与 `settle-assistant` 变更,并通过 tail page 修复重连或 seq 缺口。向后分页有两个动词:`loadOlder()` 拉一页按轮次开头对齐的历史,而 `loadThrough(seq)`——轮次跳转加载器——按轮次开头对齐页面循环拉取直到窗口覆盖目标 seq,重复调用会下调共享目标,遇到无进展的页即停止,忙碌状态复用同一个 `loadingOlder` 快照位。Web 适配器显式选择接收无 cursor 的 Assistant frame:每个 opening 携带活跃 attempt 的 `startedAfterSeq`、`nextIndex` 与紧凑 stream,每个 stream member 都成为排在持久 cursor 之间的 Client-only `assistant/live-chunk` 条目。Host 会随该 baseline 捕获 follower 本地到达序号,并抑制该 cut 及之前的 buffered frame;replacement Agent 可以从 revision 一重新开始。活跃 opening 之后到达的持久 `assistant/message` 或 `assistant/attempt` 只有在其 seq 晚于 `startedAfterSeq` 且轮次与步骤匹配时才会保持暂存;匹配的 end type、seq 与 index 会发布一个具名 settlement delta,删除该 attempt 的瞬态 row、加入持久条目,并保留同一步骤中更早的 retry。已知 attempt 的 revision、密集 index 或 settlement 缺口会重新打开 follow;若 controller 错过 start,则忽略 unknown-attempt frame,并正常发布其持久 settlement。Abandoned end 会发布不含持久条目的 settlement delta,使瞬态 row 立即退出。持久缺口修复 page 不携带 Assistant baseline,因此 held notification 会重新打开 follow 一次,以取得配对的 page 与 baseline。每条历史 record 只覆盖自身的事件 seq。业务、persistence 或无法恢复的连续性错误会终止 stream,只有物理载体断开才触发自动恢复。`SessionControlStream` 是 Gateway `RemoteSnapshotStream`;每代都以完整的进程本地 baseline 开始,因此重连会替换 projection 状态,而不会把瞬态值当作 durable event。每次 Host generation 就绪时,同步的 Client 订阅会先清除保留的投影值及其水位,再刷新查询并重新打开 control stream,其中也包括 control baseline 中没有列出的 Session。首次 control stream 会等待 generation 就绪,确保其 opening 值不会先于旧状态清理到达。上一代尚未完成的 list 响应无法重新发布这些值。同一 generation 内,延迟到达的 control baseline 不能覆盖或清除较新的 sequenced 值,无论它们来自活 Session 的 list block、history page 还是 frame;冷 Session 从 projection cache 看出来的 cached list block 则不论水位都让位于建连 Session 的 baseline。持久 `inbox` 投影通过与其他投影相同的冷读取和重连路径传输两份待处理列表。Client Agent 上下文提供独立 [`fileUpload`](../../client/file-upload/README.zh.md) 服务使用的身份;Session 对象提供生命周期、prompt、queue 与历史操作,不提供文件传输。 Session 对象还承载本地提交回显:`session.beginSubmission` 在调用方序列化与提示词之前,同步把一条回显写入 `SessionSnapshot.pendingSubmissions`,会话 UI 因此能在点击提交的当帧显示消息。回显按顺序存放图片预览与持久文件引用。Session 根据当前运行状态与请求的投递模式推导其 `transcript`、`queued` 或 `steering` 位置,并在序列化期间保留该位置。提示词的 `requestId` 是关联标识:Host 把它回显为 durable user source 的 `rpcId`,`inbox` 投影中的待处理消息也保留同一 source。回显在观察到其 durable event 或 queue occurrence 后延迟一个动画帧退休,带标识的提示词失败或被放弃时立即退休,销毁时按 failed 退休。每次退休恰好触发一次 `onRetire`;observed 退休还会携带有序的持久附件引用,让 composer 释放成功卡片并保留失败草稿。回显只存在于 Client 内存;刷新与重连只从持久事件重建会话。 @@ -56,7 +56,9 @@ Fork 复制 `atSeq` 所选的精确事件前缀,包含切点事件,允许在 恢复会话时若已有写句柄占用,返回 `session/writer-held`,并携带会话 id;其他恢复失败仍返回 `gateway/internal`。 -`loadThrough(seq)` 在共享目标被覆盖或加载结束前私下保留较早页面,随后把成功取得的页面按顺序作为一次前插发布。历史加载期间实时事件仍然可见。后续页面失败时保留已成功取得的部分;历史窗口被替换时丢弃被替换窗口的暂存页面。普通 `loadOlder()` 仍直接发布其单页结果。 +`loadThrough(seq)` 在共享目标被覆盖或加载结束前私下保留较早页面,随后把成功取得的页面按顺序作为一次前插发布。历史加载期间实时事件仍然可见。后续页面失败时保留已成功取得的部分;历史窗口被替换时丢弃被替换窗口的暂存页面。普通 `loadOlder()` 直接发布 Host 选取的一页结果。 + +Client 的首次 `follow`、重连首屏与 `loadOlder()` 至少请求 50 条以 append 方式追加的 `user/message` 和 `assistant/message` 事件,并向前跨过至少两个 `turn/start`,其中包含已加载窗口开头尚未补齐的轮次。Host 在首次同时满足两个下限的轮次开头停止;若先达到 500 条计数消息或历史已耗尽,则立即返回。Steering 不增加轮次分界。区间内的其他事件随页返回,但不计入消息预算。分页和 follow 请求可选的 `turnWindow` 在 `maxMessages` 上限内指定这两个下限。`loadThrough()` 复用相同规则,仅将每页消息数下限设为 200;500 条上限不限制整次跳转。不带 `turnWindow` 的请求保留按消息对齐的分页方式。 队列编辑仅允许用非空文本替换待处理内容。 diff --git a/packages/api/session-controller/src/client/contract/session.ts b/packages/api/session-controller/src/client/contract/session.ts index 246d2c8a92..6dc27688b3 100644 --- a/packages/api/session-controller/src/client/contract/session.ts +++ b/packages/api/session-controller/src/client/contract/session.ts @@ -118,7 +118,9 @@ export interface ISession { */ rename(title: string): Promise> /** - * Extend the history window backwards (older messages pagination). + * Extend history by at least 50 messages and two Turn starts, including a + * partial Turn at the window's beginning. Stop at 500 messages or history + * exhaustion even when those minima cannot be met. Publish one prepend. * @returns completion; failures land in snapshot.openState/loadingOlder. */ loadOlder(): Promise @@ -127,6 +129,8 @@ export interface ISession { * turn-jump loader. Repeated calls while a jump is paging lower its shared * target and return the in-flight completion; `snapshot.loadingOlder` is * the busy signal for the whole jump. + * Each page uses the same Turn alignment as loadOlder, with a 200-message + * minimum. The 500-message limit applies per page, not to the whole jump. * Older pages publish together at completion, including successful pages * before a later failure; live events remain independently visible. * @param seq - durable event seq the window must reach (a turn's `turn/start` seq). diff --git a/packages/api/session-controller/src/client/sessions/session.ts b/packages/api/session-controller/src/client/sessions/session.ts index c1d568e59c..63e0b63900 100644 --- a/packages/api/session-controller/src/client/sessions/session.ts +++ b/packages/api/session-controller/src/client/sessions/session.ts @@ -48,12 +48,19 @@ function projectionsBaseline(value: SessionProjectionBaseline): ProjectionsBasel } } -/** Messages requested per history page. */ +/** Minimum message count for ordinary history windows. */ export const PAGE_MESSAGES = 50 -/** Messages requested per page while a turn jump loops backwards (fewer, larger round trips). */ +const HISTORY_PAGE_OPTIONS = { maxMessages: 500, turnWindow: { minMessages: PAGE_MESSAGES, minTurns: 2 } } + +/** Minimum messages per page while a turn jump loops backwards. */ export const JUMP_PAGE_MESSAGES = 200 +const JUMP_PAGE_OPTIONS = { + ...HISTORY_PAGE_OPTIONS, + turnWindow: { ...HISTORY_PAGE_OPTIONS.turnWindow, minMessages: JUMP_PAGE_MESSAGES }, +} + interface PendingHistory { beforeSeq: SessionLogOffset hasMore: boolean @@ -392,7 +399,7 @@ export class Session implements SessionFace { return promise } - /** Page up: pull one earlier page with the window's first seq as beforeSeq and prepend. */ + /** Prepend one Turn-aligned page: at least 50 messages and two Turn starts, capped at 500 messages. */ async loadOlder(): Promise { if (this.openState !== 'open' || !this.hasMore || this.loadingOlder) return const events = this.events @@ -400,7 +407,10 @@ export class Session implements SessionFace { this.loadingOlder = true this.notifier.markDirty() try { - await events.prepend({ beforeSeq: this.baseSeq, maxMessages: PAGE_MESSAGES }) + await events.prepend({ + beforeSeq: this.baseSeq, + ...HISTORY_PAGE_OPTIONS, + }) } catch (error) { if (!isRemoteFailure(error)) { console.error('[session-controller] loadOlder failed:', error) @@ -444,7 +454,7 @@ export class Session implements SessionFace { while (pending.hasMore && this.jumpTargetSeq !== null && pending.beforeSeq > this.jumpTargetSeq) { if (generation !== this.openGeneration) return const before = pending.beforeSeq - await events.prepend({ beforeSeq: before, maxMessages: JUMP_PAGE_MESSAGES }) + await events.prepend({ beforeSeq: before, ...JUMP_PAGE_OPTIONS }) // No-progress guard: an empty or dropped page that still claims more // history must end the loop, not spin it. if (pending.beforeSeq >= before) return @@ -615,7 +625,7 @@ export class Session implements SessionFace { }) this.events = events try { - await events.open({ maxMessages: PAGE_MESSAGES }) + await events.open(HISTORY_PAGE_OPTIONS) if (generation !== this.openGeneration || this.events !== events) return this.openState = 'open' } catch (error) { diff --git a/packages/api/session-controller/src/client/transport.ts b/packages/api/session-controller/src/client/transport.ts index 7df6362fcf..fc2a11a0bb 100644 --- a/packages/api/session-controller/src/client/transport.ts +++ b/packages/api/session-controller/src/client/transport.ts @@ -179,7 +179,7 @@ export class SessionEventStream extends RemoteJournalStream< for await (const frame of this.remote.session.follow({ address: this.address, assistantStream: true, - ...(request.maxMessages === undefined ? {} : { maxMessages: request.maxMessages }), + ...this.repairRequest(request), }, signal)) { if (frame.type === 'snapshot') { for (const record of frame.records) assertSessionWireEvent(record.event) @@ -238,6 +238,9 @@ export class SessionEventStream extends RemoteJournalStream< protected override repairRequest( request: ClientSessionPageRequest, ): ClientSessionPageRequest { - return request.maxMessages === undefined ? {} : { maxMessages: request.maxMessages } + return { + ...(request.maxMessages === undefined ? {} : { maxMessages: request.maxMessages }), + ...(request.turnWindow === undefined ? {} : { turnWindow: request.turnWindow }), + } } } diff --git a/packages/api/session-controller/src/history.ts b/packages/api/session-controller/src/history.ts index 069ee3bf32..19fe5dc5bc 100644 --- a/packages/api/session-controller/src/history.ts +++ b/packages/api/session-controller/src/history.ts @@ -102,6 +102,7 @@ export class SessionHistoryController { beforeSeq, request.maxMessages ?? DEFAULT_MAX_MESSAGES, throughSeq, + request.turnWindow, ) const records = pageRecords(page.events) return { @@ -117,7 +118,7 @@ export class SessionHistoryController { * @returns a complete opening snapshot followed by gap-free durable events and opted-in assistant frames. */ async *follow(request: SessionFollowRequest, signal: AbortSignal): AsyncIterable { - validateFollowRequest(request) + validateHistoryWindow(request) const { address } = request const target = addressId(address) const buffered = new Deque< @@ -180,7 +181,7 @@ export class SessionHistoryController { signal.throwIfAborted() const cursor = source.cursor snapshotCursor = cursor - const page = paginate(events, undefined, request.maxMessages ?? DEFAULT_MAX_MESSAGES) + const page = paginate(events, undefined, request.maxMessages ?? DEFAULT_MAX_MESSAGES, cursor, request.turnWindow) const assistantStream = request.assistantStream === true ? this.assistantStreams.get(target)?.snapshot() ?? { revision: 0 } : undefined @@ -313,16 +314,23 @@ function validatePageRequest(request: SessionPageRequest): void { || Object.is(request.beforeSeq, -0))) { throw new RemoteError('gateway/bad-request', 'beforeSeq must be a non-negative safe integer', {}) } + validateHistoryWindow(request) +} + +function validateHistoryWindow(request: Pick): void { if (request.maxMessages !== undefined && (!Number.isSafeInteger(request.maxMessages) || request.maxMessages <= 0)) { throw new RemoteError('gateway/bad-request', 'maxMessages must be a positive safe integer', {}) } -} - -function validateFollowRequest(request: SessionFollowRequest): void { - if (request.maxMessages !== undefined - && (!Number.isSafeInteger(request.maxMessages) || request.maxMessages <= 0)) { - throw new RemoteError('gateway/bad-request', 'maxMessages must be a positive safe integer', {}) + const window = request.turnWindow + if (window !== undefined) { + if (!Number.isSafeInteger(window.minMessages) || window.minMessages <= 0 + || window.minMessages > (request.maxMessages ?? DEFAULT_MAX_MESSAGES)) { + throw new RemoteError('gateway/bad-request', 'turnWindow.minMessages must be a positive safe integer no greater than maxMessages', {}) + } + if (!Number.isSafeInteger(window.minTurns) || window.minTurns <= 0) { + throw new RemoteError('gateway/bad-request', 'turnWindow.minTurns must be a positive safe integer', {}) + } } } @@ -386,12 +394,21 @@ function paginate( beforeSeq: SessionLogOffsetType | undefined, maxMessages: number, throughSeq: SessionSeqCursor = events.at(-1)?.seq ?? -1, + turnWindow?: SessionPageRequest['turnWindow'], ): { readonly events: SessionEvent[]; readonly hasMore: boolean } { const end = SessionLogOffset(Math.min(throughSeq + 1, beforeSeq ?? throughSeq + 1)) let count = 0 + let turns = 0 let cut = SessionLogOffset(0) for (let index = end - 1; index >= 0; index--) { const event = events[index] as SessionEvent + if (turnWindow !== undefined && event.type === 'turn/start') { + turns++ + if (count >= turnWindow.minMessages && turns >= turnWindow.minTurns) { + cut = SessionLogOffset(index) + break + } + } if (!MESSAGE_TYPES.has(event.type) || !isAppendSurfaceEvent(event)) continue count++ const sources = event.sourceEventSeqs diff --git a/packages/api/session-controller/src/types.ts b/packages/api/session-controller/src/types.ts index 9e3da329ee..84378cc34d 100644 --- a/packages/api/session-controller/src/types.ts +++ b/packages/api/session-controller/src/types.ts @@ -472,12 +472,18 @@ export interface SessionPageRequest { readonly throughSeq: number readonly beforeSeq?: number readonly maxMessages?: number + /** Stop at a Turn start after both minima, unless maxMessages or history exhaustion wins. */ + readonly turnWindow?: { + /** Minimum append-origin user/assistant messages; must not exceed maxMessages. */ + readonly minMessages: number + /** Minimum Turn starts crossed, including the partial Turn at beforeSeq. */ + readonly minTurns: number + } } /** One live event request for a durable Session address. */ -export interface SessionFollowRequest { +export interface SessionFollowRequest extends Pick { readonly address: SessionAddress - readonly maxMessages?: number /** Include process-local assistant presentation frames for the Web client. */ readonly assistantStream?: true } diff --git a/packages/api/session-controller/tests/manager.client.spec.ts b/packages/api/session-controller/tests/manager.client.spec.ts index 4d91e0b77f..4cab61367e 100644 --- a/packages/api/session-controller/tests/manager.client.spec.ts +++ b/packages/api/session-controller/tests/manager.client.spec.ts @@ -777,7 +777,8 @@ describe('subagent catalogs', () => { mode: 'continuable', }, assistantStream: true, - maxMessages: 50, + maxMessages: 500, + turnWindow: { minMessages: 50, minTurns: 2 }, }, ]) expect(mock.log.requests('session/page')).toEqual([]) diff --git a/packages/api/session-controller/tests/session-history-journal.host.spec.ts b/packages/api/session-controller/tests/session-history-journal.host.spec.ts index d836aa9734..86ed42a678 100644 --- a/packages/api/session-controller/tests/session-history-journal.host.spec.ts +++ b/packages/api/session-controller/tests/session-history-journal.host.spec.ts @@ -1,6 +1,6 @@ /** Raw Session journal transport and message-aligned pagination coverage. */ -import { describe, expect, it, vi } from 'vitest' +import { describe, expect, it, onTestFinished, vi } from 'vitest' import { Context } from '@deepseek-ai/cordis' import AgentRegistry, { type Agent, type AssistantStreamFrame } from '@deepseek-ai/dsh-agent' import SessionStore from '@deepseek-ai/dsh-session' @@ -25,9 +25,9 @@ function appendUserText(session: Session, text: string): SessionEvent { } /** Append a production-shaped assistant message to the session surface. */ -function appendAssistantText(session: Session, text: string, step: number): SessionEvent { +function appendAssistantText(session: Session, text: string, step: number, turn = 1): SessionEvent { return session.append('assistant/message', { - turn: 1, + turn, step, message: createMessage({ role: 'assistant', @@ -748,6 +748,74 @@ describe('Session history raw journal', () => { ]) }) + it.each([ + { name: 'two long Turns', replies: [9, 39, 39], beforeMessage: undefined, firstTurn: 2, steering: false }, + { name: 'the partial upper Turn and its predecessor', replies: [9, 39, 99], beforeMessage: 20, firstTurn: 2, steering: false }, + { name: 'an upper window beginning at its user message', replies: [9, 59, 59], beforeMessage: 0, firstTurn: 2, steering: false }, + { name: 'short Turns until 50 messages', replies: [9, 9, 9, 9, 9, 9], beforeMessage: undefined, firstTurn: 2, steering: false }, + { name: 'navigation until 200 messages', replies: [9, 49, 49, 49, 49], beforeMessage: undefined, firstTurn: 2, steering: false, minMessages: 200 }, + { name: 'steering within one Turn', replies: [9, 39, 39], beforeMessage: undefined, firstTurn: 2, steering: true }, + { name: 'exhausted history below both minima', replies: [9], beforeMessage: undefined, firstTurn: 1, steering: false }, + { name: 'the 500-message cap inside one Turn', replies: [9, 600], beforeMessage: undefined, firstTurn: undefined, steering: false }, + ])('paginates $name in one contiguous Turn window', async ({ replies, beforeMessage, firstTurn, steering, minMessages = 50 }) => { + const { ctx } = await harness() + onTestFinished(() => ctx.fiber.dispose()) + const remote = createSessionTestRemote(ctx, { defaultModelSelection: () => ({ provider: 'p', model: 'm' }), cwd: '/tmp' }) + const session = ctx.sessions.create(undefined, { meta: { cwd: '/workspace' } }) + const starts: SessionEvent[] = [] + const messages: SessionEvent[][] = [] + for (const [index, count] of replies.entries()) { + const turn = index + 1 + starts.push(session.append('turn/start', { turn })) + const rows = [appendUserText(session, `prompt ${turn}`)] + for (let step = 1; step <= count; step++) { + rows.push(appendAssistantText(session, `reply ${turn}/${step}`, step, turn)) + if (steering && index === replies.length - 1 && step % 3 === 0) { + rows.push(appendUserText(session, `steering ${step}`)) + } + } + messages.push(rows) + session.append('turn/end', { turn, reason: { kind: 'completed' } }) + } + const beforeSeq = beforeMessage === undefined ? session.seq : messages.at(-1)![beforeMessage]!.seq + const response = await remote.page({ + address: { kind: 'session', sessionId: session.id }, + throughSeq: session.seq - 1, + beforeSeq, + maxMessages: 500, + turnWindow: { minMessages, minTurns: 2 }, + }) + if (!response.ok) throw new Error('expected a history page') + const page = pageEvents(response.value) + const expectedStart = firstTurn === undefined ? messages.at(-1)!.at(-500)!.seq : starts[firstTurn - 1]!.seq + expect(page.map(event => event.seq)).toEqual(Array.from({ length: beforeSeq - expectedStart }, (_, index) => expectedStart + index)) + expect(response.value.hasMore).toBe(expectedStart > 0) + if (firstTurn === undefined) { + expect(page.filter(event => event.type === 'user/message' || event.type === 'assistant/message')).toHaveLength(500) + expect(page.some(event => event.type === 'user/message')).toBe(false) + } else { + expect(page[0]?.type).toBe('turn/start') + expect(page.some(event => event.seq === messages[firstTurn - 1]![0]!.seq)).toBe(true) + } + if (beforeMessage === undefined) { + const abort = new AbortController() + const stream = remote.follow({ + address: { kind: 'session', sessionId: session.id }, + maxMessages: 500, + turnWindow: { minMessages, minTurns: 2 }, + }, abort.signal)[Symbol.asyncIterator]() + try { + await expect(stream.next()).resolves.toMatchObject({ + done: false, + value: { type: 'snapshot', records: response.value.records, hasMore: response.value.hasMore }, + }) + } finally { + abort.abort() + await stream.return?.() + } + } + }) + it('counts only append-origin messages toward maxMessages and keeps each compaction summary with its replacement', async () => { const { ctx } = await harness() const remote = createSessionTestRemote(ctx, { defaultModelSelection: () => ({ provider: 'p', model: 'm' }), cwd: '/tmp' }) diff --git a/packages/api/session-controller/tests/session.client.spec.ts b/packages/api/session-controller/tests/session.client.spec.ts index 0c93b71af4..ccba6d3a6a 100644 --- a/packages/api/session-controller/tests/session.client.spec.ts +++ b/packages/api/session-controller/tests/session.client.spec.ts @@ -13,7 +13,7 @@ import { RemoteStreamCarrierError } from '@deepseek-ai/dsh-api-gateway/client' import { RemoteError, type RemoteResult } from '@deepseek-ai/dsh-typert-protocol' import { ok, type RemoteMock } from '@deepseek-ai/dsh-remote-mock' import { createClientTest, type TestClient, webApp } from '@deepseek-ai/dsh-client-test-runtime/src/assembly/index.ts' -import { JUMP_PAGE_MESSAGES, Session } from '../src/client/sessions/session.ts' +import { Session } from '../src/client/sessions/session.ts' import { SessionEventStream } from '../src/client/transport.ts' import type { SessionFollowRequest, SessionPage, SessionPageRequest } from '../src/types.ts' import { entries, ev, historyValue, plainTurn } from './event-script.client.ts' @@ -191,9 +191,9 @@ describe('paging', () => { await session.open() await session.loadOlder() const snapshot = session.getSnapshot() - expect(mock.log.requests(FOLLOW)).toHaveLength(1) - expect(mock.log.requests(PAGE)).toMatchObject([ - { address: ADDRESS, throughSeq: 11, beforeSeq: 6 }, + expect(mock.log.requests(FOLLOW)).toMatchObject([{ maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }]) + expect(mock.log.requests(PAGE)).toEqual([ + { address: ADDRESS, throughSeq: 11, beforeSeq: 6, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, ]) expect(snapshot.hasMore).toBe(false) expect(eventSeqs(session)).toEqual([...older, ...newer].map(event => event.seq)) @@ -254,8 +254,8 @@ describe('paging', () => { expect(snapshot.loadingOlder).toBe(false) expect(eventSeqs(session)).toEqual([...oldest, ...middle, ...newest].map(event => event.seq)) expect(mock.log.requests(PAGE)).toMatchObject([ - { beforeSeq: 12, maxMessages: JUMP_PAGE_MESSAGES }, - { beforeSeq: 6, maxMessages: JUMP_PAGE_MESSAGES }, + { beforeSeq: 12, maxMessages: 500, turnWindow: { minMessages: 200, minTurns: 2 } }, + { beforeSeq: 6, maxMessages: 500, turnWindow: { minMessages: 200, minTurns: 2 } }, ]) }) @@ -484,7 +484,7 @@ describe('prompt and cancel errors', () => { expect(steered).toEqual({ ok: true, value: { accepted: true } }) expect(cancelled).toEqual({ ok: true, value: { accepted: true } }) expect(mock.log.requests(FOLLOW)).toEqual([ - { address: { kind: 'subagent', ...CHILD }, assistantStream: true, maxMessages: 50 }, + { address: { kind: 'subagent', ...CHILD }, assistantStream: true, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, ]) expect(mock.log.requests(PAGE)).toEqual([]) // The prompt mode crosses the wire as the request's delivery. @@ -580,7 +580,7 @@ describe('prompt and cancel errors', () => { expect(mock.log.requests('subagents/prompt')).toMatchObject([CHILD]) expect(mock.log.calls('subagents/interruptByParent').map(call => call.args)).toEqual([[SID, PARENT, 'continuable']]) expect(mock.log.requests(FOLLOW)).toEqual([ - { address: { kind: 'subagent', ...CHILD, mode: 'one-shot' }, assistantStream: true, maxMessages: 50 }, + { address: { kind: 'subagent', ...CHILD, mode: 'one-shot' }, assistantStream: true, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, ]) expect(mock.log.requests(PAGE)).toEqual([]) expect(mock.log.requests('session/cancel')).toEqual([]) diff --git a/packages/api/session-controller/tests/transport.client.spec.ts b/packages/api/session-controller/tests/transport.client.spec.ts index b0efb1b9bb..87d8fd7479 100644 --- a/packages/api/session-controller/tests/transport.client.spec.ts +++ b/packages/api/session-controller/tests/transport.client.spec.ts @@ -542,15 +542,15 @@ describe('Session Client stream adapters', () => { failed: vi.fn(), }) - await stream.open({ maxMessages: 50 }) + await stream.open({ maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }) await vi.waitFor(() => { expect(changes).toHaveLength(2) }) - await stream.prepend({ beforeSeq: 2, maxMessages: 50 }) + await stream.prepend({ beforeSeq: 2, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }) expect(remote.followRequests).toEqual([{ - address: ADDRESS, assistantStream: true, maxMessages: 50, + address: ADDRESS, assistantStream: true, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 }, }]) expect(remote.pageRequests).toEqual([ - { address: ADDRESS, throughSeq: 4, beforeSeq: 2, maxMessages: 50 }, + { address: ADDRESS, throughSeq: 4, beforeSeq: 2, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, ]) expect(changes).toMatchObject([ { type: 'replace', entries: [entry(2), entry(3)], hasMore: true }, @@ -581,12 +581,12 @@ describe('Session Client stream adapters', () => { failed: vi.fn(), }) - await stream.open({ maxMessages: 50 }) + await stream.open({ maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }) await vi.waitFor(() => { expect(remote.followRequests).toHaveLength(2) }) expect(remote.followRequests).toEqual([ - { address: ADDRESS, assistantStream: true, maxMessages: 50 }, - { address: ADDRESS, assistantStream: true, maxMessages: 50 }, + { address: ADDRESS, assistantStream: true, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, + { address: ADDRESS, assistantStream: true, maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }, ]) expect(remote.pageRequests).toEqual([]) expect(changes.map(change => change.type)).toEqual(['replace', 'append', 'replace']) @@ -623,7 +623,7 @@ describe('Session Client stream adapters', () => { await stream.dispose() }) - it.each([{}, { maxMessages: 50 }])('repairs a live gap preserving message limit %j', async (request) => { + it.each([{}, { maxMessages: 50 }, { maxMessages: 500, turnWindow: { minMessages: 50, minTurns: 2 } }])('repairs a live gap preserving history limits %j', async (request) => { const remote = new ScriptedSessionRemote( [{ frames: [snapshot(0, [entry(0)]), entry(2)], hold: true }], [{ ok: true, value: page([entry(0), entry(1), entry(2)]) }], diff --git a/packages/api/session-controller/tests/transport.host.spec.ts b/packages/api/session-controller/tests/transport.host.spec.ts index 341aaf4e86..890000a0ac 100644 --- a/packages/api/session-controller/tests/transport.host.spec.ts +++ b/packages/api/session-controller/tests/transport.host.spec.ts @@ -517,6 +517,12 @@ describe('SessionHistoryController', () => { { address, throughSeq: -1, beforeSeq: 1.5 }, { address, throughSeq: -1, maxMessages: 0 }, { address, throughSeq: -1, maxMessages: 1.5 }, + { address, throughSeq: -1, turnWindow: { minMessages: 0, minTurns: 2 } }, + { address, throughSeq: -1, turnWindow: { minMessages: 1.5, minTurns: 2 } }, + { address, throughSeq: -1, turnWindow: { minMessages: 51, minTurns: 2 } }, + { address, throughSeq: -1, maxMessages: 20, turnWindow: { minMessages: 21, minTurns: 2 } }, + { address, throughSeq: -1, turnWindow: { minMessages: 50, minTurns: 0 } }, + { address, throughSeq: -1, turnWindow: { minMessages: 50, minTurns: 1.5 } }, ]) { await expect(transport.page(request, signal())).rejects.toMatchObject({ code: 'gateway/bad-request' }) } @@ -537,6 +543,16 @@ describe('SessionHistoryController', () => { const iterator = transport.follow({ address, maxMessages }, signal())[Symbol.asyncIterator]() await expect(iterator.next()).rejects.toMatchObject({ code: 'gateway/bad-request' }) } + for (const turnWindow of [ + { minMessages: 0, minTurns: 2 }, + { minMessages: 1.5, minTurns: 2 }, + { minMessages: 51, minTurns: 2 }, + { minMessages: 50, minTurns: 0 }, + { minMessages: 50, minTurns: 1.5 }, + ]) { + const iterator = transport.follow({ address, turnWindow }, signal())[Symbol.asyncIterator]() + await expect(iterator.next()).rejects.toMatchObject({ code: 'gateway/bad-request' }) + } }) it('reports missing ordinary and subagent sources without fabricating inspection failures', async () => { diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 65bb485075..4bf22eef0d 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -6211,7 +6211,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SessionFollowRequest', - declaration: 'export interface SessionFollowRequest {\n readonly address: SessionAddress;\n readonly maxMessages?: number;\n readonly assistantStream?: true;\n}', + declaration: 'export interface SessionFollowRequest extends Pick {\n readonly address: SessionAddress;\n readonly assistantStream?: true;\n}', }, { name: 'SessionForkRequest', @@ -6315,7 +6315,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SessionPageRequest', - declaration: 'export interface SessionPageRequest {\n readonly address: SessionAddress;\n readonly throughSeq: number;\n readonly beforeSeq?: number;\n readonly maxMessages?: number;\n}', + declaration: 'export interface SessionPageRequest {\n readonly address: SessionAddress;\n readonly throughSeq: number;\n readonly beforeSeq?: number;\n readonly maxMessages?: number;\n readonly turnWindow?: {\n readonly minMessages: number;\n readonly minTurns: number;\n };\n}', }, { name: 'SessionPersistenceCreateOptions', From 820824edd747d485de9b03102fc5d17e0383a747 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 21:05:22 +0800 Subject: [PATCH 18/35] fix(chat): stabilize input echo admission and ordering --- ...08-17-durable-web-queue-recovery.i18n.yaml | 4 +- .../2026-08-17-durable-web-queue-recovery.md | 2 + ...026-08-17-durable-web-queue-recovery.zh.md | 2 + ...2-input-echo-admission-ownership.i18n.yaml | 6 + ...26-09-22-input-echo-admission-ownership.md | 52 ++++ ...09-22-input-echo-admission-ownership.zh.md | 52 ++++ .../2026-08-26-generic-file-upload.i18n.yaml | 4 +- .../feature/2026-08-26-generic-file-upload.md | 2 + .../2026-08-26-generic-file-upload.zh.md | 2 + apps/web/tests/idle-submission-handoff.e2e.ts | 275 ++++++++++++++++++ apps/web/tsconfig.json | 1 + .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 4 +- packages/api/session-controller/README.zh.md | 4 +- .../src/client/contract/session.ts | 7 +- .../src/client/contract/snapshot.ts | 2 +- .../src/client/sessions/projection-store.ts | 10 + .../src/client/sessions/session.ts | 84 ++++-- .../tests/projection-store.client.spec.ts | 12 + ...session-pending-submissions.client.spec.ts | 259 ++++++++++++++--- packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 6 +- packages/client/ui-chat/README.zh.md | 6 +- .../ui-chat/src/client/chat/ChatView.tsx | 82 +++--- .../ui-chat/tests/chat-view.client.spec.tsx | 97 ++++++ .../client/ui-conversation/README.i18n.yaml | 4 +- packages/client/ui-conversation/README.md | 4 +- packages/client/ui-conversation/README.zh.md | 4 +- .../src/client/queue/QueueDock.tsx | 10 +- .../tests/queue-dock.client.spec.tsx | 51 ++++ tsconfig.host.json | 1 + 31 files changed, 917 insertions(+), 140 deletions(-) create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.i18n.yaml create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md create mode 100644 .agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md create mode 100644 apps/web/tests/idle-submission-handoff.e2e.ts 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 56aaada1b7..5c76962fef 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 @@ -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/bug-fix/2026-08-17-durable-web-queue-recovery.md -2026-08-17-durable-web-queue-recovery.md: 5fbfdf0e62c1034fbea138016cc2979489de474f -2026-08-17-durable-web-queue-recovery.zh.md: 2aaffd6bc571aab449d9429758fdf45bb4dd8d4c +2026-08-17-durable-web-queue-recovery.md: 0f18cd7a2b9491d6a8bdfa960409d97a5338f95d +2026-08-17-durable-web-queue-recovery.zh.md: 476c1b2fe88156ba8c34e281ff1d1e5663c7913c diff --git a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.md b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.md index 5fbfdf0e62..0f18cd7a2b 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.md +++ b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.md @@ -49,3 +49,5 @@ Client coverage pins generic Inbox projection delivery, reconnect invalidation f Pending Queue and steering input recover after Host process restart without resuming an Agent. Live Inbox reads, cold history, reconnect, and projection caching use the same domain-owned fold and registry state. Operations on a restored row do resume its ordinary Agent, preserving preset composition and ownership checks. Clients receive the raw two-list Inbox value and decide which messages their surface presents. The projection state version invalidates cached rows whenever its serialized state or fold semantics change. + +The [input echo admission decision](2026-09-22-input-echo-admission-ownership.md) owns local Chat/Dock handoff and suppression of delayed Inbox rows without replacing this recovery model. diff --git a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.zh.md b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.zh.md index 2aaffd6bc5..476c1b2fe8 100644 --- a/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-08-17-durable-web-queue-recovery.zh.md @@ -49,3 +49,5 @@ Host 投影覆盖会读取包含待处理输入的已分离持久 Session,在 待处理 Queue 与 steering 输入可在 Host 进程重启后恢复,而无需恢复 Agent。live Inbox 读取、冷历史、重连与投影缓存使用同一份领域拥有的折叠与注册表状态。操作恢复出的行时会恢复其普通 Agent,从而保留 preset 组合与所有权检查。 客户端接收原始的两列表 Inbox 值,并自行决定界面呈现哪些消息。投影的状态版本会在其序列化状态或折叠语义变化时使缓存行失效。 + +[输入回显入档决策](2026-09-22-input-echo-admission-ownership.zh.md)负责本地 Chat/Dock 接管和迟到 Inbox 行的排除,不替换这里的恢复模型。 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 new file mode 100644 index 0000000000..b9720ff269 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.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/bug-fix/2026-09-22-input-echo-admission-ownership.md +2026-09-22-input-echo-admission-ownership.md: 806d524fff3ae7331dbb25c270a95282f540fa87 +2026-09-22-input-echo-admission-ownership.zh.md: 2ad6008c19cfb021e730f3c503c21eb862fc04aa diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md new file mode 100644 index 0000000000..806d524fff --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md @@ -0,0 +1,52 @@ +# Agent Note: Input echoes retain display ownership through admission + +Status: implemented + +English | [中文](2026-09-22-input-echo-admission-ownership.zh.md) + +## Problem + +An idle submission can appear first as a local Chat echo, then as an Inbox row in QueueDock, and finally as a durable user message. Inbox projection and conversation history arrive independently: retiring the echo on acceptance leaves a gap before admission, while a delayed Inbox projection can duplicate an already-admitted message. Separately, turn/start precedes user/message, so an empty progress title can appear before the echo and exchange positions with it when the real input arrives. + +These transitions concern display ownership, not scrolling or composer geometry. A delay cannot identify which representation is authoritative, and moving every echo before the progress title would move running steering ahead of existing work. + +## Decision + +- A submission keeps its locally selected placement: idle input stays in Chat, running steering stays at the process tail, and explicitly queued input stays in QueueDock. Inbox acceptance does not change that placement. +- Chat hides an echo by matching the durable input's rpcId in the same render. QueueDock excludes only Inbox rows matched by local transcript echoes; unrelated queued messages remain visible and actionable. +- Session retains an admitted transcript's local suppression identity until the Inbox projection watermark reaches its claim sequence. Higher-sequence projection retention then prevents an older accepted row from reappearing after that identity retires. Claim tracking and cancellation use the existing per-submission receipt for both Inbox targets; no new SessionSnapshot field, Host event, or persisted format is needed. +- At an open, input-free progress control at the end of Chat, the first transcript echo precedes the control. Other echoes remain at the tail. Last-input Turn tracking shares the existing rpcId scan; it does not add a history traversal or predict a sequence of future Turns. +- Pending bubbles and durable seats share one keyed React list. Inserting a progress title preserves the pending bubble's mounted identity. Once admitted, the durable node owns ordering and ordinary Group segmentation. + +The [durable Inbox recovery decision](2026-08-17-durable-web-queue-recovery.md) still owns cold reads, reconstruction and projection transport. The [generic file upload decision](../feature/2026-08-26-generic-file-upload.md) still owns attachment preparation and draft recovery; retirement returns each submission's durable references once, in attachment order. + +## Alternatives considered + +**Delay QueueDock or echo removal by a fixed interval.** CPU throttling, transport batching and projection ordering can exceed any such interval. Time does not establish admission or confirm that stale queue state is gone. + +**Retain the echo without changing the other readers.** Chat-side Inbox deduplication can still remove the echo, and QueueDock can still display it. The Session lifetime, Chat handoff and Dock exclusion must agree. + +**Delete the suppression identity as soon as user/message arrives.** A later Inbox acceptance projection can resurrect a Dock row. The claim watermark supplies the required ordering evidence without assuming the streams publish together. + +**Move all pending inputs before the newest Turn control.** Running steering belongs after existing process content, and several ordinary submissions can target different Turns. Only the first local transcript echo receives the empty-control placement adjustment. + +**Add a Host correlation event or a client-side Turn scheduler.** Exact prediction across competing clients and reordered requests would widen the change beyond local optimistic presentation. Durable admission remains authoritative; optimistic ordering is deliberately approximate in those races. + +## Verification + +| Evidence | Covered behavior | +|---|---| +| [Session submissions](../../../../packages/api/session-controller/tests/session-pending-submissions.client.spec.ts) | Projection-first and history-first handoff, claim watermark, overlapping opening/queue/steering identities, attachment callbacks, cancellation, unadmitted endings, reconnect baselines and disposal. | +| [Projection store](../../../../packages/api/session-controller/tests/projection-store.client.spec.ts) | Missing/cached watermarks, monotonic sequence retention and clearing. | +| [Chat rendering](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx) | Same-render rpcId replacement, stable echo mounting, title-before-input delivery in all three modes, steering remaining behind the title, historical empty Turns, and six local-versus-Host orderings. | +| [QueueDock](../../../../packages/client/ui-conversation/tests/queue-dock.client.spec.tsx) | Local transcript exclusion, unrelated rows/actions, and all six three-message acceptance orders followed by FIFO claims. | +| [Recorded Web replay](../../../../apps/web/tests/idle-submission-handoff.e2e.ts) | Real Web composition with FIFO-preserving delivery barriers: both Inbox/history arrival orders at 6× CPU throttling, an explicit turn/start-to-user/message gap, and complete three-Turn handoff for all six request orders. | + +The single-input regression fails before the fix: Inbox acceptance moves the bubble into Dock, and a separately delivered Turn title precedes the echo. The corrected path retains one Chat representation at a stable vertical position. Multi-input replay verifies durable order and absence of duplicate or residual echoes; it does not assert that optimistic ordering predicts Host order. + +## Consequences + +- Reconnect may discard receipt-confirmed optimistic echoes and display the new authoritative baseline. A claimed input outside that baseline can briefly have no bubble; reconnect does not promise DOM continuity. +- Submissions made before the local running update can all remain transcript echoes. If A, B and C are submitted locally in that order but B or C enters first, durable admission changes their visible order. Even when A enters first, remaining local echoes can differ from the Host queue order. +- Cross-client competition and request-preparation races can change the actual opening input. The client does not migrate an idle-classified echo into Dock merely because the Host queued it behind another Turn. +- The changes prevent representation handoff flicker on the ordinary online path without changing model input, Inbox scheduling, scroll-follow policy, or released Session data. The browser barriers establish behavior, not a general latency or throughput improvement. diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md new file mode 100644 index 0000000000..2ad6008c19 --- /dev/null +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md @@ -0,0 +1,52 @@ +# Agent Note: 输入回显在入档期间保持展示归属 + +Status: implemented + +[English](2026-09-22-input-echo-admission-ownership.md) | 中文 + +## 问题 + +空闲时提交的输入可能先显示为 Chat 本地回显,再变为 QueueDock 的 Inbox 行,最后才显示为持久用户消息。Inbox 投影与会话历史独立到达:受理时回收回显会在入档前留下空档,迟到的 Inbox 投影又可能重复显示已经入档的消息。此外,turn/start 先于 user/message,因此空过程标题可能先出现在回显前面,真实输入到达时再与它交换位置。 + +这些转换涉及展示归属,而非滚动或 composer 几何。延迟不能判断哪种表示已经成为权威,将所有回显移到过程标题前又会把运行中的 steering 移到已有工作之前。 + +## 决策 + +- 提交保留本地发送时选择的 placement:空闲输入留在 Chat,运行中的 steering 留在过程末尾,明确排队的输入留在 QueueDock。Inbox 受理不改变展示归属。 +- Chat 在同一次渲染中按持久输入的 rpcId 隐藏回显。QueueDock 只排除匹配本地 transcript 回显的 Inbox 行;其他排队消息仍可见且可操作。 +- Session 保留已入档 transcript 的本地排除身份,直到 Inbox 投影水位达到其领取序号。随后,较高序号投影优先的规则阻止旧受理行在该身份回收后重新出现。领取跟踪和取消共用已有逐提交 receipt,并覆盖两种 Inbox target;不新增 SessionSnapshot 字段、Host 事件或持久格式。 +- Chat 末尾为进行中且没有真实输入的过程控制行时,第一条 transcript 回显显示在控制行前,其他回显留在末尾。最后输入的轮次信息复用现有 rpcId 扫描,不新增历史遍历,也不预测未来轮次序列。 +- 待处理气泡与持久节点容器共用一个 keyed React 列表。插入过程标题保留回显气泡的挂载身份。入档后,由持久节点决定排序及普通 Group 切分。 + +[持久 Inbox 恢复决策](2026-08-17-durable-web-queue-recovery.zh.md)仍负责冷读取、重建与投影传输。[通用文件上传决策](../feature/2026-08-26-generic-file-upload.zh.md)仍负责附件准备及草稿恢复;回收按附件顺序返回各提交的持久引用,且只回调一次。 + +## 考虑过的替代方案 + +**固定延迟 QueueDock 或回显回收。** CPU 降速、传输批处理与投影到达顺序都可能超过该间隔。时间不能证明入档,也不能确认过期队列状态已经消失。 + +**只延长回显生命周期,不调整其他读取方。** Chat 侧按 Inbox 去重仍会移除回显,QueueDock 仍可能展示同一消息。Session 生命周期、Chat 接管和 Dock 排除必须一致。 + +**user/message 到达后立即删除排除身份。** 较晚的 Inbox 受理投影会复活 Dock 行。领取水位提供必要的排序依据,不要求两条流同时发布。 + +**把全部待处理输入移到最新 Turn 控制行前。** 运行中的 steering 属于已有过程内容之后,多条普通提交也可能属于不同轮次。只有第一条本地 transcript 回显参与空控制行前的定位调整。 + +**新增 Host 关联事件或客户端 Turn 调度器。** 精确预测跨客户端竞争和请求乱序会超出本地乐观展示的范围。持久入档仍是权威;这些竞争场景中的乐观排序有意保持近似。 + +## 验证 + +| 证据 | 覆盖行为 | +|---|---| +| [Session 提交](../../../../packages/api/session-controller/tests/session-pending-submissions.client.spec.ts) | 投影先到与历史先到的接管、领取水位、开场/排队/steering 身份交错、附件回调、取消、未入档结束、重连基线及销毁。 | +| [投影存储](../../../../packages/api/session-controller/tests/projection-store.client.spec.ts) | 缺失或缓存水位、单调序号保留及清理。 | +| [Chat 渲染](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx) | 同帧 rpcId 替换、回显稳定挂载、三种模式下标题先于输入到达、steering 留在标题之后、历史空轮次及六种本地与 Host 排列。 | +| [QueueDock](../../../../packages/client/ui-conversation/tests/queue-dock.client.spec.tsx) | 本地 transcript 排除、其他行及操作、三条消息的全部六种受理顺序及后续 FIFO 领取。 | +| [录制 Web 回放](../../../../apps/web/tests/idle-submission-handoff.e2e.ts) | 真实 Web 装配配合保留 FIFO 的投递屏障:6× CPU 降速下的 Inbox/历史两种到达顺序、明确的 turn/start 至 user/message 空档,以及六种请求排列的完整三轮接管。 | + +单条输入回归在修复前失败:Inbox 受理将气泡移入 Dock,单独交付的 Turn 标题又会出现在回显之前。修复后的路径保留唯一的 Chat 表示,且纵向位置稳定。多输入回放验证持久顺序及无重复、无残留回显,不断言乐观排列可以预测 Host 顺序。 + +## 后果 + +- 重连可撤销已有接收回执的乐观回显,并展示新的权威基线。已领取但不在该基线中的输入可能短暂无气泡;重连不保证 DOM 连续性。 +- 本地 running 更新前连续提交的消息可能都留为 transcript 回显。若本地按 A、B、C 提交,但 B 或 C 先入档,持久接管会调整可见顺序。即使 A 先入档,其余本地回显也可能与 Host 队列顺序不同。 +- 跨客户端竞争和请求准备的先后差异可能改变实际开场输入。客户端不会仅因 Host 将输入排在另一轮后面,就把已按空闲分类的回显迁入 Dock。 +- 这些改动消除普通在线路径中表示切换带来的抖动,不改变模型输入、Inbox 调度、滚动跟随规则或已发布 Session 数据。浏览器屏障证明行为,不代表普遍的延迟或吞吐提升。 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 d5f37e0569..6019a38f89 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 @@ -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-08-26-generic-file-upload.md -2026-08-26-generic-file-upload.md: ddaf92a396ade59d65a81300531be9bce2aeeaba -2026-08-26-generic-file-upload.zh.md: 27a73536ec3632f40ee49a59d932406e77b5591d +2026-08-26-generic-file-upload.md: 196d048da9ffc1342cd62cb9c25674b7cecaffac +2026-08-26-generic-file-upload.zh.md: fce7cef76cf36060f55165d009c568480abb0f16 diff --git a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.md b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.md index ddaf92a396..196d048da9 100644 --- a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.md +++ b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.md @@ -52,3 +52,5 @@ Unit and integration coverage pins verbatim and streamed storage, name sanitizat ## Related The [Trajectory attachment presentation decision](../bug-fix/2026-09-15-trajectory-attachment-presentation.md) owns ledger counts and inspector attachment layouts. + +The [input echo admission decision](../bug-fix/2026-09-22-input-echo-admission-ownership.md) owns placement-specific retirement and delayed Inbox suppression for submissions with or without attachments. diff --git a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.zh.md b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.zh.md index 27a73536ec..fce7cef76c 100644 --- a/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.zh.md +++ b/.agents/notes/implemented/feature/2026-08-26-generic-file-upload.zh.md @@ -52,3 +52,5 @@ Status: implemented ## 相关记录 [Trajectory 附件展示决定](../bug-fix/2026-09-15-trajectory-attachment-presentation.zh.md)负责列表计数与详情面板附件布局。 + +[输入回显入档决策](../bug-fix/2026-09-22-input-echo-admission-ownership.zh.md)负责有无附件提交的按展示归属回收和迟到 Inbox 排除。 diff --git a/apps/web/tests/idle-submission-handoff.e2e.ts b/apps/web/tests/idle-submission-handoff.e2e.ts new file mode 100644 index 0000000000..9d27909d4d --- /dev/null +++ b/apps/web/tests/idle-submission-handoff.e2e.ts @@ -0,0 +1,275 @@ +/** Keep idle submissions in Chat across independently delivered Inbox and transcript frames. */ +import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { chromium, type Page } from 'playwright' +import { expect, it } from 'vitest' +import type { InboxState } from '@deepseek-ai/dsh-agent/types' +import type { SessionEvent } from '@deepseek-ai/dsh-session/types' +import { deriveReplayScript, parseSessionLog } from '@deepseek-ai/dsh-llm-replay' +import { + parseRemoteStreamClientMessage, parseRemoteStreamServerMessage, +} from '@deepseek-ai/dsh-api-gateway/stream-protocol' +import { launchWebScaffold, seedSession, watchConsole, webSnapshotMode } from './scaffold.ts' +import { newEnglishPage } from './support.ts' + +const FIXTURE = fileURLToPath(new URL('../../../snapshots/web/live-interactions/session.v3.jsonl', import.meta.url)) +const SESSION_ID = 'idle-submission-handoff' +const TEXT = 'IDLE_SUBMISSION_HANDOFF Keep this message in the conversation.' + +interface Delivery { + readonly stream: string + readonly inbox?: InboxState + readonly event?: SessionEvent + readonly send: () => void +} + +/** Delay real Host frames while preserving FIFO within each logical stream. */ +class HistoryDeliveryGate { + private readonly streams = new Map() + private buffered: Delivery[] = [] + holding = false + + async install(page: Page): Promise { + await page.routeWebSocket('**/api/remote.mux', (socket) => { + const server = socket.connectToServer() + socket.onMessage((message) => { + const frame = parseRemoteStreamClientMessage(String(message)) + if (frame.type === 'open') this.streams.set(frame.streamId, frame.endpoint) + server.send(message) + }) + server.onMessage((message) => { + const frame = parseRemoteStreamServerMessage(String(message)) + const endpoint = this.streams.get(frame.streamId) + if (!this.holding || (endpoint !== 'session/control' && endpoint !== 'session/follow')) { + socket.send(message) + return + } + const control = endpoint === 'session/control' && frame.type === 'item' + ? frame.value as { type: string; sessionId?: string; key?: string; value?: InboxState } : undefined + const inbox = control?.type === 'projection' && control.sessionId === SESSION_ID && control.key === 'inbox' + ? control.value : undefined + const follow = endpoint === 'session/follow' && frame.type === 'item' + ? frame.value as { type: string; event?: SessionEvent } : undefined + this.buffered.push({ stream: frame.streamId, send: () => { socket.send(message) }, + ...follow?.event === undefined ? {} : { event: follow.event }, ...inbox === undefined ? {} : { inbox } }) + }) + }) + } + + inboxDelivery(queued: boolean, text = TEXT): Delivery | undefined { + return this.buffered.find(item => item.inbox !== undefined && item.inbox['next-turn'].some(message => + message.content.some(block => block.type === 'text' && block.text === text)) === queued) + } + + admissionDelivery(text = TEXT): Delivery | undefined { + return this.buffered.find(item => item.event?.type === 'user/message' + && item.event.data.content.some(block => block.type === 'text' && block.text === text)) + } + + turnStartDelivery(): Delivery | undefined { return this.buffered.find(item => item.event?.type === 'turn/start') } + + turnEndDelivery(): Delivery | undefined { return this.buffered.find(item => item.event?.type === 'turn/end') } + + releaseThrough(target: Delivery): void { + let reached = false + this.buffered = this.buffered.filter((item) => { + if (reached || item.stream !== target.stream) return true + item.send() + reached = item === target + return false + }) + } + + releaseAll(): void { + this.holding = false + for (const item of this.buffered) item.send() + this.buffered = [] + } +} + +async function placement(page: Page, input = TEXT) { + return page.evaluate((text) => { + const matching = (selector: string) => [...document.querySelectorAll(selector)] + .filter(element => element.textContent?.includes(text)) + const echo = matching('[data-submission-echo]') + const dock = matching('[data-queue-dock] li') + const durable = matching('[data-chat-flow-kind="user"]') + return { + echo: echo.length, + dock: dock.length, + durable: durable.length, + messageTop: (echo[0] ?? dock[0] ?? durable[0])?.getBoundingClientRect().top ?? null, + composerTop: document.querySelector('[data-composer-card]')?.getBoundingClientRect().top ?? null, + } + }, input) +} + +it.skipIf(webSnapshotMode() === 'record').each(['inbox-first', 'transcript-first'] as const)( + 'keeps an idle submission in Chat under CPU throttling (%s)', async (order) => { + const scaffold = await launchWebScaffold({ replayFixture: FIXTURE, compareReplaySession: false }) + const releasePrompt = Promise.withResolvers() + const promptBlocked = Promise.withResolvers() + const gate = new HistoryDeliveryGate() + let browser: Awaited> | undefined + try { + await seedSession(scaffold, await readFile(FIXTURE, 'utf8'), SESSION_ID) + browser = await chromium.launch() + const page = await newEnglishPage(browser) + const tripwire = watchConsole(page) + await gate.install(page) + await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) + await page.locator('[role="treeitem"]').first().click() + await page.locator('[role="treeitem"]').nth(1).click() + await page.locator('[data-chat-flow-kind="user"]').first().waitFor() + await page.getByRole('button', { name: 'Send message', exact: true }).waitFor() + const cdp = await page.context().newCDPSession(page) + await cdp.send('Emulation.setCPUThrottlingRate', { rate: 6 }) + await page.route('**/api/session/prompt', async (route) => { + promptBlocked.resolve(undefined) + await releasePrompt.promise + await route.continue() + }, { times: 1 }) + const trace: Array<{ phase: string } & Awaited>> = [] + const settled = scaffold.whenTurnSettled() + gate.holding = true + const input = page.locator('[data-composer-input]').first() + await input.fill(TEXT) + await input.press('Enter') + await promptBlocked.promise + await expect.poll(() => placement(page)).toMatchObject({ echo: 1, dock: 0, durable: 0 }) + trace.push({ phase: 'optimistic', ...await placement(page) }) + releasePrompt.resolve(undefined) + + if (order === 'transcript-first') { + await expect.poll(() => gate.turnStartDelivery()).toBeDefined() + 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() + gate.releaseThrough(gate.admissionDelivery()!) + await expect.poll(() => placement(page)).toMatchObject({ echo: 0, dock: 0, durable: 1 }) + trace.push({ phase: 'durable-before-inbox', ...await placement(page) }) + } + + await expect.poll(() => gate.inboxDelivery(true)).toBeDefined() + gate.releaseThrough(gate.inboxDelivery(true)!) + await expect.poll(() => placement(page)).toMatchObject({ echo: order === 'inbox-first' ? 1 : 0, dock: 0, durable: order === 'transcript-first' ? 1 : 0 }) + trace.push({ phase: 'inbox', ...await placement(page) }) + + await expect.poll(() => gate.inboxDelivery(false)).toBeDefined() + gate.releaseThrough(gate.inboxDelivery(false)!) + await expect.poll(() => placement(page)).toMatchObject({ echo: order === 'inbox-first' ? 1 : 0, dock: 0, durable: order === 'transcript-first' ? 1 : 0 }) + trace.push({ phase: 'claim-projection', ...await placement(page) }) + + if (order === 'inbox-first') { + await expect.poll(() => gate.turnStartDelivery()).toBeDefined() + 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) }) + } + + gate.releaseAll() + await expect.poll(() => placement(page)).toMatchObject({ echo: 0, dock: 0, durable: 1 }) + trace.push({ phase: 'durable', ...await placement(page) }) + for (const entry of trace) { + expect(entry.messageTop, entry.phase).toBe(trace[0]?.messageTop) + expect(entry.composerTop, entry.phase).toBe(trace[0]?.composerTop) + } + await settled + await cdp.send('Emulation.setCPUThrottlingRate', { rate: 1 }) + await cdp.detach() + expect(tripwire.pageErrors).toEqual([]) + } finally { + releasePrompt.resolve(undefined) + gate.releaseAll() + try { await browser?.close() } finally { await scaffold.close() } + } + }, +) + +it.skipIf(webSnapshotMode() === 'record').each(['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'])( + 'hands off three rapid submissions through all Turns in Host order %s', async (hostOrder) => { + const root = await mkdtemp(join(tmpdir(), 'dsh-input-handoff-')) + const releases = new Map(['A', 'B', 'C'].map(id => [id, Promise.withResolvers()])) + const blocked = new Set() + const gate = new HistoryDeliveryGate() + let browser: Awaited> | undefined + let scaffold: Awaited> | undefined + try { + const fixture = await readFile(FIXTURE, 'utf8') + const recorded = deriveReplayScript(parseSessionLog(fixture)) + expect(recorded).toHaveLength(1) + const override = join(root, 'replay.override.json') + await writeFile(override, JSON.stringify([recorded[0], recorded[0], recorded[0]])) + scaffold = await launchWebScaffold({ replayFixture: FIXTURE, replayOverride: override, compareReplaySession: false }) + await seedSession(scaffold, fixture, SESSION_ID) + browser = await chromium.launch() + const page = await newEnglishPage(browser) + const tripwire = watchConsole(page) + await gate.install(page) + await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) + await page.locator('[role="treeitem"]').first().click() + await page.locator('[role="treeitem"]').nth(1).click() + await page.locator('[data-chat-flow-kind="user"]').first().waitFor() + await page.getByRole('button', { name: 'Send message', exact: true }).waitFor() + const text = (id: string) => `RAPID_INPUT_${id}` + await page.route('**/api/session/prompt', async (route) => { + const request = route.request().postData() ?? '' + const id = [...releases.keys()].find(id => request.includes(text(id))) + if (id === undefined) throw new Error('unexpected prompt in rapid input fixture') + blocked.add(id) + await releases.get(id)!.promise + await route.continue() + }) + gate.holding = true + const input = page.locator('[data-composer-input]').first() + for (const id of releases.keys()) { + await input.fill(text(id)) + await input.press('Enter') + await expect.poll(() => blocked.has(id)).toBe(true) + await expect.poll(() => placement(page, text(id))).toMatchObject({ echo: 1, dock: 0, durable: 0 }) + } + const entered: string[] = [] + for (const id of hostOrder) { + const settled = scaffold.whenTurnSettled() + releases.get(id)!.resolve(undefined) + await expect.poll(() => gate.turnStartDelivery()).toBeDefined() + gate.releaseThrough(gate.turnStartDelivery()!) + await expect.poll(() => gate.admissionDelivery(text(id))).toBeDefined() + gate.releaseThrough(gate.admissionDelivery(text(id))!) + entered.push(id) + for (const candidate of releases.keys()) { + const admitted = entered.includes(candidate) + await expect.poll(() => placement(page, text(candidate))).toMatchObject({ + echo: admitted ? 0 : 1, dock: 0, durable: admitted ? 1 : 0, + }) + } + await expect.poll(() => gate.inboxDelivery(true, text(id))).toBeDefined() + gate.releaseThrough(gate.inboxDelivery(true, text(id))!) + await expect.poll(() => placement(page, text(id))).toMatchObject({ echo: 0, dock: 0, durable: 1 }) + await expect.poll(() => gate.inboxDelivery(false, text(id))).toBeDefined() + gate.releaseThrough(gate.inboxDelivery(false, text(id))!) + await expect.poll(() => gate.turnEndDelivery()).toBeDefined() + gate.releaseThrough(gate.turnEndDelivery()!) + await settled + } + gate.releaseAll() + const actual = await page.locator('[data-chat-flow-kind="user"]').allTextContents() + expect(actual.filter(value => value.includes('RAPID_INPUT_')).map(value => + [...releases.keys()].find(id => value.includes(text(id))))).toEqual(hostOrder.split('')) + expect(await page.locator('[data-submission-echo]').count()).toBe(0) + expect(await page.locator('[data-queue-dock]').count()).toBe(0) + expect(tripwire.pageErrors).toEqual([]) + } finally { + for (const release of releases.values()) release.resolve(undefined) + gate.releaseAll() + try { await browser?.close() } finally { + try { await scaffold?.close() } finally { await rm(root, { recursive: true, force: true }) } + } + } + }, +) diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index 4554f81ee0..bf3f8a08e8 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -121,6 +121,7 @@ "tests/markdown-inline-code-links.e2e.ts", "tests/clickable-links-gallery.e2e.ts", "tests/queue-actions.e2e.ts", + "tests/idle-submission-handoff.e2e.ts", "tests/cold-blank-session.e2e.ts", "tests/blank-writer-reuse.e2e.ts", "tests/queue-image.e2e.ts", diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index 7d9de200a5..f0350ddf0e 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: 438f57388d454b621835dccc3f0a87ea72249b3c -README.zh.md: aab5c0854821ae4bce3caf085939af0db7af5bf7 +README.md: 7d3e2a8a34c2a18db369a65a880c31417cdc68e2 +README.zh.md: be0ab5bc7a4bc3f9cae950ac3e14a531a32a3db7 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index 438f57388d..7d3e2a8a34 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -45,10 +45,10 @@ Accepted prompts and observed running keep their Client display conversion acros The Client adapter exposes `SessionEventStream`, a Gateway `RemoteJournalStream` bound to one ordinary or direct-subagent address. It opens follow before the initial page, publishes only contiguous `replace`, `prepend`, `append`, and `settle-assistant` changes, and repairs reconnect or sequence gaps through a tail page. Backwards paging has two verbs: `loadOlder()` pulls one Turn-aligned page, and `loadThrough(seq)` — the turn-jump loader — loops Turn-aligned pages until the window covers the target seq, lowering a shared target on repeated calls, stopping on a page that makes no progress, and reporting busy through the same `loadingOlder` snapshot bit. The Web adapter explicitly opts into cursorless Assistant frames: each opening carries the active attempt's `startedAfterSeq`, `nextIndex`, and compact stream, and every stream member becomes a Client-only `assistant/live-chunk` entry ordered between durable cursors. The Host captures a follower-local arrival ordinal with that baseline and suppresses buffered frames at or before the cut; a replacement Agent may restart frame revision at one. A durable `assistant/message` or `assistant/attempt` arriving after an active opening stays staged only when its seq follows `startedAfterSeq` and its Turn and Step match; the matching end type, seq, and index publishes one named settlement delta that retires the attempt's transient rows and adds the durable entry while earlier same-step retries remain visible. Revision, dense-index, or settlement gaps for a known attempt reopen follow, while a controller that missed the start ignores unknown-attempt frames and publishes their durable settlement normally. An abandoned end publishes a settlement delta without a durable entry so its transient rows retire immediately. A durable gap-repair page has no Assistant baseline, so its held notification reopens follow once for a paired page and baseline. Every history record covers exactly its event seq. A business, persistence, or unresolved continuity failure terminates the stream, while only physical carrier loss selects automatic resumption. `SessionControlStream` is a Gateway `RemoteSnapshotStream`; every generation opens with a complete process-local baseline, so reconnect replaces projection state instead of treating transient values as durable events. At each ready Host generation, a synchronous Client subscription clears retained projection values and watermarks before refreshing queries and restarting the control stream, including Sessions absent from the control baseline. The first control stream waits for generation readiness, so its opening values cannot precede invalidation. Outstanding list responses from the previous generation cannot republish those values. Within a generation, a delayed control baseline cannot overwrite or clear newer sequenced values, whether they arrived through a live Session's list block, a history page, or a frame; a cached list block, viewed from the projection cache for a cold Session, yields to the connected Session's baseline whatever watermark it carries. The durable `inbox` projection carries both pending lists through the same cold-read and reconnect path as other projections. Client Agent contexts provide the identity used by the independent [`fileUpload`](../../client/file-upload/README.md) service; Session objects expose lifecycle, prompt, queue, and history operations rather than file transfer. -The Session object also carries local submission echoes: `session.beginSubmission` inserts one into `SessionSnapshot.pendingSubmissions` synchronously, before the caller serializes and prompts, so a conversation UI can show the message on the submit click's own frame. The echo stores ordered image previews and durable file references. Session derives its `transcript`, `queued`, or `steering` placement from the current running state and requested delivery mode, then retains that placement while serialization is in flight. The prompt's `requestId` is the correlation identity: the Host echoes it as the durable user source's `rpcId`, including pending messages in the `inbox` projection. An echo retires one animation frame after its durable event or queue occurrence is observed, immediately when its identified prompt fails or is abandoned, and as failed on disposal. Each retirement fires `onRetire` exactly once; an observed retirement includes the ordered durable attachment references so the composer can release successful cards while preserving failed drafts. Echoes are Client memory only; reload and reconnect rebuild the conversation from durable events alone. +The Session object also carries local submission echoes: `session.beginSubmission` inserts one into `SessionSnapshot.pendingSubmissions` synchronously, before the caller serializes and prompts, so a conversation UI can show the message on the submit click's own frame. The echo stores ordered image previews and durable file references. Session derives its `transcript`, `queued`, or `steering` placement from the current running state and requested delivery mode, then retains that placement until the display handoff. The prompt's `requestId` is the correlation identity: the Host echoes it as the durable user source's `rpcId`, including pending messages in the `inbox` projection. Queued echoes retire one animation frame after queue acceptance; Chat echoes follow the admission rule below. Identified failures and abandonment retire unadmitted echoes immediately. Disposal preserves observed admission and fails other unsettled submissions. Each retirement fires `onRetire` exactly once; an observed retirement includes the ordered durable attachment references so the composer can release successful cards while preserving failed drafts. Echoes are Client memory only; reload and reconnect rebuild the conversation from durable events alone. -During uninterrupted following, steering echoes stay mounted through Inbox acceptance and claim until their durable messages arrive. A replacement follow baseline withdraws earlier receipt-confirmed steering echoes as observed, using their accepted attachment references; unconfirmed submissions remain pending. Host data then supplies the pending or admitted rows. Reconnecting between claim and admission can briefly omit that bubble; withdrawal confirms acceptance, not execution or failure. +During uninterrupted following, transcript and steering echoes stay in Chat through Inbox acceptance and claim until their durable messages arrive. After a transcript message is admitted, its local identity remains until the Inbox watermark reaches its next-turn claim seq: Chat already renders the durable Node, while QueueDock excludes that identity even if an older Inbox frame arrives late. Other queued messages remain visible. A replacement follow baseline withdraws receipt-confirmed echoes as observed, using their accepted attachment references; unconfirmed submissions remain pending. Host data then supplies the pending or admitted rows. Reconnecting between claim and admission can briefly omit that bubble; withdrawal confirms acceptance, not execution or failure. The user-invocable `skills/list` metadata includes the winning provider’s optional instruction-file `path`. The composer can preview that file without loading every skill body or activating a cold Agent. diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index aab5c08548..be0ab5bc7a 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -45,10 +45,10 @@ Client 列表刷新保留未变化的行对象,并在顺序和值均相同时 Client 适配器提供 `SessionEventStream`,即绑定到一个普通 Session 或 direct subagent address 的 Gateway `RemoteJournalStream`。它在读取首个 page 前打开 follow,只发布连续的 `replace`、`prepend`、`append` 与 `settle-assistant` 变更,并通过 tail page 修复重连或 seq 缺口。向后分页有两个动词:`loadOlder()` 拉一页按轮次开头对齐的历史,而 `loadThrough(seq)`——轮次跳转加载器——按轮次开头对齐页面循环拉取直到窗口覆盖目标 seq,重复调用会下调共享目标,遇到无进展的页即停止,忙碌状态复用同一个 `loadingOlder` 快照位。Web 适配器显式选择接收无 cursor 的 Assistant frame:每个 opening 携带活跃 attempt 的 `startedAfterSeq`、`nextIndex` 与紧凑 stream,每个 stream member 都成为排在持久 cursor 之间的 Client-only `assistant/live-chunk` 条目。Host 会随该 baseline 捕获 follower 本地到达序号,并抑制该 cut 及之前的 buffered frame;replacement Agent 可以从 revision 一重新开始。活跃 opening 之后到达的持久 `assistant/message` 或 `assistant/attempt` 只有在其 seq 晚于 `startedAfterSeq` 且轮次与步骤匹配时才会保持暂存;匹配的 end type、seq 与 index 会发布一个具名 settlement delta,删除该 attempt 的瞬态 row、加入持久条目,并保留同一步骤中更早的 retry。已知 attempt 的 revision、密集 index 或 settlement 缺口会重新打开 follow;若 controller 错过 start,则忽略 unknown-attempt frame,并正常发布其持久 settlement。Abandoned end 会发布不含持久条目的 settlement delta,使瞬态 row 立即退出。持久缺口修复 page 不携带 Assistant baseline,因此 held notification 会重新打开 follow 一次,以取得配对的 page 与 baseline。每条历史 record 只覆盖自身的事件 seq。业务、persistence 或无法恢复的连续性错误会终止 stream,只有物理载体断开才触发自动恢复。`SessionControlStream` 是 Gateway `RemoteSnapshotStream`;每代都以完整的进程本地 baseline 开始,因此重连会替换 projection 状态,而不会把瞬态值当作 durable event。每次 Host generation 就绪时,同步的 Client 订阅会先清除保留的投影值及其水位,再刷新查询并重新打开 control stream,其中也包括 control baseline 中没有列出的 Session。首次 control stream 会等待 generation 就绪,确保其 opening 值不会先于旧状态清理到达。上一代尚未完成的 list 响应无法重新发布这些值。同一 generation 内,延迟到达的 control baseline 不能覆盖或清除较新的 sequenced 值,无论它们来自活 Session 的 list block、history page 还是 frame;冷 Session 从 projection cache 看出来的 cached list block 则不论水位都让位于建连 Session 的 baseline。持久 `inbox` 投影通过与其他投影相同的冷读取和重连路径传输两份待处理列表。Client Agent 上下文提供独立 [`fileUpload`](../../client/file-upload/README.zh.md) 服务使用的身份;Session 对象提供生命周期、prompt、queue 与历史操作,不提供文件传输。 -Session 对象还承载本地提交回显:`session.beginSubmission` 在调用方序列化与提示词之前,同步把一条回显写入 `SessionSnapshot.pendingSubmissions`,会话 UI 因此能在点击提交的当帧显示消息。回显按顺序存放图片预览与持久文件引用。Session 根据当前运行状态与请求的投递模式推导其 `transcript`、`queued` 或 `steering` 位置,并在序列化期间保留该位置。提示词的 `requestId` 是关联标识:Host 把它回显为 durable user source 的 `rpcId`,`inbox` 投影中的待处理消息也保留同一 source。回显在观察到其 durable event 或 queue occurrence 后延迟一个动画帧退休,带标识的提示词失败或被放弃时立即退休,销毁时按 failed 退休。每次退休恰好触发一次 `onRetire`;observed 退休还会携带有序的持久附件引用,让 composer 释放成功卡片并保留失败草稿。回显只存在于 Client 内存;刷新与重连只从持久事件重建会话。 +Session 对象还承载本地提交回显:`session.beginSubmission` 在调用方序列化与提示词之前,同步把一条回显写入 `SessionSnapshot.pendingSubmissions`,会话 UI 因此能在点击提交的当帧显示消息。回显按顺序存放图片预览与持久文件引用。Session 根据当前运行状态与请求的投递模式推导其 `transcript`、`queued` 或 `steering` 位置,并保留该位置直到展示接管。提示词的 `requestId` 是关联标识:Host 把它回显为 durable user source 的 `rpcId`,`inbox` 投影中的待处理消息也保留同一 source。排队回显在队列接受后延迟一个动画帧退休;Chat 回显遵循下述入档规则。尚未入档的回显在带标识的提示词失败或被放弃时立即退休。销毁时保留已观察到的入档结果,其余未结算提交按 failed 退休。每次退休恰好触发一次 `onRetire`;observed 退休还会携带有序的持久附件引用,让 composer 释放成功卡片并保留失败草稿。回显只存在于 Client 内存;刷新与重连只从持久事件重建会话。 -正常在线时,steering 回显在 Inbox 接受与领取期间保持挂载,直到持久消息到达。新的 follow 基线会将此前已有接收回执的 steering 回显按 observed 撤去,使用已接受的附件引用完成结算;尚未确认接收的提交继续保留。待处理或已入档的消息随后由 Host 数据呈现。在领取与入档之间重连时,气泡可能短暂消失;撤去回显只确认接收,不代表执行或失败。 +正常在线时,transcript 与 steering 回显在 Inbox 接受与领取期间留在 Chat,直到持久消息到达。transcript 消息入档后,本地身份保留到 Inbox 水位覆盖其 next-turn 领取序号:Chat 已显示真实 Node,而 QueueDock 继续排除该身份,避免迟到的旧 Inbox 帧重复展示它。其他排队消息照常显示。新的 follow 基线会将已有接收回执的回显按 observed 撤去,使用已接受的附件引用完成结算;尚未确认接收的提交继续保留。待处理或已入档的消息随后由 Host 数据呈现。在领取与入档之间重连时,气泡可能短暂消失;撤去回显只确认接收,不代表执行或失败。 面向用户调用的 `skills/list` 元数据包含胜出提供方可选的指令文件 `path`。输入框可据此预览文件,无需加载每个 skill 的正文或激活冷态 Agent。 diff --git a/packages/api/session-controller/src/client/contract/session.ts b/packages/api/session-controller/src/client/contract/session.ts index 6dc27688b3..2c8f16c4ae 100644 --- a/packages/api/session-controller/src/client/contract/session.ts +++ b/packages/api/session-controller/src/client/contract/session.ts @@ -68,9 +68,10 @@ export interface ISession { /** * Register one local submission echo in `snapshot.pendingSubmissions`, * synchronously, before the caller serializes and sends the prompt. The - * echo retires when a durable `user/message` event or queue occurrence - * carrying the returned identity arrives, or when the identified prompt - * call fails. + * Chat echoes persist until durable admission; transcript identities also + * wait for the Inbox claim watermark so stale queue rows stay suppressed. + * Queued echoes retire on queue acceptance. Identified failures retire + * submissions that have not already reached durable admission. * @param input - echo content and the optional settlement callback. * @returns the minted identity for {@link prompt} plus the pre-prompt abandon path. */ diff --git a/packages/api/session-controller/src/client/contract/snapshot.ts b/packages/api/session-controller/src/client/contract/snapshot.ts index c9ce1be4f5..161cd858b4 100644 --- a/packages/api/session-controller/src/client/contract/snapshot.ts +++ b/packages/api/session-controller/src/client/contract/snapshot.ts @@ -46,7 +46,7 @@ export type PendingSubmissionPlacement = 'transcript' | 'queued' | 'steering' export interface PendingSubmission { /** The prompt RPC identity; the durable `user/message` source echoes it as `rpcId`. */ readonly requestId: SessionRequestId - /** Expected surface until the Host reports the admitted queue or durable occurrence. */ + /** Surface fixed at submission time; Inbox acceptance does not move a Chat echo into the dock. */ readonly placement: PendingSubmissionPlacement /** Client wall-clock ms when the submission began. */ readonly time: number diff --git a/packages/api/session-controller/src/client/sessions/projection-store.ts b/packages/api/session-controller/src/client/sessions/projection-store.ts index faafa4404f..ae36cea19c 100644 --- a/packages/api/session-controller/src/client/sessions/projection-store.ts +++ b/packages/api/session-controller/src/client/sessions/projection-store.ts @@ -117,6 +117,16 @@ export class ProjectionValueStore { return this.rows.get(key)?.value } + /** + * Read the accepted Host watermark without subscribing or copying a value. + * @param key - projection key. + * @returns the current sequence, or undefined for absent and cached values. + */ + seqOf(key: string): SessionSeqCursor | undefined { + const row = this.rows.get(key) + return row?.kind === 'sequenced' ? row.seq : undefined + } + /** * Read every current projection value as one reference-stable snapshot. * @returns The same frozen value map until a row changes. diff --git a/packages/api/session-controller/src/client/sessions/session.ts b/packages/api/session-controller/src/client/sessions/session.ts index 63e0b63900..3bf9a8f2e9 100644 --- a/packages/api/session-controller/src/client/sessions/session.ts +++ b/packages/api/session-controller/src/client/sessions/session.ts @@ -1,7 +1,7 @@ // Sessions remain resident after creation so their open Remote sources keep running off-screen. import type { Context } from '@deepseek-ai/cordis' -import type { InboxState } from '@deepseek-ai/dsh-agent/types' +import type { InboxState, InboxTarget } from '@deepseek-ai/dsh-agent/types' import { randomUUID } from '@deepseek-ai/dsh-util-crypto' import type { AttachmentIdType, FileAttachmentRef, ImageAttachmentRef } from '@deepseek-ai/dsh-attachment' import type { SubagentAddress } from '@deepseek-ai/dsh-subagent/client' @@ -133,12 +133,15 @@ export class Session implements SessionFace { * Inbox projection and its durable event cannot both retire one echo. */ private readonly submissionSettlements = new Map void) | undefined retiring: boolean }>() @@ -596,10 +599,10 @@ export class Session implements SessionFace { async dispose(): Promise { this.stopObservingInbox() // Unsettled echoes retire as failed so their owners can restore or - // release browser resources; echoes already scheduled as observed keep - // that settlement. - for (const requestId of [...this.submissionSettlements.keys()]) { - this.retireFailedSubmission(requestId) + // release browser resources; admitted echoes keep their observed outcome. + for (const [requestId, settlement] of [...this.submissionSettlements]) { + if (settlement.admitted !== undefined) this.scheduleObservedRetirement(requestId, settlement.admitted) + else this.retireFailedSubmission(requestId) } this.openGeneration++ const events = this.events @@ -682,7 +685,7 @@ export class Session implements SessionFace { if (visible.some(entry => entry.event.type === 'turn/start')) this.firstPromptPendingTurn = false if (projections !== undefined) this.projections.seed(projections) this.eventSource.replace(visible, hasMore) - // A new follow baseline replaces optimistic steering with Host-owned rows. + // A new follow baseline replaces confirmed optimistic inputs with Host-owned rows. // Receipt-backed inputs are accepted, not failed, even if their history is outside this window. if (projections !== undefined) { for (const [requestId, { receipt }] of this.submissionSettlements) { @@ -694,7 +697,9 @@ export class Session implements SessionFace { for (const entry of visible) this.observeSubmissionEvent(entry.event) if (projections !== undefined) { const inbox = projections.values.inbox as InboxState | undefined - this.observeSteeringInsertions(inbox?.['next-step'] ?? [], 0, projections.asOfSeq) + for (const target of ['next-turn', 'next-step'] as const) { + this.observeSubmissionInsertions(target, inbox?.[target] ?? [], 0, projections.asOfSeq) + } } this.notifier.markDirty() } @@ -758,55 +763,76 @@ export class Session implements SessionFace { if (this.submissionSettlements.size === 0) return if (event.type === 'agent/inbox/spliced') { const { target, start, removedCount = 0, inserted, outcome } = event.data - if (target === 'next-step') { - for (const [requestId, settlement] of this.submissionSettlements) { - const receipt = settlement.receipt - if (receipt === undefined || receipt.index === null || receipt.seq >= event.seq) continue - const removed = receipt.index >= start && receipt.index < start + removedCount - if (removed && outcome === 'canceled') this.retireFailedSubmission(requestId) - else settlement.receipt = { - ...receipt, - seq: event.seq, - index: removed ? null : receipt.index < start ? receipt.index : receipt.index + inserted.length - removedCount, - } + for (const [requestId, settlement] of this.submissionSettlements) { + const receipt = settlement.receipt + if (receipt?.target !== target || receipt.index === null || receipt.seq >= event.seq) continue + const removed = receipt.index >= start && receipt.index < start + removedCount + if (removed && outcome === 'canceled') this.retireFailedSubmission(requestId) + else settlement.receipt = { + ...receipt, + seq: event.seq, + index: removed ? null : receipt.index < start ? receipt.index : receipt.index + inserted.length - removedCount, } - this.observeSteeringInsertions(inserted, start, event.seq) } + this.observeSubmissionInsertions(target, inserted, start, event.seq) for (const message of inserted) this.observeSubmissionMessage(message, false) return } if (event.type === 'request/context' || event.type === 'turn/end') { for (const [requestId, settlement] of this.submissionSettlements) { - if (settlement.receipt?.index === null && settlement.receipt.seq < event.seq) this.retireFailedSubmission(requestId) + if (settlement.admitted === undefined && settlement.receipt?.index === null + && settlement.receipt.seq < event.seq) this.retireFailedSubmission(requestId) } return } if (event.type === 'user/message') this.observeSubmissionMessage(event.data, true) } - private observeSteeringInsertions(messages: readonly UserMessage[], start: number, seq: number): void { + private observeSubmissionInsertions(target: InboxTarget, messages: readonly UserMessage[], start: number, seq: number): void { for (const [index, message] of messages.entries()) { const source = message.source if (source.kind !== 'user' || !('rpcId' in source)) continue const settlement = this.submissionSettlements.get(source.rpcId) - if (settlement?.placement !== 'steering' || settlement.retiring || (settlement.receipt?.seq ?? -1) > seq) continue - settlement.receipt = { seq, index: start + index, attachments: attachmentRefsIn(message.content) } + if (settlement === undefined || settlement.placement === 'queued' + || settlement.retiring || (settlement.receipt?.seq ?? -1) > seq) continue + settlement.receipt = { target, seq, index: start + index, attachments: attachmentRefsIn(message.content) } } } private observeSubmissionMessage(message: UserMessage, admitted: boolean): void { const source = message.source if (source.kind !== 'user' || !('rpcId' in source)) return - if (!admitted && this.submissionSettlements.get(source.rpcId)?.placement === 'steering') return - this.scheduleObservedRetirement(source.rpcId, attachmentRefsIn(message.content)) + const settlement = this.submissionSettlements.get(source.rpcId) + if (settlement === undefined || settlement.retiring) return + if (!admitted) { + if (settlement.placement === 'queued') this.scheduleObservedRetirement(source.rpcId, attachmentRefsIn(message.content)) + return + } + settlement.admitted = attachmentRefsIn(message.content) + this.retireAdmittedSubmission(source.rpcId) } - /** Retire non-steering echoes when the Inbox accepts their queue occurrences. */ + /** Retire admitted Chat identities only after stale Dock rows can no longer reappear. */ + private retireAdmittedSubmission(requestId: SessionRequestId): void { + const settlement = this.submissionSettlements.get(requestId) + if (settlement?.admitted === undefined) return + const receipt = settlement.receipt + if (settlement.placement === 'transcript' && receipt?.target === 'next-turn' && receipt.index === null + && (this.projections.seqOf('inbox') ?? -1) < receipt.seq) return + this.scheduleObservedRetirement(requestId, settlement.admitted) + } + + /** Inbox acceptance retires queued echoes; its watermark completes admitted Chat handoffs. */ private observeSubmissionInbox(): void { if (this.submissionSettlements.size === 0) return const inbox = this.projections.get('inbox') as InboxState | undefined if (inbox === undefined) return - for (const message of [...inbox['next-turn'], ...inbox['next-step']]) this.observeSubmissionMessage(message, false) + const seq = this.projections.seqOf('inbox') + for (const target of ['next-turn', 'next-step'] as const) { + if (seq !== undefined) this.observeSubmissionInsertions(target, inbox[target], 0, seq) + for (const message of inbox[target]) this.observeSubmissionMessage(message, false) + } + for (const requestId of this.submissionSettlements.keys()) this.retireAdmittedSubmission(requestId) } /** @@ -828,7 +854,7 @@ export class Session implements SessionFace { /** Remove one unsettled echo immediately (prompt rejection, abort, or disposal). */ private retireFailedSubmission(requestId: SessionRequestId): void { const settlement = this.submissionSettlements.get(requestId) - if (settlement === undefined || settlement.retiring) return + if (settlement === undefined || settlement.retiring || settlement.admitted !== undefined) return settlement.retiring = true this.finishSubmission(requestId, { reason: 'failed' }) } diff --git a/packages/api/session-controller/tests/projection-store.client.spec.ts b/packages/api/session-controller/tests/projection-store.client.spec.ts index c3a14febf3..40e1f3c95f 100644 --- a/packages/api/session-controller/tests/projection-store.client.spec.ts +++ b/packages/api/session-controller/tests/projection-store.client.spec.ts @@ -44,6 +44,18 @@ function makeManager(mock: RemoteMock, remote: ClientTestFixtures['remote']): Se } describe('Session projection value semantics', () => { + it('exposes a watermark only for current Host-sequenced values', () => { + const store = new ProjectionValueStore() + expect(store.seqOf('inbox')).toBeUndefined() + store.applyCached({ inbox: { 'next-turn': [], 'next-step': [] } }) + expect(store.seqOf('inbox')).toBeUndefined() + store.apply('inbox', { 'next-turn': [], 'next-step': [] }, SessionSeq(4)) + store.apply('inbox', { 'next-turn': [], 'next-step': [] }, SessionSeq(2)) + expect(store.seqOf('inbox')).toBe(4) + store.seed({ asOfSeq: SessionSeq(6), values: {} }) + expect(store.seqOf('inbox')).toBeUndefined() + }) + it('reads undefined until a value lands (capability absence)', () => { const store = new ProjectionValueStore() expect(store.get('test/marks')).toBeUndefined() diff --git a/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts b/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts index b215ec557b..a19f5720ef 100644 --- a/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts +++ b/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts @@ -105,6 +105,19 @@ describe('beginSubmission', () => { ]) }) + it('keeps rapid ordinary submissions in Chat until the running update arrives', async ({ mock, start }) => { + const session = await sessionBench(mock, start, SID) + for (const text of ['A', 'B', 'C']) session.beginSubmission({ mode: 'queue', text, attachments: [] }) + expect(session.getSnapshot().pendingSubmissions.map(input => input.placement)).toEqual([ + 'transcript', 'transcript', 'transcript', + ]) + session.handleRunning(true) + session.beginSubmission({ mode: 'queue', text: 'D', attachments: [] }) + expect(session.getSnapshot().pendingSubmissions.map(input => input.placement)).toEqual([ + 'transcript', 'transcript', 'transcript', 'queued', + ]) + }) + it('abandon retires the echo as failed exactly once', async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) const retirements: PendingSubmissionRetirement[] = [] @@ -176,7 +189,7 @@ describe('observed retirement', () => { expect(retirements).toEqual([{ reason: 'observed', attachments: refs }]) }) - it('retires an accepted echo when a claim clears the projection before its notification', async ({ mock, start }) => { + it('retains an idle echo when a claim clears the projection before its notification', async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) await session.open() const onRetire = vi.fn() @@ -190,10 +203,133 @@ describe('observed retirement', () => { data: { target: 'next-step', start: 0, inserted: [message] }, }) await settleFrames() + expect(session.getSnapshot().pendingSubmissions).toHaveLength(1) + expect(onRetire).not.toHaveBeenCalled() + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, + data: { target: 'next-step', start: 0, removedCount: 1, inserted: [] }, + }) + await pushEvent(mock, promptEvent(SessionSeq(2), handle.requestId, refs)) + await settleFrames() expect(session.getSnapshot().pendingSubmissions).toEqual([]) expect(onRetire).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: refs }) }) + for (const order of ['inbox-first', 'transcript-first'] as const) { + it(`keeps an idle Chat identity until admission and the Inbox claim watermark (${order})`, async ({ mock, start }) => { + const session = await sessionBench(mock, start, SID) + await session.open() + session.projections.apply('inbox', { 'next-turn': [], 'next-step': [] }, -1) + const frames: FrameRequestCallback[] = [] + vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => frames.push(callback)) + const onRetire = vi.fn() + const handle = session.beginSubmission({ mode: 'queue', text: 'idle', attachments: [], onRetire }) + const refs = [imageRef('idle-image'), fileRef('idle-file')] + const message = queuedItem(handle.requestId, refs) + const queued = { 'next-turn': [message], 'next-step': [] } + const empty = { 'next-turn': [], 'next-step': [] } + if (order === 'inbox-first') session.projections.apply('inbox', queued, SessionSeq(0)) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, + data: { target: 'next-turn', start: 0, inserted: [message] }, + }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, + data: { target: 'next-turn', start: 0, removedCount: 1, inserted: [] }, + }) + expect(session.getSnapshot().pendingSubmissions).toHaveLength(1) + expect(frames).toHaveLength(0) + if (order === 'inbox-first') session.projections.apply('inbox', empty, SessionSeq(1)) + await pushEvent(mock, promptEvent(SessionSeq(2), handle.requestId, refs)) + if (order === 'transcript-first') { + await pushEvent(mock, ev.turnEnd(SessionSeq(3), 1)) + handle.abandon() + session.projections.apply('inbox', queued, SessionSeq(0)) + await Promise.resolve() + expect(frames).toHaveLength(0) + expect(session.getSnapshot().pendingSubmissions).toHaveLength(1) + expect(onRetire).not.toHaveBeenCalled() + session.projections.apply('inbox', empty, SessionSeq(1)) + await Promise.resolve() + } + expect(frames).toHaveLength(1) + frames[0]?.(0) + expect(session.getSnapshot().pendingSubmissions).toEqual([]) + expect(onRetire).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: refs }) + session.projections.apply('inbox', queued, SessionSeq(0)) + expect(session.projections.get('inbox')).toEqual(empty) + }) + } + + for (const projectionFirst of [true, false]) { + it(`settles overlapping opening, queued and steering inputs independently (${projectionFirst ? 'projection' : 'history'} first)`, async ({ mock, start }) => { + const session = await sessionBench(mock, start, SID) + await session.open() + const frames: FrameRequestCallback[] = [] + vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => frames.push(callback)) + const flush = () => { for (const callback of frames.splice(0)) callback(0) } + const normalRetired = vi.fn() + const queueRetired = vi.fn() + const steerRetired = vi.fn() + const normal = session.beginSubmission({ mode: 'queue', text: 'opening', attachments: [], onRetire: normalRetired }) + session.handleRunning(true) + const queued = session.beginSubmission({ mode: 'queue', text: 'queued', attachments: [], onRetire: queueRetired }) + const steer = session.beginSubmission({ mode: 'steer', text: 'steering', attachments: [], onRetire: steerRetired }) + const normalMessage = queuedItem(normal.requestId, [fileRef('opening-file')]) + const queuedMessage = queuedItem(queued.requestId, [imageRef('queued-image')]) + const steerMessage = queuedItem(steer.requestId, [imageRef('steer-image'), fileRef('steer-file')]) + const pending = () => session.getSnapshot().pendingSubmissions.map(input => input.text) + const accepted = { 'next-turn': [normalMessage, queuedMessage], 'next-step': [steerMessage] } + if (projectionFirst) session.projections.apply('inbox', accepted, SessionSeq(1)) + await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, + data: { target: 'next-turn', start: 0, inserted: [normalMessage, queuedMessage] } }) + await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, + data: { target: 'next-step', start: 0, inserted: [steerMessage] } }) + flush() + expect(pending()).toEqual(['opening', 'steering']) + expect(queueRetired).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: [imageRef('queued-image')] }) + await pushEvent(mock, ev.turnStart(SessionSeq(2), 1)) + await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(3), time: 4, + data: { target: 'next-step', start: 0, removedCount: 1, inserted: [] } }) + await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(4), time: 5, + data: { target: 'next-turn', start: 0, removedCount: 1, inserted: [] } }) + const claimed = { 'next-turn': [queuedMessage], 'next-step': [] } + if (projectionFirst) session.projections.apply('inbox', claimed, SessionSeq(4)) + await pushEvent(mock, ev.stepStart(SessionSeq(5), 1, 1)) + await pushEvent(mock, { type: 'user/message', seq: SessionSeq(6), time: 7, surfaceOp: 'append', data: steerMessage }) + flush() + expect(pending()).toEqual(['opening']) + expect(normalRetired).not.toHaveBeenCalled() + expect(steerRetired).toHaveBeenCalledExactlyOnceWith({ + reason: 'observed', attachments: [imageRef('steer-image'), fileRef('steer-file')], + }) + await pushEvent(mock, { type: 'user/message', seq: SessionSeq(7), time: 8, surfaceOp: 'append', data: normalMessage }) + flush() + if (!projectionFirst) { + expect(pending()).toEqual(['opening']) + session.projections.apply('inbox', accepted, SessionSeq(1)) + flush() + expect(normalRetired).not.toHaveBeenCalled() + session.projections.apply('inbox', claimed, SessionSeq(4)) + await Promise.resolve() + flush() + } + expect(pending()).toEqual([]) + expect(normalRetired).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: [fileRef('opening-file')] }) + await pushEvent(mock, ev.stepEnd(SessionSeq(8), 1, 1)) + await pushEvent(mock, ev.turnEnd(SessionSeq(9), 1)) + await pushEvent(mock, ev.turnStart(SessionSeq(10), 2)) + await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(11), time: 12, + data: { target: 'next-turn', start: 0, removedCount: 1, inserted: [] } }) + await pushEvent(mock, ev.stepStart(SessionSeq(12), 2, 2)) + await pushEvent(mock, { type: 'user/message', seq: SessionSeq(13), time: 14, surfaceOp: 'append', data: queuedMessage }) + session.projections.apply('inbox', { 'next-turn': [], 'next-step': [] }, SessionSeq(11)) + flush() + expect(queueRetired).toHaveBeenCalledTimes(1) + expect(pending()).toEqual([]) + }) + } + it('keeps a running steer echo through accepted and claimed Inbox states until transcript admission', async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) await session.open() @@ -226,44 +362,46 @@ describe('observed retirement', () => { expect(onRetire).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: refs }) }) - it('retires canceled or unadmitted steering without removing still-pending input', async ({ mock, start }) => { - const session = await sessionBench(mock, start, SID) - await session.open() - session.handleRunning(true) - const canceled = vi.fn() - const rejected = vi.fn() - const first = session.beginSubmission({ mode: 'steer', text: 'cancel', attachments: [], onRetire: canceled }) - const second = session.beginSubmission({ mode: 'steer', text: 'reject', attachments: [], onRetire: rejected }) - const unclaimed = session.beginSubmission({ mode: 'steer', text: 'later', attachments: [] }) - const foreign = createUserMessage({ source: { kind: 'user' }, content: [] }) - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, - data: { target: 'next-step', start: 0, inserted: [queuedItem(first.requestId), queuedItem(second.requestId)] }, + for (const target of ['next-step', 'next-turn'] as const) { + it(`retires canceled or unadmitted ${target} input without removing still-pending input`, async ({ mock, start }) => { + const session = await sessionBench(mock, start, SID) + await session.open() + session.handleRunning(target === 'next-step') + const canceled = vi.fn() + const rejected = vi.fn() + const first = session.beginSubmission({ mode: 'steer', text: 'cancel', attachments: [], onRetire: canceled }) + const second = session.beginSubmission({ mode: 'steer', text: 'reject', attachments: [], onRetire: rejected }) + const unclaimed = session.beginSubmission({ mode: 'steer', text: 'later', attachments: [] }) + const foreign = createUserMessage({ source: { kind: 'user' }, content: [] }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, + data: { target, start: 0, inserted: [queuedItem(first.requestId), queuedItem(second.requestId)] }, + }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, + data: { target, start: 0, inserted: [foreign] }, + }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(2), time: 3, + data: { target, start: 1, removedCount: 1, inserted: [], outcome: 'canceled' }, + }) + expect(canceled).toHaveBeenCalledExactlyOnceWith({ reason: 'failed' }) + expect(rejected).not.toHaveBeenCalled() + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(3), time: 4, + data: { target, start: 0, removedCount: 2, inserted: [] }, + }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(4), time: 5, + data: { target, start: 0, inserted: [queuedItem(unclaimed.requestId)] }, + }) + await pushEvent(mock, { + type: 'turn/end', seq: SessionSeq(5), time: 6, data: { turn: 1, reason: { kind: 'blocked' } }, + }) + expect(rejected).toHaveBeenCalledExactlyOnceWith({ reason: 'failed' }) + expect(session.getSnapshot().pendingSubmissions.map(echo => echo.requestId)).toEqual([unclaimed.requestId]) }) - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, - data: { target: 'next-step', start: 0, inserted: [foreign] }, - }) - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(2), time: 3, - data: { target: 'next-step', start: 1, removedCount: 1, inserted: [], outcome: 'canceled' }, - }) - expect(canceled).toHaveBeenCalledExactlyOnceWith({ reason: 'failed' }) - expect(rejected).not.toHaveBeenCalled() - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(3), time: 4, - data: { target: 'next-step', start: 0, removedCount: 2, inserted: [] }, - }) - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(4), time: 5, - data: { target: 'next-step', start: 0, inserted: [queuedItem(unclaimed.requestId)] }, - }) - await pushEvent(mock, { - type: 'turn/end', seq: SessionSeq(5), time: 6, data: { turn: 1, reason: { kind: 'blocked' } }, - }) - expect(rejected).toHaveBeenCalledExactlyOnceWith({ reason: 'failed' }) - expect(session.getSnapshot().pendingSubmissions.map(echo => echo.requestId)).toEqual([unclaimed.requestId]) - }) + } it('a queue occurrence carrying the rpcId retires the echo (running-turn submissions)', async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) @@ -316,21 +454,28 @@ describe('observed retirement', () => { expect(session.getSnapshot().pendingSubmissions).toEqual([]) }) - for (const pending of [false, true]) { - it(`retires confirmed steering on resync with the Host input ${pending ? 'still pending' : 'outside the history window'}`, async ({ mock, start }) => { + for (const [target, pending] of [ + ['next-step', false], ['next-step', true], ['next-turn', false], ['next-turn', true], + ] as const) { + it(`retires confirmed ${target} input on resync with the Host input ${pending ? 'still pending' : 'outside the history window'}`, async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) await session.open() - session.handleRunning(true) + session.handleRunning(target === 'next-step') const onRetire = vi.fn() const handle = session.beginSubmission({ mode: 'steer', text: 'accepted', attachments: [], onRetire }) const refs = [imageRef('steer-image'), fileRef('steer-file')] const message = queuedItem(handle.requestId, refs) - await pushEvent(mock, { - type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, - data: { target: 'next-step', start: 0, inserted: [message] }, - }) + if (target === 'next-turn') { + session.projections.apply('inbox', { 'next-turn': [message], 'next-step': [] }, SessionSeq(0)) + await Promise.resolve() + } else { + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, + data: { target, start: 0, inserted: [message] }, + }) + } const unconfirmed = session.beginSubmission({ mode: 'steer', text: 'not accepted yet', attachments: [] }) - const inbox = { 'next-turn': [], 'next-step': pending ? [message] : [] } + const inbox = { 'next-turn': [], 'next-step': [], [target]: pending ? [message] : [] } const replacement = { ...historyValue([ev.turnEnd(SessionSeq(10), 2)], true), projections: { asOfSeq: 10, values: { inbox } }, @@ -430,6 +575,28 @@ describe('observed retirement', () => { }) describe('disposal', () => { + it('settles an admitted transcript as observed when disposed before the Inbox watermark arrives', async ({ mock, start }) => { + const session = await sessionBench(mock, start, SID) + await session.open() + const onRetire = vi.fn() + const handle = session.beginSubmission({ mode: 'queue', text: 'admitted', attachments: [], onRetire }) + const refs = [imageRef('held-image')] + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, + data: { target: 'next-turn', start: 0, inserted: [queuedItem(handle.requestId, refs)] }, + }) + await pushEvent(mock, { + type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, + data: { target: 'next-turn', start: 0, removedCount: 1, inserted: [] }, + }) + await pushEvent(mock, promptEvent(SessionSeq(2), handle.requestId, refs)) + expect(onRetire).not.toHaveBeenCalled() + await session.dispose() + await settleFrames() + expect(session.getSnapshot().pendingSubmissions).toEqual([]) + expect(onRetire).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: refs }) + }) + it('retires unsettled echoes as failed and preserves an already-observed settlement', async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) await session.open() diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 116c6b5ac5..b9540e5856 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: 09624a29e6769a48ab93a5a1e7080c196489ded9 -README.zh.md: 56c3e22bfed19057c0b6cf7e56cda6a666181e98 +README.md: e68799e282e4e7db5d84f91154cebadc1b0607b4 +README.zh.md: d00f9fe128487165949f7065bd78138d07d80c4f diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 09624a29e6..e68799e282 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -72,7 +72,9 @@ The completed-turn action footer follows the recorded Turn end. Its action row s ## Turn Process Folding -During uninterrupted following, local steering echoes remain mounted through Inbox acceptance and claim until the durable message arrives, without triggering tail following twice. Pending inputs follow Inbox order across clients, using matching local echoes in place. After reconnect, Host-owned rows replace receipt-confirmed local echoes; a claim awaiting admission may briefly have no bubble. +During uninterrupted following, local transcript and steering echoes remain mounted through Inbox acceptance and claim until the durable message arrives, without triggering tail following twice. Pending steering follows Inbox order across clients, using matching local echoes in place. After reconnect, Host-owned rows replace receipt-confirmed local echoes; a claim awaiting admission may briefly have no bubble. + +When Chat ends with an open Turn control and that Turn has no visible input, the first local transcript echo precedes the control. Other echoes remain at the flow tail. The control and echoes share one keyed list, so arrival of the control preserves the echo's mounted identity. Durable inputs replace their matching echoes in the same render. Work-details modes control process-group display and reasoning previews; eligible completed Turns fold their process without hiding the final answer. The [business-rule reference](src/client/conversation-nodes/README.md#display-modes) contains the mode table, title behavior, whole-Turn eligibility, clocks, and disclosure resets. @@ -148,6 +150,8 @@ None; Chat presentation does not assemble or mutate provider requests. - **Developer messages are not displayed** — presentation is intentionally deferred; encountering `developer/message` throws instead of rendering a fallback row. +- **Opening echoes predict local order** — several submissions made before the running update can all remain in Chat. Their initial order follows local submission order, not Host queue order; admission can reposition them when the Host receives requests in a different order. + - **The transcript reflects the loaded Session window** — older transcript nodes become available only after Session Controller loads the preceding event page. Turn navigation is wider than the window: the rail merges the loaded Turns with the host `turnOutline` projection, so every started Turn gets a fixed-pitch mark (10px apart; a ladder taller than the frame scrolls inside it with gradient fades), and activating an unloaded mark pages history through the Turn's `turn/start` seq before landing on its row. Without the projection (assemblies not mounting `dsh-session-turn-outline`) the rail falls back to loaded Turns only. - **Rail previews are card-sized** — one prompt line (50 characters) and up to three response lines (120), on loaded and unloaded Turns alike; an unloaded Turn's response arrives from the outline only once the Turn settled, so an open Turn previews its prompt (or just the Turn number) until then. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 56c3e22bfe..d00f9fe128 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -72,7 +72,9 @@ Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node, ## 轮次过程折叠 -正常在线时,本地 steering 回显在 Inbox 接受与领取期间保持挂载,直到持久消息到达,不会重复触发跟随底部。跨客户端的待处理输入遵循 Inbox 顺序,在匹配位置使用本地回显。重连后,Host 消息替代已有接收回执的本地回显;已领取但尚未入档时,气泡可能短暂消失。 +正常在线时,本地 transcript 与 steering 回显在 Inbox 接受与领取期间保持挂载,直到持久消息到达,不会重复触发跟随底部。跨客户端的待处理 steering 遵循 Inbox 顺序,在匹配位置使用本地回显。重连后,Host 消息替代已有接收回执的本地回显;已领取但尚未入档时,气泡可能短暂消失。 + +Chat 末尾为进行中的 Turn 控制行,且该轮尚无可见输入时,第一条本地 transcript 回显显示在控制行前。其他回显保留在正文末尾。控制行与回显共用一个 keyed 列表,因此控制行到达时不会重新挂载回显。持久输入在同一次渲染中替换匹配的回显。 工作过程展示模式控制过程组显示与推理预览;符合条件的已完成轮次折叠过程,但不隐藏最终答案。[业务规则明细](src/client/conversation-nodes/README.zh.md#display-modes) 统一说明模式表、组头行为、整轮折叠资格、时钟与开合重置。 @@ -148,6 +150,8 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且 - **不展示 developer 消息** — 展示能力有意留待后续实现;遇到 `developer/message` 时抛出错误,不渲染回退行。 +- **开场回显预测本地顺序**——运行状态更新前连续发出的多条消息可能都留在 Chat。初始排列遵循本地提交顺序,而非 Host 队列顺序;Host 按不同顺序接收请求时,入档可能调整它们的位置。 + - **transcript 只反映已加载的 Session 窗口**——只有会话控制器加载前一页事件后,更早的 transcript node 才会出现。轮次导航比窗口更宽:轨道把已加载的轮次与宿主 `turnOutline` 投影合并,每个已开始的轮次都有固定间距刻度(相隔 10px;阶梯高于外框时在框内滚动并以渐变淡出标示可滚方向),激活未加载刻度会先把历史分页拉到该轮次的 `turn/start` seq 再落到它的行上。没有该投影时(未挂载 `dsh-session-turn-outline` 的装配),轨道回退到仅显示已加载轮次。 - **导航预览按卡片尺寸截断**——提示词一行(50 字符)、回复至多三行(120 字符),已加载与未加载 Turn 一致;未加载 Turn 的回复要等该轮落定后才随大纲到达,进行中的轮次在此之前只预览提示词(或仅轮次号)。 diff --git a/packages/client/ui-chat/src/client/chat/ChatView.tsx b/packages/client/ui-chat/src/client/chat/ChatView.tsx index 0c84666147..b449abb26a 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatView.tsx @@ -6,6 +6,7 @@ import type { NodeKey, RenderEntry, RenderMessageImages, } from '@deepseek-ai/dsh-client-ui-conversation/client' import type { InboxState } from '@deepseek-ai/dsh-agent/types' +import type { PendingSubmission } from '@deepseek-ai/dsh-api-session-controller/client' import { Button, IconChevronDownOutlineRegular, MarkdownDelegateProvider, Modal, } from '@deepseek-ai/dsh-client-ui-primitives' @@ -28,40 +29,40 @@ function openFailureMessage(error: unknown, fallback: string): string { } /** - * Prompt-RPC identities already rendered by durable material: user/steering - * node sources plus queue occurrences. A submission echo whose identity - * appears here is hidden in the same render, so the echo→durable swap is - * atomic — no duplicate, no gap — regardless of when the echo leaves the - * session snapshot. + * Durable input identities suppress matching echoes in the same render. + * The last input's Turn also distinguishes an empty opening control from + * one whose human input or trigger notice is already present. */ -function observedRpcIds( +function observedInputs( order: readonly string[], nodes: ChatSnapshot['nodes'], - inbox: InboxState | undefined, -): { readonly durable: ReadonlySet; readonly pending: ReadonlySet } { +): { readonly rpcIds: ReadonlySet; readonly lastInputTurn: number | undefined } { const observed = new Set() + let lastInputTurn: number | undefined for (const key of order) { const node = nodes.get(key) - if (node === undefined || (node.kind !== 'user' && node.kind !== 'steering')) continue + if (node === undefined || (node.kind !== 'user' && node.kind !== 'steering' && node.kind !== 'turn-trigger')) continue + if (node.location.kind === 'turn' || node.location.kind === 'step') lastInputTurn = node.location.turn.turn + if (node.kind === 'turn-trigger') continue const source = (node.data as { readonly source?: unknown }).source as | { readonly kind?: unknown; readonly rpcId?: unknown } | undefined if (source?.kind === 'user' && typeof source.rpcId === 'string') observed.add(source.rpcId) } - const pending = new Set() - for (const { source } of [...inbox?.['next-turn'] ?? [], ...inbox?.['next-step'] ?? []]) { - if (source.kind === 'user' && 'rpcId' in source) pending.add(source.rpcId) - } - return { durable: observed, pending } + return { rpcIds: observed, lastInputTurn } } +type PendingInput = PendingSubmission | InboxState['next-step'][number] + type ChatNodeListProps = Omit, 'nodeKey' | 'groupPart'> & { readonly entries: readonly RenderEntry[] readonly useChatGroup: ChatViewSlotProps['useChatGroup'] + readonly pendingInputs: readonly PendingInput[] + readonly lastInputTurn: number | undefined } -const ChatNodeList = memo(function ChatNodeList({ entries, useChatGroup, ...seatProps }: ChatNodeListProps) { - return entries.map((entry) => { +const ChatNodeList = memo(function ChatNodeList({ entries, useChatGroup, pendingInputs, lastInputTurn, ...seatProps }: ChatNodeListProps) { + const rows = entries.map((entry) => { switch (entry.kind) { case 'node': return 'requestId' in item ? ( + + ) : ( + + )) + const tail = entries.at(-1) + const node = tail?.kind === 'node' ? seatProps.nodeStore.get(tail.key) : undefined + // An empty opening control follows one local transcript echo, never steering. + // All rows share this keyed list so inserting the control keeps the echo mounted. + if (node?.kind === 'turn-process' && node.location.kind === 'turn' + && node.location.turn.status === 'open' && node.location.turn.turn !== lastInputTurn) { + const index = pendingInputs.findIndex(item => 'requestId' in item && item.placement === 'transcript') + if (index !== -1) rows.splice(rows.length - 1, 0, ...pendingRows.splice(index, 1)) + } + return [...rows, ...pendingRows] }) /** @@ -150,14 +168,13 @@ export function ChatView({ // Submission echoes still awaiting their durable counterpart. `order` is the // recompute trigger: durable user material always arrives as an append, and // every append replaces the order array. - const visibleSubmissions = useMemo(() => { - if (pendingSubmissions.length === 0) return pendingSubmissions - const observed = observedRpcIds(order, nodeStore, inbox) - return pendingSubmissions.filter(submission => ( - submission.placement !== 'queued' && !observed.durable.has(submission.requestId) - && (submission.placement === 'steering' || !observed.pending.has(submission.requestId)) - )) - }, [pendingSubmissions, order, nodeStore, inbox]) + const [visibleSubmissions, lastInputTurn] = useMemo(() => { + if (pendingSubmissions.length === 0) return [pendingSubmissions, undefined] as const + const observed = observedInputs(order, nodeStore) + return [pendingSubmissions.filter(submission => ( + submission.placement !== 'queued' && !observed.rpcIds.has(submission.requestId) + )), observed.lastInputTurn] as const + }, [pendingSubmissions, order, nodeStore]) const pendingInputs = useMemo(() => { const local = new Map(visibleSubmissions.map(submission => [submission.requestId, submission])) const pending = inboxSteering.map((item) => { @@ -220,6 +237,8 @@ export function ChatView({ 'requestId' in item ? ( - - ) : ( - - ))}
diff --git a/packages/client/ui-chat/tests/chat-view.client.spec.tsx b/packages/client/ui-chat/tests/chat-view.client.spec.tsx index b30209d1d0..6a2bf5b34d 100644 --- a/packages/client/ui-chat/tests/chat-view.client.spec.tsx +++ b/packages/client/ui-chat/tests/chat-view.client.spec.tsx @@ -1685,6 +1685,14 @@ describe('ChatView', () => { ) const view = render() expect(view.getByText('即发即显').closest('[data-submission-echo]')).not.toBeNull() + const echo = view.getByText('即发即显').closest('[data-submission-echo]') + act(() => { h.setSession({ testInbox: { 'next-step': [], 'next-turn': [{ + id: 'idle-occurrence' as never, role: 'user', source: { kind: 'user', rpcId: 'req-1' as never }, + content: [{ type: 'text', text: '即发即显' }], + }] } }) }) + expect(view.getByText('即发即显').closest('[data-submission-echo]')).toBe(echo) + act(() => { h.setSession({ testInbox: { 'next-step': [], 'next-turn': [] } }) }) + expect(view.getByText('即发即显').closest('[data-submission-echo]')).toBe(echo) // The durable node arrives while the echo is STILL in the session // snapshot: the render-time rpcId dedupe keeps exactly one bubble. @@ -1708,6 +1716,95 @@ describe('ChatView', () => { expect(view.getAllByText('即发即显')).toHaveLength(1) }) + it.each(['compact', 'detailed', 'expanded'] as const)( + 'keeps the opening echo above a new Turn title and steering below it (%s)', (mode) => { + const opening = { + requestId: 'opening' as never, placement: 'transcript' as const, + time: 5_000, text: 'opening input', attachments: [], + } + const steer = { + requestId: 'steer' as never, placement: 'steering' as const, + time: 6_000, text: 'later steering', attachments: [], + } + const h = makeHarness({}, { pendingSubmissions: [opening, steer] }) + h.setTranscriptView(mode) + const view = render() + const echo = view.getByText(opening.text).closest('[data-submission-echo]')! + const steeringEcho = view.getByText(steer.text).closest('[data-submission-echo]')! + act(() => { h.setChat({ turnTimings: new Map([[1, { startTime: 1_000 }]]) }) }) + const title = view.container.querySelector('[data-chat-flow-kind="turn-process"]')! + expect(title).not.toBeNull() + expect(view.getByText(opening.text).closest('[data-submission-echo]')).toBe(echo) + expect(echo.compareDocumentPosition(title) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy() + expect(title.compareDocumentPosition(steeringEcho) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy() + const admitted: UserMessageNode & { turn: number } = { + ...user(2, opening.text), turn: 1, source: { kind: 'user', rpcId: opening.requestId }, + } + act(() => { h.setChat({ nodes: [admitted] }) }) + expect(view.getAllByText(opening.text)).toHaveLength(1) + expect(view.getByText(steer.text).closest('[data-submission-echo]')).toBe(steeringEcho) + expect(view.getByText(opening.text).compareDocumentPosition(title) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy() + }, + ) + + it('hands off an opening echo when the Turn and input arrive in one render', () => { + const h = makeHarness({}, { pendingSubmissions: [{ + requestId: 'same-frame' as never, placement: 'transcript', time: 1_000, text: 'same frame', attachments: [], + }] }) + const view = render() + const admitted: UserMessageNode & { turn: number } = { + ...user(2, 'same frame'), turn: 1, source: { kind: 'user', rpcId: 'same-frame' }, + } + act(() => { h.setChat({ nodes: [admitted], turnTimings: new Map([[1, { startTime: 1_000 }]]) }) }) + expect(view.getAllByText('same frame')).toHaveLength(1) + expect(view.container.querySelector('[data-submission-echo]')).toBeNull() + expect(renderedFlowKinds(view.container)).toEqual(['user', 'turn-process']) + }) + + it.each(['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'])( + 'uses the first local opening echo until Host admission identifies the input (%s)', (hostOrder) => { + const pending: SessionSnapshot['pendingSubmissions'] = ['A', 'B', 'C'].map(text => ({ + requestId: text as never, placement: 'transcript' as const, + time: 1_000, text: `input ${text}`, attachments: [], + })) + const h = makeHarness({}, { pendingSubmissions: pending }) + const view = render() + const flow = () => [...view.container.querySelectorAll( + '[data-submission-echo], [data-chat-flow-kind="user"], [data-chat-flow-kind="turn-process"]', + )].map(element => element.matches('[data-chat-flow-kind="turn-process"]') ? 'title' + : pending.find(input => element.textContent?.includes(input.text))!.requestId + + (element.hasAttribute('data-submission-echo') ? '*' : '')) + expect(flow()).toEqual(['A*', 'B*', 'C*']) + const inbox: InboxState = { 'next-step': [], 'next-turn': hostOrder.split('').map(id => ({ + id: id as never, role: 'user', source: { kind: 'user', rpcId: id as never }, + content: [{ type: 'text', text: `input ${id}` }], + })) } + act(() => { h.setSession({ testInbox: inbox }) }) + act(() => { h.setChat({ turnTimings: new Map([[1, { startTime: 1_000 }]]) }) }) + expect(flow()).toEqual(['A*', 'title', 'B*', 'C*']) + const admitted: UserMessageNode & { turn: number } = { + ...user(2, `input ${hostOrder[0]}`), turn: 1, + source: { kind: 'user', rpcId: hostOrder[0] }, + } + act(() => { h.setChat({ nodes: [admitted] }) }) + expect(flow()).toEqual([hostOrder[0], 'title', ...pending + .filter(input => input.requestId !== hostOrder[0]).map(input => `${input.requestId}*`)]) + act(() => { h.setSession({ pendingSubmissions: pending.filter(input => input.requestId !== hostOrder[0]) }) }) + expect(view.getAllByText(`input ${hostOrder[0]}`)).toHaveLength(1) + }, + ) + + it('leaves an opening echo below an empty historical Turn title', () => { + const h = makeHarness({ turnTimings: new Map([[1, { startTime: 1_000 }]]), turnEnds: new Map([[1, 2]]) }, { + pendingSubmissions: [{ requestId: 'opening' as never, placement: 'transcript', + time: 3_000, text: 'next input', attachments: [] }], + }) + const view = render() + const title = view.container.querySelector('[data-chat-flow-kind="turn-process"]')! + const echo = view.getByText('next input').closest('[data-submission-echo]')! + expect(title.compareDocumentPosition(echo) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy() + }) + it('does not pull the reader back to the tail when a local steer becomes Host-pending', () => { const h = makeHarness({ nodes: [assistant(1, 'working')] }, { running: true }) const view = render() diff --git a/packages/client/ui-conversation/README.i18n.yaml b/packages/client/ui-conversation/README.i18n.yaml index 99eba4e710..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: 48df40483632a7c63ec59d389f920d4dd663155b -README.zh.md: f5c34657264f97d8f0178859dcba5e3fc981f17d +README.md: 4823aa0a1ba5975c4efc8b6bdddd7ca8c57c068f +README.zh.md: 5ef8a1b6621bf8bab7e98cb18722a9aedda29101 diff --git a/packages/client/ui-conversation/README.md b/packages/client/ui-conversation/README.md index 48df404836..4823aa0a1b 100644 --- a/packages/client/ui-conversation/README.md +++ b/packages/client/ui-conversation/README.md @@ -68,9 +68,9 @@ 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` 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 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. +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`; 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. 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. +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. Queued submission echoes show “Sending…” beside disabled edit, remove, and steer buttons; a collapsed dock keeps the sending status in its header. A matching Host queue row replaces the echo and enables each action according to its normal text-content and running-state requirements. Prompt acknowledgement alone does not enable queue actions. A failed submission removes its echo and displays an error; the composer restores the failed draft when it is empty or still contains the previous automatic restoration, preserving subsequently typed text. diff --git a/packages/client/ui-conversation/README.zh.md b/packages/client/ui-conversation/README.zh.md index f5c3465726..5ef8a1b662 100644 --- a/packages/client/ui-conversation/README.zh.md +++ b/packages/client/ui-conversation/README.zh.md @@ -68,9 +68,9 @@ 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`,包含从冷状态恢复的消息。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`;queue 或历史以同一 `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。 +默认发送采用乐观提交: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。 排队提交的本地回显在禁用的编辑、删除、插话按钮旁显示“发送中…”;折叠后的队列在标题栏保留发送状态。匹配的 Host 队列行替换回显后,各操作按原有的纯文本内容和运行状态要求启用。仅收到提示词确认不会启用队列操作。提交失败会移除回显并显示错误;输入框为空或仍保留上一次自动恢复的内容时,composer 恢复失败草稿,保留用户随后输入的文字。 diff --git a/packages/client/ui-conversation/src/client/queue/QueueDock.tsx b/packages/client/ui-conversation/src/client/queue/QueueDock.tsx index 03146f3e4c..f8c7154ddd 100644 --- a/packages/client/ui-conversation/src/client/queue/QueueDock.tsx +++ b/packages/client/ui-conversation/src/client/queue/QueueDock.tsx @@ -150,13 +150,19 @@ export type QueueDockProps = PropsRuntime<'conversation.input.dock'> & QueueDock /** * Queue strip: one item renders directly; multiple items default to a - * collapsible count header; an empty queue renders nothing. Local submissions + * collapsible count header; an empty queue renders nothing. Local queued submissions * show sending status and disabled actions until their Host queue rows arrive. */ export function QueueDock({ useSession, useProjection, updateQueue, notify, loadImage, t }: QueueDockProps) { const inbox = useProjection('inbox') as unknown as InboxState | undefined - const queue = inbox?.['next-turn'] ?? EMPTY_QUEUE const pendingSubmissions = useSession(s => s.pendingSubmissions) + const queue = useMemo(() => { + const rows = inbox?.['next-turn'] ?? EMPTY_QUEUE + const inChat = new Set(pendingSubmissions.filter(item => item.placement === 'transcript').map(item => item.requestId)) + return inChat.size === 0 ? rows : rows.filter(({ source }) => ( + source.kind !== 'user' || !('rpcId' in source) || !inChat.has(source.rpcId) + )) + }, [inbox, pendingSubmissions]) const pendingQueue = useMemo(() => { const admitted = new Set(queue.flatMap(({ source }) => ( source.kind === 'user' && 'rpcId' in source ? [source.rpcId] : [] diff --git a/packages/client/ui-conversation/tests/queue-dock.client.spec.tsx b/packages/client/ui-conversation/tests/queue-dock.client.spec.tsx index 4ee258b45f..14dd0fb553 100644 --- a/packages/client/ui-conversation/tests/queue-dock.client.spec.tsx +++ b/packages/client/ui-conversation/tests/queue-dock.client.spec.tsx @@ -139,6 +139,35 @@ function imageRow(id: string, refId: string, text = ''): UserMessage { } describe('QueueDock', () => { + it.each(['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'])( + 'keeps repeated queued submissions in Dock through acceptance and FIFO claims (%s)', (hostOrder) => { + const pending: SessionSnapshot['pendingSubmissions'] = ['A', 'B', 'C'].map(id => ({ + requestId: id as never, placement: 'queued', time: 1_000, + text: `input ${id}`, attachments: [], + })) + const initial = { ...snapshotWith([]), pendingSubmissions: pending } + const source = liveSession(initial) + const view = render() + fireEvent.click(view.getByRole('button', { name: /3 条排队消息/ })) + const order = () => [...view.container.querySelectorAll('[data-queue-dock] li')] + .map(element => pending.find(input => element.textContent?.includes(input.text))!.requestId) + expect(order()).toEqual(['A', 'B', 'C']) + const queued: UserMessage[] = [] + for (const id of hostOrder) { + const submission = pending.find(input => input.requestId === id)! + queued.push({ ...row(id, submission.text), source: { kind: 'user', rpcId: submission.requestId } }) + const remaining = pending.filter(input => !hostOrder.slice(0, queued.length).includes(input.requestId)) + act(() => { source.push({ ...snapshotWith([...queued]), pendingSubmissions: remaining }) }) + expect(order()).toEqual([...queued.map(item => item.id), ...remaining.map(input => input.requestId)]) + } + for (let claimed = 1; claimed <= queued.length; claimed++) { + act(() => { source.push(snapshotWith(queued.slice(claimed))) }) + expect(order()).toEqual(hostOrder.slice(claimed).split('')) + } + expect(view.container.querySelector('[data-queue-dock]')).toBeNull() + }, + ) + it('renders null while the queue is empty', () => { const snap = snapshotWith([]) const source = liveSession(snap) @@ -201,6 +230,28 @@ describe('QueueDock', () => { expect((view.getByRole('textbox') as HTMLTextAreaElement).value).toBe('等待上传') }) + it('omits a local Chat submission while keeping other queued rows and queued echoes', () => { + const local = { ...row('idle', '留在正文'), source: { kind: 'user' as const, rpcId: 'idle-request' as never } } + const pending: TestSnapshot = { + ...snapshotWith([local, row('older', '原有排队')]), + pendingSubmissions: [{ + requestId: 'idle-request' as never, placement: 'transcript', time: 1, text: '留在正文', attachments: [], + }], + } + const source = liveSession(pending) + const view = render() + expect(view.queryByText('留在正文')).toBeNull() + expect(view.getByText('原有排队')).toBeTruthy() + expect((view.getByRole('button', { name: '编辑排队消息' }) as HTMLButtonElement).disabled).toBe(false) + act(() => { source.push({ ...pending, pendingSubmissions: [...pending.pendingSubmissions, { + requestId: 'queued-request' as never, placement: 'queued', time: 2, text: '新排队回显', attachments: [], + }] }) }) + fireEvent.click(view.getByRole('button', { name: '2 条排队消息发送中…' })) + expect(view.queryByText('留在正文')).toBeNull() + expect(view.getByText('原有排队')).toBeTruthy() + expect(view.getByText('新排队回显').closest('[data-submission-echo]')).not.toBeNull() + }) + it('loads the durable thumbnail after replacing a local image echo', async () => { const pending: TestSnapshot = { ...snapshotWith([]), diff --git a/tsconfig.host.json b/tsconfig.host.json index c1c91bab52..c551469419 100644 --- a/tsconfig.host.json +++ b/tsconfig.host.json @@ -114,6 +114,7 @@ "apps/web/tests/markdown-inline-code-links.e2e.ts", "apps/web/tests/clickable-links-gallery.e2e.ts", "apps/web/tests/queue-actions.e2e.ts", + "apps/web/tests/idle-submission-handoff.e2e.ts", "apps/web/tests/queue-image.e2e.ts", "apps/web/tests/skill-invocation-policy.e2e.ts", "apps/web/tests/skill-user-invoke.e2e.ts", From c92d5ebe185b52f08ed989111fe428e8045b8642 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 21:05:50 +0800 Subject: [PATCH 19/35] perf(ui): fit tooltips from observed sizes --- apps/web/tests/goal-bar.e2e.ts | 7 ++ .../client/ui-primitives/README.i18n.yaml | 4 +- packages/client/ui-primitives/README.md | 2 + packages/client/ui-primitives/README.zh.md | 2 + packages/client/ui-primitives/src/Tooltip.tsx | 85 ++++++++--------- .../tests/tooltip.client.spec.tsx | 95 ++++++++++++++----- 6 files changed, 126 insertions(+), 69 deletions(-) diff --git a/apps/web/tests/goal-bar.e2e.ts b/apps/web/tests/goal-bar.e2e.ts index 23bdf194cd..787b69e959 100644 --- a/apps/web/tests/goal-bar.e2e.ts +++ b/apps/web/tests/goal-bar.e2e.ts @@ -67,11 +67,18 @@ describe('web e2e: goal bar clear convergence', () => { declaredTop: Number.parseFloat(element.style.top), tooltipCenter: tooltip.left + tooltip.width / 2, tooltipTop: tooltip.top, + left: tooltip.left, + right: tooltip.right, + viewportWidth: window.innerWidth, + visibility: element.style.visibility, } }) expect(tooltipGeometry).not.toBeNull() expect(Math.abs(tooltipGeometry!.tooltipCenter - tooltipGeometry!.declaredLeft)).toBeLessThan(2) expect(Math.abs(tooltipGeometry!.tooltipTop - tooltipGeometry!.declaredTop)).toBeLessThan(2) + expect(tooltipGeometry!.visibility).toBe('visible') + expect(tooltipGeometry!.left).toBeGreaterThanOrEqual(12) + expect(tooltipGeometry!.right).toBeLessThanOrEqual(tooltipGeometry!.viewportWidth - 12) await page.mouse.move(0, 0) await pauseTooltip.waitFor({ state: 'hidden' }) const snapshot = await captureStableAria(page, '[data-goal-bar]', scaffold.workspaceCwd) diff --git a/packages/client/ui-primitives/README.i18n.yaml b/packages/client/ui-primitives/README.i18n.yaml index f643f2615b..2bcf9054e3 100644 --- a/packages/client/ui-primitives/README.i18n.yaml +++ b/packages/client/ui-primitives/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-primitives/README.md -README.md: 43476f2aa531decbe1eff1b6664530f7873723b4 -README.zh.md: 44f5c6e123bd7d6e861fec9554beb2fccf827927 +README.md: 332845471056e718d49d79a077b76a02c79bafe2 +README.zh.md: 598b561e79e4a935f7f033002e68b91c3a3d84de diff --git a/packages/client/ui-primitives/README.md b/packages/client/ui-primitives/README.md index 43476f2aa5..3328454710 100644 --- a/packages/client/ui-primitives/README.md +++ b/packages/client/ui-primitives/README.md @@ -79,6 +79,8 @@ Writing your own component in your own package is fine when the need is genuinel The catalog above lists what each export is for; this section covers the behavior that props alone do not show. Product icon names omit artboard sizes and end in `Regular` for the supplied one-pixel artwork or `Medium` for the same geometry at a 1.3px stroke; the `size` prop controls rendered dimensions ([decision](../../../.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.md)). Each product, reference, link, and permission glyph intentionally keeps both weight exports even when the current product uses only one, so callers can choose emphasis without adding another API later; fill-only pairs render identically. `IconWarningOutlineRegular`/`Medium` use a circle; `IconWarningTriangleOutlineRegular`/`Medium` use a rounded triangle. `FishLogo` and `BrandWordmark` fill brand slots. `FileTypeIcon` renders the traditional 28px spreadsheet, folder, HTML, image, Markdown, generic, PDF, PPT, video, and Word glyphs, and uses the imported square technology artwork for the established 48 code and configuration categories. The import replaces artwork only: archive-only categories do not extend `CodeFileType`. `classifyFileType` applies exact filename, prefix, suffix, optional project-context, and extension rules in that order; React names win over TypeScript/JavaScript, Angular suffixes win over their base extension, and a Dart file becomes Flutter only when the supplied project files contain a `pubspec.yaml` with `flutter:`. Markdown and SVG remain traditional Markdown and image files. Spreadsheet mappings include CSV, TSV, Excel workbooks and templates, OpenDocument spreadsheets, and Numbers; KEY maps to slides, while RTF/ODT/Pages map to documents. `fileExtension` exposes the same basename and final-dot parsing for adjacent metadata labels. Traditional glyphs use a solid category-colored sheet with a white mark and translucent white corner; the generic file uses a grey sheet and darker grey corner. Callers may override the sheet color through `--dsh-file-type-icon-color`. The full-color technology artwork is the deliberate exception and retains its embedded palette. All glyphs are decorative and carry no label. `LinkIconMedium` is the leading glyph for clickable artifact links — globe, folder, code, image, document, or plain paper, and for a `url` link the mark of a well-known site named by its `href` — the developer sites a transcript usually cites (GitHub, GitLab, npm, PyPI, Stack Overflow, MDN, Wikipedia, Hacker News, YouTube, X, Bilibili, Zhihu, Juejin, CSDN) and mainstream search, video, social, shopping, and reference sites (Google, Baidu, DuckDuckGo, TikTok, Netflix, Spotify, Facebook, Instagram, Reddit, Telegram, WhatsApp, WeChat, QQ, Weibo, Taobao, AliExpress, eBay, Quora, V2EX, Apple) — while `classifyLinkPath` folds the shared file types into that existing six-category vocabulary. `ConnectionIndicator` renders a warning-colored disconnected action whose permanent retry glyph marks the retry action beside the owner-supplied outage label, the shared ongoing loader beside a label whose one-to-three dots advance every 500ms independently of retry timing, or a success-colored recovered status. Clicking either warning state requests an immediate reconnect; no hover interaction changes the copy. The pill fades in on appearance, fades out for 150ms before unmounting, and sizes to its current label. Its owner supplies visibility, the recovery hold, localized labels, and the immediate-reconnect callback; the primitive uses no native title tooltip. `useAnchoredPosition` and `useAnchoredMaxHeight` keep floating panels and bottom-anchored overlays clamped to the viewport and following their anchor; `useAnchoredMaxHeight` and portalled `Menu` widen their 12px top viewport margin to the frame's published `--dsh-frame-top-clearance`. `HoverCard` keeps its portaled preview reachable across the anchor gap and can expose a copy button through the `copyText` prop. Its `preview` variant uses the anchor or `widthAnchorRef` element’s width minus 48px, centers the panel with 24px side insets, and places it above or below the row within the viewport. The panel keeps the frame’s top clearance, caps its height at 420px, and follows content and anchor resizing; Escape or pointer and keyboard activation of the anchor dismisses it. The whole preview fades in and out over 100ms; a closing preview stops receiving pointer input and unmounts after the fade. Re-entering the anchor during the fade restores it. Reduced-motion preferences suppress the transition. Copy labels are required only when copying is enabled. `Toast` uses the owner's `holdMs` for both the fade delay and its hold-and-fade lifetime. Rerenders with unchanged `holdMs` do not restart that lifetime; completion uses the latest callback, and fully faded actions cannot receive input. A new component key restarts the banner. `rankByName` is the `/` menu's shared candidate ranker for the command and skill sources: the query must be a case-insensitive ordered subsequence of the name; prefix hits rank first, then alignment score, then source order. Portalled `Menu` lists follow their anchor during dragging and CSS transforms, and stop tracking when closed. `Menu.autoFocus` focuses its first enabled item, supports Arrow Up/Down and Home/End navigation, and focuses the first button in the anchor on Escape; it is opt-in for action menus. +`Tooltip` reads the anchor on hover or keyboard focus and fits its bubble from `ResizeObserver` border-box sizes. The bubble stays hidden until its first fit, slides inside the horizontal viewport margin, and flips above or below only when the opposite side fits. Label-size and viewport changes reuse the anchor coordinates; fitting does not synchronously measure the bubble or trigger a React render. + ### Rendering agent output The nearest `MarkdownDelegateProvider` supplies optional `openExternalLink` and `openFile` navigation callbacks. Nested providers replace the enclosing capabilities, and callback changes reach already-rendered links without rebuilding Markdown. Its `openFile` makes local Markdown links clickable after settlement. Absolute and workspace-relative paths support percent escapes and `#L24` / `#L24-L30` fragments; ranges open at their first line. Literal `?` and `#` in filenames must be percent-encoded. The tooltip uses the decoded path and supplies the accessible name when the label is empty. The callback receives the decoded path and optional line, while the renderer preserves the label and displays a file icon. Without a callback, local links remain text. URL schemes, queries, unsupported fragments, and malformed destinations never reach the file opener. diff --git a/packages/client/ui-primitives/README.zh.md b/packages/client/ui-primitives/README.zh.md index 44f5c6e123..598b561e79 100644 --- a/packages/client/ui-primitives/README.zh.md +++ b/packages/client/ui-primitives/README.zh.md @@ -79,6 +79,8 @@ kind: "package-library" 上面的目录说明每个导出的用途;本节讲 props 本身看不出来的行为。产品图标名称不含画板尺寸,以 `Regular` 表示原始 1px 图形,以 `Medium` 表示同一几何的 1.3px 描边;`size` prop 控制渲染尺寸([决定](../../../.agents/notes/implemented/architecture/2026-09-16-size-neutral-product-icon-weights.zh.md))。每个产品、引用、链接与权限图形都会有意保留两种线重导出,即使当前产品只使用其中一种,也让调用方无需再次扩展 API 就能选择强调程度;仅填充的成对图形外观相同。`IconWarningOutlineRegular`/`Medium` 使用圆形;`IconWarningTriangleOutlineRegular`/`Medium` 使用圆角三角形。`FishLogo` 与 `BrandWordmark` 填充品牌 slot。`FileTypeIcon` 渲染传统的 28px spreadsheet、folder、HTML、image、Markdown、generic、PDF、PPT、video 与 Word 图形,并为现有 48 个代码和配置类别使用导入的方形技术图形。该导入只替换图形:资源包中额外的类别不会扩展 `CodeFileType`。`classifyFileType` 按完整文件名、前缀、后缀、可选项目上下文、扩展名的顺序匹配;React 文件名优先于 TypeScript/JavaScript,Angular 后缀优先于基础扩展名,只有传入的项目文件包含带 `flutter:` 的 `pubspec.yaml` 时 Dart 文件才使用 Flutter。Markdown 与 SVG 仍分别使用传统 Markdown 与图片图形。表格映射包括 CSV、TSV、Excel 工作簿与模板、OpenDocument 表格和 Numbers;KEY 映射为幻灯片,RTF/ODT/Pages 映射为文档。`fileExtension` 为相邻元数据 label 暴露同一套 basename 与最终点号解析。传统图形使用实色分类底板、白色标记和半透明白色折角;通用文件使用灰色底板与较深灰色折角。调用方可通过 `--dsh-file-type-icon-color` 覆盖底板颜色。全彩技术图形是明确例外,会保留其内嵌调色板。所有图形都是装饰性的,不自带 label。`LinkIconMedium` 是可点击产物链接的前置图形——地球、文件夹、代码、图片、文档或纸张,`url` 链接的 `href` 指向已知站点时则改用该站点自己的标记——转写内容常引用的开发者站点(GitHub、GitLab、npm、PyPI、Stack Overflow、MDN、Wikipedia、Hacker News、YouTube、X、Bilibili、知乎、掘金、CSDN),以及主流搜索、视频、社交、购物与参考资料站点(Google、百度、DuckDuckGo、TikTok、Netflix、Spotify、Facebook、Instagram、Reddit、Telegram、WhatsApp、微信、QQ、微博、淘宝、速卖通、eBay、Quora、V2EX、Apple)——`classifyLinkPath` 把共享文件类型折叠进原有六类词汇。`ConnectionIndicator` 可渲染警告色的断联操作(常驻重试图形指明重试动作,断联文案由持有方提供)、共享 ongoing loading 加一至三个点以独立于 retry 时序的 500ms 节奏推进的连接中状态,或成功色的恢复状态。点击任一警告状态都会请求立即重连;没有任何悬停交互会改变文案。药丸出现时淡入、卸载前淡出 150ms,宽度随当前 label 自适应。它的持有方提供可见性、恢复驻留时间、本地化 label 与立即重连回调;该原语不使用原生 title tooltip。`useAnchoredPosition` 与 `useAnchoredMaxHeight` 让浮动面板与底部锚定浮层始终钳制在视口内并跟随锚点;`useAnchoredMaxHeight` 与 portal 模式的 `Menu` 会把 12px 的视口顶部边距加宽到框架发布的 `--dsh-frame-top-clearance`。`HoverCard` 通过指针离开宽限期让采用 portal 的预览在跨过锚点间隙时仍可触及,并可通过 `copyText` prop 提供复制按钮。其 `preview` 变体使用 anchor 或 `widthAnchorRef` 元素的宽度减去 48px,左右各内缩 24px,并在视口内放置于行的上方或下方。浮层避开框架顶部保留区,高度最多 420px,会跟随内容及 anchor 尺寸变化;Escape 或通过鼠标和键盘激活锚点可将其关闭。整个浮层的淡入和淡出各持续 100ms;关闭中的浮层停止接收指针输入,淡出后卸载。在淡出期间移回锚点可恢复显示。减少动态效果偏好会禁用过渡动画。只有启用复制时才必须提供复制标签。`Toast` 使用调用方的 `holdMs` 同时控制淡出延迟与停留加淡出的总时长。`holdMs` 未变时,父组件重渲染不会重启该生命周期;完成时调用最新回调,完全淡出的操作不能接收输入。新的组件 key 会重新开始横幅周期。`rankByName` 是 `/` 菜单命令源与 skill(技能)源共享的候选排序器:查询必须是名字的不区分大小写的有序子序列;前缀命中排最前,其次按对齐分数,再按来源顺序。 portal 模式的 `Menu` 列表会在拖动和 CSS 变换期间跟随锚点,并在关闭时停止跟踪。`Menu.autoFocus` 聚焦首个启用项,支持上下方向键与 Home/End 导航,并在 Escape 时聚焦 anchor 内的第一个按钮;操作菜单可显式启用。 +`Tooltip` 在悬停或键盘聚焦时读取锚点位置,再根据 `ResizeObserver` 提供的边框盒尺寸调整气泡。首次定位前气泡保持隐藏;横向移入视口留白,仅在另一侧容得下时上下翻转。标签尺寸与视口变化复用锚点坐标;定位不会同步测量气泡,也不会触发 React 渲染。 + ### 渲染 agent 输出 最近的 `MarkdownDelegateProvider` 提供可选的 `openExternalLink` 和 `openFile` 导航回调。嵌套 Provider 替换外层能力,回调变化无需重新构建 Markdown 即可到达已渲染链接。其 `openFile` 使本地 Markdown 链接在落定后可点击。绝对路径和工作区相对路径支持百分号转义以及 `#L24` / `#L24-L30` 片段;范围定位到起始行。文件名中的字面 `?` 和 `#` 必须百分号编码。悬停提示使用解码后的路径,并在标签为空时提供可访问名称。回调接收解码后的路径和可选行号,渲染器保留标签并显示文件图标。不传回调时,本地链接仍为文本。URL 协议、查询串、不支持的片段及格式错误的目标不会传给文件打开器。 diff --git a/packages/client/ui-primitives/src/Tooltip.tsx b/packages/client/ui-primitives/src/Tooltip.tsx index 0316840a25..93b06322ca 100644 --- a/packages/client/ui-primitives/src/Tooltip.tsx +++ b/packages/client/ui-primitives/src/Tooltip.tsx @@ -1,6 +1,6 @@ /** Anchor-preserving tooltips with optional body portals for clipping containers. */ -import { cloneElement, createContext, useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react' +import { cloneElement, createContext, useCallback, useContext, useEffect, useRef, useState } from 'react' import type { FocusEventHandler, MouseEventHandler, MutableRefObject, ReactElement, Ref } from 'react' import { createPortal } from 'react-dom' import css from './Tooltip.module.css' @@ -53,7 +53,8 @@ if (typeof window !== 'undefined') { * @param props.maxWidth - bubble width cap in pixels, for labels long enough that the default * half-viewport cap would render a slab wider than the surface the anchor sits on. * @param props.children - a single anchor element; its own ref (callback or object) is forwarded alongside the tooltip's. - * @returns the cloned anchor plus a fixed-position bubble, optionally portaled to the body; clicking the + * @returns the cloned anchor plus a fixed-position bubble, optionally portaled to the body. + * The bubble stays hidden until ResizeObserver supplies its size for viewport fitting; clicking the * anchor dismisses the bubble until the next trigger, and focus arriving after a pointer * interaction (a closing menu refocusing its trigger) never raises it. */ @@ -70,50 +71,15 @@ export function Tooltip({ label, side = 'right', align = 'center', delayMs = 0, // The anchor's edges rather than final coordinates: a vertical flip has to // re-derive the bubble's own top from the opposite edge. const [pos, setPos] = useState<{ x: number; top: number; bottom: number } | null>(null) - // Where the bubble actually sits, which is the requested side until the - // viewport refuses it. - const [placement, setPlacement] = useState(side) const bubble = useRef(null) const resolvedLabel = pos === null ? null : typeof label === 'function' ? label() : label const y = pos === null ? 0 - : placement === 'right' + : side === 'right' ? pos.top + (pos.bottom - pos.top) / 2 - : placement === 'top' ? pos.top - 8 : pos.bottom + 8 - const EDGE_MARGIN = 12 - // Viewport fit: fixed positioning knows nothing about edges, so a centered - // bubble near the right edge would clip and a long label under an anchor low - // on the page would run off the bottom. Horizontally the bubble slides back - // inside; vertically it flips to the opposite side, which is the only move - // that does not cover the anchor being read. Each measurement resets the base - // position first, so a shorter label or a larger viewport releases a previous - // adjustment without another render. - useLayoutEffect(() => { - if (pos === null) return - const fit = () => { - const el = bubble.current - /* v8 ignore next -- pos is set only while the bubble is mounted. */ - if (el === null) return - el.style.left = `${pos.x}px` - const r = el.getBoundingClientRect() - let dx = 0 - if (r.right > window.innerWidth - EDGE_MARGIN) dx = window.innerWidth - EDGE_MARGIN - r.right - if (r.left + dx < EDGE_MARGIN) dx = EDGE_MARGIN - r.left - el.style.left = `${pos.x + dx}px` - if (side === 'right') return - // Flip only into a side that genuinely fits, so an anchor with room on - // neither side keeps the requested placement instead of oscillating. - const fitsBelow = pos.bottom + 8 + r.height <= window.innerHeight - EDGE_MARGIN - const fitsAbove = pos.top - 8 - r.height >= EDGE_MARGIN - if (placement === 'bottom' && !fitsBelow && fitsAbove) setPlacement('top') - if (placement === 'top' && !fitsAbove && fitsBelow) setPlacement('bottom') - } - fit() - window.addEventListener('resize', fit) - return () => { window.removeEventListener('resize', fit) } - }, [placement, pos, resolvedLabel, side]) + : side === 'top' ? pos.top - 8 : pos.bottom + 8 const showTimer = useRef | null>(null) // Hover and focus are independent triggers: the bubble hides only after // BOTH clear (hovering away from a focused anchor must not drop it). @@ -128,6 +94,40 @@ export function Tooltip({ label, side = 'right', align = 'center', delayMs = 0, const [suppressed, setSuppressed] = useState(false) const announce = useCallback((active: boolean) => { suppressAncestors?.(active) }, [suppressAncestors]) const visible = pos !== null && !disabled + // ResizeObserver supplies the laid-out border box; fitting never reads + // geometry after a position write or needs a React commit to flip sides. + useEffect(() => { + const el = bubble.current + if (pos === null || !visible || suppressed || el === null) return + const edgeMargin = 12 + let size: ResizeObserverSize | undefined + let placement = side + const fit = () => { + if (size === undefined) return + const { inlineSize: width, blockSize: height } = size + const offset = side === 'right' ? 0 : align === 'end' ? width : width / 2 + const left = Math.max(edgeMargin, Math.min(pos.x - offset, window.innerWidth - edgeMargin - width)) + const fitsBelow = pos.bottom + 8 + height <= window.innerHeight - edgeMargin + const fitsAbove = pos.top - 8 - height >= edgeMargin + if (placement === 'bottom' && !fitsBelow && fitsAbove) placement = 'top' + else if (placement === 'top' && !fitsAbove && fitsBelow) placement = 'bottom' + el.style.left = `${left + offset}px` + el.style.top = `${placement === 'right' ? (pos.top + pos.bottom) / 2 + : placement === 'top' ? pos.top - 8 : pos.bottom + 8}px` + el.dataset.side = placement + el.style.visibility = 'visible' + } + const observer = new ResizeObserver((entries) => { + size = entries[0]?.borderBoxSize[0] + fit() + }) + observer.observe(el, { box: 'border-box' }) + window.addEventListener('resize', fit) + return () => { + observer.disconnect() + window.removeEventListener('resize', fit) + } + }, [align, pos, side, suppressed, visible]) useEffect(() => { announce(visible) return () => { announce(false) } @@ -155,9 +155,6 @@ export function Tooltip({ label, side = 'right', align = 'center', delayMs = 0, /* v8 ignore next -- the ref is attached by event time: events fire on the cloned anchor. */ if (el === null) return const r = el.getBoundingClientRect() - // Every show starts from the requested side; the fit pass flips it only - // where this anchor's position demands it. - setPlacement(side) setPos({ x: side === 'right' ? r.right + 10 : align === 'end' ? r.right : r.left + r.width / 2, top: r.top, @@ -189,10 +186,10 @@ export function Tooltip({ label, side = 'right', align = 'center', delayMs = 0, {resolvedLabel} diff --git a/packages/client/ui-primitives/tests/tooltip.client.spec.tsx b/packages/client/ui-primitives/tests/tooltip.client.spec.tsx index 5d6633c387..b8d0825b91 100644 --- a/packages/client/ui-primitives/tests/tooltip.client.spec.tsx +++ b/packages/client/ui-primitives/tests/tooltip.client.spec.tsx @@ -1,11 +1,63 @@ // @vitest-environment jsdom import { act, cleanup, fireEvent, render, screen } from '@testing-library/react' -import { afterEach, describe, expect, it, vi } from 'vitest' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { Tooltip } from '@deepseek-ai/dsh-client-ui-primitives' -afterEach(cleanup) +let bubbleSize: ResizeObserverSize +let automaticResize: boolean +const observers: TooltipResizeObserver[] = [] + +class TooltipResizeObserver implements ResizeObserver { + private target: Element | undefined + constructor(private readonly callback: ResizeObserverCallback) { observers.push(this) } + observe(target: Element): void { + this.target = target + if (automaticResize) this.deliver() + } + unobserve(): void { this.target = undefined } + disconnect(): void { this.target = undefined } + deliver(): void { + if (this.target === undefined) return + this.callback([{ + target: this.target, borderBoxSize: [bubbleSize], contentBoxSize: [bubbleSize], + devicePixelContentBoxSize: [bubbleSize], + contentRect: new DOMRect(0, 0, bubbleSize.inlineSize, bubbleSize.blockSize), + }], this) + } +} + +beforeEach(() => { + bubbleSize = { inlineSize: 0, blockSize: 0 } + automaticResize = true + observers.length = 0 + vi.stubGlobal('ResizeObserver', TooltipResizeObserver) +}) +afterEach(() => { + cleanup() + vi.restoreAllMocks() + vi.unstubAllGlobals() +}) describe('Tooltip', () => { + it('fits from observed sizes without synchronously measuring the bubble', () => { + automaticResize = false + const measured = vi.spyOn(Element.prototype, 'getBoundingClientRect') + const view = render() + const anchor = screen.getByText('anchor') + fireEvent.mouseEnter(anchor) + const bubble = view.container.querySelector('[role="tooltip"]')! + expect(measured.mock.contexts).toEqual([anchor]) + expect(bubble.style.visibility).toBe('hidden') + bubbleSize = { inlineSize: 100, blockSize: 20 } + act(() => { observers[0]!.deliver() }) + expect(screen.getByRole('tooltip').style.left).toBe('62px') + fireEvent(window, new Event('resize')) + expect(measured.mock.contexts).toEqual([anchor]) + const disconnect = vi.spyOn(observers[0]!, 'disconnect') + view.unmount() + expect(disconnect).toHaveBeenCalledOnce() + }) + it('resolves lazy labels only after the bubble becomes visible', () => { vi.useFakeTimers() try { @@ -64,9 +116,7 @@ describe('Tooltip', () => { const bubble = screen.getByRole('tooltip') expect(bubble.textContent).toBe('Open sidebar') expect(bubble.getAttribute('data-side')).toBe('right') - // jsdom rects are all-zero: right placement lands at the +10 gutter, then - // the zero-width measured rect clamps to the 12px edge margin (10 + 12). - expect(bubble.style.left).toBe('22px') + expect(bubble.style.left).toBe('12px') expect(bubble.style.top).toBe('0px') fireEvent.mouseLeave(anchor) expect(screen.queryByRole('tooltip')).toBeNull() @@ -89,13 +139,12 @@ describe('Tooltip', () => { expect(screen.queryByRole('tooltip')).toBeNull() }) - // jsdom's default rects are all-zero, so the clamp tests stub the measured - // rect (anchor and bubble share the prototype stub) and derive expectations - // from it: pos.x = anchor center, then shifted by the measured overflow. + // Anchor geometry and observed bubble sizes are independent browser inputs. const rect = (left: number, right: number): DOMRect => ({ left, right, top: 0, bottom: 20, width: right - left, height: 20, x: left, y: 0, toJSON: () => ({}) }) it('aligns the end of a bottom tooltip with the anchor right edge', () => { + bubbleSize = { inlineSize: 100, blockSize: 20 } const spy = vi.spyOn(Element.prototype, 'getBoundingClientRect').mockReturnValue(rect(100, 200)) try { render( @@ -125,6 +174,7 @@ describe('Tooltip', () => { }) it('clamps a bubble overflowing the right viewport edge back inside', () => { + bubbleSize = { inlineSize: 200, blockSize: 20 } const spy = vi.spyOn(Element.prototype, 'getBoundingClientRect').mockReturnValue(rect(900, 1100)) try { render( @@ -144,10 +194,8 @@ describe('Tooltip', () => { it('reclamps after label and viewport width changes', () => { const originalWidth = window.innerWidth - const spy = vi.spyOn(Element.prototype, 'getBoundingClientRect').mockImplementation(function (this: Element) { - if (this.getAttribute('role') !== 'tooltip') return rect(900, 1000) - return this.textContent === 'Wide' ? rect(900, 1100) : rect(850, 950) - }) + bubbleSize = { inlineSize: 200, blockSize: 20 } + const spy = vi.spyOn(Element.prototype, 'getBoundingClientRect').mockReturnValue(rect(900, 1000)) try { const view = render( @@ -155,18 +203,22 @@ describe('Tooltip', () => { , ) fireEvent.mouseEnter(screen.getByText('anchor')) - expect(screen.getByRole('tooltip').style.left).toBe('862px') + expect(screen.getByRole('tooltip').style.left).toBe('912px') view.rerender( , ) + bubbleSize = { inlineSize: 100, blockSize: 20 } + act(() => { observers[0]!.deliver() }) expect(screen.getByRole('tooltip').style.left).toBe('950px') Object.defineProperty(window, 'innerWidth', { configurable: true, value: 900 }) fireEvent(window, new Event('resize')) - expect(screen.getByRole('tooltip').style.left).toBe('888px') + expect(screen.getByRole('tooltip').style.left).toBe('838px') + expect(observers).toHaveLength(1) + expect(spy).toHaveBeenCalledOnce() } finally { Object.defineProperty(window, 'innerWidth', { configurable: true, value: originalWidth }) spy.mockRestore() @@ -174,6 +226,7 @@ describe('Tooltip', () => { }) it('clamps a bubble past the left viewport edge back inside', () => { + bubbleSize = { inlineSize: 100, blockSize: 20 } const spy = vi.spyOn(Element.prototype, 'getBoundingClientRect').mockReturnValue(rect(-20, 80)) try { render( @@ -190,16 +243,12 @@ describe('Tooltip', () => { } }) - /** Anchor and bubble rects, so a placement test measures real room rather than jsdom's all-zero boxes. */ - const placed = (anchorTop: number, anchorBottom: number, bubbleHeight: number) => - vi.spyOn(Element.prototype, 'getBoundingClientRect').mockImplementation(function (this: Element) { - const [top, bottom] = this.getAttribute('role') === 'tooltip' - ? [0, bubbleHeight] - : [anchorTop, anchorBottom] - return { - left: 100, right: 200, top, bottom, width: 100, height: bottom - top, x: 100, y: top, toJSON: () => ({}), - } + const placed = (top: number, bottom: number, bubbleHeight: number) => { + bubbleSize = { inlineSize: 100, blockSize: bubbleHeight } + return vi.spyOn(Element.prototype, 'getBoundingClientRect').mockReturnValue({ + left: 100, right: 200, top, bottom, width: 100, height: bottom - top, x: 100, y: top, toJSON: () => ({}), }) + } it('supports top placement for anchors at the viewport bottom', () => { const spy = placed(700, 720, 20) From 37372101b50511f6099ba485c8d5470977083403 Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 17:11:56 +0800 Subject: [PATCH 20/35] build: pin internal DSH workspace dependencies --- ...2026-08-10-npm-release-sequences.i18n.yaml | 4 +- .../2026-08-10-npm-release-sequences.md | 6 +- .../2026-08-10-npm-release-sequences.zh.md | 6 +- ...08-26-published-dependency-faces.i18n.yaml | 4 +- .../2026-08-26-published-dependency-faces.md | 2 +- ...026-08-26-published-dependency-faces.zh.md | 2 +- ...26-09-09-nontransactional-loader.i18n.yaml | 4 +- .../2026-09-09-nontransactional-loader.md | 2 +- .../2026-09-09-nontransactional-loader.zh.md | 2 +- docs/cookbook/adding-a-remote-api.i18n.yaml | 4 +- docs/cookbook/adding-a-remote-api.md | 4 +- docs/cookbook/adding-a-remote-api.zh.md | 4 +- docs/rescope.i18n.yaml | 4 +- docs/rescope.md | 2 +- docs/rescope.zh.md | 2 +- packages/AGENTS.md | 1 + packages/acp/acp/package.json | 44 +- packages/api/account-controller/package.json | 8 +- packages/api/gateway/package.json | 22 +- packages/api/job-controller/package.json | 18 +- packages/api/remotes/package.json | 82 +- packages/api/session-controller/package.json | 134 +- packages/api/settings-controller/package.json | 24 +- packages/api/terminal-controller/package.json | 34 +- .../api/workspace-controller/package.json | 38 +- packages/api/workspace-files/package.json | 24 +- .../attachment/attachment-local/package.json | 10 +- packages/attachment/attachment/package.json | 4 +- packages/boot/app-boot/package.json | 14 +- packages/boot/config-editor/package.json | 10 +- packages/boot/hmr/package.json | 10 +- packages/boot/plugin-manager/package.json | 52 +- packages/browser-use/browser-use/package.json | 4 +- packages/bundle/acp-app/package.json | 4 +- packages/bundle/base/package.json | 180 +- packages/bundle/headless/package.json | 34 +- packages/bundle/sdk-app/package.json | 8 +- packages/bundle/sdk-minimal/package.json | 54 +- packages/bundle/web-app/package.json | 260 +- packages/client/connection/package.json | 18 +- packages/client/file-upload/package.json | 22 +- packages/client/hmr/package.json | 6 +- packages/client/locale/package.json | 20 +- packages/client/modules/package.json | 8 +- packages/client/resources/package.json | 10 +- packages/client/ui-agent-preset/package.json | 32 +- packages/client/ui-approval/package.json | 22 +- packages/client/ui-attachment/package.json | 16 +- .../client/ui-brand-official/package.json | 6 +- packages/client/ui-chat/package.json | 70 +- packages/client/ui-commands/package.json | 30 +- packages/client/ui-conversation/package.json | 62 +- packages/client/ui-deliverables/package.json | 56 +- .../ui-directory-picker-browse/package.json | 14 +- .../ui-directory-picker-native/package.json | 6 +- packages/client/ui-dockkit/package.json | 4 +- packages/client/ui-goal/package.json | 28 +- packages/client/ui-input-trigger/package.json | 24 +- packages/client/ui-jobs/package.json | 20 +- packages/client/ui-layout/package.json | 14 +- .../client/ui-message-feedback/package.json | 34 +- .../client/ui-model-selection/package.json | 30 +- packages/client/ui-open-in-app/package.json | 32 +- .../client/ui-permission-presets/package.json | 32 +- packages/client/ui-plan/package.json | 40 +- .../client/ui-plugin-manager/package.json | 30 +- packages/client/ui-primitives/package.json | 4 +- packages/client/ui-reference/package.json | 26 +- packages/client/ui-renderer/package.json | 6 +- packages/client/ui-schedule/package.json | 20 +- packages/client/ui-session/package.json | 18 +- .../client/ui-settings-account/package.json | 22 +- .../ui-settings-agent-loop/package.json | 18 +- .../client/ui-settings-general/package.json | 26 +- .../client/ui-settings-models/package.json | 22 +- .../ui-settings-plugin-inventory/package.json | 24 +- .../client/ui-settings-plugins/package.json | 12 +- .../client/ui-settings-shell/package.json | 18 +- .../client/ui-settings-subagent/package.json | 18 +- .../ui-settings-web-search/package.json | 18 +- packages/client/ui-settings/package.json | 12 +- .../client/ui-sidebar-browser/package.json | 20 +- .../ui-sidebar-documentpreview/package.json | 40 +- packages/client/ui-sidebar-files/package.json | 28 +- packages/client/ui-sidebar-right/package.json | 28 +- .../client/ui-sidebar-terminal/package.json | 30 +- packages/client/ui-sidebar/package.json | 20 +- packages/client/ui-skill/package.json | 26 +- packages/client/ui-slots/package.json | 2 +- packages/client/ui-subagent/package.json | 34 +- packages/client/ui-theme/package.json | 22 +- packages/client/ui-tool/package.json | 50 +- packages/client/ui-trajectory/package.json | 32 +- .../client/ui-user-questions/package.json | 34 +- packages/client/ui-workflow-run/package.json | 28 +- packages/client/ui-workspace/package.json | 44 +- packages/client/web/package.json | 14 +- .../compaction/command-compact/package.json | 14 +- .../compaction/compaction-basic/package.json | 44 +- .../compaction-image-offload/package.json | 32 +- .../package.json | 24 +- packages/compaction/compaction/package.json | 20 +- .../computer-use/computer-use/package.json | 4 +- .../context/agent-instructions/package.json | 42 +- .../context/file-reference-local/package.json | 16 +- packages/context/file-reference/package.json | 4 +- .../context/session-reference/package.json | 66 +- packages/context/time-context/package.json | 42 +- packages/context/tmux-context/package.json | 22 +- .../core/agent-default-model/package.json | 12 +- packages/core/agent-loop/package.json | 44 +- .../core/agent-tool-presentation/package.json | 14 +- packages/core/agent/package.json | 38 +- packages/core/scope/package.json | 4 +- packages/core/session/package.json | 16 +- packages/core/system-prompt/package.json | 12 +- packages/core/tools/package.json | 46 +- .../credentials/authorization/package.json | 12 +- .../credentials-local/package.json | 16 +- packages/credentials/credentials/package.json | 6 +- .../deepseek-account-platform/package.json | 16 +- .../credentials/deepseek-account/package.json | 4 +- .../deliverables/tool-present/package.json | 34 +- .../workspace-changes/package.json | 20 +- packages/document/office-to-pdf/package.json | 10 +- .../agent-team-profile/package.json | 6 +- .../agent-team-profile/tests/profile.spec.ts | 6 +- packages/experimental/agent-team/package.json | 46 +- .../api-speech-to-text/package.json | 8 +- .../experimental/auto-review/package.json | 68 +- .../package.json | 26 +- .../browser-use-playwright-mcp/package.json | 26 +- .../browser-use-runtime/package.json | 42 +- .../tests/shared-host-runtimes.spec.ts | 4 +- .../browser-use-stagehand-native/package.json | 38 +- .../client-ui-agent-team/package.json | 50 +- .../client-ui-voice-input/package.json | 62 +- .../computer-use-cua-driver-mcp/package.json | 22 +- .../package.json | 30 +- packages/experimental/inspector/package.json | 12 +- .../ptc-runtime-python/package.json | 12 +- .../speech-to-text-sensevoice/package.json | 12 +- .../experimental/speech-to-text/package.json | 10 +- .../experimental/tool-agent-team/package.json | 44 +- .../voice-input-bundle/package.json | 8 +- .../webworker-packer/package.json | 10 +- .../webworker-runtime/package.json | 38 +- .../cordis-client-runner/package.json | 10 +- .../cordis-host-runner/package.json | 30 +- packages/extensions/tool-cordis/package.json | 18 +- packages/extensions/ui-cordis/package.json | 22 +- .../feedback/command-feedback/package.json | 22 +- .../feedback/message-feedback/package.json | 26 +- packages/fs/fs-local/package.json | 6 +- .../fs/fs-observation-policy/package.json | 6 +- packages/fs/fs-sandbox/package.json | 18 +- packages/fs/fs/package.json | 16 +- packages/fs/tool-fs-search/package.json | 38 +- packages/fs/tool-fs/package.json | 54 +- .../fs/tool-str-replace-editor/package.json | 34 +- packages/goal/command-goal/package.json | 22 +- packages/goal/goal-round-driver/package.json | 30 +- packages/goal/goal/package.json | 46 +- packages/goal/tool-goal/package.json | 32 +- .../guard/repeat-tool-reminder/package.json | 18 +- packages/guard/timeout-policy/package.json | 12 +- packages/hooks/hook-protocol/package.json | 12 +- packages/hooks/hooks-claude-code/package.json | 40 +- packages/hooks/hooks-codex/package.json | 36 +- .../host/directory-picker-auto/package.json | 24 +- .../host/directory-picker-browse/package.json | 2 +- .../host/directory-picker-native/package.json | 4 +- packages/host/frontend-static/package.json | 10 +- packages/host/open-in-app/package.json | 8 +- packages/host/plugin-inventory/package.json | 16 +- .../host/product-telemetry-otel/package.json | 4 +- .../identity/anonymous-user-id/package.json | 8 +- packages/interaction/commands/package.json | 34 +- .../permission-presets/package.json | 38 +- .../interaction/tool-ask-user/package.json | 16 +- .../interaction/user-approval/package.json | 28 +- .../interaction/user-questions/package.json | 12 +- packages/jobs/jobs-local/package.json | 22 +- packages/jobs/jobs/package.json | 20 +- packages/jobs/tool-jobs/package.json | 28 +- packages/llm/llm-deepseek/package.json | 72 +- packages/llm/llm-pi-ai/package.json | 38 +- packages/llm/llm-retry/package.json | 44 +- packages/llm/llm/package.json | 14 +- .../package.json | 24 +- packages/llm/token-meter/package.json | 26 +- packages/lsp/lsp-stdio/package.json | 30 +- packages/lsp/lsp/package.json | 8 +- packages/lsp/tool-lsp/package.json | 34 +- packages/mcp/mcp-client/package.json | 38 +- packages/mcp/mcp-resources/package.json | 22 +- packages/plan/plan-mode/package.json | 42 +- .../preset/agent-preset-registry/package.json | 54 +- packages/preset/agent-preset/package.json | 8 +- packages/preset/persona/package.json | 6 +- .../ptc-runtime/ptc-runtime-node/package.json | 38 +- packages/ptc-runtime/ptc-runtime/package.json | 4 +- packages/sandbox/sandbox-local/package.json | 16 +- packages/sandbox/sandbox-policy/package.json | 24 +- .../sandbox/sandbox-windows-acl/package.json | 14 +- packages/sandbox/sandbox/package.json | 10 +- packages/schedule/schedule/package.json | 44 +- packages/sdk/client/package.json | 12 +- packages/sdk/protocol/package.json | 12 +- packages/sdk/server/package.json | 42 +- .../session-log-export/package.json | 40 +- .../session-query-sqlite/package.json | 16 +- .../session-query/session-query/package.json | 34 +- .../tool-session-query/package.json | 46 +- .../session-checkpoint-policy/package.json | 30 +- .../session-format-catalog/package.json | 16 +- .../session-format-v0-to-v1/package.json | 6 +- .../session-format-v1-to-v2/package.json | 10 +- .../session-format-v2-to-v3/package.json | 6 +- .../session-format-v3-to-v4/package.json | 4 +- packages/session/session-format/package.json | 2 +- .../session/session-log-deepseek/package.json | 28 +- .../session-persistence-jsonl/package.json | 18 +- .../session/session-persistence/package.json | 16 +- .../session-projection-cache/package.json | 18 +- .../session/session-projection/package.json | 4 +- packages/session/session-stats/package.json | 12 +- .../session-telemetry-otel/package.json | 38 +- .../session/session-telemetry/package.json | 8 +- .../package.json | 20 +- .../package.json | 22 +- .../session/session-title-llm/package.json | 18 +- packages/session/session-title/package.json | 30 +- .../session/session-turn-outline/package.json | 12 +- packages/settings/settings/package.json | 22 +- packages/shell/bash-local/package.json | 14 +- packages/shell/bash-sandbox/package.json | 22 +- packages/shell/pwsh-local/package.json | 14 +- packages/shell/pwsh-sandbox/package.json | 22 +- packages/shell/shell-env/package.json | 20 +- packages/shell/shell/package.json | 8 +- .../shell/tool-bash-persistent/package.json | 34 +- packages/shell/tool-bash/package.json | 58 +- .../shell/tool-pwsh-persistent/package.json | 36 +- packages/shell/tool-pwsh/package.json | 58 +- packages/skill/skill-badge/package.json | 4 +- packages/skill/skill-filesystem/package.json | 12 +- packages/skill/skill-office/package.json | 4 +- packages/skill/skill/package.json | 10 +- packages/skill/tool-skill/package.json | 24 +- .../tool-workspace-dependencies/package.json | 10 +- packages/spill/spill-local/package.json | 10 +- packages/spill/spill-policy/package.json | 58 +- packages/spill/spill/package.json | 12 +- packages/ssh/fs-ssh/package.json | 16 +- packages/ssh/sandbox-ssh/package.json | 8 +- packages/ssh/ssh/package.json | 52 +- packages/ssh/subprocess-ssh/package.json | 12 +- packages/storage/storage-domain/package.json | 8 +- packages/storage/storage-json/package.json | 4 +- packages/storage/storage-sqlite/package.json | 4 +- packages/subagent/subagent-acp/package.json | 40 +- .../subagent-claude-code/package.json | 44 +- packages/subagent/subagent-codex/package.json | 44 +- .../tests/subagent-codex.spec.ts | 2 +- .../subagent/subagent-dsh-sdk/package.json | 48 +- .../subagent-fork-in-process/package.json | 28 +- .../subagent-in-process-driver/package.json | 44 +- .../subagent-spawn-in-process/package.json | 32 +- packages/subagent/subagent/package.json | 98 +- .../tool-subagent-control/package.json | 38 +- packages/subagent/tool-subagent/package.json | 50 +- .../subprocess/subprocess-local/package.json | 14 +- packages/subprocess/subprocess/package.json | 6 +- .../subprocess/win32-process/package.json | 2 +- packages/terminal/terminal-bash/package.json | 34 +- packages/terminal/terminal/package.json | 12 +- packages/terminal/tool-terminal/package.json | 46 +- .../agent-loop-testkit/package.json | 28 +- .../test-support/client-runtime/package.json | 88 +- packages/test-support/llm-replay/package.json | 20 +- .../test-support/loader-smoke/package.json | 18 +- .../test-support/remote-mock/package.json | 8 +- .../session-snapshot/package.json | 30 +- packages/todo/tool-todo/package.json | 30 +- packages/typert/generator/package.json | 4 +- packages/typert/loader/package.json | 6 +- packages/typert/protocol/package.json | 2 +- packages/typert/registry/package.json | 2 +- packages/util/http-proxy/package.json | 2 +- packages/web/tool-web/package.json | 36 +- packages/web/web-fetch-http/package.json | 12 +- packages/web/web-search-deepseek/package.json | 24 +- packages/web/web-search-exa/package.json | 10 +- .../web/web-search-perplexity/package.json | 10 +- packages/web/web/package.json | 4 +- packages/webhook/webhook-github/package.json | 18 +- packages/webhook/webhook/package.json | 40 +- packages/workflow/tool-ralph/package.json | 38 +- packages/workflow/tool-workflow/package.json | 44 +- packages/workflow/workflow-ptc/package.json | 66 +- packages/workflow/workflow/package.json | 20 +- packages/workspace/workspace/package.json | 26 +- pnpm-lock.yaml | 5502 ++++++++--------- scripts/check-workspace-constraints.spec.ts | 44 + scripts/check-workspace-constraints.ts | 16 +- scripts/package-invariants.spec.ts | 12 +- scripts/package-invariants.ts | 4 +- scripts/verify-package-dependencies.spec.ts | 56 +- scripts/verify-package-dependencies.ts | 28 +- 310 files changed, 6570 insertions(+), 6509 deletions(-) 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 7117da46f7..d025f4ff2d 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 @@ -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/process/2026-08-10-npm-release-sequences.md -2026-08-10-npm-release-sequences.md: 6f52c00a31870939981994965b70504e8f8143ca -2026-08-10-npm-release-sequences.zh.md: effa5538cefbc8f25b2e047ee40e0dc7306bb2fb +2026-08-10-npm-release-sequences.md: c07f5264ce4148e5d49cb8e5e20997f92ca5b596 +2026-08-10-npm-release-sequences.zh.md: 7c5d01b9d6ffb806f3babeb9d423d36fa4ecb202 diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md index 6f52c00a31..c07f5264ce 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md @@ -78,9 +78,9 @@ Two registry behaviours shape how a publish is attempted. Writes are spaced by a ### Workspace-internal references use the `workspace:` protocol -Every reference to a workspace member uses `workspace:^`, so `pnpm pack` substitutes a range matching the target version: sibling `peerDependencies` follow the family version, and a reference to a vendored package follows that package's own line. The Landlock platform packages keep `workspace:*`, which publishes the exact version, because a platform package and its entry must agree exactly. +Every reference to a workspace member uses the `workspace:` protocol. References from `packages/*/*` to DSH packages use `workspace:*`, including peers and development dependencies, so `pnpm pack` writes the target's exact release version. Vendored references, including Cordis, retain `workspace:^` and follow their independent version lines. App and native manifests retain their declared ranges; Landlock platform references remain exact. Local workspace linking is unchanged. -`scripts/check-workspace-constraints.ts` requires the protocol, so a new package cannot reintroduce a hand-written range; the invariant-companion rule requires `workspace:^` for `@deepseek-ai/dsh-invariants` for the same reason. +`scripts/check-workspace-constraints.ts` requires the protocol and exact DSH-to-DSH package ranges. The invariant-companion rule requires `workspace:*` for `@deepseek-ai/dsh-invariants`; the dependency repairer preserves vendored caret ranges. Published DSH peers therefore require the matching release instead of admitting later compatible versions. ### Published dependency faces use an explicit policy @@ -133,7 +133,7 @@ The installed-consumer probe captures npm's HTTP diagnostics and includes them w |---|---| | release-set manifests | `private: true` removed; `publishConfig.access` per sequence and `repository` with each package's `directory` added | | release-set boundary | every member of `packages/*/*`, `apps/*`, and `vendor/*` | -| dependency protocol | workspace-internal references are `workspace:^`, with `check-workspace-constraints.ts` and the invariant-companion rule requiring it | +| dependency protocol | workspace references use the protocol; DSH-to-DSH package references and invariant companions use `workspace:*`, while vendor ranges remain independent | | root `AGENTS.md` | the convention that vendored packages are `private: true` no longer holds | | `vendor/README.md` | records `src` joining `cordis`'s `files` as a local modification | | the three native packages | `publishConfig.access: public`, and their workflow passes no `--access` | diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md index effa5538ce..7c5d01b9d6 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md @@ -78,9 +78,9 @@ registry 的两个行为决定了「怎么尝试一次发布」。写入之间 ### workspace 内部引用走 `workspace:` 协议 -所有指向 workspace 成员的引用都用 `workspace:^`,由 `pnpm pack` 替换成匹配目标版本的范围:兄弟包的 `peerDependencies` 跟随族版本,指向 vendored 包的引用跟随那个包自己的版本线。Landlock 平台包保留 `workspace:*`(发布成精确版本),因为平台包与它的入口必须版本完全一致。 +所有指向 workspace 成员的引用都用 `workspace:` 协议。`packages/*/*` 指向 DSH 包的引用使用 `workspace:*`,包括 peer 和开发依赖,由 `pnpm pack` 写入目标的精确发布版本。包括 Cordis 在内的 vendored 引用保留 `workspace:^`,跟随各自独立的版本线。App 和 native 清单保留已声明的范围;Landlock 平台引用仍为精确版本。本地 workspace 链接方式不变。 -`scripts/check-workspace-constraints.ts` 要求这个协议,所以新包无法再引入硬写的范围;同理,invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 用 `workspace:^`。 +`scripts/check-workspace-constraints.ts` 要求使用该协议,并精确锁定 DSH 包之间的引用。Invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 使用 `workspace:*`;依赖修复器保留 vendored caret 范围。因此,发布的 DSH peer 要求匹配的发布版本,而不接纳后续兼容版本。 ### 发布依赖门面使用显式策略 @@ -133,7 +133,7 @@ dsh 的验证会一并安装 vendored 族的 pack 产物。harness 的包把 ven |---|---| | 发布集 manifest | 去掉 `private: true`;按序列补 `publishConfig.access` 与带各自 `directory` 的 `repository` | | 发布集边界 | `packages/*/*`、`apps/*`、`vendor/*` 的全部成员 | -| 依赖协议 | workspace 内部引用为 `workspace:^`,由 `check-workspace-constraints.ts` 与 invariant companion 规则强制 | +| 依赖协议 | workspace 引用使用该协议;DSH 包之间的引用及 invariant companion 使用 `workspace:*`,vendor 范围保持独立 | | 根 `AGENTS.md` | 「vendored 包是 `private: true`」这条约定不再成立 | | `vendor/README.md` | 记录「`src` 加入 `cordis` 的 `files`」这条本地修改 | | native 三包 | `publishConfig.access: public`,且其 workflow 不传 `--access` | 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 d24d629c9f..87f4f41235 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 @@ -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/process/2026-08-26-published-dependency-faces.md -2026-08-26-published-dependency-faces.md: 1a94ccedcf6f614c7853c96c329e88d037167460 -2026-08-26-published-dependency-faces.zh.md: 4ac3f461018c21047af6359ca5e27d050da5a2c4 +2026-08-26-published-dependency-faces.md: 7880085eca4eb71fdda61601173eb12193de05e8 +2026-08-26-published-dependency-faces.zh.md: fc8f452573048d3d8cf9ff4c8e894984a4362c1f diff --git a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md index 1a94ccedcf..7880085eca 100644 --- a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md +++ b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md @@ -28,7 +28,7 @@ A workspace package reached by a runtime value import from the Host entry closur An export whose constructor identity or module state must be shared appears in `peerRequiredHostExports`; importing one such export keeps the whole package edge in matching `peerDependencies` and `devDependencies`. Each export-table key is an exact module specifier and each value is a reviewed export set. The verifier follows runtime local imports from the Host entry, records named and default imports and re-exports, and rejects exports covered by neither the package list nor an export table; namespace, dynamic, and side-effect imports remain unbounded unless the complete exact entry is package-classified. -Workspace imports used by the Client bundle, type-only imports, module augmentations, `dsh.client.inject`, and existing metadata-only peers belong only in `devDependencies`. Host runtime imports, including additional Node entries, follow the Host classification. [Browser third-party build inputs](2026-09-08-browser-third-party-build-inputs.md) governs ordinary third-party declarations; it partially supersedes their preservation in this decision. Workspace references use `workspace:^`. +Workspace imports used by the Client bundle, type-only imports, module augmentations, `dsh.client.inject`, and existing metadata-only peers belong only in `devDependencies`. Host runtime imports, including additional Node entries, follow the Host classification. [Browser third-party build inputs](2026-09-08-browser-third-party-build-inputs.md) governs ordinary third-party declarations; it partially supersedes their preservation in this decision. DSH workspace references use `workspace:*`; vendored references retain `workspace:^`. Some development relationships exist only in `dsh.client.inject` or TypeScript project references. The policy's `configurationOnlyDevDependencies` table names only those reviewed edges and keeps them in `devDependencies`. diff --git a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md index 4ac3f46101..fc8f452573 100644 --- a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md +++ b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md @@ -28,7 +28,7 @@ Host 入口闭包中的运行期 value import 所到达的 workspace 包,只 constructor 身份或模块状态必须共享的导出列入 `peerRequiredHostExports`;一旦使用这类导出,整条包依赖边就保留在范围一致的 `peerDependencies` 与 `devDependencies` 中。每个导出表的 key 都是精确 module specifier,每个 value 都是经审查的导出集合。验证器从 Host 入口沿运行期本地 import 扫描,记录具名与默认 import 和 re-export,并拒绝既没有包级分类、也没有导出级分类的导出;除非完整的精确入口已按包分类,否则 namespace、dynamic 和 side-effect import 仍无法限定范围。 -Client bundle 使用的 workspace import、纯类型 import、模块扩充、`dsh.client.inject` 和仅有元数据的现存 peer 只属于 `devDependencies`。Host 运行时 import(包括额外 Node 入口)遵循 Host 分类。[浏览器第三方构建输入](2026-09-08-browser-third-party-build-inputs.zh.md)规定普通第三方声明,部分取代本决策对它们原区段的保留。Workspace 引用使用 `workspace:^`。 +Client bundle 使用的 workspace import、纯类型 import、模块扩充、`dsh.client.inject` 和仅有元数据的现存 peer 只属于 `devDependencies`。Host 运行时 import(包括额外 Node 入口)遵循 Host 分类。[浏览器第三方构建输入](2026-09-08-browser-third-party-build-inputs.zh.md)规定普通第三方声明,部分取代本决策对它们原区段的保留。DSH workspace 引用使用 `workspace:*`;vendored 引用保留 `workspace:^`。 部分开发期关系只存在于 `dsh.client.inject` 或 TypeScript project reference 中。策略的 `configurationOnlyDevDependencies` 表只列出这些已评审的依赖边,并将它们保留在 `devDependencies` 中。 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 612b139128..258af20542 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 @@ -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/simplification/2026-09-09-nontransactional-loader.md -2026-09-09-nontransactional-loader.md: 6a3cb1476e1f296199067a8d048c6d7c8bba4069 -2026-09-09-nontransactional-loader.zh.md: 4e91a31ed86be4e45313e1322db8af486477aea7 +2026-09-09-nontransactional-loader.md: 98b0b1ce0c1250e651c5280c9b918948b17cd963 +2026-09-09-nontransactional-loader.zh.md: 77ae1ce91aa0d20940f0c63f2a2d42a0f3c07edb diff --git a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.md b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.md index 6a3cb1476e..98b0b1ce0c 100644 --- a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.md +++ b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.md @@ -18,7 +18,7 @@ Application consumers own their completion checks. The CLI waits for its fallbac Fiber, Entry, and isolate keep their upstream update return behavior. App boot observes discarded restart promises through the existing `internal/update` waterfall and waits for fibers before auditing a patch reload. The detached import-completion observer handles both fiber outcomes; the fiber still retains its failure for an explicit audit. Durable Include writes drain before and after child removal so a later teardown write cannot erase an earlier terminal write failure. -Two #932-specific vendor changes remain: awaited initial-file creation and forced rereading in Include, and Schemastery conditional exports. Restoring the pre-#932 debounced write/read sequence reproduces `ENOENT` in the missing-file initialization test. Keeping these two lines preserves the existing `initial` option without an application-side file writer or a second YAML serializer. Removing Schemastery exports reproduces `ERR_REQUIRE_ESM_RACE_CONDITION` while the Web preset suite boots: Node falls back to the CJS entry during concurrent ESM imports. The HMR injection decorators, conditional patch cloning, and update return values use the pre-#932 behavior. Explicit `workspace:^` dependencies make the #932 workspace-link switch and dedicated lockfile check unnecessary. +Two #932-specific vendor changes remain: awaited initial-file creation and forced rereading in Include, and Schemastery conditional exports. Restoring the pre-#932 debounced write/read sequence reproduces `ENOENT` in the missing-file initialization test. Keeping these two lines preserves the existing `initial` option without an application-side file writer or a second YAML serializer. Removing Schemastery exports reproduces `ERR_REQUIRE_ESM_RACE_CONDITION` while the Web preset suite boots: Node falls back to the CJS entry during concurrent ESM imports. The HMR injection decorators, conditional patch cloning, and update return values use the pre-#932 behavior. Explicit `workspace:` dependencies make the #932 workspace-link switch and dedicated lockfile check unnecessary. ## Alternatives considered diff --git a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.zh.md b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.zh.md index 4e91a31ed8..77ae1ce91a 100644 --- a/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.zh.md +++ b/.agents/notes/implemented/simplification/2026-09-09-nontransactional-loader.zh.md @@ -18,7 +18,7 @@ Loader 立即更改条目选项。EntryGroup 并发启动同级条目并记录 Fiber、Entry 和 isolate 保持上游的更新返回行为。App boot 通过现有的 `internal/update` waterfall 观察被丢弃的重启 promise,并在检查 patch 重载前等待 fiber。游离的导入完成观察器处理 fiber 的两种结果;fiber 仍保留失败信息供显式检查。Include 的持久写入在删除子条目前后均排空,防止后续拆卸写入掩盖更早的终止性写入失败。 -保留两项 #932 专属 vendor 改动:Include 中等待初始文件创建并强制重新读取,以及 Schemastery 条件导出。恢复 #932 前的防抖写入和读取顺序,会在缺失文件初始化测试中复现 `ENOENT`。保留这两行可以维持已有 `initial` 选项,而无需在应用侧增加文件写入器或另一份 YAML 序列化逻辑。移除 Schemastery exports 后,Web preset 测试在启动时复现 `ERR_REQUIRE_ESM_RACE_CONDITION`:并发 ESM 导入使 Node 回退到 CJS 入口。HMR 注入装饰器、条件 patch 克隆及更新返回值采用 #932 前的行为。显式 `workspace:^` 依赖使 #932 的 workspace 链接开关与专用锁文件检查不再必要。 +保留两项 #932 专属 vendor 改动:Include 中等待初始文件创建并强制重新读取,以及 Schemastery 条件导出。恢复 #932 前的防抖写入和读取顺序,会在缺失文件初始化测试中复现 `ENOENT`。保留这两行可以维持已有 `initial` 选项,而无需在应用侧增加文件写入器或另一份 YAML 序列化逻辑。移除 Schemastery exports 后,Web preset 测试在启动时复现 `ERR_REQUIRE_ESM_RACE_CONDITION`:并发 ESM 导入使 Node 回退到 CJS 入口。HMR 注入装饰器、条件 patch 克隆及更新返回值采用 #932 前的行为。显式 `workspace:` 依赖使 #932 的 workspace 链接开关与专用锁文件检查不再必要。 ## 考虑过的替代方案 diff --git a/docs/cookbook/adding-a-remote-api.i18n.yaml b/docs/cookbook/adding-a-remote-api.i18n.yaml index 89781a29df..0aef34d3f2 100644 --- a/docs/cookbook/adding-a-remote-api.i18n.yaml +++ b/docs/cookbook/adding-a-remote-api.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/cookbook/adding-a-remote-api.md -adding-a-remote-api.md: 0f89101e9bc3ff961d465c109f033150e93e04f6 -adding-a-remote-api.zh.md: 0c5a57b539ecd98cb88790260a3fb8e7b41afff6 +adding-a-remote-api.md: a36fe1aecd1e134686d9f1b583c56e9648d21f23 +adding-a-remote-api.zh.md: c1f56a865bc49512a50eb67d53e4190d98f5a176 diff --git a/docs/cookbook/adding-a-remote-api.md b/docs/cookbook/adding-a-remote-api.md index 0f89101e9b..a36fe1aecd 100644 --- a/docs/cookbook/adding-a-remote-api.md +++ b/docs/cookbook/adding-a-remote-api.md @@ -97,8 +97,8 @@ export async function rename(noteId: string, title: string): Promise { "./typert": { "types": "./lib/typert.host.d.ts", "default": "./lib/typert.host.js" }, "./remote": { "types": "./lib/typert.remote-client.d.ts", "default": "./lib/typert.remote-client.js" } }, - "peerDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:^" }, - "devDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:^" } + "peerDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, + "devDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } ``` diff --git a/docs/cookbook/adding-a-remote-api.zh.md b/docs/cookbook/adding-a-remote-api.zh.md index 0c5a57b539..c1f56a865b 100644 --- a/docs/cookbook/adding-a-remote-api.zh.md +++ b/docs/cookbook/adding-a-remote-api.zh.md @@ -97,8 +97,8 @@ export async function rename(noteId: string, title: string): Promise { "./typert": { "types": "./lib/typert.host.d.ts", "default": "./lib/typert.host.js" }, "./remote": { "types": "./lib/typert.remote-client.d.ts", "default": "./lib/typert.remote-client.js" } }, - "peerDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:^" }, - "devDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:^" } + "peerDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, + "devDependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } ``` diff --git a/docs/rescope.i18n.yaml b/docs/rescope.i18n.yaml index ed6948f492..e55fd71381 100644 --- a/docs/rescope.i18n.yaml +++ b/docs/rescope.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/rescope.md -rescope.md: 80a0b1dc67c8b3585f2c18cad3afff9dde5859f9 -rescope.zh.md: aaf65024520308c5d0013d85a128a42839a84573 +rescope.md: 3779001ed2dfb1acc7969a92c716dce6c389376d +rescope.zh.md: 881ef4192f6c617eefe8b56234aaae1d6acc7f5b diff --git a/docs/rescope.md b/docs/rescope.md index 80a0b1dc67..3779001ed2 100644 --- a/docs/rescope.md +++ b/docs/rescope.md @@ -23,7 +23,7 @@ Subpath exports keep their path: `@cordisjs/plugin-loader/repository` becomes `@ ## What the rename does not touch - **Directory names and upstream source versions.** `vendor/hmr/` stays `vendor/hmr/`, and the table records the upstream version of the pinned source snapshot, so the manifest reads as an upstream snapshot; the vendored `package.json`'s own `version` field is the harness's released manifest version, which `pnpm run release:vendor` bumps and a re-sync restores to the upstream version. -- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use `workspace:^` for repository-owned runtime dependencies, so pnpm resolves the pinned local packages and substitutes release ranges when publishing. +- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use the `workspace:` protocol; [package rules](../packages/AGENTS.md) distinguish exact DSH references from vendored caret ranges. - **The Loader's `cordis:` builtin prefix.** `cordis:include` and `cordis:group` are a protocol prefix, not a package name. - **The `cordis.yml` configuration family**, including `*.cordis.yml`, `*.cordis.snapshot.yml`, and `cordis.patch.yml`. - **Harness packages whose own names contain the word**, such as `@deepseek-ai/dsh-tool-cordis`. diff --git a/docs/rescope.zh.md b/docs/rescope.zh.md index aaf6502452..881ef4192f 100644 --- a/docs/rescope.zh.md +++ b/docs/rescope.zh.md @@ -23,7 +23,7 @@ Cordis 框架及其基础库以源码形式 vendored 在 [`vendor/`](../vendor/R ## 改名不碰什么 - **目录名与上游源码版本。** `vendor/hmr/` 仍是 `vendor/hmr/`,清单表记录的是所钉住源码快照的上游版本,因此清单读作一份上游快照;而每个 vendored 包 `package.json` 自身的 `version` 字段是 harness 发布的清单版本,`pnpm run release:vendor` 会提升它,重新 sync 时会恢复成上游版本。 -- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单对仓库内的运行时依赖使用 `workspace:^`,因此 pnpm 会解析到固定的本地包,并在发布时替换为版本范围。 +- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单使用 `workspace:` 协议;[包规则](../packages/AGENTS.md)区分精确的 DSH 引用与 vendored caret 范围。 - **Loader 的 `cordis:` 内建前缀。** `cordis:include`、`cordis:group` 是协议前缀,不是包名。 - **`cordis.yml` 配置文件家族**,包括 `*.cordis.yml`、`*.cordis.snapshot.yml`、`cordis.patch.yml`。 - **名字里带这个词的 harness 包**,例如 `@deepseek-ai/dsh-tool-cordis`。 diff --git a/packages/AGENTS.md b/packages/AGENTS.md index f0c49d55e5..4a47b1d9d4 100644 --- a/packages/AGENTS.md +++ b/packages/AGENTS.md @@ -20,6 +20,7 @@ These package-specific rules supplement the repo-wide [conventions](../AGENTS.md [Naming rules](../docs/cookbook/adding-a-package.md#name-the-role-that-exists): +- **Workspace ranges:** references from `packages/*/*` to DSH packages use `workspace:*` in every dependency section, including peers and development dependencies. Vendor and native ranges retain their existing policy; Cordis stays `workspace:^` ([publication rules](../.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md#workspace-internal-references-use-the-workspace-protocol)). - **Package tsconfig:** extends `tsconfig.base.json` (Client: `tsconfig.base.client.json`), sets `rootDir: src` and `outDir: lib/types`, references workspace dependencies, references `runtime-diagnostics/invariants` only when the package publishes `./invariant`, and registers in one aggregate. Packages with distinct Host and Client compiler faces use `tsconfig.host.json` and `tsconfig.client.json` leaves plus a solution-only root; ordinary two-entry Client plugins do not split ([layout](../docs/development.md#typescript-project-layout)). - `src/types.ts` contains only types — no runtime code. - Tests live at package level under `tests/`, not `src/__tests__/`. diff --git a/packages/acp/acp/package.json b/packages/acp/acp/package.json index 9edecb9090..e7202dcfa3 100644 --- a/packages/acp/acp/package.json +++ b/packages/acp/acp/package.json @@ -28,19 +28,19 @@ "license": "MIT", "dependencies": { "@agentclientprotocol/sdk": "1.4.0", - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-token-meter": { @@ -49,18 +49,18 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" } } diff --git a/packages/api/account-controller/package.json b/packages/api/account-controller/package.json index 122558236b..41b73c88dd 100644 --- a/packages/api/account-controller/package.json +++ b/packages/api/account-controller/package.json @@ -48,12 +48,12 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index 823fd1a6b5..b72006a9ed 100644 --- a/packages/api/gateway/package.json +++ b/packages/api/gateway/package.json @@ -55,24 +55,24 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "ws": "^8.21.0", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^" + "@deepseek-ai/dsh-client-connection": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "@types/ws": "^8.18.1", "@deepseek-ai/cordis": "workspace:^", "zod": "^4.4.3" diff --git a/packages/api/job-controller/package.json b/packages/api/job-controller/package.json index dde1d2000b..9da504433d 100644 --- a/packages/api/job-controller/package.json +++ b/packages/api/job-controller/package.json @@ -65,7 +65,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, @@ -74,13 +74,13 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*" } } diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index 5b423ce0cf..b081d5957a 100644 --- a/packages/api/remotes/package.json +++ b/packages/api/remotes/package.json @@ -50,53 +50,53 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-api-job-controller": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-settings-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-cordis-host-runner": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-host-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-session-reference": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-api-job-controller": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-settings-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-session-reference": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", "zod": "^4.4.3", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-api-terminal-controller": "workspace:^", - "@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-command-feedback": "workspace:*", + "@deepseek-ai/dsh-api-terminal-controller": "workspace:*", + "@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:*" } } diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index f1525e8bf3..b8c3e5d4f5 100644 --- a/packages/api/session-controller/package.json +++ b/packages/api/session-controller/package.json @@ -69,41 +69,41 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-deque": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "mime-types": "^3.0.2", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-util-time": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-util-time": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-session-persistence": { @@ -115,44 +115,44 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-storage-json": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^", - "@deepseek-ai/dsh-util-time": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-storage-json": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*", + "@deepseek-ai/dsh-util-time": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@types/mime-types": "^3.0.1" } } diff --git a/packages/api/settings-controller/package.json b/packages/api/settings-controller/package.json index e15ce96424..2415dd8b9a 100644 --- a/packages/api/settings-controller/package.json +++ b/packages/api/settings-controller/package.json @@ -49,20 +49,20 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/api/terminal-controller/package.json b/packages/api/terminal-controller/package.json index 279c79b96c..b9d0d9c1d1 100644 --- a/packages/api/terminal-controller/package.json +++ b/packages/api/terminal-controller/package.json @@ -54,33 +54,33 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-lazy-require": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-lazy-require": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@xterm/headless": "^6.0.0", "@xterm/addon-serialize": "^0.14.0", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/dsh-subprocess": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/api/workspace-controller/package.json b/packages/api/workspace-controller/package.json index cccde98f40..aa5a401705 100644 --- a/packages/api/workspace-controller/package.json +++ b/packages/api/workspace-controller/package.json @@ -65,32 +65,32 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" } } diff --git a/packages/api/workspace-files/package.json b/packages/api/workspace-files/package.json index b7554a8224..4f3e67b1f3 100644 --- a/packages/api/workspace-files/package.json +++ b/packages/api/workspace-files/package.json @@ -52,8 +52,8 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, @@ -62,16 +62,16 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^" + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/attachment/attachment-local/package.json b/packages/attachment/attachment-local/package.json index 005cd77c4c..611a08d4de 100644 --- a/packages/attachment/attachment-local/package.json +++ b/packages/attachment/attachment-local/package.json @@ -21,18 +21,18 @@ "files": ["lib/index.js", "lib/types/**/*.d.ts"], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-lazy-require": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "sharp": "^0.35.3" }, "devDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/attachment/attachment/package.json b/packages/attachment/attachment/package.json index 9c69bed474..9909a1fa5b 100644 --- a/packages/attachment/attachment/package.json +++ b/packages/attachment/attachment/package.json @@ -22,11 +22,11 @@ "files": ["lib/index.js", "lib/types/**/*.js", "lib/types/**/*.d.ts"], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/boot/app-boot/package.json b/packages/boot/app-boot/package.json index bf09307b3d..967b00b26e 100644 --- a/packages/boot/app-boot/package.json +++ b/packages/boot/app-boot/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@eslint-community/regexpp": "^4.12.2", "ajv": "^8.20.0", "js-yaml": "^4.2.0", @@ -43,9 +43,9 @@ "@deepseek-ai/cordis-plugin-group": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { @@ -54,9 +54,9 @@ "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@types/js-yaml": "^4.0.9", "@deepseek-ai/cordis": "workspace:^" } diff --git a/packages/boot/config-editor/package.json b/packages/boot/config-editor/package.json index aba05d7311..bfcf1963bc 100644 --- a/packages/boot/config-editor/package.json +++ b/packages/boot/config-editor/package.json @@ -29,22 +29,22 @@ "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", + "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-atomic-write": "workspace:^", + "@deepseek-ai/dsh-atomic-write": "workspace:*", "yaml": "^2.8.1", "js-yaml": "^4.1.0" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", + "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@types/js-yaml": "^4.0.9", - "@deepseek-ai/dsh-app-boot": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-hmr": { diff --git a/packages/boot/hmr/package.json b/packages/boot/hmr/package.json index 14757f45c7..a8ba823f64 100644 --- a/packages/boot/hmr/package.json +++ b/packages/boot/hmr/package.json @@ -32,8 +32,8 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*" }, "dependencies": { "@babel/code-frame": "^7.29.0", @@ -49,8 +49,8 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*" } } diff --git a/packages/boot/plugin-manager/package.json b/packages/boot/plugin-manager/package.json index 292b74a61f..05d57c482c 100644 --- a/packages/boot/plugin-manager/package.json +++ b/packages/boot/plugin-manager/package.json @@ -56,26 +56,26 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "execa": "^10.0.0", "yaml": "^2.9.0", "zod": "^4.4.3", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-host-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-hmr": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-hmr": { @@ -86,22 +86,22 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-host-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", + "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" } } diff --git a/packages/browser-use/browser-use/package.json b/packages/browser-use/browser-use/package.json index 6ce71c831b..0fd0fc31aa 100644 --- a/packages/browser-use/browser-use/package.json +++ b/packages/browser-use/browser-use/package.json @@ -33,10 +33,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/bundle/acp-app/package.json b/packages/bundle/acp-app/package.json index 238e70fb36..7bad4d6c23 100644 --- a/packages/bundle/acp-app/package.json +++ b/packages/bundle/acp-app/package.json @@ -34,8 +34,8 @@ } }, "dependencies": { - "@deepseek-ai/dsh-acp": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", + "@deepseek-ai/dsh-acp": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", "commander": "^15.0.0" }, "peerDependencies": { diff --git a/packages/bundle/base/package.json b/packages/bundle/base/package.json index 7364ea5268..902eea8b20 100644 --- a/packages/bundle/base/package.json +++ b/packages/bundle/base/package.json @@ -34,97 +34,97 @@ } }, "dependencies": { - "@deepseek-ai/dsh-hmr": "workspace:^", + "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-bash-sandbox": "workspace:^", - "@deepseek-ai/dsh-command-compact": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-command-goal": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction-basic": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-credentials-local": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@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-pi-ai": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", - "@deepseek-ai/dsh-pwsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-repeat-tool-reminder": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-log-deepseek": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query-sqlite": "workspace:^", - "@deepseek-ai/dsh-session-telemetry-otel": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-first-prompt-llm": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-skill-badge": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-spill-local": "workspace:^", - "@deepseek-ai/dsh-spill-policy": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-storage-json": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-present": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tool-fs-search": "workspace:^", - "@deepseek-ai/dsh-tool-goal": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh": "workspace:^", - "@deepseek-ai/dsh-tool-ralph": "workspace:^", - "@deepseek-ai/dsh-tool-skill": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tool-subagent-control": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-tool-web": "workspace:^", - "@deepseek-ai/dsh-tool-workflow": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-loader": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", - "@deepseek-ai/dsh-web-fetch-http": "workspace:^", - "@deepseek-ai/dsh-web-search-deepseek": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-deepseek-account-platform": "workspace:^", - "@deepseek-ai/dsh-config-editor": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-bash-sandbox": "workspace:*", + "@deepseek-ai/dsh-command-compact": "workspace:*", + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-command-goal": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction-basic": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-credentials-local": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@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-pi-ai": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", + "@deepseek-ai/dsh-pwsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-repeat-tool-reminder": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query-sqlite": "workspace:*", + "@deepseek-ai/dsh-session-telemetry-otel": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-first-prompt-llm": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-skill-badge": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-spill-local": "workspace:*", + "@deepseek-ai/dsh-spill-policy": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-storage-json": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-present": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tool-fs-search": "workspace:*", + "@deepseek-ai/dsh-tool-goal": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh": "workspace:*", + "@deepseek-ai/dsh-tool-ralph": "workspace:*", + "@deepseek-ai/dsh-tool-skill": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tool-subagent-control": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-tool-web": "workspace:*", + "@deepseek-ai/dsh-tool-workflow": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-loader": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", + "@deepseek-ai/dsh-web-fetch-http": "workspace:*", + "@deepseek-ai/dsh-web-search-deepseek": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-deepseek-account-platform": "workspace:*", + "@deepseek-ai/dsh-config-editor": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/bundle/headless/package.json b/packages/bundle/headless/package.json index aaa64d7ee9..645978b0db 100644 --- a/packages/bundle/headless/package.json +++ b/packages/bundle/headless/package.json @@ -40,32 +40,32 @@ } }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "commander": "^15.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*" } } diff --git a/packages/bundle/sdk-app/package.json b/packages/bundle/sdk-app/package.json index b22f4a974b..9f36541599 100644 --- a/packages/bundle/sdk-app/package.json +++ b/packages/bundle/sdk-app/package.json @@ -34,12 +34,12 @@ } }, "dependencies": { - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:^", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "commander": "^15.0.0", - "@deepseek-ai/dsh-skill-office": "workspace:^", - "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:^" + "@deepseek-ai/dsh-skill-office": "workspace:*", + "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/bundle/sdk-minimal/package.json b/packages/bundle/sdk-minimal/package.json index 00443c256c..b74742e9c9 100644 --- a/packages/bundle/sdk-minimal/package.json +++ b/packages/bundle/sdk-minimal/package.json @@ -35,33 +35,33 @@ }, "dependencies": { "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@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-retry": "workspace:^", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-sdk-app": "workspace:^", - "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-log-deepseek": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-tool-bash-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@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-retry": "workspace:*", + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-sdk-app": "workspace:*", + "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-tool-bash-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/bundle/web-app/package.json b/packages/bundle/web-app/package.json index 6d3db15d18..f90eb29598 100644 --- a/packages/bundle/web-app/package.json +++ b/packages/bundle/web-app/package.json @@ -50,148 +50,148 @@ } }, "dependencies": { - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-agent-preset": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-agent-tool-presentation": "workspace:^", - "@deepseek-ai/dsh-api-job-controller": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-settings-controller": "workspace:^", - "@deepseek-ai/dsh-api-terminal-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-client-hmr": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:^", - "@deepseek-ai/dsh-client-ui-approval": "workspace:^", - "@deepseek-ai/dsh-client-ui-attachment": "workspace:^", - "@deepseek-ai/dsh-client-ui-brand-official": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-commands": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-cordis": "workspace:^", - "@deepseek-ai/dsh-client-ui-deliverables": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-client-ui-goal": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-jobs": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-message-feedback": "workspace:^", - "@deepseek-ai/dsh-client-ui-model-selection": "workspace:^", - "@deepseek-ai/dsh-client-ui-open-in-app": "workspace:^", - "@deepseek-ai/dsh-client-ui-permission-presets": "workspace:^", - "@deepseek-ai/dsh-client-ui-plan": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-client-ui-reference": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-schedule": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-general": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-models": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-plugins": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-shell": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-agent-loop": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-subagent": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-web-search": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-files": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-terminal": "workspace:^", - "@deepseek-ai/dsh-client-ui-skill": "workspace:^", - "@deepseek-ai/dsh-client-ui-subagent": "workspace:^", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^", - "@deepseek-ai/dsh-client-ui-tool": "workspace:^", - "@deepseek-ai/dsh-client-ui-trajectory": "workspace:^", - "@deepseek-ai/dsh-client-ui-user-questions": "workspace:^", - "@deepseek-ai/dsh-client-ui-workflow-run": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-command-compact": "workspace:^", - "@deepseek-ai/dsh-command-goal": "workspace:^", - "@deepseek-ai/dsh-compaction-basic": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-cordis-client-runner": "workspace:^", - "@deepseek-ai/dsh-cordis-host-runner": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-file-reference-local": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-auto": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-host-frontend-static": "workspace:^", - "@deepseek-ai/dsh-host-open-in-app": "workspace:^", - "@deepseek-ai/dsh-host-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-office-to-pdf": "workspace:^", - "@deepseek-ai/dsh-persona": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", - "@deepseek-ai/dsh-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-session-log-export": "workspace:^", - "@deepseek-ai/dsh-session-reference": "workspace:^", - "@deepseek-ai/dsh-session-stats": "workspace:^", - "@deepseek-ai/dsh-session-turn-outline": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-tool-ask-user": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-bash-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-cordis": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tool-fs-search": "workspace:^", - "@deepseek-ai/dsh-tool-goal": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-present": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-ralph": "workspace:^", - "@deepseek-ai/dsh-tool-skill": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tool-subagent-control": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-tool-web": "workspace:^", - "@deepseek-ai/dsh-tool-workflow": "workspace:^", - "@deepseek-ai/dsh-web-frontend": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", - "@deepseek-ai/dsh-workspace-changes": "workspace:^", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-agent-preset": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-agent-tool-presentation": "workspace:*", + "@deepseek-ai/dsh-api-job-controller": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-settings-controller": "workspace:*", + "@deepseek-ai/dsh-api-terminal-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-client-hmr": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:*", + "@deepseek-ai/dsh-client-ui-approval": "workspace:*", + "@deepseek-ai/dsh-client-ui-attachment": "workspace:*", + "@deepseek-ai/dsh-client-ui-brand-official": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-commands": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-cordis": "workspace:*", + "@deepseek-ai/dsh-client-ui-deliverables": "workspace:*", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-client-ui-goal": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-jobs": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-message-feedback": "workspace:*", + "@deepseek-ai/dsh-client-ui-model-selection": "workspace:*", + "@deepseek-ai/dsh-client-ui-open-in-app": "workspace:*", + "@deepseek-ai/dsh-client-ui-permission-presets": "workspace:*", + "@deepseek-ai/dsh-client-ui-plan": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-client-ui-reference": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-schedule": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-general": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-models": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-plugins": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-shell": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-agent-loop": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-subagent": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-web-search": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-files": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-terminal": "workspace:*", + "@deepseek-ai/dsh-client-ui-skill": "workspace:*", + "@deepseek-ai/dsh-client-ui-subagent": "workspace:*", + "@deepseek-ai/dsh-client-ui-theme": "workspace:*", + "@deepseek-ai/dsh-client-ui-tool": "workspace:*", + "@deepseek-ai/dsh-client-ui-trajectory": "workspace:*", + "@deepseek-ai/dsh-client-ui-user-questions": "workspace:*", + "@deepseek-ai/dsh-client-ui-workflow-run": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-command-compact": "workspace:*", + "@deepseek-ai/dsh-command-goal": "workspace:*", + "@deepseek-ai/dsh-compaction-basic": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-cordis-client-runner": "workspace:*", + "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-file-reference-local": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-auto": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-host-frontend-static": "workspace:*", + "@deepseek-ai/dsh-host-open-in-app": "workspace:*", + "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-office-to-pdf": "workspace:*", + "@deepseek-ai/dsh-persona": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", + "@deepseek-ai/dsh-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-session-log-export": "workspace:*", + "@deepseek-ai/dsh-session-reference": "workspace:*", + "@deepseek-ai/dsh-session-stats": "workspace:*", + "@deepseek-ai/dsh-session-turn-outline": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-tool-ask-user": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-bash-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-cordis": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tool-fs-search": "workspace:*", + "@deepseek-ai/dsh-tool-goal": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-present": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-ralph": "workspace:*", + "@deepseek-ai/dsh-tool-skill": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tool-subagent-control": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-tool-web": "workspace:*", + "@deepseek-ai/dsh-tool-workflow": "workspace:*", + "@deepseek-ai/dsh-web-frontend": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", + "@deepseek-ai/dsh-workspace-changes": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "commander": "^15.0.0", "open": "^11.0.0", - "@deepseek-ai/dsh-api-account-controller": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-account": "workspace:^" + "@deepseek-ai/dsh-api-account-controller": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-account": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/libreoffice-kit": "0.0.1" } } diff --git a/packages/client/connection/package.json b/packages/client/connection/package.json index 5ce575e9f3..6542fde56a 100644 --- a/packages/client/connection/package.json +++ b/packages/client/connection/package.json @@ -34,7 +34,7 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-credentials": "workspace:^", + "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, @@ -45,16 +45,16 @@ ], "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/client/file-upload/package.json b/packages/client/file-upload/package.json index 756c1fd785..6d9a13d01a 100644 --- a/packages/client/file-upload/package.json +++ b/packages/client/file-upload/package.json @@ -63,22 +63,22 @@ ], "dependencies": { "zod": "^4.4.3", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*" } } diff --git a/packages/client/hmr/package.json b/packages/client/hmr/package.json index 99db6b8511..8c0d0b98c5 100644 --- a/packages/client/hmr/package.json +++ b/packages/client/hmr/package.json @@ -47,9 +47,9 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "files": [ diff --git a/packages/client/locale/package.json b/packages/client/locale/package.json index 00332a7c88..975c214f3c 100644 --- a/packages/client/locale/package.json +++ b/packages/client/locale/package.json @@ -43,18 +43,18 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" diff --git a/packages/client/modules/package.json b/packages/client/modules/package.json index 7a727b9a81..503da37460 100644 --- a/packages/client/modules/package.json +++ b/packages/client/modules/package.json @@ -43,11 +43,11 @@ "license": "MIT", "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-package-manifest": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^" + "@deepseek-ai/dsh-package-manifest": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/resources/package.json b/packages/client/resources/package.json index bb919f4fb5..77ca0f7ff4 100644 --- a/packages/client/resources/package.json +++ b/packages/client/resources/package.json @@ -43,11 +43,11 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-agent-preset/package.json b/packages/client/ui-agent-preset/package.json index fd83da3206..1aacc6da54 100644 --- a/packages/client/ui-agent-preset/package.json +++ b/packages/client/ui-agent-preset/package.json @@ -50,22 +50,22 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-approval/package.json b/packages/client/ui-approval/package.json index acb0a0c9ed..487ac0dc2d 100644 --- a/packages/client/ui-approval/package.json +++ b/packages/client/ui-approval/package.json @@ -48,17 +48,17 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-attachment/package.json b/packages/client/ui-attachment/package.json index d767cdc8b2..8a7f893785 100644 --- a/packages/client/ui-attachment/package.json +++ b/packages/client/ui-attachment/package.json @@ -46,16 +46,16 @@ "@deepseek-ai/cordis": "workspace:^", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-trajectory": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-trajectory": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-client-ui-tool": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-client-ui-tool": "workspace:*", "clsx": "^2.0.0" }, "files": [ diff --git a/packages/client/ui-brand-official/package.json b/packages/client/ui-brand-official/package.json index e99d48b16e..843fd27c7e 100644 --- a/packages/client/ui-brand-official/package.json +++ b/packages/client/ui-brand-official/package.json @@ -43,9 +43,9 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index a81325b054..c1a274891d 100644 --- a/packages/client/ui-chat/package.json +++ b/packages/client/ui-chat/package.json @@ -53,46 +53,46 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-approval": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-stats": "workspace:^", - "@deepseek-ai/dsh-session-turn-outline": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-approval": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-stats": "workspace:*", + "@deepseek-ai/dsh-session-turn-outline": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tools": "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", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" diff --git a/packages/client/ui-commands/package.json b/packages/client/ui-commands/package.json index 3b0b2cc6fb..68c0cea7c7 100644 --- a/packages/client/ui-commands/package.json +++ b/packages/client/ui-commands/package.json @@ -45,24 +45,24 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", "clsx": "^2.0.0" }, "files": [ diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index 37093c371d..f24bce707f 100644 --- a/packages/client/ui-conversation/package.json +++ b/packages/client/ui-conversation/package.json @@ -53,35 +53,35 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", "@lexical/headless": "^0.49.0", @@ -94,8 +94,8 @@ "@lexical/text": "^0.49.0", "@lexical/plain-text": "^0.49.0", "@lexical/history": "^0.49.0", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-deliverables/package.json b/packages/client/ui-deliverables/package.json index ed6f4f7f8c..c098ecc327 100644 --- a/packages/client/ui-deliverables/package.json +++ b/packages/client/ui-deliverables/package.json @@ -50,36 +50,36 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-client-ui-tool": "workspace:^", - "@deepseek-ai/dsh-tool-present": "workspace:^", - "@deepseek-ai/dsh-workspace-changes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^" + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-client-ui-tool": "workspace:*", + "@deepseek-ai/dsh-tool-present": "workspace:*", + "@deepseek-ai/dsh-workspace-changes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*" }, "files": [ "lib/index.js", @@ -87,6 +87,6 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/client/ui-directory-picker-browse/package.json b/packages/client/ui-directory-picker-browse/package.json index 4c36927836..293bd47169 100644 --- a/packages/client/ui-directory-picker-browse/package.json +++ b/packages/client/ui-directory-picker-browse/package.json @@ -45,13 +45,13 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", diff --git a/packages/client/ui-directory-picker-native/package.json b/packages/client/ui-directory-picker-native/package.json index a98526585b..7328ea9270 100644 --- a/packages/client/ui-directory-picker-native/package.json +++ b/packages/client/ui-directory-picker-native/package.json @@ -43,9 +43,9 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", diff --git a/packages/client/ui-dockkit/package.json b/packages/client/ui-dockkit/package.json index 435cde2785..cb7c2ef43c 100644 --- a/packages/client/ui-dockkit/package.json +++ b/packages/client/ui-dockkit/package.json @@ -24,8 +24,8 @@ "license": "MIT", "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-goal/package.json b/packages/client/ui-goal/package.json index ecd1e59c4a..75100555cd 100644 --- a/packages/client/ui-goal/package.json +++ b/packages/client/ui-goal/package.json @@ -48,25 +48,25 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-input-trigger/package.json b/packages/client/ui-input-trigger/package.json index 2e008aa00d..27acb1878b 100644 --- a/packages/client/ui-input-trigger/package.json +++ b/packages/client/ui-input-trigger/package.json @@ -45,21 +45,21 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", "clsx": "^2.0.0" }, "files": [ diff --git a/packages/client/ui-jobs/package.json b/packages/client/ui-jobs/package.json index 533c729dcd..7a1fabd62c 100644 --- a/packages/client/ui-jobs/package.json +++ b/packages/client/ui-jobs/package.json @@ -35,16 +35,16 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-job-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-job-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-layout/package.json b/packages/client/ui-layout/package.json index 3ae2159164..4f124c1325 100644 --- a/packages/client/ui-layout/package.json +++ b/packages/client/ui-layout/package.json @@ -45,13 +45,13 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-theme": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0" diff --git a/packages/client/ui-message-feedback/package.json b/packages/client/ui-message-feedback/package.json index b27cce2458..e56f6eab87 100644 --- a/packages/client/ui-message-feedback/package.json +++ b/packages/client/ui-message-feedback/package.json @@ -46,29 +46,29 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-commands": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^" + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-commands": "workspace:*", + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-model-selection/package.json b/packages/client/ui-model-selection/package.json index eaaf7a5071..27e557c7ea 100644 --- a/packages/client/ui-model-selection/package.json +++ b/packages/client/ui-model-selection/package.json @@ -45,26 +45,26 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-commands": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-commands": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", "@types/react-dom": "~18.3.0", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", "clsx": "^2.1.1" }, "files": [ diff --git a/packages/client/ui-open-in-app/package.json b/packages/client/ui-open-in-app/package.json index 1d4d53f0de..bf1a0d2af4 100644 --- a/packages/client/ui-open-in-app/package.json +++ b/packages/client/ui-open-in-app/package.json @@ -55,23 +55,23 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-host-open-in-app": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-documentpreview": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-host-open-in-app": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", - "@deepseek-ai/dsh-client-ui-deliverables": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^" + "@deepseek-ai/dsh-client-ui-deliverables": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*" } } diff --git a/packages/client/ui-permission-presets/package.json b/packages/client/ui-permission-presets/package.json index 3af5f76112..71e21c281a 100644 --- a/packages/client/ui-permission-presets/package.json +++ b/packages/client/ui-permission-presets/package.json @@ -48,26 +48,26 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-remote-mock": "workspace:^", + "@deepseek-ai/dsh-remote-mock": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-commands": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-commands": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", "@types/react": "~18.3.1", "clsx": "^2.0.0", "react": "^18.2.0", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^" + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-plan/package.json b/packages/client/ui-plan/package.json index 5da11d8113..9a23b0624c 100644 --- a/packages/client/ui-plan/package.json +++ b/packages/client/ui-plan/package.json @@ -49,29 +49,29 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-user-questions": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-user-questions": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-plugin-manager/package.json b/packages/client/ui-plugin-manager/package.json index 4446c4623c..c450c4522b 100644 --- a/packages/client/ui-plugin-manager/package.json +++ b/packages/client/ui-plugin-manager/package.json @@ -54,25 +54,25 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "clsx": "^2.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-util-crypto": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-plugin-manager": "workspace:^" + "@deepseek-ai/dsh-util-crypto": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-plugin-manager": "workspace:*" }, "files": [ "lib/index.js", @@ -84,9 +84,9 @@ "lib/typert.remote-client.d.ts" ], "dependencies": { - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/client/ui-primitives/package.json b/packages/client/ui-primitives/package.json index a3002de65d..7c3fe33377 100644 --- a/packages/client/ui-primitives/package.json +++ b/packages/client/ui-primitives/package.json @@ -23,7 +23,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/dsh-client-store": "workspace:^", + "@deepseek-ai/dsh-client-store": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@deepseek-ai/cordis": "workspace:^", @@ -39,7 +39,7 @@ "micromark-util-symbol": "^2.0.1", "micromark-util-types": "^2.0.2", "shiki": "^4.3.1", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@shikijs/langs": "^4.3.1", "@types/mdast": "^4.0.4", "micromark-factory-space": "^2.0.1", diff --git a/packages/client/ui-reference/package.json b/packages/client/ui-reference/package.json index 7031eb0758..0ffabad7b7 100644 --- a/packages/client/ui-reference/package.json +++ b/packages/client/ui-reference/package.json @@ -47,20 +47,20 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-session-reference": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-session-reference": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^" + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-renderer/package.json b/packages/client/ui-renderer/package.json index eb17289206..4235ded58f 100644 --- a/packages/client/ui-renderer/package.json +++ b/packages/client/ui-renderer/package.json @@ -45,9 +45,9 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@types/use-sync-external-store": "^1.5.0", diff --git a/packages/client/ui-schedule/package.json b/packages/client/ui-schedule/package.json index ad9266892e..c7463d0b6a 100644 --- a/packages/client/ui-schedule/package.json +++ b/packages/client/ui-schedule/package.json @@ -44,16 +44,16 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-schedule": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-schedule": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-session/package.json b/packages/client/ui-session/package.json index f6cd7e1ae3..cee0cad387 100644 --- a/packages/client/ui-session/package.json +++ b/packages/client/ui-session/package.json @@ -45,15 +45,15 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings-account/package.json b/packages/client/ui-settings-account/package.json index 6ebc0756ed..b32c71683f 100644 --- a/packages/client/ui-settings-account/package.json +++ b/packages/client/ui-settings-account/package.json @@ -46,23 +46,23 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-theme": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@testing-library/react": "^16.1.0", "@types/big.js": "^6.2.2", "@types/react": "~18.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-client-ui-settings-models": "workspace:^", + "@deepseek-ai/dsh-client-ui-settings-models": "workspace:*", "@types/react-dom": "~18.3.0", - "@deepseek-ai/dsh-host-webserver": "workspace:^", + "@deepseek-ai/dsh-host-webserver": "workspace:*", "big.js": "^7.0.1" }, "files": [ diff --git a/packages/client/ui-settings-agent-loop/package.json b/packages/client/ui-settings-agent-loop/package.json index 4f5fb92be4..25b2998dfa 100644 --- a/packages/client/ui-settings-agent-loop/package.json +++ b/packages/client/ui-settings-agent-loop/package.json @@ -45,15 +45,15 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index 5791636067..0cff6e139e 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -53,22 +53,22 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", "@types/react": "~18.3.1", "clsx": "^2.0.0", "react": "^18.2.0", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-settings-models/package.json b/packages/client/ui-settings-models/package.json index 5d89bd7e81..dbe8933c3d 100644 --- a/packages/client/ui-settings-models/package.json +++ b/packages/client/ui-settings-models/package.json @@ -44,20 +44,20 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^" + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" diff --git a/packages/client/ui-settings-plugin-inventory/package.json b/packages/client/ui-settings-plugin-inventory/package.json index 319adb4f6a..7e32fc5d30 100644 --- a/packages/client/ui-settings-plugin-inventory/package.json +++ b/packages/client/ui-settings-plugin-inventory/package.json @@ -46,23 +46,23 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^" + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-settings-plugins/package.json b/packages/client/ui-settings-plugins/package.json index 4594e0123a..93a3550985 100644 --- a/packages/client/ui-settings-plugins/package.json +++ b/packages/client/ui-settings-plugins/package.json @@ -44,12 +44,12 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings-shell/package.json b/packages/client/ui-settings-shell/package.json index 4ede15ac42..daa21ee7aa 100644 --- a/packages/client/ui-settings-shell/package.json +++ b/packages/client/ui-settings-shell/package.json @@ -45,15 +45,15 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings-subagent/package.json b/packages/client/ui-settings-subagent/package.json index 19bc8b197c..e4fe2ec85e 100644 --- a/packages/client/ui-settings-subagent/package.json +++ b/packages/client/ui-settings-subagent/package.json @@ -46,15 +46,15 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings-web-search/package.json b/packages/client/ui-settings-web-search/package.json index d64740adc4..6bfa740f2f 100644 --- a/packages/client/ui-settings-web-search/package.json +++ b/packages/client/ui-settings-web-search/package.json @@ -46,15 +46,15 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/client/ui-settings/package.json b/packages/client/ui-settings/package.json index a6bf6a5a3c..832c7a2ce2 100644 --- a/packages/client/ui-settings/package.json +++ b/packages/client/ui-settings/package.json @@ -43,14 +43,14 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-sidebar-browser/package.json b/packages/client/ui-sidebar-browser/package.json index 5adf9a3482..06d0913de3 100644 --- a/packages/client/ui-sidebar-browser/package.json +++ b/packages/client/ui-sidebar-browser/package.json @@ -48,16 +48,16 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-sidebar-documentpreview/package.json b/packages/client/ui-sidebar-documentpreview/package.json index aa69c49b32..ec734c2343 100644 --- a/packages/client/ui-sidebar-documentpreview/package.json +++ b/packages/client/ui-sidebar-documentpreview/package.json @@ -50,26 +50,26 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-office-to-pdf": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-office-to-pdf": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-office-to-pdf": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-office-to-pdf": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@fortune-sheet/core": "1.0.4", "@fortune-sheet/react": "1.0.4", "@testing-library/react": "^16.1.0", diff --git a/packages/client/ui-sidebar-files/package.json b/packages/client/ui-sidebar-files/package.json index 14d2b9c6c9..5587c41830 100644 --- a/packages/client/ui-sidebar-files/package.json +++ b/packages/client/ui-sidebar-files/package.json @@ -46,20 +46,20 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-sidebar-right/package.json b/packages/client/ui-sidebar-right/package.json index e16e516198..f44a757783 100644 --- a/packages/client/ui-sidebar-right/package.json +++ b/packages/client/ui-sidebar-right/package.json @@ -47,19 +47,19 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@testing-library/react": "^16.1.0", "@types/picomatch": "^4.0.2", "@types/react": "~18.3.1", @@ -68,7 +68,7 @@ "react-dom": "^18.2.0", "picomatch": "^4.0.4", "clsx": "^2.0.0", - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "zod": "^4.4.3" }, "files": [ diff --git a/packages/client/ui-sidebar-terminal/package.json b/packages/client/ui-sidebar-terminal/package.json index ec1e664b2c..d9c99fd988 100644 --- a/packages/client/ui-sidebar-terminal/package.json +++ b/packages/client/ui-sidebar-terminal/package.json @@ -46,29 +46,29 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "react": "^18.2.0", "clsx": "^2.0.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-api-terminal-controller": "workspace:^", + "@deepseek-ai/dsh-api-terminal-controller": "workspace:*", "@xterm/xterm": "^6.0.0", "@xterm/addon-fit": "^0.11.0", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^" + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-theme": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-sidebar/package.json b/packages/client/ui-sidebar/package.json index 08d1e28058..33b79491f2 100644 --- a/packages/client/ui-sidebar/package.json +++ b/packages/client/ui-sidebar/package.json @@ -47,16 +47,16 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", diff --git a/packages/client/ui-skill/package.json b/packages/client/ui-skill/package.json index 5f47f81404..cc8f76f0f0 100644 --- a/packages/client/ui-skill/package.json +++ b/packages/client/ui-skill/package.json @@ -48,24 +48,24 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-tool": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-tool": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^" + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-slots/package.json b/packages/client/ui-slots/package.json index b805b27033..08139c6187 100644 --- a/packages/client/ui-slots/package.json +++ b/packages/client/ui-slots/package.json @@ -23,7 +23,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/dsh-client-store": "workspace:^", + "@deepseek-ai/dsh-client-store": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^" }, diff --git a/packages/client/ui-subagent/package.json b/packages/client/ui-subagent/package.json index 591992812a..d30a7d742e 100644 --- a/packages/client/ui-subagent/package.json +++ b/packages/client/ui-subagent/package.json @@ -50,28 +50,28 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-resources": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-resources": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-input-trigger": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^" + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-theme/package.json b/packages/client/ui-theme/package.json index dc0a7b10fe..9783ead371 100644 --- a/packages/client/ui-theme/package.json +++ b/packages/client/ui-theme/package.json @@ -45,20 +45,20 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", "clsx": "^2.0.0", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-tool/package.json b/packages/client/ui-tool/package.json index 87acc5a4e9..7c421224cd 100644 --- a/packages/client/ui-tool/package.json +++ b/packages/client/ui-tool/package.json @@ -45,37 +45,37 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-spill-policy": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-session-query": "workspace:^", - "@deepseek-ai/dsh-tool-terminal": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", + "@deepseek-ai/dsh-spill-policy": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-session-query": "workspace:*", + "@deepseek-ai/dsh-tool-terminal": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", "clsx": "^2.0.0", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-trajectory/package.json b/packages/client/ui-trajectory/package.json index 766c6a5948..7af88eda53 100644 --- a/packages/client/ui-trajectory/package.json +++ b/packages/client/ui-trajectory/package.json @@ -46,27 +46,27 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", "@tanstack/react-virtual": "^3.14.9", "diff": "^9.0.0" }, diff --git a/packages/client/ui-user-questions/package.json b/packages/client/ui-user-questions/package.json index f84d156b5a..659125a54c 100644 --- a/packages/client/ui-user-questions/package.json +++ b/packages/client/ui-user-questions/package.json @@ -48,26 +48,26 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "react": "^18.2.0", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "clsx": "^2.0.0", - "@deepseek-ai/dsh-llm": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-workflow-run/package.json b/packages/client/ui-workflow-run/package.json index 8fb7adbf80..f3bba66b09 100644 --- a/packages/client/ui-workflow-run/package.json +++ b/packages/client/ui-workflow-run/package.json @@ -53,20 +53,20 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tool-workflow": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tool-workflow": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0" diff --git a/packages/client/ui-workspace/package.json b/packages/client/ui-workspace/package.json index 7bbb525f01..65ddcbcdd2 100644 --- a/packages/client/ui-workspace/package.json +++ b/packages/client/ui-workspace/package.json @@ -52,28 +52,28 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-schedule": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-util-workspace-path": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-schedule": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-util-workspace-path": "workspace:*", "@types/react": "~18.3.1", "clsx": "^2.0.0", "react": "^18.2.0" diff --git a/packages/client/web/package.json b/packages/client/web/package.json index dbdceed9cc..9647a9201c 100644 --- a/packages/client/web/package.json +++ b/packages/client/web/package.json @@ -28,19 +28,19 @@ "license": "MIT", "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^6.0.3", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/compaction/command-compact/package.json b/packages/compaction/command-compact/package.json index cb2280b0e6..2093ae3dd1 100644 --- a/packages/compaction/command-compact/package.json +++ b/packages/compaction/command-compact/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/compaction/compaction-basic/package.json b/packages/compaction/compaction-basic/package.json index a7d9bf1b37..a4a660847d 100644 --- a/packages/compaction/compaction-basic/package.json +++ b/packages/compaction/compaction-basic/package.json @@ -28,13 +28,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-compaction-tool-result-pruner": { @@ -42,26 +42,26 @@ } }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" } } diff --git a/packages/compaction/compaction-image-offload/package.json b/packages/compaction/compaction-image-offload/package.json index 9e44e450ff..27d4877e4d 100644 --- a/packages/compaction/compaction-image-offload/package.json +++ b/packages/compaction/compaction-image-offload/package.json @@ -32,26 +32,26 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-compaction-basic": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-compaction-basic": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/compaction/compaction-tool-result-pruner/package.json b/packages/compaction/compaction-tool-result-pruner/package.json index 20f2fdb52d..5567dc501c 100644 --- a/packages/compaction/compaction-tool-result-pruner/package.json +++ b/packages/compaction/compaction-tool-result-pruner/package.json @@ -28,25 +28,25 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" } } diff --git a/packages/compaction/compaction/package.json b/packages/compaction/compaction/package.json index 9abbe6e1a1..8528a283e6 100644 --- a/packages/compaction/compaction/package.json +++ b/packages/compaction/compaction/package.json @@ -41,19 +41,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/computer-use/computer-use/package.json b/packages/computer-use/computer-use/package.json index 06e8ffe1ce..1301e8097c 100644 --- a/packages/computer-use/computer-use/package.json +++ b/packages/computer-use/computer-use/package.json @@ -33,10 +33,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/context/agent-instructions/package.json b/packages/context/agent-instructions/package.json index f1aadb8161..81111e3ade 100644 --- a/packages/context/agent-instructions/package.json +++ b/packages/context/agent-instructions/package.json @@ -28,33 +28,33 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/context/file-reference-local/package.json b/packages/context/file-reference-local/package.json index 3ba90a6f9c..48410c3c47 100644 --- a/packages/context/file-reference-local/package.json +++ b/packages/context/file-reference-local/package.json @@ -35,17 +35,17 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-file-reference": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-file-reference": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/context/file-reference/package.json b/packages/context/file-reference/package.json index 4e62eec197..51511ee0c5 100644 --- a/packages/context/file-reference/package.json +++ b/packages/context/file-reference/package.json @@ -36,11 +36,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/context/session-reference/package.json b/packages/context/session-reference/package.json index 63b6a472e2..6f05437bec 100644 --- a/packages/context/session-reference/package.json +++ b/packages/context/session-reference/package.json @@ -44,26 +44,26 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-spill": { @@ -77,23 +77,23 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-query-sqlite": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-spill-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-query-sqlite": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-spill-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/context/time-context/package.json b/packages/context/time-context/package.json index fbe6b3e1a6..e428b44aac 100644 --- a/packages/context/time-context/package.json +++ b/packages/context/time-context/package.json @@ -32,34 +32,34 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/context/tmux-context/package.json b/packages/context/tmux-context/package.json index a55f52143a..a3c925adb9 100644 --- a/packages/context/tmux-context/package.json +++ b/packages/context/tmux-context/package.json @@ -31,20 +31,20 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/core/agent-default-model/package.json b/packages/core/agent-default-model/package.json index 3c178f4b2f..6ba6e8276c 100644 --- a/packages/core/agent-default-model/package.json +++ b/packages/core/agent-default-model/package.json @@ -28,17 +28,17 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/dsh-config-editor": "workspace:^" + "@deepseek-ai/dsh-config-editor": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" } } diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index 775a18287a..524b467263 100644 --- a/packages/core/agent-loop/package.json +++ b/packages/core/agent-loop/package.json @@ -32,34 +32,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm-pi-ai": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/core/agent-tool-presentation/package.json b/packages/core/agent-tool-presentation/package.json index 766045b25d..dcec24466c 100644 --- a/packages/core/agent-tool-presentation/package.json +++ b/packages/core/agent-tool-presentation/package.json @@ -30,16 +30,16 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/core/agent/package.json b/packages/core/agent/package.json index 328e14dc26..984ebcea87 100644 --- a/packages/core/agent/package.json +++ b/packages/core/agent/package.json @@ -37,15 +37,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -54,16 +54,16 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/core/scope/package.json b/packages/core/scope/package.json index 6800bec82a..36921e56a6 100644 --- a/packages/core/scope/package.json +++ b/packages/core/scope/package.json @@ -32,11 +32,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/core/session/package.json b/packages/core/session/package.json index 1280425853..5b39f00434 100644 --- a/packages/core/session/package.json +++ b/packages/core/session/package.json @@ -45,19 +45,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/core/system-prompt/package.json b/packages/core/system-prompt/package.json index 2437ea15ba..bee1cf6b1a 100644 --- a/packages/core/system-prompt/package.json +++ b/packages/core/system-prompt/package.json @@ -32,18 +32,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/core/tools/package.json b/packages/core/tools/package.json index 805e36f866..8036ff79c8 100644 --- a/packages/core/tools/package.json +++ b/packages/core/tools/package.json @@ -42,34 +42,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" } } diff --git a/packages/credentials/authorization/package.json b/packages/credentials/authorization/package.json index 15a497a54d..6cd07c8e2b 100644 --- a/packages/credentials/authorization/package.json +++ b/packages/credentials/authorization/package.json @@ -37,15 +37,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/credentials/credentials-local/package.json b/packages/credentials/credentials-local/package.json index f4995df85c..15e7a86683 100644 --- a/packages/credentials/credentials-local/package.json +++ b/packages/credentials/credentials-local/package.json @@ -27,10 +27,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -39,10 +39,10 @@ "yaml": "^2.9.0" }, "devDependencies": { - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/credentials/credentials/package.json b/packages/credentials/credentials/package.json index e34be8589a..999563ccb8 100644 --- a/packages/credentials/credentials/package.json +++ b/packages/credentials/credentials/package.json @@ -38,13 +38,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^" + "@deepseek-ai/dsh-invariants": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^" + "@deepseek-ai/dsh-invariants": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/credentials/deepseek-account-platform/package.json b/packages/credentials/deepseek-account-platform/package.json index 5db5f3247a..7a7b07802c 100644 --- a/packages/credentials/deepseek-account-platform/package.json +++ b/packages/credentials/deepseek-account-platform/package.json @@ -33,17 +33,17 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", diff --git a/packages/credentials/deepseek-account/package.json b/packages/credentials/deepseek-account/package.json index 9940eb6146..3c9fc7965b 100644 --- a/packages/credentials/deepseek-account/package.json +++ b/packages/credentials/deepseek-account/package.json @@ -33,10 +33,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/deliverables/tool-present/package.json b/packages/deliverables/tool-present/package.json index 316b890fbf..ff9cd1ecdd 100644 --- a/packages/deliverables/tool-present/package.json +++ b/packages/deliverables/tool-present/package.json @@ -36,25 +36,25 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*" } } diff --git a/packages/deliverables/workspace-changes/package.json b/packages/deliverables/workspace-changes/package.json index 274a8e97c6..8c57b7c123 100644 --- a/packages/deliverables/workspace-changes/package.json +++ b/packages/deliverables/workspace-changes/package.json @@ -37,20 +37,20 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*" } } diff --git a/packages/document/office-to-pdf/package.json b/packages/document/office-to-pdf/package.json index b2fcb0b1ec..f40739716f 100644 --- a/packages/document/office-to-pdf/package.json +++ b/packages/document/office-to-pdf/package.json @@ -50,15 +50,15 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-api-workspace-files": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-api-workspace-files": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "dependencies": { "@deepseek-ai/libreoffice-kit": "0.0.1", "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "zod": "^4.4.3" } } diff --git a/packages/experimental/agent-team-profile/package.json b/packages/experimental/agent-team-profile/package.json index 8b8f13ab09..799425de2d 100644 --- a/packages/experimental/agent-team-profile/package.json +++ b/packages/experimental/agent-team-profile/package.json @@ -38,9 +38,9 @@ } }, "dependencies": { - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-experimental-client-ui-agent-team": "workspace:^", - "@deepseek-ai/dsh-experimental-tool-agent-team": "workspace:^" + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-experimental-client-ui-agent-team": "workspace:*", + "@deepseek-ai/dsh-experimental-tool-agent-team": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/experimental/agent-team-profile/tests/profile.spec.ts b/packages/experimental/agent-team-profile/tests/profile.spec.ts index dd65a021ec..b75da63252 100644 --- a/packages/experimental/agent-team-profile/tests/profile.spec.ts +++ b/packages/experimental/agent-team-profile/tests/profile.spec.ts @@ -20,9 +20,9 @@ describe('Agent Teams profile bundle', () => { expect(manifest.publishConfig?.access).toBe('public') expect(manifest.dsh?.bundle?.patch).toBe('./cordis.patch.yml') expect(manifest.dependencies).toMatchObject({ - '@deepseek-ai/dsh-experimental-agent-team': 'workspace:^', - '@deepseek-ai/dsh-experimental-client-ui-agent-team': 'workspace:^', - '@deepseek-ai/dsh-experimental-tool-agent-team': 'workspace:^', + '@deepseek-ai/dsh-experimental-agent-team': 'workspace:*', + '@deepseek-ai/dsh-experimental-client-ui-agent-team': 'workspace:*', + '@deepseek-ai/dsh-experimental-tool-agent-team': 'workspace:*', }) const parsed = yaml.load( diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 14767611c6..4755adc008 100644 --- a/packages/experimental/agent-team/package.json +++ b/packages/experimental/agent-team/package.json @@ -55,36 +55,36 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/experimental/api-speech-to-text/package.json b/packages/experimental/api-speech-to-text/package.json index dc224aba5e..0be6c5f62b 100644 --- a/packages/experimental/api-speech-to-text/package.json +++ b/packages/experimental/api-speech-to-text/package.json @@ -49,12 +49,12 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/experimental/auto-review/package.json b/packages/experimental/auto-review/package.json index d29d47aa09..a1d6ab5766 100644 --- a/packages/experimental/auto-review/package.json +++ b/packages/experimental/auto-review/package.json @@ -28,45 +28,45 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-bash-sandbox": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-bash-sandbox": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "publishConfig": { diff --git a/packages/experimental/browser-use-chrome-devtools-mcp/package.json b/packages/experimental/browser-use-chrome-devtools-mcp/package.json index 03a619848e..e49230f1e8 100644 --- a/packages/experimental/browser-use-chrome-devtools-mcp/package.json +++ b/packages/experimental/browser-use-chrome-devtools-mcp/package.json @@ -27,27 +27,27 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:^", + "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:*", "chrome-devtools-mcp": "1.9.0" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/experimental/browser-use-playwright-mcp/package.json b/packages/experimental/browser-use-playwright-mcp/package.json index 8ebd6c3776..8ec4ebfb12 100644 --- a/packages/experimental/browser-use-playwright-mcp/package.json +++ b/packages/experimental/browser-use-playwright-mcp/package.json @@ -27,27 +27,27 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:^", + "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:*", "@playwright/mcp": "0.0.80" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/experimental/browser-use-runtime/package.json b/packages/experimental/browser-use-runtime/package.json index 68998b1a4e..48fa3a6136 100644 --- a/packages/experimental/browser-use-runtime/package.json +++ b/packages/experimental/browser-use-runtime/package.json @@ -33,34 +33,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^" + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*" } } diff --git a/packages/experimental/browser-use-runtime/tests/shared-host-runtimes.spec.ts b/packages/experimental/browser-use-runtime/tests/shared-host-runtimes.spec.ts index 06267f03f3..cf575acf38 100644 --- a/packages/experimental/browser-use-runtime/tests/shared-host-runtimes.spec.ts +++ b/packages/experimental/browser-use-runtime/tests/shared-host-runtimes.spec.ts @@ -28,8 +28,8 @@ describe('profile installs share the installation host runtime instances', () => it('declares every identity-bearing host runtime as a peer, never a dependency', async () => { const manifest = JSON.parse(await readFile(manifestPath, 'utf8')) as Manifest for (const name of SHARED_HOST_RUNTIMES) { - expect(manifest.peerDependencies?.[name], `${name} must be a peerDependency`).toBe('workspace:^') - expect(manifest.devDependencies?.[name], `${name} must also be a devDependency`).toBe('workspace:^') + expect(manifest.peerDependencies?.[name], `${name} must be a peerDependency`).toBe('workspace:*') + expect(manifest.devDependencies?.[name], `${name} must also be a devDependency`).toBe('workspace:*') expect(manifest.dependencies?.[name], `${name} must not be a dependency`).toBeUndefined() } }) diff --git a/packages/experimental/browser-use-stagehand-native/package.json b/packages/experimental/browser-use-stagehand-native/package.json index 9c6a106167..11574ac990 100644 --- a/packages/experimental/browser-use-stagehand-native/package.json +++ b/packages/experimental/browser-use-stagehand-native/package.json @@ -33,36 +33,36 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { "@browserbasehq/stagehand": "4.1.0", - "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3", - "@deepseek-ai/dsh-subprocess": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:*", "@puppeteer/browsers": "3.2.2" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "tsx": "^4.19.2" } } diff --git a/packages/experimental/client-ui-agent-team/package.json b/packages/experimental/client-ui-agent-team/package.json index 645eebb8ab..a7f95325e1 100644 --- a/packages/experimental/client-ui-agent-team/package.json +++ b/packages/experimental/client-ui-agent-team/package.json @@ -45,34 +45,34 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-workspace": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/experimental/client-ui-voice-input/package.json b/packages/experimental/client-ui-voice-input/package.json index b5c7d6e948..83b8a5035b 100644 --- a/packages/experimental/client-ui-voice-input/package.json +++ b/packages/experimental/client-ui-voice-input/package.json @@ -34,44 +34,44 @@ "dependencies": {}, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^" + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", "@testing-library/react": "^16.1.0", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:^" + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*" }, "dsh": { "client": { diff --git a/packages/experimental/computer-use-cua-driver-mcp/package.json b/packages/experimental/computer-use-cua-driver-mcp/package.json index 3266280b0c..f2fd4833d8 100644 --- a/packages/experimental/computer-use-cua-driver-mcp/package.json +++ b/packages/experimental/computer-use-cua-driver-mcp/package.json @@ -28,24 +28,24 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^" + "@deepseek-ai/dsh-mcp-client": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-computer-use": "workspace:^" + "@deepseek-ai/dsh-computer-use": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-computer-use": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-computer-use": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/experimental/computer-use-cua-driver-native/package.json b/packages/experimental/computer-use-cua-driver-native/package.json index 8287331a15..576e278077 100644 --- a/packages/experimental/computer-use-cua-driver-native/package.json +++ b/packages/experimental/computer-use-cua-driver-native/package.json @@ -28,12 +28,12 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-computer-use": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-computer-use": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-mcp-client": "workspace:^", + "@deepseek-ai/dsh-mcp-client": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@trycua/cua-driver": "0.28.0", "zod": "^4.4.3" @@ -42,16 +42,16 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-computer-use": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-computer-use": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/experimental/inspector/package.json b/packages/experimental/inspector/package.json index e7b98ab61e..6df2f5ccaa 100644 --- a/packages/experimental/inspector/package.json +++ b/packages/experimental/inspector/package.json @@ -40,23 +40,23 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "ws": "^8.21.0" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", + "@deepseek-ai/dsh-host-webserver": "workspace:*", "@types/ws": "^8.18.1", "playwright": "^1.49.0", "tsx": "^4.19.2" diff --git a/packages/experimental/ptc-runtime-python/package.json b/packages/experimental/ptc-runtime-python/package.json index 3d8acd591a..6a4e30d0e0 100644 --- a/packages/experimental/ptc-runtime-python/package.json +++ b/packages/experimental/ptc-runtime-python/package.json @@ -24,16 +24,16 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" diff --git a/packages/experimental/speech-to-text-sensevoice/package.json b/packages/experimental/speech-to-text-sensevoice/package.json index 72f5d6582f..603a5d5fb8 100644 --- a/packages/experimental/speech-to-text-sensevoice/package.json +++ b/packages/experimental/speech-to-text-sensevoice/package.json @@ -34,20 +34,20 @@ "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-timeout": "workspace:*", "zod": "^4.4.3", "sherpa-onnx-node": "1.13.8" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^" + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", "tsx": "^4.22.4" } } diff --git a/packages/experimental/speech-to-text/package.json b/packages/experimental/speech-to-text/package.json index b32066e0d7..c00434a19e 100644 --- a/packages/experimental/speech-to-text/package.json +++ b/packages/experimental/speech-to-text/package.json @@ -36,19 +36,19 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", + "@deepseek-ai/dsh-settings": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-config-editor": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-config-editor": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^" }, "peerDependenciesMeta": { diff --git a/packages/experimental/tool-agent-team/package.json b/packages/experimental/tool-agent-team/package.json index 8878b25505..a3a77f9c50 100644 --- a/packages/experimental/tool-agent-team/package.json +++ b/packages/experimental/tool-agent-team/package.json @@ -32,31 +32,31 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-tool-subagent-control": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-tool-subagent-control": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*" } } diff --git a/packages/experimental/voice-input-bundle/package.json b/packages/experimental/voice-input-bundle/package.json index 2c11f37297..f692cf044c 100644 --- a/packages/experimental/voice-input-bundle/package.json +++ b/packages/experimental/voice-input-bundle/package.json @@ -33,10 +33,10 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text-sensevoice": "workspace:^", - "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-experimental-client-ui-voice-input": "workspace:^" + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-experimental-speech-to-text-sensevoice": "workspace:*", + "@deepseek-ai/dsh-experimental-api-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-experimental-client-ui-voice-input": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/experimental/webworker-packer/package.json b/packages/experimental/webworker-packer/package.json index ceb1b1676e..668b82bc3e 100644 --- a/packages/experimental/webworker-packer/package.json +++ b/packages/experimental/webworker-packer/package.json @@ -34,11 +34,11 @@ "license": "MIT", "dependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-experimental-webworker-runtime": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-catalog": "workspace:^", - "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:^", + "@deepseek-ai/dsh-experimental-webworker-runtime": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-catalog": "workspace:*", + "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:*", "js-yaml": "^4.2.0", "picomatch": "^4.0.4" }, diff --git a/packages/experimental/webworker-runtime/package.json b/packages/experimental/webworker-runtime/package.json index 060daf31de..2fc41811cd 100644 --- a/packages/experimental/webworker-runtime/package.json +++ b/packages/experimental/webworker-runtime/package.json @@ -28,39 +28,39 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "@noble/hashes": "^2.3.0", "@yarnpkg/parsers": "^3.1.0", "acorn": "^8.17.0", "buffer": "^6.0.3", "picomatch": "^4.0.4", "readable-stream": "^4.7.0", - "@deepseek-ai/dsh-client-web": "workspace:^" + "@deepseek-ai/dsh-client-web": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-bash-sandbox": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-file-upload": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-bash-sandbox": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-file-upload": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/node-addon-system": "workspace:^", "@types/picomatch": "^3.0.2", "@types/readable-stream": "^4.0.24", diff --git a/packages/extensions/cordis-client-runner/package.json b/packages/extensions/cordis-client-runner/package.json index 8bd3a99f18..179c99411b 100644 --- a/packages/extensions/cordis-client-runner/package.json +++ b/packages/extensions/cordis-client-runner/package.json @@ -46,14 +46,14 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-theme": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "files": [ "lib/index.js", diff --git a/packages/extensions/cordis-host-runner/package.json b/packages/extensions/cordis-host-runner/package.json index 5503116c1d..6806581708 100644 --- a/packages/extensions/cordis-host-runner/package.json +++ b/packages/extensions/cordis-host-runner/package.json @@ -44,29 +44,29 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/extensions/tool-cordis/package.json b/packages/extensions/tool-cordis/package.json index cb1875f606..dedd950ab4 100644 --- a/packages/extensions/tool-cordis/package.json +++ b/packages/extensions/tool-cordis/package.json @@ -34,20 +34,20 @@ "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-cordis-host-runner": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-group": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-cordis-host-runner": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" } } diff --git a/packages/extensions/ui-cordis/package.json b/packages/extensions/ui-cordis/package.json index c161f93943..d04b3b1f1f 100644 --- a/packages/extensions/ui-cordis/package.json +++ b/packages/extensions/ui-cordis/package.json @@ -49,17 +49,17 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-cordis-client-runner": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-ui-tool": "workspace:^", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-cordis-client-runner": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-ui-tool": "workspace:*", "@types/react": "~18.3.1", "@deepseek-ai/cordis": "workspace:^", "react": "^18.2.0" diff --git a/packages/feedback/command-feedback/package.json b/packages/feedback/command-feedback/package.json index b1995415b8..1b74250577 100644 --- a/packages/feedback/command-feedback/package.json +++ b/packages/feedback/command-feedback/package.json @@ -44,11 +44,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "dependencies": { "zod": "^4.4.3" @@ -56,13 +56,13 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/feedback/message-feedback/package.json b/packages/feedback/message-feedback/package.json index 106946fca5..b393afb435 100644 --- a/packages/feedback/message-feedback/package.json +++ b/packages/feedback/message-feedback/package.json @@ -44,13 +44,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^" + "@deepseek-ai/dsh-command-feedback": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -59,13 +59,13 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^" + "@deepseek-ai/dsh-command-feedback": "workspace:*" } } diff --git a/packages/fs/fs-local/package.json b/packages/fs/fs-local/package.json index 8e53c16028..b2f474907c 100644 --- a/packages/fs/fs-local/package.json +++ b/packages/fs/fs-local/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -36,8 +36,8 @@ "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/fs/fs-observation-policy/package.json b/packages/fs/fs-observation-policy/package.json index 24efe2095b..78b209466a 100644 --- a/packages/fs/fs-observation-policy/package.json +++ b/packages/fs/fs-observation-policy/package.json @@ -27,12 +27,12 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/fs/fs-sandbox/package.json b/packages/fs/fs-sandbox/package.json index ac8a07338d..42883ae215 100644 --- a/packages/fs/fs-sandbox/package.json +++ b/packages/fs/fs-sandbox/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/fs/fs/package.json b/packages/fs/fs/package.json index 000c94d81a..c9b057bcd7 100644 --- a/packages/fs/fs/package.json +++ b/packages/fs/fs/package.json @@ -32,17 +32,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/fs/tool-fs-search/package.json b/packages/fs/tool-fs-search/package.json index 8ae76f64f5..75a5edae23 100644 --- a/packages/fs/tool-fs-search/package.json +++ b/packages/fs/tool-fs-search/package.json @@ -31,28 +31,28 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-scope": "workspace:*" } } diff --git a/packages/fs/tool-fs/package.json b/packages/fs/tool-fs/package.json index 56c0cda123..d548ab5eb4 100644 --- a/packages/fs/tool-fs/package.json +++ b/packages/fs/tool-fs/package.json @@ -31,36 +31,36 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*" } } diff --git a/packages/fs/tool-str-replace-editor/package.json b/packages/fs/tool-str-replace-editor/package.json index 29031060a8..d54181f075 100644 --- a/packages/fs/tool-str-replace-editor/package.json +++ b/packages/fs/tool-str-replace-editor/package.json @@ -26,29 +26,29 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/command-goal/package.json b/packages/goal/command-goal/package.json index 2f93584227..c1bf056a34 100644 --- a/packages/goal/command-goal/package.json +++ b/packages/goal/command-goal/package.json @@ -27,21 +27,21 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/goal-round-driver/package.json b/packages/goal/goal-round-driver/package.json index c6e47d27a7..ae2b0a808f 100644 --- a/packages/goal/goal-round-driver/package.json +++ b/packages/goal/goal-round-driver/package.json @@ -32,24 +32,24 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/goal/package.json b/packages/goal/goal/package.json index 618856b551..f332a6ffa1 100644 --- a/packages/goal/goal/package.json +++ b/packages/goal/goal/package.json @@ -53,14 +53,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -68,21 +68,21 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/goal/tool-goal/package.json b/packages/goal/tool-goal/package.json index bf2fcbe3b2..2a57e1f1c6 100644 --- a/packages/goal/tool-goal/package.json +++ b/packages/goal/tool-goal/package.json @@ -27,29 +27,29 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/guard/repeat-tool-reminder/package.json b/packages/guard/repeat-tool-reminder/package.json index 086c8ccd7f..057aa6226b 100644 --- a/packages/guard/repeat-tool-reminder/package.json +++ b/packages/guard/repeat-tool-reminder/package.json @@ -30,18 +30,18 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/guard/timeout-policy/package.json b/packages/guard/timeout-policy/package.json index d50a9fc65a..0bebbf4858 100644 --- a/packages/guard/timeout-policy/package.json +++ b/packages/guard/timeout-policy/package.json @@ -27,15 +27,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/hooks/hook-protocol/package.json b/packages/hooks/hook-protocol/package.json index 578b5d2e98..70d3d2e81f 100644 --- a/packages/hooks/hook-protocol/package.json +++ b/packages/hooks/hook-protocol/package.json @@ -32,15 +32,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/hooks/hooks-claude-code/package.json b/packages/hooks/hooks-claude-code/package.json index 7d9aa1f78c..bba5470e14 100644 --- a/packages/hooks/hooks-claude-code/package.json +++ b/packages/hooks/hooks-claude-code/package.json @@ -30,29 +30,29 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-hook-protocol": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-hook-protocol": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-hook-protocol": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-hook-protocol": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/hooks/hooks-codex/package.json b/packages/hooks/hooks-codex/package.json index c517e8f4b3..3ea3a780a4 100644 --- a/packages/hooks/hooks-codex/package.json +++ b/packages/hooks/hooks-codex/package.json @@ -30,27 +30,27 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-hook-protocol": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-hook-protocol": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-hook-protocol": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-hook-protocol": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/host/directory-picker-auto/package.json b/packages/host/directory-picker-auto/package.json index 7ca27050c3..d93a2fce96 100644 --- a/packages/host/directory-picker-auto/package.json +++ b/packages/host/directory-picker-auto/package.json @@ -29,24 +29,24 @@ "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:^", - "@deepseek-ai/dsh-host-directory-picker-native": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:*", + "@deepseek-ai/dsh-host-directory-picker-native": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^" + "@deepseek-ai/dsh-launch-environment": "workspace:*" } } diff --git a/packages/host/directory-picker-browse/package.json b/packages/host/directory-picker-browse/package.json index 2d1f70a67b..fdfce63818 100644 --- a/packages/host/directory-picker-browse/package.json +++ b/packages/host/directory-picker-browse/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "workspace:^", + "@deepseek-ai/dsh-host-directory-picker": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { diff --git a/packages/host/directory-picker-native/package.json b/packages/host/directory-picker-native/package.json index 909bcadec2..3ff3599ef3 100644 --- a/packages/host/directory-picker-native/package.json +++ b/packages/host/directory-picker-native/package.json @@ -32,8 +32,8 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", + "@deepseek-ai/dsh-host-directory-picker": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", "koffi": "^3.1.0" }, "peerDependencies": { diff --git a/packages/host/frontend-static/package.json b/packages/host/frontend-static/package.json index 9263fd96dc..64ad33c7a7 100644 --- a/packages/host/frontend-static/package.json +++ b/packages/host/frontend-static/package.json @@ -27,8 +27,8 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -36,9 +36,9 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-credentials-local": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-credentials-local": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/host/open-in-app/package.json b/packages/host/open-in-app/package.json index 928da709c3..8874731079 100644 --- a/packages/host/open-in-app/package.json +++ b/packages/host/open-in-app/package.json @@ -36,9 +36,9 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-native-command": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-native-command": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { @@ -47,6 +47,6 @@ "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^" + "@deepseek-ai/dsh-host-webserver": "workspace:*" } } diff --git a/packages/host/plugin-inventory/package.json b/packages/host/plugin-inventory/package.json index 7be45cdd39..3f82ea13a8 100644 --- a/packages/host/plugin-inventory/package.json +++ b/packages/host/plugin-inventory/package.json @@ -48,9 +48,9 @@ }, "peerDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -59,12 +59,12 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-package-manifest": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-package-manifest": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/host/product-telemetry-otel/package.json b/packages/host/product-telemetry-otel/package.json index 1fe09a1061..9b831237c4 100644 --- a/packages/host/product-telemetry-otel/package.json +++ b/packages/host/product-telemetry-otel/package.json @@ -42,7 +42,7 @@ "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*" } } diff --git a/packages/identity/anonymous-user-id/package.json b/packages/identity/anonymous-user-id/package.json index 157318f4b7..a1cdbbe8f0 100644 --- a/packages/identity/anonymous-user-id/package.json +++ b/packages/identity/anonymous-user-id/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/interaction/commands/package.json b/packages/interaction/commands/package.json index ac7dc28609..d4de2cc181 100644 --- a/packages/interaction/commands/package.json +++ b/packages/interaction/commands/package.json @@ -53,29 +53,29 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/interaction/permission-presets/package.json b/packages/interaction/permission-presets/package.json index e64ddaf2ee..5bc3f5a0b7 100644 --- a/packages/interaction/permission-presets/package.json +++ b/packages/interaction/permission-presets/package.json @@ -53,15 +53,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -69,16 +69,16 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" } } diff --git a/packages/interaction/tool-ask-user/package.json b/packages/interaction/tool-ask-user/package.json index afa6fa7b61..1d099cc99e 100644 --- a/packages/interaction/tool-ask-user/package.json +++ b/packages/interaction/tool-ask-user/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/interaction/user-approval/package.json b/packages/interaction/user-approval/package.json index ff1ff26931..3d66b93924 100644 --- a/packages/interaction/user-approval/package.json +++ b/packages/interaction/user-approval/package.json @@ -37,26 +37,26 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/interaction/user-questions/package.json b/packages/interaction/user-questions/package.json index 26f7cf5eb0..d4b5d2b72b 100644 --- a/packages/interaction/user-questions/package.json +++ b/packages/interaction/user-questions/package.json @@ -32,15 +32,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/jobs/jobs-local/package.json b/packages/jobs/jobs-local/package.json index 05c79b691a..4dc3e18fc1 100644 --- a/packages/jobs/jobs-local/package.json +++ b/packages/jobs/jobs-local/package.json @@ -27,10 +27,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -39,13 +39,13 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/jobs/jobs/package.json b/packages/jobs/jobs/package.json index fe9229b664..adba36e563 100644 --- a/packages/jobs/jobs/package.json +++ b/packages/jobs/jobs/package.json @@ -41,11 +41,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -54,11 +54,11 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/jobs/tool-jobs/package.json b/packages/jobs/tool-jobs/package.json index e00765bbdc..10f4755a62 100644 --- a/packages/jobs/tool-jobs/package.json +++ b/packages/jobs/tool-jobs/package.json @@ -30,23 +30,23 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index 10f7451c0a..83d17ede74 100644 --- a/packages/llm/llm-deepseek/package.json +++ b/packages/llm/llm-deepseek/package.json @@ -28,53 +28,53 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@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/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-deepseek-account": "workspace:*" }, "dependencies": { "@deepseek-ai/cosmokit": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "eventsource-parser": "^3.1.0" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "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-plugin-package-inventory-deepseek": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-log-deepseek": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "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-plugin-package-inventory-deepseek": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-credentials-local": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^" + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-credentials-local": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-loader": { diff --git a/packages/llm/llm-pi-ai/package.json b/packages/llm/llm-pi-ai/package.json index 15ce066afa..945007ee86 100644 --- a/packages/llm/llm-pi-ai/package.json +++ b/packages/llm/llm-pi-ai/package.json @@ -28,34 +28,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@earendil-works/pi-ai": "^0.85.1" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^" + "@deepseek-ai/dsh-settings": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-loader": { diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 639c9bcaf1..3b35e5dbd2 100644 --- a/packages/llm/llm-retry/package.json +++ b/packages/llm/llm-retry/package.json @@ -36,37 +36,37 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-llm-mock-server": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-mock-server": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/llm/llm/package.json b/packages/llm/llm/package.json index e4d5b7aa86..cb31bbc027 100644 --- a/packages/llm/llm/package.json +++ b/packages/llm/llm/package.json @@ -64,17 +64,17 @@ "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-util-crypto": "workspace:^", + "@deepseek-ai/dsh-util-crypto": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/llm/plugin-package-inventory-deepseek/package.json b/packages/llm/plugin-package-inventory-deepseek/package.json index d9303dfb9b..cbd31c2f69 100644 --- a/packages/llm/plugin-package-inventory-deepseek/package.json +++ b/packages/llm/plugin-package-inventory-deepseek/package.json @@ -32,16 +32,16 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-agent-preset-registry": { @@ -49,15 +49,15 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/llm/token-meter/package.json b/packages/llm/token-meter/package.json index b721369092..e3c797708b 100644 --- a/packages/llm/token-meter/package.json +++ b/packages/llm/token-meter/package.json @@ -37,25 +37,25 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" } } diff --git a/packages/lsp/lsp-stdio/package.json b/packages/lsp/lsp-stdio/package.json index be9f4655e6..c99723716a 100644 --- a/packages/lsp/lsp-stdio/package.json +++ b/packages/lsp/lsp-stdio/package.json @@ -28,27 +28,27 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-lsp": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-lsp": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-lsp": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-lsp": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "typescript": "^6.0.3", "typescript-language-server": "^5.0.0" } diff --git a/packages/lsp/lsp/package.json b/packages/lsp/lsp/package.json index 676582a86c..56c77c7fd9 100644 --- a/packages/lsp/lsp/package.json +++ b/packages/lsp/lsp/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/lsp/tool-lsp/package.json b/packages/lsp/tool-lsp/package.json index 5cb0eddcbe..406e7fc174 100644 --- a/packages/lsp/tool-lsp/package.json +++ b/packages/lsp/tool-lsp/package.json @@ -28,28 +28,28 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-lsp": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-lsp": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-lsp": "workspace:^", - "@deepseek-ai/dsh-lsp-stdio": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-lsp": "workspace:*", + "@deepseek-ai/dsh-lsp-stdio": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/mcp/mcp-client/package.json b/packages/mcp/mcp-client/package.json index 28fc45a965..8d6d336506 100644 --- a/packages/mcp/mcp-client/package.json +++ b/packages/mcp/mcp-client/package.json @@ -27,38 +27,38 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", "@modelcontextprotocol/client": "2.0.0", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "devDependencies": { - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@modelcontextprotocol/server-everything": "^2026.7.4", "@modelcontextprotocol/server-filesystem": "^2026.7.4", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", + "@deepseek-ai/dsh-http-proxy": "workspace:*", "@modelcontextprotocol/server": "2.0.0", "@modelcontextprotocol/node": "2.0.0", "zod": "^4.4.3", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-mcp-resources": { diff --git a/packages/mcp/mcp-resources/package.json b/packages/mcp/mcp-resources/package.json index aae011e7a0..e0a752747c 100644 --- a/packages/mcp/mcp-resources/package.json +++ b/packages/mcp/mcp-resources/package.json @@ -28,22 +28,22 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-system-prompt": { diff --git a/packages/plan/plan-mode/package.json b/packages/plan/plan-mode/package.json index 57909fa81d..e6b1a61626 100644 --- a/packages/plan/plan-mode/package.json +++ b/packages/plan/plan-mode/package.json @@ -41,15 +41,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -58,21 +58,21 @@ } }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/preset/agent-preset-registry/package.json b/packages/preset/agent-preset-registry/package.json index 437f8156c6..c57cc63ad4 100644 --- a/packages/preset/agent-preset-registry/package.json +++ b/packages/preset/agent-preset-registry/package.json @@ -54,15 +54,15 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -70,27 +70,27 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/cordis-plugin-group": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-agent-preset": "workspace:^" + "@deepseek-ai/dsh-hmr": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-agent-preset": "workspace:*" } } diff --git a/packages/preset/agent-preset/package.json b/packages/preset/agent-preset/package.json index f738797bba..bfc8ebc5a7 100644 --- a/packages/preset/agent-preset/package.json +++ b/packages/preset/agent-preset/package.json @@ -30,7 +30,7 @@ "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^" + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" @@ -39,9 +39,9 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@types/js-yaml": "^4.0.9", "js-yaml": "^4.2.0" diff --git a/packages/preset/persona/package.json b/packages/preset/persona/package.json index ee2bf4e835..e914eb7b2d 100644 --- a/packages/preset/persona/package.json +++ b/packages/preset/persona/package.json @@ -27,15 +27,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/ptc-runtime/ptc-runtime-node/package.json b/packages/ptc-runtime/ptc-runtime-node/package.json index 2c63093030..69b1c1d79b 100644 --- a/packages/ptc-runtime/ptc-runtime-node/package.json +++ b/packages/ptc-runtime/ptc-runtime-node/package.json @@ -32,30 +32,30 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^" + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*" } } diff --git a/packages/ptc-runtime/ptc-runtime/package.json b/packages/ptc-runtime/ptc-runtime/package.json index ce16281c34..8be77f928c 100644 --- a/packages/ptc-runtime/ptc-runtime/package.json +++ b/packages/ptc-runtime/ptc-runtime/package.json @@ -28,10 +28,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^" + "@deepseek-ai/dsh-sandbox": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^" + "@deepseek-ai/dsh-sandbox": "workspace:*" } } diff --git a/packages/sandbox/sandbox-local/package.json b/packages/sandbox/sandbox-local/package.json index cdf84a9e33..9beb6f9745 100644 --- a/packages/sandbox/sandbox-local/package.json +++ b/packages/sandbox/sandbox-local/package.json @@ -28,20 +28,20 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-sandbox-windows-acl": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-sandbox-windows-acl": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/node-addon-system": "workspace:^", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/sandbox/sandbox-policy/package.json b/packages/sandbox/sandbox-policy/package.json index 354b83966d..1d22ed4de2 100644 --- a/packages/sandbox/sandbox-policy/package.json +++ b/packages/sandbox/sandbox-policy/package.json @@ -32,25 +32,25 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/sandbox/sandbox-windows-acl/package.json b/packages/sandbox/sandbox-windows-acl/package.json index 1d5ceb80cc..a1c2af3066 100644 --- a/packages/sandbox/sandbox-windows-acl/package.json +++ b/packages/sandbox/sandbox-windows-acl/package.json @@ -34,18 +34,18 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^" + "@deepseek-ai/dsh-subprocess": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-lazy-require": "workspace:^", - "@deepseek-ai/dsh-win32-process": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:*", + "@deepseek-ai/dsh-win32-process": "workspace:*", "koffi": "^3.1.0" }, "devDependencies": { - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^" + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*" } } diff --git a/packages/sandbox/sandbox/package.json b/packages/sandbox/sandbox/package.json index f2224705c6..1cf477bf77 100644 --- a/packages/sandbox/sandbox/package.json +++ b/packages/sandbox/sandbox/package.json @@ -28,15 +28,15 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/schedule/schedule/package.json b/packages/schedule/schedule/package.json index 3c74ff0fe0..ccd61406d4 100644 --- a/packages/schedule/schedule/package.json +++ b/packages/schedule/schedule/package.json @@ -37,15 +37,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -53,19 +53,19 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/sdk/client/package.json b/packages/sdk/client/package.json index e7bf253781..9c48e6f414 100644 --- a/packages/sdk/client/package.json +++ b/packages/sdk/client/package.json @@ -29,15 +29,15 @@ "@deepseek-ai/dsh": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/sdk/protocol/package.json b/packages/sdk/protocol/package.json index df75c81272..7e74327224 100644 --- a/packages/sdk/protocol/package.json +++ b/packages/sdk/protocol/package.json @@ -26,15 +26,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/sdk/server/package.json b/packages/sdk/server/package.json index 871c8d28f5..5d1dccecc3 100644 --- a/packages/sdk/server/package.json +++ b/packages/sdk/server/package.json @@ -27,34 +27,34 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@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-scope": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@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-scope": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*" } } diff --git a/packages/session-query/session-log-export/package.json b/packages/session-query/session-log-export/package.json index d0a809e3ea..4d3b735411 100644 --- a/packages/session-query/session-log-export/package.json +++ b/packages/session-query/session-log-export/package.json @@ -36,35 +36,35 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-session-format": "workspace:^", + "@deepseek-ai/dsh-session-format": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "fflate": "^0.8.2", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-commands": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-message-feedback": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-commands": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-message-feedback": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", "@types/react": "~18.3.1", "react": "^18.2.0" }, diff --git a/packages/session-query/session-query-sqlite/package.json b/packages/session-query/session-query-sqlite/package.json index c498223650..9d89890329 100644 --- a/packages/session-query/session-query-sqlite/package.json +++ b/packages/session-query/session-query-sqlite/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -42,11 +42,11 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/session-query/session-query/package.json b/packages/session-query/session-query/package.json index d8e849eb97..911b0dd58f 100644 --- a/packages/session-query/session-query/package.json +++ b/packages/session-query/session-query/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "peerDependenciesMeta": { @@ -49,17 +49,17 @@ } }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-session-format-catalog": "workspace:^" + "@deepseek-ai/dsh-session-format-catalog": "workspace:*" } } diff --git a/packages/session-query/tool-session-query/package.json b/packages/session-query/tool-session-query/package.json index 243301c16b..fc1c8205da 100644 --- a/packages/session-query/tool-session-query/package.json +++ b/packages/session-query/tool-session-query/package.json @@ -28,34 +28,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-query-sqlite": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-query-sqlite": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/session/session-checkpoint-policy/package.json b/packages/session/session-checkpoint-policy/package.json index 5291298dfb..f6c1b0ed05 100644 --- a/packages/session/session-checkpoint-policy/package.json +++ b/packages/session/session-checkpoint-policy/package.json @@ -28,24 +28,24 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/session/session-format-catalog/package.json b/packages/session/session-format-catalog/package.json index 579e622fc4..5a87840d72 100644 --- a/packages/session/session-format-catalog/package.json +++ b/packages/session/session-format-catalog/package.json @@ -32,19 +32,19 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:^", - "@deepseek-ai/dsh-session-format-v1-to-v2": "workspace:^", - "@deepseek-ai/dsh-session-format-v2-to-v3": "workspace:^", - "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^" + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:*", + "@deepseek-ai/dsh-session-format-v1-to-v2": "workspace:*", + "@deepseek-ai/dsh-session-format-v2-to-v3": "workspace:*", + "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v0-to-v1/package.json b/packages/session/session-format-v0-to-v1/package.json index 9d19f7a1e2..f459fa8df1 100644 --- a/packages/session/session-format-v0-to-v1/package.json +++ b/packages/session/session-format-v0-to-v1/package.json @@ -39,14 +39,14 @@ } }, "dependencies": { - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v1-to-v2/package.json b/packages/session/session-format-v1-to-v2/package.json index d8e272f6a9..52311579fe 100644 --- a/packages/session/session-format-v1-to-v2/package.json +++ b/packages/session/session-format-v1-to-v2/package.json @@ -39,16 +39,16 @@ } }, "dependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v2-to-v3/package.json b/packages/session/session-format-v2-to-v3/package.json index ee3d72de6b..0a8320612b 100644 --- a/packages/session/session-format-v2-to-v3/package.json +++ b/packages/session/session-format-v2-to-v3/package.json @@ -39,9 +39,9 @@ } }, "dependencies": { - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:^", - "@deepseek-ai/dsh-session-format-v1-to-v2": "workspace:^" + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:*", + "@deepseek-ai/dsh-session-format-v1-to-v2": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/session/session-format-v3-to-v4/package.json b/packages/session/session-format-v3-to-v4/package.json index bc1b81174c..f2ded06631 100644 --- a/packages/session/session-format-v3-to-v4/package.json +++ b/packages/session/session-format-v3-to-v4/package.json @@ -39,8 +39,8 @@ } }, "dependencies": { - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-v2-to-v3": "workspace:^" + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-v2-to-v3": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/session/session-format/package.json b/packages/session/session-format/package.json index b2f97b61e5..a961d7063b 100644 --- a/packages/session/session-format/package.json +++ b/packages/session/session-format/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/session/session-log-deepseek/package.json b/packages/session/session-log-deepseek/package.json index 204012c54b..c5c7d5bdb5 100644 --- a/packages/session/session-log-deepseek/package.json +++ b/packages/session/session-log-deepseek/package.json @@ -37,28 +37,28 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-llm-mock-server": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^" + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-mock-server": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*" } } diff --git a/packages/session/session-persistence-jsonl/package.json b/packages/session/session-persistence-jsonl/package.json index 5304380064..7e7319e35b 100644 --- a/packages/session/session-persistence-jsonl/package.json +++ b/packages/session/session-persistence-jsonl/package.json @@ -28,23 +28,23 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session-format": "workspace:^", - "@deepseek-ai/dsh-session-format-catalog": "workspace:^", - "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session-format": "workspace:*", + "@deepseek-ai/dsh-session-format-catalog": "workspace:*", + "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:*", "@deepseek-ai/node-addon-system": "workspace:^", "@deepseek-ai/schemastery": "workspace:^", "koffi": "^3.1.0" }, "devDependencies": { - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/session/session-persistence/package.json b/packages/session/session-persistence/package.json index e7ba5f7075..8857a40ce0 100644 --- a/packages/session/session-persistence/package.json +++ b/packages/session/session-persistence/package.json @@ -28,18 +28,18 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/session/session-projection-cache/package.json b/packages/session/session-projection-cache/package.json index a80d0ff61f..0e3df5ea90 100644 --- a/packages/session/session-projection-cache/package.json +++ b/packages/session/session-projection-cache/package.json @@ -27,22 +27,22 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-storage-json": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-storage-json": "workspace:*" } } diff --git a/packages/session/session-projection/package.json b/packages/session/session-projection/package.json index a79cb2f4cc..35a2c63b64 100644 --- a/packages/session/session-projection/package.json +++ b/packages/session/session-projection/package.json @@ -35,11 +35,11 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/session/session-stats/package.json b/packages/session/session-stats/package.json index bee46f93f5..e7e8e810e6 100644 --- a/packages/session/session-stats/package.json +++ b/packages/session/session-stats/package.json @@ -36,9 +36,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -47,9 +47,9 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/session/session-telemetry-otel/package.json b/packages/session/session-telemetry-otel/package.json index 9226704736..87076c02e4 100644 --- a/packages/session/session-telemetry-otel/package.json +++ b/packages/session/session-telemetry-otel/package.json @@ -36,30 +36,30 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-telemetry": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-telemetry": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-logger-console": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-telemetry": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-telemetry": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/session/session-telemetry/package.json b/packages/session/session-telemetry/package.json index 6b789bc439..4bc43d3b58 100644 --- a/packages/session/session-telemetry/package.json +++ b/packages/session/session-telemetry/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/session/session-title-all-prompts-llm/package.json b/packages/session/session-title-all-prompts-llm/package.json index 63de05feb5..bb8d3f4847 100644 --- a/packages/session/session-title-all-prompts-llm/package.json +++ b/packages/session/session-title-all-prompts-llm/package.json @@ -23,22 +23,22 @@ "files": ["lib/index.js", "lib/types/**/*.d.ts"], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*" } } diff --git a/packages/session/session-title-first-prompt-llm/package.json b/packages/session/session-title-first-prompt-llm/package.json index 94d62269da..172d452cf7 100644 --- a/packages/session/session-title-first-prompt-llm/package.json +++ b/packages/session/session-title-first-prompt-llm/package.json @@ -23,10 +23,10 @@ "files": ["lib/index.js", "lib/types/**/*.d.ts"], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -35,13 +35,13 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*" } } diff --git a/packages/session/session-title-llm/package.json b/packages/session/session-title-llm/package.json index 309ebd8b76..523fd8d827 100644 --- a/packages/session/session-title-llm/package.json +++ b/packages/session/session-title-llm/package.json @@ -28,20 +28,20 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" } } diff --git a/packages/session/session-title/package.json b/packages/session/session-title/package.json index f9e4daffbc..249581d9b3 100644 --- a/packages/session/session-title/package.json +++ b/packages/session/session-title/package.json @@ -42,27 +42,27 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/session/session-turn-outline/package.json b/packages/session/session-turn-outline/package.json index 263a236c2e..815787f226 100644 --- a/packages/session/session-turn-outline/package.json +++ b/packages/session/session-turn-outline/package.json @@ -37,9 +37,9 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { "zod": "^4.4.3" @@ -48,8 +48,8 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/settings/settings/package.json b/packages/settings/settings/package.json index 485844b794..61d8deb162 100644 --- a/packages/settings/settings/package.json +++ b/packages/settings/settings/package.json @@ -33,26 +33,26 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-hmr": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", "yaml": "^2.8.1" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-config-editor": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-config-editor": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cosmokit": "workspace:^", "yaml": "^2.8.1" diff --git a/packages/shell/bash-local/package.json b/packages/shell/bash-local/package.json index fcc79274cd..1f22c64f8f 100644 --- a/packages/shell/bash-local/package.json +++ b/packages/shell/bash-local/package.json @@ -27,19 +27,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/shell/bash-sandbox/package.json b/packages/shell/bash-sandbox/package.json index 36601e482f..4e1e5d558b 100644 --- a/packages/shell/bash-sandbox/package.json +++ b/packages/shell/bash-sandbox/package.json @@ -27,21 +27,21 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/node-addon-system": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/pwsh-local/package.json b/packages/shell/pwsh-local/package.json index 765a695468..bee14d4ade 100644 --- a/packages/shell/pwsh-local/package.json +++ b/packages/shell/pwsh-local/package.json @@ -27,19 +27,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/shell/pwsh-sandbox/package.json b/packages/shell/pwsh-sandbox/package.json index d923d8619c..270bc8ed76 100644 --- a/packages/shell/pwsh-sandbox/package.json +++ b/packages/shell/pwsh-sandbox/package.json @@ -27,20 +27,20 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/shell/shell-env/package.json b/packages/shell/shell-env/package.json index 96f9b94fda..ab4377edf1 100644 --- a/packages/shell/shell-env/package.json +++ b/packages/shell/shell-env/package.json @@ -28,21 +28,21 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/shell/shell/package.json b/packages/shell/shell/package.json index 5f35c20062..6751f1230e 100644 --- a/packages/shell/shell/package.json +++ b/packages/shell/shell/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/shell/tool-bash-persistent/package.json b/packages/shell/tool-bash-persistent/package.json index 3822d63a47..d8bafa9f95 100644 --- a/packages/shell/tool-bash-persistent/package.json +++ b/packages/shell/tool-bash-persistent/package.json @@ -26,10 +26,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -38,19 +38,19 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/tool-bash/package.json b/packages/shell/tool-bash/package.json index 813f8d95e7..fa3c949577 100644 --- a/packages/shell/tool-bash/package.json +++ b/packages/shell/tool-bash/package.json @@ -27,41 +27,41 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/tool-pwsh-persistent/package.json b/packages/shell/tool-pwsh-persistent/package.json index 9698a5832d..791f2ec80e 100644 --- a/packages/shell/tool-pwsh-persistent/package.json +++ b/packages/shell/tool-pwsh-persistent/package.json @@ -26,10 +26,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -38,20 +38,20 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/shell/tool-pwsh/package.json b/packages/shell/tool-pwsh/package.json index 7af38c8972..47f76952a9 100644 --- a/packages/shell/tool-pwsh/package.json +++ b/packages/shell/tool-pwsh/package.json @@ -28,40 +28,40 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" } } diff --git a/packages/skill/skill-badge/package.json b/packages/skill/skill-badge/package.json index 8122558117..1704350aa5 100644 --- a/packages/skill/skill-badge/package.json +++ b/packages/skill/skill-badge/package.json @@ -27,11 +27,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/skill/skill-filesystem/package.json b/packages/skill/skill-filesystem/package.json index fe72f0e106..8b1ed16731 100644 --- a/packages/skill/skill-filesystem/package.json +++ b/packages/skill/skill-filesystem/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -38,9 +38,9 @@ "yaml": "^2.4.2" }, "devDependencies": { - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/skill/skill-office/package.json b/packages/skill/skill-office/package.json index 36f0ae92f5..d8e00fbaed 100644 --- a/packages/skill/skill-office/package.json +++ b/packages/skill/skill-office/package.json @@ -27,11 +27,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-skill": "workspace:^", + "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^" diff --git a/packages/skill/skill/package.json b/packages/skill/skill/package.json index de98277f65..caf63ccbee 100644 --- a/packages/skill/skill/package.json +++ b/packages/skill/skill/package.json @@ -28,16 +28,16 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*" } } diff --git a/packages/skill/tool-skill/package.json b/packages/skill/tool-skill/package.json index 0ee2ea74f9..a30906ff47 100644 --- a/packages/skill/tool-skill/package.json +++ b/packages/skill/tool-skill/package.json @@ -27,24 +27,24 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/skill/tool-workspace-dependencies/package.json b/packages/skill/tool-workspace-dependencies/package.json index f7ef09ea2a..7a7f21a96e 100644 --- a/packages/skill/tool-workspace-dependencies/package.json +++ b/packages/skill/tool-workspace-dependencies/package.json @@ -26,17 +26,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" diff --git a/packages/spill/spill-local/package.json b/packages/spill/spill-local/package.json index 3ab384ea3d..f2ff90d6ea 100644 --- a/packages/spill/spill-local/package.json +++ b/packages/spill/spill-local/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-spill": "workspace:^", + "@deepseek-ai/dsh-spill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -36,10 +36,10 @@ "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/spill/spill-policy/package.json b/packages/spill/spill-policy/package.json index 6a33a2b49c..e025aa5000 100644 --- a/packages/spill/spill-policy/package.json +++ b/packages/spill/spill-policy/package.json @@ -32,42 +32,42 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-spill-local": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-spill-local": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", "sharp": "^0.35.3" } } diff --git a/packages/spill/spill/package.json b/packages/spill/spill/package.json index 2518b045a4..9f56b9004f 100644 --- a/packages/spill/spill/package.json +++ b/packages/spill/spill/package.json @@ -27,15 +27,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/ssh/fs-ssh/package.json b/packages/ssh/fs-ssh/package.json index 625890d87d..f07c127a25 100644 --- a/packages/ssh/fs-ssh/package.json +++ b/packages/ssh/fs-ssh/package.json @@ -28,10 +28,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -39,9 +39,9 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" } } diff --git a/packages/ssh/sandbox-ssh/package.json b/packages/ssh/sandbox-ssh/package.json index 7248a63c96..0b91c10848 100644 --- a/packages/ssh/sandbox-ssh/package.json +++ b/packages/ssh/sandbox-ssh/package.json @@ -28,8 +28,8 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -37,7 +37,7 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*" } } diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 5439fa8028..7903976068 100644 --- a/packages/ssh/ssh/package.json +++ b/packages/ssh/ssh/package.json @@ -46,16 +46,16 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -63,21 +63,21 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-fs-ssh": "workspace:^", - "@deepseek-ai/dsh-subprocess-ssh": "workspace:^", - "@deepseek-ai/dsh-sandbox-ssh": "workspace:^", - "@deepseek-ai/dsh-lsp": "workspace:^", - "@deepseek-ai/dsh-lsp-stdio": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-fs-ssh": "workspace:*", + "@deepseek-ai/dsh-subprocess-ssh": "workspace:*", + "@deepseek-ai/dsh-sandbox-ssh": "workspace:*", + "@deepseek-ai/dsh-lsp": "workspace:*", + "@deepseek-ai/dsh-lsp-stdio": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/ssh/subprocess-ssh/package.json b/packages/ssh/subprocess-ssh/package.json index 29200a015a..032786452a 100644 --- a/packages/ssh/subprocess-ssh/package.json +++ b/packages/ssh/subprocess-ssh/package.json @@ -28,9 +28,9 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -38,8 +38,8 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-ssh": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^" + "@deepseek-ai/dsh-ssh": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*" } } diff --git a/packages/storage/storage-domain/package.json b/packages/storage/storage-domain/package.json index 53ba90df95..f5eaa2eee4 100644 --- a/packages/storage/storage-domain/package.json +++ b/packages/storage/storage-domain/package.json @@ -32,8 +32,8 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -41,8 +41,8 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/storage/storage-json/package.json b/packages/storage/storage-json/package.json index 727f28e5db..80eabc8bd3 100644 --- a/packages/storage/storage-json/package.json +++ b/packages/storage/storage-json/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/storage/storage-sqlite/package.json b/packages/storage/storage-sqlite/package.json index c66976b0d3..2b52a83108 100644 --- a/packages/storage/storage-sqlite/package.json +++ b/packages/storage/storage-sqlite/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-storage": "workspace:^", + "@deepseek-ai/dsh-storage": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/subagent/subagent-acp/package.json b/packages/subagent/subagent-acp/package.json index 05e1e305b4..7ac238aba0 100644 --- a/packages/subagent/subagent-acp/package.json +++ b/packages/subagent/subagent-acp/package.json @@ -28,33 +28,33 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { "@agentclientprotocol/sdk": "1.4.0", - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*" } } diff --git a/packages/subagent/subagent-claude-code/package.json b/packages/subagent/subagent-claude-code/package.json index 738a01542b..9a64766257 100644 --- a/packages/subagent/subagent-claude-code/package.json +++ b/packages/subagent/subagent-claude-code/package.json @@ -34,37 +34,37 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { "@anthropic-ai/claude-agent-sdk": "0.3.263", "@anthropic-ai/sdk": "0.93.0", - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-codex": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-codex": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/subagent/subagent-codex/package.json b/packages/subagent/subagent-codex/package.json index 859ea693ef..b371f46a03 100644 --- a/packages/subagent/subagent-codex/package.json +++ b/packages/subagent/subagent-codex/package.json @@ -34,35 +34,35 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@openai/codex": "0.153.4" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" } } diff --git a/packages/subagent/subagent-codex/tests/subagent-codex.spec.ts b/packages/subagent/subagent-codex/tests/subagent-codex.spec.ts index 860fbc5e9b..2eb7499229 100644 --- a/packages/subagent/subagent-codex/tests/subagent-codex.spec.ts +++ b/packages/subagent/subagent-codex/tests/subagent-codex.spec.ts @@ -367,7 +367,7 @@ describe('task admission and package contracts', () => { expect(manifest.files).toContain('cordis.patch.yml') expect(manifest.dependencies).toHaveProperty( '@deepseek-ai/dsh-sdk-protocol', - 'workspace:^', + 'workspace:*', ) expect(manifest.dependencies).toHaveProperty('@openai/codex', CODEX_VERSION) expect(manifest.dependencies).not.toHaveProperty('@deepseek-ai/dsh-subagent-claude-code') diff --git a/packages/subagent/subagent-dsh-sdk/package.json b/packages/subagent/subagent-dsh-sdk/package.json index b9f974c5b0..7758b02782 100644 --- a/packages/subagent/subagent-dsh-sdk/package.json +++ b/packages/subagent/subagent-dsh-sdk/package.json @@ -28,36 +28,36 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sdk-client": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sdk-client": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-sdk-client": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-sdk-client": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*" } } diff --git a/packages/subagent/subagent-fork-in-process/package.json b/packages/subagent/subagent-fork-in-process/package.json index aa789347c3..0efebd787a 100644 --- a/packages/subagent/subagent-fork-in-process/package.json +++ b/packages/subagent/subagent-fork-in-process/package.json @@ -27,10 +27,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -38,16 +38,16 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subagent/subagent-in-process-driver/package.json b/packages/subagent/subagent-in-process-driver/package.json index 2d8d04981d..a10231de22 100644 --- a/packages/subagent/subagent-in-process-driver/package.json +++ b/packages/subagent/subagent-in-process-driver/package.json @@ -28,34 +28,34 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/subagent/subagent-spawn-in-process/package.json b/packages/subagent/subagent-spawn-in-process/package.json index 74ca46a6b7..0ae91adb99 100644 --- a/packages/subagent/subagent-spawn-in-process/package.json +++ b/packages/subagent/subagent-spawn-in-process/package.json @@ -27,8 +27,8 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -36,20 +36,20 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subagent/subagent/package.json b/packages/subagent/subagent/package.json index aa3e26127b..502b6c99dd 100644 --- a/packages/subagent/subagent/package.json +++ b/packages/subagent/subagent/package.json @@ -53,35 +53,35 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-chunked-list": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-chunked-list": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-util-time": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-util-time": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-agent-preset-registry": { @@ -123,30 +123,30 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-schedule": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-projection-cache": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-storage-json": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-util-time": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-schedule": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-projection-cache": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-storage-json": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-util-time": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" } } diff --git a/packages/subagent/tool-subagent-control/package.json b/packages/subagent/tool-subagent-control/package.json index 7178d0e486..bd19f59e3b 100644 --- a/packages/subagent/tool-subagent-control/package.json +++ b/packages/subagent/tool-subagent-control/package.json @@ -33,29 +33,29 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/subagent/tool-subagent/package.json b/packages/subagent/tool-subagent/package.json index 1c8d7dc647..2da8603839 100644 --- a/packages/subagent/tool-subagent/package.json +++ b/packages/subagent/tool-subagent/package.json @@ -37,16 +37,16 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -55,21 +55,21 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subprocess/subprocess-local/package.json b/packages/subprocess/subprocess-local/package.json index 17ffd7df2e..bf98cb54ad 100644 --- a/packages/subprocess/subprocess-local/package.json +++ b/packages/subprocess/subprocess-local/package.json @@ -42,20 +42,20 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-lazy-require": "workspace:^", - "@deepseek-ai/dsh-win32-process": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:*", + "@deepseek-ai/dsh-win32-process": "workspace:*", "koffi": "^3.1.0", "node-pty": "1.2.0-beta.15" }, "devDependencies": { - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/subprocess/subprocess/package.json b/packages/subprocess/subprocess/package.json index edf1c8b758..c4ccf1c8fc 100644 --- a/packages/subprocess/subprocess/package.json +++ b/packages/subprocess/subprocess/package.json @@ -33,11 +33,11 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*" } } diff --git a/packages/subprocess/win32-process/package.json b/packages/subprocess/win32-process/package.json index 8111fcfe80..0cccf05705 100644 --- a/packages/subprocess/win32-process/package.json +++ b/packages/subprocess/win32-process/package.json @@ -30,7 +30,7 @@ "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { - "@deepseek-ai/dsh-lazy-require": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:*", "koffi": "^3.1.0" }, "devDependencies": { diff --git a/packages/terminal/terminal-bash/package.json b/packages/terminal/terminal-bash/package.json index e2158b08ee..cd419889c0 100644 --- a/packages/terminal/terminal-bash/package.json +++ b/packages/terminal/terminal-bash/package.json @@ -27,30 +27,30 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-lazy-require": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", + "@deepseek-ai/dsh-lazy-require": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@xterm/headless": "^6.0.0" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/terminal/terminal/package.json b/packages/terminal/terminal/package.json index 1b503f28cd..c351cf7837 100644 --- a/packages/terminal/terminal/package.json +++ b/packages/terminal/terminal/package.json @@ -27,15 +27,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/terminal/tool-terminal/package.json b/packages/terminal/tool-terminal/package.json index 8ff5ea3763..eeca5ba9b4 100644 --- a/packages/terminal/tool-terminal/package.json +++ b/packages/terminal/tool-terminal/package.json @@ -30,34 +30,34 @@ "@deepseek-ai/schemastery": "workspace:^" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/test-support/agent-loop-testkit/package.json b/packages/test-support/agent-loop-testkit/package.json index b4331fb1c5..f068e5f77a 100644 --- a/packages/test-support/agent-loop-testkit/package.json +++ b/packages/test-support/agent-loop-testkit/package.json @@ -27,24 +27,24 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": {}, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/test-support/client-runtime/package.json b/packages/test-support/client-runtime/package.json index 7a9ebf2b12..617c7deccc 100644 --- a/packages/test-support/client-runtime/package.json +++ b/packages/test-support/client-runtime/package.json @@ -32,25 +32,25 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-hmr": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-web": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-hmr": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-web": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "react": "^18.2.0", "react-dom": "^18.2.0" }, @@ -58,31 +58,31 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-api-gateway": "workspace:^", - "@deepseek-ai/dsh-api-remotes": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-api-workspace-controller": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-base": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-client-hmr": "workspace:^", - "@deepseek-ai/dsh-client-locale": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-client-ui-conversation": "workspace:^", - "@deepseek-ai/dsh-client-ui-layout": "workspace:^", - "@deepseek-ai/dsh-client-ui-renderer": "workspace:^", - "@deepseek-ai/dsh-client-ui-session": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-web": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-web-app": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", + "@deepseek-ai/dsh-api-remotes": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-base": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-client-hmr": "workspace:*", + "@deepseek-ai/dsh-client-locale": "workspace:*", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-client-ui-conversation": "workspace:*", + "@deepseek-ai/dsh-client-ui-layout": "workspace:*", + "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", + "@deepseek-ai/dsh-client-ui-session": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-web": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-web-app": "workspace:*", "@types/js-yaml": "^4.0.9", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/test-support/llm-replay/package.json b/packages/test-support/llm-replay/package.json index 64cd1e63e1..352ebc8685 100644 --- a/packages/test-support/llm-replay/package.json +++ b/packages/test-support/llm-replay/package.json @@ -28,10 +28,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-deepseek-llm-api-extensions": { @@ -40,13 +40,13 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^" + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-session-format-catalog": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-session-format-catalog": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/test-support/loader-smoke/package.json b/packages/test-support/loader-smoke/package.json index e7c7af6546..50e4aa5546 100644 --- a/packages/test-support/loader-smoke/package.json +++ b/packages/test-support/loader-smoke/package.json @@ -32,17 +32,17 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/test-support/remote-mock/package.json b/packages/test-support/remote-mock/package.json index 25735fa53c..1777d334e0 100644 --- a/packages/test-support/remote-mock/package.json +++ b/packages/test-support/remote-mock/package.json @@ -27,13 +27,13 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-api-settings-controller": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", + "@deepseek-ai/dsh-api-settings-controller": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", "typescript": "^6.0.3" }, "files": [ diff --git a/packages/test-support/session-snapshot/package.json b/packages/test-support/session-snapshot/package.json index 8f248fa4e3..2566d132b6 100644 --- a/packages/test-support/session-snapshot/package.json +++ b/packages/test-support/session-snapshot/package.json @@ -29,30 +29,30 @@ "dependencies": { "@agentclientprotocol/sdk": "1.4.0", "@deepseek-ai/cordis-plugin-include": "workspace:*", - "@deepseek-ai/dsh-llm-replay": "workspace:^", + "@deepseek-ai/dsh-llm-replay": "workspace:*", "@deepseek-ai/dsh-loader-smoke": "workspace:*", - "@deepseek-ai/dsh-session-format": "workspace:^", + "@deepseek-ai/dsh-session-format": "workspace:*", "js-yaml": "^4.2.0", "vitest": "^4.1.8" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@types/js-yaml": "^4.0.9", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/todo/tool-todo/package.json b/packages/todo/tool-todo/package.json index 5140cff59a..7f8dab8d7f 100644 --- a/packages/todo/tool-todo/package.json +++ b/packages/todo/tool-todo/package.json @@ -41,26 +41,26 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/typert/generator/package.json b/packages/typert/generator/package.json index 9e5e5aa290..7ba55c1fee 100644 --- a/packages/typert/generator/package.json +++ b/packages/typert/generator/package.json @@ -39,8 +39,8 @@ "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-tool-cordis": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", + "@deepseek-ai/dsh-tool-cordis": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "zod": "^4.4.3" } diff --git a/packages/typert/loader/package.json b/packages/typert/loader/package.json index 8b161836b4..987ef34354 100644 --- a/packages/typert/loader/package.json +++ b/packages/typert/loader/package.json @@ -28,16 +28,16 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", + "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", + "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/cordis": "workspace:^", "zod": "^4.4.3" } diff --git a/packages/typert/protocol/package.json b/packages/typert/protocol/package.json index aa5edf0b80..47a81ffdea 100644 --- a/packages/typert/protocol/package.json +++ b/packages/typert/protocol/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/packages/typert/registry/package.json b/packages/typert/registry/package.json index 84790a40fb..a32c915621 100644 --- a/packages/typert/registry/package.json +++ b/packages/typert/registry/package.json @@ -55,6 +55,6 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/util/http-proxy/package.json b/packages/util/http-proxy/package.json index d225608dce..447d980c10 100644 --- a/packages/util/http-proxy/package.json +++ b/packages/util/http-proxy/package.json @@ -34,6 +34,6 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^" + "@deepseek-ai/dsh-invariants": "workspace:*" } } diff --git a/packages/web/tool-web/package.json b/packages/web/tool-web/package.json index 5f1fdaf8f0..2081ea774e 100644 --- a/packages/web/tool-web/package.json +++ b/packages/web/tool-web/package.json @@ -28,32 +28,32 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^" + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@joplin/turndown-plugin-gfm": "^1.0.67", "turndown": "^7.2.4" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-spill-local": "workspace:^", - "@deepseek-ai/dsh-spill-policy": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", - "@deepseek-ai/dsh-web-fetch-http": "workspace:^", - "@deepseek-ai/dsh-web-search-exa": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-spill-local": "workspace:*", + "@deepseek-ai/dsh-spill-policy": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", + "@deepseek-ai/dsh-web-fetch-http": "workspace:*", + "@deepseek-ai/dsh-web-search-exa": "workspace:*", "@types/turndown": "^5.0.6", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^" + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*" } } diff --git a/packages/web/web-fetch-http/package.json b/packages/web/web-fetch-http/package.json index af81853773..1c0bd4fe0d 100644 --- a/packages/web/web-fetch-http/package.json +++ b/packages/web/web-fetch-http/package.json @@ -28,9 +28,9 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^", @@ -39,8 +39,8 @@ }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web-search-deepseek/package.json b/packages/web/web-search-deepseek/package.json index 13a0966713..baed229c2a 100644 --- a/packages/web/web-search-deepseek/package.json +++ b/packages/web/web-search-deepseek/package.json @@ -27,24 +27,24 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-credentials-local": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-credentials-local": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web-search-exa/package.json b/packages/web/web-search-exa/package.json index 6a65cb575a..c00e1e684a 100644 --- a/packages/web/web-search-exa/package.json +++ b/packages/web/web-search-exa/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web-search-perplexity/package.json b/packages/web/web-search-perplexity/package.json index 769e0c9089..5549b3fac3 100644 --- a/packages/web/web-search-perplexity/package.json +++ b/packages/web/web-search-perplexity/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web/package.json b/packages/web/web/package.json index ac8f6223da..60aef1cfac 100644 --- a/packages/web/web/package.json +++ b/packages/web/web/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-llm": "workspace:^", + "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/webhook/webhook-github/package.json b/packages/webhook/webhook-github/package.json index 359e867d4e..bddf23cc6b 100644 --- a/packages/webhook/webhook-github/package.json +++ b/packages/webhook/webhook-github/package.json @@ -33,13 +33,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-webhook": "workspace:^" + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-webhook": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "@octokit/webhooks": "^14.2.0" }, @@ -47,9 +47,9 @@ "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-webhook": "workspace:^" + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-webhook": "workspace:*" } } diff --git a/packages/webhook/webhook/package.json b/packages/webhook/webhook/package.json index 8168263373..35f497d9e5 100644 --- a/packages/webhook/webhook/package.json +++ b/packages/webhook/webhook/package.json @@ -38,32 +38,32 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-default-model": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-workspace": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-default-model": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-workspace": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" } } diff --git a/packages/workflow/tool-ralph/package.json b/packages/workflow/tool-ralph/package.json index 6694dcd605..d320941a00 100644 --- a/packages/workflow/tool-ralph/package.json +++ b/packages/workflow/tool-ralph/package.json @@ -27,12 +27,12 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "dependencies": { @@ -40,19 +40,19 @@ }, "devDependencies": { "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^" + "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/workflow/tool-workflow/package.json b/packages/workflow/tool-workflow/package.json index ba6ffb7504..76f5da37f8 100644 --- a/packages/workflow/tool-workflow/package.json +++ b/packages/workflow/tool-workflow/package.json @@ -38,33 +38,33 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*" }, "dependencies": { "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*" } } diff --git a/packages/workflow/workflow-ptc/package.json b/packages/workflow/workflow-ptc/package.json index 474bed2648..d8a6a57d2f 100644 --- a/packages/workflow/workflow-ptc/package.json +++ b/packages/workflow/workflow-ptc/package.json @@ -28,44 +28,44 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*" } } diff --git a/packages/workflow/workflow/package.json b/packages/workflow/workflow/package.json index b2d3ba391f..7762b869bb 100644 --- a/packages/workflow/workflow/package.json +++ b/packages/workflow/workflow/package.json @@ -37,19 +37,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/cordis": "workspace:^" } } diff --git a/packages/workspace/workspace/package.json b/packages/workspace/workspace/package.json index f65c5cc97b..498235836d 100644 --- a/packages/workspace/workspace/package.json +++ b/packages/workspace/workspace/package.json @@ -38,24 +38,24 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "dependencies": { - "@deepseek-ai/dsh-brand": "workspace:^", + "@deepseek-ai/dsh-brand": "workspace:*", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^" + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c1afb1ed9a..f78c479095 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -942,7 +942,7 @@ importers: specifier: 1.4.0 version: 1.4.0(zod@4.4.3) '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -952,43 +952,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/api/account-controller: @@ -1001,22 +1001,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/deepseek-account '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/api/gateway: dependencies: '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1029,25 +1029,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/cmdline '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@types/ws': specifier: ^8.18.1 @@ -1059,7 +1059,7 @@ importers: packages/api/job-controller: dependencies: '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1072,140 +1072,140 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry packages/api/remotes: dependencies: '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-api-account-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../account-controller '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-api-job-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../job-controller '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../session-controller '@deepseek-ai/dsh-api-settings-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../settings-controller '@deepseek-ai/dsh-api-terminal-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../terminal-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../workspace-controller '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../workspace-files '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-file-upload': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/file-upload '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-plugin-manager '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/command-feedback '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-cordis-host-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/cordis-host-runner '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/goal '@deepseek-ai/dsh-host-plugin-inventory': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/plugin-inventory '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/message-feedback '@deepseek-ai/dsh-office-to-pdf': - specifier: workspace:^ + specifier: workspace:* version: link:../../document/office-to-pdf '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/plugin-manager '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/session-reference '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions zod: specifier: ^4.4.3 @@ -1214,10 +1214,10 @@ importers: packages/api/session-controller: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1233,118 +1233,118 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-default-model': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-default-model '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-file-upload': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/file-upload '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-projection-cache': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection-cache '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-storage-json': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-json '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@deepseek-ai/dsh-util-time': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/time '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace '@types/mime-types': specifier: ^3.0.1 @@ -1363,34 +1363,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/api/terminal-controller: dependencies: '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1409,52 +1409,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto packages/api/workspace-controller: dependencies: '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1467,43 +1467,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-host-directory-picker': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/directory-picker '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/api/workspace-files: dependencies: '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/deque '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1516,34 +1516,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../gateway '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/resources '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path packages/attachment/attachment: @@ -1552,13 +1552,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand packages/attachment/attachment-local: dependencies: '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1571,16 +1571,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../attachment '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths packages/boot/app-boot: dependencies: '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@eslint-community/regexpp': specifier: ^4.12.2 @@ -1614,13 +1614,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1647,7 +1647,7 @@ importers: packages/boot/config-editor: dependencies: '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write js-yaml: specifier: ^4.1.0 @@ -1666,10 +1666,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../app-boot '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../hmr '@types/js-yaml': specifier: ^4.0.9 @@ -1703,13 +1703,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../app-boot '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../cmdline '@types/babel__code-frame': specifier: ^7.27.0 @@ -1724,13 +1724,13 @@ importers: packages/boot/plugin-manager: dependencies: '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../app-boot '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -1755,46 +1755,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../hmr '@deepseek-ai/dsh-host-plugin-inventory': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/plugin-inventory '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/browser-use/browser-use: @@ -1803,16 +1803,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand packages/bundle/acp-app: dependencies: '@deepseek-ai/dsh-acp': - specifier: workspace:^ + specifier: workspace:* version: link:../../acp/acp '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/cmdline commander: specifier: ^15.0.0 @@ -1831,274 +1831,274 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-default-model': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-default-model '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/agent-instructions '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-authorization': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/authorization '@deepseek-ai/dsh-bash-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-sandbox '@deepseek-ai/dsh-command-compact': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/command-compact '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/command-feedback '@deepseek-ai/dsh-command-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/command-goal '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-compaction-basic': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-basic '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-image-offload '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-tool-result-pruner '@deepseek-ai/dsh-config-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/config-editor '@deepseek-ai/dsh-credentials-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials-local '@deepseek-ai/dsh-deepseek-account-platform': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/deepseek-account-platform '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-observation-policy '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-sandbox '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/goal '@deepseek-ai/dsh-goal-round-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/goal-round-driver '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/hmr '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-llm-pi-ai': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-pi-ai '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-retry '@deepseek-ai/dsh-mcp-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-resources '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../plan/plan-mode '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/plugin-manager '@deepseek-ai/dsh-plugin-package-inventory-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/plugin-package-inventory-deepseek '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-pwsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/pwsh-sandbox '@deepseek-ai/dsh-repeat-tool-reminder': - specifier: workspace:^ + specifier: workspace:* version: link:../../guard/repeat-tool-reminder '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-log-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-log-deepseek '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-projection-cache': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection-cache '@deepseek-ai/dsh-session-query-sqlite': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query-sqlite '@deepseek-ai/dsh-session-telemetry-otel': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-telemetry-otel '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-session-title-first-prompt-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title-first-prompt-llm '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell-env '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill '@deepseek-ai/dsh-skill-badge': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill-badge '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill-filesystem '@deepseek-ai/dsh-spill-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-local '@deepseek-ai/dsh-spill-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-policy '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-storage-json': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-json '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-fork-in-process '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-spawn-in-process '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash '@deepseek-ai/dsh-tool-call-timeout-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../guard/timeout-policy '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tool-fs-search': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs-search '@deepseek-ai/dsh-tool-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/tool-goal '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-present': - specifier: workspace:^ + specifier: workspace:* version: link:../../deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-pwsh '@deepseek-ai/dsh-tool-ralph': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/tool-ralph '@deepseek-ai/dsh-tool-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/tool-skill '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent '@deepseek-ai/dsh-tool-subagent-control': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent-control '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../todo/tool-todo '@deepseek-ai/dsh-tool-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../web/tool-web '@deepseek-ai/dsh-tool-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/tool-workflow '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-loader': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/loader '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../web/web '@deepseek-ai/dsh-web-fetch-http': - specifier: workspace:^ + specifier: workspace:* version: link:../../web/web-fetch-http '@deepseek-ai/dsh-web-search-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../web/web-search-deepseek '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/workflow-ptc devDependencies: '@deepseek-ai/cordis': @@ -2108,13 +2108,13 @@ importers: packages/bundle/headless: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/cmdline '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -2130,43 +2130,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-default-model': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-default-model '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query packages/bundle/sdk-app: dependencies: '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/cmdline '@deepseek-ai/dsh-sdk-jsonrpc-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../sdk/server '@deepseek-ai/dsh-skill-office': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill-office '@deepseek-ai/dsh-tool-workspace-dependencies': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/tool-workspace-dependencies '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -2188,85 +2188,85 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-retry '@deepseek-ai/dsh-mcp-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-resources '@deepseek-ai/dsh-plugin-package-inventory-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/plugin-package-inventory-deepseek '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-sdk-app': - specifier: workspace:^ + specifier: workspace:* version: link:../sdk-app '@deepseek-ai/dsh-sdk-jsonrpc-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../sdk/server '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-log-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-log-deepseek '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal-bash '@deepseek-ai/dsh-tool-bash-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash-persistent '@deepseek-ai/dsh-tool-pwsh-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-pwsh-persistent '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools devDependencies: '@deepseek-ai/cordis': @@ -2276,364 +2276,364 @@ importers: packages/bundle/web-app: dependencies: '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/agent-instructions '@deepseek-ai/dsh-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-agent-tool-presentation': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-tool-presentation '@deepseek-ai/dsh-api-account-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/account-controller '@deepseek-ai/dsh-api-job-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/job-controller '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-settings-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/settings-controller '@deepseek-ai/dsh-api-terminal-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/terminal-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-file-upload': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/file-upload '@deepseek-ai/dsh-client-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/hmr '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/modules '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/resources '@deepseek-ai/dsh-client-ui-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-agent-preset '@deepseek-ai/dsh-client-ui-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-approval '@deepseek-ai/dsh-client-ui-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-attachment '@deepseek-ai/dsh-client-ui-brand-official': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-brand-official '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-chat '@deepseek-ai/dsh-client-ui-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-commands '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-conversation '@deepseek-ai/dsh-client-ui-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/ui-cordis '@deepseek-ai/dsh-client-ui-deliverables': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-deliverables '@deepseek-ai/dsh-client-ui-directory-picker-browse': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-directory-picker-browse '@deepseek-ai/dsh-client-ui-directory-picker-native': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-directory-picker-native '@deepseek-ai/dsh-client-ui-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-goal '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-input-trigger '@deepseek-ai/dsh-client-ui-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-jobs '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-layout '@deepseek-ai/dsh-client-ui-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-message-feedback '@deepseek-ai/dsh-client-ui-model-selection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-model-selection '@deepseek-ai/dsh-client-ui-open-in-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-open-in-app '@deepseek-ai/dsh-client-ui-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-permission-presets '@deepseek-ai/dsh-client-ui-plan': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-plan '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-plugin-manager '@deepseek-ai/dsh-client-ui-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-reference '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-schedule': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-schedule '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings '@deepseek-ai/dsh-client-ui-settings-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-account '@deepseek-ai/dsh-client-ui-settings-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-agent-loop '@deepseek-ai/dsh-client-ui-settings-general': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-general '@deepseek-ai/dsh-client-ui-settings-models': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-models '@deepseek-ai/dsh-client-ui-settings-plugin-inventory': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-plugin-inventory '@deepseek-ai/dsh-client-ui-settings-plugins': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-plugins '@deepseek-ai/dsh-client-ui-settings-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-shell '@deepseek-ai/dsh-client-ui-settings-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-subagent '@deepseek-ai/dsh-client-ui-settings-web-search': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings-web-search '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar '@deepseek-ai/dsh-client-ui-sidebar-browser': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar-browser '@deepseek-ai/dsh-client-ui-sidebar-documentpreview': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar-documentpreview '@deepseek-ai/dsh-client-ui-sidebar-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar-files '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar-right '@deepseek-ai/dsh-client-ui-sidebar-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar-terminal '@deepseek-ai/dsh-client-ui-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-skill '@deepseek-ai/dsh-client-ui-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-subagent '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-theme '@deepseek-ai/dsh-client-ui-tool': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-tool '@deepseek-ai/dsh-client-ui-trajectory': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-trajectory '@deepseek-ai/dsh-client-ui-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-user-questions '@deepseek-ai/dsh-client-ui-workflow-run': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-workflow-run '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-workspace '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/cmdline '@deepseek-ai/dsh-command-compact': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/command-compact '@deepseek-ai/dsh-command-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/command-goal '@deepseek-ai/dsh-compaction-basic': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-basic '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-tool-result-pruner '@deepseek-ai/dsh-cordis-client-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/cordis-client-runner '@deepseek-ai/dsh-cordis-host-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/cordis-host-runner '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-file-reference-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference-local '@deepseek-ai/dsh-host-directory-picker-auto': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/directory-picker-auto '@deepseek-ai/dsh-host-directory-picker-browse': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/directory-picker-browse '@deepseek-ai/dsh-host-directory-picker-native': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/directory-picker-native '@deepseek-ai/dsh-host-frontend-static': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/frontend-static '@deepseek-ai/dsh-host-open-in-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/open-in-app '@deepseek-ai/dsh-host-plugin-inventory': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/plugin-inventory '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/message-feedback '@deepseek-ai/dsh-office-to-pdf': - specifier: workspace:^ + specifier: workspace:* version: link:../../document/office-to-pdf '@deepseek-ai/dsh-persona': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/persona '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../plan/plan-mode '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/plugin-manager '@deepseek-ai/dsh-session-log-export': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-log-export '@deepseek-ai/dsh-session-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/session-reference '@deepseek-ai/dsh-session-stats': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-stats '@deepseek-ai/dsh-session-turn-outline': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-turn-outline '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill-filesystem '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal-bash '@deepseek-ai/dsh-tool-ask-user': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/tool-ask-user '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash '@deepseek-ai/dsh-tool-bash-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash-persistent '@deepseek-ai/dsh-tool-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/tool-cordis '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tool-fs-search': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs-search '@deepseek-ai/dsh-tool-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/tool-goal '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-present': - specifier: workspace:^ + specifier: workspace:* version: link:../../deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-pwsh '@deepseek-ai/dsh-tool-pwsh-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-pwsh-persistent '@deepseek-ai/dsh-tool-ralph': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/tool-ralph '@deepseek-ai/dsh-tool-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/tool-skill '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent '@deepseek-ai/dsh-tool-subagent-control': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent-control '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../todo/tool-todo '@deepseek-ai/dsh-tool-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../web/tool-web '@deepseek-ai/dsh-tool-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/tool-workflow '@deepseek-ai/dsh-web-frontend': - specifier: workspace:^ + specifier: workspace:* version: link:../../../apps/web '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/workflow-ptc '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace '@deepseek-ai/dsh-workspace-changes': - specifier: workspace:^ + specifier: workspace:* version: link:../../deliverables/workspace-changes '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -2655,28 +2655,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell-env '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry '@deepseek-ai/libreoffice-kit': specifier: 0.0.1 @@ -2685,7 +2685,7 @@ importers: packages/client/connection: dependencies: '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -2698,34 +2698,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/client/file-upload: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol zod: specifier: ^4.4.3 @@ -2735,28 +2735,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto packages/client/hmr: @@ -2772,13 +2772,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../modules '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants packages/client/locale: @@ -2791,34 +2791,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@types/react': specifier: ~18.3.1 @@ -2836,16 +2836,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest packages/client/resources: @@ -2854,19 +2854,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/client/store: @@ -2887,52 +2887,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -2947,37 +2947,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@types/react': specifier: ~18.3.1 @@ -2992,28 +2992,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-tool': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-tool '@deepseek-ai/dsh-client-ui-trajectory': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-trajectory '@types/react': specifier: ~18.3.1 @@ -3037,13 +3037,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar '@testing-library/react': specifier: ^16.1.0 @@ -3068,109 +3068,109 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-ui-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-approval '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-sidebar-browser': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-browser '@deepseek-ai/dsh-client-ui-sidebar-documentpreview': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-documentpreview '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-retry '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-stats': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-stats '@deepseek-ai/dsh-session-turn-outline': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-turn-outline '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@tanstack/react-virtual': specifier: ^3.14.9 @@ -3194,49 +3194,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -3258,97 +3258,97 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-file-upload': - specifier: workspace:^ + specifier: workspace:* version: link:../file-upload '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/goal '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-retry '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../plan/plan-mode '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../todo/tool-todo '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace '@lexical/headless': specifier: ^0.49.0 @@ -3390,92 +3390,92 @@ importers: packages/client/ui-deliverables: dependencies: '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-tool': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-tool '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-present': - specifier: workspace:^ + specifier: workspace:* version: link:../../deliverables/tool-present '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@deepseek-ai/dsh-workspace-changes': - specifier: workspace:^ + specifier: workspace:* version: link:../../deliverables/workspace-changes '@types/react': specifier: ~18.3.1 @@ -3490,25 +3490,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@testing-library/react': specifier: ^16.1.0 @@ -3532,13 +3532,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@testing-library/react': specifier: ^16.1.0 @@ -3559,10 +3559,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@testing-library/react': specifier: ^16.1.0 @@ -3589,46 +3589,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../goal/goal '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 @@ -3649,40 +3649,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -3700,34 +3700,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-job-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/job-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@types/react': specifier: ~18.3.1 @@ -3742,25 +3742,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-theme '@types/react': specifier: ~18.3.1 @@ -3775,55 +3775,55 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-commands '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/command-feedback '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/message-feedback '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 @@ -3847,49 +3847,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-commands '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -3913,52 +3913,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-deliverables': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-deliverables '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-documentpreview': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-documentpreview '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-host-open-in-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/open-in-app '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@types/react': specifier: ~18.3.1 @@ -3973,52 +3973,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-commands '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@types/react': specifier: ~18.3.1 @@ -4036,64 +4036,64 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../resources '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-user-questions '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../plan/plan-mode '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@types/react': specifier: ~18.3.1 @@ -4105,10 +4105,10 @@ importers: packages/client/ui-plugin-manager: dependencies: '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -4121,43 +4121,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/plugin-manager '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@testing-library/react': specifier: ^16.1.0 @@ -4184,10 +4184,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@shikijs/langs': specifier: ^4.3.1 @@ -4268,43 +4268,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/file-reference '@deepseek-ai/dsh-session-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/session-reference '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path packages/client/ui-renderer: @@ -4313,13 +4313,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@types/react': specifier: ~18.3.1 @@ -4346,34 +4346,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-schedule': - specifier: workspace:^ + specifier: workspace:* version: link:../../schedule/schedule '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@testing-library/react': specifier: ^16.1.0 @@ -4397,31 +4397,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -4440,22 +4440,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -4474,37 +4474,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-settings-models': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings-models '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-theme '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/deepseek-account '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@testing-library/react': specifier: ^16.1.0 @@ -4534,31 +4534,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-plugin-manager '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@types/react': specifier: ~18.3.1 @@ -4577,43 +4577,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@types/react': specifier: ~18.3.1 @@ -4635,37 +4635,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/remote-mock '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -4680,40 +4680,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../modules '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-agent-preset '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@testing-library/react': specifier: ^16.1.0 @@ -4734,22 +4734,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -4764,31 +4764,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-plugin-manager '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@types/react': specifier: ~18.3.1 @@ -4803,31 +4803,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-plugin-manager '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@types/react': specifier: ~18.3.1 @@ -4842,31 +4842,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-plugin-manager '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@types/react': specifier: ~18.3.1 @@ -4881,34 +4881,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@types/react': specifier: ~18.3.1 @@ -4926,34 +4926,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@testing-library/react': specifier: ^16.1.0 @@ -4981,61 +4981,61 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../resources '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-office-to-pdf': - specifier: workspace:^ + specifier: workspace:* version: link:../../document/office-to-pdf '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@fortune-sheet/core': specifier: 1.0.4 @@ -5092,46 +5092,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 @@ -5158,46 +5158,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../resources '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@testing-library/react': specifier: ^16.1.0 @@ -5233,49 +5233,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-terminal-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/terminal-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-theme '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@testing-library/react': specifier: ^16.1.0 @@ -5308,43 +5308,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-tool': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-tool '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 @@ -5365,7 +5365,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@types/react': specifier: ~18.3.1 @@ -5377,55 +5377,55 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../resources '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-input-trigger': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-input-trigger '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar-right': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar-right '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@types/react': specifier: ~18.3.1 @@ -5450,37 +5450,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@types/react': specifier: ~18.3.1 @@ -5498,79 +5498,79 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill '@deepseek-ai/dsh-spill-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-policy '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/tool-session-query '@deepseek-ai/dsh-tool-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/tool-terminal '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@testing-library/react': specifier: ^16.1.0 @@ -5594,52 +5594,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@tanstack/react-virtual': specifier: ^3.14.9 @@ -5666,55 +5666,55 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions '@types/react': specifier: ~18.3.1 @@ -5732,46 +5732,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-workspace '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-tool-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/tool-workflow '@deepseek-ai/dsh-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../workflow/workflow '@types/react': specifier: ~18.3.1 @@ -5786,70 +5786,70 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-conversation '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-layout '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-session '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-sidebar '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-schedule': - specifier: workspace:^ + specifier: workspace:* version: link:../../schedule/schedule '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/dsh-util-workspace-path': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/workspace-path '@types/react': specifier: ~18.3.1 @@ -5870,25 +5870,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../modules '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../store '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-renderer '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../ui-slots '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@types/react': specifier: ~18.3.1 @@ -5918,19 +5918,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/compaction/compaction: @@ -5939,25 +5939,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/compaction/compaction-basic: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -5973,95 +5973,95 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction-image-offload '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction-tool-result-pruner '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-retry '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/compaction/compaction-image-offload: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction '@deepseek-ai/dsh-compaction-basic': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction-basic '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter packages/compaction/compaction-tool-result-pruner: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6077,25 +6077,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../compaction-image-offload '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter packages/computer-use/computer-use: @@ -6104,13 +6104,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand packages/context/agent-instructions: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6123,43 +6123,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/context/file-reference: @@ -6168,7 +6168,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent packages/context/file-reference-local: @@ -6181,25 +6181,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-file-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../file-reference '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/context/session-reference: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6218,64 +6218,64 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/output-retention '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-projection-cache': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection-cache '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-session-query-sqlite': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query-sqlite '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill '@deepseek-ai/dsh-spill-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-local '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/context/time-context: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6288,49 +6288,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/context/tmux-context: @@ -6346,25 +6346,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt packages/core/agent: @@ -6373,40 +6373,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../system-prompt '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/core/agent-default-model: dependencies: '@deepseek-ai/dsh-config-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/config-editor '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6416,22 +6416,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings packages/core/agent-loop: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6444,37 +6444,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../agent '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-pi-ai': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-pi-ai '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../tools packages/core/agent-tool-presentation: @@ -6487,22 +6487,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../agent '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../session '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../tools packages/core/scope: @@ -6511,35 +6511,35 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants packages/core/session: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/registry packages/core/system-prompt: @@ -6552,22 +6552,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope packages/core/tools: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6577,37 +6577,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../agent '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../system-prompt '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/credentials/authorization: @@ -6616,26 +6616,26 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../credentials '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm packages/credentials/credentials: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants packages/credentials/credentials-local: @@ -6654,16 +6654,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../credentials '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment packages/credentials/deepseek-account: @@ -6672,7 +6672,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand packages/credentials/deepseek-account-platform: @@ -6688,16 +6688,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-authorization': - specifier: workspace:^ + specifier: workspace:* version: link:../authorization '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../credentials '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../deepseek-account '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver packages/deliverables/tool-present: @@ -6710,37 +6710,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/deliverables/workspace-changes: @@ -6762,31 +6762,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/document/office-to-pdf: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/libreoffice-kit': specifier: 0.0.1 @@ -6808,19 +6808,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-workspace-files': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-files '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/experimental/agent-team: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -6833,58 +6833,58 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-fork-in-process '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-spawn-in-process '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/experimental/agent-team-profile: dependencies: '@deepseek-ai/dsh-experimental-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../agent-team '@deepseek-ai/dsh-experimental-client-ui-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../client-ui-agent-team '@deepseek-ai/dsh-experimental-tool-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-agent-team devDependencies: '@deepseek-ai/cordis': @@ -6910,107 +6910,107 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-experimental-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../speech-to-text '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/experimental/auto-review: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/agent-instructions '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-sandbox '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-observation-policy '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-sandbox '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell-env '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/experimental/browser-use-chrome-devtools-mcp: dependencies: '@deepseek-ai/dsh-experimental-browser-use-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../browser-use-runtime chrome-devtools-mcp: specifier: 1.9.0 @@ -7026,34 +7026,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-browser-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../browser-use/browser-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/browser-use-playwright-mcp: dependencies: '@deepseek-ai/dsh-experimental-browser-use-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../browser-use-runtime '@playwright/mcp': specifier: 0.0.80 @@ -7069,28 +7069,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-browser-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../browser-use/browser-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/browser-use-runtime: @@ -7109,49 +7109,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-browser-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../browser-use/browser-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/dsh-mcp-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-resources '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/browser-use-stagehand-native: @@ -7160,16 +7160,16 @@ importers: specifier: 4.1.0 version: 4.1.0 '@deepseek-ai/dsh-experimental-browser-use-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../browser-use-runtime '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7191,37 +7191,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-browser-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../browser-use/browser-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools tsx: specifier: ^4.19.2 @@ -7233,43 +7233,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-conversation '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-client-ui-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-workspace '@deepseek-ai/dsh-experimental-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../agent-team '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 @@ -7293,52 +7293,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/client-runtime '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-conversation '@deepseek-ai/dsh-client-ui-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-plugin-manager '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-experimental-api-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../api-speech-to-text '@deepseek-ai/dsh-experimental-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../speech-to-text '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@testing-library/react': specifier: ^16.1.0 @@ -7356,7 +7356,7 @@ importers: packages/experimental/computer-use-cua-driver-mcp: dependencies: '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7372,37 +7372,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-computer-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../computer-use/computer-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/computer-use-cua-driver-native: dependencies: '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7424,52 +7424,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-computer-use': - specifier: workspace:^ + specifier: workspace:* version: link:../../computer-use/computer-use '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/inspector: dependencies: '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/modules '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7488,7 +7488,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@types/ws': specifier: ^8.18.1 @@ -7510,19 +7510,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values packages/experimental/speech-to-text: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7535,19 +7535,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-config-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/config-editor '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings packages/experimental/speech-to-text-sensevoice: dependencies: '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7563,13 +7563,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-experimental-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../speech-to-text '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local tsx: specifier: ^4.22.4 @@ -7585,70 +7585,70 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-experimental-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../agent-team '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-fork-in-process '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-spawn-in-process '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-subagent-control': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/tool-subagent-control '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/experimental/voice-input-bundle: dependencies: '@deepseek-ai/dsh-experimental-api-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../api-speech-to-text '@deepseek-ai/dsh-experimental-client-ui-voice-input': - specifier: workspace:^ + specifier: workspace:* version: link:../client-ui-voice-input '@deepseek-ai/dsh-experimental-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../speech-to-text '@deepseek-ai/dsh-experimental-speech-to-text-sensevoice': - specifier: workspace:^ + specifier: workspace:* version: link:../speech-to-text-sensevoice devDependencies: '@deepseek-ai/cordis': @@ -7667,19 +7667,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/include '@deepseek-ai/dsh-experimental-webworker-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../webworker-runtime '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format '@deepseek-ai/dsh-session-format-catalog': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format-catalog '@deepseek-ai/dsh-session-format-v3-to-v4': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format-v3-to-v4 js-yaml: specifier: ^4.2.0 @@ -7701,10 +7701,10 @@ importers: packages/experimental/webworker-runtime: dependencies: '@deepseek-ai/dsh-client-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/web '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@noble/hashes': specifier: ^2.3.0 @@ -7732,46 +7732,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-bash-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-sandbox '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-file-upload': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/file-upload '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/modules '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/node-addon-system': specifier: workspace:^ @@ -7795,19 +7795,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/modules '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-theme '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@types/react': specifier: ~18.3.1 @@ -7819,7 +7819,7 @@ importers: packages/extensions/cordis-host-runner: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7835,25 +7835,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/extensions/tool-cordis: @@ -7868,19 +7868,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-cordis-host-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../cordis-host-runner '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -7892,37 +7892,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-sidebar': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-sidebar '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-client-ui-tool': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-tool '@deepseek-ai/dsh-cordis-client-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../cordis-client-runner '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@types/react': specifier: ~18.3.1 @@ -7947,25 +7947,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-anonymous-user-id': - specifier: workspace:^ + specifier: workspace:* version: link:../../identity/anonymous-user-id '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/feedback/message-feedback: @@ -7987,25 +7987,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../command-feedback '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/fs/fs: @@ -8014,16 +8014,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox packages/fs/fs-local: @@ -8042,10 +8042,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../fs '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm packages/fs/fs-observation-policy: @@ -8054,10 +8054,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../fs '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm packages/fs/fs-sandbox: @@ -8066,19 +8066,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-local '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection packages/fs/tool-fs: @@ -8094,58 +8094,58 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-local '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-observation-policy '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/fs/tool-fs-search: @@ -8161,37 +8161,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/output-retention '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/fs/tool-str-replace-editor: @@ -8204,43 +8204,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-local '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-observation-policy '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-sandbox '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/goal/command-goal: @@ -8252,28 +8252,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../goal '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection packages/goal/goal: @@ -8289,49 +8289,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/goal/goal-round-driver: @@ -8340,34 +8340,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../goal '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/goal/tool-goal: @@ -8383,31 +8383,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../goal '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/guard/repeat-tool-reminder: @@ -8420,25 +8420,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/guard/timeout-policy: @@ -8447,13 +8447,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/hooks/hook-protocol: @@ -8462,13 +8462,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell packages/hooks/hooks-claude-code: @@ -8481,43 +8481,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-hook-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../hook-protocol '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/hooks/hooks-codex: @@ -8530,40 +8530,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-hook-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../hook-protocol '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/host/directory-picker: @@ -8575,7 +8575,7 @@ importers: packages/host/directory-picker-auto: dependencies: '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment devDependencies: '@deepseek-ai/cordis': @@ -8588,28 +8588,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-ui-directory-picker-browse': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-directory-picker-browse '@deepseek-ai/dsh-client-ui-directory-picker-native': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-directory-picker-native '@deepseek-ai/dsh-host-directory-picker': - specifier: workspace:^ + specifier: workspace:* version: link:../directory-picker '@deepseek-ai/dsh-host-directory-picker-browse': - specifier: workspace:^ + specifier: workspace:* version: link:../directory-picker-browse '@deepseek-ai/dsh-host-directory-picker-native': - specifier: workspace:^ + specifier: workspace:* version: link:../directory-picker-native '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../webserver packages/host/directory-picker-browse: dependencies: '@deepseek-ai/dsh-host-directory-picker': - specifier: workspace:^ + specifier: workspace:* version: link:../directory-picker '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -8622,10 +8622,10 @@ importers: packages/host/directory-picker-native: dependencies: '@deepseek-ai/dsh-host-directory-picker': - specifier: workspace:^ + specifier: workspace:* version: link:../directory-picker '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command koffi: specifier: ^3.1.0 @@ -8651,25 +8651,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-credentials-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials-local '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../webserver packages/host/open-in-app: dependencies: '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-native-command': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/native-command '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -8682,7 +8682,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../webserver packages/host/plugin-inventory: @@ -8698,19 +8698,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-package-manifest': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/package-manifest '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/host/product-telemetry-otel: @@ -8747,10 +8747,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke packages/host/webserver: @@ -8781,16 +8781,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths packages/interaction/commands: dependencies: '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto zod: specifier: ^4.4.3 @@ -8800,28 +8800,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol packages/interaction/permission-presets: @@ -8837,34 +8837,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../commands '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/shell '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../user-approval packages/interaction/tool-ask-user: @@ -8873,19 +8873,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../user-questions packages/interaction/user-approval: @@ -8898,25 +8898,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt packages/interaction/user-questions: @@ -8925,13 +8925,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope packages/jobs/jobs: @@ -8940,19 +8940,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/jobs/jobs-local: @@ -8971,25 +8971,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../jobs '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/jobs/tool-jobs: @@ -9002,28 +9002,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/output-retention '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/llm/deepseek-llm-api-extensions: @@ -9035,19 +9035,19 @@ importers: packages/llm/llm: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-util-crypto': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/crypto '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9060,10 +9060,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants packages/llm/llm-deepseek: @@ -9072,10 +9072,10 @@ importers: specifier: link:../../../vendor/cosmokit version: link:../../../vendor/cosmokit '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9094,82 +9094,82 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-anonymous-user-id': - specifier: workspace:^ + specifier: workspace:* version: link:../../identity/anonymous-user-id '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-credentials-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials-local '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/deepseek-account '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../deepseek-llm-api-extensions '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../llm '@deepseek-ai/dsh-plugin-package-inventory-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../plugin-package-inventory-deepseek '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-log-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-log-deepseek '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/llm/llm-pi-ai: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9185,34 +9185,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-authorization': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/authorization '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../llm-deepseek '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/llm/llm-retry: @@ -9234,52 +9234,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../llm-deepseek '@deepseek-ai/dsh-llm-mock-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/llm-mock-server '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/llm/plugin-package-inventory-deepseek: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9295,31 +9295,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../deepseek-llm-api-extensions '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection packages/llm/token-meter: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9332,22 +9332,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-image-offload '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../llm '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../llm-retry '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection packages/lsp/lsp: @@ -9356,16 +9356,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm packages/lsp/lsp-stdio: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9375,28 +9375,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-lsp': - specifier: workspace:^ + specifier: workspace:* version: link:../lsp '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout typescript: specifier: ^6.0.3 @@ -9408,7 +9408,7 @@ importers: packages/lsp/tool-lsp: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9418,43 +9418,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-lsp': - specifier: workspace:^ + specifier: workspace:* version: link:../lsp '@deepseek-ai/dsh-lsp-stdio': - specifier: workspace:^ + specifier: workspace:* version: link:../lsp-stdio '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tool-call-timeout-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../guard/timeout-policy '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/mcp/mcp-client: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9467,34 +9467,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-mcp-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../mcp-resources '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@modelcontextprotocol/node': specifier: 2.0.0 @@ -9515,35 +9515,35 @@ importers: packages/mcp/mcp-resources: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/plan/plan-mode: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand zod: specifier: ^4.4.3 @@ -9553,37 +9553,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions packages/preset/agent-preset: @@ -9602,13 +9602,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../agent-preset-registry '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-tool-result-pruner '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill '@types/js-yaml': specifier: ^4.0.9 @@ -9639,58 +9639,58 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../agent-preset '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/atomic-write '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/hmr '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/preset/persona: @@ -9703,10 +9703,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt packages/ptc-runtime/ptc-runtime: @@ -9715,13 +9715,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox packages/ptc-runtime/ptc-runtime-node: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9731,37 +9731,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../ptc-runtime '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/runtime-diagnostics/invariants: @@ -9777,26 +9777,26 @@ importers: packages/sandbox/sandbox: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/sandbox/sandbox-local: dependencies: '@deepseek-ai/dsh-sandbox-windows-acl': - specifier: workspace:^ + specifier: workspace:* version: link:../sandbox-windows-acl '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/node-addon-system': specifier: workspace:^ @@ -9809,13 +9809,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../sandbox '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/sandbox/sandbox-policy: @@ -9831,31 +9831,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../sandbox '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt packages/sandbox/sandbox-windows-acl: dependencies: '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require '@deepseek-ai/dsh-win32-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/win32-process koffi: specifier: ^3.1.0 @@ -9865,16 +9865,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/pwsh-local '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../sandbox-local '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local packages/schedule/schedule: @@ -9890,43 +9890,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/sdk/client: @@ -9939,13 +9939,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sdk-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../protocol '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/sdk/protocol: @@ -9954,19 +9954,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent packages/sdk/server: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -9979,49 +9979,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-sdk-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../protocol '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent packages/session-query/session-log-export: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10037,52 +10037,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-client-ui-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-commands '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-conversation '@deepseek-ai/dsh-client-ui-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-message-feedback '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-primitives '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/commands '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../session-query '@types/react': specifier: ~18.3.1 @@ -10094,35 +10094,35 @@ importers: packages/session-query/session-query: dependencies: '@deepseek-ai/dsh-session-format-catalog': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format-catalog devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-projection-cache': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection-cache '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../todo/tool-todo packages/session-query/session-query-sqlite: @@ -10138,25 +10138,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../session-query packages/session-query/tool-session-query: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10166,46 +10166,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../session-query '@deepseek-ai/dsh-session-query-sqlite': - specifier: workspace:^ + specifier: workspace:* version: link:../session-query-sqlite '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tool-call-timeout-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../guard/timeout-policy '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/session/session-checkpoint-policy: @@ -10217,40 +10217,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/session/session-format: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': @@ -10260,79 +10260,79 @@ importers: packages/session/session-format-catalog: dependencies: '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction-image-offload '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-session-format-v0-to-v1': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v0-to-v1 '@deepseek-ai/dsh-session-format-v1-to-v2': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v1-to-v2 '@deepseek-ai/dsh-session-format-v2-to-v3': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v2-to-v3 '@deepseek-ai/dsh-session-format-v3-to-v4': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v3-to-v4 devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/session/session-format-v0-to-v1: dependencies: '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/session/session-format-v1-to-v2: dependencies: '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-session-format-v0-to-v1': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v0-to-v1 '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/session/session-format-v2-to-v3: dependencies: '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-session-format-v0-to-v1': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v0-to-v1 '@deepseek-ai/dsh-session-format-v1-to-v2': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v1-to-v2 devDependencies: '@deepseek-ai/cordis': @@ -10342,10 +10342,10 @@ importers: packages/session/session-format-v3-to-v4: dependencies: '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-session-format-v2-to-v3': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v2-to-v3 devDependencies: '@deepseek-ai/cordis': @@ -10355,10 +10355,10 @@ importers: packages/session/session-log-deepseek: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10374,68 +10374,68 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/command-feedback '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-llm-mock-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/llm-mock-server '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/message-feedback '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence-jsonl packages/session/session-persistence: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/session/session-persistence-jsonl: dependencies: '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format '@deepseek-ai/dsh-session-format-catalog': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-catalog '@deepseek-ai/dsh-session-format-v3-to-v4': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v3-to-v4 '@deepseek-ai/node-addon-system': specifier: workspace:^ @@ -10451,13 +10451,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-format-v0-to-v1': - specifier: workspace:^ + specifier: workspace:* version: link:../session-format-v0-to-v1 '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence packages/session/session-projection: @@ -10470,13 +10470,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/session/session-projection-cache: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10489,19 +10489,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-storage-json': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-json packages/session/session-stats: @@ -10520,13 +10520,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection packages/session/session-telemetry: @@ -10535,10 +10535,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/session/session-telemetry-otel: @@ -10575,49 +10575,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/logger-console '@deepseek-ai/dsh-anonymous-user-id': - specifier: workspace:^ + specifier: workspace:* version: link:../../identity/anonymous-user-id '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/command-feedback '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../feedback/message-feedback '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence-jsonl '@deepseek-ai/dsh-session-telemetry': - specifier: workspace:^ + specifier: workspace:* version: link:../session-telemetry '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local packages/session/session-title: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10630,28 +10630,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection packages/session/session-title-all-prompts-llm: @@ -10664,22 +10664,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../session-title '@deepseek-ai/dsh-session-title-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../session-title-llm packages/session/session-title-first-prompt-llm: @@ -10698,31 +10698,31 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../session-title '@deepseek-ai/dsh-session-title-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../session-title-llm packages/session/session-title-llm: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10732,16 +10732,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../session-title '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/session/session-turn-outline: @@ -10760,13 +10760,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../session-projection packages/settings/settings: @@ -10778,10 +10778,10 @@ importers: specifier: link:../../../vendor/cosmokit version: link:../../../vendor/cosmokit '@deepseek-ai/dsh-config-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/config-editor '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10797,22 +10797,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent-default-model': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-default-model '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/hmr '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/shell/bash-local: @@ -10825,16 +10825,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/shell/bash-sandbox: @@ -10843,25 +10843,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../bash-local '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/node-addon-system': specifier: workspace:^ @@ -10877,16 +10877,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/shell/pwsh-sandbox: @@ -10895,25 +10895,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../pwsh-local '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local packages/shell/shell: @@ -10922,10 +10922,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess packages/shell/shell-env: @@ -10938,22 +10938,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/shell/tool-bash: @@ -10966,61 +10966,61 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../bash-local '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../shell-env '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/shell/tool-bash-persistent: @@ -11039,43 +11039,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal-bash '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/shell/tool-pwsh: @@ -11088,61 +11088,61 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../pwsh-local '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../shell '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../shell-env '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/shell/tool-pwsh-persistent: @@ -11161,52 +11161,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../pwsh-local '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../terminal/terminal-bash '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/skill/skill: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11216,10 +11216,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope packages/skill/skill-badge: @@ -11228,7 +11228,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../skill packages/skill/skill-filesystem: @@ -11247,13 +11247,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/home-paths '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../skill packages/skill/skill-office: @@ -11275,7 +11275,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../skill packages/skill/tool-skill: @@ -11288,28 +11288,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../skill '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../skill-filesystem '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/skill/tool-workspace-dependencies: @@ -11328,16 +11328,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/spill/spill: @@ -11346,13 +11346,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/spill/spill-local: @@ -11371,16 +11371,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../spill packages/spill/spill-policy: @@ -11393,67 +11393,67 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment-local '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../mcp/mcp-client '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/output-retention '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../spill '@deepseek-ai/dsh-spill-local': - specifier: workspace:^ + specifier: workspace:* version: link:../spill-local '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools sharp: specifier: ^0.35.3 @@ -11472,16 +11472,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../ssh packages/ssh/sandbox-ssh: @@ -11497,10 +11497,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../ssh packages/ssh/ssh: @@ -11516,52 +11516,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-sandbox '@deepseek-ai/dsh-fs-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../fs-ssh '@deepseek-ai/dsh-lsp': - specifier: workspace:^ + specifier: workspace:* version: link:../../lsp/lsp '@deepseek-ai/dsh-lsp-stdio': - specifier: workspace:^ + specifier: workspace:* version: link:../../lsp/lsp-stdio '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-sandbox-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../sandbox-ssh '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-subprocess-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../subprocess-ssh packages/ssh/subprocess-ssh: @@ -11577,13 +11577,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-ssh': - specifier: workspace:^ + specifier: workspace:* version: link:../ssh '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local packages/storage/storage: @@ -11605,10 +11605,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../storage packages/storage/storage-json: @@ -11621,7 +11621,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../storage packages/storage/storage-sqlite: @@ -11634,19 +11634,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../storage packages/subagent/subagent: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-chunked-list': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/chunked-list '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11659,79 +11659,79 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-schedule': - specifier: workspace:^ + specifier: workspace:* version: link:../../schedule/schedule '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-projection-cache': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection-cache '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-storage-json': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-json '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval '@deepseek-ai/dsh-util-time': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/time '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/subagent/subagent-acp: @@ -11740,7 +11740,7 @@ importers: specifier: 1.4.0 version: 1.4.0(zod@4.4.3) '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11753,43 +11753,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-subagent packages/subagent/subagent-claude-code: @@ -11801,7 +11801,7 @@ importers: specifier: 0.93.0 version: 0.93.0(zod@4.4.3) '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11817,61 +11817,61 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subagent-codex': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-codex '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-subagent '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/subagent/subagent-codex: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-sdk-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../sdk/protocol '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11887,55 +11887,55 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-subagent '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/subagent/subagent-dsh-sdk: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -11948,55 +11948,55 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../context/agent-instructions '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-sdk-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../sdk/client '@deepseek-ai/dsh-sdk-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../sdk/protocol '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-checkpoint-policy '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../../skill/skill-filesystem '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-subagent packages/subagent/subagent-fork-in-process: @@ -12012,40 +12012,40 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subagent-in-process-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-in-process-driver '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-spawn-in-process packages/subagent/subagent-in-process-driver: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': @@ -12058,49 +12058,49 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-sandbox '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/tool-fs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-approval packages/subagent/subagent-spawn-in-process: @@ -12116,46 +12116,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/bash-local '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm-deepseek '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subagent-in-process-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-in-process-driver '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/tool-bash '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../tool-subagent packages/subagent/tool-subagent: @@ -12174,101 +12174,101 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-spawn-in-process '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/subagent/tool-subagent-control: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../session-query/session-query '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-fork-in-process '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../subagent-spawn-in-process '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/subprocess/subprocess: @@ -12277,19 +12277,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment packages/subprocess/subprocess-local: dependencies: '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require '@deepseek-ai/dsh-win32-process': - specifier: workspace:^ + specifier: workspace:* version: link:../win32-process koffi: specifier: ^3.1.0 @@ -12302,19 +12302,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/loader-smoke '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../subprocess '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout packages/subprocess/win32-process: dependencies: '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require koffi: specifier: ^3.1.0 @@ -12330,28 +12330,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/terminal/terminal-bash: dependencies: '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/lazy-require '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../shell/pwsh-local '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -12364,28 +12364,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../terminal packages/terminal/tool-terminal: @@ -12404,52 +12404,52 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/output-retention '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../terminal-bash '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/test-support/agent-loop-testkit: @@ -12458,25 +12458,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools packages/test-support/client-runtime: @@ -12504,79 +12504,79 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/gateway '@deepseek-ai/dsh-api-remotes': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/remotes '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/session-controller '@deepseek-ai/dsh-api-workspace-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/workspace-controller '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../attachment/attachment '@deepseek-ai/dsh-base': - specifier: workspace:^ + specifier: workspace:* version: link:../../bundle/base '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-client-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/hmr '@deepseek-ai/dsh-client-locale': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/locale '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/modules '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/store '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-chat '@deepseek-ai/dsh-client-ui-conversation': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-conversation '@deepseek-ai/dsh-client-ui-layout': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-layout '@deepseek-ai/dsh-client-ui-renderer': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-renderer '@deepseek-ai/dsh-client-ui-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-session '@deepseek-ai/dsh-client-ui-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-settings '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/ui-slots '@deepseek-ai/dsh-client-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/web '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../remote-mock '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../settings/settings '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol '@deepseek-ai/dsh-web-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../bundle/web-app '@types/js-yaml': specifier: ^4.0.9 @@ -12603,26 +12603,26 @@ importers: packages/test-support/llm-replay: dependencies: '@deepseek-ai/dsh-session-format-catalog': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format-catalog '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/test-support/loader-smoke: @@ -12638,19 +12638,19 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/test-support/remote-mock: @@ -12663,13 +12663,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-settings-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../../api/settings-controller '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../client/connection '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol typescript: specifier: ^6.0.3 @@ -12684,13 +12684,13 @@ importers: specifier: workspace:* version: link:../../../vendor/include '@deepseek-ai/dsh-llm-replay': - specifier: workspace:^ + specifier: workspace:* version: link:../llm-replay '@deepseek-ai/dsh-loader-smoke': specifier: workspace:* version: link:../loader-smoke '@deepseek-ai/dsh-session-format': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-format js-yaml: specifier: ^4.2.0 @@ -12703,37 +12703,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../compaction/compaction '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions '@types/js-yaml': specifier: ^4.0.9 @@ -12758,34 +12758,34 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/user-questions packages/typert/generator: @@ -12801,10 +12801,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-tool-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../extensions/tool-cordis '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../registry zod: specifier: ^4.4.3 @@ -12823,10 +12823,10 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../boot/app-boot '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../registry zod: specifier: ^4.4.3 @@ -12835,7 +12835,7 @@ importers: packages/typert/protocol: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': @@ -12852,7 +12852,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../protocol packages/util/atomic-write: @@ -12905,7 +12905,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants packages/util/launch-environment: @@ -12965,7 +12965,7 @@ importers: packages/web/tool-web: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -12981,43 +12981,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/scope '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-spill-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-local '@deepseek-ai/dsh-spill-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../spill/spill-policy '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/token-meter '@deepseek-ai/dsh-tool-call-timeout-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../guard/timeout-policy '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../web '@deepseek-ai/dsh-web-fetch-http': - specifier: workspace:^ + specifier: workspace:* version: link:../web-fetch-http '@deepseek-ai/dsh-web-search-exa': - specifier: workspace:^ + specifier: workspace:* version: link:../web-search-exa '@types/turndown': specifier: ^5.0.6 @@ -13033,7 +13033,7 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm packages/web/web-fetch-http: @@ -13052,13 +13052,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/timeout '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../web packages/web/web-search-deepseek: @@ -13071,25 +13071,25 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-credentials-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials-local '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../web packages/web/web-search-exa: @@ -13102,13 +13102,13 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../web packages/web/web-search-perplexity: @@ -13121,22 +13121,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/launch-environment '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../web packages/webhook/webhook: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values devDependencies: '@deepseek-ai/cordis': @@ -13149,37 +13149,37 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-default-model': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-default-model '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../preset/agent-preset-registry '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../interaction/permission-presets '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-title '@deepseek-ai/dsh-workspace': - specifier: workspace:^ + specifier: workspace:* version: link:../../workspace/workspace packages/webhook/webhook-github: dependencies: '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -13198,16 +13198,16 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../credentials/credentials '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../host/webserver '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-webhook': - specifier: workspace:^ + specifier: workspace:* version: link:../webhook packages/workflow/tool-ralph: @@ -13223,43 +13223,43 @@ importers: specifier: workspace:^ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subagent-in-process-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-in-process-driver '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-spawn-in-process '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../workflow '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../workflow-ptc packages/workflow/tool-workflow: @@ -13272,46 +13272,46 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/jobs-local '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../jobs/tool-jobs '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../workflow '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../workflow-ptc packages/workflow/workflow: @@ -13320,28 +13320,28 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session packages/workflow/workflow-ptc: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/values '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -13351,76 +13351,76 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../test-support/agent-loop-testkit '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../fs/fs-local '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/http-proxy '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../llm/llm '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-projection '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../subagent/subagent-spawn-in-process '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/tools '@deepseek-ai/dsh-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../workflow packages/workspace/workspace: dependencies: '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../util/brand zod: specifier: ^4.4.3 @@ -13430,22 +13430,22 @@ importers: specifier: workspace:^ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../runtime-diagnostics/invariants '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../session/session-persistence '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../storage/storage-domain '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../typert/protocol python/sdk-runtime: diff --git a/scripts/check-workspace-constraints.spec.ts b/scripts/check-workspace-constraints.spec.ts index 1d57212f64..21cb3124de 100644 --- a/scripts/check-workspace-constraints.spec.ts +++ b/scripts/check-workspace-constraints.spec.ts @@ -9,6 +9,7 @@ import { import { checkDshFamilyVersion, checkWorkspaceManifest, + checkWorkspaceProtocol, checkExperimentalDependencyIsolation, checkExperimentalManifest, expectedDshPackageFiles, @@ -23,6 +24,49 @@ const experimental = { }, } satisfies WorkspaceManifest +describe('workspace dependency ranges', () => { + const dependency = { dir: 'packages/core/runtime', manifest: { name: '@deepseek-ai/dsh-runtime' } } + const vendor = { dir: 'vendor/cordis', manifest: { name: '@deepseek-ai/cordis' } } + const native = { dir: 'native/system', manifest: { name: '@deepseek-ai/node-addon-system' } } + + it.each(['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const)( + 'pins DSH %s while preserving vendor and native ranges', + (section) => { + for (const dir of ['packages/core/probe', 'packages/experimental/probe']) { + const consumer = (range: string): WorkspaceManifest => ({ + dir, + manifest: { name: '@deepseek-ai/dsh-probe', [section]: { + '@deepseek-ai/dsh-runtime': range, + '@deepseek-ai/cordis': 'workspace:^', + '@deepseek-ai/node-addon-system': 'workspace:^', + external: '^1.2.3', + } }, + }) + expect(checkWorkspaceProtocol([dependency, vendor, native, consumer('workspace:*')])).toEqual([]) + for (const range of ['workspace:^', 'workspace:~', 'workspace:^4.0.3', '^4.0.3']) { + expect(checkWorkspaceProtocol([dependency, vendor, native, consumer(range)])).toEqual([ + `@deepseek-ai/dsh-probe: ${section}.@deepseek-ai/dsh-runtime must use workspace:*, got ${range}`, + ]) + } + } + }, + ) + + it.each(['.', 'apps/cli', 'vendor/probe', 'native/system', 'python/sdk-runtime'])( + 'retains workspace range choices outside packages: %s', + (dir) => { + const consumer = (range: string): WorkspaceManifest => ({ + dir, manifest: { dependencies: { '@deepseek-ai/dsh-runtime': range } }, + }) + expect(checkWorkspaceProtocol([dependency, consumer('workspace:^')])).toEqual([]) + expect(checkWorkspaceProtocol([dependency, consumer('workspace:*')])).toEqual([]) + expect(checkWorkspaceProtocol([dependency, consumer('^4.0.3')])).toEqual([ + `${dir}: dependencies.@deepseek-ai/dsh-runtime must use the workspace: protocol, got ^4.0.3`, + ]) + }, + ) +}) + describe('experimental workspace constraints', () => { it('requires the experimental package-name prefix', () => { expect(checkExperimentalManifest({ diff --git a/scripts/check-workspace-constraints.ts b/scripts/check-workspace-constraints.ts index 179f002f3c..765d0f02b0 100644 --- a/scripts/check-workspace-constraints.ts +++ b/scripts/check-workspace-constraints.ts @@ -548,23 +548,27 @@ export function checkExperimentalDependencyIsolation( } /** - * Require the `workspace:` protocol for every reference to a workspace member. + * Require exact DSH-to-DSH package ranges and the workspace protocol elsewhere. * * A hand-written range says nothing about the version the workspace actually * carries, and `pnpm pack` leaves it alone: `^0.0.1` published from version * `0.0.2` names a version that does not exist. The protocol makes pack - * substitute the member's real version, so no release step rewrites ranges. + * substitute the member's real version. DSH-to-DSH references under packages/ + * use `workspace:*`; references to vendor and native packages retain their ranges. * @param manifests - every workspace manifest. - * @returns One error per reference that names a workspace member without the protocol. + * @returns One error per workspace reference with a disallowed range. */ -function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): string[] { +export function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): string[] { const members = new Set(manifests.map(entry => entry.manifest.name).filter(name => name !== undefined)) const errors: string[] = [] for (const { dir, manifest } of manifests) { + const packageOwner = /^packages\/[^/]+\/[^/]+$/.test(dir) for (const section of dependencySections) { for (const [name, range] of Object.entries(manifest[section] ?? {})) { - if (!members.has(name) || range.startsWith('workspace:')) continue - errors.push(`${manifest.name ?? dir}: ${section}.${name} must use the workspace: protocol, got ${range}`) + if (!members.has(name)) continue + const exact = packageOwner && (name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-')) + if (exact ? range === 'workspace:*' : range.startsWith('workspace:')) continue + errors.push(`${manifest.name ?? dir}: ${section}.${name} must use ${exact ? 'workspace:*' : 'the workspace: protocol'}, got ${range}`) } } } diff --git a/scripts/package-invariants.spec.ts b/scripts/package-invariants.spec.ts index 4256e9b375..1321d9fc3c 100644 --- a/scripts/package-invariants.spec.ts +++ b/scripts/package-invariants.spec.ts @@ -38,6 +38,7 @@ function fixture(options: { invariantExport?: boolean invariantFile?: boolean invariantDependency?: boolean + invariantRange?: string invariantReference?: boolean buildEntry?: boolean omissionReason?: boolean @@ -78,10 +79,10 @@ function fixture(options: { exports, files: ['lib/index.js', ...invariantFile ? ['lib/invariant.js'] : []], peerDependencies: !invariantDependency || developmentOnlyInvariant ? {} : { - '@deepseek-ai/dsh-invariants': 'workspace:^', + '@deepseek-ai/dsh-invariants': options.invariantRange ?? 'workspace:*', }, devDependencies: !invariantDependency ? {} : { - '@deepseek-ai/dsh-invariants': 'workspace:^', + '@deepseek-ai/dsh-invariants': options.invariantRange ?? 'workspace:*', }, } writeFileSync(join(dir, 'package.json'), `${JSON.stringify(manifest, null, 2)}\n`) @@ -107,6 +108,13 @@ describe('package invariant gate', () => { expect(collectPackageInvariantViolations(fixture())).toEqual([]) }) + it('rejects caret ranges for the invariant peer and development dependency', () => { + expect(collectPackageInvariantViolations(fixture({ invariantRange: 'workspace:^' }))).toEqual([ + { path: 'packages/core/probe/package.json', message: '@deepseek-ai/dsh-invariants must be a workspace:* peerDependency' }, + { path: 'packages/core/probe/package.json', message: '@deepseek-ai/dsh-invariants must be a workspace:* devDependency' }, + ]) + }) + it('accepts a package that cleanly omits an invariant companion', () => { const root = fixture({ companion: false }) expect(collectPackageInvariantViolations(root)).toEqual([]) diff --git a/scripts/package-invariants.ts b/scripts/package-invariants.ts index 229a925c67..ef03e60183 100644 --- a/scripts/package-invariants.ts +++ b/scripts/package-invariants.ts @@ -133,12 +133,12 @@ function checkManifest( owner.packageName, manifest.dsh, ) - const expectedRange = 'workspace:^' + const expectedRange = 'workspace:*' const peerRange = manifest.peerDependencies?.['@deepseek-ai/dsh-invariants'] if (developmentOnlyInvariant ? peerRange !== undefined : peerRange !== expectedRange) { addViolation(violations, owner.manifestPath, developmentOnlyInvariant ? '@deepseek-ai/dsh-invariants must not be a peerDependency under this package dependency policy' - : '@deepseek-ai/dsh-invariants must be a workspace:^ peerDependency') + : '@deepseek-ai/dsh-invariants must be a workspace:* peerDependency') } if (manifest.devDependencies?.['@deepseek-ai/dsh-invariants'] !== expectedRange) { addViolation( diff --git a/scripts/verify-package-dependencies.spec.ts b/scripts/verify-package-dependencies.spec.ts index 2c4c147dd7..9a15d1b60b 100644 --- a/scripts/verify-package-dependencies.spec.ts +++ b/scripts/verify-package-dependencies.spec.ts @@ -744,8 +744,8 @@ describe('dependency sections', () => { it('moves browser-only third-party imports to development dependencies without changing their ranges', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^', external: '^1.2.3' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:^' }, + dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*', external: '^1.2.3' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:^' }, } const base = facts(manifest) @@ -771,8 +771,8 @@ describe('dependency sections', () => { it('does not leak repository configuration into captured dependency facts', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-client-locale', - dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:^' }, + dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:^' }, } const base = facts(manifest) @@ -789,8 +789,8 @@ describe('dependency sections', () => { it('requires non-workspace Host runtime imports in dependencies', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:^', external: '^1.0.0' }, + dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*', external: '^1.0.0' }, peerDependencies: { [CORDIS]: 'workspace:^' }, } const subject: PackageDependencyFacts = { @@ -830,12 +830,12 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { - '@deepseek-ai/dsh-runtime': 'workspace:^', + '@deepseek-ai/dsh-runtime': 'workspace:*', '@deepseek-ai/schemastery': 'workspace:^', external: '^1.0.0', }, devDependencies: { - '@deepseek-ai/dsh-types': 'workspace:^', + '@deepseek-ai/dsh-types': 'workspace:*', [CORDIS]: 'workspace:^', }, peerDependencies: { [CORDIS]: 'workspace:^' }, @@ -858,8 +858,8 @@ describe('dependency sections', () => { it('reports an unapproved Host runtime export without rewriting its dependency section', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:^' }, + dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:^' }, } const subject = facts(manifest) @@ -877,14 +877,14 @@ describe('dependency sections', () => { + 'safe or peer-required — import { runtimeValue } from \'@deepseek-ai/dsh-runtime\'', ]) expect(fixPackageDependencies('/unused', state)).toEqual([]) - expect(manifest.dependencies).toEqual({ '@deepseek-ai/dsh-runtime': 'workspace:^' }) + expect(manifest.dependencies).toEqual({ '@deepseek-ai/dsh-runtime': 'workspace:*' }) }) it('keeps an edge as a peer when one imported export requires shared identity', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:^' }, + dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:^' }, } const subject: PackageDependencyFacts = { @@ -906,11 +906,11 @@ describe('dependency sections', () => { expect(manifest.dependencies).toBeUndefined() expect(manifest.peerDependencies).toMatchObject({ [CORDIS]: 'workspace:^', - '@deepseek-ai/dsh-runtime': 'workspace:^', + '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(manifest.devDependencies).toMatchObject({ [CORDIS]: 'workspace:^', - '@deepseek-ai/dsh-runtime': 'workspace:^', + '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(formatPeerRequiredRuntimeDependencies({ facts: [subject], packages: [], policyViolations: [], workspaceNames: subject.workspaceNames, @@ -923,9 +923,9 @@ describe('dependency sections', () => { it('reports wrong sections, workspace ranges, and stale peer metadata', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - dependencies: { '@deepseek-ai/dsh-types': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:^' }, - peerDependencies: { [CORDIS]: 'workspace:*', '@deepseek-ai/dsh-runtime': 'workspace:^' }, + dependencies: { '@deepseek-ai/dsh-types': 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:*', '@deepseek-ai/dsh-runtime': 'workspace:*' }, peerDependenciesMeta: { '@deepseek-ai/dsh-missing': { optional: true } }, } const state = { @@ -936,7 +936,7 @@ describe('dependency sections', () => { expect.stringContaining('@deepseek-ai/dsh-runtime'), expect.stringContaining('@deepseek-ai/dsh-types'), expect.stringContaining(`${CORDIS} must be matching peerDependencies + devDependencies`), - expect.stringContaining('dependencies.@deepseek-ai/dsh-types must use workspace:^'), + expect.stringContaining('dependencies.@deepseek-ai/dsh-types must use workspace:*'), expect.stringContaining('peerDependenciesMeta.@deepseek-ai/dsh-missing has no matching'), ])) }) @@ -948,11 +948,11 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/schemastery': 'workspace:*', external: '^1.0.0' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:^', - '@deepseek-ai/dsh-runtime': 'workspace:^', - '@deepseek-ai/dsh-stale': 'workspace:^', + '@deepseek-ai/dsh-runtime': 'workspace:*', + '@deepseek-ai/dsh-stale': 'workspace:*', }, peerDependenciesMeta: { '@deepseek-ai/dsh-stale': { optional: true } }, } @@ -965,12 +965,12 @@ describe('dependency sections', () => { expect(fixed.dependencies).toEqual({ '@deepseek-ai/schemastery': 'workspace:^', external: '^1.0.0', - '@deepseek-ai/dsh-runtime': 'workspace:^', + '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(fixed.devDependencies).toEqual({ [CORDIS]: 'workspace:^', - '@deepseek-ai/dsh-types': 'workspace:^', - '@deepseek-ai/dsh-stale': 'workspace:^', + '@deepseek-ai/dsh-types': 'workspace:*', + '@deepseek-ai/dsh-stale': 'workspace:*', }) expect(fixed.peerDependencies).toEqual({ [CORDIS]: 'workspace:^' }) expect(fixed.peerDependenciesMeta).toBeUndefined() @@ -979,11 +979,11 @@ describe('dependency sections', () => { it('repairs an in-memory manifest for benchmark simulation', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - peerDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:^' }, + peerDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, } repairPackageDependencyManifest(facts(manifest)) - expect(manifest.dependencies).toEqual({ '@deepseek-ai/dsh-runtime': 'workspace:^' }) + expect(manifest.dependencies).toEqual({ '@deepseek-ai/dsh-runtime': 'workspace:*' }) expect(manifest.peerDependencies).toEqual({ [CORDIS]: 'workspace:^' }) }) }) diff --git a/scripts/verify-package-dependencies.ts b/scripts/verify-package-dependencies.ts index 9cd091131d..e74bf63fc7 100644 --- a/scripts/verify-package-dependencies.ts +++ b/scripts/verify-package-dependencies.ts @@ -20,7 +20,9 @@ import { const GATE = 'verify-package-dependencies' const CORDIS = '@deepseek-ai/cordis' -const WORKSPACE_RANGE = 'workspace:^' +function workspaceRange(name: string): 'workspace:*' | 'workspace:^' { + return name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-') ? 'workspace:*' : 'workspace:^' +} const RELEASE_MANIFEST_GLOB = 'packages/!(experimental)/*/package.json' const WORKSPACE_MANIFEST_GLOBS = [ 'apps/*/package.json', @@ -694,15 +696,16 @@ export function collectPackageDependencyViolations(state: PackageDependencyState for (const facts of state.facts) { for (const [name, rule] of expectedPackageDependencies(facts)) { const actual = declaredSections(facts.manifest, name) + const expectedRange = workspaceRange(name) if (rule.section === 'peer-dev') { if (actual.length === 2 && actual.includes('peerDependencies') && actual.includes('devDependencies') - && section(facts.manifest, 'peerDependencies')[name] === WORKSPACE_RANGE - && section(facts.manifest, 'devDependencies')[name] === WORKSPACE_RANGE + && section(facts.manifest, 'peerDependencies')[name] === expectedRange + && section(facts.manifest, 'devDependencies')[name] === expectedRange && facts.manifest.peerDependenciesMeta?.[name] === undefined) continue violations.push( - `${facts.manifestPath}: ${name} must be matching peerDependencies + devDependencies at ${WORKSPACE_RANGE}; found ${describeSections(actual)}`, + `${facts.manifestPath}: ${name} must be matching peerDependencies + devDependencies at ${expectedRange}; found ${describeSections(actual)}`, ) continue } @@ -710,17 +713,18 @@ export function collectPackageDependencyViolations(state: PackageDependencyState const range = section(facts.manifest, expectedSection)[name] if (actual.length === 1 && actual[0] === expectedSection - && (!facts.workspaceNames.has(name) || range === WORKSPACE_RANGE)) continue + && (!facts.workspaceNames.has(name) || range === expectedRange)) continue violations.push( `${facts.manifestPath}: ${name} (${rule.origins.join(', ')}) must be ${expectedSection}-only` - + (facts.workspaceNames.has(name) ? ` at ${WORKSPACE_RANGE}` : '') + + (facts.workspaceNames.has(name) ? ` at ${expectedRange}` : '') + `; found ${describeSections(actual)}`, ) } for (const sectionName of ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies'] as const) { for (const [name, range] of Object.entries(section(facts.manifest, sectionName))) { - if (!facts.workspaceNames.has(name) || range === WORKSPACE_RANGE) continue - violations.push(`${facts.manifestPath}: ${sectionName}.${name} must use ${WORKSPACE_RANGE}, found ${range}`) + const expectedRange = workspaceRange(name) + if (!facts.workspaceNames.has(name) || range === expectedRange) continue + violations.push(`${facts.manifestPath}: ${sectionName}.${name} must use ${expectedRange}, found ${range}`) } } for (const name of Object.keys(facts.manifest.peerDependenciesMeta ?? {})) { @@ -765,7 +769,7 @@ function preferredRange( name: string, target: ExpectedPackageDependency['section'], ): string { - if (name === CORDIS || facts.workspaceNames.has(name)) return WORKSPACE_RANGE + if (name === CORDIS || facts.workspaceNames.has(name)) return workspaceRange(name) const order: readonly DependencySection[] = target === 'dependencies' ? ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] : ['devDependencies', 'peerDependencies', 'dependencies', 'optionalDependencies'] @@ -790,8 +794,8 @@ export function repairPackageDependencyManifest(facts: PackageDependencyFacts): for (const sectionName of ['dependencies', 'optionalDependencies'] as const) { deleteDependency(facts.manifest, sectionName, name) } - mutableSection(facts.manifest, 'peerDependencies')[name] = WORKSPACE_RANGE - mutableSection(facts.manifest, 'devDependencies')[name] = WORKSPACE_RANGE + mutableSection(facts.manifest, 'peerDependencies')[name] = range + mutableSection(facts.manifest, 'devDependencies')[name] = range deletePeerMeta(facts.manifest, name) continue } @@ -806,7 +810,7 @@ export function repairPackageDependencyManifest(facts: PackageDependencyFacts): } for (const sectionName of ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies'] as const) { for (const name of Object.keys(section(facts.manifest, sectionName))) { - if (facts.workspaceNames.has(name)) mutableSection(facts.manifest, sectionName)[name] = WORKSPACE_RANGE + if (facts.workspaceNames.has(name)) mutableSection(facts.manifest, sectionName)[name] = workspaceRange(name) } } } From 7021420f2918686cbad49edd2935ed04791c200a Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 17:36:05 +0800 Subject: [PATCH 21/35] fix: validate dependency ranges across every workspace --- ...2026-08-10-npm-release-sequences.i18n.yaml | 4 +- .../2026-08-10-npm-release-sequences.md | 6 +- .../2026-08-10-npm-release-sequences.zh.md | 6 +- AGENTS.md | 2 +- docs/rescope.i18n.yaml | 4 +- docs/rescope.md | 2 +- docs/rescope.zh.md | 2 +- packages/AGENTS.md | 1 - scripts/check-workspace-constraints.spec.ts | 108 ++++++++++++------ scripts/check-workspace-constraints.ts | 60 +++++++--- 10 files changed, 130 insertions(+), 65 deletions(-) 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 d025f4ff2d..04ee7a1af7 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 @@ -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/process/2026-08-10-npm-release-sequences.md -2026-08-10-npm-release-sequences.md: c07f5264ce4148e5d49cb8e5e20997f92ca5b596 -2026-08-10-npm-release-sequences.zh.md: 7c5d01b9d6ffb806f3babeb9d423d36fa4ecb202 +2026-08-10-npm-release-sequences.md: da80904cb8ac0f2e06ee168c130f58d39e81da05 +2026-08-10-npm-release-sequences.zh.md: 7d8040d9d9f0653914934293bca7c54300feca16 diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md index c07f5264ce..da80904cb8 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md @@ -78,9 +78,9 @@ Two registry behaviours shape how a publish is attempted. Writes are spaced by a ### Workspace-internal references use the `workspace:` protocol -Every reference to a workspace member uses the `workspace:` protocol. References from `packages/*/*` to DSH packages use `workspace:*`, including peers and development dependencies, so `pnpm pack` writes the target's exact release version. Vendored references, including Cordis, retain `workspace:^` and follow their independent version lines. App and native manifests retain their declared ranges; Landlock platform references remain exact. Local workspace linking is unchanged. +Every reference to a workspace member uses the `workspace:` protocol. All references to DSH packages use `workspace:*`, including peers and development dependencies, so `pnpm pack` writes the target's exact release version. This rule covers every consumer, including the repository root, apps, benchmarks, and Python runtime. Vendored references, including Cordis, use `workspace:^` and follow their independent version lines. References to native packages retain their declared ranges; Landlock platform references remain exact. Local workspace linking is unchanged. -`scripts/check-workspace-constraints.ts` requires the protocol and exact DSH-to-DSH package ranges. The invariant-companion rule requires `workspace:*` for `@deepseek-ai/dsh-invariants`; the dependency repairer preserves vendored caret ranges. Published DSH peers therefore require the matching release instead of admitting later compatible versions. +`scripts/check-workspace-constraints.ts` reads every member declared in `pnpm-workspace.yaml` plus the root manifest and enforces ranges by dependency target, not consumer directory. The invariant-companion rule requires `workspace:*` for `@deepseek-ai/dsh-invariants`; the dependency repairer preserves vendored caret ranges. Published DSH peers therefore require the matching release instead of admitting later compatible versions. ### Published dependency faces use an explicit policy @@ -133,7 +133,7 @@ The installed-consumer probe captures npm's HTTP diagnostics and includes them w |---|---| | release-set manifests | `private: true` removed; `publishConfig.access` per sequence and `repository` with each package's `directory` added | | release-set boundary | every member of `packages/*/*`, `apps/*`, and `vendor/*` | -| dependency protocol | workspace references use the protocol; DSH-to-DSH package references and invariant companions use `workspace:*`, while vendor ranges remain independent | +| dependency protocol | every workspace consumer uses `workspace:*` for DSH targets and `workspace:^` for vendor targets | | root `AGENTS.md` | the convention that vendored packages are `private: true` no longer holds | | `vendor/README.md` | records `src` joining `cordis`'s `files` as a local modification | | the three native packages | `publishConfig.access: public`, and their workflow passes no `--access` | diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md index 7c5d01b9d6..7d8040d9d9 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md @@ -78,9 +78,9 @@ registry 的两个行为决定了「怎么尝试一次发布」。写入之间 ### workspace 内部引用走 `workspace:` 协议 -所有指向 workspace 成员的引用都用 `workspace:` 协议。`packages/*/*` 指向 DSH 包的引用使用 `workspace:*`,包括 peer 和开发依赖,由 `pnpm pack` 写入目标的精确发布版本。包括 Cordis 在内的 vendored 引用保留 `workspace:^`,跟随各自独立的版本线。App 和 native 清单保留已声明的范围;Landlock 平台引用仍为精确版本。本地 workspace 链接方式不变。 +所有指向 workspace 成员的引用都用 `workspace:` 协议。所有指向 DSH 包的引用使用 `workspace:*`,包括 peer 和开发依赖,由 `pnpm pack` 写入目标的精确发布版本。这条规则覆盖所有消费者,包括仓库根清单、应用、benchmarks 和 Python 运行时。包括 Cordis 在内的 vendored 引用使用 `workspace:^`,跟随各自独立的版本线。指向 native 包的引用保留已声明的范围;Landlock 平台引用仍为精确版本。本地 workspace 链接方式不变。 -`scripts/check-workspace-constraints.ts` 要求使用该协议,并精确锁定 DSH 包之间的引用。Invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 使用 `workspace:*`;依赖修复器保留 vendored caret 范围。因此,发布的 DSH peer 要求匹配的发布版本,而不接纳后续兼容版本。 +`scripts/check-workspace-constraints.ts` 读取 `pnpm-workspace.yaml` 声明的全部成员及根清单,按依赖目标而非消费者目录校验范围。Invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 使用 `workspace:*`;依赖修复器保留 vendored caret 范围。因此,发布的 DSH peer 要求匹配的发布版本,而不接纳后续兼容版本。 ### 发布依赖门面使用显式策略 @@ -133,7 +133,7 @@ dsh 的验证会一并安装 vendored 族的 pack 产物。harness 的包把 ven |---|---| | 发布集 manifest | 去掉 `private: true`;按序列补 `publishConfig.access` 与带各自 `directory` 的 `repository` | | 发布集边界 | `packages/*/*`、`apps/*`、`vendor/*` 的全部成员 | -| 依赖协议 | workspace 引用使用该协议;DSH 包之间的引用及 invariant companion 使用 `workspace:*`,vendor 范围保持独立 | +| 依赖协议 | 每个 workspace 消费者对 DSH 目标使用 `workspace:*`,对 vendor 目标使用 `workspace:^` | | 根 `AGENTS.md` | 「vendored 包是 `private: true`」这条约定不再成立 | | `vendor/README.md` | 记录「`src` 加入 `cordis` 的 `files`」这条本地修改 | | native 三包 | `publishConfig.access: public`,且其 workflow 不传 `--access` | diff --git a/AGENTS.md b/AGENTS.md index aa83ae8c08..b9083dc1cf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -126,7 +126,7 @@ Real-API tests/demos read `DEEPSEEK_API_KEY`, optional `DEEPSEEK_BASE_URL`, and ## Conventions -- Every npm package is `@deepseek-ai/dsh-`; vendored packages are rescoped ([mapping](docs/rescope.md)) and `private: true`. `@deepseek-ai/cordis` is a peerDependency (+ dev) of every harness package. +- Packages use `@deepseek-ai/dsh-`; vendor is [rescoped](docs/rescope.md) and `private: true`. Harness packages declare `@deepseek-ai/cordis` in `peerDependencies`/`devDependencies`. Workspace dependency sections use DSH `workspace:*`, vendor `workspace:^` ([rules](.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md#workspace-internal-references-use-the-workspace-protocol)). - ESM everywhere (`"type": "module"`). Use package names across packages and `.ts` in local relative imports. Config subprocesses run built `lib/` under plain Node; source regressions use their declared launcher ([testing policy](docs/testing.md#test-subprocess-launch-modes)). The `dsh` CLI source launch runs through tsx's ESM-only hook (`node --import tsx/esm`); modules it reaches must stay ESM (no CJS-only exports) — Node's native TypeScript modes are unavailable across the engines range ([source-launch contract](.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.md)). Raw/Web `cordis.yml` bare plugins must appear in their resolver manifest's `dependencies`; `verify-cordis-config` enforces it. - **Registrations are effects**: every contribution goes through `ctx.effect()` / `ctx.on()`; a registry's `register()` returns the disposer. - **Runtime invariants assert owned relationships.** Publish `./invariant` only when independent observations can diverge. Otherwise omit its source and wiring and record why in its README; empty installers and checks of service presence, plugin metadata, effects, or fixed examples are invalid ([package invariant rules](packages/AGENTS.md)). diff --git a/docs/rescope.i18n.yaml b/docs/rescope.i18n.yaml index e55fd71381..750cbfa26c 100644 --- a/docs/rescope.i18n.yaml +++ b/docs/rescope.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/rescope.md -rescope.md: 3779001ed2dfb1acc7969a92c716dce6c389376d -rescope.zh.md: 881ef4192f6c617eefe8b56234aaae1d6acc7f5b +rescope.md: 7213077966a6e01f3f1123036645cc8de821484e +rescope.zh.md: 1b898662e8eb2fae72ae28ff1c2b1b1dd03d09e2 diff --git a/docs/rescope.md b/docs/rescope.md index 3779001ed2..7213077966 100644 --- a/docs/rescope.md +++ b/docs/rescope.md @@ -23,7 +23,7 @@ Subpath exports keep their path: `@cordisjs/plugin-loader/repository` becomes `@ ## What the rename does not touch - **Directory names and upstream source versions.** `vendor/hmr/` stays `vendor/hmr/`, and the table records the upstream version of the pinned source snapshot, so the manifest reads as an upstream snapshot; the vendored `package.json`'s own `version` field is the harness's released manifest version, which `pnpm run release:vendor` bumps and a re-sync restores to the upstream version. -- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use the `workspace:` protocol; [package rules](../packages/AGENTS.md) distinguish exact DSH references from vendored caret ranges. +- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use the `workspace:` protocol; [repository rules](../AGENTS.md#conventions) distinguish exact DSH references from vendored caret ranges. - **The Loader's `cordis:` builtin prefix.** `cordis:include` and `cordis:group` are a protocol prefix, not a package name. - **The `cordis.yml` configuration family**, including `*.cordis.yml`, `*.cordis.snapshot.yml`, and `cordis.patch.yml`. - **Harness packages whose own names contain the word**, such as `@deepseek-ai/dsh-tool-cordis`. diff --git a/docs/rescope.zh.md b/docs/rescope.zh.md index 881ef4192f..1b898662e8 100644 --- a/docs/rescope.zh.md +++ b/docs/rescope.zh.md @@ -23,7 +23,7 @@ Cordis 框架及其基础库以源码形式 vendored 在 [`vendor/`](../vendor/R ## 改名不碰什么 - **目录名与上游源码版本。** `vendor/hmr/` 仍是 `vendor/hmr/`,清单表记录的是所钉住源码快照的上游版本,因此清单读作一份上游快照;而每个 vendored 包 `package.json` 自身的 `version` 字段是 harness 发布的清单版本,`pnpm run release:vendor` 会提升它,重新 sync 时会恢复成上游版本。 -- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单使用 `workspace:` 协议;[包规则](../packages/AGENTS.md)区分精确的 DSH 引用与 vendored caret 范围。 +- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单使用 `workspace:` 协议;[仓库规则](../AGENTS.md#conventions)区分精确的 DSH 引用与 vendored caret 范围。 - **Loader 的 `cordis:` 内建前缀。** `cordis:include`、`cordis:group` 是协议前缀,不是包名。 - **`cordis.yml` 配置文件家族**,包括 `*.cordis.yml`、`*.cordis.snapshot.yml`、`cordis.patch.yml`。 - **名字里带这个词的 harness 包**,例如 `@deepseek-ai/dsh-tool-cordis`。 diff --git a/packages/AGENTS.md b/packages/AGENTS.md index 4a47b1d9d4..f0c49d55e5 100644 --- a/packages/AGENTS.md +++ b/packages/AGENTS.md @@ -20,7 +20,6 @@ These package-specific rules supplement the repo-wide [conventions](../AGENTS.md [Naming rules](../docs/cookbook/adding-a-package.md#name-the-role-that-exists): -- **Workspace ranges:** references from `packages/*/*` to DSH packages use `workspace:*` in every dependency section, including peers and development dependencies. Vendor and native ranges retain their existing policy; Cordis stays `workspace:^` ([publication rules](../.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md#workspace-internal-references-use-the-workspace-protocol)). - **Package tsconfig:** extends `tsconfig.base.json` (Client: `tsconfig.base.client.json`), sets `rootDir: src` and `outDir: lib/types`, references workspace dependencies, references `runtime-diagnostics/invariants` only when the package publishes `./invariant`, and registers in one aggregate. Packages with distinct Host and Client compiler faces use `tsconfig.host.json` and `tsconfig.client.json` leaves plus a solution-only root; ordinary two-entry Client plugins do not split ([layout](../docs/development.md#typescript-project-layout)). - `src/types.ts` contains only types — no runtime code. - Tests live at package level under `tests/`, not `src/__tests__/`. diff --git a/scripts/check-workspace-constraints.spec.ts b/scripts/check-workspace-constraints.spec.ts index 21cb3124de..3a293b2863 100644 --- a/scripts/check-workspace-constraints.spec.ts +++ b/scripts/check-workspace-constraints.spec.ts @@ -1,7 +1,9 @@ -/** Experimental-package publication and dependency constraints. */ +/** Workspace dependency ranges and package publication constraints. */ -import { readFileSync } from 'node:fs' -import { describe, expect, it } from 'vitest' +import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { describe, expect, it, onTestFinished } from 'vitest' import { isPublicExperimentalPackageDirectory, PRIVATE_EXPERIMENTAL_PACKAGE_DIRECTORIES, @@ -13,6 +15,7 @@ import { checkExperimentalDependencyIsolation, checkExperimentalManifest, expectedDshPackageFiles, + readWorkspaceManifests, type WorkspaceManifest, } from './check-workspace-constraints.ts' @@ -26,45 +29,84 @@ const experimental = { describe('workspace dependency ranges', () => { const dependency = { dir: 'packages/core/runtime', manifest: { name: '@deepseek-ai/dsh-runtime' } } + const cli = { dir: 'apps/cli', manifest: { name: '@deepseek-ai/dsh' } } const vendor = { dir: 'vendor/cordis', manifest: { name: '@deepseek-ai/cordis' } } const native = { dir: 'native/system', manifest: { name: '@deepseek-ai/node-addon-system' } } - it.each(['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const)( - 'pins DSH %s while preserving vendor and native ranges', - (section) => { - for (const dir of ['packages/core/probe', 'packages/experimental/probe']) { - const consumer = (range: string): WorkspaceManifest => ({ - dir, - manifest: { name: '@deepseek-ai/dsh-probe', [section]: { - '@deepseek-ai/dsh-runtime': range, - '@deepseek-ai/cordis': 'workspace:^', - '@deepseek-ai/node-addon-system': 'workspace:^', - external: '^1.2.3', - } }, + describe.each([ + '.', 'packages/core/probe', 'packages/experimental/probe', 'apps/cli', 'apps/web', + 'apps/desktop', 'apps/desktop-host', 'benchmarks', 'website', 'python/sdk-runtime', 'tools/probe', + ])('consumer %s', (dir) => { + it.each(['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const)( + 'requires exact DSH and caret vendor %s independently of the consumer name', + (section) => { + const consumer = (name: string, range: string): WorkspaceManifest => ({ + dir, manifest: { name: 'consumer', [section]: { [name]: range } }, }) - expect(checkWorkspaceProtocol([dependency, vendor, native, consumer('workspace:*')])).toEqual([]) - for (const range of ['workspace:^', 'workspace:~', 'workspace:^4.0.3', '^4.0.3']) { - expect(checkWorkspaceProtocol([dependency, vendor, native, consumer(range)])).toEqual([ - `@deepseek-ai/dsh-probe: ${section}.@deepseek-ai/dsh-runtime must use workspace:*, got ${range}`, + const check = (name: string, range: string): string[] => + checkWorkspaceProtocol([dependency, cli, vendor, native, consumer(name, range)]) + for (const name of ['@deepseek-ai/dsh', '@deepseek-ai/dsh-runtime']) { + expect(check(name, 'workspace:*')).toEqual([]) + for (const range of ['workspace:^', 'workspace:~', 'workspace:^0.1.7', '^0.1.7', '*']) { + expect(check(name, range)).toEqual([ + `consumer: ${section}.${name} must use workspace:*, got ${range}`, + ]) + } + } + expect(check('@deepseek-ai/cordis', 'workspace:^')).toEqual([]) + for (const range of ['workspace:*', 'workspace:~', '^4.0.3']) { + expect(check('@deepseek-ai/cordis', range)).toEqual([ + `consumer: ${section}.@deepseek-ai/cordis must use workspace:^, got ${range}`, ]) } - } + for (const range of ['workspace:*', 'workspace:^']) { + expect(check('@deepseek-ai/node-addon-system', range)).toEqual([]) + } + expect(check('@deepseek-ai/node-addon-system', '^0.1.0')).toEqual([ + `consumer: ${section}.@deepseek-ai/node-addon-system must use the workspace: protocol, got ^0.1.0`, + ]) + expect(check('external', '^1.2.3')).toEqual([]) + }, + ) + }) +}) + +describe('workspace manifest discovery', () => { + it('checks root, app, runtime, tooling, and newly declared members while honoring exclusions', () => { + const root = mkdtempSync(join(tmpdir(), 'dsh-workspace-ranges-')) + onTestFinished(() => { rmSync(root, { recursive: true, force: true }) }) + const consumers = ['.', 'apps/cli', 'apps/web', 'apps/desktop', 'apps/desktop-host', 'benchmarks', 'website', 'python/sdk-runtime', 'tools/probe'] + writeFileSync(join(root, 'pnpm-workspace.yaml'), [ + 'packages:', ' - packages/*/*', ' - apps/*', ' - apps/cli', ' - benchmarks', + ' - website', ' - python/sdk-runtime', ' - tools/*', ' - "!tools/excluded"', + ].join('\n')) + for (const dir of [...consumers, 'tools/excluded', 'unlisted/probe', 'packages/core/runtime']) { + mkdirSync(join(root, dir), { recursive: true }) + writeFileSync(join(root, dir, 'package.json'), JSON.stringify(dir === 'packages/core/runtime' + ? { name: '@deepseek-ai/dsh-runtime' } + : { dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:^' } })) + } + const manifests = readWorkspaceManifests(root) + expect(manifests.map(entry => entry.dir).sort()).toEqual([...consumers, 'packages/core/runtime'].sort()) + expect(checkWorkspaceProtocol(manifests).sort()).toEqual(consumers.map(dir => + `${dir}: dependencies.@deepseek-ai/dsh-runtime must use workspace:*, got workspace:^`).sort()) + }) + + it.each(['', 'null', '{}', 'packages: []', 'packages: [false]', 'packages: [""]', 'packages: wrong'])( + 'rejects an invalid workspace declaration: %s', (contents) => { + const root = mkdtempSync(join(tmpdir(), 'dsh-workspace-ranges-')) + onTestFinished(() => { rmSync(root, { recursive: true, force: true }) }) + writeFileSync(join(root, 'pnpm-workspace.yaml'), contents) + expect(() => readWorkspaceManifests(root)).toThrow('packages must be a non-empty list of workspace patterns') }, ) - it.each(['.', 'apps/cli', 'vendor/probe', 'native/system', 'python/sdk-runtime'])( - 'retains workspace range choices outside packages: %s', - (dir) => { - const consumer = (range: string): WorkspaceManifest => ({ - dir, manifest: { dependencies: { '@deepseek-ai/dsh-runtime': range } }, - }) - expect(checkWorkspaceProtocol([dependency, consumer('workspace:^')])).toEqual([]) - expect(checkWorkspaceProtocol([dependency, consumer('workspace:*')])).toEqual([]) - expect(checkWorkspaceProtocol([dependency, consumer('^4.0.3')])).toEqual([ - `${dir}: dependencies.@deepseek-ai/dsh-runtime must use the workspace: protocol, got ^4.0.3`, - ]) - }, - ) + it('rejects a declaration that matches no workspace members', () => { + const root = mkdtempSync(join(tmpdir(), 'dsh-workspace-ranges-')) + onTestFinished(() => { rmSync(root, { recursive: true, force: true }) }) + writeFileSync(join(root, 'pnpm-workspace.yaml'), 'packages: [missing/*]') + expect(() => readWorkspaceManifests(root)).toThrow('packages matched no workspace manifests') + }) }) describe('experimental workspace constraints', () => { diff --git a/scripts/check-workspace-constraints.ts b/scripts/check-workspace-constraints.ts index 765d0f02b0..4ef941a22e 100644 --- a/scripts/check-workspace-constraints.ts +++ b/scripts/check-workspace-constraints.ts @@ -5,9 +5,10 @@ * Run: `tsx scripts/check-workspace-constraints.ts`. */ -import { existsSync, readdirSync, readFileSync } from 'node:fs' -import { join, relative, resolve } from 'node:path' +import { existsSync, globSync, readdirSync, readFileSync } from 'node:fs' +import { dirname, join, relative, resolve } from 'node:path' import { pathToFileURL } from 'node:url' +import { load as loadYaml } from 'js-yaml' import { isPublicExperimentalPackageDirectory, PRIVATE_EXPERIMENTAL_PACKAGE_DIRECTORIES, @@ -18,8 +19,7 @@ import { OPTIONAL_BUNDLES, bundlePatchFiles } from '../packages/boot/app-boot/sr import { collectProjectReferenceFaceViolations } from './project-reference-faces.ts' const root = resolve(import.meta.dirname, '..') -// vendor/* is single-level; packages// nests one level deeper -// (the group dirs — core/llm/shell/… — are pure containers with no manifest). +// Publication rules cover these package trees; dependency rules read all pnpm members. const workspaceGlobs = [ { dir: 'vendor', depth: 1 }, { dir: 'packages', depth: 2 }, @@ -147,6 +147,32 @@ function workspaceManifests(): WorkspaceManifest[] { return manifests } +/** + * Read the root manifest and every member declared by pnpm-workspace.yaml. + * @param repositoryRoot - repository or fixture root containing the workspace declaration. + * @returns Manifests with normalized repository-relative directories. + * @throws When the workspace declaration is invalid or matches no member manifests. + */ +export function readWorkspaceManifests(repositoryRoot: string): WorkspaceManifest[] { + const config = loadYaml(readFileSync(join(repositoryRoot, 'pnpm-workspace.yaml'), 'utf8')) + if (typeof config !== 'object' || config === null || !('packages' in config) + || !Array.isArray(config.packages) || config.packages.length === 0 + || !config.packages.every((member: unknown): member is string => typeof member === 'string' && member.length > 0)) { + throw new Error('pnpm-workspace.yaml: packages must be a non-empty list of workspace patterns') + } + const patterns = config.packages.filter(member => !member.startsWith('!')).map(member => `${member}/package.json`) + const exclude = config.packages.filter(member => member.startsWith('!')).map(member => `${member.slice(1)}/package.json`) + const paths = globSync(patterns, { + cwd: repositoryRoot, + exclude: ['**/node_modules/**', '**/.git/**', ...exclude], + }).map(path => path.replaceAll('\\', '/')) + if (paths.length === 0) throw new Error('pnpm-workspace.yaml: packages matched no workspace manifests') + return [...new Set(['package.json', ...paths])].sort().map(path => ({ + dir: dirname(path).replaceAll('\\', '/'), + manifest: readJson(join(repositoryRoot, path)), + })) +} + const packageFileExtras: Readonly> = { // Owned Worker bundles import this public bootstrap before their business entry. '@deepseek-ai/dsh-app-boot': ['lib/worker/profile-resolution-bootstrap.js'], @@ -548,27 +574,29 @@ export function checkExperimentalDependencyIsolation( } /** - * Require exact DSH-to-DSH package ranges and the workspace protocol elsewhere. + * Require exact DSH ranges, caret vendor ranges, and the workspace protocol elsewhere. * * A hand-written range says nothing about the version the workspace actually * carries, and `pnpm pack` leaves it alone: `^0.0.1` published from version * `0.0.2` names a version that does not exist. The protocol makes pack - * substitute the member's real version. DSH-to-DSH references under packages/ - * use `workspace:*`; references to vendor and native packages retain their ranges. + * substitute the member's real version. Dependency targets determine the range, + * regardless of the consuming manifest's name or directory. * @param manifests - every workspace manifest. * @returns One error per workspace reference with a disallowed range. */ export function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): string[] { const members = new Set(manifests.map(entry => entry.manifest.name).filter(name => name !== undefined)) + const vendors = new Set(manifests.filter(entry => entry.dir.startsWith('vendor/')).map(entry => entry.manifest.name)) const errors: string[] = [] for (const { dir, manifest } of manifests) { - const packageOwner = /^packages\/[^/]+\/[^/]+$/.test(dir) for (const section of dependencySections) { for (const [name, range] of Object.entries(manifest[section] ?? {})) { if (!members.has(name)) continue - const exact = packageOwner && (name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-')) - if (exact ? range === 'workspace:*' : range.startsWith('workspace:')) continue - errors.push(`${manifest.name ?? dir}: ${section}.${name} must use ${exact ? 'workspace:*' : 'the workspace: protocol'}, got ${range}`) + const expected = name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-') + ? 'workspace:*' + : vendors.has(name) ? 'workspace:^' : undefined + if (expected !== undefined ? range === expected : range.startsWith('workspace:')) continue + errors.push(`${manifest.name ?? dir}: ${section}.${name} must use ${expected ?? 'the workspace: protocol'}, got ${range}`) } } } @@ -577,16 +605,12 @@ export function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): /** Run the repository constraint gate. */ export function main(): void { - const manifests = workspaceManifests() - const dependencyManifests = [ - ...manifests, - { dir: 'python/sdk-runtime', manifest: readJson(join(root, 'python/sdk-runtime/package.json')) }, - ] + const manifests = readWorkspaceManifests(root) const errors = [ ...checkRepositoryVersion(), - ...manifests.flatMap(checkWorkspaceManifest), + ...workspaceManifests().flatMap(checkWorkspaceManifest), ...checkWorkspaceProtocol(manifests), - ...checkExperimentalDependencyIsolation(dependencyManifests), + ...checkExperimentalDependencyIsolation(manifests), ...checkHierarchyShape(), ...collectProjectReferenceFaceViolations(root), ] From b9b5f7c58e859f855965ad007e0867dd08502408 Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 17:40:36 +0800 Subject: [PATCH 22/35] fix: complete exact DSH ranges in application and runtime manifests --- apps/cli/package.json | 220 +++--- apps/desktop-host/package.json | 20 +- apps/desktop/package.json | 16 +- apps/web/package.json | 40 +- benchmarks/package.json | 54 +- package.json | 30 +- .../session-snapshot/package.json | 2 +- pnpm-lock.yaml | 656 +++++++++--------- python/sdk-runtime/package.json | 278 ++++---- 9 files changed, 658 insertions(+), 658 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index ed960a9b39..028eeee7e9 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -21,126 +21,126 @@ "license": "MIT", "dependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-hmr": "workspace:^", + "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/dsh-acp-app": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-agent-tool-presentation": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-base": "workspace:^", - "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:^", - "@deepseek-ai/dsh-client-ui-cordis": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-command-compact": "workspace:^", - "@deepseek-ai/dsh-command-goal": "workspace:^", - "@deepseek-ai/dsh-compaction-basic": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-cordis-client-runner": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team-profile": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-goal-round-driver": "workspace:^", - "@deepseek-ai/dsh-headless": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-hooks-claude-code": "workspace:^", - "@deepseek-ai/dsh-hooks-codex": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-persona": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-pwsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-schedule": "workspace:^", - "@deepseek-ai/dsh-sdk-app": "workspace:^", - "@deepseek-ai/dsh-sdk-minimal": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-reference": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-skill-office": "workspace:^", - "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-time-context": "workspace:^", - "@deepseek-ai/dsh-tmux-context": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tool-ask-user": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-bash-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-cordis": "workspace:^", - "@deepseek-ai/dsh-tool-present": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tool-fs-search": "workspace:^", - "@deepseek-ai/dsh-tool-goal": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-ralph": "workspace:^", - "@deepseek-ai/dsh-tool-skill": "workspace:^", - "@deepseek-ai/dsh-tool-str-replace-editor": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tool-subagent-control": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-tool-web": "workspace:^", - "@deepseek-ai/dsh-tool-workflow": "workspace:^", - "@deepseek-ai/dsh-web-app": "workspace:^", - "@deepseek-ai/dsh-webhook": "workspace:^", - "@deepseek-ai/dsh-webhook-github": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^", + "@deepseek-ai/dsh-acp-app": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-agent-tool-presentation": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-base": "workspace:*", + "@deepseek-ai/dsh-client-ui-agent-preset": "workspace:*", + "@deepseek-ai/dsh-client-ui-cordis": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-command-compact": "workspace:*", + "@deepseek-ai/dsh-command-goal": "workspace:*", + "@deepseek-ai/dsh-compaction-basic": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-cordis-client-runner": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team-profile": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-goal-round-driver": "workspace:*", + "@deepseek-ai/dsh-headless": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-hooks-claude-code": "workspace:*", + "@deepseek-ai/dsh-hooks-codex": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-persona": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-pwsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-schedule": "workspace:*", + "@deepseek-ai/dsh-sdk-app": "workspace:*", + "@deepseek-ai/dsh-sdk-minimal": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-reference": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-skill-office": "workspace:*", + "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-time-context": "workspace:*", + "@deepseek-ai/dsh-tmux-context": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tool-ask-user": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-bash-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-cordis": "workspace:*", + "@deepseek-ai/dsh-tool-present": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tool-fs-search": "workspace:*", + "@deepseek-ai/dsh-tool-goal": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-ralph": "workspace:*", + "@deepseek-ai/dsh-tool-skill": "workspace:*", + "@deepseek-ai/dsh-tool-str-replace-editor": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tool-subagent-control": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-tool-web": "workspace:*", + "@deepseek-ai/dsh-tool-workflow": "workspace:*", + "@deepseek-ai/dsh-web-app": "workspace:*", + "@deepseek-ai/dsh-webhook": "workspace:*", + "@deepseek-ai/dsh-webhook-github": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*", "@deepseek-ai/schemastery": "workspace:^", "commander": "^15.0.0", "js-yaml": "^4.2.0", "node-addon-require-builtin": "^0.1.6", - "@deepseek-ai/dsh-http-proxy": "workspace:^", - "@deepseek-ai/dsh-mcp-resources": "workspace:^", - "@deepseek-ai/dsh-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-agent-preset": "workspace:^", - "@deepseek-ai/dsh-experimental-voice-input-bundle": "workspace:^" + "@deepseek-ai/dsh-http-proxy": "workspace:*", + "@deepseek-ai/dsh-mcp-resources": "workspace:*", + "@deepseek-ai/dsh-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-agent-preset": "workspace:*", + "@deepseek-ai/dsh-experimental-voice-input-bundle": "workspace:*" }, "devDependencies": { "@agentclientprotocol/sdk": "1.4.0", - "@deepseek-ai/dsh-acp": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-attachment-local": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-credentials-local": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-experimental-ptc-runtime-python": "workspace:^", - "@deepseek-ai/dsh-experimental-tool-agent-team": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-host-frontend-static": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-llm-mock-server": "workspace:^", - "@deepseek-ai/dsh-llm-pi-ai": "workspace:^", - "@deepseek-ai/dsh-llm-replay": "workspace:^", - "@deepseek-ai/dsh-loader-smoke": "workspace:^", - "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-log-deepseek": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", + "@deepseek-ai/dsh-acp": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-attachment-local": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-credentials-local": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-experimental-ptc-runtime-python": "workspace:*", + "@deepseek-ai/dsh-experimental-tool-agent-team": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-host-frontend-static": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-mock-server": "workspace:*", + "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", + "@deepseek-ai/dsh-llm-replay": "workspace:*", + "@deepseek-ai/dsh-loader-smoke": "workspace:*", + "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", "@types/js-yaml": "^4.0.9", "@types/ws": "8.18.1", "ajv": "^8.20.0", diff --git a/apps/desktop-host/package.json b/apps/desktop-host/package.json index 32bad4b043..49b5cf6f91 100644 --- a/apps/desktop-host/package.json +++ b/apps/desktop-host/package.json @@ -11,15 +11,15 @@ ], "dependencies": { "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:^", - "@deepseek-ai/dsh-skill-office": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^" + "@deepseek-ai/dsh": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*", + "@deepseek-ai/dsh-skill-office": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*" } } diff --git a/apps/desktop/package.json b/apps/desktop/package.json index d7c8fbdd09..802b47e9da 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -39,14 +39,14 @@ "electron-updater": "^6.8.9", "semver": "^7.8.5", "ws": "^8.21.0", - "@deepseek-ai/dsh-api-gateway": "workspace:^", + "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/cordis": "workspace:^" }, "devDependencies": { - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-client-ui-settings-general": "workspace:^", - "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-client-ui-settings-general": "workspace:*", + "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/node-addon-system": "workspace:^", "@electron/get": "^5.1.0", "@electron/notarize": "2.5.0", @@ -62,14 +62,14 @@ "koffi": "^3.1.0", "pnpm": "11.7.0", "typescript": "^6.0.3", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", + "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@types/ws": "^8.18.1", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "react": "^18.2.0", "react-dom": "^18.2.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "vite": "^6.0.0", - "@deepseek-ai/dsh-client-ui-theme": "workspace:^" + "@deepseek-ai/dsh-client-ui-theme": "workspace:*" } } diff --git a/apps/web/package.json b/apps/web/package.json index 35f2e07840..43077ef9b9 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -31,20 +31,20 @@ "license": "MIT", "devDependencies": { "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/dsh-client-modules": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-test-runtime": "workspace:^", - "@deepseek-ai/dsh-client-ui-deliverables": "workspace:^", - "@deepseek-ai/dsh-client-ui-dockkit": "workspace:^", - "@deepseek-ai/dsh-client-ui-primitives": "workspace:^", - "@deepseek-ai/dsh-client-ui-slots": "workspace:^", - "@deepseek-ai/dsh-client-web": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-experimental-agent-team": "workspace:^", - "@deepseek-ai/dsh-experimental-webworker-packer": "workspace:^", - "@deepseek-ai/dsh-experimental-webworker-runtime": "workspace:^", - "@deepseek-ai/dsh-remote-mock": "workspace:^", + "@deepseek-ai/dsh-client-modules": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-test-runtime": "workspace:*", + "@deepseek-ai/dsh-client-ui-deliverables": "workspace:*", + "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", + "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", + "@deepseek-ai/dsh-client-ui-slots": "workspace:*", + "@deepseek-ai/dsh-client-web": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", + "@deepseek-ai/dsh-experimental-webworker-packer": "workspace:*", + "@deepseek-ai/dsh-experimental-webworker-runtime": "workspace:*", + "@deepseek-ai/dsh-remote-mock": "workspace:*", "@types/node": "^22.0.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", @@ -59,11 +59,11 @@ "vite": "^6.0.0", "vitest": "^4.1.8", "ws": "8.21.0", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-workspace-changes": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-experimental-auto-review": "workspace:^", - "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:^", - "@deepseek-ai/dsh-experimental-voice-input-bundle": "workspace:^" + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-workspace-changes": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-experimental-auto-review": "workspace:*", + "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", + "@deepseek-ai/dsh-experimental-voice-input-bundle": "workspace:*" } } diff --git a/benchmarks/package.json b/benchmarks/package.json index 87f0000190..54374df851 100644 --- a/benchmarks/package.json +++ b/benchmarks/package.json @@ -7,34 +7,34 @@ "devDependencies": { "playwright": "^1.49.0", "@xterm/headless": "^6.0.0", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-llm-replay": "workspace:^", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-llm-replay": "workspace:*", "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-loop-testkit": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-api-session-controller": "workspace:^", - "@deepseek-ai/dsh-client-store": "workspace:^", - "@deepseek-ai/dsh-client-ui-chat": "workspace:^", - "@deepseek-ai/dsh-deque": "workspace:^", - "@deepseek-ai/dsh-lazy-require": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-sdk-client": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-stats": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-turn-outline": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^" + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-api-session-controller": "workspace:*", + "@deepseek-ai/dsh-client-store": "workspace:*", + "@deepseek-ai/dsh-client-ui-chat": "workspace:*", + "@deepseek-ai/dsh-deque": "workspace:*", + "@deepseek-ai/dsh-lazy-require": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-sdk-client": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-stats": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-turn-outline": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { "@deepseek-ai/cordis": "workspace:^" diff --git a/package.json b/package.json index a7acc3ab12..13e90f90e4 100644 --- a/package.json +++ b/package.json @@ -204,19 +204,19 @@ "postinstall": "node scripts/install-lefthook.mjs" }, "devDependencies": { - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-browser-use": "workspace:^", - "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:^", - "@deepseek-ai/dsh-experimental-browser-use-playwright-mcp": "workspace:^", - "@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp": "workspace:^", - "@deepseek-ai/dsh-experimental-browser-use-stagehand-native": "workspace:^", - "@deepseek-ai/dsh-computer-use": "workspace:^", - "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp": "workspace:^", - "@deepseek-ai/dsh-experimental-computer-use-cua-driver-native": "workspace:^", - "@deepseek-ai/dsh-llm-replay": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-tool-session-query": "workspace:^", - "@deepseek-ai/dsh-web-fetch-http": "workspace:^", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-browser-use": "workspace:*", + "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:*", + "@deepseek-ai/dsh-experimental-browser-use-playwright-mcp": "workspace:*", + "@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp": "workspace:*", + "@deepseek-ai/dsh-experimental-browser-use-stagehand-native": "workspace:*", + "@deepseek-ai/dsh-computer-use": "workspace:*", + "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp": "workspace:*", + "@deepseek-ai/dsh-experimental-computer-use-cua-driver-native": "workspace:*", + "@deepseek-ai/dsh-llm-replay": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-tool-session-query": "workspace:*", + "@deepseek-ai/dsh-web-fetch-http": "workspace:*", "@stylistic/eslint-plugin": "^5.10.0", "@testing-library/dom": "^10.4.1", "@testing-library/react": "^16.3.2", @@ -255,7 +255,7 @@ "typescript": "^6.0.3", "vite-tsconfig-paths": "^6.1.1", "vitest": "^4.1.8", - "@deepseek-ai/dsh-skill-office": "workspace:^", - "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:^" + "@deepseek-ai/dsh-skill-office": "workspace:*", + "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*" } } diff --git a/packages/test-support/session-snapshot/package.json b/packages/test-support/session-snapshot/package.json index 2566d132b6..04506e5abc 100644 --- a/packages/test-support/session-snapshot/package.json +++ b/packages/test-support/session-snapshot/package.json @@ -28,7 +28,7 @@ "license": "MIT", "dependencies": { "@agentclientprotocol/sdk": "1.4.0", - "@deepseek-ai/cordis-plugin-include": "workspace:*", + "@deepseek-ai/cordis-plugin-include": "workspace:^", "@deepseek-ai/dsh-llm-replay": "workspace:*", "@deepseek-ai/dsh-loader-smoke": "workspace:*", "@deepseek-ai/dsh-session-format": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f78c479095..65019ba4a3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,49 +23,49 @@ importers: .: devDependencies: '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:packages/core/agent '@deepseek-ai/dsh-browser-use': - specifier: workspace:^ + specifier: workspace:* version: link:packages/browser-use/browser-use '@deepseek-ai/dsh-computer-use': - specifier: workspace:^ + specifier: workspace:* version: link:packages/computer-use/computer-use '@deepseek-ai/dsh-experimental-browser-use-chrome-devtools-mcp': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/browser-use-chrome-devtools-mcp '@deepseek-ai/dsh-experimental-browser-use-playwright-mcp': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/browser-use-playwright-mcp '@deepseek-ai/dsh-experimental-browser-use-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/browser-use-runtime '@deepseek-ai/dsh-experimental-browser-use-stagehand-native': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/browser-use-stagehand-native '@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/computer-use-cua-driver-mcp '@deepseek-ai/dsh-experimental-computer-use-cua-driver-native': - specifier: workspace:^ + specifier: workspace:* version: link:packages/experimental/computer-use-cua-driver-native '@deepseek-ai/dsh-llm-replay': - specifier: workspace:^ + specifier: workspace:* version: link:packages/test-support/llm-replay '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:packages/mcp/mcp-client '@deepseek-ai/dsh-skill-office': - specifier: workspace:^ + specifier: workspace:* version: link:packages/skill/skill-office '@deepseek-ai/dsh-tool-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:packages/session-query/tool-session-query '@deepseek-ai/dsh-tool-workspace-dependencies': - specifier: workspace:^ + specifier: workspace:* version: link:packages/skill/tool-workspace-dependencies '@deepseek-ai/dsh-web-fetch-http': - specifier: workspace:^ + specifier: workspace:* version: link:packages/web/web-fetch-http '@stylistic/eslint-plugin': specifier: ^5.10.0 @@ -197,220 +197,220 @@ importers: specifier: workspace:^ version: link:../../vendor/timer '@deepseek-ai/dsh-acp-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/acp-app '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/agent-instructions '@deepseek-ai/dsh-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/preset/agent-preset '@deepseek-ai/dsh-agent-tool-presentation': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent-tool-presentation '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/app-boot '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/atomic-write '@deepseek-ai/dsh-base': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/base '@deepseek-ai/dsh-client-ui-agent-preset': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-agent-preset '@deepseek-ai/dsh-client-ui-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/extensions/ui-cordis '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/cmdline '@deepseek-ai/dsh-command-compact': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/command-compact '@deepseek-ai/dsh-command-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/command-goal '@deepseek-ai/dsh-compaction-basic': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction-basic '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction-tool-result-pruner '@deepseek-ai/dsh-cordis-client-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/extensions/cordis-client-runner '@deepseek-ai/dsh-experimental-agent-team-profile': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/agent-team-profile '@deepseek-ai/dsh-experimental-voice-input-bundle': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/voice-input-bundle '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-local '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/goal '@deepseek-ai/dsh-goal-round-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/goal-round-driver '@deepseek-ai/dsh-headless': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/headless '@deepseek-ai/dsh-hmr': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/hmr '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/home-paths '@deepseek-ai/dsh-hooks-claude-code': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/hooks/hooks-claude-code '@deepseek-ai/dsh-hooks-codex': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/hooks/hooks-codex '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/http-proxy '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/jobs-local '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/launch-environment '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/mcp/mcp-client '@deepseek-ai/dsh-mcp-resources': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/mcp/mcp-resources '@deepseek-ai/dsh-persona': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/preset/persona '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/plan/plan-mode '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/plugin-manager '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/pwsh-local '@deepseek-ai/dsh-pwsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/pwsh-sandbox '@deepseek-ai/dsh-schedule': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/schedule/schedule '@deepseek-ai/dsh-sdk-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/sdk-app '@deepseek-ai/dsh-sdk-minimal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/sdk-minimal '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-projection '@deepseek-ai/dsh-session-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/session-reference '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill-filesystem '@deepseek-ai/dsh-skill-office': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill-office '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/terminal/terminal-bash '@deepseek-ai/dsh-time-context': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/time-context '@deepseek-ai/dsh-tmux-context': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/tmux-context '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/token-meter '@deepseek-ai/dsh-tool-ask-user': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/tool-ask-user '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-bash '@deepseek-ai/dsh-tool-bash-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-bash-persistent '@deepseek-ai/dsh-tool-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/extensions/tool-cordis '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-fs '@deepseek-ai/dsh-tool-fs-search': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-fs-search '@deepseek-ai/dsh-tool-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/tool-goal '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/tool-jobs '@deepseek-ai/dsh-tool-present': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-pwsh '@deepseek-ai/dsh-tool-pwsh-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-pwsh-persistent '@deepseek-ai/dsh-tool-ralph': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/tool-ralph '@deepseek-ai/dsh-tool-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/tool-skill '@deepseek-ai/dsh-tool-str-replace-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-str-replace-editor '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/tool-subagent '@deepseek-ai/dsh-tool-subagent-control': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/tool-subagent-control '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/todo/tool-todo '@deepseek-ai/dsh-tool-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/tool-web '@deepseek-ai/dsh-tool-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/tool-workflow '@deepseek-ai/dsh-tool-workspace-dependencies': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/tool-workspace-dependencies '@deepseek-ai/dsh-web-app': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/web-app '@deepseek-ai/dsh-webhook': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/webhook/webhook '@deepseek-ai/dsh-webhook-github': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/webhook/webhook-github '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/workflow-ptc '@deepseek-ai/schemastery': specifier: link:../../vendor/schemastery @@ -429,118 +429,118 @@ importers: specifier: 1.4.0 version: 1.4.0(zod@4.4.3) '@deepseek-ai/dsh-acp': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/acp/acp '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/agent-loop-testkit '@deepseek-ai/dsh-attachment-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/attachment/attachment-local '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/bash-local '@deepseek-ai/dsh-credentials-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/credentials-local '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-experimental-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/agent-team '@deepseek-ai/dsh-experimental-ptc-runtime-python': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/ptc-runtime-python '@deepseek-ai/dsh-experimental-tool-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/tool-agent-team '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-observation-policy '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-sandbox '@deepseek-ai/dsh-host-frontend-static': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/host/frontend-static '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/host/webserver '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm-deepseek '@deepseek-ai/dsh-llm-mock-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/llm-mock-server '@deepseek-ai/dsh-llm-pi-ai': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm-pi-ai '@deepseek-ai/dsh-llm-replay': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/llm-replay '@deepseek-ai/dsh-loader-smoke': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/loader-smoke '@deepseek-ai/dsh-plugin-package-inventory-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/plugin-package-inventory-deepseek '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sandbox/sandbox-policy '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-checkpoint-policy '@deepseek-ai/dsh-session-log-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-log-deepseek '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-persistence-jsonl '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session-query/session-query '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/settings/settings '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/shell-env '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-fork-in-process '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-spawn-in-process '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/system-prompt '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/tools '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/user-approval '@types/js-yaml': specifier: ^4.0.9 @@ -564,7 +564,7 @@ importers: specifier: workspace:^ version: link:../../vendor/cordis '@deepseek-ai/dsh-api-gateway': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/api/gateway electron-updater: specifier: ^6.8.9 @@ -577,25 +577,25 @@ importers: version: 8.21.0 devDependencies: '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/app-boot '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-primitives '@deepseek-ai/dsh-client-ui-settings-general': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-settings-general '@deepseek-ai/dsh-client-ui-sidebar-browser': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-sidebar-browser '@deepseek-ai/dsh-client-ui-theme': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-theme '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/deepseek-account '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/home-paths '@deepseek-ai/node-addon-system': specifier: workspace:^ @@ -667,34 +667,34 @@ importers: specifier: workspace:^ version: link:../../vendor/cordis '@deepseek-ai/dsh': - specifier: workspace:^ + specifier: workspace:* version: link:../cli '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/app-boot '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/connection '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/deepseek-account '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/home-paths '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/host/webserver '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/jobs '@deepseek-ai/dsh-skill-office': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill-office '@deepseek-ai/dsh-tool-workspace-dependencies': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/tool-workspace-dependencies apps/web: @@ -703,64 +703,64 @@ importers: specifier: workspace:^ version: link:../../vendor/group '@deepseek-ai/dsh-client-modules': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/modules '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/store '@deepseek-ai/dsh-client-test-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/client-runtime '@deepseek-ai/dsh-client-ui-deliverables': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-deliverables '@deepseek-ai/dsh-client-ui-dockkit': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-dockkit '@deepseek-ai/dsh-client-ui-primitives': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-primitives '@deepseek-ai/dsh-client-ui-slots': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/ui-slots '@deepseek-ai/dsh-client-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/web '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/cmdline '@deepseek-ai/dsh-experimental-agent-team': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/agent-team '@deepseek-ai/dsh-experimental-auto-review': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/auto-review '@deepseek-ai/dsh-experimental-speech-to-text': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/speech-to-text '@deepseek-ai/dsh-experimental-voice-input-bundle': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/voice-input-bundle '@deepseek-ai/dsh-experimental-webworker-packer': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/webworker-packer '@deepseek-ai/dsh-experimental-webworker-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/experimental/webworker-runtime '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/launch-environment '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/pwsh-local '@deepseek-ai/dsh-remote-mock': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/test-support/remote-mock '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subprocess/subprocess-local '@deepseek-ai/dsh-workspace-changes': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/deliverables/workspace-changes '@types/node': specifier: ^22.0.0 @@ -811,85 +811,85 @@ importers: specifier: workspace:^ version: link:../vendor/cordis '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/core/agent '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/core/agent-loop '@deepseek-ai/dsh-agent-loop-testkit': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/test-support/agent-loop-testkit '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/preset/agent-preset-registry '@deepseek-ai/dsh-api-session-controller': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/api/session-controller '@deepseek-ai/dsh-client-store': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/client/store '@deepseek-ai/dsh-client-ui-chat': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/client/ui-chat '@deepseek-ai/dsh-deque': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/util/deque '@deepseek-ai/dsh-lazy-require': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/util/lazy-require '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/llm/llm '@deepseek-ai/dsh-llm-replay': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/test-support/llm-replay '@deepseek-ai/dsh-sdk-client': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/sdk/client '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/core/session '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session-query/session-query '@deepseek-ai/dsh-session-stats': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-stats '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-title '@deepseek-ai/dsh-session-turn-outline': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/session/session-turn-outline '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/subagent/subagent '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/subprocess/subprocess '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/terminal/terminal '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/llm/token-meter '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/typert/protocol '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../packages/util/values '@xterm/headless': specifier: ^6.0.0 @@ -12681,7 +12681,7 @@ importers: specifier: 1.4.0 version: 1.4.0(zod@4.4.3) '@deepseek-ai/cordis-plugin-include': - specifier: workspace:* + specifier: workspace:^ version: link:../../../vendor/include '@deepseek-ai/dsh-llm-replay': specifier: workspace:* @@ -13469,415 +13469,415 @@ importers: specifier: link:../../vendor/cosmokit version: link:../../vendor/cosmokit '@deepseek-ai/dsh': - specifier: workspace:^ + specifier: workspace:* version: link:../../apps/cli '@deepseek-ai/dsh-acp': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/acp/acp '@deepseek-ai/dsh-agent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent '@deepseek-ai/dsh-agent-instructions': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/agent-instructions '@deepseek-ai/dsh-agent-loop': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent-loop '@deepseek-ai/dsh-agent-preset-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/preset/agent-preset-registry '@deepseek-ai/dsh-agent-tool-presentation': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/agent-tool-presentation '@deepseek-ai/dsh-anonymous-user-id': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/identity/anonymous-user-id '@deepseek-ai/dsh-app-boot': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/app-boot '@deepseek-ai/dsh-atomic-write': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/atomic-write '@deepseek-ai/dsh-attachment': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/attachment/attachment '@deepseek-ai/dsh-authorization': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/authorization '@deepseek-ai/dsh-base': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/bundle/base '@deepseek-ai/dsh-bash-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/bash-local '@deepseek-ai/dsh-brand': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/brand '@deepseek-ai/dsh-client-connection': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/client/connection '@deepseek-ai/dsh-cmdline': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/cmdline '@deepseek-ai/dsh-command-compact': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/command-compact '@deepseek-ai/dsh-command-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/feedback/command-feedback '@deepseek-ai/dsh-command-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/command-goal '@deepseek-ai/dsh-commands': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/commands '@deepseek-ai/dsh-compaction': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction '@deepseek-ai/dsh-compaction-basic': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction-basic '@deepseek-ai/dsh-compaction-image-offload': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction-image-offload '@deepseek-ai/dsh-compaction-tool-result-pruner': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/compaction/compaction-tool-result-pruner '@deepseek-ai/dsh-config-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/config-editor '@deepseek-ai/dsh-cordis-host-runner': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/extensions/cordis-host-runner '@deepseek-ai/dsh-credentials': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/credentials '@deepseek-ai/dsh-deepseek-account': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/credentials/deepseek-account '@deepseek-ai/dsh-deepseek-llm-api-extensions': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/deepseek-llm-api-extensions '@deepseek-ai/dsh-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs '@deepseek-ai/dsh-fs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-local '@deepseek-ai/dsh-fs-observation-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-observation-policy '@deepseek-ai/dsh-fs-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/fs-sandbox '@deepseek-ai/dsh-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/goal '@deepseek-ai/dsh-goal-round-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/goal-round-driver '@deepseek-ai/dsh-home-paths': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/home-paths '@deepseek-ai/dsh-hook-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/hooks/hook-protocol '@deepseek-ai/dsh-hooks-claude-code': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/hooks/hooks-claude-code '@deepseek-ai/dsh-hooks-codex': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/hooks/hooks-codex '@deepseek-ai/dsh-host-plugin-inventory': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/host/plugin-inventory '@deepseek-ai/dsh-host-webserver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/host/webserver '@deepseek-ai/dsh-http-proxy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/http-proxy '@deepseek-ai/dsh-invariants': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/runtime-diagnostics/invariants '@deepseek-ai/dsh-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/jobs '@deepseek-ai/dsh-jobs-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/jobs-local '@deepseek-ai/dsh-launch-environment': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/launch-environment '@deepseek-ai/dsh-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm '@deepseek-ai/dsh-llm-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm-deepseek '@deepseek-ai/dsh-llm-pi-ai': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm-pi-ai '@deepseek-ai/dsh-llm-retry': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/llm-retry '@deepseek-ai/dsh-mcp-client': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/mcp/mcp-client '@deepseek-ai/dsh-message-feedback': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/feedback/message-feedback '@deepseek-ai/dsh-output-retention': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/output-retention '@deepseek-ai/dsh-permission-presets': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/permission-presets '@deepseek-ai/dsh-persona': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/preset/persona '@deepseek-ai/dsh-plan-mode': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/plan/plan-mode '@deepseek-ai/dsh-plugin-manager': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/boot/plugin-manager '@deepseek-ai/dsh-plugin-package-inventory-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/plugin-package-inventory-deepseek '@deepseek-ai/dsh-ptc-runtime': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/ptc-runtime/ptc-runtime '@deepseek-ai/dsh-ptc-runtime-node': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/ptc-runtime/ptc-runtime-node '@deepseek-ai/dsh-pwsh-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/pwsh-local '@deepseek-ai/dsh-repeat-tool-reminder': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/guard/repeat-tool-reminder '@deepseek-ai/dsh-sandbox': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sandbox/sandbox '@deepseek-ai/dsh-sandbox-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sandbox/sandbox-local '@deepseek-ai/dsh-sandbox-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sandbox/sandbox-policy '@deepseek-ai/dsh-scope': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/scope '@deepseek-ai/dsh-sdk-jsonrpc-server': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sdk/server '@deepseek-ai/dsh-sdk-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/sdk/protocol '@deepseek-ai/dsh-session': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/session '@deepseek-ai/dsh-session-checkpoint-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-checkpoint-policy '@deepseek-ai/dsh-session-log-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-log-deepseek '@deepseek-ai/dsh-session-persistence': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-persistence '@deepseek-ai/dsh-session-persistence-jsonl': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-persistence-jsonl '@deepseek-ai/dsh-session-projection': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-projection '@deepseek-ai/dsh-session-query': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session-query/session-query '@deepseek-ai/dsh-session-query-sqlite': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session-query/session-query-sqlite '@deepseek-ai/dsh-session-reference': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/context/session-reference '@deepseek-ai/dsh-session-telemetry': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-telemetry '@deepseek-ai/dsh-session-title': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-title '@deepseek-ai/dsh-session-title-llm': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/session/session-title-llm '@deepseek-ai/dsh-settings': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/settings/settings '@deepseek-ai/dsh-shell': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/shell '@deepseek-ai/dsh-shell-env': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/shell-env '@deepseek-ai/dsh-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill '@deepseek-ai/dsh-skill-filesystem': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill-filesystem '@deepseek-ai/dsh-skill-office': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/skill-office '@deepseek-ai/dsh-spill': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/spill/spill '@deepseek-ai/dsh-storage': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/storage/storage '@deepseek-ai/dsh-storage-domain': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/storage/storage-domain '@deepseek-ai/dsh-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent '@deepseek-ai/dsh-subagent-acp': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-acp '@deepseek-ai/dsh-subagent-fork-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-fork-in-process '@deepseek-ai/dsh-subagent-in-process-driver': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-in-process-driver '@deepseek-ai/dsh-subagent-spawn-in-process': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/subagent-spawn-in-process '@deepseek-ai/dsh-subprocess': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subprocess/subprocess '@deepseek-ai/dsh-subprocess-local': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subprocess/subprocess-local '@deepseek-ai/dsh-system-prompt': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/system-prompt '@deepseek-ai/dsh-terminal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/terminal/terminal '@deepseek-ai/dsh-terminal-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/terminal/terminal-bash '@deepseek-ai/dsh-timeout': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/timeout '@deepseek-ai/dsh-token-meter': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/llm/token-meter '@deepseek-ai/dsh-tool-ask-user': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/tool-ask-user '@deepseek-ai/dsh-tool-bash': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-bash '@deepseek-ai/dsh-tool-bash-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-bash-persistent '@deepseek-ai/dsh-tool-call-timeout-policy': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/guard/timeout-policy '@deepseek-ai/dsh-tool-cordis': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/extensions/tool-cordis '@deepseek-ai/dsh-tool-fs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-fs '@deepseek-ai/dsh-tool-fs-search': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-fs-search '@deepseek-ai/dsh-tool-goal': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/goal/tool-goal '@deepseek-ai/dsh-tool-jobs': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/jobs/tool-jobs '@deepseek-ai/dsh-tool-present': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/deliverables/tool-present '@deepseek-ai/dsh-tool-pwsh': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-pwsh '@deepseek-ai/dsh-tool-pwsh-persistent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/shell/tool-pwsh-persistent '@deepseek-ai/dsh-tool-ralph': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/tool-ralph '@deepseek-ai/dsh-tool-skill': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/tool-skill '@deepseek-ai/dsh-tool-str-replace-editor': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/fs/tool-str-replace-editor '@deepseek-ai/dsh-tool-subagent': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/tool-subagent '@deepseek-ai/dsh-tool-subagent-control': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/subagent/tool-subagent-control '@deepseek-ai/dsh-tool-todo': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/todo/tool-todo '@deepseek-ai/dsh-tool-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/tool-web '@deepseek-ai/dsh-tool-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/tool-workflow '@deepseek-ai/dsh-tool-workspace-dependencies': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/skill/tool-workspace-dependencies '@deepseek-ai/dsh-tools': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/core/tools '@deepseek-ai/dsh-typert-protocol': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/typert/protocol '@deepseek-ai/dsh-typert-registry': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/typert/registry '@deepseek-ai/dsh-user-approval': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/user-approval '@deepseek-ai/dsh-user-questions': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/interaction/user-questions '@deepseek-ai/dsh-util-time': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/time '@deepseek-ai/dsh-util-values': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/util/values '@deepseek-ai/dsh-web': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/web '@deepseek-ai/dsh-web-fetch-http': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/web-fetch-http '@deepseek-ai/dsh-web-search-deepseek': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/web-search-deepseek '@deepseek-ai/dsh-web-search-exa': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/web-search-exa '@deepseek-ai/dsh-web-search-perplexity': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/web/web-search-perplexity '@deepseek-ai/dsh-workflow': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/workflow '@deepseek-ai/dsh-workflow-ptc': - specifier: workspace:^ + specifier: workspace:* version: link:../../packages/workflow/workflow-ptc '@deepseek-ai/schemastery': specifier: link:../../vendor/schemastery diff --git a/python/sdk-runtime/package.json b/python/sdk-runtime/package.json index 1dbf19890a..c37ab005d1 100644 --- a/python/sdk-runtime/package.json +++ b/python/sdk-runtime/package.json @@ -11,145 +11,145 @@ "@deepseek-ai/cordis-plugin-loader": "workspace:^", "@deepseek-ai/cordis-plugin-timer": "workspace:^", "@deepseek-ai/cosmokit": "workspace:^", - "@deepseek-ai/dsh": "workspace:^", - "@deepseek-ai/dsh-acp": "workspace:^", - "@deepseek-ai/dsh-agent": "workspace:^", - "@deepseek-ai/dsh-agent-instructions": "workspace:^", - "@deepseek-ai/dsh-agent-loop": "workspace:^", - "@deepseek-ai/dsh-agent-preset-registry": "workspace:^", - "@deepseek-ai/dsh-agent-tool-presentation": "workspace:^", - "@deepseek-ai/dsh-anonymous-user-id": "workspace:^", - "@deepseek-ai/dsh-app-boot": "workspace:^", - "@deepseek-ai/dsh-atomic-write": "workspace:^", - "@deepseek-ai/dsh-attachment": "workspace:^", - "@deepseek-ai/dsh-authorization": "workspace:^", - "@deepseek-ai/dsh-base": "workspace:^", - "@deepseek-ai/dsh-bash-local": "workspace:^", - "@deepseek-ai/dsh-brand": "workspace:^", - "@deepseek-ai/dsh-client-connection": "workspace:^", - "@deepseek-ai/dsh-cmdline": "workspace:^", - "@deepseek-ai/dsh-command-feedback": "workspace:^", - "@deepseek-ai/dsh-message-feedback": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-command-compact": "workspace:^", - "@deepseek-ai/dsh-command-goal": "workspace:^", - "@deepseek-ai/dsh-commands": "workspace:^", - "@deepseek-ai/dsh-compaction": "workspace:^", - "@deepseek-ai/dsh-compaction-basic": "workspace:^", - "@deepseek-ai/dsh-compaction-image-offload": "workspace:^", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:^", - "@deepseek-ai/dsh-config-editor": "workspace:^", - "@deepseek-ai/dsh-cordis-host-runner": "workspace:^", - "@deepseek-ai/dsh-credentials": "workspace:^", - "@deepseek-ai/dsh-deepseek-account": "workspace:^", - "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:^", - "@deepseek-ai/dsh-fs": "workspace:^", - "@deepseek-ai/dsh-fs-local": "workspace:^", - "@deepseek-ai/dsh-fs-observation-policy": "workspace:^", - "@deepseek-ai/dsh-fs-sandbox": "workspace:^", - "@deepseek-ai/dsh-goal": "workspace:^", - "@deepseek-ai/dsh-goal-round-driver": "workspace:^", - "@deepseek-ai/dsh-home-paths": "workspace:^", - "@deepseek-ai/dsh-hook-protocol": "workspace:^", - "@deepseek-ai/dsh-hooks-claude-code": "workspace:^", - "@deepseek-ai/dsh-hooks-codex": "workspace:^", - "@deepseek-ai/dsh-host-plugin-inventory": "workspace:^", - "@deepseek-ai/dsh-host-webserver": "workspace:^", - "@deepseek-ai/dsh-http-proxy": "workspace:^", - "@deepseek-ai/dsh-invariants": "workspace:^", - "@deepseek-ai/dsh-jobs": "workspace:^", - "@deepseek-ai/dsh-jobs-local": "workspace:^", - "@deepseek-ai/dsh-launch-environment": "workspace:^", - "@deepseek-ai/dsh-llm": "workspace:^", - "@deepseek-ai/dsh-llm-deepseek": "workspace:^", - "@deepseek-ai/dsh-llm-pi-ai": "workspace:^", - "@deepseek-ai/dsh-llm-retry": "workspace:^", - "@deepseek-ai/dsh-mcp-client": "workspace:^", - "@deepseek-ai/dsh-output-retention": "workspace:^", - "@deepseek-ai/dsh-permission-presets": "workspace:^", - "@deepseek-ai/dsh-persona": "workspace:^", - "@deepseek-ai/dsh-plan-mode": "workspace:^", - "@deepseek-ai/dsh-plugin-manager": "workspace:^", - "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime": "workspace:^", - "@deepseek-ai/dsh-ptc-runtime-node": "workspace:^", - "@deepseek-ai/dsh-pwsh-local": "workspace:^", - "@deepseek-ai/dsh-repeat-tool-reminder": "workspace:^", - "@deepseek-ai/dsh-sandbox": "workspace:^", - "@deepseek-ai/dsh-sandbox-local": "workspace:^", - "@deepseek-ai/dsh-sandbox-policy": "workspace:^", - "@deepseek-ai/dsh-scope": "workspace:^", - "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:^", - "@deepseek-ai/dsh-sdk-protocol": "workspace:^", - "@deepseek-ai/dsh-session": "workspace:^", - "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:^", - "@deepseek-ai/dsh-session-log-deepseek": "workspace:^", - "@deepseek-ai/dsh-session-persistence": "workspace:^", - "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:^", - "@deepseek-ai/dsh-session-projection": "workspace:^", - "@deepseek-ai/dsh-session-query": "workspace:^", - "@deepseek-ai/dsh-session-query-sqlite": "workspace:^", - "@deepseek-ai/dsh-session-reference": "workspace:^", - "@deepseek-ai/dsh-session-telemetry": "workspace:^", - "@deepseek-ai/dsh-session-title": "workspace:^", - "@deepseek-ai/dsh-session-title-llm": "workspace:^", - "@deepseek-ai/dsh-settings": "workspace:^", - "@deepseek-ai/dsh-shell": "workspace:^", - "@deepseek-ai/dsh-shell-env": "workspace:^", - "@deepseek-ai/dsh-skill": "workspace:^", - "@deepseek-ai/dsh-skill-filesystem": "workspace:^", - "@deepseek-ai/dsh-skill-office": "workspace:^", - "@deepseek-ai/dsh-storage": "workspace:^", - "@deepseek-ai/dsh-storage-domain": "workspace:^", - "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:^", - "@deepseek-ai/dsh-spill": "workspace:^", - "@deepseek-ai/dsh-subagent": "workspace:^", - "@deepseek-ai/dsh-subagent-acp": "workspace:^", - "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:^", - "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:^", - "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:^", - "@deepseek-ai/dsh-subprocess": "workspace:^", - "@deepseek-ai/dsh-subprocess-local": "workspace:^", - "@deepseek-ai/dsh-system-prompt": "workspace:^", - "@deepseek-ai/dsh-terminal": "workspace:^", - "@deepseek-ai/dsh-terminal-bash": "workspace:^", - "@deepseek-ai/dsh-timeout": "workspace:^", - "@deepseek-ai/dsh-token-meter": "workspace:^", - "@deepseek-ai/dsh-tool-ask-user": "workspace:^", - "@deepseek-ai/dsh-tool-bash": "workspace:^", - "@deepseek-ai/dsh-tool-bash-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:^", - "@deepseek-ai/dsh-tool-cordis": "workspace:^", - "@deepseek-ai/dsh-tool-fs": "workspace:^", - "@deepseek-ai/dsh-tool-fs-search": "workspace:^", - "@deepseek-ai/dsh-tool-goal": "workspace:^", - "@deepseek-ai/dsh-tool-jobs": "workspace:^", - "@deepseek-ai/dsh-tool-present": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh": "workspace:^", - "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:^", - "@deepseek-ai/dsh-tool-ralph": "workspace:^", - "@deepseek-ai/dsh-tool-skill": "workspace:^", - "@deepseek-ai/dsh-tool-str-replace-editor": "workspace:^", - "@deepseek-ai/dsh-tool-subagent": "workspace:^", - "@deepseek-ai/dsh-tool-subagent-control": "workspace:^", - "@deepseek-ai/dsh-tool-todo": "workspace:^", - "@deepseek-ai/dsh-tool-web": "workspace:^", - "@deepseek-ai/dsh-tool-workflow": "workspace:^", - "@deepseek-ai/dsh-tools": "workspace:^", - "@deepseek-ai/dsh-typert-protocol": "workspace:^", - "@deepseek-ai/dsh-typert-registry": "workspace:^", - "@deepseek-ai/dsh-user-approval": "workspace:^", - "@deepseek-ai/dsh-user-questions": "workspace:^", - "@deepseek-ai/dsh-util-time": "workspace:^", - "@deepseek-ai/dsh-util-values": "workspace:^", - "@deepseek-ai/dsh-web": "workspace:^", - "@deepseek-ai/dsh-web-fetch-http": "workspace:^", - "@deepseek-ai/dsh-web-search-deepseek": "workspace:^", - "@deepseek-ai/dsh-web-search-exa": "workspace:^", - "@deepseek-ai/dsh-web-search-perplexity": "workspace:^", - "@deepseek-ai/dsh-workflow": "workspace:^", - "@deepseek-ai/dsh-workflow-ptc": "workspace:^", + "@deepseek-ai/dsh": "workspace:*", + "@deepseek-ai/dsh-acp": "workspace:*", + "@deepseek-ai/dsh-agent": "workspace:*", + "@deepseek-ai/dsh-agent-instructions": "workspace:*", + "@deepseek-ai/dsh-agent-loop": "workspace:*", + "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", + "@deepseek-ai/dsh-agent-tool-presentation": "workspace:*", + "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", + "@deepseek-ai/dsh-app-boot": "workspace:*", + "@deepseek-ai/dsh-atomic-write": "workspace:*", + "@deepseek-ai/dsh-attachment": "workspace:*", + "@deepseek-ai/dsh-authorization": "workspace:*", + "@deepseek-ai/dsh-base": "workspace:*", + "@deepseek-ai/dsh-bash-local": "workspace:*", + "@deepseek-ai/dsh-brand": "workspace:*", + "@deepseek-ai/dsh-client-connection": "workspace:*", + "@deepseek-ai/dsh-cmdline": "workspace:*", + "@deepseek-ai/dsh-command-feedback": "workspace:*", + "@deepseek-ai/dsh-message-feedback": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-command-compact": "workspace:*", + "@deepseek-ai/dsh-command-goal": "workspace:*", + "@deepseek-ai/dsh-commands": "workspace:*", + "@deepseek-ai/dsh-compaction": "workspace:*", + "@deepseek-ai/dsh-compaction-basic": "workspace:*", + "@deepseek-ai/dsh-compaction-image-offload": "workspace:*", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", + "@deepseek-ai/dsh-config-editor": "workspace:*", + "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", + "@deepseek-ai/dsh-credentials": "workspace:*", + "@deepseek-ai/dsh-deepseek-account": "workspace:*", + "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", + "@deepseek-ai/dsh-fs": "workspace:*", + "@deepseek-ai/dsh-fs-local": "workspace:*", + "@deepseek-ai/dsh-fs-observation-policy": "workspace:*", + "@deepseek-ai/dsh-fs-sandbox": "workspace:*", + "@deepseek-ai/dsh-goal": "workspace:*", + "@deepseek-ai/dsh-goal-round-driver": "workspace:*", + "@deepseek-ai/dsh-home-paths": "workspace:*", + "@deepseek-ai/dsh-hook-protocol": "workspace:*", + "@deepseek-ai/dsh-hooks-claude-code": "workspace:*", + "@deepseek-ai/dsh-hooks-codex": "workspace:*", + "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", + "@deepseek-ai/dsh-host-webserver": "workspace:*", + "@deepseek-ai/dsh-http-proxy": "workspace:*", + "@deepseek-ai/dsh-invariants": "workspace:*", + "@deepseek-ai/dsh-jobs": "workspace:*", + "@deepseek-ai/dsh-jobs-local": "workspace:*", + "@deepseek-ai/dsh-launch-environment": "workspace:*", + "@deepseek-ai/dsh-llm": "workspace:*", + "@deepseek-ai/dsh-llm-deepseek": "workspace:*", + "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", + "@deepseek-ai/dsh-llm-retry": "workspace:*", + "@deepseek-ai/dsh-mcp-client": "workspace:*", + "@deepseek-ai/dsh-output-retention": "workspace:*", + "@deepseek-ai/dsh-permission-presets": "workspace:*", + "@deepseek-ai/dsh-persona": "workspace:*", + "@deepseek-ai/dsh-plan-mode": "workspace:*", + "@deepseek-ai/dsh-plugin-manager": "workspace:*", + "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime": "workspace:*", + "@deepseek-ai/dsh-ptc-runtime-node": "workspace:*", + "@deepseek-ai/dsh-pwsh-local": "workspace:*", + "@deepseek-ai/dsh-repeat-tool-reminder": "workspace:*", + "@deepseek-ai/dsh-sandbox": "workspace:*", + "@deepseek-ai/dsh-sandbox-local": "workspace:*", + "@deepseek-ai/dsh-sandbox-policy": "workspace:*", + "@deepseek-ai/dsh-scope": "workspace:*", + "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:*", + "@deepseek-ai/dsh-sdk-protocol": "workspace:*", + "@deepseek-ai/dsh-session": "workspace:*", + "@deepseek-ai/dsh-session-checkpoint-policy": "workspace:*", + "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", + "@deepseek-ai/dsh-session-persistence": "workspace:*", + "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", + "@deepseek-ai/dsh-session-projection": "workspace:*", + "@deepseek-ai/dsh-session-query": "workspace:*", + "@deepseek-ai/dsh-session-query-sqlite": "workspace:*", + "@deepseek-ai/dsh-session-reference": "workspace:*", + "@deepseek-ai/dsh-session-telemetry": "workspace:*", + "@deepseek-ai/dsh-session-title": "workspace:*", + "@deepseek-ai/dsh-session-title-llm": "workspace:*", + "@deepseek-ai/dsh-settings": "workspace:*", + "@deepseek-ai/dsh-shell": "workspace:*", + "@deepseek-ai/dsh-shell-env": "workspace:*", + "@deepseek-ai/dsh-skill": "workspace:*", + "@deepseek-ai/dsh-skill-filesystem": "workspace:*", + "@deepseek-ai/dsh-skill-office": "workspace:*", + "@deepseek-ai/dsh-storage": "workspace:*", + "@deepseek-ai/dsh-storage-domain": "workspace:*", + "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*", + "@deepseek-ai/dsh-spill": "workspace:*", + "@deepseek-ai/dsh-subagent": "workspace:*", + "@deepseek-ai/dsh-subagent-acp": "workspace:*", + "@deepseek-ai/dsh-subagent-fork-in-process": "workspace:*", + "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", + "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", + "@deepseek-ai/dsh-subprocess": "workspace:*", + "@deepseek-ai/dsh-subprocess-local": "workspace:*", + "@deepseek-ai/dsh-system-prompt": "workspace:*", + "@deepseek-ai/dsh-terminal": "workspace:*", + "@deepseek-ai/dsh-terminal-bash": "workspace:*", + "@deepseek-ai/dsh-timeout": "workspace:*", + "@deepseek-ai/dsh-token-meter": "workspace:*", + "@deepseek-ai/dsh-tool-ask-user": "workspace:*", + "@deepseek-ai/dsh-tool-bash": "workspace:*", + "@deepseek-ai/dsh-tool-bash-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-call-timeout-policy": "workspace:*", + "@deepseek-ai/dsh-tool-cordis": "workspace:*", + "@deepseek-ai/dsh-tool-fs": "workspace:*", + "@deepseek-ai/dsh-tool-fs-search": "workspace:*", + "@deepseek-ai/dsh-tool-goal": "workspace:*", + "@deepseek-ai/dsh-tool-jobs": "workspace:*", + "@deepseek-ai/dsh-tool-present": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh": "workspace:*", + "@deepseek-ai/dsh-tool-pwsh-persistent": "workspace:*", + "@deepseek-ai/dsh-tool-ralph": "workspace:*", + "@deepseek-ai/dsh-tool-skill": "workspace:*", + "@deepseek-ai/dsh-tool-str-replace-editor": "workspace:*", + "@deepseek-ai/dsh-tool-subagent": "workspace:*", + "@deepseek-ai/dsh-tool-subagent-control": "workspace:*", + "@deepseek-ai/dsh-tool-todo": "workspace:*", + "@deepseek-ai/dsh-tool-web": "workspace:*", + "@deepseek-ai/dsh-tool-workflow": "workspace:*", + "@deepseek-ai/dsh-tools": "workspace:*", + "@deepseek-ai/dsh-typert-protocol": "workspace:*", + "@deepseek-ai/dsh-typert-registry": "workspace:*", + "@deepseek-ai/dsh-user-approval": "workspace:*", + "@deepseek-ai/dsh-user-questions": "workspace:*", + "@deepseek-ai/dsh-util-time": "workspace:*", + "@deepseek-ai/dsh-util-values": "workspace:*", + "@deepseek-ai/dsh-web": "workspace:*", + "@deepseek-ai/dsh-web-fetch-http": "workspace:*", + "@deepseek-ai/dsh-web-search-deepseek": "workspace:*", + "@deepseek-ai/dsh-web-search-exa": "workspace:*", + "@deepseek-ai/dsh-web-search-perplexity": "workspace:*", + "@deepseek-ai/dsh-workflow": "workspace:*", + "@deepseek-ai/dsh-workflow-ptc": "workspace:*", "@deepseek-ai/schemastery": "workspace:^" } } From 4e6028a604006d5f885c12a673164461991bff92 Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 20:11:45 +0800 Subject: [PATCH 23/35] build: use tilde ranges for vendor and native workspaces --- ...2026-08-10-npm-release-sequences.i18n.yaml | 4 +- .../2026-08-10-npm-release-sequences.md | 6 +- .../2026-08-10-npm-release-sequences.zh.md | 6 +- ...08-26-published-dependency-faces.i18n.yaml | 4 +- .../2026-08-26-published-dependency-faces.md | 2 +- ...026-08-26-published-dependency-faces.zh.md | 2 +- ...6-09-22-workspace-release-ranges.i18n.yaml | 6 + .../2026-09-22-workspace-release-ranges.md | 27 + .../2026-09-22-workspace-release-ranges.zh.md | 27 + AGENTS.md | 2 +- apps/cli/package.json | 10 +- apps/desktop-host/package.json | 2 +- apps/desktop/package.json | 4 +- apps/web/package.json | 2 +- benchmarks/package.json | 4 +- docs/rescope.i18n.yaml | 4 +- docs/rescope.md | 2 +- docs/rescope.zh.md | 2 +- native/system/package.json | 2 +- native/system/packages/entry/README.i18n.yaml | 4 +- native/system/packages/entry/README.md | 2 +- native/system/packages/entry/README.zh.md | 2 +- native/system/packages/entry/package.json | 8 +- native/system/test/release-packing.test.js | 4 +- packages/acp/acp/package.json | 6 +- packages/api/account-controller/package.json | 4 +- packages/api/gateway/package.json | 6 +- packages/api/job-controller/package.json | 6 +- packages/api/remotes/package.json | 4 +- packages/api/session-controller/package.json | 6 +- packages/api/settings-controller/package.json | 6 +- packages/api/terminal-controller/package.json | 6 +- .../api/workspace-controller/package.json | 6 +- packages/api/workspace-files/package.json | 6 +- .../attachment/attachment-local/package.json | 6 +- packages/attachment/attachment/package.json | 4 +- packages/boot/app-boot/package.json | 20 +- packages/boot/cmdline/package.json | 10 +- packages/boot/config-editor/package.json | 12 +- packages/boot/hmr/package.json | 18 +- packages/boot/plugin-manager/package.json | 12 +- packages/browser-use/browser-use/package.json | 4 +- packages/bundle/acp-app/package.json | 6 +- packages/bundle/base/package.json | 6 +- packages/bundle/headless/package.json | 10 +- packages/bundle/sdk-app/package.json | 8 +- packages/bundle/sdk-minimal/package.json | 6 +- packages/bundle/web-app/package.json | 12 +- packages/client/connection/package.json | 6 +- packages/client/file-upload/package.json | 4 +- packages/client/hmr/package.json | 8 +- packages/client/locale/package.json | 6 +- packages/client/modules/package.json | 6 +- packages/client/resources/package.json | 4 +- packages/client/store/package.json | 4 +- packages/client/ui-agent-preset/package.json | 4 +- packages/client/ui-approval/package.json | 4 +- packages/client/ui-attachment/package.json | 4 +- .../client/ui-brand-official/package.json | 4 +- packages/client/ui-chat/package.json | 6 +- packages/client/ui-commands/package.json | 4 +- packages/client/ui-conversation/package.json | 6 +- packages/client/ui-deliverables/package.json | 4 +- .../ui-directory-picker-browse/package.json | 4 +- .../ui-directory-picker-native/package.json | 4 +- packages/client/ui-dockkit/package.json | 4 +- packages/client/ui-goal/package.json | 4 +- packages/client/ui-input-trigger/package.json | 4 +- packages/client/ui-jobs/package.json | 4 +- packages/client/ui-layout/package.json | 4 +- .../client/ui-message-feedback/package.json | 4 +- .../client/ui-model-selection/package.json | 4 +- packages/client/ui-open-in-app/package.json | 4 +- .../client/ui-permission-presets/package.json | 4 +- packages/client/ui-plan/package.json | 4 +- .../client/ui-plugin-manager/package.json | 6 +- packages/client/ui-primitives/package.json | 4 +- packages/client/ui-reference/package.json | 4 +- packages/client/ui-renderer/package.json | 4 +- packages/client/ui-schedule/package.json | 4 +- packages/client/ui-session/package.json | 4 +- .../client/ui-settings-account/package.json | 6 +- .../ui-settings-agent-loop/package.json | 4 +- .../client/ui-settings-general/package.json | 6 +- .../client/ui-settings-models/package.json | 6 +- .../ui-settings-plugin-inventory/package.json | 4 +- .../client/ui-settings-plugins/package.json | 4 +- .../client/ui-settings-shell/package.json | 4 +- .../client/ui-settings-subagent/package.json | 4 +- .../ui-settings-web-search/package.json | 4 +- packages/client/ui-settings/package.json | 6 +- .../client/ui-sidebar-browser/package.json | 4 +- .../ui-sidebar-documentpreview/package.json | 6 +- packages/client/ui-sidebar-files/package.json | 4 +- packages/client/ui-sidebar-right/package.json | 4 +- .../client/ui-sidebar-terminal/package.json | 4 +- packages/client/ui-sidebar/package.json | 4 +- packages/client/ui-skill/package.json | 4 +- packages/client/ui-slots/package.json | 4 +- packages/client/ui-subagent/package.json | 4 +- packages/client/ui-theme/package.json | 6 +- packages/client/ui-tool/package.json | 4 +- packages/client/ui-trajectory/package.json | 4 +- .../client/ui-user-questions/package.json | 4 +- packages/client/ui-workflow-run/package.json | 4 +- packages/client/ui-workspace/package.json | 4 +- packages/client/web/package.json | 6 +- .../compaction/command-compact/package.json | 8 +- .../compaction/compaction-basic/package.json | 10 +- .../compaction-image-offload/package.json | 4 +- .../package.json | 10 +- packages/compaction/compaction/package.json | 4 +- .../computer-use/computer-use/package.json | 4 +- .../context/agent-instructions/package.json | 8 +- .../context/file-reference-local/package.json | 6 +- packages/context/file-reference/package.json | 4 +- .../context/session-reference/package.json | 10 +- packages/context/time-context/package.json | 6 +- packages/context/tmux-context/package.json | 6 +- .../core/agent-default-model/package.json | 6 +- packages/core/agent-loop/package.json | 6 +- .../core/agent-tool-presentation/package.json | 6 +- packages/core/agent/package.json | 4 +- packages/core/scope/package.json | 4 +- packages/core/session/package.json | 4 +- packages/core/system-prompt/package.json | 6 +- packages/core/tools/package.json | 6 +- .../credentials/authorization/package.json | 4 +- .../credentials-local/package.json | 6 +- packages/credentials/credentials/package.json | 4 +- .../deepseek-account-platform/package.json | 6 +- .../credentials/deepseek-account/package.json | 4 +- .../deliverables/tool-present/package.json | 6 +- .../workspace-changes/package.json | 10 +- packages/document/office-to-pdf/package.json | 10 +- .../agent-team-profile/package.json | 6 +- packages/experimental/agent-team/package.json | 6 +- .../api-speech-to-text/package.json | 6 +- .../experimental/auto-review/package.json | 4 +- .../package.json | 8 +- .../browser-use-playwright-mcp/package.json | 8 +- .../browser-use-runtime/package.json | 10 +- .../browser-use-stagehand-native/package.json | 10 +- .../client-ui-agent-team/package.json | 4 +- .../client-ui-voice-input/package.json | 4 +- .../computer-use-cua-driver-mcp/package.json | 10 +- .../package.json | 10 +- packages/experimental/inspector/package.json | 12 +- .../ptc-runtime-python/package.json | 6 +- .../speech-to-text-sensevoice/package.json | 6 +- .../experimental/speech-to-text/package.json | 10 +- .../experimental/tool-agent-team/package.json | 6 +- .../voice-input-bundle/package.json | 6 +- .../webworker-packer/package.json | 6 +- .../webworker-runtime/package.json | 10 +- .../cordis-client-runner/package.json | 6 +- .../cordis-host-runner/package.json | 8 +- packages/extensions/tool-cordis/package.json | 12 +- packages/extensions/ui-cordis/package.json | 4 +- .../feedback/command-feedback/package.json | 8 +- .../feedback/message-feedback/package.json | 10 +- packages/fs/fs-local/package.json | 6 +- .../fs/fs-observation-policy/package.json | 4 +- packages/fs/fs-sandbox/package.json | 4 +- packages/fs/fs/package.json | 4 +- packages/fs/tool-fs-search/package.json | 6 +- packages/fs/tool-fs/package.json | 6 +- .../fs/tool-str-replace-editor/package.json | 6 +- packages/goal/command-goal/package.json | 6 +- packages/goal/goal-round-driver/package.json | 4 +- packages/goal/goal/package.json | 6 +- packages/goal/tool-goal/package.json | 8 +- .../guard/repeat-tool-reminder/package.json | 6 +- packages/guard/timeout-policy/package.json | 4 +- packages/hooks/hook-protocol/package.json | 4 +- packages/hooks/hooks-claude-code/package.json | 6 +- packages/hooks/hooks-codex/package.json | 6 +- .../host/directory-picker-auto/package.json | 10 +- .../host/directory-picker-browse/package.json | 6 +- .../host/directory-picker-native/package.json | 4 +- packages/host/directory-picker/package.json | 4 +- packages/host/frontend-static/package.json | 8 +- packages/host/open-in-app/package.json | 8 +- packages/host/plugin-inventory/package.json | 8 +- .../host/product-telemetry-otel/package.json | 8 +- packages/host/webserver/package.json | 6 +- .../identity/anonymous-user-id/package.json | 4 +- packages/interaction/commands/package.json | 4 +- .../permission-presets/package.json | 6 +- .../interaction/tool-ask-user/package.json | 4 +- .../interaction/user-approval/package.json | 6 +- .../interaction/user-questions/package.json | 4 +- packages/jobs/jobs-local/package.json | 10 +- packages/jobs/jobs/package.json | 4 +- packages/jobs/tool-jobs/package.json | 6 +- .../deepseek-llm-api-extensions/package.json | 4 +- packages/llm/llm-deepseek/package.json | 14 +- packages/llm/llm-pi-ai/package.json | 10 +- packages/llm/llm-retry/package.json | 10 +- packages/llm/llm/package.json | 6 +- .../package.json | 12 +- packages/llm/token-meter/package.json | 6 +- packages/lsp/lsp-stdio/package.json | 6 +- packages/lsp/lsp/package.json | 4 +- packages/lsp/tool-lsp/package.json | 6 +- packages/mcp/mcp-client/package.json | 6 +- packages/mcp/mcp-resources/package.json | 4 +- packages/plan/plan-mode/package.json | 4 +- .../preset/agent-preset-registry/package.json | 14 +- packages/preset/agent-preset/package.json | 14 +- packages/preset/persona/package.json | 6 +- .../ptc-runtime/ptc-runtime-node/package.json | 6 +- packages/ptc-runtime/ptc-runtime/package.json | 4 +- .../invariants/package.json | 6 +- packages/sandbox/sandbox-local/package.json | 8 +- packages/sandbox/sandbox-policy/package.json | 6 +- .../sandbox/sandbox-windows-acl/package.json | 4 +- packages/sandbox/sandbox/package.json | 4 +- packages/schedule/schedule/package.json | 6 +- packages/sdk/client/package.json | 4 +- packages/sdk/protocol/package.json | 4 +- packages/sdk/server/package.json | 8 +- .../session-log-export/package.json | 8 +- .../session-query-sqlite/package.json | 8 +- .../session-query/session-query/package.json | 4 +- .../tool-session-query/package.json | 6 +- .../session-checkpoint-policy/package.json | 6 +- .../session-format-catalog/package.json | 4 +- .../session-format-v0-to-v1/package.json | 4 +- .../session-format-v1-to-v2/package.json | 4 +- .../session-format-v2-to-v3/package.json | 4 +- .../session-format-v3-to-v4/package.json | 4 +- packages/session/session-format/package.json | 4 +- .../session/session-log-deepseek/package.json | 10 +- .../session-persistence-jsonl/package.json | 8 +- .../session/session-persistence/package.json | 4 +- .../session-projection-cache/package.json | 6 +- .../session/session-projection/package.json | 4 +- packages/session/session-stats/package.json | 8 +- .../session-telemetry-otel/package.json | 10 +- .../session/session-telemetry/package.json | 4 +- .../package.json | 6 +- .../package.json | 10 +- .../session/session-title-llm/package.json | 6 +- packages/session/session-title/package.json | 6 +- .../session/session-turn-outline/package.json | 8 +- packages/settings/settings/package.json | 14 +- packages/shell/bash-local/package.json | 6 +- packages/shell/bash-sandbox/package.json | 6 +- packages/shell/pwsh-local/package.json | 6 +- packages/shell/pwsh-sandbox/package.json | 4 +- packages/shell/shell-env/package.json | 6 +- packages/shell/shell/package.json | 4 +- .../shell/tool-bash-persistent/package.json | 10 +- packages/shell/tool-bash/package.json | 6 +- .../shell/tool-pwsh-persistent/package.json | 10 +- packages/shell/tool-pwsh/package.json | 6 +- packages/skill/skill-badge/package.json | 4 +- packages/skill/skill-filesystem/package.json | 6 +- packages/skill/skill-office/package.json | 10 +- packages/skill/skill/package.json | 6 +- packages/skill/tool-skill/package.json | 6 +- .../tool-workspace-dependencies/package.json | 10 +- packages/spill/spill-local/package.json | 10 +- packages/spill/spill-policy/package.json | 6 +- packages/spill/spill/package.json | 4 +- packages/ssh/fs-ssh/package.json | 6 +- packages/ssh/sandbox-ssh/package.json | 6 +- packages/ssh/ssh/package.json | 6 +- packages/ssh/subprocess-ssh/package.json | 6 +- packages/storage/storage-domain/package.json | 6 +- packages/storage/storage-json/package.json | 6 +- packages/storage/storage-sqlite/package.json | 6 +- packages/storage/storage/package.json | 4 +- packages/subagent/subagent-acp/package.json | 8 +- .../subagent-claude-code/package.json | 6 +- packages/subagent/subagent-codex/package.json | 8 +- .../subagent/subagent-dsh-sdk/package.json | 8 +- .../subagent-fork-in-process/package.json | 8 +- .../subagent-in-process-driver/package.json | 8 +- .../subagent-spawn-in-process/package.json | 8 +- packages/subagent/subagent/package.json | 6 +- .../tool-subagent-control/package.json | 4 +- packages/subagent/tool-subagent/package.json | 8 +- .../subprocess/subprocess-local/package.json | 4 +- packages/subprocess/subprocess/package.json | 4 +- .../subprocess/win32-process/package.json | 4 +- packages/terminal/terminal-bash/package.json | 6 +- packages/terminal/terminal/package.json | 4 +- packages/terminal/tool-terminal/package.json | 10 +- .../agent-loop-testkit/package.json | 4 +- .../test-support/client-runtime/package.json | 12 +- .../test-support/llm-mock-server/package.json | 4 +- packages/test-support/llm-replay/package.json | 4 +- .../test-support/loader-smoke/package.json | 4 +- .../test-support/remote-mock/package.json | 4 +- .../session-snapshot/package.json | 6 +- packages/todo/tool-todo/package.json | 10 +- packages/typert/generator/package.json | 4 +- packages/typert/loader/package.json | 10 +- packages/typert/protocol/package.json | 4 +- packages/typert/registry/package.json | 4 +- packages/util/atomic-write/package.json | 4 +- packages/util/brand/package.json | 4 +- packages/util/chunked-list/package.json | 4 +- packages/util/crypto/package.json | 4 +- packages/util/deque/package.json | 4 +- packages/util/home-paths/package.json | 4 +- packages/util/http-proxy/package.json | 4 +- packages/util/launch-environment/package.json | 4 +- packages/util/lazy-require/package.json | 4 +- packages/util/native-command/package.json | 4 +- packages/util/output-retention/package.json | 4 +- packages/util/package-manifest/package.json | 4 +- packages/util/time/package.json | 4 +- packages/util/timeout/package.json | 4 +- packages/util/values/package.json | 4 +- packages/util/workspace-path/package.json | 4 +- packages/web/tool-web/package.json | 6 +- packages/web/web-fetch-http/package.json | 6 +- packages/web/web-search-deepseek/package.json | 6 +- packages/web/web-search-exa/package.json | 6 +- .../web/web-search-perplexity/package.json | 6 +- packages/web/web/package.json | 6 +- packages/webhook/webhook-github/package.json | 10 +- packages/webhook/webhook/package.json | 8 +- packages/workflow/tool-ralph/package.json | 8 +- packages/workflow/tool-workflow/package.json | 6 +- packages/workflow/workflow-ptc/package.json | 6 +- packages/workflow/workflow/package.json | 4 +- packages/workspace/workspace/package.json | 4 +- pnpm-lock.yaml | 948 +++++++++--------- python/sdk-runtime/package.json | 14 +- .../benchmark-next-package-dependency.spec.ts | 16 +- scripts/check-workspace-constraints.spec.ts | 25 +- scripts/check-workspace-constraints.ts | 7 +- scripts/rescope-vendor.ts | 4 +- scripts/verify-package-dependencies.spec.ts | 58 +- scripts/verify-package-dependencies.ts | 4 +- vendor/README.md | 4 +- vendor/cordis/package.json | 6 +- vendor/group/package.json | 4 +- vendor/hmr/package.json | 8 +- vendor/include/package.json | 6 +- vendor/loader/package.json | 6 +- vendor/logger-console/package.json | 6 +- vendor/schemastery/package.json | 2 +- vendor/timer/package.json | 4 +- 348 files changed, 1592 insertions(+), 1526 deletions(-) create mode 100644 .agents/notes/implemented/process/2026-09-22-workspace-release-ranges.i18n.yaml create mode 100644 .agents/notes/implemented/process/2026-09-22-workspace-release-ranges.md create mode 100644 .agents/notes/implemented/process/2026-09-22-workspace-release-ranges.zh.md 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 04ee7a1af7..bd7e432b63 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 @@ -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/process/2026-08-10-npm-release-sequences.md -2026-08-10-npm-release-sequences.md: da80904cb8ac0f2e06ee168c130f58d39e81da05 -2026-08-10-npm-release-sequences.zh.md: 7d8040d9d9f0653914934293bca7c54300feca16 +2026-08-10-npm-release-sequences.md: 6a4f9d1ec23d1fd1c7b74630e106974b680fe41a +2026-08-10-npm-release-sequences.zh.md: d33d48e4458a62951aa957e694dd70eedcf2a6c8 diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md index da80904cb8..6a4f9d1ec2 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md @@ -78,9 +78,9 @@ Two registry behaviours shape how a publish is attempted. Writes are spaced by a ### Workspace-internal references use the `workspace:` protocol -Every reference to a workspace member uses the `workspace:` protocol. All references to DSH packages use `workspace:*`, including peers and development dependencies, so `pnpm pack` writes the target's exact release version. This rule covers every consumer, including the repository root, apps, benchmarks, and Python runtime. Vendored references, including Cordis, use `workspace:^` and follow their independent version lines. References to native packages retain their declared ranges; Landlock platform references remain exact. Local workspace linking is unchanged. +Every reference to a workspace member uses the `workspace:` protocol. The [release-range policy](2026-09-22-workspace-release-ranges.md) requires exact `workspace:*` DSH references and `workspace:~` vendor/native references in every dependency section and consumer, including the native entry's optional platform packages. Local workspace linking is unchanged. -`scripts/check-workspace-constraints.ts` reads every member declared in `pnpm-workspace.yaml` plus the root manifest and enforces ranges by dependency target, not consumer directory. The invariant-companion rule requires `workspace:*` for `@deepseek-ai/dsh-invariants`; the dependency repairer preserves vendored caret ranges. Published DSH peers therefore require the matching release instead of admitting later compatible versions. +`scripts/check-workspace-constraints.ts` reads every member declared in `pnpm-workspace.yaml` plus the root manifest and enforces ranges by dependency target, not consumer directory. The invariant-companion rule requires `workspace:*` for `@deepseek-ai/dsh-invariants`; the dependency repairer preserves vendor/native tilde ranges. Published DSH peers therefore require the matching release instead of admitting later compatible versions. ### Published dependency faces use an explicit policy @@ -133,7 +133,7 @@ The installed-consumer probe captures npm's HTTP diagnostics and includes them w |---|---| | release-set manifests | `private: true` removed; `publishConfig.access` per sequence and `repository` with each package's `directory` added | | release-set boundary | every member of `packages/*/*`, `apps/*`, and `vendor/*` | -| dependency protocol | every workspace consumer uses `workspace:*` for DSH targets and `workspace:^` for vendor targets | +| dependency protocol | every workspace consumer uses `workspace:*` for DSH targets and `workspace:~` for vendor/native targets | | root `AGENTS.md` | the convention that vendored packages are `private: true` no longer holds | | `vendor/README.md` | records `src` joining `cordis`'s `files` as a local modification | | the three native packages | `publishConfig.access: public`, and their workflow passes no `--access` | diff --git a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md index 7d8040d9d9..d33d48e445 100644 --- a/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md +++ b/.agents/notes/implemented/process/2026-08-10-npm-release-sequences.zh.md @@ -78,9 +78,9 @@ registry 的两个行为决定了「怎么尝试一次发布」。写入之间 ### workspace 内部引用走 `workspace:` 协议 -所有指向 workspace 成员的引用都用 `workspace:` 协议。所有指向 DSH 包的引用使用 `workspace:*`,包括 peer 和开发依赖,由 `pnpm pack` 写入目标的精确发布版本。这条规则覆盖所有消费者,包括仓库根清单、应用、benchmarks 和 Python 运行时。包括 Cordis 在内的 vendored 引用使用 `workspace:^`,跟随各自独立的版本线。指向 native 包的引用保留已声明的范围;Landlock 平台引用仍为精确版本。本地 workspace 链接方式不变。 +所有指向 workspace 成员的引用都用 `workspace:` 协议。[发布范围策略](2026-09-22-workspace-release-ranges.zh.md)要求每个消费者的所有依赖区段对 DSH 使用精确的 `workspace:*` 引用,对 vendor/native 使用 `workspace:~` 引用,包括原生入口的可选平台包。本地 workspace 链接方式不变。 -`scripts/check-workspace-constraints.ts` 读取 `pnpm-workspace.yaml` 声明的全部成员及根清单,按依赖目标而非消费者目录校验范围。Invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 使用 `workspace:*`;依赖修复器保留 vendored caret 范围。因此,发布的 DSH peer 要求匹配的发布版本,而不接纳后续兼容版本。 +`scripts/check-workspace-constraints.ts` 读取 `pnpm-workspace.yaml` 声明的全部成员及根清单,按依赖目标而非消费者目录校验范围。Invariant companion 规则要求 `@deepseek-ai/dsh-invariants` 使用 `workspace:*`;依赖修复器保留 vendor/native tilde 范围。因此,发布的 DSH peer 要求匹配的发布版本,而不接纳后续兼容版本。 ### 发布依赖门面使用显式策略 @@ -133,7 +133,7 @@ dsh 的验证会一并安装 vendored 族的 pack 产物。harness 的包把 ven |---|---| | 发布集 manifest | 去掉 `private: true`;按序列补 `publishConfig.access` 与带各自 `directory` 的 `repository` | | 发布集边界 | `packages/*/*`、`apps/*`、`vendor/*` 的全部成员 | -| 依赖协议 | 每个 workspace 消费者对 DSH 目标使用 `workspace:*`,对 vendor 目标使用 `workspace:^` | +| 依赖协议 | 每个 workspace 消费者对 DSH 目标使用 `workspace:*`,对 vendor/native 目标使用 `workspace:~` | | 根 `AGENTS.md` | 「vendored 包是 `private: true`」这条约定不再成立 | | `vendor/README.md` | 记录「`src` 加入 `cordis` 的 `files`」这条本地修改 | | native 三包 | `publishConfig.access: public`,且其 workflow 不传 `--access` | 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 87f4f41235..02670de7a5 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 @@ -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/process/2026-08-26-published-dependency-faces.md -2026-08-26-published-dependency-faces.md: 7880085eca4eb71fdda61601173eb12193de05e8 -2026-08-26-published-dependency-faces.zh.md: fc8f452573048d3d8cf9ff4c8e894984a4362c1f +2026-08-26-published-dependency-faces.md: f188ccc0fc91b2899ccb618d3000a9b3cb94eb59 +2026-08-26-published-dependency-faces.zh.md: d59bb724ceb15f6eae65b509f8437a5dcfa05a23 diff --git a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md index 7880085eca..f188ccc0fc 100644 --- a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md +++ b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.md @@ -28,7 +28,7 @@ A workspace package reached by a runtime value import from the Host entry closur An export whose constructor identity or module state must be shared appears in `peerRequiredHostExports`; importing one such export keeps the whole package edge in matching `peerDependencies` and `devDependencies`. Each export-table key is an exact module specifier and each value is a reviewed export set. The verifier follows runtime local imports from the Host entry, records named and default imports and re-exports, and rejects exports covered by neither the package list nor an export table; namespace, dynamic, and side-effect imports remain unbounded unless the complete exact entry is package-classified. -Workspace imports used by the Client bundle, type-only imports, module augmentations, `dsh.client.inject`, and existing metadata-only peers belong only in `devDependencies`. Host runtime imports, including additional Node entries, follow the Host classification. [Browser third-party build inputs](2026-09-08-browser-third-party-build-inputs.md) governs ordinary third-party declarations; it partially supersedes their preservation in this decision. DSH workspace references use `workspace:*`; vendored references retain `workspace:^`. +Workspace imports used by the Client bundle, type-only imports, module augmentations, `dsh.client.inject`, and existing metadata-only peers belong only in `devDependencies`. Host runtime imports, including additional Node entries, follow the Host classification. [Browser third-party build inputs](2026-09-08-browser-third-party-build-inputs.md) governs ordinary third-party declarations; it partially supersedes their preservation in this decision. [Release ranges](2026-09-22-workspace-release-ranges.md) require `workspace:*` for DSH and `workspace:~` for vendor/native references. Some development relationships exist only in `dsh.client.inject` or TypeScript project references. The policy's `configurationOnlyDevDependencies` table names only those reviewed edges and keeps them in `devDependencies`. diff --git a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md index fc8f452573..d59bb724ce 100644 --- a/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md +++ b/.agents/notes/implemented/process/2026-08-26-published-dependency-faces.zh.md @@ -28,7 +28,7 @@ Host 入口闭包中的运行期 value import 所到达的 workspace 包,只 constructor 身份或模块状态必须共享的导出列入 `peerRequiredHostExports`;一旦使用这类导出,整条包依赖边就保留在范围一致的 `peerDependencies` 与 `devDependencies` 中。每个导出表的 key 都是精确 module specifier,每个 value 都是经审查的导出集合。验证器从 Host 入口沿运行期本地 import 扫描,记录具名与默认 import 和 re-export,并拒绝既没有包级分类、也没有导出级分类的导出;除非完整的精确入口已按包分类,否则 namespace、dynamic 和 side-effect import 仍无法限定范围。 -Client bundle 使用的 workspace import、纯类型 import、模块扩充、`dsh.client.inject` 和仅有元数据的现存 peer 只属于 `devDependencies`。Host 运行时 import(包括额外 Node 入口)遵循 Host 分类。[浏览器第三方构建输入](2026-09-08-browser-third-party-build-inputs.zh.md)规定普通第三方声明,部分取代本决策对它们原区段的保留。DSH workspace 引用使用 `workspace:*`;vendored 引用保留 `workspace:^`。 +Client bundle 使用的 workspace import、纯类型 import、模块扩充、`dsh.client.inject` 和仅有元数据的现存 peer 只属于 `devDependencies`。Host 运行时 import(包括额外 Node 入口)遵循 Host 分类。[浏览器第三方构建输入](2026-09-08-browser-third-party-build-inputs.zh.md)规定普通第三方声明,部分取代本决策对它们原区段的保留。[发布范围](2026-09-22-workspace-release-ranges.zh.md)要求 DSH 引用使用 `workspace:*`,vendor/native 引用使用 `workspace:~`。 部分开发期关系只存在于 `dsh.client.inject` 或 TypeScript project reference 中。策略的 `configurationOnlyDevDependencies` 表只列出这些已评审的依赖边,并将它们保留在 `devDependencies` 中。 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 new file mode 100644 index 0000000000..528c760888 --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.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/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 diff --git a/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.md b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.md new file mode 100644 index 0000000000..57c74df3ea --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.md @@ -0,0 +1,27 @@ +# Agent Note: Workspace dependency release ranges + +Status: implemented + +English | [中文](2026-09-22-workspace-release-ranges.zh.md) + +## Problem + +DSH packages share one product release. Cordis, its vendored libraries, and Node Addon System have independent releases; consumers need their patch updates without automatically accepting a new minor version. + +## Decision + +Every workspace consumer uses `workspace:*` for DSH targets and `workspace:~` for targets under `vendor/` or in the `native/system` package family. This includes root tooling, apps, peers, development dependencies, and the native entry's optional platform dependencies. Directory placement never exempts a consumer. + +Packing substitutes the target package's current version: `workspace:~` becomes `~4.0.3` for Cordis at `4.0.3` and `~0.1.2` for Node Addon System at `0.1.2`. DSH references remain exact. Native family members still share one release version, while an installed entry may resolve a later platform patch. + +This range policy refines [npm release sequences](2026-08-10-npm-release-sequences.md) and [published dependency faces](2026-08-26-published-dependency-faces.md). Their independent release families and dependency-section classification remain unchanged. + +## Alternatives considered + +**Caret vendor ranges.** For stable packages such as Cordis, caret ranges also admit later minor versions. + +**Exact vendor and native ranges.** Exact ranges require a consumer declaration change to admit each patch release. + +## Consequences + +Vendor and native patch releases must preserve their consumer-facing APIs and binary interfaces. Local workspace linking and lockfile resolutions remain unchanged by the range conversion. The workspace gate rejects DSH tilde ranges and vendor/native caret or exact ranges; packed-manifest tests check the emitted versions. diff --git a/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.zh.md b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.zh.md new file mode 100644 index 0000000000..f39ede4fb1 --- /dev/null +++ b/.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.zh.md @@ -0,0 +1,27 @@ +# Agent Note: Workspace 依赖发布范围 + +Status: implemented + +[English](2026-09-22-workspace-release-ranges.md) | 中文 + +## Problem + +DSH 包共享同一次产品发布。Cordis、其 vendored 库和 Node Addon System 独立发布;消费者需要接收它们的补丁更新,而不自动接纳新的次版本。 + +## Decision + +每个 workspace 消费者对 DSH 目标使用 `workspace:*`,对 `vendor/` 下或 `native/system` 包族中的目标使用 `workspace:~`。规则覆盖根目录工具、应用、peer、开发依赖以及原生入口的可选平台依赖。消费者不因目录位置而获得豁免。 + +打包时替换为目标包的当前版本:Cordis 为 `4.0.3` 时,`workspace:~` 转为 `~4.0.3`;Node Addon System 为 `0.1.2` 时转为 `~0.1.2`。DSH 引用仍为精确版本。原生包族的成员仍以同一版本发布,但已安装的入口可以解析到后续的平台包补丁版本。 + +这套范围策略细化了 [npm 发布序列](2026-08-10-npm-release-sequences.zh.md)和[发布依赖门面](2026-08-26-published-dependency-faces.zh.md)。它们的独立发布族和依赖区段分类保持不变。 + +## Alternatives considered + +**Vendor 使用 caret 范围。** 对 Cordis 这类稳定版本的包,caret 范围也会接纳后续次版本。 + +**Vendor 和 native 使用精确范围。** 每次接纳补丁发布都需要修改消费者的依赖声明。 + +## Consequences + +Vendor 和 native 的补丁发布必须保持面向消费者的 API 和二进制接口兼容。范围转换不改变本地 workspace 链接及锁文件解析结果。Workspace 门禁拒绝 DSH 的 tilde 范围,以及 vendor/native 的 caret 或精确范围;打包清单测试校验最终输出的版本。 diff --git a/AGENTS.md b/AGENTS.md index b9083dc1cf..37cfd8d280 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -126,7 +126,7 @@ Real-API tests/demos read `DEEPSEEK_API_KEY`, optional `DEEPSEEK_BASE_URL`, and ## Conventions -- Packages use `@deepseek-ai/dsh-`; vendor is [rescoped](docs/rescope.md) and `private: true`. Harness packages declare `@deepseek-ai/cordis` in `peerDependencies`/`devDependencies`. Workspace dependency sections use DSH `workspace:*`, vendor `workspace:^` ([rules](.agents/notes/implemented/process/2026-08-10-npm-release-sequences.md#workspace-internal-references-use-the-workspace-protocol)). +- Packages use `@deepseek-ai/dsh-`; vendor is [rescoped](docs/rescope.md) and `private: true`. Harness packages declare `@deepseek-ai/cordis` in `peerDependencies`/`devDependencies`. Workspace dependency sections use DSH `workspace:*`, vendor/native `workspace:~` ([rules](.agents/notes/implemented/process/2026-09-22-workspace-release-ranges.md)). - ESM everywhere (`"type": "module"`). Use package names across packages and `.ts` in local relative imports. Config subprocesses run built `lib/` under plain Node; source regressions use their declared launcher ([testing policy](docs/testing.md#test-subprocess-launch-modes)). The `dsh` CLI source launch runs through tsx's ESM-only hook (`node --import tsx/esm`); modules it reaches must stay ESM (no CJS-only exports) — Node's native TypeScript modes are unavailable across the engines range ([source-launch contract](.agents/notes/implemented/architecture/2026-07-29-dsh-source-launch-tsx-esm.md)). Raw/Web `cordis.yml` bare plugins must appear in their resolver manifest's `dependencies`; `verify-cordis-config` enforces it. - **Registrations are effects**: every contribution goes through `ctx.effect()` / `ctx.on()`; a registry's `register()` returns the disposer. - **Runtime invariants assert owned relationships.** Publish `./invariant` only when independent observations can diverge. Otherwise omit its source and wiring and record why in its README; empty installers and checks of service presence, plugin metadata, effects, or fixed examples are invalid ([package invariant rules](packages/AGENTS.md)). diff --git a/apps/cli/package.json b/apps/cli/package.json index 028eeee7e9..d3ced6a684 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -20,11 +20,11 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-hmr": "workspace:*", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-acp-app": "workspace:*", "@deepseek-ai/dsh-agent-instructions": "workspace:*", "@deepseek-ai/dsh-agent-tool-presentation": "workspace:*", @@ -90,7 +90,7 @@ "@deepseek-ai/dsh-webhook": "workspace:*", "@deepseek-ai/dsh-webhook-github": "workspace:*", "@deepseek-ai/dsh-workflow-ptc": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "commander": "^15.0.0", "js-yaml": "^4.2.0", "node-addon-require-builtin": "^0.1.6", diff --git a/apps/desktop-host/package.json b/apps/desktop-host/package.json index 49b5cf6f91..705921ba0d 100644 --- a/apps/desktop-host/package.json +++ b/apps/desktop-host/package.json @@ -10,7 +10,7 @@ "lib/index.js" ], "dependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 802b47e9da..ba33a3fb3e 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -40,14 +40,14 @@ "semver": "^7.8.5", "ws": "^8.21.0", "@deepseek-ai/dsh-api-gateway": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-client-ui-settings-general": "workspace:*", "@deepseek-ai/dsh-client-ui-sidebar-browser": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/node-addon-system": "workspace:^", + "@deepseek-ai/node-addon-system": "workspace:~", "@electron/get": "^5.1.0", "@electron/notarize": "2.5.0", "@types/js-yaml": "^4.0.9", diff --git a/apps/web/package.json b/apps/web/package.json index 43077ef9b9..87752f4bb5 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -30,7 +30,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/cordis-plugin-group": "workspace:^", + "@deepseek-ai/cordis-plugin-group": "workspace:~", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", diff --git a/benchmarks/package.json b/benchmarks/package.json index 54374df851..975ea4a44a 100644 --- a/benchmarks/package.json +++ b/benchmarks/package.json @@ -10,7 +10,7 @@ "@deepseek-ai/dsh-terminal": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-llm-replay": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -37,6 +37,6 @@ "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/docs/rescope.i18n.yaml b/docs/rescope.i18n.yaml index 750cbfa26c..a02315a875 100644 --- a/docs/rescope.i18n.yaml +++ b/docs/rescope.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/rescope.md -rescope.md: 7213077966a6e01f3f1123036645cc8de821484e -rescope.zh.md: 1b898662e8eb2fae72ae28ff1c2b1b1dd03d09e2 +rescope.md: 0fcbdd476afb45c2fd9efe927c6b5643b9426683 +rescope.zh.md: bd6e3f233b46cb7c0ed5c1f624d2941f41665a6f diff --git a/docs/rescope.md b/docs/rescope.md index 7213077966..0fcbdd476a 100644 --- a/docs/rescope.md +++ b/docs/rescope.md @@ -23,7 +23,7 @@ Subpath exports keep their path: `@cordisjs/plugin-loader/repository` becomes `@ ## What the rename does not touch - **Directory names and upstream source versions.** `vendor/hmr/` stays `vendor/hmr/`, and the table records the upstream version of the pinned source snapshot, so the manifest reads as an upstream snapshot; the vendored `package.json`'s own `version` field is the harness's released manifest version, which `pnpm run release:vendor` bumps and a re-sync restores to the upstream version. -- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use the `workspace:` protocol; [repository rules](../AGENTS.md#conventions) distinguish exact DSH references from vendored caret ranges. +- **Dependency ranges.** Renaming changes dependency keys without changing ranges. Workspace manifests use the `workspace:` protocol; [repository rules](../AGENTS.md#conventions) distinguish exact DSH references from vendor/native tilde ranges. - **The Loader's `cordis:` builtin prefix.** `cordis:include` and `cordis:group` are a protocol prefix, not a package name. - **The `cordis.yml` configuration family**, including `*.cordis.yml`, `*.cordis.snapshot.yml`, and `cordis.patch.yml`. - **Harness packages whose own names contain the word**, such as `@deepseek-ai/dsh-tool-cordis`. diff --git a/docs/rescope.zh.md b/docs/rescope.zh.md index 1b898662e8..bd6e3f233b 100644 --- a/docs/rescope.zh.md +++ b/docs/rescope.zh.md @@ -23,7 +23,7 @@ Cordis 框架及其基础库以源码形式 vendored 在 [`vendor/`](../vendor/R ## 改名不碰什么 - **目录名与上游源码版本。** `vendor/hmr/` 仍是 `vendor/hmr/`,清单表记录的是所钉住源码快照的上游版本,因此清单读作一份上游快照;而每个 vendored 包 `package.json` 自身的 `version` 字段是 harness 发布的清单版本,`pnpm run release:vendor` 会提升它,重新 sync 时会恢复成上游版本。 -- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单使用 `workspace:` 协议;[仓库规则](../AGENTS.md#conventions)区分精确的 DSH 引用与 vendored caret 范围。 +- **依赖 range。** 改名只修改依赖键,不改变范围。Workspace 清单使用 `workspace:` 协议;[仓库规则](../AGENTS.md#conventions)区分精确的 DSH 引用与 vendor/native tilde 范围。 - **Loader 的 `cordis:` 内建前缀。** `cordis:include`、`cordis:group` 是协议前缀,不是包名。 - **`cordis.yml` 配置文件家族**,包括 `*.cordis.yml`、`*.cordis.snapshot.yml`、`cordis.patch.yml`。 - **名字里带这个词的 harness 包**,例如 `@deepseek-ai/dsh-tool-cordis`。 diff --git a/native/system/package.json b/native/system/package.json index f14407c86d..a4fd9bcf0c 100644 --- a/native/system/package.json +++ b/native/system/package.json @@ -26,7 +26,7 @@ "release:verify-packed-install": "node ./scripts/verify-packed-install.mjs" }, "devDependencies": { - "@deepseek-ai/node-addon-system": "workspace:*", + "@deepseek-ai/node-addon-system": "workspace:~", "@types/node": "^26.0.1", "tsx": "^4.20.6", "typescript": "^6.0.3" diff --git a/native/system/packages/entry/README.i18n.yaml b/native/system/packages/entry/README.i18n.yaml index c9b522958b..796ea55afc 100644 --- a/native/system/packages/entry/README.i18n.yaml +++ b/native/system/packages/entry/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 native/system/packages/entry/README.md -README.md: 8f6a4d341c8f9e4c104e5706e08d9a7d45c065e1 -README.zh.md: e401fc2ec71b1afb664d8e73bf3e9372054957a7 +README.md: 0ffd2b38a78c562dad7c6760e8dbd79fbf8151c2 +README.zh.md: fd4f9acc56ed59d69309c5b9e8f9f6d6ce0ca926 diff --git a/native/system/packages/entry/README.md b/native/system/packages/entry/README.md index 8f6a4d341c..0ffd2b38a7 100644 --- a/native/system/packages/entry/README.md +++ b/native/system/packages/entry/README.md @@ -10,6 +10,6 @@ The `./landlock-run` entry exports the Landlock launcher path, enforcement probe The lock operation attempts `LOCK_EX | LOCK_NB` asynchronously. Keep the caller-owned descriptor open until completion; contention rejects with `EAGAIN`/`EWOULDBLOCK`, other syscall failures also reject, and errors carry their code, positive errno, and `syscall: 'flock'`. Native setup errors reject the same promise. Closing the last descriptor for the open file description releases the lock. The binding does not open, duplicate, close, or explicitly unlock descriptors. -Optional OS/CPU platform packages carry the binaries. Linux has `bin/landlock-run` and separate `bin/glibc/system.node` / `bin/musl/system.node`; macOS has `bin/system.node`. Missing or unloadable flock bindings reject acquisition, without installation-time compilation. Landlock remains a separate executable with its existing fail-closed protocol; unsupported kernels/platforms probe unusable. +Optional OS/CPU platform packages carry the binaries. Their `~x.y.z` dependency ranges allow later patches within the same minor version. Linux has `bin/landlock-run` and separate `bin/glibc/system.node` / `bin/musl/system.node`; macOS has `bin/system.node`. Missing or unloadable flock bindings reject acquisition, without installation-time compilation. Landlock remains a separate executable with its existing fail-closed protocol; unsupported kernels/platforms probe unusable. The two C sources ship for auditability. See the workspace [architecture](../../docs/architecture.md), [support matrix](../../docs/support-matrix.md), and [CLI contract](../../docs/cli-contract.md). diff --git a/native/system/packages/entry/README.zh.md b/native/system/packages/entry/README.zh.md index e401fc2ec7..fd4f9acc56 100644 --- a/native/system/packages/entry/README.zh.md +++ b/native/system/packages/entry/README.zh.md @@ -10,6 +10,6 @@ kind: "package-library" 锁操作异步尝试 `LOCK_EX | LOCK_NB`。在完成前保持调用方拥有的描述符打开;竞争以 `EAGAIN`/`EWOULDBLOCK` 拒绝,其他系统调用失败也会拒绝,错误携带 code、值为正数的 errno 和 `syscall: 'flock'`。原生调用准备阶段的错误也会拒绝同一个 promise。关闭指向该打开文件描述的最后一个描述符即释放锁。绑定不打开、复制、关闭或显式解锁描述符。 -可选操作系统/CPU 平台包携带二进制。Linux 包含 `bin/landlock-run` 和分别用于两种 libc 的 `bin/glibc/system.node` / `bin/musl/system.node`;macOS 包含 `bin/system.node`。flock 绑定缺失或无法加载时,锁获取请求会被拒绝,不在安装时编译。Landlock 仍是遵循既有失败关闭协议的独立可执行文件;不支持的内核或平台探测结果为不可用。 +可选操作系统/CPU 平台包携带二进制。它们的 `~x.y.z` 依赖范围允许同一次版本内的后续补丁版本。Linux 包含 `bin/landlock-run` 和分别用于两种 libc 的 `bin/glibc/system.node` / `bin/musl/system.node`;macOS 包含 `bin/system.node`。flock 绑定缺失或无法加载时,锁获取请求会被拒绝,不在安装时编译。Landlock 仍是遵循既有失败关闭协议的独立可执行文件;不支持的内核或平台探测结果为不可用。 两个 C 源文件随包分发以供审计。参见工作区[架构](../../docs/architecture.md)、[支持矩阵](../../docs/support-matrix.md)和 [CLI 约定](../../docs/cli-contract.md)。 diff --git a/native/system/packages/entry/package.json b/native/system/packages/entry/package.json index 99080236d2..24c5992fdc 100644 --- a/native/system/packages/entry/package.json +++ b/native/system/packages/entry/package.json @@ -38,9 +38,9 @@ "access": "public" }, "optionalDependencies": { - "@deepseek-ai/node-addon-system-darwin-arm64": "workspace:*", - "@deepseek-ai/node-addon-system-darwin-x64": "workspace:*", - "@deepseek-ai/node-addon-system-linux-arm64": "workspace:*", - "@deepseek-ai/node-addon-system-linux-x64": "workspace:*" + "@deepseek-ai/node-addon-system-darwin-arm64": "workspace:~", + "@deepseek-ai/node-addon-system-darwin-x64": "workspace:~", + "@deepseek-ai/node-addon-system-linux-arm64": "workspace:~", + "@deepseek-ai/node-addon-system-linux-x64": "workspace:~" } } diff --git a/native/system/test/release-packing.test.js b/native/system/test/release-packing.test.js index bfca35fbc7..86ccf03078 100644 --- a/native/system/test/release-packing.test.js +++ b/native/system/test/release-packing.test.js @@ -46,7 +46,7 @@ function fixture(t) { writeJson('packages/entry/package.json', { name: '@fixture/native', version: '1.2.3', type: 'module', repository: repository('entry'), exports: { '.': './lib/index.js' }, files: ['lib/'], - optionalDependencies: { '@fixture/native-linux-x64': 'workspace:*' }, + optionalDependencies: { '@fixture/native-linux-x64': 'workspace:~' }, scripts: { prepack: 'node ../../scripts/verify-entry-lib.mjs' }, }); fs.mkdirSync(path.join(dir, 'packages/entry/lib')); @@ -102,7 +102,7 @@ for (const workflow of [false, true]) { } assert.equal(manifests[0].repository.directory, 'native/system/packages/linux-x64'); assert.equal(manifests[1].repository.directory, 'native/system/packages/entry'); - assert.equal(manifests[1].optionalDependencies['@fixture/native-linux-x64'], '1.2.3'); + assert.equal(manifests[1].optionalDependencies['@fixture/native-linux-x64'], '~1.2.3'); assert.equal(tarFile(f.dir, files[1], 'LICENSE').toString(), workspaceLicense); assert.deepEqual(tarFile(f.dir, files[0], 'bin/landlock-run'), f.binary); const extracted = path.join(f.dir, 'extracted'); diff --git a/packages/acp/acp/package.json b/packages/acp/acp/package.json index e7202dcfa3..a3a0d70e95 100644 --- a/packages/acp/acp/package.json +++ b/packages/acp/acp/package.json @@ -29,10 +29,10 @@ "dependencies": { "@agentclientprotocol/sdk": "1.4.0", "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -48,7 +48,7 @@ } }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/api/account-controller/package.json b/packages/api/account-controller/package.json index 41b73c88dd..fbbafa2fc8 100644 --- a/packages/api/account-controller/package.json +++ b/packages/api/account-controller/package.json @@ -47,12 +47,12 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index b72006a9ed..814c3aa7e2 100644 --- a/packages/api/gateway/package.json +++ b/packages/api/gateway/package.json @@ -57,12 +57,12 @@ "dependencies": { "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "ws": "^8.21.0", "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-client-connection": "workspace:*" }, "devDependencies": { @@ -74,7 +74,7 @@ "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/dsh-util-crypto": "workspace:*", "@types/ws": "^8.18.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "zod": "^4.4.3" } } diff --git a/packages/api/job-controller/package.json b/packages/api/job-controller/package.json index 9da504433d..9af939effc 100644 --- a/packages/api/job-controller/package.json +++ b/packages/api/job-controller/package.json @@ -66,14 +66,14 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index b081d5957a..537fb57354 100644 --- a/packages/api/remotes/package.json +++ b/packages/api/remotes/package.json @@ -55,11 +55,11 @@ "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-api-gateway": "workspace:*", diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index b8c3e5d4f5..bb77590743 100644 --- a/packages/api/session-controller/package.json +++ b/packages/api/session-controller/package.json @@ -71,12 +71,12 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-deque": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "mime-types": "^3.0.2", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", @@ -114,7 +114,7 @@ } }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", diff --git a/packages/api/settings-controller/package.json b/packages/api/settings-controller/package.json index 2415dd8b9a..0249f259bc 100644 --- a/packages/api/settings-controller/package.json +++ b/packages/api/settings-controller/package.json @@ -44,11 +44,11 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-native-command": "workspace:*", @@ -57,7 +57,7 @@ "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-native-command": "workspace:*", diff --git a/packages/api/terminal-controller/package.json b/packages/api/terminal-controller/package.json index b9d0d9c1d1..eaeee722f4 100644 --- a/packages/api/terminal-controller/package.json +++ b/packages/api/terminal-controller/package.json @@ -57,17 +57,17 @@ "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-lazy-require": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@xterm/headless": "^6.0.0", "@xterm/addon-serialize": "^0.14.0", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-subprocess": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", diff --git a/packages/api/workspace-controller/package.json b/packages/api/workspace-controller/package.json index aa5a401705..c7fa53a013 100644 --- a/packages/api/workspace-controller/package.json +++ b/packages/api/workspace-controller/package.json @@ -67,11 +67,11 @@ "dependencies": { "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-native-command": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-host-directory-picker": "workspace:*", @@ -81,7 +81,7 @@ "@deepseek-ai/dsh-workspace": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/api/workspace-files/package.json b/packages/api/workspace-files/package.json index 4f3e67b1f3..993a1283bb 100644 --- a/packages/api/workspace-files/package.json +++ b/packages/api/workspace-files/package.json @@ -54,14 +54,14 @@ "dependencies": { "@deepseek-ai/dsh-deque": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-resources": "workspace:*", diff --git a/packages/attachment/attachment-local/package.json b/packages/attachment/attachment-local/package.json index 611a08d4de..4cc47b0077 100644 --- a/packages/attachment/attachment-local/package.json +++ b/packages/attachment/attachment-local/package.json @@ -23,16 +23,16 @@ "peerDependencies": { "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-lazy-require": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "sharp": "^0.35.3" }, "devDependencies": { "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/attachment/attachment/package.json b/packages/attachment/attachment/package.json index 9909a1fa5b..6c9a9b52e2 100644 --- a/packages/attachment/attachment/package.json +++ b/packages/attachment/attachment/package.json @@ -23,10 +23,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/boot/app-boot/package.json b/packages/boot/app-boot/package.json index 967b00b26e..52117cb7d3 100644 --- a/packages/boot/app-boot/package.json +++ b/packages/boot/app-boot/package.json @@ -40,24 +40,24 @@ "resolve.exports": "^2.0.3" }, "peerDependencies": { - "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-group": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", + "@deepseek-ai/cordis-plugin-group": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@types/js-yaml": "^4.0.9", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/boot/cmdline/package.json b/packages/boot/cmdline/package.json index 88c76e667b..b1e91919be 100644 --- a/packages/boot/cmdline/package.json +++ b/packages/boot/cmdline/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "commander": "^15.0.0", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/boot/config-editor/package.json b/packages/boot/config-editor/package.json index bfcf1963bc..138a6bd16c 100644 --- a/packages/boot/config-editor/package.json +++ b/packages/boot/config-editor/package.json @@ -27,10 +27,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-hmr": "workspace:*", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*" }, "dependencies": { @@ -39,10 +39,10 @@ "js-yaml": "^4.1.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-hmr": "workspace:*", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@types/js-yaml": "^4.0.9", "@deepseek-ai/dsh-app-boot": "workspace:*" }, diff --git a/packages/boot/hmr/package.json b/packages/boot/hmr/package.json index a8ba823f64..415f143316 100644 --- a/packages/boot/hmr/package.json +++ b/packages/boot/hmr/package.json @@ -28,10 +28,10 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-cmdline": "workspace:*" }, @@ -39,16 +39,16 @@ "@babel/code-frame": "^7.29.0", "chokidar": "^4.0.3", "picomatch": "^4.0.3", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@types/babel__code-frame": "^7.27.0", "@types/picomatch": "^3.0.2", "esbuild": "^0.28.1", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-cmdline": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*" diff --git a/packages/boot/plugin-manager/package.json b/packages/boot/plugin-manager/package.json index 05d57c482c..c3c59a10af 100644 --- a/packages/boot/plugin-manager/package.json +++ b/packages/boot/plugin-manager/package.json @@ -58,15 +58,15 @@ "dependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "execa": "^10.0.0", "yaml": "^2.9.0", "zod": "^4.4.3", "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", @@ -87,15 +87,15 @@ }, "devDependencies": { "@deepseek-ai/dsh-package-manifest": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-host-plugin-inventory": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-hmr": "workspace:*", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", diff --git a/packages/browser-use/browser-use/package.json b/packages/browser-use/browser-use/package.json index 0fd0fc31aa..b24eef351a 100644 --- a/packages/browser-use/browser-use/package.json +++ b/packages/browser-use/browser-use/package.json @@ -32,11 +32,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/bundle/acp-app/package.json b/packages/bundle/acp-app/package.json index 7bad4d6c23..eeba4e1a6f 100644 --- a/packages/bundle/acp-app/package.json +++ b/packages/bundle/acp-app/package.json @@ -39,10 +39,10 @@ "commander": "^15.0.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/bundle/base/package.json b/packages/bundle/base/package.json index 902eea8b20..39fdcf615b 100644 --- a/packages/bundle/base/package.json +++ b/packages/bundle/base/package.json @@ -35,7 +35,7 @@ }, "dependencies": { "@deepseek-ai/dsh-hmr": "workspace:*", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", @@ -127,9 +127,9 @@ "@deepseek-ai/dsh-settings": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/bundle/headless/package.json b/packages/bundle/headless/package.json index 645978b0db..6f00ed63b9 100644 --- a/packages/bundle/headless/package.json +++ b/packages/bundle/headless/package.json @@ -43,12 +43,12 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-cmdline": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "commander": "^15.0.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -57,8 +57,8 @@ "@deepseek-ai/dsh-fs": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", diff --git a/packages/bundle/sdk-app/package.json b/packages/bundle/sdk-app/package.json index 9f36541599..b2b892d218 100644 --- a/packages/bundle/sdk-app/package.json +++ b/packages/bundle/sdk-app/package.json @@ -36,16 +36,16 @@ "dependencies": { "@deepseek-ai/dsh-cmdline": "workspace:*", "@deepseek-ai/dsh-sdk-jsonrpc-server": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "commander": "^15.0.0", "@deepseek-ai/dsh-skill-office": "workspace:*", "@deepseek-ai/dsh-tool-workspace-dependencies": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/bundle/sdk-minimal/package.json b/packages/bundle/sdk-minimal/package.json index b74742e9c9..d52ce98483 100644 --- a/packages/bundle/sdk-minimal/package.json +++ b/packages/bundle/sdk-minimal/package.json @@ -34,7 +34,7 @@ } }, "dependencies": { - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", @@ -64,9 +64,9 @@ "@deepseek-ai/dsh-tools": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/bundle/web-app/package.json b/packages/bundle/web-app/package.json index f90eb29598..63e3b62b92 100644 --- a/packages/bundle/web-app/package.json +++ b/packages/bundle/web-app/package.json @@ -168,22 +168,22 @@ "@deepseek-ai/dsh-workflow-ptc": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", "@deepseek-ai/dsh-workspace-changes": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "commander": "^15.0.0", "open": "^11.0.0", "@deepseek-ai/dsh-api-account-controller": "workspace:*", "@deepseek-ai/dsh-client-ui-settings-account": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-shell-env": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", diff --git a/packages/client/connection/package.json b/packages/client/connection/package.json index 6542fde56a..fa72603fd9 100644 --- a/packages/client/connection/package.json +++ b/packages/client/connection/package.json @@ -35,7 +35,7 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-credentials": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "files": [ @@ -44,11 +44,11 @@ "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*", diff --git a/packages/client/file-upload/package.json b/packages/client/file-upload/package.json index 6d9a13d01a..5864ad1351 100644 --- a/packages/client/file-upload/package.json +++ b/packages/client/file-upload/package.json @@ -67,11 +67,11 @@ "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-scope": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", diff --git a/packages/client/hmr/package.json b/packages/client/hmr/package.json index 8c0d0b98c5..424309561b 100644 --- a/packages/client/hmr/package.json +++ b/packages/client/hmr/package.json @@ -40,17 +40,17 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "files": [ "lib/index.js", diff --git a/packages/client/locale/package.json b/packages/client/locale/package.json index 975c214f3c..d735544f58 100644 --- a/packages/client/locale/package.json +++ b/packages/client/locale/package.json @@ -39,10 +39,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", @@ -57,7 +57,7 @@ "@deepseek-ai/dsh-settings": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "files": [ "lib/index.js", diff --git a/packages/client/modules/package.json b/packages/client/modules/package.json index 503da37460..575a24a18c 100644 --- a/packages/client/modules/package.json +++ b/packages/client/modules/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-package-manifest": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*" }, @@ -56,6 +56,6 @@ "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/client/resources/package.json b/packages/client/resources/package.json index 77ca0f7ff4..d9e90b0775 100644 --- a/packages/client/resources/package.json +++ b/packages/client/resources/package.json @@ -39,10 +39,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", diff --git a/packages/client/store/package.json b/packages/client/store/package.json index 89ff9d212b..52ff624a38 100644 --- a/packages/client/store/package.json +++ b/packages/client/store/package.json @@ -23,10 +23,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "zustand": "~4.4.7", "immer": "^10.1.1" }, diff --git a/packages/client/ui-agent-preset/package.json b/packages/client/ui-agent-preset/package.json index 1aacc6da54..64a3623375 100644 --- a/packages/client/ui-agent-preset/package.json +++ b/packages/client/ui-agent-preset/package.json @@ -46,10 +46,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/ui-approval/package.json b/packages/client/ui-approval/package.json index 487ac0dc2d..2ef38180c0 100644 --- a/packages/client/ui-approval/package.json +++ b/packages/client/ui-approval/package.json @@ -44,10 +44,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/client/ui-attachment/package.json b/packages/client/ui-attachment/package.json index 8a7f893785..4bf338ddee 100644 --- a/packages/client/ui-attachment/package.json +++ b/packages/client/ui-attachment/package.json @@ -43,7 +43,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", "@deepseek-ai/dsh-client-ui-chat": "workspace:*", @@ -64,6 +64,6 @@ "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/client/ui-brand-official/package.json b/packages/client/ui-brand-official/package.json index 843fd27c7e..87bca8ebff 100644 --- a/packages/client/ui-brand-official/package.json +++ b/packages/client/ui-brand-official/package.json @@ -40,13 +40,13 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", "@deepseek-ai/dsh-client-ui-sidebar": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "react": "^18.2.0", diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index c1a274891d..d7aeb15a14 100644 --- a/packages/client/ui-chat/package.json +++ b/packages/client/ui-chat/package.json @@ -49,10 +49,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", @@ -95,7 +95,7 @@ "@deepseek-ai/dsh-settings": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-commands/package.json b/packages/client/ui-commands/package.json index 68c0cea7c7..b6f845f7d5 100644 --- a/packages/client/ui-commands/package.json +++ b/packages/client/ui-commands/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -55,7 +55,7 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index f24bce707f..4b950d9b3d 100644 --- a/packages/client/ui-conversation/package.json +++ b/packages/client/ui-conversation/package.json @@ -46,13 +46,13 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", diff --git a/packages/client/ui-deliverables/package.json b/packages/client/ui-deliverables/package.json index c098ecc327..98a5aafdaa 100644 --- a/packages/client/ui-deliverables/package.json +++ b/packages/client/ui-deliverables/package.json @@ -47,7 +47,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -62,7 +62,7 @@ "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/client/ui-directory-picker-browse/package.json b/packages/client/ui-directory-picker-browse/package.json index 293bd47169..90876a81a4 100644 --- a/packages/client/ui-directory-picker-browse/package.json +++ b/packages/client/ui-directory-picker-browse/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -54,7 +54,7 @@ "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "clsx": "^2.0.0" diff --git a/packages/client/ui-directory-picker-native/package.json b/packages/client/ui-directory-picker-native/package.json index 7328ea9270..d151c1cf62 100644 --- a/packages/client/ui-directory-picker-native/package.json +++ b/packages/client/ui-directory-picker-native/package.json @@ -40,7 +40,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-client-test-runtime": "workspace:*", @@ -48,7 +48,7 @@ "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/client/ui-dockkit/package.json b/packages/client/ui-dockkit/package.json index cb7c2ef43c..330417fec5 100644 --- a/packages/client/ui-dockkit/package.json +++ b/packages/client/ui-dockkit/package.json @@ -23,7 +23,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "@testing-library/react": "^16.1.0", @@ -39,6 +39,6 @@ "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/client/ui-goal/package.json b/packages/client/ui-goal/package.json index 75100555cd..c54cdb0f48 100644 --- a/packages/client/ui-goal/package.json +++ b/packages/client/ui-goal/package.json @@ -45,7 +45,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -62,7 +62,7 @@ "@deepseek-ai/dsh-goal": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/client/ui-input-trigger/package.json b/packages/client/ui-input-trigger/package.json index 27acb1878b..deb1a83286 100644 --- a/packages/client/ui-input-trigger/package.json +++ b/packages/client/ui-input-trigger/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:*", @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-client-ui-primitives": "workspace:*", "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-file-reference": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/ui-jobs/package.json b/packages/client/ui-jobs/package.json index 7a1fabd62c..6c60248fba 100644 --- a/packages/client/ui-jobs/package.json +++ b/packages/client/ui-jobs/package.json @@ -31,10 +31,10 @@ "access": "public" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-job-controller": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", diff --git a/packages/client/ui-layout/package.json b/packages/client/ui-layout/package.json index 4f124c1325..40f9feb045 100644 --- a/packages/client/ui-layout/package.json +++ b/packages/client/ui-layout/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", @@ -53,7 +53,7 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-client-ui-theme": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0" }, "files": [ diff --git a/packages/client/ui-message-feedback/package.json b/packages/client/ui-message-feedback/package.json index e56f6eab87..fc4c3c4647 100644 --- a/packages/client/ui-message-feedback/package.json +++ b/packages/client/ui-message-feedback/package.json @@ -43,7 +43,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -58,7 +58,7 @@ "@deepseek-ai/dsh-remote-mock": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-model-selection/package.json b/packages/client/ui-model-selection/package.json index 27e557c7ea..9344d5c997 100644 --- a/packages/client/ui-model-selection/package.json +++ b/packages/client/ui-model-selection/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -56,7 +56,7 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@types/react-dom": "~18.3.0", diff --git a/packages/client/ui-open-in-app/package.json b/packages/client/ui-open-in-app/package.json index bf1a0d2af4..d11ca13ea8 100644 --- a/packages/client/ui-open-in-app/package.json +++ b/packages/client/ui-open-in-app/package.json @@ -51,10 +51,10 @@ } }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/ui-permission-presets/package.json b/packages/client/ui-permission-presets/package.json index 71e21c281a..471ec99e50 100644 --- a/packages/client/ui-permission-presets/package.json +++ b/packages/client/ui-permission-presets/package.json @@ -45,11 +45,11 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-remote-mock": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", diff --git a/packages/client/ui-plan/package.json b/packages/client/ui-plan/package.json index 9a23b0624c..88bd2ef4d8 100644 --- a/packages/client/ui-plan/package.json +++ b/packages/client/ui-plan/package.json @@ -46,7 +46,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-client-store": "workspace:*", @@ -58,7 +58,7 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-plan-mode": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", diff --git a/packages/client/ui-plugin-manager/package.json b/packages/client/ui-plugin-manager/package.json index c450c4522b..c5e24aa76c 100644 --- a/packages/client/ui-plugin-manager/package.json +++ b/packages/client/ui-plugin-manager/package.json @@ -50,10 +50,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", @@ -85,7 +85,7 @@ ], "dependencies": { "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } diff --git a/packages/client/ui-primitives/package.json b/packages/client/ui-primitives/package.json index 7c3fe33377..0e4d01a714 100644 --- a/packages/client/ui-primitives/package.json +++ b/packages/client/ui-primitives/package.json @@ -26,7 +26,7 @@ "@deepseek-ai/dsh-client-store": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "clsx": "^2.0.0", "diff": "^9.0.0", @@ -57,6 +57,6 @@ "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/client/ui-reference/package.json b/packages/client/ui-reference/package.json index 0ffabad7b7..3d4a484a18 100644 --- a/packages/client/ui-reference/package.json +++ b/packages/client/ui-reference/package.json @@ -44,7 +44,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -59,7 +59,7 @@ "@deepseek-ai/dsh-session-reference": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-util-workspace-path": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*" }, "files": [ diff --git a/packages/client/ui-renderer/package.json b/packages/client/ui-renderer/package.json index 4235ded58f..29e69c24df 100644 --- a/packages/client/ui-renderer/package.json +++ b/packages/client/ui-renderer/package.json @@ -41,10 +41,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", diff --git a/packages/client/ui-schedule/package.json b/packages/client/ui-schedule/package.json index c7463d0b6a..f032329d21 100644 --- a/packages/client/ui-schedule/package.json +++ b/packages/client/ui-schedule/package.json @@ -41,7 +41,7 @@ "access": "public" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-session-controller": "workspace:*", @@ -57,7 +57,7 @@ "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/client/ui-session/package.json b/packages/client/ui-session/package.json index cee0cad387..fe83d2616e 100644 --- a/packages/client/ui-session/package.json +++ b/packages/client/ui-session/package.json @@ -41,10 +41,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-settings-account/package.json b/packages/client/ui-settings-account/package.json index b32c71683f..03a42eaff5 100644 --- a/packages/client/ui-settings-account/package.json +++ b/packages/client/ui-settings-account/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", @@ -71,6 +71,6 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/client/ui-settings-agent-loop/package.json b/packages/client/ui-settings-agent-loop/package.json index 25b2998dfa..88b949811d 100644 --- a/packages/client/ui-settings-agent-loop/package.json +++ b/packages/client/ui-settings-agent-loop/package.json @@ -41,10 +41,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index 0cff6e139e..a00f40a4c9 100644 --- a/packages/client/ui-settings-general/package.json +++ b/packages/client/ui-settings-general/package.json @@ -46,13 +46,13 @@ }, "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/client/ui-settings-models/package.json b/packages/client/ui-settings-models/package.json index dbe8933c3d..60d2f7ac60 100644 --- a/packages/client/ui-settings-models/package.json +++ b/packages/client/ui-settings-models/package.json @@ -41,7 +41,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-host-webserver": "workspace:*", @@ -53,14 +53,14 @@ "@deepseek-ai/dsh-client-ui-settings": "workspace:*", "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/dsh-remote-mock": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "files": [ "lib/index.js", diff --git a/packages/client/ui-settings-plugin-inventory/package.json b/packages/client/ui-settings-plugin-inventory/package.json index 7e32fc5d30..4922cf9343 100644 --- a/packages/client/ui-settings-plugin-inventory/package.json +++ b/packages/client/ui-settings-plugin-inventory/package.json @@ -43,7 +43,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -56,7 +56,7 @@ "@deepseek-ai/dsh-package-manifest": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", diff --git a/packages/client/ui-settings-plugins/package.json b/packages/client/ui-settings-plugins/package.json index 93a3550985..03d92c3ea9 100644 --- a/packages/client/ui-settings-plugins/package.json +++ b/packages/client/ui-settings-plugins/package.json @@ -40,10 +40,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", diff --git a/packages/client/ui-settings-shell/package.json b/packages/client/ui-settings-shell/package.json index daa21ee7aa..e6b7859680 100644 --- a/packages/client/ui-settings-shell/package.json +++ b/packages/client/ui-settings-shell/package.json @@ -41,10 +41,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-settings-subagent/package.json b/packages/client/ui-settings-subagent/package.json index e4fe2ec85e..d0da1ba3ca 100644 --- a/packages/client/ui-settings-subagent/package.json +++ b/packages/client/ui-settings-subagent/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-settings-web-search/package.json b/packages/client/ui-settings-web-search/package.json index 6bfa740f2f..3409e17e65 100644 --- a/packages/client/ui-settings-web-search/package.json +++ b/packages/client/ui-settings-web-search/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-settings/package.json b/packages/client/ui-settings/package.json index 832c7a2ce2..655a2ac47c 100644 --- a/packages/client/ui-settings/package.json +++ b/packages/client/ui-settings/package.json @@ -39,10 +39,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-test-runtime": "workspace:*", @@ -58,6 +58,6 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/client/ui-sidebar-browser/package.json b/packages/client/ui-sidebar-browser/package.json index 06d0913de3..b8523a5b04 100644 --- a/packages/client/ui-sidebar-browser/package.json +++ b/packages/client/ui-sidebar-browser/package.json @@ -44,10 +44,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/client/ui-sidebar-documentpreview/package.json b/packages/client/ui-sidebar-documentpreview/package.json index ec734c2343..ad0c6fe49b 100644 --- a/packages/client/ui-sidebar-documentpreview/package.json +++ b/packages/client/ui-sidebar-documentpreview/package.json @@ -46,10 +46,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-workspace-files": "workspace:*", @@ -94,6 +94,6 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/client/ui-sidebar-files/package.json b/packages/client/ui-sidebar-files/package.json index 5587c41830..d5b0a8f803 100644 --- a/packages/client/ui-sidebar-files/package.json +++ b/packages/client/ui-sidebar-files/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-workspace-files": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/client/ui-sidebar-right/package.json b/packages/client/ui-sidebar-right/package.json index f44a757783..b8c92a7ae3 100644 --- a/packages/client/ui-sidebar-right/package.json +++ b/packages/client/ui-sidebar-right/package.json @@ -43,10 +43,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-resources": "workspace:*", diff --git a/packages/client/ui-sidebar-terminal/package.json b/packages/client/ui-sidebar-terminal/package.json index d9c99fd988..e75cbb959d 100644 --- a/packages/client/ui-sidebar-terminal/package.json +++ b/packages/client/ui-sidebar-terminal/package.json @@ -42,10 +42,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-sidebar/package.json b/packages/client/ui-sidebar/package.json index 33b79491f2..076c7e3d3f 100644 --- a/packages/client/ui-sidebar/package.json +++ b/packages/client/ui-sidebar/package.json @@ -44,7 +44,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", @@ -58,7 +58,7 @@ "@deepseek-ai/dsh-client-ui-session": "workspace:*", "@deepseek-ai/dsh-client-ui-workspace": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "clsx": "^2.0.0" }, diff --git a/packages/client/ui-skill/package.json b/packages/client/ui-skill/package.json index cc8f76f0f0..54f5b19f79 100644 --- a/packages/client/ui-skill/package.json +++ b/packages/client/ui-skill/package.json @@ -45,7 +45,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -61,7 +61,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@deepseek-ai/dsh-client-ui-sidebar-right": "workspace:*", diff --git a/packages/client/ui-slots/package.json b/packages/client/ui-slots/package.json index 08139c6187..464072b246 100644 --- a/packages/client/ui-slots/package.json +++ b/packages/client/ui-slots/package.json @@ -25,13 +25,13 @@ "devDependencies": { "@deepseek-ai/dsh-client-store": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "files": [ "lib/index.js", "lib/types/**/*.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/client/ui-subagent/package.json b/packages/client/ui-subagent/package.json index d30a7d742e..d5c87a7518 100644 --- a/packages/client/ui-subagent/package.json +++ b/packages/client/ui-subagent/package.json @@ -47,7 +47,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-client-locale": "workspace:*", @@ -62,7 +62,7 @@ "@deepseek-ai/dsh-token-meter": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/ui-theme/package.json b/packages/client/ui-theme/package.json index 9783ead371..e63647fa62 100644 --- a/packages/client/ui-theme/package.json +++ b/packages/client/ui-theme/package.json @@ -41,10 +41,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", @@ -71,6 +71,6 @@ "watch": "tsdown --watch" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/client/ui-tool/package.json b/packages/client/ui-tool/package.json index 7c421224cd..d75d8e49e0 100644 --- a/packages/client/ui-tool/package.json +++ b/packages/client/ui-tool/package.json @@ -42,7 +42,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-spill-policy": "workspace:*", @@ -55,7 +55,7 @@ "@deepseek-ai/dsh-tool-session-query": "workspace:*", "@deepseek-ai/dsh-tool-terminal": "workspace:*", "@deepseek-ai/dsh-spill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/client/ui-trajectory/package.json b/packages/client/ui-trajectory/package.json index 7af88eda53..742e2b7846 100644 --- a/packages/client/ui-trajectory/package.json +++ b/packages/client/ui-trajectory/package.json @@ -43,7 +43,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -56,7 +56,7 @@ "@deepseek-ai/dsh-tools": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "@deepseek-ai/dsh-client-store": "workspace:*", diff --git a/packages/client/ui-user-questions/package.json b/packages/client/ui-user-questions/package.json index 659125a54c..e8d377742b 100644 --- a/packages/client/ui-user-questions/package.json +++ b/packages/client/ui-user-questions/package.json @@ -44,10 +44,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/ui-workflow-run/package.json b/packages/client/ui-workflow-run/package.json index f3bba66b09..1c59474572 100644 --- a/packages/client/ui-workflow-run/package.json +++ b/packages/client/ui-workflow-run/package.json @@ -50,7 +50,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-session-controller": "workspace:*", @@ -68,7 +68,7 @@ "@deepseek-ai/dsh-tool-workflow": "workspace:*", "@deepseek-ai/dsh-workflow": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0" } } diff --git a/packages/client/ui-workspace/package.json b/packages/client/ui-workspace/package.json index 65ddcbcdd2..9fec8c9c93 100644 --- a/packages/client/ui-workspace/package.json +++ b/packages/client/ui-workspace/package.json @@ -48,10 +48,10 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/client/web/package.json b/packages/client/web/package.json index 9647a9201c..023c0ac544 100644 --- a/packages/client/web/package.json +++ b/packages/client/web/package.json @@ -27,7 +27,7 @@ }, "license": "MIT", "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-client-store": "workspace:*", "@deepseek-ai/dsh-client-ui-dockkit": "workspace:*", @@ -36,14 +36,14 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0", "typescript": "^6.0.3", "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "files": [ "lib/index.js", diff --git a/packages/compaction/command-compact/package.json b/packages/compaction/command-compact/package.json index 2093ae3dd1..53dedea10d 100644 --- a/packages/compaction/command-compact/package.json +++ b/packages/compaction/command-compact/package.json @@ -29,16 +29,16 @@ "peerDependencies": { "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/compaction/compaction-basic/package.json b/packages/compaction/compaction-basic/package.json index a4a660847d..076d88f18b 100644 --- a/packages/compaction/compaction-basic/package.json +++ b/packages/compaction/compaction-basic/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", @@ -43,12 +43,12 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/compaction/compaction-image-offload/package.json b/packages/compaction/compaction-image-offload/package.json index 27d4877e4d..a77e71796a 100644 --- a/packages/compaction/compaction-image-offload/package.json +++ b/packages/compaction/compaction-image-offload/package.json @@ -31,14 +31,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/compaction/compaction-tool-result-pruner/package.json b/packages/compaction/compaction-tool-result-pruner/package.json index 5567dc501c..051e88585e 100644 --- a/packages/compaction/compaction-tool-result-pruner/package.json +++ b/packages/compaction/compaction-tool-result-pruner/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -35,12 +35,12 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/compaction/compaction/package.json b/packages/compaction/compaction/package.json index 8528a283e6..430219d464 100644 --- a/packages/compaction/compaction/package.json +++ b/packages/compaction/compaction/package.json @@ -46,7 +46,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", @@ -54,6 +54,6 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/computer-use/computer-use/package.json b/packages/computer-use/computer-use/package.json index 1301e8097c..275924505d 100644 --- a/packages/computer-use/computer-use/package.json +++ b/packages/computer-use/computer-use/package.json @@ -32,11 +32,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/context/agent-instructions/package.json b/packages/context/agent-instructions/package.json index 81111e3ade..5da6d7e009 100644 --- a/packages/context/agent-instructions/package.json +++ b/packages/context/agent-instructions/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", @@ -38,11 +38,11 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/context/file-reference-local/package.json b/packages/context/file-reference-local/package.json index 48410c3c47..b4a3997116 100644 --- a/packages/context/file-reference-local/package.json +++ b/packages/context/file-reference-local/package.json @@ -32,20 +32,20 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-file-reference": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-file-reference": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/context/file-reference/package.json b/packages/context/file-reference/package.json index 51511ee0c5..88d1410c2a 100644 --- a/packages/context/file-reference/package.json +++ b/packages/context/file-reference/package.json @@ -37,10 +37,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/context/session-reference/package.json b/packages/context/session-reference/package.json index 6f05437bec..f2453f9239 100644 --- a/packages/context/session-reference/package.json +++ b/packages/context/session-reference/package.json @@ -46,11 +46,11 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -74,9 +74,9 @@ } }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", diff --git a/packages/context/time-context/package.json b/packages/context/time-context/package.json index e428b44aac..d22ffa7366 100644 --- a/packages/context/time-context/package.json +++ b/packages/context/time-context/package.json @@ -33,11 +33,11 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -45,7 +45,7 @@ "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/context/tmux-context/package.json b/packages/context/tmux-context/package.json index a3c925adb9..bcd67705fc 100644 --- a/packages/context/tmux-context/package.json +++ b/packages/context/tmux-context/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { @@ -44,7 +44,7 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/core/agent-default-model/package.json b/packages/core/agent-default-model/package.json index 6ba6e8276c..c4a00536ce 100644 --- a/packages/core/agent-default-model/package.json +++ b/packages/core/agent-default-model/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-config-editor": "workspace:*" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-settings": "workspace:*" } } diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index 524b467263..30aea4c21a 100644 --- a/packages/core/agent-loop/package.json +++ b/packages/core/agent-loop/package.json @@ -31,7 +31,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -45,11 +45,11 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm-pi-ai": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", diff --git a/packages/core/agent-tool-presentation/package.json b/packages/core/agent-tool-presentation/package.json index dcec24466c..d50567c802 100644 --- a/packages/core/agent-tool-presentation/package.json +++ b/packages/core/agent-tool-presentation/package.json @@ -27,11 +27,11 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -40,6 +40,6 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/core/agent/package.json b/packages/core/agent/package.json index 984ebcea87..99d7fece31 100644 --- a/packages/core/agent/package.json +++ b/packages/core/agent/package.json @@ -46,7 +46,7 @@ "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-workspace": { @@ -64,6 +64,6 @@ "@deepseek-ai/dsh-typert-registry": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/core/scope/package.json b/packages/core/scope/package.json index 36921e56a6..805b64c1cf 100644 --- a/packages/core/scope/package.json +++ b/packages/core/scope/package.json @@ -33,10 +33,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/core/session/package.json b/packages/core/session/package.json index 5b39f00434..26cc9ee9ea 100644 --- a/packages/core/session/package.json +++ b/packages/core/session/package.json @@ -46,14 +46,14 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-scope": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-typert-registry": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/core/system-prompt/package.json b/packages/core/system-prompt/package.json index bee1cf6b1a..9cc4976a07 100644 --- a/packages/core/system-prompt/package.json +++ b/packages/core/system-prompt/package.json @@ -35,15 +35,15 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/core/tools/package.json b/packages/core/tools/package.json index 8036ff79c8..8e97f843cd 100644 --- a/packages/core/tools/package.json +++ b/packages/core/tools/package.json @@ -41,7 +41,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", @@ -56,10 +56,10 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", diff --git a/packages/credentials/authorization/package.json b/packages/credentials/authorization/package.json index 6cd07c8e2b..2eaf6b40af 100644 --- a/packages/credentials/authorization/package.json +++ b/packages/credentials/authorization/package.json @@ -40,12 +40,12 @@ "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/credentials/credentials-local/package.json b/packages/credentials/credentials-local/package.json index 15e7a86683..541415dde0 100644 --- a/packages/credentials/credentials-local/package.json +++ b/packages/credentials/credentials-local/package.json @@ -31,11 +31,11 @@ "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "chokidar": "^4.0.3", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "yaml": "^2.9.0" }, "devDependencies": { @@ -43,6 +43,6 @@ "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/credentials/credentials/package.json b/packages/credentials/credentials/package.json index 999563ccb8..68e33c0ca9 100644 --- a/packages/credentials/credentials/package.json +++ b/packages/credentials/credentials/package.json @@ -37,11 +37,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-invariants": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-invariants": "workspace:*" }, "dependencies": { diff --git a/packages/credentials/deepseek-account-platform/package.json b/packages/credentials/deepseek-account-platform/package.json index 7a7b07802c..14b6a698df 100644 --- a/packages/credentials/deepseek-account-platform/package.json +++ b/packages/credentials/deepseek-account-platform/package.json @@ -32,21 +32,21 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@deepseek-ai/dsh-authorization": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-deepseek-account": "workspace:*", "@deepseek-ai/dsh-authorization": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" } } diff --git a/packages/credentials/deepseek-account/package.json b/packages/credentials/deepseek-account/package.json index 3c9fc7965b..9199faca05 100644 --- a/packages/credentials/deepseek-account/package.json +++ b/packages/credentials/deepseek-account/package.json @@ -32,11 +32,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*" } } diff --git a/packages/deliverables/tool-present/package.json b/packages/deliverables/tool-present/package.json index ff9cd1ecdd..f15a4d5209 100644 --- a/packages/deliverables/tool-present/package.json +++ b/packages/deliverables/tool-present/package.json @@ -32,10 +32,10 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -44,7 +44,7 @@ "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/deliverables/workspace-changes/package.json b/packages/deliverables/workspace-changes/package.json index 8c57b7c123..9a5b84c082 100644 --- a/packages/deliverables/workspace-changes/package.json +++ b/packages/deliverables/workspace-changes/package.json @@ -32,20 +32,20 @@ "lib/types/**/*.d.ts" ], "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "diff": "^9.0.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", diff --git a/packages/document/office-to-pdf/package.json b/packages/document/office-to-pdf/package.json index f40739716f..6f1c45502f 100644 --- a/packages/document/office-to-pdf/package.json +++ b/packages/document/office-to-pdf/package.json @@ -44,19 +44,19 @@ "lib/typert.remote-client.d.ts" ], "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-api-workspace-files": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" }, "dependencies": { "@deepseek-ai/libreoffice-kit": "0.0.1", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "zod": "^4.4.3" diff --git a/packages/experimental/agent-team-profile/package.json b/packages/experimental/agent-team-profile/package.json index 799425de2d..3c58e78ecf 100644 --- a/packages/experimental/agent-team-profile/package.json +++ b/packages/experimental/agent-team-profile/package.json @@ -43,11 +43,11 @@ "@deepseek-ai/dsh-experimental-tool-agent-team": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis": "workspace:~", "js-yaml": "^4.2.0" } } diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 4755adc008..119af0da93 100644 --- a/packages/experimental/agent-team/package.json +++ b/packages/experimental/agent-team/package.json @@ -56,11 +56,11 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -71,7 +71,7 @@ "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/experimental/api-speech-to-text/package.json b/packages/experimental/api-speech-to-text/package.json index 0be6c5f62b..80c3b31208 100644 --- a/packages/experimental/api-speech-to-text/package.json +++ b/packages/experimental/api-speech-to-text/package.json @@ -44,16 +44,16 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } diff --git a/packages/experimental/auto-review/package.json b/packages/experimental/auto-review/package.json index a1d6ab5766..1e844007f6 100644 --- a/packages/experimental/auto-review/package.json +++ b/packages/experimental/auto-review/package.json @@ -34,7 +34,7 @@ "@deepseek-ai/dsh-permission-presets": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*" @@ -67,7 +67,7 @@ "@deepseek-ai/dsh-tool-subagent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "publishConfig": { "access": "public" diff --git a/packages/experimental/browser-use-chrome-devtools-mcp/package.json b/packages/experimental/browser-use-chrome-devtools-mcp/package.json index e49230f1e8..95b7555b2e 100644 --- a/packages/experimental/browser-use-chrome-devtools-mcp/package.json +++ b/packages/experimental/browser-use-chrome-devtools-mcp/package.json @@ -31,16 +31,16 @@ "chrome-devtools-mcp": "1.9.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", diff --git a/packages/experimental/browser-use-playwright-mcp/package.json b/packages/experimental/browser-use-playwright-mcp/package.json index 8ec4ebfb12..eea3441ee8 100644 --- a/packages/experimental/browser-use-playwright-mcp/package.json +++ b/packages/experimental/browser-use-playwright-mcp/package.json @@ -31,16 +31,16 @@ "@playwright/mcp": "0.0.80" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", diff --git a/packages/experimental/browser-use-runtime/package.json b/packages/experimental/browser-use-runtime/package.json index 48fa3a6136..c4e5ee7196 100644 --- a/packages/experimental/browser-use-runtime/package.json +++ b/packages/experimental/browser-use-runtime/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-mcp-client": "workspace:*", @@ -41,10 +41,10 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-mcp-client": "workspace:*", @@ -58,8 +58,8 @@ "@deepseek-ai/dsh-mcp-resources": "workspace:*", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-attachment-local": "workspace:*", "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*" } diff --git a/packages/experimental/browser-use-stagehand-native/package.json b/packages/experimental/browser-use-stagehand-native/package.json index 11574ac990..c1af40b350 100644 --- a/packages/experimental/browser-use-stagehand-native/package.json +++ b/packages/experimental/browser-use-stagehand-native/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-browser-use": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", @@ -43,15 +43,15 @@ "@deepseek-ai/dsh-experimental-browser-use-runtime": "workspace:*", "@deepseek-ai/dsh-mcp-client": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3", "@deepseek-ai/dsh-subprocess": "workspace:*", "@puppeteer/browsers": "3.2.2" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/experimental/client-ui-agent-team/package.json b/packages/experimental/client-ui-agent-team/package.json index a7f95325e1..242d368795 100644 --- a/packages/experimental/client-ui-agent-team/package.json +++ b/packages/experimental/client-ui-agent-team/package.json @@ -57,7 +57,7 @@ "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -76,7 +76,7 @@ "@testing-library/react": "^16.1.0", "@types/react": "~18.3.1", "@types/react-dom": "~18.3.0", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/experimental/client-ui-voice-input/package.json b/packages/experimental/client-ui-voice-input/package.json index 83b8a5035b..bf775ee89d 100644 --- a/packages/experimental/client-ui-voice-input/package.json +++ b/packages/experimental/client-ui-voice-input/package.json @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": {}, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", @@ -51,7 +51,7 @@ "@deepseek-ai/dsh-client-ui-plugin-manager": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-client-locale": "workspace:*", diff --git a/packages/experimental/computer-use-cua-driver-mcp/package.json b/packages/experimental/computer-use-cua-driver-mcp/package.json index f2fd4833d8..194f3d75e8 100644 --- a/packages/experimental/computer-use-cua-driver-mcp/package.json +++ b/packages/experimental/computer-use-cua-driver-mcp/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-mcp-client": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-computer-use": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-computer-use": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", diff --git a/packages/experimental/computer-use-cua-driver-native/package.json b/packages/experimental/computer-use-cua-driver-native/package.json index 576e278077..cac34e5873 100644 --- a/packages/experimental/computer-use-cua-driver-native/package.json +++ b/packages/experimental/computer-use-cua-driver-native/package.json @@ -27,21 +27,21 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-computer-use": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { "@deepseek-ai/dsh-mcp-client": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@trycua/cua-driver": "0.28.0", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/experimental/inspector/package.json b/packages/experimental/inspector/package.json index 6df2f5ccaa..86ad829569 100644 --- a/packages/experimental/inspector/package.json +++ b/packages/experimental/inspector/package.json @@ -43,19 +43,19 @@ "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-crypto": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "ws": "^8.21.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-host-webserver": "workspace:*", "@types/ws": "^8.18.1", "playwright": "^1.49.0", diff --git a/packages/experimental/ptc-runtime-python/package.json b/packages/experimental/ptc-runtime-python/package.json index 6a4e30d0e0..973e6aeb0b 100644 --- a/packages/experimental/ptc-runtime-python/package.json +++ b/packages/experimental/ptc-runtime-python/package.json @@ -26,17 +26,17 @@ "peerDependencies": { "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-util-values": "workspace:*" }, "devDependencies": { "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-util-values": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "publishConfig": { "access": "public" diff --git a/packages/experimental/speech-to-text-sensevoice/package.json b/packages/experimental/speech-to-text-sensevoice/package.json index 603a5d5fb8..1feb884e68 100644 --- a/packages/experimental/speech-to-text-sensevoice/package.json +++ b/packages/experimental/speech-to-text-sensevoice/package.json @@ -33,18 +33,18 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@deepseek-ai/dsh-timeout": "workspace:*", "zod": "^4.4.3", "sherpa-onnx-node": "1.13.8" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-experimental-speech-to-text": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", diff --git a/packages/experimental/speech-to-text/package.json b/packages/experimental/speech-to-text/package.json index c00434a19e..93a5dddd54 100644 --- a/packages/experimental/speech-to-text/package.json +++ b/packages/experimental/speech-to-text/package.json @@ -37,19 +37,19 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-settings": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-config-editor": "workspace:*", "@deepseek-ai/dsh-settings": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-loader": { diff --git a/packages/experimental/tool-agent-team/package.json b/packages/experimental/tool-agent-team/package.json index a3a77f9c50..de51f63edb 100644 --- a/packages/experimental/tool-agent-team/package.json +++ b/packages/experimental/tool-agent-team/package.json @@ -29,7 +29,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -37,7 +37,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -55,7 +55,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-experimental-agent-team": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*" } diff --git a/packages/experimental/voice-input-bundle/package.json b/packages/experimental/voice-input-bundle/package.json index f692cf044c..e84a1589e8 100644 --- a/packages/experimental/voice-input-bundle/package.json +++ b/packages/experimental/voice-input-bundle/package.json @@ -39,11 +39,11 @@ "@deepseek-ai/dsh-experimental-client-ui-voice-input": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "js-yaml": "^4.2.0" }, "dsh": { diff --git a/packages/experimental/webworker-packer/package.json b/packages/experimental/webworker-packer/package.json index 668b82bc3e..3485fd6d61 100644 --- a/packages/experimental/webworker-packer/package.json +++ b/packages/experimental/webworker-packer/package.json @@ -33,7 +33,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-experimental-webworker-runtime": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-session-format": "workspace:*", @@ -43,11 +43,11 @@ "picomatch": "^4.0.4" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@types/js-yaml": "^4.0.9", "@types/picomatch": "^3.0.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/experimental/webworker-runtime/package.json b/packages/experimental/webworker-runtime/package.json index 2fc41811cd..f535fa1a06 100644 --- a/packages/experimental/webworker-runtime/package.json +++ b/packages/experimental/webworker-runtime/package.json @@ -38,15 +38,15 @@ "@deepseek-ai/dsh-client-web": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-bash-sandbox": "workspace:*", @@ -61,7 +61,7 @@ "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", - "@deepseek-ai/node-addon-system": "workspace:^", + "@deepseek-ai/node-addon-system": "workspace:~", "@types/picomatch": "^3.0.2", "@types/readable-stream": "^4.0.24", "chokidar": "^5.0.0" diff --git a/packages/extensions/cordis-client-runner/package.json b/packages/extensions/cordis-client-runner/package.json index 179c99411b..24e98d9b8b 100644 --- a/packages/extensions/cordis-client-runner/package.json +++ b/packages/extensions/cordis-client-runner/package.json @@ -42,16 +42,16 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-client-modules": "workspace:*", "@deepseek-ai/dsh-client-ui-renderer": "workspace:*", "@deepseek-ai/dsh-client-ui-theme": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0", "@deepseek-ai/dsh-util-values": "workspace:*" }, diff --git a/packages/extensions/cordis-host-runner/package.json b/packages/extensions/cordis-host-runner/package.json index 6806581708..75935f2799 100644 --- a/packages/extensions/cordis-host-runner/package.json +++ b/packages/extensions/cordis-host-runner/package.json @@ -45,11 +45,11 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -59,8 +59,8 @@ "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/extensions/tool-cordis/package.json b/packages/extensions/tool-cordis/package.json index dedd950ab4..7691ec1e29 100644 --- a/packages/extensions/tool-cordis/package.json +++ b/packages/extensions/tool-cordis/package.json @@ -32,22 +32,22 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-group": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-cordis-host-runner": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/extensions/ui-cordis/package.json b/packages/extensions/ui-cordis/package.json index d04b3b1f1f..ab85f1e314 100644 --- a/packages/extensions/ui-cordis/package.json +++ b/packages/extensions/ui-cordis/package.json @@ -46,7 +46,7 @@ }, "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-api-remotes": "workspace:*", @@ -61,7 +61,7 @@ "@deepseek-ai/dsh-client-ui-slots": "workspace:*", "@deepseek-ai/dsh-client-ui-tool": "workspace:*", "@types/react": "~18.3.1", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "react": "^18.2.0" }, "files": [ diff --git a/packages/feedback/command-feedback/package.json b/packages/feedback/command-feedback/package.json index 1b74250577..75107af4aa 100644 --- a/packages/feedback/command-feedback/package.json +++ b/packages/feedback/command-feedback/package.json @@ -47,22 +47,22 @@ "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "dependencies": { "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/feedback/message-feedback/package.json b/packages/feedback/message-feedback/package.json index b393afb435..b235d59266 100644 --- a/packages/feedback/message-feedback/package.json +++ b/packages/feedback/message-feedback/package.json @@ -49,23 +49,23 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-command-feedback": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-command-feedback": "workspace:*" } } diff --git a/packages/fs/fs-local/package.json b/packages/fs/fs-local/package.json index b2f474907c..43ff5238f7 100644 --- a/packages/fs/fs-local/package.json +++ b/packages/fs/fs-local/package.json @@ -28,16 +28,16 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "chokidar": "^4.0.3", "koffi": "^3.1.0", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/fs/fs-observation-policy/package.json b/packages/fs/fs-observation-policy/package.json index 78b209466a..3fda7e35f7 100644 --- a/packages/fs/fs-observation-policy/package.json +++ b/packages/fs/fs-observation-policy/package.json @@ -28,11 +28,11 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/fs/fs-sandbox/package.json b/packages/fs/fs-sandbox/package.json index 42883ae215..a0c9d6c4e4 100644 --- a/packages/fs/fs-sandbox/package.json +++ b/packages/fs/fs-sandbox/package.json @@ -31,14 +31,14 @@ "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/fs/fs/package.json b/packages/fs/fs/package.json index c9b057bcd7..0689f950e5 100644 --- a/packages/fs/fs/package.json +++ b/packages/fs/fs/package.json @@ -36,13 +36,13 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/fs/tool-fs-search/package.json b/packages/fs/tool-fs-search/package.json index 75a5edae23..dc2dd213fa 100644 --- a/packages/fs/tool-fs-search/package.json +++ b/packages/fs/tool-fs-search/package.json @@ -28,7 +28,7 @@ "license": "MIT", "dependencies": { "@vscode/ripgrep": "^1.18.0", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", @@ -39,7 +39,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-scope": "workspace:*" } } diff --git a/packages/fs/tool-fs/package.json b/packages/fs/tool-fs/package.json index d548ab5eb4..b5d0973f01 100644 --- a/packages/fs/tool-fs/package.json +++ b/packages/fs/tool-fs/package.json @@ -28,7 +28,7 @@ "license": "MIT", "dependencies": { "diff": "^9.0.0", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-attachment": "workspace:*", @@ -40,7 +40,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -58,7 +58,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-ptc-runtime": "workspace:*" diff --git a/packages/fs/tool-str-replace-editor/package.json b/packages/fs/tool-str-replace-editor/package.json index d54181f075..133124e89a 100644 --- a/packages/fs/tool-str-replace-editor/package.json +++ b/packages/fs/tool-str-replace-editor/package.json @@ -30,10 +30,10 @@ "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -48,7 +48,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/command-goal/package.json b/packages/goal/command-goal/package.json index c1bf056a34..7af99b23d8 100644 --- a/packages/goal/command-goal/package.json +++ b/packages/goal/command-goal/package.json @@ -30,10 +30,10 @@ "@deepseek-ai/dsh-commands": "workspace:*", "@deepseek-ai/dsh-goal": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -41,7 +41,7 @@ "@deepseek-ai/dsh-goal": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/goal-round-driver/package.json b/packages/goal/goal-round-driver/package.json index ae2b0a808f..a229bfdc4a 100644 --- a/packages/goal/goal-round-driver/package.json +++ b/packages/goal/goal-round-driver/package.json @@ -37,7 +37,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -49,7 +49,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/goal/goal/package.json b/packages/goal/goal/package.json index f332a6ffa1..4d3ad76314 100644 --- a/packages/goal/goal/package.json +++ b/packages/goal/goal/package.json @@ -61,10 +61,10 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { @@ -83,6 +83,6 @@ "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/goal/tool-goal/package.json b/packages/goal/tool-goal/package.json index 2a57e1f1c6..64f4be5c5d 100644 --- a/packages/goal/tool-goal/package.json +++ b/packages/goal/tool-goal/package.json @@ -33,14 +33,14 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", @@ -49,7 +49,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/guard/repeat-tool-reminder/package.json b/packages/guard/repeat-tool-reminder/package.json index 057aa6226b..8f60013995 100644 --- a/packages/guard/repeat-tool-reminder/package.json +++ b/packages/guard/repeat-tool-reminder/package.json @@ -27,12 +27,12 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -41,7 +41,7 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/guard/timeout-policy/package.json b/packages/guard/timeout-policy/package.json index 0bebbf4858..50ddad5f5f 100644 --- a/packages/guard/timeout-policy/package.json +++ b/packages/guard/timeout-policy/package.json @@ -30,12 +30,12 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/hooks/hook-protocol/package.json b/packages/hooks/hook-protocol/package.json index 70d3d2e81f..60793f3889 100644 --- a/packages/hooks/hook-protocol/package.json +++ b/packages/hooks/hook-protocol/package.json @@ -35,12 +35,12 @@ "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/hooks/hooks-claude-code/package.json b/packages/hooks/hooks-claude-code/package.json index bba5470e14..f95f4b58e8 100644 --- a/packages/hooks/hooks-claude-code/package.json +++ b/packages/hooks/hooks-claude-code/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -36,7 +36,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/hooks/hooks-codex/package.json b/packages/hooks/hooks-codex/package.json index 3ea3a780a4..aab639e436 100644 --- a/packages/hooks/hooks-codex/package.json +++ b/packages/hooks/hooks-codex/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -35,7 +35,7 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "devDependencies": { @@ -50,7 +50,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/host/directory-picker-auto/package.json b/packages/host/directory-picker-auto/package.json index d93a2fce96..96a2b18e35 100644 --- a/packages/host/directory-picker-auto/package.json +++ b/packages/host/directory-picker-auto/package.json @@ -27,8 +27,8 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:*", "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:*", "@deepseek-ai/dsh-host-directory-picker-browse": "workspace:*", @@ -36,9 +36,9 @@ "@deepseek-ai/dsh-host-webserver": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-ui-directory-picker-browse": "workspace:*", "@deepseek-ai/dsh-client-ui-directory-picker-native": "workspace:*", "@deepseek-ai/dsh-host-directory-picker": "workspace:*", diff --git a/packages/host/directory-picker-browse/package.json b/packages/host/directory-picker-browse/package.json index fdfce63818..47f10696d0 100644 --- a/packages/host/directory-picker-browse/package.json +++ b/packages/host/directory-picker-browse/package.json @@ -28,12 +28,12 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-host-directory-picker": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/host/directory-picker-native/package.json b/packages/host/directory-picker-native/package.json index 3ff3599ef3..875af145c6 100644 --- a/packages/host/directory-picker-native/package.json +++ b/packages/host/directory-picker-native/package.json @@ -37,10 +37,10 @@ "koffi": "^3.1.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "tsx": "^4.19.2" } } diff --git a/packages/host/directory-picker/package.json b/packages/host/directory-picker/package.json index 6ef0b99e7b..b7b77204ce 100644 --- a/packages/host/directory-picker/package.json +++ b/packages/host/directory-picker/package.json @@ -32,9 +32,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/host/frontend-static/package.json b/packages/host/frontend-static/package.json index 64ad33c7a7..20654e868c 100644 --- a/packages/host/frontend-static/package.json +++ b/packages/host/frontend-static/package.json @@ -29,16 +29,16 @@ "peerDependencies": { "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-credentials-local": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/host/open-in-app/package.json b/packages/host/open-in-app/package.json index 8874731079..6473170e4b 100644 --- a/packages/host/open-in-app/package.json +++ b/packages/host/open-in-app/package.json @@ -39,14 +39,14 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-native-command": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-host-webserver": "workspace:*" } } diff --git a/packages/host/plugin-inventory/package.json b/packages/host/plugin-inventory/package.json index 3f82ea13a8..136a9eab59 100644 --- a/packages/host/plugin-inventory/package.json +++ b/packages/host/plugin-inventory/package.json @@ -47,11 +47,11 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-agent-preset-registry": { @@ -61,10 +61,10 @@ "devDependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-package-manifest": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/host/product-telemetry-otel/package.json b/packages/host/product-telemetry-otel/package.json index 9b831237c4..a480455594 100644 --- a/packages/host/product-telemetry-otel/package.json +++ b/packages/host/product-telemetry-otel/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@opentelemetry/api": "^1.9.1", "@opentelemetry/api-logs": "^0.220.0", "@opentelemetry/core": "2.9.0", @@ -37,11 +37,11 @@ "@opentelemetry/sdk-logs": "^0.220.0" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-loader-smoke": "workspace:*" } diff --git a/packages/host/webserver/package.json b/packages/host/webserver/package.json index bcf79225bd..9df6eaa1e3 100644 --- a/packages/host/webserver/package.json +++ b/packages/host/webserver/package.json @@ -27,15 +27,15 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "compression": "^1.8.1", "negotiator": "^1.0.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@types/compression": "^1.8.1", "@types/negotiator": "^0.6.5" } diff --git a/packages/identity/anonymous-user-id/package.json b/packages/identity/anonymous-user-id/package.json index a1cdbbe8f0..457c4c470e 100644 --- a/packages/identity/anonymous-user-id/package.json +++ b/packages/identity/anonymous-user-id/package.json @@ -29,11 +29,11 @@ "peerDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/interaction/commands/package.json b/packages/interaction/commands/package.json index d4de2cc181..d92c2189fb 100644 --- a/packages/interaction/commands/package.json +++ b/packages/interaction/commands/package.json @@ -61,7 +61,7 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-util-crypto": "workspace:*", @@ -76,6 +76,6 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/interaction/permission-presets/package.json b/packages/interaction/permission-presets/package.json index 5bc3f5a0b7..fba00823fd 100644 --- a/packages/interaction/permission-presets/package.json +++ b/packages/interaction/permission-presets/package.json @@ -62,10 +62,10 @@ "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { @@ -78,7 +78,7 @@ "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-settings": "workspace:*" } } diff --git a/packages/interaction/tool-ask-user/package.json b/packages/interaction/tool-ask-user/package.json index 1d099cc99e..bebe7f81c4 100644 --- a/packages/interaction/tool-ask-user/package.json +++ b/packages/interaction/tool-ask-user/package.json @@ -30,7 +30,7 @@ "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -38,6 +38,6 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/interaction/user-approval/package.json b/packages/interaction/user-approval/package.json index 3d66b93924..029719c966 100644 --- a/packages/interaction/user-approval/package.json +++ b/packages/interaction/user-approval/package.json @@ -44,10 +44,10 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -57,6 +57,6 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/interaction/user-questions/package.json b/packages/interaction/user-questions/package.json index d4b5d2b72b..02c0e6cd2e 100644 --- a/packages/interaction/user-questions/package.json +++ b/packages/interaction/user-questions/package.json @@ -35,12 +35,12 @@ "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/jobs/jobs-local/package.json b/packages/jobs/jobs-local/package.json index 4dc3e18fc1..fdbadaa52c 100644 --- a/packages/jobs/jobs-local/package.json +++ b/packages/jobs/jobs-local/package.json @@ -31,14 +31,14 @@ "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", @@ -46,6 +46,6 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/jobs/jobs/package.json b/packages/jobs/jobs/package.json index adba36e563..295dff59f5 100644 --- a/packages/jobs/jobs/package.json +++ b/packages/jobs/jobs/package.json @@ -46,7 +46,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-workspace": { @@ -59,6 +59,6 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/jobs/tool-jobs/package.json b/packages/jobs/tool-jobs/package.json index 10f4755a62..15e568fe26 100644 --- a/packages/jobs/tool-jobs/package.json +++ b/packages/jobs/tool-jobs/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -36,7 +36,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -47,6 +47,6 @@ "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-jobs-local": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/llm/deepseek-llm-api-extensions/package.json b/packages/llm/deepseek-llm-api-extensions/package.json index d5b27e916f..f6a1a21b16 100644 --- a/packages/llm/deepseek-llm-api-extensions/package.json +++ b/packages/llm/deepseek-llm-api-extensions/package.json @@ -32,9 +32,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index 83d17ede74..aea25af057 100644 --- a/packages/llm/llm-deepseek/package.json +++ b/packages/llm/llm-deepseek/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", @@ -38,18 +38,18 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-deepseek-account": "workspace:*" }, "dependencies": { - "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/cosmokit": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "eventsource-parser": "^3.1.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*", @@ -66,8 +66,8 @@ "@deepseek-ai/dsh-session-log-deepseek": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", diff --git a/packages/llm/llm-pi-ai/package.json b/packages/llm/llm-pi-ai/package.json index 945007ee86..83e9e1178d 100644 --- a/packages/llm/llm-pi-ai/package.json +++ b/packages/llm/llm-pi-ai/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-authorization": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", @@ -35,16 +35,16 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@earendil-works/pi-ai": "^0.85.1" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-authorization": "workspace:*", "@deepseek-ai/dsh-credentials": "workspace:*", @@ -54,7 +54,7 @@ "@deepseek-ai/dsh-llm-deepseek": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-settings": "workspace:*" }, "peerDependenciesMeta": { diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 3b35e5dbd2..041814f8d8 100644 --- a/packages/llm/llm-retry/package.json +++ b/packages/llm/llm-retry/package.json @@ -42,17 +42,17 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -66,7 +66,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/llm/llm/package.json b/packages/llm/llm/package.json index cb31bbc027..f01f55036f 100644 --- a/packages/llm/llm/package.json +++ b/packages/llm/llm/package.json @@ -61,11 +61,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-util-crypto": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", @@ -75,6 +75,6 @@ "devDependencies": { "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/llm/plugin-package-inventory-deepseek/package.json b/packages/llm/plugin-package-inventory-deepseek/package.json index cbd31c2f69..8b4cd60bc2 100644 --- a/packages/llm/plugin-package-inventory-deepseek/package.json +++ b/packages/llm/plugin-package-inventory-deepseek/package.json @@ -33,11 +33,11 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", @@ -50,9 +50,9 @@ }, "devDependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", diff --git a/packages/llm/token-meter/package.json b/packages/llm/token-meter/package.json index e3c797708b..99fe7d05e5 100644 --- a/packages/llm/token-meter/package.json +++ b/packages/llm/token-meter/package.json @@ -36,7 +36,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-retry": "workspace:*", @@ -46,11 +46,11 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-retry": "workspace:*", diff --git a/packages/lsp/lsp-stdio/package.json b/packages/lsp/lsp-stdio/package.json index c99723716a..559825ffdf 100644 --- a/packages/lsp/lsp-stdio/package.json +++ b/packages/lsp/lsp-stdio/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -37,10 +37,10 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", diff --git a/packages/lsp/lsp/package.json b/packages/lsp/lsp/package.json index 56c77c7fd9..0a202bb16a 100644 --- a/packages/lsp/lsp/package.json +++ b/packages/lsp/lsp/package.json @@ -29,11 +29,11 @@ "peerDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/lsp/tool-lsp/package.json b/packages/lsp/tool-lsp/package.json index 406e7fc174..5c0c40fd05 100644 --- a/packages/lsp/tool-lsp/package.json +++ b/packages/lsp/tool-lsp/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-lsp": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", @@ -36,10 +36,10 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/mcp/mcp-client/package.json b/packages/mcp/mcp-client/package.json index 8d6d336506..00f9f2deb1 100644 --- a/packages/mcp/mcp-client/package.json +++ b/packages/mcp/mcp-client/package.json @@ -33,12 +33,12 @@ "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-mcp-resources": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@modelcontextprotocol/client": "2.0.0", "@deepseek-ai/dsh-util-values": "workspace:*" }, @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-tools": "workspace:*", "@modelcontextprotocol/server-everything": "^2026.7.4", "@modelcontextprotocol/server-filesystem": "^2026.7.4", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*", "@modelcontextprotocol/server": "2.0.0", "@modelcontextprotocol/node": "2.0.0", diff --git a/packages/mcp/mcp-resources/package.json b/packages/mcp/mcp-resources/package.json index e0a752747c..3b8b682296 100644 --- a/packages/mcp/mcp-resources/package.json +++ b/packages/mcp/mcp-resources/package.json @@ -27,14 +27,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", diff --git a/packages/plan/plan-mode/package.json b/packages/plan/plan-mode/package.json index e6b1a61626..1976d9e39e 100644 --- a/packages/plan/plan-mode/package.json +++ b/packages/plan/plan-mode/package.json @@ -50,7 +50,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-commands": { @@ -73,6 +73,6 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/preset/agent-preset-registry/package.json b/packages/preset/agent-preset-registry/package.json index c57cc63ad4..d5f324378f 100644 --- a/packages/preset/agent-preset-registry/package.json +++ b/packages/preset/agent-preset-registry/package.json @@ -53,7 +53,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", @@ -63,17 +63,17 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", - "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-group": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-atomic-write": "workspace:*", @@ -86,7 +86,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", diff --git a/packages/preset/agent-preset/package.json b/packages/preset/agent-preset/package.json index bfc8ebc5a7..306a2808fc 100644 --- a/packages/preset/agent-preset/package.json +++ b/packages/preset/agent-preset/package.json @@ -28,21 +28,21 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-compaction-tool-result-pruner": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@types/js-yaml": "^4.0.9", "js-yaml": "^4.2.0" } diff --git a/packages/preset/persona/package.json b/packages/preset/persona/package.json index e914eb7b2d..2ddf6bcd2c 100644 --- a/packages/preset/persona/package.json +++ b/packages/preset/persona/package.json @@ -28,14 +28,14 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/ptc-runtime/ptc-runtime-node/package.json b/packages/ptc-runtime/ptc-runtime-node/package.json index 69b1c1d79b..d729da5920 100644 --- a/packages/ptc-runtime/ptc-runtime-node/package.json +++ b/packages/ptc-runtime/ptc-runtime-node/package.json @@ -31,7 +31,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", @@ -42,10 +42,10 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ptc-runtime": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", diff --git a/packages/ptc-runtime/ptc-runtime/package.json b/packages/ptc-runtime/ptc-runtime/package.json index 8be77f928c..67b85ec6b9 100644 --- a/packages/ptc-runtime/ptc-runtime/package.json +++ b/packages/ptc-runtime/ptc-runtime/package.json @@ -27,11 +27,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-sandbox": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-sandbox": "workspace:*" } } diff --git a/packages/runtime-diagnostics/invariants/package.json b/packages/runtime-diagnostics/invariants/package.json index 4cb33c7d25..73c9f3b99d 100644 --- a/packages/runtime-diagnostics/invariants/package.json +++ b/packages/runtime-diagnostics/invariants/package.json @@ -27,12 +27,12 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/sandbox/sandbox-local/package.json b/packages/sandbox/sandbox-local/package.json index 9beb6f9745..a1439ff5b6 100644 --- a/packages/sandbox/sandbox-local/package.json +++ b/packages/sandbox/sandbox-local/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" @@ -35,11 +35,11 @@ "dependencies": { "@deepseek-ai/dsh-sandbox-windows-acl": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/node-addon-system": "workspace:^", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/node-addon-system": "workspace:~", + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" diff --git a/packages/sandbox/sandbox-policy/package.json b/packages/sandbox/sandbox-policy/package.json index 1d22ed4de2..623517f836 100644 --- a/packages/sandbox/sandbox-policy/package.json +++ b/packages/sandbox/sandbox-policy/package.json @@ -37,11 +37,11 @@ "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { @@ -50,7 +50,7 @@ "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/sandbox/sandbox-windows-acl/package.json b/packages/sandbox/sandbox-windows-acl/package.json index a1c2af3066..2d4cd72e2a 100644 --- a/packages/sandbox/sandbox-windows-acl/package.json +++ b/packages/sandbox/sandbox-windows-acl/package.json @@ -33,7 +33,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-subprocess": "workspace:*" }, "dependencies": { @@ -44,7 +44,7 @@ "devDependencies": { "@deepseek-ai/dsh-pwsh-local": "workspace:*", "@deepseek-ai/dsh-sandbox-local": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*" } diff --git a/packages/sandbox/sandbox/package.json b/packages/sandbox/sandbox/package.json index 1cf477bf77..00ab1ce45e 100644 --- a/packages/sandbox/sandbox/package.json +++ b/packages/sandbox/sandbox/package.json @@ -27,12 +27,12 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" }, diff --git a/packages/schedule/schedule/package.json b/packages/schedule/schedule/package.json index ccd61406d4..493dc1e0c2 100644 --- a/packages/schedule/schedule/package.json +++ b/packages/schedule/schedule/package.json @@ -46,13 +46,13 @@ "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -66,6 +66,6 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-workspace": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/sdk/client/package.json b/packages/sdk/client/package.json index 9c48e6f414..a79827058d 100644 --- a/packages/sdk/client/package.json +++ b/packages/sdk/client/package.json @@ -32,12 +32,12 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/sdk/protocol/package.json b/packages/sdk/protocol/package.json index 7e74327224..3905a88fd5 100644 --- a/packages/sdk/protocol/package.json +++ b/packages/sdk/protocol/package.json @@ -29,12 +29,12 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/sdk/server/package.json b/packages/sdk/server/package.json index 5d1dccecc3..cd999821ae 100644 --- a/packages/sdk/server/package.json +++ b/packages/sdk/server/package.json @@ -28,10 +28,10 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -42,8 +42,8 @@ "@deepseek-ai/dsh-subagent": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/session-query/session-log-export/package.json b/packages/session-query/session-log-export/package.json index 4d3b735411..8bb2af84cc 100644 --- a/packages/session-query/session-log-export/package.json +++ b/packages/session-query/session-log-export/package.json @@ -37,18 +37,18 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-session-format": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "fflate": "^0.8.2", "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", diff --git a/packages/session-query/session-query-sqlite/package.json b/packages/session-query/session-query-sqlite/package.json index 9d89890329..9aa5c02749 100644 --- a/packages/session-query/session-query-sqlite/package.json +++ b/packages/session-query/session-query-sqlite/package.json @@ -30,7 +30,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-session-query": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-session-persistence": { @@ -38,15 +38,15 @@ } }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-session-persistence-jsonl": "workspace:*", "@deepseek-ai/dsh-session-query": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/session-query/session-query/package.json b/packages/session-query/session-query/package.json index 911b0dd58f..032ded62a8 100644 --- a/packages/session-query/session-query/package.json +++ b/packages/session-query/session-query/package.json @@ -35,7 +35,7 @@ "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-session-projection-cache": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/dsh-session-persistence": { @@ -57,7 +57,7 @@ "@deepseek-ai/dsh-session-persistence": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-session-projection-cache": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-session-format-catalog": "workspace:*" diff --git a/packages/session-query/tool-session-query/package.json b/packages/session-query/tool-session-query/package.json index fc1c8205da..2575f54d59 100644 --- a/packages/session-query/tool-session-query/package.json +++ b/packages/session-query/tool-session-query/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -39,10 +39,10 @@ }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/session/session-checkpoint-policy/package.json b/packages/session/session-checkpoint-policy/package.json index f6c1b0ed05..ef4d24ddce 100644 --- a/packages/session/session-checkpoint-policy/package.json +++ b/packages/session/session-checkpoint-policy/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -35,8 +35,8 @@ "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/session/session-format-catalog/package.json b/packages/session/session-format-catalog/package.json index 5a87840d72..804218446e 100644 --- a/packages/session/session-format-catalog/package.json +++ b/packages/session/session-format-catalog/package.json @@ -40,11 +40,11 @@ "@deepseek-ai/dsh-compaction-image-offload": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v0-to-v1/package.json b/packages/session/session-format-v0-to-v1/package.json index f459fa8df1..fb80e3eda1 100644 --- a/packages/session/session-format-v0-to-v1/package.json +++ b/packages/session/session-format-v0-to-v1/package.json @@ -43,10 +43,10 @@ "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v1-to-v2/package.json b/packages/session/session-format-v1-to-v2/package.json index 52311579fe..6bed58e59e 100644 --- a/packages/session/session-format-v1-to-v2/package.json +++ b/packages/session/session-format-v1-to-v2/package.json @@ -45,10 +45,10 @@ "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*" } } diff --git a/packages/session/session-format-v2-to-v3/package.json b/packages/session/session-format-v2-to-v3/package.json index 0a8320612b..f78321bb27 100644 --- a/packages/session/session-format-v2-to-v3/package.json +++ b/packages/session/session-format-v2-to-v3/package.json @@ -44,9 +44,9 @@ "@deepseek-ai/dsh-session-format-v1-to-v2": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-format-v3-to-v4/package.json b/packages/session/session-format-v3-to-v4/package.json index f2ded06631..1cfef2bc64 100644 --- a/packages/session/session-format-v3-to-v4/package.json +++ b/packages/session/session-format-v3-to-v4/package.json @@ -43,9 +43,9 @@ "@deepseek-ai/dsh-session-format-v2-to-v3": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-format/package.json b/packages/session/session-format/package.json index a961d7063b..8db03f9766 100644 --- a/packages/session/session-format/package.json +++ b/packages/session/session-format/package.json @@ -30,9 +30,9 @@ "@deepseek-ai/dsh-util-values": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-log-deepseek/package.json b/packages/session/session-log-deepseek/package.json index c5c7d5bdb5..111701f607 100644 --- a/packages/session/session-log-deepseek/package.json +++ b/packages/session/session-log-deepseek/package.json @@ -39,18 +39,18 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-command-feedback": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", diff --git a/packages/session/session-persistence-jsonl/package.json b/packages/session/session-persistence-jsonl/package.json index 7e7319e35b..cb3d7e132e 100644 --- a/packages/session/session-persistence-jsonl/package.json +++ b/packages/session/session-persistence-jsonl/package.json @@ -30,21 +30,21 @@ "peerDependencies": { "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session-format": "workspace:*", "@deepseek-ai/dsh-session-format-catalog": "workspace:*", "@deepseek-ai/dsh-session-format-v3-to-v4": "workspace:*", - "@deepseek-ai/node-addon-system": "workspace:^", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/node-addon-system": "workspace:~", + "@deepseek-ai/schemastery": "workspace:~", "koffi": "^3.1.0" }, "devDependencies": { "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-format-v0-to-v1": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-persistence/package.json b/packages/session/session-persistence/package.json index 8857a40ce0..fc4e33d735 100644 --- a/packages/session/session-persistence/package.json +++ b/packages/session/session-persistence/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/session/session-projection-cache/package.json b/packages/session/session-projection-cache/package.json index 0e3df5ea90..90e0daa021 100644 --- a/packages/session/session-projection-cache/package.json +++ b/packages/session/session-projection-cache/package.json @@ -28,17 +28,17 @@ "license": "MIT", "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-storage-domain": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-storage": "workspace:*", diff --git a/packages/session/session-projection/package.json b/packages/session/session-projection/package.json index 35a2c63b64..795f3b7483 100644 --- a/packages/session/session-projection/package.json +++ b/packages/session/session-projection/package.json @@ -36,10 +36,10 @@ }, "peerDependencies": { "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-stats/package.json b/packages/session/session-stats/package.json index e7e8e810e6..d73bd076d9 100644 --- a/packages/session/session-stats/package.json +++ b/packages/session/session-stats/package.json @@ -39,17 +39,17 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-telemetry-otel/package.json b/packages/session/session-telemetry-otel/package.json index 87076c02e4..830d0a0c8b 100644 --- a/packages/session/session-telemetry-otel/package.json +++ b/packages/session/session-telemetry-otel/package.json @@ -33,7 +33,7 @@ "@opentelemetry/otlp-exporter-base": "^0.220.0", "@opentelemetry/resources": "^2.9.0", "@opentelemetry/sdk-logs": "^0.220.0", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-command-feedback": "workspace:*", @@ -42,11 +42,11 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-telemetry": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-logger-console": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-logger-console": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-bash-local": "workspace:*", "@deepseek-ai/dsh-command-feedback": "workspace:*", @@ -59,7 +59,7 @@ "@deepseek-ai/dsh-session-telemetry": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/dsh-anonymous-user-id": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/session/session-telemetry/package.json b/packages/session/session-telemetry/package.json index 4bc43d3b58..7b08adb208 100644 --- a/packages/session/session-telemetry/package.json +++ b/packages/session/session-telemetry/package.json @@ -29,11 +29,11 @@ "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/session/session-title-all-prompts-llm/package.json b/packages/session/session-title-all-prompts-llm/package.json index bb8d3f4847..e8daebcad7 100644 --- a/packages/session/session-title-all-prompts-llm/package.json +++ b/packages/session/session-title-all-prompts-llm/package.json @@ -27,17 +27,17 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", "@deepseek-ai/dsh-session-title-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", "@deepseek-ai/dsh-session-title-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*" } diff --git a/packages/session/session-title-first-prompt-llm/package.json b/packages/session/session-title-first-prompt-llm/package.json index 172d452cf7..4d6531b458 100644 --- a/packages/session/session-title-first-prompt-llm/package.json +++ b/packages/session/session-title-first-prompt-llm/package.json @@ -27,20 +27,20 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", "@deepseek-ai/dsh-session-title-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-llm-deepseek": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", "@deepseek-ai/dsh-session-title-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*" } diff --git a/packages/session/session-title-llm/package.json b/packages/session/session-title-llm/package.json index 523fd8d827..690ea38f8a 100644 --- a/packages/session/session-title-llm/package.json +++ b/packages/session/session-title-llm/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", @@ -35,10 +35,10 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-title": "workspace:*", diff --git a/packages/session/session-title/package.json b/packages/session/session-title/package.json index 249581d9b3..9923bb55d8 100644 --- a/packages/session/session-title/package.json +++ b/packages/session/session-title/package.json @@ -41,7 +41,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", @@ -51,11 +51,11 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", diff --git a/packages/session/session-turn-outline/package.json b/packages/session/session-turn-outline/package.json index 815787f226..2228de992c 100644 --- a/packages/session/session-turn-outline/package.json +++ b/packages/session/session-turn-outline/package.json @@ -36,7 +36,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*" @@ -45,9 +45,9 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*" diff --git a/packages/settings/settings/package.json b/packages/settings/settings/package.json index 61d8deb162..6a111055f2 100644 --- a/packages/settings/settings/package.json +++ b/packages/settings/settings/package.json @@ -32,19 +32,19 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-hmr": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", @@ -53,8 +53,8 @@ "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", "@deepseek-ai/dsh-config-editor": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cosmokit": "workspace:~", "yaml": "^2.8.1" } } diff --git a/packages/shell/bash-local/package.json b/packages/shell/bash-local/package.json index 1f22c64f8f..78524471de 100644 --- a/packages/shell/bash-local/package.json +++ b/packages/shell/bash-local/package.json @@ -30,16 +30,16 @@ "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/shell/bash-sandbox/package.json b/packages/shell/bash-sandbox/package.json index 4e1e5d558b..9091c75a9b 100644 --- a/packages/shell/bash-sandbox/package.json +++ b/packages/shell/bash-sandbox/package.json @@ -31,7 +31,7 @@ "@deepseek-ai/dsh-bash-local": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", @@ -40,8 +40,8 @@ "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-local": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/node-addon-system": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/node-addon-system": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/pwsh-local/package.json b/packages/shell/pwsh-local/package.json index bee14d4ade..b100b5255c 100644 --- a/packages/shell/pwsh-local/package.json +++ b/packages/shell/pwsh-local/package.json @@ -30,16 +30,16 @@ "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/shell/pwsh-sandbox/package.json b/packages/shell/pwsh-sandbox/package.json index 270bc8ed76..16ad2cedcf 100644 --- a/packages/shell/pwsh-sandbox/package.json +++ b/packages/shell/pwsh-sandbox/package.json @@ -31,7 +31,7 @@ "@deepseek-ai/dsh-pwsh-local": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-shell": "workspace:*", @@ -41,6 +41,6 @@ "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/shell/shell-env/package.json b/packages/shell/shell-env/package.json index ab4377edf1..5c60401877 100644 --- a/packages/shell/shell-env/package.json +++ b/packages/shell/shell-env/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-shell": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", diff --git a/packages/shell/shell/package.json b/packages/shell/shell/package.json index 6751f1230e..8856e3cb90 100644 --- a/packages/shell/shell/package.json +++ b/packages/shell/shell/package.json @@ -29,11 +29,11 @@ "peerDependencies": { "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/shell/tool-bash-persistent/package.json b/packages/shell/tool-bash-persistent/package.json index d8bafa9f95..406fd49cae 100644 --- a/packages/shell/tool-bash-persistent/package.json +++ b/packages/shell/tool-bash-persistent/package.json @@ -30,14 +30,14 @@ "@deepseek-ai/dsh-terminal": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -50,7 +50,7 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/tool-bash/package.json b/packages/shell/tool-bash/package.json index fa3c949577..07d2e42663 100644 --- a/packages/shell/tool-bash/package.json +++ b/packages/shell/tool-bash/package.json @@ -37,10 +37,10 @@ "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -61,7 +61,7 @@ "@deepseek-ai/dsh-tool-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-approval": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/shell/tool-pwsh-persistent/package.json b/packages/shell/tool-pwsh-persistent/package.json index 791f2ec80e..0e48e7c21e 100644 --- a/packages/shell/tool-pwsh-persistent/package.json +++ b/packages/shell/tool-pwsh-persistent/package.json @@ -30,14 +30,14 @@ "@deepseek-ai/dsh-terminal": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -52,6 +52,6 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/shell/tool-pwsh/package.json b/packages/shell/tool-pwsh/package.json index 47f76952a9..35c799e10d 100644 --- a/packages/shell/tool-pwsh/package.json +++ b/packages/shell/tool-pwsh/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -40,10 +40,10 @@ "@deepseek-ai/dsh-user-approval": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/skill/skill-badge/package.json b/packages/skill/skill-badge/package.json index 1704350aa5..0a76f7ca23 100644 --- a/packages/skill/skill-badge/package.json +++ b/packages/skill/skill-badge/package.json @@ -28,10 +28,10 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/skill/skill-filesystem/package.json b/packages/skill/skill-filesystem/package.json index 8b1ed16731..7de677b050 100644 --- a/packages/skill/skill-filesystem/package.json +++ b/packages/skill/skill-filesystem/package.json @@ -30,17 +30,17 @@ "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "chokidar": "^5.0.0", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "yaml": "^2.4.2" }, "devDependencies": { "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-home-paths": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/skill/skill-office/package.json b/packages/skill/skill-office/package.json index d8e00fbaed..d1db374ce5 100644 --- a/packages/skill/skill-office/package.json +++ b/packages/skill/skill-office/package.json @@ -28,16 +28,16 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-skill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^" + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "yaml": "^2.4.2" } } diff --git a/packages/skill/skill/package.json b/packages/skill/skill/package.json index caf63ccbee..ede9e67d2f 100644 --- a/packages/skill/skill/package.json +++ b/packages/skill/skill/package.json @@ -27,16 +27,16 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*" }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-scope": "workspace:*" } diff --git a/packages/skill/tool-skill/package.json b/packages/skill/tool-skill/package.json index a30906ff47..12e1d688e3 100644 --- a/packages/skill/tool-skill/package.json +++ b/packages/skill/tool-skill/package.json @@ -31,10 +31,10 @@ "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -45,6 +45,6 @@ "@deepseek-ai/dsh-skill": "workspace:*", "@deepseek-ai/dsh-skill-filesystem": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/skill/tool-workspace-dependencies/package.json b/packages/skill/tool-workspace-dependencies/package.json index 7a7f21a96e..7b8e2bdb79 100644 --- a/packages/skill/tool-workspace-dependencies/package.json +++ b/packages/skill/tool-workspace-dependencies/package.json @@ -27,18 +27,18 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/packages/spill/spill-local/package.json b/packages/spill/spill-local/package.json index f2ff90d6ea..28eb81b63d 100644 --- a/packages/spill/spill-local/package.json +++ b/packages/spill/spill-local/package.json @@ -28,18 +28,18 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-spill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-spill": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/spill/spill-policy/package.json b/packages/spill/spill-policy/package.json index e025aa5000..4d443913ed 100644 --- a/packages/spill/spill-policy/package.json +++ b/packages/spill/spill-policy/package.json @@ -37,13 +37,13 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-spill": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-attachment": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-token-meter": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -53,7 +53,7 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-spill": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", "@deepseek-ai/dsh-sandbox-local": "workspace:*", diff --git a/packages/spill/spill/package.json b/packages/spill/spill/package.json index 9f56b9004f..806bcf9a83 100644 --- a/packages/spill/spill/package.json +++ b/packages/spill/spill/package.json @@ -30,12 +30,12 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/ssh/fs-ssh/package.json b/packages/ssh/fs-ssh/package.json index f07c127a25..7638d2b381 100644 --- a/packages/ssh/fs-ssh/package.json +++ b/packages/ssh/fs-ssh/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", "@deepseek-ai/dsh-sandbox-policy": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*", diff --git a/packages/ssh/sandbox-ssh/package.json b/packages/ssh/sandbox-ssh/package.json index 0b91c10848..6ee7ec70eb 100644 --- a/packages/ssh/sandbox-ssh/package.json +++ b/packages/ssh/sandbox-ssh/package.json @@ -27,16 +27,16 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-sandbox": "workspace:*" } diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 7903976068..80be73316a 100644 --- a/packages/ssh/ssh/package.json +++ b/packages/ssh/ssh/package.json @@ -45,7 +45,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-fs-sandbox": "workspace:*", @@ -58,11 +58,11 @@ "@deepseek-ai/dsh-brand": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-fs": "workspace:*", "@deepseek-ai/dsh-fs-local": "workspace:*", "@deepseek-ai/dsh-fs-sandbox": "workspace:*", diff --git a/packages/ssh/subprocess-ssh/package.json b/packages/ssh/subprocess-ssh/package.json index 032786452a..4561b0ed89 100644 --- a/packages/ssh/subprocess-ssh/package.json +++ b/packages/ssh/subprocess-ssh/package.json @@ -27,17 +27,17 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-ssh": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*" diff --git a/packages/storage/storage-domain/package.json b/packages/storage/storage-domain/package.json index f5eaa2eee4..2c70a4a387 100644 --- a/packages/storage/storage-domain/package.json +++ b/packages/storage/storage-domain/package.json @@ -34,15 +34,15 @@ "peerDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/storage/storage-json/package.json b/packages/storage/storage-json/package.json index 80eabc8bd3..8a5d7c9fb1 100644 --- a/packages/storage/storage-json/package.json +++ b/packages/storage/storage-json/package.json @@ -28,13 +28,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/storage/storage-sqlite/package.json b/packages/storage/storage-sqlite/package.json index 2b52a83108..fd4872d1ac 100644 --- a/packages/storage/storage-sqlite/package.json +++ b/packages/storage/storage-sqlite/package.json @@ -28,13 +28,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-storage": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/storage/storage/package.json b/packages/storage/storage/package.json index 9e50e2de52..6ab7c7e3a0 100644 --- a/packages/storage/storage/package.json +++ b/packages/storage/storage/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/subagent/subagent-acp/package.json b/packages/subagent/subagent-acp/package.json index 7ac238aba0..69adc7a68d 100644 --- a/packages/subagent/subagent-acp/package.json +++ b/packages/subagent/subagent-acp/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -38,11 +38,11 @@ "dependencies": { "@agentclientprotocol/sdk": "1.4.0", "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/subagent/subagent-claude-code/package.json b/packages/subagent/subagent-claude-code/package.json index 9a64766257..8a5f5784e2 100644 --- a/packages/subagent/subagent-claude-code/package.json +++ b/packages/subagent/subagent-claude-code/package.json @@ -33,7 +33,7 @@ } }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", @@ -44,12 +44,12 @@ "@anthropic-ai/claude-agent-sdk": "0.3.263", "@anthropic-ai/sdk": "0.93.0", "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@modelcontextprotocol/sdk": "^1.29.0", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/subagent/subagent-codex/package.json b/packages/subagent/subagent-codex/package.json index b371f46a03..b6f8de79e7 100644 --- a/packages/subagent/subagent-codex/package.json +++ b/packages/subagent/subagent-codex/package.json @@ -33,7 +33,7 @@ } }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", @@ -43,12 +43,12 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-sdk-protocol": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@openai/codex": "0.153.4" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/subagent/subagent-dsh-sdk/package.json b/packages/subagent/subagent-dsh-sdk/package.json index 7758b02782..318c11b0c4 100644 --- a/packages/subagent/subagent-dsh-sdk/package.json +++ b/packages/subagent/subagent-dsh-sdk/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-sdk-client": "workspace:*", @@ -37,11 +37,11 @@ }, "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-instructions": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", diff --git a/packages/subagent/subagent-fork-in-process/package.json b/packages/subagent/subagent-fork-in-process/package.json index 0efebd787a..c90e0e68d9 100644 --- a/packages/subagent/subagent-fork-in-process/package.json +++ b/packages/subagent/subagent-fork-in-process/package.json @@ -31,13 +31,13 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -47,7 +47,7 @@ "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", "@deepseek-ai/dsh-subagent-spawn-in-process": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subagent/subagent-in-process-driver/package.json b/packages/subagent/subagent-in-process-driver/package.json index a10231de22..967d7eb635 100644 --- a/packages/subagent/subagent-in-process-driver/package.json +++ b/packages/subagent/subagent-in-process-driver/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -36,9 +36,9 @@ "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/subagent/subagent-spawn-in-process/package.json b/packages/subagent/subagent-spawn-in-process/package.json index 0ae91adb99..5a5a52bb1d 100644 --- a/packages/subagent/subagent-spawn-in-process/package.json +++ b/packages/subagent/subagent-spawn-in-process/package.json @@ -29,13 +29,13 @@ "peerDependencies": { "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -49,7 +49,7 @@ "@deepseek-ai/dsh-subagent-in-process-driver": "workspace:*", "@deepseek-ai/dsh-tool-bash": "workspace:*", "@deepseek-ai/dsh-tool-subagent": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subagent/subagent/package.json b/packages/subagent/subagent/package.json index 502b6c99dd..f36c870f22 100644 --- a/packages/subagent/subagent/package.json +++ b/packages/subagent/subagent/package.json @@ -56,11 +56,11 @@ "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-chunked-list": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", @@ -122,7 +122,7 @@ } }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", "@deepseek-ai/dsh-attachment": "workspace:*", diff --git a/packages/subagent/tool-subagent-control/package.json b/packages/subagent/tool-subagent-control/package.json index bd19f59e3b..eda62c7c96 100644 --- a/packages/subagent/tool-subagent-control/package.json +++ b/packages/subagent/tool-subagent-control/package.json @@ -32,14 +32,14 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subagent": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/subagent/tool-subagent/package.json b/packages/subagent/tool-subagent/package.json index 2da8603839..a8f961d042 100644 --- a/packages/subagent/tool-subagent/package.json +++ b/packages/subagent/tool-subagent/package.json @@ -47,14 +47,14 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -69,7 +69,7 @@ "@deepseek-ai/dsh-jobs-local": "workspace:*", "@deepseek-ai/dsh-tool-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/subprocess/subprocess-local/package.json b/packages/subprocess/subprocess-local/package.json index bf98cb54ad..50d307859b 100644 --- a/packages/subprocess/subprocess-local/package.json +++ b/packages/subprocess/subprocess-local/package.json @@ -44,7 +44,7 @@ "peerDependencies": { "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-lazy-require": "workspace:*", @@ -56,6 +56,6 @@ "@deepseek-ai/dsh-loader-smoke": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-timeout": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/subprocess/subprocess/package.json b/packages/subprocess/subprocess/package.json index c4ccf1c8fc..74f248df7d 100644 --- a/packages/subprocess/subprocess/package.json +++ b/packages/subprocess/subprocess/package.json @@ -32,11 +32,11 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*", "@deepseek-ai/dsh-launch-environment": "workspace:*" } diff --git a/packages/subprocess/win32-process/package.json b/packages/subprocess/win32-process/package.json index 0cccf05705..713fefb2c3 100644 --- a/packages/subprocess/win32-process/package.json +++ b/packages/subprocess/win32-process/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@deepseek-ai/dsh-lazy-require": "workspace:*", "koffi": "^3.1.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/terminal/terminal-bash/package.json b/packages/terminal/terminal-bash/package.json index cd419889c0..49d644e3fa 100644 --- a/packages/terminal/terminal-bash/package.json +++ b/packages/terminal/terminal-bash/package.json @@ -33,13 +33,13 @@ "@deepseek-ai/dsh-sandbox-policy": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" }, "dependencies": { "@deepseek-ai/dsh-lazy-require": "workspace:*", "@deepseek-ai/dsh-pwsh-local": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@xterm/headless": "^6.0.0" }, "devDependencies": { @@ -51,6 +51,6 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-subprocess": "workspace:*", "@deepseek-ai/dsh-subprocess-local": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/terminal/terminal/package.json b/packages/terminal/terminal/package.json index c351cf7837..71496630bb 100644 --- a/packages/terminal/terminal/package.json +++ b/packages/terminal/terminal/package.json @@ -29,13 +29,13 @@ "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/terminal/tool-terminal/package.json b/packages/terminal/tool-terminal/package.json index eeca5ba9b4..8a4cc1a868 100644 --- a/packages/terminal/tool-terminal/package.json +++ b/packages/terminal/tool-terminal/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "peerDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -37,11 +37,11 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -57,7 +57,7 @@ "@deepseek-ai/dsh-jobs-local": "workspace:*", "@deepseek-ai/dsh-tool-jobs": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/test-support/agent-loop-testkit/package.json b/packages/test-support/agent-loop-testkit/package.json index f068e5f77a..6cd1e31817 100644 --- a/packages/test-support/agent-loop-testkit/package.json +++ b/packages/test-support/agent-loop-testkit/package.json @@ -34,7 +34,7 @@ "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": {}, "devDependencies": { @@ -45,6 +45,6 @@ "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/test-support/client-runtime/package.json b/packages/test-support/client-runtime/package.json index 617c7deccc..22bfcf7d16 100644 --- a/packages/test-support/client-runtime/package.json +++ b/packages/test-support/client-runtime/package.json @@ -29,9 +29,9 @@ "vitest": "^4.1.8" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", "@deepseek-ai/dsh-api-workspace-controller": "workspace:*", @@ -55,9 +55,9 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-api-gateway": "workspace:*", "@deepseek-ai/dsh-api-remotes": "workspace:*", "@deepseek-ai/dsh-api-session-controller": "workspace:*", diff --git a/packages/test-support/llm-mock-server/package.json b/packages/test-support/llm-mock-server/package.json index 6298fce136..adb49fc64b 100644 --- a/packages/test-support/llm-mock-server/package.json +++ b/packages/test-support/llm-mock-server/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/test-support/llm-replay/package.json b/packages/test-support/llm-replay/package.json index 352ebc8685..f064cc30c6 100644 --- a/packages/test-support/llm-replay/package.json +++ b/packages/test-support/llm-replay/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", @@ -39,7 +39,7 @@ } }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-compaction": "workspace:*", "@deepseek-ai/dsh-deepseek-llm-api-extensions": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/test-support/loader-smoke/package.json b/packages/test-support/loader-smoke/package.json index 50e4aa5546..197dce5c07 100644 --- a/packages/test-support/loader-smoke/package.json +++ b/packages/test-support/loader-smoke/package.json @@ -31,14 +31,14 @@ "tsx": "^4.22.4" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-app-boot": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", diff --git a/packages/test-support/remote-mock/package.json b/packages/test-support/remote-mock/package.json index 1777d334e0..64dfb2617c 100644 --- a/packages/test-support/remote-mock/package.json +++ b/packages/test-support/remote-mock/package.json @@ -26,11 +26,11 @@ "@vitest/spy": "^4.1.8" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-typert-protocol": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-api-settings-controller": "workspace:*", "@deepseek-ai/dsh-client-connection": "workspace:*", "@deepseek-ai/dsh-typert-protocol": "workspace:*", diff --git a/packages/test-support/session-snapshot/package.json b/packages/test-support/session-snapshot/package.json index 04506e5abc..76df2219f1 100644 --- a/packages/test-support/session-snapshot/package.json +++ b/packages/test-support/session-snapshot/package.json @@ -28,7 +28,7 @@ "license": "MIT", "dependencies": { "@agentclientprotocol/sdk": "1.4.0", - "@deepseek-ai/cordis-plugin-include": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", "@deepseek-ai/dsh-llm-replay": "workspace:*", "@deepseek-ai/dsh-loader-smoke": "workspace:*", "@deepseek-ai/dsh-session-format": "workspace:*", @@ -36,12 +36,12 @@ "vitest": "^4.1.8" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-compaction": "workspace:*", diff --git a/packages/todo/tool-todo/package.json b/packages/todo/tool-todo/package.json index 7f8dab8d7f..19e93ed48b 100644 --- a/packages/todo/tool-todo/package.json +++ b/packages/todo/tool-todo/package.json @@ -37,7 +37,7 @@ ], "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "zod": "^4.4.3" }, "peerDependencies": { @@ -46,11 +46,11 @@ "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-projection": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -61,6 +61,6 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-user-questions": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/typert/generator/package.json b/packages/typert/generator/package.json index 7ba55c1fee..1c26c186c4 100644 --- a/packages/typert/generator/package.json +++ b/packages/typert/generator/package.json @@ -36,12 +36,12 @@ "typescript": "^6.0.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-tool-cordis": "workspace:*", "@deepseek-ai/dsh-typert-registry": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "zod": "^4.4.3" } } diff --git a/packages/typert/loader/package.json b/packages/typert/loader/package.json index 987ef34354..91f7ff9162 100644 --- a/packages/typert/loader/package.json +++ b/packages/typert/loader/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-typert-registry": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-app-boot": "workspace:*", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-typert-registry": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "zod": "^4.4.3" } } diff --git a/packages/typert/protocol/package.json b/packages/typert/protocol/package.json index 47a81ffdea..a74f2c9cb9 100644 --- a/packages/typert/protocol/package.json +++ b/packages/typert/protocol/package.json @@ -35,9 +35,9 @@ "@deepseek-ai/dsh-brand": "workspace:*" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/typert/registry/package.json b/packages/typert/registry/package.json index a32c915621..2cdfde73b2 100644 --- a/packages/typert/registry/package.json +++ b/packages/typert/registry/package.json @@ -51,10 +51,10 @@ "zod": "^4.4.3" }, "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-typert-protocol": "workspace:*" } } diff --git a/packages/util/atomic-write/package.json b/packages/util/atomic-write/package.json index 9d6d863e42..885ddde92a 100644 --- a/packages/util/atomic-write/package.json +++ b/packages/util/atomic-write/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/brand/package.json b/packages/util/brand/package.json index 0932e48f2d..ec8c426c39 100644 --- a/packages/util/brand/package.json +++ b/packages/util/brand/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/chunked-list/package.json b/packages/util/chunked-list/package.json index 6a8afe59af..5448935e79 100644 --- a/packages/util/chunked-list/package.json +++ b/packages/util/chunked-list/package.json @@ -27,10 +27,10 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "zod": "^4.4.3" diff --git a/packages/util/crypto/package.json b/packages/util/crypto/package.json index 8cc37cef9c..219d72ac38 100644 --- a/packages/util/crypto/package.json +++ b/packages/util/crypto/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/deque/package.json b/packages/util/deque/package.json index c58ba16417..b3b940941b 100644 --- a/packages/util/deque/package.json +++ b/packages/util/deque/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/home-paths/package.json b/packages/util/home-paths/package.json index 01effdac17..029ccae080 100644 --- a/packages/util/home-paths/package.json +++ b/packages/util/home-paths/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/http-proxy/package.json b/packages/util/http-proxy/package.json index 447d980c10..c0b5c711d3 100644 --- a/packages/util/http-proxy/package.json +++ b/packages/util/http-proxy/package.json @@ -27,13 +27,13 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "undici": "^8.10.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-invariants": "workspace:*" } } diff --git a/packages/util/launch-environment/package.json b/packages/util/launch-environment/package.json index f04c5d4ac9..47f2bf1c86 100644 --- a/packages/util/launch-environment/package.json +++ b/packages/util/launch-environment/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/lazy-require/package.json b/packages/util/lazy-require/package.json index 1408b8bff8..38e75afcc6 100644 --- a/packages/util/lazy-require/package.json +++ b/packages/util/lazy-require/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/native-command/package.json b/packages/util/native-command/package.json index 9515651d12..ebf73e5f73 100644 --- a/packages/util/native-command/package.json +++ b/packages/util/native-command/package.json @@ -32,9 +32,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/output-retention/package.json b/packages/util/output-retention/package.json index 06f4aa0c54..b7147ccc68 100644 --- a/packages/util/output-retention/package.json +++ b/packages/util/output-retention/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/package-manifest/package.json b/packages/util/package-manifest/package.json index afc0b1cecb..d3e8b2d7ec 100644 --- a/packages/util/package-manifest/package.json +++ b/packages/util/package-manifest/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/time/package.json b/packages/util/time/package.json index ed345644d2..93dbad155d 100644 --- a/packages/util/time/package.json +++ b/packages/util/time/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/timeout/package.json b/packages/util/timeout/package.json index fac137dcea..7c2c6ddd6b 100644 --- a/packages/util/timeout/package.json +++ b/packages/util/timeout/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/values/package.json b/packages/util/values/package.json index 21a4f5123c..35a646a817 100644 --- a/packages/util/values/package.json +++ b/packages/util/values/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/util/workspace-path/package.json b/packages/util/workspace-path/package.json index 8aa62b515d..0f1f31f391 100644 --- a/packages/util/workspace-path/package.json +++ b/packages/util/workspace-path/package.json @@ -27,9 +27,9 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/web/tool-web/package.json b/packages/web/tool-web/package.json index 2081ea774e..40feb58f66 100644 --- a/packages/web/tool-web/package.json +++ b/packages/web/tool-web/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", @@ -35,12 +35,12 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@joplin/turndown-plugin-gfm": "^1.0.67", "turndown": "^7.2.4" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/web/web-fetch-http/package.json b/packages/web/web-fetch-http/package.json index 1c0bd4fe0d..1809552282 100644 --- a/packages/web/web-fetch-http/package.json +++ b/packages/web/web-fetch-http/package.json @@ -27,18 +27,18 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "ipaddr.js": "^2.5.0", "undici": "^8.10.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-timeout": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", "@deepseek-ai/dsh-http-proxy": "workspace:*" diff --git a/packages/web/web-search-deepseek/package.json b/packages/web/web-search-deepseek/package.json index baed229c2a..3c28bf7f41 100644 --- a/packages/web/web-search-deepseek/package.json +++ b/packages/web/web-search-deepseek/package.json @@ -32,10 +32,10 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -44,7 +44,7 @@ "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web-search-exa/package.json b/packages/web/web-search-exa/package.json index c00e1e684a..d82912919f 100644 --- a/packages/web/web-search-exa/package.json +++ b/packages/web/web-search-exa/package.json @@ -29,15 +29,15 @@ "peerDependencies": { "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web-search-perplexity/package.json b/packages/web/web-search-perplexity/package.json index 5549b3fac3..178a9f549c 100644 --- a/packages/web/web-search-perplexity/package.json +++ b/packages/web/web-search-perplexity/package.json @@ -29,15 +29,15 @@ "peerDependencies": { "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-launch-environment": "workspace:*", "@deepseek-ai/dsh-web": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-http-proxy": "workspace:*" } } diff --git a/packages/web/web/package.json b/packages/web/web/package.json index 60aef1cfac..a78b06e117 100644 --- a/packages/web/web/package.json +++ b/packages/web/web/package.json @@ -28,13 +28,13 @@ "license": "MIT", "peerDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-llm": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/webhook/webhook-github/package.json b/packages/webhook/webhook-github/package.json index bddf23cc6b..875b02eac2 100644 --- a/packages/webhook/webhook-github/package.json +++ b/packages/webhook/webhook-github/package.json @@ -32,7 +32,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -40,13 +40,13 @@ }, "dependencies": { "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/schemastery": "workspace:~", "@octokit/webhooks": "^14.2.0" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-credentials": "workspace:*", "@deepseek-ai/dsh-host-webserver": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", diff --git a/packages/webhook/webhook/package.json b/packages/webhook/webhook/package.json index 35f497d9e5..4d0b2d1b10 100644 --- a/packages/webhook/webhook/package.json +++ b/packages/webhook/webhook/package.json @@ -37,7 +37,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", @@ -49,9 +49,9 @@ "@deepseek-ai/dsh-workspace": "workspace:*" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-default-model": "workspace:*", "@deepseek-ai/dsh-agent-preset-registry": "workspace:*", diff --git a/packages/workflow/tool-ralph/package.json b/packages/workflow/tool-ralph/package.json index d320941a00..1306414d4c 100644 --- a/packages/workflow/tool-ralph/package.json +++ b/packages/workflow/tool-ralph/package.json @@ -33,13 +33,13 @@ "@deepseek-ai/dsh-system-prompt": "workspace:*", "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-workflow": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", @@ -52,7 +52,7 @@ "@deepseek-ai/dsh-tools": "workspace:*", "@deepseek-ai/dsh-workflow": "workspace:*", "@deepseek-ai/dsh-workflow-ptc": "workspace:*", - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-session-projection": "workspace:*" } } diff --git a/packages/workflow/tool-workflow/package.json b/packages/workflow/tool-workflow/package.json index 76f5da37f8..5a9c0fcd9f 100644 --- a/packages/workflow/tool-workflow/package.json +++ b/packages/workflow/tool-workflow/package.json @@ -37,7 +37,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-jobs": "workspace:*", @@ -48,10 +48,10 @@ "@deepseek-ai/dsh-workflow": "workspace:*" }, "dependencies": { - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", "@deepseek-ai/dsh-invariants": "workspace:*", diff --git a/packages/workflow/workflow-ptc/package.json b/packages/workflow/workflow-ptc/package.json index d8a6a57d2f..d5c2543721 100644 --- a/packages/workflow/workflow-ptc/package.json +++ b/packages/workflow/workflow-ptc/package.json @@ -27,7 +27,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", @@ -41,10 +41,10 @@ "dependencies": { "@deepseek-ai/dsh-brand": "workspace:*", "@deepseek-ai/dsh-util-values": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-agent": "workspace:*", "@deepseek-ai/dsh-agent-loop": "workspace:*", "@deepseek-ai/dsh-agent-loop-testkit": "workspace:*", diff --git a/packages/workflow/workflow/package.json b/packages/workflow/workflow/package.json index 7762b869bb..8a11473eb9 100644 --- a/packages/workflow/workflow/package.json +++ b/packages/workflow/workflow/package.json @@ -42,7 +42,7 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "devDependencies": { "@deepseek-ai/dsh-agent": "workspace:*", @@ -50,6 +50,6 @@ "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-llm": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/packages/workspace/workspace/package.json b/packages/workspace/workspace/package.json index 498235836d..9fc100415d 100644 --- a/packages/workspace/workspace/package.json +++ b/packages/workspace/workspace/package.json @@ -37,7 +37,7 @@ ], "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", @@ -50,7 +50,7 @@ "zod": "^4.4.3" }, "devDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "@deepseek-ai/dsh-invariants": "workspace:*", "@deepseek-ai/dsh-session": "workspace:*", "@deepseek-ai/dsh-session-persistence": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65019ba4a3..232cfc6a3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -185,16 +185,16 @@ importers: apps/cli: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/loader '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/timer '@deepseek-ai/dsh-acp-app': specifier: workspace:* @@ -561,7 +561,7 @@ importers: apps/desktop: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -598,7 +598,7 @@ importers: specifier: workspace:* version: link:../../packages/util/home-paths '@deepseek-ai/node-addon-system': - specifier: workspace:^ + specifier: workspace:~ version: link:../../native/system/packages/entry '@electron/get': specifier: ^5.1.0 @@ -664,7 +664,7 @@ importers: apps/desktop-host: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/cordis '@deepseek-ai/dsh': specifier: workspace:* @@ -700,7 +700,7 @@ importers: apps/web: devDependencies: '@deepseek-ai/cordis-plugin-group': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/group '@deepseek-ai/dsh-client-modules': specifier: workspace:* @@ -808,7 +808,7 @@ importers: benchmarks: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -901,7 +901,7 @@ importers: native/system: devDependencies: '@deepseek-ai/node-addon-system': - specifier: workspace:* + specifier: workspace:~ version: link:packages/entry '@types/node': specifier: ^26.0.1 @@ -920,16 +920,16 @@ importers: native/system/packages/entry: optionalDependencies: '@deepseek-ai/node-addon-system-darwin-arm64': - specifier: workspace:* + specifier: workspace:~ version: link:../darwin-arm64 '@deepseek-ai/node-addon-system-darwin-x64': - specifier: workspace:* + specifier: workspace:~ version: link:../darwin-x64 '@deepseek-ai/node-addon-system-linux-arm64': - specifier: workspace:* + specifier: workspace:~ version: link:../linux-arm64 '@deepseek-ai/node-addon-system-linux-x64': - specifier: workspace:* + specifier: workspace:~ version: link:../linux-x64 native/system/packages/linux-arm64: {} @@ -949,7 +949,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -998,7 +998,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-deepseek-account': specifier: workspace:* @@ -1026,7 +1026,7 @@ importers: version: 8.21.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -1069,7 +1069,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -1109,7 +1109,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -1230,7 +1230,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -1360,7 +1360,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': specifier: workspace:* @@ -1406,7 +1406,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -1464,7 +1464,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -1513,7 +1513,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -1549,7 +1549,7 @@ importers: packages/attachment/attachment: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -1568,7 +1568,7 @@ importers: version: 0.35.3(@types/node@22.20.0) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -1599,19 +1599,19 @@ importers: version: 2.0.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-group': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/group '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-home-paths': specifier: workspace:* @@ -1632,13 +1632,13 @@ importers: packages/boot/cmdline: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader commander: specifier: ^15.0.0 @@ -1657,13 +1657,13 @@ importers: version: 2.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': specifier: workspace:* @@ -1691,16 +1691,16 @@ importers: version: 4.0.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-app-boot': specifier: workspace:* @@ -1746,13 +1746,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -1800,7 +1800,7 @@ importers: packages/browser-use/browser-use: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -1819,16 +1819,16 @@ importers: version: 15.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include packages/bundle/base: dependencies: '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -2102,7 +2102,7 @@ importers: version: link:../../workflow/workflow-ptc devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/bundle/headless: @@ -2124,10 +2124,10 @@ importers: version: 15.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -2176,16 +2176,16 @@ importers: version: 15.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include packages/bundle/sdk-minimal: dependencies: '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -2270,7 +2270,7 @@ importers: version: link:../../core/tools devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/bundle/web-app: @@ -2646,13 +2646,13 @@ importers: version: 11.0.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -2695,7 +2695,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -2732,7 +2732,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -2766,10 +2766,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-modules': specifier: workspace:* @@ -2788,7 +2788,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -2830,10 +2830,10 @@ importers: packages/client/modules: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-store': specifier: workspace:* @@ -2851,7 +2851,7 @@ importers: packages/client/resources: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': specifier: workspace:* @@ -2872,7 +2872,7 @@ importers: packages/client/store: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis immer: specifier: ^10.1.1 @@ -2884,7 +2884,7 @@ importers: packages/client/ui-agent-preset: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': specifier: workspace:* @@ -2944,7 +2944,7 @@ importers: packages/client/ui-approval: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -2989,7 +2989,7 @@ importers: packages/client/ui-attachment: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -3034,7 +3034,7 @@ importers: packages/client/ui-brand-official: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-ui-primitives': specifier: workspace:* @@ -3065,7 +3065,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -3191,7 +3191,7 @@ importers: packages/client/ui-commands: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -3255,7 +3255,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -3394,7 +3394,7 @@ importers: version: link:../../typert/protocol devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -3487,7 +3487,7 @@ importers: packages/client/ui-directory-picker-browse: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -3529,7 +3529,7 @@ importers: packages/client/ui-directory-picker-native: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-test-runtime': specifier: workspace:* @@ -3556,7 +3556,7 @@ importers: packages/client/ui-dockkit: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -3586,7 +3586,7 @@ importers: packages/client/ui-goal: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -3646,7 +3646,7 @@ importers: packages/client/ui-input-trigger: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': specifier: workspace:* @@ -3697,7 +3697,7 @@ importers: packages/client/ui-jobs: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-job-controller': specifier: workspace:* @@ -3739,7 +3739,7 @@ importers: packages/client/ui-layout: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -3772,7 +3772,7 @@ importers: packages/client/ui-message-feedback: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -3844,7 +3844,7 @@ importers: packages/client/ui-model-selection: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -3910,7 +3910,7 @@ importers: packages/client/ui-open-in-app: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -3970,7 +3970,7 @@ importers: packages/client/ui-permission-presets: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4033,7 +4033,7 @@ importers: packages/client/ui-plan: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4118,7 +4118,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4181,7 +4181,7 @@ importers: packages/client/ui-primitives: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': specifier: workspace:* @@ -4265,7 +4265,7 @@ importers: packages/client/ui-reference: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4310,7 +4310,7 @@ importers: packages/client/ui-renderer: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-test-runtime': specifier: workspace:* @@ -4343,7 +4343,7 @@ importers: packages/client/ui-schedule: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': specifier: workspace:* @@ -4394,7 +4394,7 @@ importers: packages/client/ui-session: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4437,7 +4437,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4471,7 +4471,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4531,7 +4531,7 @@ importers: packages/client/ui-settings-agent-loop: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4574,7 +4574,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4632,7 +4632,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4677,7 +4677,7 @@ importers: packages/client/ui-settings-plugin-inventory: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-preset-registry': specifier: workspace:* @@ -4731,7 +4731,7 @@ importers: packages/client/ui-settings-plugins: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-locale': specifier: workspace:* @@ -4761,7 +4761,7 @@ importers: packages/client/ui-settings-shell: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4800,7 +4800,7 @@ importers: packages/client/ui-settings-subagent: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4839,7 +4839,7 @@ importers: packages/client/ui-settings-web-search: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -4878,7 +4878,7 @@ importers: packages/client/ui-sidebar: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-workspace-controller': specifier: workspace:* @@ -4923,7 +4923,7 @@ importers: packages/client/ui-sidebar-browser: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-workspace-controller': specifier: workspace:* @@ -4978,7 +4978,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -5089,7 +5089,7 @@ importers: packages/client/ui-sidebar-files: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -5155,7 +5155,7 @@ importers: packages/client/ui-sidebar-right: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': specifier: workspace:* @@ -5230,7 +5230,7 @@ importers: packages/client/ui-sidebar-terminal: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -5305,7 +5305,7 @@ importers: packages/client/ui-skill: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -5362,7 +5362,7 @@ importers: packages/client/ui-slots: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-client-store': specifier: workspace:* @@ -5374,7 +5374,7 @@ importers: packages/client/ui-subagent: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': specifier: workspace:* @@ -5447,7 +5447,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -5495,7 +5495,7 @@ importers: packages/client/ui-tool: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -5591,7 +5591,7 @@ importers: packages/client/ui-trajectory: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -5663,7 +5663,7 @@ importers: packages/client/ui-user-questions: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -5729,7 +5729,7 @@ importers: packages/client/ui-workflow-run: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-session-controller': specifier: workspace:* @@ -5783,7 +5783,7 @@ importers: packages/client/ui-workspace: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -5864,10 +5864,10 @@ importers: packages/client/web: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-modules': specifier: workspace:* @@ -5909,13 +5909,13 @@ importers: packages/compaction/command-compact: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -5936,7 +5936,7 @@ importers: packages/compaction/compaction: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -5964,13 +5964,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6022,7 +6022,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6068,13 +6068,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-compaction': specifier: workspace:* @@ -6101,7 +6101,7 @@ importers: packages/computer-use/computer-use: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -6117,10 +6117,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6165,7 +6165,7 @@ importers: packages/context/file-reference: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6178,7 +6178,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6209,13 +6209,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6285,7 +6285,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6343,7 +6343,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6370,7 +6370,7 @@ importers: packages/core/agent: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -6413,7 +6413,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6441,7 +6441,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6484,7 +6484,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6508,7 +6508,7 @@ importers: packages/core/scope: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -6527,7 +6527,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -6549,7 +6549,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -6574,7 +6574,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6613,7 +6613,7 @@ importers: packages/credentials/authorization: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-credentials': specifier: workspace:* @@ -6632,7 +6632,7 @@ importers: version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -6651,7 +6651,7 @@ importers: version: 2.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-atomic-write': specifier: workspace:* @@ -6669,7 +6669,7 @@ importers: packages/credentials/deepseek-account: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -6685,7 +6685,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-authorization': specifier: workspace:* @@ -6707,7 +6707,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6753,13 +6753,13 @@ importers: version: 9.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6799,13 +6799,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-workspace-files': specifier: workspace:* @@ -6830,7 +6830,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -6888,10 +6888,10 @@ importers: version: link:../tool-agent-team devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include js-yaml: specifier: ^4.2.0 @@ -6907,7 +6907,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-experimental-speech-to-text': specifier: workspace:* @@ -6923,7 +6923,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7017,13 +7017,13 @@ importers: version: 1.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7060,13 +7060,13 @@ importers: version: 0.0.80 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7100,13 +7100,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7182,13 +7182,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7230,7 +7230,7 @@ importers: packages/experimental/client-ui-agent-team: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -7290,7 +7290,7 @@ importers: packages/experimental/client-ui-voice-input: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -7363,13 +7363,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7415,13 +7415,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7479,13 +7479,13 @@ importers: version: 8.21.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-host-webserver': specifier: workspace:* @@ -7507,7 +7507,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-ptc-runtime': specifier: workspace:* @@ -7529,10 +7529,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': specifier: workspace:* @@ -7560,7 +7560,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-experimental-speech-to-text': specifier: workspace:* @@ -7582,7 +7582,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7652,10 +7652,10 @@ importers: version: link:../speech-to-text-sensevoice devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include js-yaml: specifier: ^4.2.0 @@ -7664,7 +7664,7 @@ importers: packages/experimental/webworker-packer: dependencies: '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/dsh-experimental-webworker-runtime': specifier: workspace:* @@ -7689,7 +7689,7 @@ importers: version: 4.0.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@types/js-yaml': specifier: ^4.0.9 @@ -7726,10 +7726,10 @@ importers: version: 4.7.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -7774,7 +7774,7 @@ importers: specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/node-addon-system': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../native/system/packages/entry '@types/picomatch': specifier: ^3.0.2 @@ -7789,10 +7789,10 @@ importers: packages/extensions/cordis-client-runner: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -7829,10 +7829,10 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7859,13 +7859,13 @@ importers: packages/extensions/tool-cordis: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-group': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/group '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7889,7 +7889,7 @@ importers: packages/extensions/ui-cordis: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-remotes': specifier: workspace:* @@ -7938,13 +7938,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -7978,13 +7978,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -8011,7 +8011,7 @@ importers: packages/fs/fs: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -8039,7 +8039,7 @@ importers: version: 3.1.1 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -8051,7 +8051,7 @@ importers: packages/fs/fs-observation-policy: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -8063,7 +8063,7 @@ importers: packages/fs/fs-sandbox: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -8091,7 +8091,7 @@ importers: version: 9.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8158,7 +8158,7 @@ importers: version: 1.18.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8201,7 +8201,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8246,10 +8246,10 @@ importers: packages/goal/command-goal: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8286,7 +8286,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8337,7 +8337,7 @@ importers: packages/goal/goal-round-driver: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8377,10 +8377,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8417,7 +8417,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8444,7 +8444,7 @@ importers: packages/guard/timeout-policy: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -8459,7 +8459,7 @@ importers: packages/hooks/hook-protocol: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -8478,7 +8478,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8527,7 +8527,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8569,7 +8569,7 @@ importers: packages/host/directory-picker: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/host/directory-picker-auto: @@ -8579,13 +8579,13 @@ importers: version: link:../../util/launch-environment devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-ui-directory-picker-browse': specifier: workspace:* @@ -8616,7 +8616,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/host/directory-picker-native: @@ -8632,7 +8632,7 @@ importers: version: 3.1.1 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis tsx: specifier: ^4.19.2 @@ -8645,10 +8645,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-client-connection': specifier: workspace:* @@ -8676,10 +8676,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-host-webserver': specifier: workspace:* @@ -8692,10 +8692,10 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-preset-registry': specifier: workspace:* @@ -8741,10 +8741,10 @@ importers: version: 0.220.0(@opentelemetry/api@1.9.1) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': specifier: workspace:* @@ -8766,7 +8766,7 @@ importers: version: 1.1.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@types/compression': specifier: ^1.8.1 @@ -8778,7 +8778,7 @@ importers: packages/identity/anonymous-user-id: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -8797,7 +8797,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8834,7 +8834,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-commands': specifier: workspace:* @@ -8870,7 +8870,7 @@ importers: packages/interaction/tool-ask-user: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8895,7 +8895,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8922,7 +8922,7 @@ importers: packages/interaction/user-questions: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8937,7 +8937,7 @@ importers: packages/jobs/jobs: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8962,13 +8962,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -8999,7 +8999,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9029,7 +9029,7 @@ importers: packages/llm/deepseek-llm-api-extensions: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/llm/llm: @@ -9057,7 +9057,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -9085,13 +9085,13 @@ importers: version: 3.1.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9179,10 +9179,10 @@ importers: 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:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -9225,13 +9225,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9286,13 +9286,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9329,7 +9329,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-compaction': specifier: workspace:* @@ -9353,7 +9353,7 @@ importers: packages/lsp/lsp: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -9372,7 +9372,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -9415,7 +9415,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9464,7 +9464,7 @@ importers: version: 2.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-attachment': specifier: workspace:* @@ -9519,7 +9519,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9550,7 +9550,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9593,13 +9593,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-preset-registry': specifier: workspace:* @@ -9627,16 +9627,16 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-group': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/group '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9700,7 +9700,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-scope': specifier: workspace:* @@ -9712,7 +9712,7 @@ importers: packages/ptc-runtime/ptc-runtime: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': specifier: workspace:* @@ -9728,7 +9728,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -9771,7 +9771,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/sandbox/sandbox: @@ -9781,7 +9781,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -9799,14 +9799,14 @@ importers: specifier: workspace:* version: link:../../util/values '@deepseek-ai/node-addon-system': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../native/system/packages/entry '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -9828,7 +9828,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9862,7 +9862,7 @@ importers: version: 3.1.1 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-pwsh-local': specifier: workspace:* @@ -9884,10 +9884,10 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -9936,7 +9936,7 @@ importers: version: link:../../../apps/cli devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -9951,7 +9951,7 @@ importers: packages/sdk/protocol: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -9973,10 +9973,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10031,10 +10031,10 @@ importers: version: 0.8.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10098,7 +10098,7 @@ importers: version: link:../../session/session-format-catalog devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -10132,10 +10132,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10163,7 +10163,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10211,10 +10211,10 @@ importers: packages/session/session-checkpoint-policy: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10254,7 +10254,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/session/session-format-catalog: @@ -10279,7 +10279,7 @@ importers: version: link:../session-format-v3-to-v4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10295,7 +10295,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10317,7 +10317,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10336,7 +10336,7 @@ importers: version: link:../session-format-v1-to-v2 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/session/session-format-v3-to-v4: @@ -10349,7 +10349,7 @@ importers: version: link:../session-format-v2-to-v3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/session/session-log-deepseek: @@ -10365,13 +10365,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-command-feedback': specifier: workspace:* @@ -10408,7 +10408,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -10438,7 +10438,7 @@ importers: specifier: workspace:* version: link:../session-format-v3-to-v4 '@deepseek-ai/node-addon-system': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../native/system/packages/entry '@deepseek-ai/schemastery': specifier: link:../../../vendor/schemastery @@ -10448,7 +10448,7 @@ importers: version: 3.1.1 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10467,7 +10467,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10486,7 +10486,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-session': specifier: workspace:* @@ -10511,13 +10511,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -10532,7 +10532,7 @@ importers: packages/session/session-telemetry: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10566,13 +10566,13 @@ importers: version: 0.220.0(@opentelemetry/api@1.9.1) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/cordis-plugin-logger-console': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/logger-console '@deepseek-ai/dsh-anonymous-user-id': specifier: workspace:* @@ -10627,7 +10627,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10661,7 +10661,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent-loop': specifier: workspace:* @@ -10689,13 +10689,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent-loop': specifier: workspace:* @@ -10729,7 +10729,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -10751,13 +10751,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -10772,7 +10772,7 @@ importers: packages/settings/settings: dependencies: '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/cosmokit': specifier: link:../../../vendor/cosmokit @@ -10791,10 +10791,10 @@ importers: version: 2.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/timer '@deepseek-ai/dsh-agent-default-model': specifier: workspace:* @@ -10822,7 +10822,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-shell': specifier: workspace:* @@ -10840,7 +10840,7 @@ importers: packages/shell/bash-sandbox: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-bash-local': specifier: workspace:* @@ -10864,7 +10864,7 @@ importers: specifier: workspace:* version: link:../../subprocess/subprocess-local '@deepseek-ai/node-addon-system': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../native/system/packages/entry packages/shell/pwsh-local: @@ -10874,7 +10874,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-shell': specifier: workspace:* @@ -10892,7 +10892,7 @@ importers: packages/shell/pwsh-sandbox: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-pwsh-local': specifier: workspace:* @@ -10919,7 +10919,7 @@ importers: packages/shell/shell: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': specifier: workspace:* @@ -10935,7 +10935,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -10963,7 +10963,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11030,13 +11030,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11085,7 +11085,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11152,13 +11152,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11213,7 +11213,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -11225,7 +11225,7 @@ importers: packages/skill/skill-badge: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-skill': specifier: workspace:* @@ -11244,7 +11244,7 @@ importers: version: 2.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -11266,13 +11266,13 @@ importers: version: 2.9.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-skill': specifier: workspace:* @@ -11285,7 +11285,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11319,13 +11319,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11343,7 +11343,7 @@ importers: packages/spill/spill: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -11362,13 +11362,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -11390,7 +11390,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11469,7 +11469,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-fs': specifier: workspace:* @@ -11494,7 +11494,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-sandbox': specifier: workspace:* @@ -11513,7 +11513,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-brand': specifier: workspace:* @@ -11574,7 +11574,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-ssh': specifier: workspace:* @@ -11589,7 +11589,7 @@ importers: packages/storage/storage: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/storage/storage-domain: @@ -11602,7 +11602,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -11618,7 +11618,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-storage': specifier: workspace:* @@ -11631,7 +11631,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-storage': specifier: workspace:* @@ -11656,7 +11656,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11747,10 +11747,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11814,7 +11814,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11881,10 +11881,10 @@ importers: version: 0.153.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -11942,10 +11942,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12006,10 +12006,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12049,13 +12049,13 @@ importers: version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12110,10 +12110,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12168,10 +12168,10 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12229,7 +12229,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12274,7 +12274,7 @@ importers: packages/subprocess/subprocess: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': specifier: workspace:* @@ -12299,7 +12299,7 @@ importers: version: 1.2.0-beta.15(patch_hash=b40ae545608897914bd25fb009c97eeac478c34e8a910298ddcb01b746534bb0) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-loader-smoke': specifier: workspace:* @@ -12321,13 +12321,13 @@ importers: version: 3.1.1 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/terminal/terminal: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12361,7 +12361,7 @@ importers: version: 6.0.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12395,13 +12395,13 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12455,7 +12455,7 @@ importers: packages/test-support/agent-loop-testkit: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12495,13 +12495,13 @@ importers: version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.9.3)(@vitest/coverage-v8@4.1.8)(happy-dom@20.11.6)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.0.16(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-api-gateway': specifier: workspace:* @@ -12597,7 +12597,7 @@ importers: packages/test-support/llm-mock-server: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/test-support/llm-replay: @@ -12610,7 +12610,7 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-compaction': specifier: workspace:* @@ -12635,7 +12635,7 @@ importers: version: 4.22.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12660,7 +12660,7 @@ importers: version: 4.1.8 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-api-settings-controller': specifier: workspace:* @@ -12681,7 +12681,7 @@ importers: specifier: 1.4.0 version: 1.4.0(zod@4.4.3) '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/dsh-llm-replay': specifier: workspace:* @@ -12700,7 +12700,7 @@ importers: version: 4.1.8(@opentelemetry/api@1.9.1)(@types/node@25.9.3)(@vitest/coverage-v8@4.1.8)(happy-dom@20.11.6)(jsdom@29.1.1(@noble/hashes@2.3.0))(vite@8.0.16(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)) devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12749,13 +12749,13 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -12798,7 +12798,7 @@ importers: version: 6.0.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-tool-cordis': specifier: workspace:* @@ -12817,10 +12817,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-app-boot': specifier: workspace:* @@ -12839,7 +12839,7 @@ importers: version: link:../../util/brand devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/typert/registry: @@ -12849,7 +12849,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-typert-protocol': specifier: workspace:* @@ -12858,13 +12858,13 @@ importers: packages/util/atomic-write: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/brand: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/chunked-list: @@ -12874,25 +12874,25 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/crypto: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/deque: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/home-paths: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/http-proxy: @@ -12902,7 +12902,7 @@ importers: version: 8.10.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -12911,55 +12911,55 @@ importers: packages/util/launch-environment: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/lazy-require: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/native-command: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/output-retention: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/package-manifest: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/time: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/timeout: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/values: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/util/workspace-path: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis packages/web/tool-web: @@ -12978,7 +12978,7 @@ importers: version: 7.2.4 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13030,7 +13030,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-llm': specifier: workspace:* @@ -13049,7 +13049,7 @@ importers: version: 8.10.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': specifier: workspace:* @@ -13068,7 +13068,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13099,7 +13099,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': specifier: workspace:* @@ -13118,7 +13118,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-http-proxy': specifier: workspace:* @@ -13140,13 +13140,13 @@ importers: version: link:../../util/values devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13189,13 +13189,13 @@ importers: version: 14.2.0 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-credentials': specifier: workspace:* @@ -13217,10 +13217,10 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/loader '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13269,7 +13269,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13317,7 +13317,7 @@ importers: packages/workflow/workflow: devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13348,7 +13348,7 @@ importers: version: link:../../../vendor/schemastery devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-agent': specifier: workspace:* @@ -13427,7 +13427,7 @@ importers: version: 4.4.3 devDependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../../vendor/cordis '@deepseek-ai/dsh-invariants': specifier: workspace:* @@ -13451,19 +13451,19 @@ importers: python/sdk-runtime: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/cordis '@deepseek-ai/cordis-plugin-group': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/group '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/loader '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../../vendor/timer '@deepseek-ai/cosmokit': specifier: link:../../vendor/cosmokit @@ -13886,10 +13886,10 @@ importers: vendor/cordis: dependencies: '@deepseek-ai/cordis-plugin-include': - specifier: workspace:^ + specifier: workspace:~ version: link:../include '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../loader '@deepseek-ai/cosmokit': specifier: link:../cosmokit @@ -13903,10 +13903,10 @@ importers: vendor/group: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../loader vendor/hmr: @@ -13915,10 +13915,10 @@ importers: specifier: ^7.29.0 version: 7.29.7 '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cordis-plugin-timer': - specifier: workspace:^ + specifier: workspace:~ version: link:../timer '@deepseek-ai/cosmokit': specifier: link:../cosmokit @@ -13946,10 +13946,10 @@ importers: vendor/include: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cordis-plugin-loader': - specifier: workspace:^ + specifier: workspace:~ version: link:../loader '@deepseek-ai/cosmokit': specifier: link:../cosmokit @@ -13961,7 +13961,7 @@ importers: vendor/loader: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cosmokit': specifier: link:../cosmokit @@ -13976,7 +13976,7 @@ importers: vendor/logger-console: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cosmokit': specifier: link:../cosmokit @@ -14000,7 +14000,7 @@ importers: vendor/timer: dependencies: '@deepseek-ai/cordis': - specifier: workspace:^ + specifier: workspace:~ version: link:../cordis '@deepseek-ai/cosmokit': specifier: link:../cosmokit diff --git a/python/sdk-runtime/package.json b/python/sdk-runtime/package.json index c37ab005d1..dc564d0e78 100644 --- a/python/sdk-runtime/package.json +++ b/python/sdk-runtime/package.json @@ -5,12 +5,12 @@ "private": true, "type": "module", "dependencies": { - "@deepseek-ai/cordis": "workspace:^", - "@deepseek-ai/cordis-plugin-group": "workspace:^", - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", + "@deepseek-ai/cordis-plugin-group": "workspace:~", + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis-plugin-timer": "workspace:~", + "@deepseek-ai/cosmokit": "workspace:~", "@deepseek-ai/dsh": "workspace:*", "@deepseek-ai/dsh-acp": "workspace:*", "@deepseek-ai/dsh-agent": "workspace:*", @@ -150,6 +150,6 @@ "@deepseek-ai/dsh-web-search-perplexity": "workspace:*", "@deepseek-ai/dsh-workflow": "workspace:*", "@deepseek-ai/dsh-workflow-ptc": "workspace:*", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/scripts/benchmark-next-package-dependency.spec.ts b/scripts/benchmark-next-package-dependency.spec.ts index 489b72c3cf..af950a7bd8 100644 --- a/scripts/benchmark-next-package-dependency.spec.ts +++ b/scripts/benchmark-next-package-dependency.spec.ts @@ -43,14 +43,14 @@ describe('next package benchmark graph', () => { name: '@f/probe', version: '1.0.0', peerDependencies: { - '@deepseek-ai/cordis': 'workspace:^', - '@f/runtime': 'workspace:^', - '@f/types': 'workspace:^', + '@deepseek-ai/cordis': 'workspace:~', + '@f/runtime': 'workspace:~', + '@f/types': 'workspace:~', }, devDependencies: { - '@deepseek-ai/cordis': 'workspace:^', - '@f/runtime': 'workspace:^', - '@f/types': 'workspace:^', + '@deepseek-ai/cordis': 'workspace:~', + '@f/runtime': 'workspace:~', + '@f/types': 'workspace:~', }, } const facts: PackageDependencyFacts = { @@ -87,8 +87,8 @@ describe('next package benchmark graph', () => { ])) expect(index.get('@f/probe')?.get('1.0.0')).toMatchObject({ - dependencies: { '@f/runtime': '^2.0.0' }, - peerDependencies: { '@deepseek-ai/cordis': '^4.0.1' }, + dependencies: { '@f/runtime': '~2.0.0' }, + peerDependencies: { '@deepseek-ai/cordis': '~4.0.1' }, }) expect(index.get('@f/probe')?.get('1.0.0')?.dependencies).not.toHaveProperty('@f/types') }) diff --git a/scripts/check-workspace-constraints.spec.ts b/scripts/check-workspace-constraints.spec.ts index 3a293b2863..c8893c8ecd 100644 --- a/scripts/check-workspace-constraints.spec.ts +++ b/scripts/check-workspace-constraints.spec.ts @@ -32,19 +32,22 @@ describe('workspace dependency ranges', () => { const cli = { dir: 'apps/cli', manifest: { name: '@deepseek-ai/dsh' } } const vendor = { dir: 'vendor/cordis', manifest: { name: '@deepseek-ai/cordis' } } const native = { dir: 'native/system', manifest: { name: '@deepseek-ai/node-addon-system' } } + const platform = { dir: 'native/system/packages/darwin-arm64', manifest: { name: '@deepseek-ai/node-addon-system-darwin-arm64' } } + const unrelated = { dir: 'tools/helper', manifest: { name: '@other/helper' } } describe.each([ '.', 'packages/core/probe', 'packages/experimental/probe', 'apps/cli', 'apps/web', 'apps/desktop', 'apps/desktop-host', 'benchmarks', 'website', 'python/sdk-runtime', 'tools/probe', + 'vendor/loader', 'native/system', 'native/system/packages/entry', ])('consumer %s', (dir) => { it.each(['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'] as const)( - 'requires exact DSH and caret vendor %s independently of the consumer name', + 'requires exact DSH and tilde vendor/native %s independently of the consumer name', (section) => { const consumer = (name: string, range: string): WorkspaceManifest => ({ dir, manifest: { name: 'consumer', [section]: { [name]: range } }, }) const check = (name: string, range: string): string[] => - checkWorkspaceProtocol([dependency, cli, vendor, native, consumer(name, range)]) + checkWorkspaceProtocol([dependency, cli, vendor, native, platform, unrelated, consumer(name, range)]) for (const name of ['@deepseek-ai/dsh', '@deepseek-ai/dsh-runtime']) { expect(check(name, 'workspace:*')).toEqual([]) for (const range of ['workspace:^', 'workspace:~', 'workspace:^0.1.7', '^0.1.7', '*']) { @@ -53,17 +56,19 @@ describe('workspace dependency ranges', () => { ]) } } - expect(check('@deepseek-ai/cordis', 'workspace:^')).toEqual([]) - for (const range of ['workspace:*', 'workspace:~', '^4.0.3']) { - expect(check('@deepseek-ai/cordis', range)).toEqual([ - `consumer: ${section}.@deepseek-ai/cordis must use workspace:^, got ${range}`, - ]) + for (const name of ['@deepseek-ai/cordis', '@deepseek-ai/node-addon-system', '@deepseek-ai/node-addon-system-darwin-arm64']) { + expect(check(name, 'workspace:~')).toEqual([]) + for (const range of ['workspace:*', 'workspace:^', '^4.0.3', '~4.0.3']) { + expect(check(name, range)).toEqual([ + `consumer: ${section}.${name} must use workspace:~, got ${range}`, + ]) + } } for (const range of ['workspace:*', 'workspace:^']) { - expect(check('@deepseek-ai/node-addon-system', range)).toEqual([]) + expect(check('@other/helper', range)).toEqual([]) } - expect(check('@deepseek-ai/node-addon-system', '^0.1.0')).toEqual([ - `consumer: ${section}.@deepseek-ai/node-addon-system must use the workspace: protocol, got ^0.1.0`, + expect(check('@other/helper', '^0.1.0')).toEqual([ + `consumer: ${section}.@other/helper must use the workspace: protocol, got ^0.1.0`, ]) expect(check('external', '^1.2.3')).toEqual([]) }, diff --git a/scripts/check-workspace-constraints.ts b/scripts/check-workspace-constraints.ts index 4ef941a22e..fc5b5a7d2e 100644 --- a/scripts/check-workspace-constraints.ts +++ b/scripts/check-workspace-constraints.ts @@ -574,7 +574,7 @@ export function checkExperimentalDependencyIsolation( } /** - * Require exact DSH ranges, caret vendor ranges, and the workspace protocol elsewhere. + * Require exact DSH ranges, tilde vendor/native ranges, and the workspace protocol elsewhere. * * A hand-written range says nothing about the version the workspace actually * carries, and `pnpm pack` leaves it alone: `^0.0.1` published from version @@ -586,7 +586,8 @@ export function checkExperimentalDependencyIsolation( */ export function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): string[] { const members = new Set(manifests.map(entry => entry.manifest.name).filter(name => name !== undefined)) - const vendors = new Set(manifests.filter(entry => entry.dir.startsWith('vendor/')).map(entry => entry.manifest.name)) + const vendors = new Set(manifests.filter(entry => entry.dir.startsWith('vendor/') + || entry.dir === 'native/system' || entry.dir.startsWith('native/system/packages/')).map(entry => entry.manifest.name)) const errors: string[] = [] for (const { dir, manifest } of manifests) { for (const section of dependencySections) { @@ -594,7 +595,7 @@ export function checkWorkspaceProtocol(manifests: readonly WorkspaceManifest[]): if (!members.has(name)) continue const expected = name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-') ? 'workspace:*' - : vendors.has(name) ? 'workspace:^' : undefined + : vendors.has(name) ? 'workspace:~' : undefined if (expected !== undefined ? range === expected : range.startsWith('workspace:')) continue errors.push(`${manifest.name ?? dir}: ${section}.${name} must use ${expected ?? 'the workspace: protocol'}, got ${range}`) } diff --git a/scripts/rescope-vendor.ts b/scripts/rescope-vendor.ts index dc12992278..2f724032d1 100644 --- a/scripts/rescope-vendor.ts +++ b/scripts/rescope-vendor.ts @@ -229,7 +229,7 @@ const EXACT_EDITS: readonly ExactEdit[] = [ id: 'vendor-readme-preamble', file: 'vendor/README.md', find: 'All vendored packages keep their **original npm names** (they are resolved through pnpm workspaces) and are marked `private: true` — they are never published from this repo.', - replace: 'All vendored packages use the **`@deepseek-ai` scope** (`cordis` → `@deepseek-ai/cordis`, `@cordisjs/plugin-` → `@deepseek-ai/cordis-plugin-`). The manifest table records upstream versions and source commits; each package manifest carries its Harness release version and publication metadata. Repository-owned runtime dependencies use `workspace:^`, so local builds resolve the pinned workspace packages and publication substitutes release ranges.', + replace: 'All vendored packages use the **`@deepseek-ai` scope** (`cordis` → `@deepseek-ai/cordis`, `@cordisjs/plugin-` → `@deepseek-ai/cordis-plugin-`). The manifest table records upstream versions and source commits; each package manifest carries its Harness release version and publication metadata. References to vendored packages use `workspace:~`, so local builds resolve the workspace packages and published ranges permit patch updates within the same minor version.', expect: 1, }, { @@ -244,7 +244,7 @@ const EXACT_EDITS: readonly ExactEdit[] = [ id: 'root-agents-vendored-name-contract', file: 'AGENTS.md', find: 'vendored packages keep upstream names and are `private: true`. `cordis` is a peerDependency (+ dev) of every harness package.', - replace: 'vendored packages are rescoped ([mapping](docs/rescope.md)) and `private: true`. `@deepseek-ai/cordis` is a peerDependency (+ dev) of every harness package.', + replace: 'vendor is [rescoped](docs/rescope.md) and `private: true`. Harness packages declare `@deepseek-ai/cordis` in `peerDependencies`/`devDependencies`.', expect: 1, }, { diff --git a/scripts/verify-package-dependencies.spec.ts b/scripts/verify-package-dependencies.spec.ts index 9a15d1b60b..b7eb92b7d6 100644 --- a/scripts/verify-package-dependencies.spec.ts +++ b/scripts/verify-package-dependencies.spec.ts @@ -121,8 +121,8 @@ function generatedHostFixture(mode: 'schema' | 'object'): { root: string; manife }, files: ['lib/typert.host.js', 'lib/typert.host.d.ts'], dependencies: { zod: '^4.0.0' }, - devDependencies: { [CORDIS]: 'workspace:^' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const files = { 'tsconfig.base.json': JSON.stringify({ @@ -680,9 +680,9 @@ describe('dependency sections', () => { 'src/index.ts': 'export function apply() {}', 'src/client/index.ts': "import 'external'", }, { - devDependencies: { [CORDIS]: 'workspace:^' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, - [section]: { [CORDIS]: 'workspace:^', external: '~1.2.3' }, + devDependencies: { [CORDIS]: 'workspace:~' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, + [section]: { [CORDIS]: 'workspace:~', external: '~1.2.3' }, peerDependenciesMeta: { external: { optional: true } }, }) if (section === 'optionalDependencies') delete subject.manifest.optionalDependencies?.[CORDIS] @@ -745,8 +745,8 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*', external: '^1.2.3' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const base = facts(manifest) const subject: PackageDependencyFacts = { @@ -772,8 +772,8 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-client-locale', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const base = facts(manifest) const subject: PackageDependencyFacts = { @@ -790,8 +790,8 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*', external: '^1.0.0' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*', external: '^1.0.0' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const subject: PackageDependencyFacts = { ...facts(manifest), @@ -831,14 +831,14 @@ describe('dependency sections', () => { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*', - '@deepseek-ai/schemastery': 'workspace:^', + '@deepseek-ai/schemastery': 'workspace:~', external: '^1.0.0', }, devDependencies: { '@deepseek-ai/dsh-types': 'workspace:*', - [CORDIS]: 'workspace:^', + [CORDIS]: 'workspace:~', }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } expect(collectPackageDependencyViolations({ facts: [facts(manifest)], packages: [], policyViolations: [], workspaceNames: facts(manifest).workspaceNames, @@ -859,8 +859,8 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const subject = facts(manifest) const safetyViolations = collectHostDependencyExportPolicyViolations( @@ -884,8 +884,8 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-runtime': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-types': 'workspace:*' }, - peerDependencies: { [CORDIS]: 'workspace:^' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:~' }, } const subject: PackageDependencyFacts = { ...facts(manifest), @@ -905,11 +905,11 @@ describe('dependency sections', () => { repairPackageDependencyManifest(subject) expect(manifest.dependencies).toBeUndefined() expect(manifest.peerDependencies).toMatchObject({ - [CORDIS]: 'workspace:^', + [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(manifest.devDependencies).toMatchObject({ - [CORDIS]: 'workspace:^', + [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(formatPeerRequiredRuntimeDependencies({ @@ -924,7 +924,7 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/dsh-types': 'workspace:^' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*' }, peerDependencies: { [CORDIS]: 'workspace:*', '@deepseek-ai/dsh-runtime': 'workspace:*' }, peerDependenciesMeta: { '@deepseek-ai/dsh-missing': { optional: true } }, } @@ -948,9 +948,9 @@ describe('dependency sections', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', dependencies: { '@deepseek-ai/schemastery': 'workspace:*', external: '^1.0.0' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*' }, peerDependencies: { - [CORDIS]: 'workspace:^', + [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*', '@deepseek-ai/dsh-stale': 'workspace:*', }, @@ -963,27 +963,27 @@ describe('dependency sections', () => { expect(fixPackageDependencies(root, state)).toEqual([manifestPath]) const fixed = JSON.parse(readFileSync(join(root, manifestPath), 'utf8')) as PackageDependencyManifest expect(fixed.dependencies).toEqual({ - '@deepseek-ai/schemastery': 'workspace:^', + '@deepseek-ai/schemastery': 'workspace:~', external: '^1.0.0', '@deepseek-ai/dsh-runtime': 'workspace:*', }) expect(fixed.devDependencies).toEqual({ - [CORDIS]: 'workspace:^', + [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-types': 'workspace:*', '@deepseek-ai/dsh-stale': 'workspace:*', }) - expect(fixed.peerDependencies).toEqual({ [CORDIS]: 'workspace:^' }) + expect(fixed.peerDependencies).toEqual({ [CORDIS]: 'workspace:~' }) expect(fixed.peerDependenciesMeta).toBeUndefined() }) it('repairs an in-memory manifest for benchmark simulation', () => { const manifest: PackageDependencyManifest = { name: '@deepseek-ai/dsh-probe', - peerDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, - devDependencies: { [CORDIS]: 'workspace:^', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + peerDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*' }, + devDependencies: { [CORDIS]: 'workspace:~', '@deepseek-ai/dsh-runtime': 'workspace:*' }, } repairPackageDependencyManifest(facts(manifest)) expect(manifest.dependencies).toEqual({ '@deepseek-ai/dsh-runtime': 'workspace:*' }) - expect(manifest.peerDependencies).toEqual({ [CORDIS]: 'workspace:^' }) + expect(manifest.peerDependencies).toEqual({ [CORDIS]: 'workspace:~' }) }) }) diff --git a/scripts/verify-package-dependencies.ts b/scripts/verify-package-dependencies.ts index e74bf63fc7..884cdb8a80 100644 --- a/scripts/verify-package-dependencies.ts +++ b/scripts/verify-package-dependencies.ts @@ -20,8 +20,8 @@ import { const GATE = 'verify-package-dependencies' const CORDIS = '@deepseek-ai/cordis' -function workspaceRange(name: string): 'workspace:*' | 'workspace:^' { - return name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-') ? 'workspace:*' : 'workspace:^' +function workspaceRange(name: string): 'workspace:*' | 'workspace:~' { + return name === '@deepseek-ai/dsh' || name.startsWith('@deepseek-ai/dsh-') ? 'workspace:*' : 'workspace:~' } const RELEASE_MANIFEST_GLOB = 'packages/!(experimental)/*/package.json' const WORKSPACE_MANIFEST_GLOBS = [ diff --git a/vendor/README.md b/vendor/README.md index f6e31b6617..cfe68fc15e 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -2,7 +2,7 @@ This directory contains source-vendored copies of the Cordis framework and its foundation libraries. They are copied into this monorepo instead of being depended on via npm, so that the harness fully owns its framework layer (auditable, patchable, pinned). -All vendored packages use the **`@deepseek-ai` scope** (`cordis` → `@deepseek-ai/cordis`, `@cordisjs/plugin-` → `@deepseek-ai/cordis-plugin-`). The manifest table records upstream versions and source commits; each package manifest carries its Harness release version and publication metadata. Repository-owned runtime dependencies use `workspace:^`, so local builds resolve the pinned workspace packages and publication substitutes release ranges. Upstream MIT `LICENSE` files are preserved in each package directory. +All vendored packages use the **`@deepseek-ai` scope** (`cordis` → `@deepseek-ai/cordis`, `@cordisjs/plugin-` → `@deepseek-ai/cordis-plugin-`). The manifest table records upstream versions and source commits; each package manifest carries its Harness release version and publication metadata. References to vendored packages use `workspace:~`, so local builds resolve the workspace packages and published ranges permit patch updates within the same minor version. Upstream MIT `LICENSE` files are preserved in each package directory. This file covers the manifest, the local-modification log, and the procedure for **updating** an existing vendored package. To **add a new** one, see the cookbook guide: [docs/cookbook/adding-a-vendored-package.md](../docs/cookbook/adding-a-vendored-package.md). @@ -31,7 +31,7 @@ Intentionally **not** vendored (verified unused by this set): `reggol`, `@cordis Keep this log exhaustive — every divergence from upstream must be listed. 1. **`hmr/src/index.ts`**: removed the `./locales/en-US.yml` / `./locales/zh-CN.yml` imports, the `.i18n({...})` call on the `Config` schema, and the `src/locales/` directory. Rationale: those imports require a runtime YAML loader hook (`@cordisjs/unyaml`) that we do not vendor; the i18n texts only localize config descriptions. -2. **All `package.json` files**: regenerated for Harness releases with scoped names, release versions, publication metadata, precise bundled-runtime and `lib/types/**/*.d.ts` / `.d.ts.map` file entries, source exports where applicable, and declaration metadata pointing at `lib/types`. Repository-owned dependencies use the workspace protocol. HMR declares `esbuild` as a direct dev dependency for its imported `BuildFailure` type, and Loader requires `node-addon-require-builtin@^0.1.4` to match published app runtimes. +2. **All `package.json` files**: regenerated for Harness releases with scoped names, release versions, publication metadata, precise bundled-runtime and `lib/types/**/*.d.ts` / `.d.ts.map` file entries, source exports where applicable, and declaration metadata pointing at `lib/types`. References within the vendored set use `workspace:~`. HMR declares `esbuild` as a direct dev dependency for its imported `BuildFailure` type, and Loader requires `node-addon-require-builtin@^0.1.4` to match published app runtimes. 3. **All `tsconfig.json` files**: regenerated to extend the repo-root `tsconfig.base.json`, emit TypeScript intermediates to `lib/types`, and declare project references. 4. **Vendored TypeScript source internal specifiers**: changed local relative imports/exports from upstream's specifier shape to explicit `.ts` specifiers so TypeScript rewrites emitted JS to `.js` while declarations keep explicit, NodeNext-safe `.ts` specifiers. This includes `loader/src/config/isolate.ts` using `declare module './entry.ts'`. Type-only dependencies use `import type` or inline `type` modifiers so ESM output does not retain erased interfaces. 5. **`schemastery/tsdown.config.ts` and `logger-console/tsdown.config.ts`**: ours, not upstream files — per-package build-shape overrides (dual ESM+CJS output; separate node/browser entries) for the repo-root tsdown build. They read the JS emitted under `lib/types` and then write the publish runtime entries under `lib/`. Like the regenerated tsconfigs, they are not part of the upstream sync surface. diff --git a/vendor/cordis/package.json b/vendor/cordis/package.json index 46ad178a84..35fe271452 100644 --- a/vendor/cordis/package.json +++ b/vendor/cordis/package.json @@ -33,8 +33,8 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-include": "workspace:^", - "@deepseek-ai/cordis-plugin-loader": "workspace:^" + "@deepseek-ai/cordis-plugin-include": "workspace:~", + "@deepseek-ai/cordis-plugin-loader": "workspace:~" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-include": { @@ -46,6 +46,6 @@ }, "dependencies": { "@standard-schema/spec": "^1.1.0", - "@deepseek-ai/cosmokit": "workspace:^" + "@deepseek-ai/cosmokit": "workspace:~" } } diff --git a/vendor/group/package.json b/vendor/group/package.json index 98c2e9bd8a..0b09a6a6fe 100644 --- a/vendor/group/package.json +++ b/vendor/group/package.json @@ -30,7 +30,7 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" } } diff --git a/vendor/hmr/package.json b/vendor/hmr/package.json index 6cd07604d0..762a3ac0bc 100644 --- a/vendor/hmr/package.json +++ b/vendor/hmr/package.json @@ -41,15 +41,15 @@ } }, "peerDependencies": { - "@deepseek-ai/cordis-plugin-timer": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-timer": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { "@babel/code-frame": "^7.29.0", "chokidar": "^4.0.3", - "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/cosmokit": "workspace:~", "picomatch": "^4.0.3", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/schemastery": "workspace:~" }, "devDependencies": { "@types/babel__code-frame": "^7.27.0", diff --git a/vendor/include/package.json b/vendor/include/package.json index fdd41d672d..4768e23f39 100644 --- a/vendor/include/package.json +++ b/vendor/include/package.json @@ -30,11 +30,11 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis-plugin-loader": "workspace:^", - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis-plugin-loader": "workspace:~", + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/cosmokit": "workspace:^", + "@deepseek-ai/cosmokit": "workspace:~", "js-yaml": "^4.1.0" } } diff --git a/vendor/loader/package.json b/vendor/loader/package.json index 28e568c351..d32e003efc 100644 --- a/vendor/loader/package.json +++ b/vendor/loader/package.json @@ -30,7 +30,7 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^", + "@deepseek-ai/cordis": "workspace:~", "node-addon-require-builtin": "^0.1.6" }, "peerDependenciesMeta": { @@ -39,7 +39,7 @@ } }, "dependencies": { - "@deepseek-ai/cosmokit": "workspace:^", - "@deepseek-ai/schemastery": "workspace:^" + "@deepseek-ai/cosmokit": "workspace:~", + "@deepseek-ai/schemastery": "workspace:~" } } diff --git a/vendor/logger-console/package.json b/vendor/logger-console/package.json index 62f0590354..efc444afcc 100644 --- a/vendor/logger-console/package.json +++ b/vendor/logger-console/package.json @@ -32,11 +32,11 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/cosmokit": "workspace:^", - "@deepseek-ai/schemastery": "workspace:^", + "@deepseek-ai/cosmokit": "workspace:~", + "@deepseek-ai/schemastery": "workspace:~", "supports-color": "^9.4.0" } } diff --git a/vendor/schemastery/package.json b/vendor/schemastery/package.json index 0f0402276f..b8a6465592 100644 --- a/vendor/schemastery/package.json +++ b/vendor/schemastery/package.json @@ -34,6 +34,6 @@ "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.1.0", - "@deepseek-ai/cosmokit": "workspace:^" + "@deepseek-ai/cosmokit": "workspace:~" } } diff --git a/vendor/timer/package.json b/vendor/timer/package.json index bb64d6153f..381299be6e 100644 --- a/vendor/timer/package.json +++ b/vendor/timer/package.json @@ -30,9 +30,9 @@ "author": "Shigma ", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "workspace:^" + "@deepseek-ai/cordis": "workspace:~" }, "dependencies": { - "@deepseek-ai/cosmokit": "workspace:^" + "@deepseek-ai/cosmokit": "workspace:~" } } From 838eff14ebb4acad8c1b246c7302e15d6f294ab1 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 21:44:00 +0800 Subject: [PATCH 24/35] fix(chat): preserve reading intent around group scrolling --- packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 4 +- packages/client/ui-chat/README.zh.md | 4 +- .../src/client/chat/use-chat-viewport.ts | 16 ++++++-- .../src/client/chat/use-process-scroll.ts | 5 ++- .../src/client/chat/use-scroll-follow.ts | 22 ++++++++++- .../conversation-nodes/README.i18n.yaml | 4 +- .../src/client/conversation-nodes/README.md | 2 +- .../client/conversation-nodes/README.zh.md | 2 +- .../ui-chat/tests/chat-view.client.spec.tsx | 2 +- .../tests/chat-viewport.client.spec.ts | 27 +++++++++++++ .../tests/scroll-follow.client.spec.ts | 38 +++++++++++++++++++ 12 files changed, 113 insertions(+), 17 deletions(-) diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index b9540e5856..db19a1294a 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: e68799e282e4e7db5d84f91154cebadc1b0607b4 -README.zh.md: d00f9fe128487165949f7065bd78138d07d80c4f +README.md: 406d8de41fb8ee3f8d1f4f0676ee36e68d5bc684 +README.zh.md: 6ca8c67cda401e96995631105642d3d4ab14c541 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index e68799e282..406d8de41f 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -122,9 +122,9 @@ While the pointer is outside the rail, automatic follow keeps the rail still whe
Scroll implementation — click to expand -`useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Growth retains an in-flight target until `scrollend`; arrival at that target or its shrink-clamped position continues toward the latest floor, while another endpoint releases following. Opening placement remains immediate. +`useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Growth retains an in-flight target until `scrollend`; arrival at that target or its shrink-clamped position continues toward the latest floor, while another endpoint releases following. Opening placement remains immediate. A bottom-follow request within tolerance uses immediate positioning when no animation is outstanding, so a fractional no-op cannot leave a pending smooth target. -`useChatViewport` owns turn-aware DOM reads, clamped writes, native events, and one retained paging anchor. For Load older, Node and Group seats mark eligible anchors from their existing disclosure state. The viewport selects the first nonempty, unhidden marker in transcript order without hit testing or geometry-based search, then measures that element and its scroll containers. It compensates the anchor's capped group first, then gives the remaining displacement to the transcript scrollport. Commits and later content resizes reuse that anchor; a remounted row is resolved by the same semantic key. Compensation stays within the actual scroll ranges without adding bottom space. +`useChatViewport` owns turn-aware DOM reads, clamped writes, native events, and one retained paging anchor. For Load older, Node and Group seats mark eligible anchors from their existing disclosure state. The viewport selects the first nonempty, unhidden marker in transcript order without hit testing or geometry-based search, then measures that element and its scroll containers. It compensates the anchor's capped group first, then gives the remaining displacement to the transcript scrollport. An inner compensation write cancels that group's animation through its bound controller and pauses following; reader scrolling back to the bottom resumes it. Commits and later content resizes reuse that anchor; a remounted row is resolved by the same semantic key. Compensation stays within the actual scroll ranges without adding bottom space. `useChatReading` owns follow policy, sampled reader input, and semantic memory; `useChatNavigation` owns turn jumps and requests preservation from the viewport. Reading gestures release the paging anchor, but composer clicks, typing, and non-scrolling keys retain it; while a page is still loading, `scrollend` captures the reader's new position. `useChatScroll` coordinates their committed inputs. Explicit navigation carries its measured landing into reading policy, so it does not rediscover the known target with a hit test. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index d00f9fe128..6ca8c67cda 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -122,9 +122,9 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且
滚动实现——点击展开 -`useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。`scrollend` 前的增长保留当前动画目标;到达该目标或因内容缩短而钳制的位置后,再追随最新底部;停在其他位置则释放跟随。展开时仍即时定位。 +`useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。`scrollend` 前的增长保留当前动画目标;到达该目标或因内容缩短而钳制的位置后,再追随最新底部;停在其他位置则释放跟随。展开时仍即时定位。没有进行中动画时,容差范围内的贴底请求使用即时定位,避免小数位置上的无位移操作留下未结束的平滑目标。 -`useChatViewport` 负责识别轮次的 DOM 读取、限制范围后的写入、原生事件及一个持续保留的分页锚点。加载更早时,Node 与 Group 容器根据已有开合状态标记可选锚点。视口按正文顺序选择第一个非空、未隐藏的标记,不做命中测试或按几何位置搜索,再测量该元素及其滚动容器。先补偿锚点所在的限高组,再把剩余位移交给整段文本的滚动区域。提交和后续内容尺寸变化复用该锚点;消息行重挂载时按同一语义 key 重新定位。补偿限于实际可滚动范围,不增加底部空白。 +`useChatViewport` 负责识别轮次的 DOM 读取、限制范围后的写入、原生事件及一个持续保留的分页锚点。加载更早时,Node 与 Group 容器根据已有开合状态标记可选锚点。视口按正文顺序选择第一个非空、未隐藏的标记,不做命中测试或按几何位置搜索,再测量该元素及其滚动容器。先补偿锚点所在的限高组,再把剩余位移交给整段文本的滚动区域。内层补偿写入通过该组绑定的控制器取消动画并暂停跟随,读者滚回底部后恢复。提交和后续内容尺寸变化复用该锚点;消息行重挂载时按同一语义 key 重新定位。补偿限于实际可滚动范围,不增加底部空白。 `useChatReading` 负责跟随策略、读者输入采样和语义位置记忆;`useChatNavigation` 负责轮次跳转,并向视口请求位置保持。阅读手势释放分页锚点,composer 内的点击、打字和非滚动按键则保留锚点;分页仍在加载时,`scrollend` 会记录读者的新位置。`useChatScroll` 协调已提交的输入。显式导航把测得的落点交给阅读策略,因此无需通过命中测试重新寻找已知目标。 diff --git a/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts b/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts index b9ab90c4e9..f74153097c 100644 --- a/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts +++ b/packages/client/ui-chat/src/client/chat/use-chat-viewport.ts @@ -2,7 +2,7 @@ import { useLayoutEffect, useRef, useState, type RefObject } from 'react' import type { ChatScrollPosition } from '../contract/slots.ts' import type { ChatSnapshot } from '../contract/snapshot.ts' -import { scrollMetrics, type ScrollFollow, type ViewportMetrics } from './use-scroll-follow.ts' +import { scrollMetrics, ScrollFollow, type ViewportMetrics } from './use-scroll-follow.ts' export type { ViewportMetrics } from './use-scroll-follow.ts' /** Scroll geometry attributed against the last acknowledged position. */ @@ -337,6 +337,7 @@ export class ChatViewport { /** * Compensate inner scrolling first, then the outer scrollport, within their actual scroll ranges. + * An inner write pauses its bound follow controller so the reading anchor takes priority. * @returns the actual landing, or null when no visible retained row remains. */ preserve(): ViewportLanding | null { @@ -360,9 +361,16 @@ export class ChatViewport { } if (group !== null && group.body.contains(row)) { const top = row.getBoundingClientRect().top - group.body.getBoundingClientRect().top - const floor = Math.max(0, group.body.scrollHeight - group.body.clientHeight) - const target = Math.max(0, Math.min(floor, group.body.scrollTop + top - group.top)) - if (group.body.scrollTop !== target) group.body.scrollTop = target + const metrics = scrollMetrics(group.body) + const target = Math.max(0, Math.min(metrics.floor, metrics.top + top - group.top)) + if (metrics.top !== target) { + const follow = ScrollFollow.forElement(group.body) + if (follow === undefined) group.body.scrollTop = target + else { + follow.jump(group.body, metrics, target) + follow.setFollowing(false) + } + } } const metrics = this.metrics() if (metrics === null) return null diff --git a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts index bb1f0961bf..7b64ef18e2 100644 --- a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts +++ b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts @@ -33,6 +33,7 @@ export function useProcessScroll( const initial = cause === 'resize' ? initialPosition.current : null if (initial !== null) { metrics = follow.jump(body, metrics, initial === 'bottom' ? metrics.floor : 0) + if (initial === 'top') follow.setFollowing(false) initialPosition.current = null } else { const wasAnimating = follow.animating @@ -69,15 +70,17 @@ export function useProcessScroll( useLayoutEffect(() => { const body = bodyRef.current if (body === null || !open || typeof ResizeObserver === 'undefined') return + const unbind = follow.bind(body) const observer = new ResizeObserver(() => { sync('resize') }) const onScrollEnd = (event: Event): void => { if (event.target === body) sync('scrollend') } body.addEventListener('scrollend', onScrollEnd) observer.observe(body) if (contentRef.current !== null) observer.observe(contentRef.current) return () => { + unbind() observer.disconnect() body.removeEventListener('scrollend', onScrollEnd) } - }, [bodyRef, contentRef, open, sync]) + }, [bodyRef, contentRef, follow, open, sync]) return { edges, events, initialize } } diff --git a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts index 7eaeea9939..398e89e65f 100644 --- a/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts +++ b/packages/client/ui-chat/src/client/chat/use-scroll-follow.ts @@ -20,6 +20,7 @@ export function scrollMetrics(element: HTMLElement): ViewportMetrics { /** One scrollport's follow intent; native animation progress does not count as reader movement. */ export class ScrollFollow { + private static readonly owners = new WeakMap() private target: number | null = null private sampledTop: number | undefined @@ -29,6 +30,23 @@ export class ScrollFollow { */ constructor(private following: boolean, private readonly threshold: number) {} + /** + * Find the mounted controller for reading-position compensation. + * @param element - scrollport with an optional follow owner. + * @returns its controller, when bound. + */ + static forElement(element: HTMLElement): ScrollFollow | undefined { return this.owners.get(element) } + + /** + * Share this controller with reading-position compensation for the same scrollport. + * @param element - owned scrollport. + * @returns release the association on unmount or close. + */ + bind(element: HTMLElement): () => void { + ScrollFollow.owners.set(element, this) + return () => { if (ScrollFollow.owners.get(element) === this) ScrollFollow.owners.delete(element) } + } + /** * Expose follow intent independently of the current offset. * @returns whether content growth should follow the floor. @@ -110,6 +128,7 @@ export class ScrollFollow { /** * Follow the measured floor, respecting reduced motion for smooth requests. * An outstanding smooth target finishes before another is issued. + * Within-tolerance positioning is immediate while no animation is outstanding. * @param element - scrolling element. * @param metrics - current geometry. * @param behavior - native animation for growth, or immediate positioning. @@ -117,7 +136,8 @@ export class ScrollFollow { */ toBottom(element: HTMLElement, metrics: ViewportMetrics, behavior: 'instant' | 'smooth'): ViewportMetrics { this.following = true - if (behavior === 'instant' || metrics.top >= metrics.floor) return this.jump(element, metrics, metrics.floor) + if (behavior === 'instant' || metrics.top >= metrics.floor + || (!this.animating && this.nearBottom(metrics))) return this.jump(element, metrics, metrics.floor) if (typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches) { return this.jump(element, metrics, metrics.floor) } 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 0e18736b2a..028cbb1caf 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 @@ -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/src/client/conversation-nodes/README.md -README.md: 371c4cccd9b9e88cf518b99c48f84423908690d6 -README.zh.md: ddb1f9633be63adae7946e5cb32f98a1e9be9ee8 +README.md: 3a1660677e173461c353da1d40af3e8adae6d216 +README.zh.md: 024ea0f5da55826651611a7059a647b0c6478e08 diff --git a/packages/client/ui-chat/src/client/conversation-nodes/README.md b/packages/client/ui-chat/src/client/conversation-nodes/README.md index 371c4cccd9..3a1660677e 100644 --- a/packages/client/ui-chat/src/client/conversation-nodes/README.md +++ b/packages/client/ui-chat/src/client/conversation-nodes/README.md @@ -153,7 +153,7 @@ English lowercases the initial letter of joined labels after the first. Closing Group headers show a category icon, replace it with a down arrow on hover or keyboard focus, and show an up arrow while open. Manually expanded group bodies use 8px row spacing, a `min(400px, 50vh)` height cap, and 24px directional fades. Wheel scrolling can continue into the outer transcript at an edge. Expanded mode removes the group-level cap and uses 16px row spacing only in running Turns. -An open capped group follows content growth only while its own scroll position is at the bottom. Scrolling away pauses that group's following; returning to the bottom resumes it, independently of outer transcript following. Manually opening an unclosed group starts at the bottom and follows growth; manually opening a closed group starts at the top. Closing the group in the data or restoring its height cap through a mode change does not reset an already-open reader's position. Browser find retains its own reveal position. +An open capped group follows content growth only while its own scroll position is at the bottom. Scrolling away pauses that group's following; returning to the bottom resumes it, independently of outer transcript following. Manually opening an unclosed group starts at the bottom and follows growth; manually opening a closed group starts at the top with following disabled, even when its initial content fits without scrolling. Closing the group in the data or restoring its height cap through a mode change does not reset an already-open reader's position. Browser find retains its own reveal position. Individual reasoning starts collapsed, including while streaming. All modes preview the latest paragraph whose first line ends with a newline; an unfinished single line has no preview. Later text in that paragraph does not change the preview. After settlement, the mode table applies. Expanded reasoning uses compact Markdown typography. diff --git a/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md b/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md index ddb1f9633b..024ea0f5da 100644 --- a/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md +++ b/packages/client/ui-chat/src/client/conversation-nodes/README.zh.md @@ -153,7 +153,7 @@ description: "Chat 过程分组与活动摘要的明细业务规则。" 组头显示类别图标,悬停或键盘聚焦时替换为向下箭头,展开时显示向上箭头。手动展开的组正文使用 8px 行间距、`min(400px, 50vh)` 限高及 24px 方向渐隐;到达边缘时滚轮可以继续滚动外层文本记录。完全展开模式仅对运行中轮次取消组级限高,使用 16px 行间距。 -已展开的限高组仅在自己的滚动位置处于底部时跟随内容增长。滚离底部暂停该组跟随,滚回底部后恢复,与外层文本记录的跟随状态独立。手动展开未关闭的组时定位到底部并跟随增长;手动展开已关闭的组时从顶部开始。数据中的组变为已关闭,或通过模式切换恢复限高时,不重置已展开组的阅读位置。浏览器查找沿用自身的展开定位。 +已展开的限高组仅在自己的滚动位置处于底部时跟随内容增长。滚离底部暂停该组跟随,滚回底部后恢复,与外层文本记录的跟随状态独立。手动展开未关闭的组时定位到底部并跟随增长;手动展开已关闭的组时从顶部开始且不启用跟随,即使初始内容无需滚动即可容纳。数据中的组变为已关闭,或通过模式切换恢复限高时,不重置已展开组的阅读位置。浏览器查找沿用自身的展开定位。 单个推理初始收起,包括流式输出期间。三档都预览最近一个首行以换行结束的段落;未完成的单行没有预览,该段落后续文本不改变预览。结算后按上表展示。展开的推理使用紧凑 Markdown 排版。 diff --git a/packages/client/ui-chat/tests/chat-view.client.spec.tsx b/packages/client/ui-chat/tests/chat-view.client.spec.tsx index 6a2bf5b34d..06098a7dac 100644 --- a/packages/client/ui-chat/tests/chat-view.client.spec.tsx +++ b/packages/client/ui-chat/tests/chat-view.client.spec.tsx @@ -818,7 +818,7 @@ describe('ChatView', () => { height = 800 act(() => { observer.callback([], observer) }) finishScroll() - expect(top).toBe(!closed || initialHeight === 200 ? 600 : 0) + expect(top).toBe(closed ? 0 : 600) top = 400 fireEvent.scroll(body) diff --git a/packages/client/ui-chat/tests/chat-viewport.client.spec.ts b/packages/client/ui-chat/tests/chat-viewport.client.spec.ts index a7e42c0f33..7dd39a8698 100644 --- a/packages/client/ui-chat/tests/chat-viewport.client.spec.ts +++ b/packages/client/ui-chat/tests/chat-viewport.client.spec.ts @@ -2,6 +2,7 @@ import { expect, it, onTestFinished, vi } from 'vitest' import { ChatViewport } from '../src/client/chat/use-chat-viewport.ts' +import { ScrollFollow, scrollMetrics } from '../src/client/chat/use-scroll-follow.ts' function fixture() { const column = document.createElement('div') @@ -430,6 +431,32 @@ it.each([ expect(h.row.getBoundingClientRect().top).toBe(top) }) +it('gives paging compensation priority over an active inner follow animation', () => { + const h = nestedFixture(600, 400) + const follow = new ScrollFollow(true, 1) + onTestFinished(follow.bind(h.body)) + const scrollTo = vi.fn((options?: ScrollToOptions | number, y?: number) => { + if (typeof options === 'number') h.body.scrollTop = y ?? 0 + else if (options?.behavior === 'instant') h.body.scrollTop = options.top ?? 0 + }) + h.body.scrollTo = scrollTo + h.body.scrollTop = 100 + const top = h.begin() + follow.toBottom(h.body, scrollMetrics(h.body), 'smooth') + expect(follow.animating).toBe(true) + h.prepend(200) + h.viewport.preserve() + expect(h.row.getBoundingClientRect().top).toBe(top) + expect(scrollTo).toHaveBeenLastCalledWith({ top: 300, behavior: 'instant' }) + expect(follow.animating).toBe(false) + expect(follow.active).toBe(false) + follow.sample(scrollMetrics(h.body)) + follow.settle(scrollMetrics(h.body)) + expect(follow.active).toBe(false) + h.body.scrollTop = scrollMetrics(h.body).floor + expect(follow.sample(scrollMetrics(h.body))).toBe(true) +}) + it.each(['wheel', 'touchstart', 'pointerdown', 'keydown', 'beforematch'])( 'retains the same paging anchor through later content resizes until %s', (intent) => { const h = nestedFixture(200, 400) diff --git a/packages/client/ui-chat/tests/scroll-follow.client.spec.ts b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts index b7e9a1fa8f..5c90959ee0 100644 --- a/packages/client/ui-chat/tests/scroll-follow.client.spec.ts +++ b/packages/client/ui-chat/tests/scroll-follow.client.spec.ts @@ -19,6 +19,44 @@ function scrollport() { } describe('ScrollFollow', () => { + it('does not await native events for a fractional floor that cannot move', () => { + const world = scrollport() + let top = 399.6 + Object.defineProperty(world.element, 'scrollTop', { + get: () => top, set: (value: number) => { top = Math.min(value, world.metrics().floor - 0.4) }, + }) + const follow = new ScrollFollow(true, 1) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).not.toHaveBeenCalled() + expect(follow.animating).toBe(false) + expect(follow.active).toBe(true) + world.grow(800) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(world.scrollTo).toHaveBeenCalledExactlyOnceWith({ top: 600, behavior: 'smooth' }) + top = 599.6 + follow.sample(world.metrics()) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(follow.animating).toBe(true) + expect(world.scrollTo).toHaveBeenCalledTimes(1) + follow.settle(world.metrics()) + follow.toBottom(world.element, world.metrics(), 'smooth') + expect(follow.animating).toBe(false) + expect(world.scrollTo).toHaveBeenCalledTimes(1) + }) + + it('releases only its own scrollport binding', () => { + const { element } = scrollport() + const first = new ScrollFollow(false, 1) + const second = new ScrollFollow(false, 1) + expect(ScrollFollow.forElement(element)).toBeUndefined() + const releaseFirst = first.bind(element) + const releaseSecond = second.bind(element) + releaseFirst() + expect(ScrollFollow.forElement(element)).toBe(second) + releaseSecond() + expect(ScrollFollow.forElement(element)).toBeUndefined() + }) + it('keeps independent thresholds and adopts only attributed reader movement', () => { const outer = new ScrollFollow(true, 25) const inner = new ScrollFollow(true, 1) From fad9e2770681227f6d60148fc3a3c355f4dfe851 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 21:44:39 +0800 Subject: [PATCH 25/35] test(web): stabilize resize and scroll fixtures --- apps/web/tests/README.i18n.yaml | 4 +- apps/web/tests/README.md | 2 + apps/web/tests/README.zh.md | 2 + apps/web/tests/document-preview.e2e.ts | 10 ++--- apps/web/tests/message-feedback.e2e.ts | 8 ++-- apps/web/tests/present.e2e.ts | 4 +- apps/web/tests/support.ts | 13 ++++++ apps/web/tests/thinking-markdown.e2e.ts | 6 +-- apps/web/tests/tool-details.e2e.ts | 4 +- .../tests/assembly-test-client.client.spec.ts | 3 ++ scripts/test-dom-environment.ts | 41 +++++++++++++++++++ scripts/vitest-environment.compat.spec.ts | 18 ++++++++ vitest.config.ts | 6 +-- 13 files changed, 100 insertions(+), 21 deletions(-) create mode 100644 scripts/test-dom-environment.ts diff --git a/apps/web/tests/README.i18n.yaml b/apps/web/tests/README.i18n.yaml index 4d920402fa..e48e24302b 100644 --- a/apps/web/tests/README.i18n.yaml +++ b/apps/web/tests/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/web/tests/README.md -README.md: 8b9c58ce9e4cf2f5f6978c0c6eb5517fe000d3d2 -README.zh.md: 199ae3b56166aa2ffa1c0bed9a16b844ffd7b74f +README.md: 2744c40c7ff6d90e2d1d6cefadfcf6b55acb7e1b +README.zh.md: e7dd1a23b96e5b3eff055e49deec8c86d8e91727 diff --git a/apps/web/tests/README.md b/apps/web/tests/README.md index 8b9c58ce9e..2744c40c7f 100644 --- a/apps/web/tests/README.md +++ b/apps/web/tests/README.md @@ -10,6 +10,8 @@ Ordinary scenarios begin with no registered Workspace or Session and a durable m State-sensitive cases use Workspace, admission, attachment, and model-stream barriers to separate visible intermediate states from completed operations. Details close waits for frame transitions; archive verification assigns an explicit title to the seeded Session and follows that identity across reload. See the [CI fixture synchronization decision](../../../.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.md). +Explicit scrolling uses `scrollIntoView` from `support.ts`: it resolves the locator again when its old element detaches and checks connection in the same browser task as native scrolling. Scenarios retain their visibility and geometry assertions after scrolling. + ## These are Host-face tests They type-check in the root `tsconfig.host.json`, not in the Client aggregate, because they read Host services directly: `ctx.connection`, the Host `SessionStore`, and `ctx.sessionProjectionCache`. Driving a browser at runtime does not make a file part of the Client program — the two faces merge Cordis `Context` under the same keys with different services, so one program cannot see both. Moving these files into the Client aggregate makes every Host-service access fail to compile. diff --git a/apps/web/tests/README.zh.md b/apps/web/tests/README.zh.md index 199ae3b561..e7dd1a23b9 100644 --- a/apps/web/tests/README.zh.md +++ b/apps/web/tests/README.zh.md @@ -10,6 +10,8 @@ 依赖状态的用例使用 Workspace、接纳、附件和模型流屏障,区分可见中间状态与已完成操作。详情关闭等待框架过渡结束;归档验证为 seed Session 设置显式标题,并跨重载跟踪该身份。参见 [CI fixture 同步决策](../../../.agents/notes/implemented/testing/2026-09-08-ci-completion-observations.zh.md)。 +显式滚动使用 `support.ts` 的 `scrollIntoView`:旧元素脱离 DOM 时重新解析 locator,并在同一个浏览器任务中检查连接状态、执行原生滚动。各场景保留滚动后的可见性与几何断言。 + ## 这些是 Host 面的测试 它们在根 `tsconfig.host.json` 中做类型检查,而不在 Client aggregate 中,因为它们直接读取 Host 服务:`ctx.connection`、Host 侧 `SessionStore` 与 `ctx.sessionProjectionCache`。运行时驱动浏览器并不使一个文件成为 Client 程序的一部分——两个 face 在相同的键上以不同服务合并 Cordis `Context`,因此单个程序无法同时看见两者。把这些文件挪进 Client aggregate 会让每一处 Host 服务访问都无法编译。 diff --git a/apps/web/tests/document-preview.e2e.ts b/apps/web/tests/document-preview.e2e.ts index af48f48e2c..a28b0b3525 100644 --- a/apps/web/tests/document-preview.e2e.ts +++ b/apps/web/tests/document-preview.e2e.ts @@ -14,7 +14,7 @@ import { excelDrawingFixture } from '../../../packages/client/ui-sidebar-documen import { xlsFixture } from '../../../packages/client/ui-sidebar-documentpreview/tests/xls-fixture.ts' import { pdfFixture, selectionPdfFixture } from '../../../packages/client/ui-sidebar-documentpreview/tests/pdf-fixture.ts' import { assertFixtureInventory, compareOrRefreshGolden, launchWebScaffold, watchConsole, webSnapshotMode, type WebScaffold } from './scaffold.ts' -import { openSettings, connectFreshWorkspace, newEnglishPage, saveFailureShot } from './support.ts' +import { openSettings, connectFreshWorkspace, newEnglishPage, saveFailureShot, scrollIntoView } from './support.ts' const FIXTURE = fileURLToPath(new URL('../../../snapshots/web/lifecycle-chrome/session.v3.jsonl', import.meta.url)) const SNAPSHOT_DIR = fileURLToPath(new URL('../../../snapshots/web/document-preview', import.meta.url)) @@ -396,13 +396,13 @@ else process.exit(1); const markdownImages: string[] = [] for (const alt of ['relative image', 'absolute image', 'reference image']) { const image = preview.getByRole('img', { name: alt, exact: true }) - await image.scrollIntoViewIfNeeded() + await scrollIntoView(image) await expect.poll(() => image.evaluate((node: HTMLImageElement) => node.complete && node.naturalWidth > 0)).toBe(true) const source = new URL(await image.getAttribute('src') ?? '') expect(source.pathname).toBe('/api/file') markdownImages.push(alt) } - await preview.getByRole('heading', { name: heading, exact: true }).scrollIntoViewIfNeeded() + await scrollIntoView(preview.getByRole('heading', { name: heading, exact: true })) await successShot(page, 'markdown') const markdownTab = column.locator('[data-dockkit-tab]').filter({ has: page.getByText('smoke.md', { exact: true }) }) const markdownTabId = await markdownTab.getAttribute('data-dockkit-tab') @@ -567,7 +567,7 @@ else process.exit(1); expect(firstColor).toBe('red') const workerNames = await Promise.all(page.workers().map(worker => worker.evaluate(() => self.name))) expect(workerNames).toContain('dsh-pdf') - await preview.locator('[data-pdf-page="2"]').scrollIntoViewIfNeeded() + await scrollIntoView(preview.locator('[data-pdf-page="2"]')) const secondPage = preview.getByRole('img', { name: 'PDF page 2', exact: true }) await secondPage.waitFor({ state: 'visible', timeout: 30_000 }) await expect.poll(() => canvasColor(secondPage), { timeout: 30_000 }).toBe('blue') @@ -580,7 +580,7 @@ else process.exit(1); await filesTab.click() await column.locator('[data-files-state="tree"]').waitFor({ state: 'visible' }) await pdfTab.click() - await preview.locator('[data-pdf-page="2"]').scrollIntoViewIfNeeded() + await scrollIntoView(preview.locator('[data-pdf-page="2"]')) await secondPage.waitFor({ state: 'visible', timeout: 30_000 }) await expect.poll(() => canvasColor(secondPage), { timeout: 30_000 }).toBe('blue') const restoredColor = await canvasColor(secondPage) diff --git a/apps/web/tests/message-feedback.e2e.ts b/apps/web/tests/message-feedback.e2e.ts index 69676f37d2..37797460c2 100644 --- a/apps/web/tests/message-feedback.e2e.ts +++ b/apps/web/tests/message-feedback.e2e.ts @@ -11,7 +11,7 @@ import { acknowledgeReloadConnectionLoss, launchWebScaffold, seedSession, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { newEnglishPage, saveFailureShot } from './support.ts' +import { newEnglishPage, saveFailureShot, scrollIntoView } from './support.ts' // Borrowed read-only: this scenario needs any settled assistant message to // address, not a new recording (message-actions / sidebar-scrollbar pattern). @@ -67,7 +67,7 @@ describe('web e2e: durable per-message feedback', () => { await page.getByText('DONE', { exact: true }).waitFor({ timeout: 30_000 }) const like = page.getByRole('button', { name: 'Good response' }).first() await like.waitFor({ timeout: 30_000 }) - await like.scrollIntoViewIfNeeded() + await scrollIntoView(like) await like.hover() await like.click() const dialog = page.getByRole('dialog', { name: 'Submit feedback' }) @@ -111,12 +111,12 @@ describe('web e2e: durable per-message feedback', () => { // the unrated control is what triggers the authoritative re-read. const cold = page.getByRole('button', { name: 'Good response' }).first() await cold.waitFor({ timeout: 30_000 }) - await cold.scrollIntoViewIfNeeded() + await scrollIntoView(cold) await cold.hover() const restored = page.getByRole('button', { name: 'Remove rating' }).first() await restored.waitFor({ timeout: 30_000 }) - await restored.scrollIntoViewIfNeeded() + await scrollIntoView(restored) await restored.hover() await expect.poll(() => restored.getAttribute('aria-pressed'), { timeout: 15_000 }).toBe('true') // The retract label sits on the Dislike side: the Like stays unpressed. diff --git a/apps/web/tests/present.e2e.ts b/apps/web/tests/present.e2e.ts index 146ff77b85..aaf4c1f7d5 100644 --- a/apps/web/tests/present.e2e.ts +++ b/apps/web/tests/present.e2e.ts @@ -14,7 +14,7 @@ import { compareOrRefreshGolden, fixtureUserPrompts, launchWebScaffold, recordFixture, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { connectFreshWorkspace, expandTurnProcesses, newEnglishPage } from './support.ts' +import { connectFreshWorkspace, expandTurnProcesses, newEnglishPage, scrollIntoView } from './support.ts' const DIR = fileURLToPath(new URL('../../../snapshots/web/present', import.meta.url)) const FIXTURE = join(DIR, 'session.v3.jsonl') @@ -272,7 +272,7 @@ fs.appendFileSync(${JSON.stringify(openLog)}, JSON.stringify({ path, action, con expect(geometry.openFontSize).toBe('11px') await page.setViewportSize({ width: 480, height: 900 }) const row = page.locator('[data-presented-files-row]') - await row.scrollIntoViewIfNeeded() + await scrollIntoView(row) for (const card of await row.getByRole('button').all()) { const bounds = await card.boundingBox() expect(bounds).not.toBeNull() diff --git a/apps/web/tests/support.ts b/apps/web/tests/support.ts index 9945da66a4..9faa3d8f76 100644 --- a/apps/web/tests/support.ts +++ b/apps/web/tests/support.ts @@ -5,6 +5,7 @@ import { createRequire } from 'node:module' import { join } from 'node:path' import { fileURLToPath } from 'node:url' import type { Browser, Locator, Page } from 'playwright' +import { expect } from 'vitest' /** The built page under test; `pnpm run test:web` rebuilds it before running. */ export const DIST_INDEX = fileURLToPath(new URL('../dist/index.html', import.meta.url)) @@ -55,6 +56,18 @@ export async function newEnglishPage(browser: Browser, height = 1000): Promise

{ + await expect.poll(() => target.evaluate((element) => { + if (!element.isConnected) return false + element.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' }) + return true + }), { timeout: 10_000 }).toBe(true) +} + /** * Expand every eligible Turn process and secondary group so a Tool-focused * scenario can exercise the original row contract beneath product-default diff --git a/apps/web/tests/thinking-markdown.e2e.ts b/apps/web/tests/thinking-markdown.e2e.ts index ea2a6efb76..4a8ac6b132 100644 --- a/apps/web/tests/thinking-markdown.e2e.ts +++ b/apps/web/tests/thinking-markdown.e2e.ts @@ -16,7 +16,7 @@ import { webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { expandTurnProcesses, newEnglishPage, saveFailureShot } from './support.ts' +import { expandTurnProcesses, newEnglishPage, saveFailureShot, scrollIntoView } from './support.ts' const EXPECTED_DIR = fileURLToPath(new URL('./expected/thinking-markdown', import.meta.url)) const UI_EXPECTED = fileURLToPath(new URL('./expected/thinking-markdown/ui.expected.md', import.meta.url)) @@ -159,7 +159,7 @@ describe('web e2e: secondary Thinking Markdown', () => { expect(await markdown.locator('hr').count()).toBe(1) expect(await markdown.locator('table').count()).toBe(1) expect(await markdown.locator('.katex').count()).toBe(7) - await markdown.locator('pre').scrollIntoViewIfNeeded() + await scrollIntoView(markdown.locator('pre')) await expect.poll(() => markdown.locator('pre.shiki').count(), { timeout: 15_000 }).toBe(1) const snapshot = (await captureStableAria(page, '[data-variant="think"][data-expanded]', scaffold.workspaceCwd)) .split(LONG_TOKEN).join('{{longToken}}') @@ -233,7 +233,7 @@ describe('web e2e: secondary Thinking Markdown', () => { expect(answerSize).toBeGreaterThan(Number.parseFloat(summaryStyle.fontSize)) await page.setViewportSize({ width: 1680, height: 1000 }) const groupScroll = thinking.locator('xpath=ancestor::*[@data-step-process-body][1]') - await groupScroll.scrollIntoViewIfNeeded() + await scrollIntoView(groupScroll) await groupScroll.evaluate((host) => { const row = host.querySelector('[data-variant="think"] tbody tr:nth-child(12)') if (row === null) throw new Error('tall Thinking table row missing') diff --git a/apps/web/tests/tool-details.e2e.ts b/apps/web/tests/tool-details.e2e.ts index a1a84780e9..4dcaa0f759 100644 --- a/apps/web/tests/tool-details.e2e.ts +++ b/apps/web/tests/tool-details.e2e.ts @@ -8,7 +8,7 @@ import { assertFixtureInventory, captureStableAria, compareOrRefreshGolden, fixtureUserPrompts, launchWebScaffold, seedSession, watchConsole, webSnapshotMode, type WebScaffold, } from './scaffold.ts' -import { expandOwningTurnProcess, newEnglishPage, saveFailureShot } from './support.ts' +import { expandOwningTurnProcess, newEnglishPage, saveFailureShot, scrollIntoView } from './support.ts' const SNAPSHOT_DIR = fileURLToPath(new URL('../../../snapshots/web/tool-details', import.meta.url)) const FIXTURE = fileURLToPath(new URL('../../../snapshots/web/tool-details/session.v3.jsonl', import.meta.url)) @@ -73,7 +73,7 @@ describe.skipIf(MODE === 'record')('web e2e: compact Tool details', () => { const card = page.locator('[data-tool="schedule_create"]') expect(await card.evaluate(element => element.scrollWidth <= element.clientWidth)).toBe(true) const reminders = page.locator('[data-tool="schedule_list"]') - await reminders.scrollIntoViewIfNeeded() + await scrollIntoView(reminders) const list = reminders.getByRole('list').first() await list.evaluate((element) => { const second = element.children[1]! diff --git a/packages/test-support/client-runtime/tests/assembly-test-client.client.spec.ts b/packages/test-support/client-runtime/tests/assembly-test-client.client.spec.ts index 5fb8092161..e4ebaeaaeb 100644 --- a/packages/test-support/client-runtime/tests/assembly-test-client.client.spec.ts +++ b/packages/test-support/client-runtime/tests/assembly-test-client.client.spec.ts @@ -32,6 +32,9 @@ async function started(plan: AssemblyPlan, options?: TestClientOptions): Promise describe('TestClient (jsdom)', () => { it('boots the whole web-app roster, connects, mounts, and disposes with nothing unmatched', async () => { + // Exercise missing-API cleanup independently of the suite's browser defaults. + vi.stubGlobal('ResizeObserver', undefined) + onTestFinished(() => { vi.unstubAllGlobals() }) const mock = RemoteMock.create().load(remoteDefaultResponses) const client = await TestClient.start({ roster: webApp }, mock, { mount: true }) expect(client.connection.state.getSnapshot()).toBe('connected') diff --git a/scripts/test-dom-environment.ts b/scripts/test-dom-environment.ts new file mode 100644 index 0000000000..12c8895735 --- /dev/null +++ b/scripts/test-dom-environment.ts @@ -0,0 +1,41 @@ +/** Initial resize delivery from jsdom's modeled offsets; geometry/timing suites supply their own observers. */ +import { afterAll, beforeEach } from 'vitest' + +const original = Object.getOwnPropertyDescriptor(globalThis, 'ResizeObserver') +let installed = false + +class TestResizeObserver implements ResizeObserver { + private readonly targets = new Set() + + constructor(private readonly callback: ResizeObserverCallback) {} + + observe(target: Element): void { + if (this.targets.has(target)) return + this.targets.add(target) + const width = target instanceof HTMLElement ? target.offsetWidth : 0 + const height = target instanceof HTMLElement ? target.offsetHeight : 0 + const size = [{ inlineSize: width, blockSize: height }] + this.callback([{ + target, contentRect: new DOMRectReadOnly(0, 0, width, height), + borderBoxSize: size, contentBoxSize: size, devicePixelContentBoxSize: size, + }], this) + } + + unobserve(target: Element): void { this.targets.delete(target) } + + disconnect(): void { this.targets.clear() } +} + +beforeEach(() => { + 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 }) + installed = true + } +}) + +afterAll(() => { + if (!installed) return + if (original === undefined) Reflect.deleteProperty(globalThis, 'ResizeObserver') + else Object.defineProperty(globalThis, 'ResizeObserver', original) +}) diff --git a/scripts/vitest-environment.compat.spec.ts b/scripts/vitest-environment.compat.spec.ts index fae1fc29fd..8146d58463 100644 --- a/scripts/vitest-environment.compat.spec.ts +++ b/scripts/vitest-environment.compat.spec.ts @@ -2,6 +2,24 @@ import { describe, expect, it } from 'vitest' describe('Vitest jsdom compatibility', () => { + it('provides initial ResizeObserver delivery and supports disconnecting targets', () => { + const target = document.createElement('div') + target.getBoundingClientRect = () => { throw new Error('the jsdom resize fallback must not measure viewport geometry') } + const deliveries: ResizeObserverEntry[][] = [] + const observer = new ResizeObserver(entries => deliveries.push(entries)) + observer.observe(target, { box: 'border-box' }) + observer.observe(target) + expect(deliveries).toHaveLength(1) + expect(deliveries[0]?.[0]).toMatchObject({ target, borderBoxSize: [{ inlineSize: 0, blockSize: 0 }] }) + observer.unobserve(target) + observer.observe(target) + expect(deliveries).toHaveLength(2) + observer.disconnect() + observer.observe(target) + expect(deliveries).toHaveLength(3) + observer.disconnect() + }) + it('provides isolated browser storage instead of Node process storage', () => { if (process.allowedNodeEnvironmentFlags.has('--webstorage')) { expect(process.execArgv.filter(argument => argument === '--no-webstorage')).toHaveLength(1) diff --git a/vitest.config.ts b/vitest.config.ts index 5de17ca3c6..6c0a46e4f3 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -161,7 +161,7 @@ const processBoundTests = [ export default defineConfig({ plugins: [pathsPlugin(), standardDecoratorPlugin()], test: { - setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts'], + setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts', './scripts/test-dom-environment.ts'], // .tsx: client component specs (jsdom via per-file @vitest-environment pragma). include: testIncludes, exclude: platformUnsupportedTests, @@ -177,7 +177,7 @@ export default defineConfig({ // MaybeLocal in cjs_lexer::Parse) from worker threads on macOS, // Linux, and Windows. Forked workers avoid that shared thread path. pool: 'forks', - setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts'], + setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts', './scripts/test-dom-environment.ts'], include: testIncludes, exclude: [ ...platformUnsupportedTests, @@ -192,7 +192,7 @@ export default defineConfig({ name: 'process-bound', execArgv: vitestExecArgv, pool: 'forks', - setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts'], + setupFiles: ['./scripts/test-proxy-environment.ts', './scripts/test-invariants.ts', './scripts/test-dom-environment.ts'], include: processBoundTests, exclude: [ ...platformUnsupportedTests, From f6966f8fab906c72d61b9cb4da7a286dedda61bb Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 22:08:50 +0800 Subject: [PATCH 26/35] test(client): align resize fixtures and restore branch coverage --- packages/api/session-controller/src/history.ts | 2 +- .../tests/section.client.spec.tsx | 12 +++++++++--- .../ui-conversation/tests/control-row-dom.ts | 6 +----- .../ui-dockkit/tests/components.client.spec.tsx | 3 ++- .../ui-primitives/tests/tooltip.client.spec.tsx | 3 +++ .../tests/zoom-viewport.client.spec.tsx | 17 +++++++++++++++++ 6 files changed, 33 insertions(+), 10 deletions(-) diff --git a/packages/api/session-controller/src/history.ts b/packages/api/session-controller/src/history.ts index 19fe5dc5bc..07fbbfe6be 100644 --- a/packages/api/session-controller/src/history.ts +++ b/packages/api/session-controller/src/history.ts @@ -393,7 +393,7 @@ function paginate( events: readonly SessionEvent[], beforeSeq: SessionLogOffsetType | undefined, maxMessages: number, - throughSeq: SessionSeqCursor = events.at(-1)?.seq ?? -1, + throughSeq: SessionSeqCursor, turnWindow?: SessionPageRequest['turnWindow'], ): { readonly events: SessionEvent[]; readonly hasMore: boolean } { const end = SessionLogOffset(Math.min(throughSeq + 1, beforeSeq ?? throughSeq + 1)) diff --git a/packages/client/ui-agent-preset/tests/section.client.spec.tsx b/packages/client/ui-agent-preset/tests/section.client.spec.tsx index 9add87de92..2079d0c67a 100644 --- a/packages/client/ui-agent-preset/tests/section.client.spec.tsx +++ b/packages/client/ui-agent-preset/tests/section.client.spec.tsx @@ -193,13 +193,19 @@ it('closes help even when the browser reports no previously focused element', () it.each([false, true])('only offers a description tooltip when the card clips it: %s', (overflow) => { vi.spyOn(Element.prototype, 'scrollHeight', 'get').mockReturnValue(overflow ? 400 : 80) vi.spyOn(Element.prototype, 'clientHeight', 'get').mockReturnValue(80) - const disconnect = vi.fn() - vi.stubGlobal('ResizeObserver', class { observe() {} disconnect = disconnect }) + const disconnect = vi.spyOn(ResizeObserver.prototype, 'disconnect') vi.useFakeTimers() view({ rows: [{ id: 'mine', isDefault: false, description: 'Preset description' }] }) fireEvent.mouseEnter(screen.getByText('Preset description')) act(() => { vi.advanceTimersByTime(400) }) expect(screen.queryByRole('tooltip')?.textContent ?? null).toBe(overflow ? 'Preset description' : null) cleanup() - expect(disconnect).toHaveBeenCalledOnce() + expect(disconnect).toHaveBeenCalledTimes(overflow ? 2 : 1) +}) +it('renders descriptions and allows selection without resize observation', () => { + vi.stubGlobal('ResizeObserver', undefined) + const actions = view({ rows: [{ id: 'mine', name: 'Mine', isDefault: false, description: 'Preset description' }] }) + expect(screen.getByText('Preset description')).toBeTruthy() + fireEvent.click(screen.getByRole('button', { name: `${en.setDefault}: Mine` })) + expect(actions.makeDefault).toHaveBeenCalledWith('mine') }) diff --git a/packages/client/ui-conversation/tests/control-row-dom.ts b/packages/client/ui-conversation/tests/control-row-dom.ts index 4c1cbc502e..7afc5ffaf7 100644 --- a/packages/client/ui-conversation/tests/control-row-dom.ts +++ b/packages/client/ui-conversation/tests/control-row-dom.ts @@ -1,12 +1,8 @@ -/** jsdom omits resize observation and font loading; layout tests drive their own measurements. */ +/** jsdom font-loading events; layout tests drive their own measurements. */ import { beforeEach, afterEach, vi } from 'vitest' const fonts = Object.getOwnPropertyDescriptor(document, 'fonts') beforeEach(() => { - vi.stubGlobal('ResizeObserver', class { - observe(): void {} - disconnect(): void {} - }) Object.defineProperty(document, 'fonts', { configurable: true, value: new EventTarget() }) }) afterEach(() => { diff --git a/packages/client/ui-dockkit/tests/components.client.spec.tsx b/packages/client/ui-dockkit/tests/components.client.spec.tsx index 85768ebb55..d2ed9768b9 100644 --- a/packages/client/ui-dockkit/tests/components.client.spec.tsx +++ b/packages/client/ui-dockkit/tests/components.client.spec.tsx @@ -462,7 +462,8 @@ describe('DockSurface', () => { expect(document.querySelector('[data-dockkit-split-button]')).toBeNull() }) - it('names the chip box\'s hidden sides in data-dockkit-strip-scroll as it scrolls', () => { + it.each([true, false])('names the chip box\'s hidden sides as it scrolls with resize observation: %s', (observed) => { + if (!observed) vi.stubGlobal('ResizeObserver', undefined) let scrollLeft = 0 const descriptors = ['scrollLeft', 'scrollWidth', 'clientWidth'].map(name => [name, Object.getOwnPropertyDescriptor(Element.prototype, name)] as const) diff --git a/packages/client/ui-primitives/tests/tooltip.client.spec.tsx b/packages/client/ui-primitives/tests/tooltip.client.spec.tsx index b8d0825b91..787475f721 100644 --- a/packages/client/ui-primitives/tests/tooltip.client.spec.tsx +++ b/packages/client/ui-primitives/tests/tooltip.client.spec.tsx @@ -48,6 +48,9 @@ describe('Tooltip', () => { const bubble = view.container.querySelector('[role="tooltip"]')! expect(measured.mock.contexts).toEqual([anchor]) expect(bubble.style.visibility).toBe('hidden') + fireEvent(window, new Event('resize')) + expect(bubble.style.visibility).toBe('hidden') + expect(measured.mock.contexts).toEqual([anchor]) bubbleSize = { inlineSize: 100, blockSize: 20 } act(() => { observers[0]!.deliver() }) expect(screen.getByRole('tooltip').style.left).toBe('62px') diff --git a/packages/client/ui-sidebar-documentpreview/tests/zoom-viewport.client.spec.tsx b/packages/client/ui-sidebar-documentpreview/tests/zoom-viewport.client.spec.tsx index f7a38e249e..a073c31637 100644 --- a/packages/client/ui-sidebar-documentpreview/tests/zoom-viewport.client.spec.tsx +++ b/packages/client/ui-sidebar-documentpreview/tests/zoom-viewport.client.spec.tsx @@ -66,6 +66,23 @@ it('resolves missing and small content to 100 percent', () => { expect(fitWidthZoom(200, 100, 24)).toBe(1) }) +it('fits the initial pane and allows fixed zoom without resize observation', () => { + vi.stubGlobal('ResizeObserver', undefined) + const onPreference = vi.fn() + render( `${String(percent)}%` }} signal={new AbortController().signal} + scrollportRef={() => {}} onPreference={onPreference}> +

+ ) + const menu = screen.getByRole('button', { name: 'Choose zoom' }) + expect(menu.textContent).toContain('48%') + fireEvent.click(menu) + fireEvent.click(screen.getByRole('menuitem', { name: '100%' })) + expect(onPreference).toHaveBeenCalledExactlyOnceWith({ kind: 'fixed', scale: 1 }) + expect(menu.textContent).toContain('100%') +}) + it('keeps a centred surface point under the pointer while crossing into overflow', () => { const onPreference = vi.fn() const view = render( Date: Tue, 22 Sep 2026 22:25:32 +0800 Subject: [PATCH 27/35] fix(chat): restore turn rail width threshold and clarify scroll gestures --- apps/web/tests/chat-scroll-contract.e2e.ts | 21 +++++++++++++++++++ packages/client/ui-chat/README.i18n.yaml | 4 ++-- packages/client/ui-chat/README.md | 4 +++- packages/client/ui-chat/README.zh.md | 4 +++- .../src/client/chat/TurnNavigator.module.css | 5 ++++- .../src/client/chat/use-process-scroll.ts | 2 ++ 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/apps/web/tests/chat-scroll-contract.e2e.ts b/apps/web/tests/chat-scroll-contract.e2e.ts index 494eef8120..ef315336ea 100644 --- a/apps/web/tests/chat-scroll-contract.e2e.ts +++ b/apps/web/tests/chat-scroll-contract.e2e.ts @@ -566,6 +566,27 @@ describe('web e2e: long Chat scroll contract', () => { await expectControls() await composer.fill('') await expectControls() + + const rail = world.page.getByRole('navigation', { name: 'Turn navigation', includeHidden: true }) + const frame = rail.locator('../..') + const originalStyle = await frame.getAttribute('style') + try { + for (const clearance of [16, 8]) { + for (const contentWidth of [901, 900, 899, 901]) { + await frame.evaluate((element, { clearance, contentWidth }) => { + element.style.width = `${contentWidth + 2 * (clearance + 16)}px` + element.style.setProperty('--dsh-composer-side-clearance', `${clearance}px`) + }, { clearance, contentWidth }) + await expect.poll(() => rail.isVisible()).toBe(contentWidth > 900) + } + } + } finally { + await frame.evaluate((element, style) => { + if (style === null) element.removeAttribute('style') + else element.setAttribute('style', style) + }, originalStyle) + } + await expectControls() await backToBottom.click() await expectBottom(world.page) assertClean(world) diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index db19a1294a..5688915123 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: 406d8de41fb8ee3f8d1f4f0676ee36e68d5bc684 -README.zh.md: 6ca8c67cda401e96995631105642d3d4ab14c541 +README.md: 12f9b2470c107775ff57c2c7f04c649841dd6f7a +README.zh.md: 4d25db34d283ed2dc62fcfbb15d6ab4797511881 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 406d8de41f..12f9b2470c 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -102,7 +102,7 @@ The Chat-node slot injects a reset-bound `useDisclosure` Hook for reasoning and Chat restores semantic anchors across history prepend and renderer remounts, with browser scroll anchoring disabled on its scrollport only while following the tail. Pinned scroll deliveries without reader movement, and reader input that reaches the exact floor, update follow ownership immediately, before subsequent layout changes can invalidate their floor. Other reader movement remains pending until the sampling interval or `scrollend`, even inside the follow threshold, so layout growth cannot erase small scroll gestures. Submitting transcript input or steering immediately restores tail following and clears an older pending reader sample. While the reader is pinned to the floor, `ResizeObserver` follows the new floor and selects the latest loaded Turn without reading row geometry. Once the reader moves away, flow-height changes preserve the top position and the reading-line geometry selects the active Turn. Turn-rail previews paint above sticky Markdown code-block banners, while the rail frame remains inside the transcript band above the composer. -The turn rail and back-to-bottom button sit outside the clipped transcript. They use the shared conversation scrollport for sticky positioning, or the Chat frame for absolute positioning when Chat owns its scrollport. +The turn rail and back-to-bottom button sit outside the clipped transcript. They use the shared conversation scrollport for sticky positioning, or the Chat frame for absolute positioning when Chat owns its scrollport. The rail hides when the transcript's available width, excluding its horizontal padding, is at most 900px; the browser viewport width is not the criterion. The transcript root uses `overflow-x: visible; overflow-y: clip`: vertical overflow is clipped without creating a scroll container. Sticky Markdown code banners and expanded compaction headers therefore retain the actual conversation scrollport as their reference when no nearer scrolling ancestor exists. Capped process groups and terminal sections keep their own scrollports. @@ -122,6 +122,8 @@ While the pointer is outside the rail, automatic follow keeps the rail still whe
Scroll implementation — click to expand +Within a process group, wheel, touchstart, and any pointerdown interrupt an active smooth animation, including presses on tool cards. ArrowUp/ArrowDown, PageUp/PageDown, Home/End, and Space keys also interrupt it unless a child has prevented the key's default action; editable controls are not excluded. These events stop the animation without requiring a scroll displacement. Subsequent position sampling determines whether following continues. + `useScrollFollow` supplies independent controllers for shared bottom thresholds, follow intent, and native scrolling. `useProcessScroll` owns group observation, initial placement, and edge fades. Outer following remains immediate; group growth uses native smooth scrolling unless reduced motion is requested. Growth retains an in-flight target until `scrollend`; arrival at that target or its shrink-clamped position continues toward the latest floor, while another endpoint releases following. Opening placement remains immediate. A bottom-follow request within tolerance uses immediate positioning when no animation is outstanding, so a fractional no-op cannot leave a pending smooth target. `useChatViewport` owns turn-aware DOM reads, clamped writes, native events, and one retained paging anchor. For Load older, Node and Group seats mark eligible anchors from their existing disclosure state. The viewport selects the first nonempty, unhidden marker in transcript order without hit testing or geometry-based search, then measures that element and its scroll containers. It compensates the anchor's capped group first, then gives the remaining displacement to the transcript scrollport. An inner compensation write cancels that group's animation through its bound controller and pauses following; reader scrolling back to the bottom resumes it. Commits and later content resizes reuse that anchor; a remounted row is resolved by the same semantic key. Compensation stays within the actual scroll ranges without adding bottom space. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 6ca8c67cda..4d25db34d2 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -102,7 +102,7 @@ Chat 节点 slot 为推理与工具注入绑定重置来源的 `useDisclosure` Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且只在跟随底部时禁用自己滚动区域的浏览器自动锚定。没有读者移动的贴底滚动事件,以及确实到达最底部的读者输入,会立即更新跟随归属,避免后续布局变化使其底部位置失效。其他读者移动即使位于跟随阈值内,也保持待处理直到采样周期或 `scrollend`,防止布局增长抵消小幅滚动操作。提交正文输入或 steering 时立即恢复跟随底部,并清除先前待处理的读者滚动采样。读者跟随底部时,`ResizeObserver` 追随新的底部,并且无需读取行几何就选中最后一个已加载轮次;读者离开底部后,高度变化会保持顶部位置,再由阅读线几何选择活跃轮次。轮次导航预览位于 Markdown 代码块粘性头栏上方,而导航外框始终处于 composer 上方的 transcript 区域内。 -轮次轨道与回到底部按钮位于正文裁剪层外。它们相对共享会话滚动容器做 sticky 定位;Chat 自己持有滚动容器时,则相对 Chat 外框做 absolute 定位。 +轮次轨道与回到底部按钮位于正文裁剪层外。它们相对共享会话滚动容器做 sticky 定位;Chat 自己持有滚动容器时,则相对 Chat 外框做 absolute 定位。正文扣除水平内边距后的可用宽度不超过 900px 时,隐藏轮次轨道;判断依据不是浏览器视口宽度。 正文根节点使用 `overflow-x: visible; overflow-y: clip`:裁剪纵向溢出,但不创建滚动容器。因此,在没有更近的滚动祖先时,Markdown 代码块的 sticky 头栏和展开的压缩摘要头栏仍以实际会话滚动容器为参照。限高过程组和终端区域保留各自的滚动容器。 @@ -122,6 +122,8 @@ Chat 会在历史前插与 renderer 重新挂载时恢复语义锚点,并且
滚动实现——点击展开 +过程组内的 wheel、touchstart 和任意 pointerdown 都会中断正在进行的平滑动画,包括按下工具卡片。上下方向键、PageUp/PageDown、Home/End 和空格键也会中断动画,除非子控件已阻止该按键的默认行为;输入控件不被排除。这些事件无需产生滚动位移就会停止动画,之后的位置采样再决定是否继续跟随。 + `useScrollFollow` 提供各自独立的控制器,共用触底阈值判断、跟随意图与原生滚动实现。`useProcessScroll` 负责小组观察、初始定位及边缘渐隐。外层保持即时跟随;组内增长使用原生平滑滚动,减少动态效果偏好开启时改为即时滚动。`scrollend` 前的增长保留当前动画目标;到达该目标或因内容缩短而钳制的位置后,再追随最新底部;停在其他位置则释放跟随。展开时仍即时定位。没有进行中动画时,容差范围内的贴底请求使用即时定位,避免小数位置上的无位移操作留下未结束的平滑目标。 `useChatViewport` 负责识别轮次的 DOM 读取、限制范围后的写入、原生事件及一个持续保留的分页锚点。加载更早时,Node 与 Group 容器根据已有开合状态标记可选锚点。视口按正文顺序选择第一个非空、未隐藏的标记,不做命中测试或按几何位置搜索,再测量该元素及其滚动容器。先补偿锚点所在的限高组,再把剩余位移交给整段文本的滚动区域。内层补偿写入通过该组绑定的控制器取消动画并暂停跟随,读者滚回底部后恢复。提交和后续内容尺寸变化复用该锚点;消息行重挂载时按同一语义 key 重新定位。补偿限于实际可滚动范围,不增加底部空白。 diff --git a/packages/client/ui-chat/src/client/chat/TurnNavigator.module.css b/packages/client/ui-chat/src/client/chat/TurnNavigator.module.css index 5043b10206..97f55c287b 100644 --- a/packages/client/ui-chat/src/client/chat/TurnNavigator.module.css +++ b/packages/client/ui-chat/src/client/chat/TurnNavigator.module.css @@ -8,6 +8,9 @@ the composer, so its preview never needs to cross the footer. */ z-index: 7; height: 0; + /* Query the transcript's usable width while keeping the rail full-bleed. */ + padding-inline: calc(var(--dsh-composer-side-clearance) + 16px); + container-type: inline-size; pointer-events: none; } @@ -201,7 +204,7 @@ } @container (max-width: 900px) { - .slot { + .frame { display: none; } } diff --git a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts index 7b64ef18e2..07fc32fcef 100644 --- a/packages/client/ui-chat/src/client/chat/use-process-scroll.ts +++ b/packages/client/ui-chat/src/client/chat/use-process-scroll.ts @@ -8,6 +8,8 @@ const SCROLL_KEYS = new Set(['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home /** * Observe one group's body and content without coupling its follow intent to the outer transcript. + * Wheel, touchstart, any pointerdown, and unprevented scroll keys interrupt active animations, + * including events from editable controls; subsequent position sampling determines follow intent. * @param bodyRef - capped scrolling body. * @param contentRef - uncapped content whose size reports growth. * @param open - local disclosure state. From 08c0e8e71b649011c8a99dfd2caeefeff9e98379 Mon Sep 17 00:00:00 2001 From: imccyu Date: Tue, 22 Sep 2026 22:47:12 +0800 Subject: [PATCH 28/35] fix(chat): deduplicate admitted local steering --- ...2-input-echo-admission-ownership.i18n.yaml | 4 +- ...26-09-22-input-echo-admission-ownership.md | 8 +-- ...09-22-input-echo-admission-ownership.zh.md | 8 +-- apps/web/tests/steering.e2e.ts | 49 +++++++++++++++---- .../api/session-controller/README.i18n.yaml | 4 +- packages/api/session-controller/README.md | 2 +- packages/api/session-controller/README.zh.md | 2 +- .../src/client/sessions/session.ts | 4 +- ...session-pending-submissions.client.spec.ts | 29 ++++++----- packages/client/ui-chat/README.i18n.yaml | 4 +- packages/client/ui-chat/README.md | 2 +- packages/client/ui-chat/README.zh.md | 2 +- .../ui-chat/src/client/chat/ChatView.tsx | 13 +++-- .../ui-chat/tests/chat-view.client.spec.tsx | 33 +++++++++++++ 14 files changed, 120 insertions(+), 44 deletions(-) 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 b9720ff269..6ba4b3a015 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 @@ -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/bug-fix/2026-09-22-input-echo-admission-ownership.md -2026-09-22-input-echo-admission-ownership.md: 806d524fff3ae7331dbb25c270a95282f540fa87 -2026-09-22-input-echo-admission-ownership.zh.md: 2ad6008c19cfb021e730f3c503c21eb862fc04aa +2026-09-22-input-echo-admission-ownership.md: 227857bd8168aa1d7f51b621737c2ed0ab572632 +2026-09-22-input-echo-admission-ownership.zh.md: 1d64de220a3c6d5c9357770175c79266b8f9f063 diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md index 806d524fff..227857bd81 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.md @@ -13,8 +13,8 @@ These transitions concern display ownership, not scrolling or composer geometry. ## Decision - A submission keeps its locally selected placement: idle input stays in Chat, running steering stays at the process tail, and explicitly queued input stays in QueueDock. Inbox acceptance does not change that placement. -- Chat hides an echo by matching the durable input's rpcId in the same render. QueueDock excludes only Inbox rows matched by local transcript echoes; unrelated queued messages remain visible and actionable. -- Session retains an admitted transcript's local suppression identity until the Inbox projection watermark reaches its claim sequence. Higher-sequence projection retention then prevents an older accepted row from reappearing after that identity retires. Claim tracking and cancellation use the existing per-submission receipt for both Inbox targets; no new SessionSnapshot field, Host event, or persisted format is needed. +- Chat hides an echo by matching the durable input's rpcId in the same render, and excludes stale next-step Inbox rows matched by admitted local Chat submissions. QueueDock excludes only Inbox rows matched by local transcript echoes; unrelated queued messages remain visible and actionable. +- Session retains an admitted transcript or steering submission's local suppression identity until the Inbox projection watermark reaches its claim sequence. Higher-sequence projection retention then prevents an older accepted row from reappearing after that identity retires. Claim tracking and cancellation use the existing per-submission receipt for both Inbox targets; no new SessionSnapshot field, Host event, or persisted format is needed. - At an open, input-free progress control at the end of Chat, the first transcript echo precedes the control. Other echoes remain at the tail. Last-input Turn tracking shares the existing rpcId scan; it does not add a history traversal or predict a sequence of future Turns. - Pending bubbles and durable seats share one keyed React list. Inserting a progress title preserves the pending bubble's mounted identity. Once admitted, the durable node owns ordering and ordinary Group segmentation. @@ -26,7 +26,7 @@ The [durable Inbox recovery decision](2026-08-17-durable-web-queue-recovery.md) **Retain the echo without changing the other readers.** Chat-side Inbox deduplication can still remove the echo, and QueueDock can still display it. The Session lifetime, Chat handoff and Dock exclusion must agree. -**Delete the suppression identity as soon as user/message arrives.** A later Inbox acceptance projection can resurrect a Dock row. The claim watermark supplies the required ordering evidence without assuming the streams publish together. +**Delete the suppression identity as soon as user/message arrives.** A later Inbox acceptance projection can resurrect a Dock or pending-steering row. The claim watermark supplies the required ordering evidence without assuming the streams publish together. **Move all pending inputs before the newest Turn control.** Running steering belongs after existing process content, and several ordinary submissions can target different Turns. Only the first local transcript echo receives the empty-control placement adjustment. @@ -41,11 +41,13 @@ The [durable Inbox recovery decision](2026-08-17-durable-web-queue-recovery.md) | [Chat rendering](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx) | Same-render rpcId replacement, stable echo mounting, title-before-input delivery in all three modes, steering remaining behind the title, historical empty Turns, and six local-versus-Host orderings. | | [QueueDock](../../../../packages/client/ui-conversation/tests/queue-dock.client.spec.tsx) | Local transcript exclusion, unrelated rows/actions, and all six three-message acceptance orders followed by FIFO claims. | | [Recorded Web replay](../../../../apps/web/tests/idle-submission-handoff.e2e.ts) | Real Web composition with FIFO-preserving delivery barriers: both Inbox/history arrival orders at 6× CPU throttling, an explicit turn/start-to-user/message gap, and complete three-Turn handoff for all six request orders. | +| [Steering Web replay](../../../../apps/web/tests/steering.e2e.ts) | Local shortcut steering remains unique when durable admission precedes its Inbox claim projection. | The single-input regression fails before the fix: Inbox acceptance moves the bubble into Dock, and a separately delivered Turn title precedes the echo. The corrected path retains one Chat representation at a stable vertical position. Multi-input replay verifies durable order and absence of duplicate or residual echoes; it does not assert that optimistic ordering predicts Host order. ## Consequences +- Steering without a locally tracked submission still follows the Inbox projection; a delayed projection can briefly duplicate its durable row. Local deduplication adds no history scan for other clients' submissions. - Reconnect may discard receipt-confirmed optimistic echoes and display the new authoritative baseline. A claimed input outside that baseline can briefly have no bubble; reconnect does not promise DOM continuity. - Submissions made before the local running update can all remain transcript echoes. If A, B and C are submitted locally in that order but B or C enters first, durable admission changes their visible order. Even when A enters first, remaining local echoes can differ from the Host queue order. - Cross-client competition and request-preparation races can change the actual opening input. The client does not migrate an idle-classified echo into Dock merely because the Host queued it behind another Turn. diff --git a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md index 2ad6008c19..1d64de220a 100644 --- a/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md +++ b/.agents/notes/implemented/bug-fix/2026-09-22-input-echo-admission-ownership.zh.md @@ -13,8 +13,8 @@ Status: implemented ## 决策 - 提交保留本地发送时选择的 placement:空闲输入留在 Chat,运行中的 steering 留在过程末尾,明确排队的输入留在 QueueDock。Inbox 受理不改变展示归属。 -- Chat 在同一次渲染中按持久输入的 rpcId 隐藏回显。QueueDock 只排除匹配本地 transcript 回显的 Inbox 行;其他排队消息仍可见且可操作。 -- Session 保留已入档 transcript 的本地排除身份,直到 Inbox 投影水位达到其领取序号。随后,较高序号投影优先的规则阻止旧受理行在该身份回收后重新出现。领取跟踪和取消共用已有逐提交 receipt,并覆盖两种 Inbox target;不新增 SessionSnapshot 字段、Host 事件或持久格式。 +- Chat 在同一次渲染中按持久输入的 rpcId 隐藏回显,并排除匹配已入档本地 Chat 提交的旧 next-step Inbox 行。QueueDock 只排除匹配本地 transcript 回显的 Inbox 行;其他排队消息仍可见且可操作。 +- Session 保留已入档 transcript 或 steering 提交的本地排除身份,直到 Inbox 投影水位达到其领取序号。随后,较高序号投影优先的规则阻止旧受理行在该身份回收后重新出现。领取跟踪和取消共用已有逐提交 receipt,并覆盖两种 Inbox target;不新增 SessionSnapshot 字段、Host 事件或持久格式。 - Chat 末尾为进行中且没有真实输入的过程控制行时,第一条 transcript 回显显示在控制行前,其他回显留在末尾。最后输入的轮次信息复用现有 rpcId 扫描,不新增历史遍历,也不预测未来轮次序列。 - 待处理气泡与持久节点容器共用一个 keyed React 列表。插入过程标题保留回显气泡的挂载身份。入档后,由持久节点决定排序及普通 Group 切分。 @@ -26,7 +26,7 @@ Status: implemented **只延长回显生命周期,不调整其他读取方。** Chat 侧按 Inbox 去重仍会移除回显,QueueDock 仍可能展示同一消息。Session 生命周期、Chat 接管和 Dock 排除必须一致。 -**user/message 到达后立即删除排除身份。** 较晚的 Inbox 受理投影会复活 Dock 行。领取水位提供必要的排序依据,不要求两条流同时发布。 +**user/message 到达后立即删除排除身份。** 较晚的 Inbox 受理投影会复活 Dock 行或待处理 steering 行。领取水位提供必要的排序依据,不要求两条流同时发布。 **把全部待处理输入移到最新 Turn 控制行前。** 运行中的 steering 属于已有过程内容之后,多条普通提交也可能属于不同轮次。只有第一条本地 transcript 回显参与空控制行前的定位调整。 @@ -41,11 +41,13 @@ Status: implemented | [Chat 渲染](../../../../packages/client/ui-chat/tests/chat-view.client.spec.tsx) | 同帧 rpcId 替换、回显稳定挂载、三种模式下标题先于输入到达、steering 留在标题之后、历史空轮次及六种本地与 Host 排列。 | | [QueueDock](../../../../packages/client/ui-conversation/tests/queue-dock.client.spec.tsx) | 本地 transcript 排除、其他行及操作、三条消息的全部六种受理顺序及后续 FIFO 领取。 | | [录制 Web 回放](../../../../apps/web/tests/idle-submission-handoff.e2e.ts) | 真实 Web 装配配合保留 FIFO 的投递屏障:6× CPU 降速下的 Inbox/历史两种到达顺序、明确的 turn/start 至 user/message 空档,以及六种请求排列的完整三轮接管。 | +| [Steering Web 回放](../../../../apps/web/tests/steering.e2e.ts) | 本地快捷键 steering 的持久入档先于 Inbox 领取投影到达时,仍只显示一份。 | 单条输入回归在修复前失败:Inbox 受理将气泡移入 Dock,单独交付的 Turn 标题又会出现在回显之前。修复后的路径保留唯一的 Chat 表示,且纵向位置稳定。多输入回放验证持久顺序及无重复、无残留回显,不断言乐观排列可以预测 Host 顺序。 ## 后果 +- 没有本地提交身份的 steering 仍按 Inbox 投影显示;投影迟到时可能短暂与持久节点重复。本地去重不为其他客户端的提交增加历史扫描。 - 重连可撤销已有接收回执的乐观回显,并展示新的权威基线。已领取但不在该基线中的输入可能短暂无气泡;重连不保证 DOM 连续性。 - 本地 running 更新前连续提交的消息可能都留为 transcript 回显。若本地按 A、B、C 提交,但 B 或 C 先入档,持久接管会调整可见顺序。即使 A 先入档,其余本地回显也可能与 Host 队列顺序不同。 - 跨客户端竞争和请求准备的先后差异可能改变实际开场输入。客户端不会仅因 Host 将输入排在另一轮后面,就把已按空闲分类的回显迁入 Dock。 diff --git a/apps/web/tests/steering.e2e.ts b/apps/web/tests/steering.e2e.ts index 0006353491..8b83176777 100644 --- a/apps/web/tests/steering.e2e.ts +++ b/apps/web/tests/steering.e2e.ts @@ -11,6 +11,7 @@ import { afterAll, beforeAll, describe, expect, it, onTestFailed } from 'vitest' import { parseSessionLog } from '@deepseek-ai/dsh-llm-replay' import type { SessionEvent } from '@deepseek-ai/dsh-session' import { expandAssistantStream } from '@deepseek-ai/dsh-llm' +import { parseRemoteStreamServerMessage } from '@deepseek-ai/dsh-api-gateway/stream-protocol' import { acknowledgeReloadConnectionLoss, assertFixtureInventory, captureExpandedTurnProcessAria, captureStableAria, compareOrRefreshGolden, fixtureUserPrompts, @@ -191,13 +192,21 @@ describe('web e2e: mid-turn steering lands durably and visibly', () => { }) }) -describe('web e2e: composer shortcut steers directly', () => { +describe.each(['reconnect', 'delayed-inbox'] as const)('web e2e: composer shortcut steers directly (%s)', (handoff) => { let scaffold: WebScaffold let browser: Browser let page: Page let tripwire: ReturnType let remoteSocket: WebSocketRoute | undefined const sessionEvents: SessionEvent[] = [] + let holdInbox = false + let heldStream: string | undefined + let heldControl: (() => void)[] = [] + const releaseInbox = (): void => { + holdInbox = false + for (const send of heldControl) send() + heldControl = [] + } beforeAll(async () => { scaffold = await launchWebScaffold({ replayFixture: FIXTURE, paceMs: REPLAY_PACE_MS, compareReplaySession: false }) @@ -206,7 +215,17 @@ describe('web e2e: composer shortcut steers directly', () => { page = await newEnglishPage(browser) await page.routeWebSocket('**/api/remote.mux', (route) => { remoteSocket = route - route.connectToServer() + const server = route.connectToServer() + server.onMessage((message) => { + const frame = parseRemoteStreamServerMessage(String(message)) + if (holdInbox && frame.type === 'item') { + const value = frame.value as { type?: string; key?: string } + if (value.type === 'projection' && value.key === 'inbox') heldStream = frame.streamId + } + // Hold the remaining control stream in FIFO order, while history keeps flowing. + if (holdInbox && frame.streamId === heldStream) heldControl.push(() => { route.send(message) }) + else route.send(message) + }) }) tripwire = watchConsole(page) await page.goto(scaffold.authenticatedUrl, { waitUntil: 'load' }) @@ -251,6 +270,7 @@ describe('web e2e: composer shortcut steers directly', () => { return next() }) try { + holdInbox = handoff === 'delayed-inbox' await composer.getByRole('radio', { name: 'Yes' }).click() await composer.getByRole('radio', { name: 'Yes' }).press('Enter') await expect.poll(() => claimed, { timeout: 10_000 }).toBe(true) @@ -259,16 +279,25 @@ describe('web e2e: composer shortcut steers directly', () => { })) expect(await page.getByText(STEER, { exact: true }).count()).toBe(1) expect(await page.locator('[data-submission-echo]').filter({ hasText: STEER }).count()).toBe(1) - const socket = remoteSocket - if (socket === undefined) throw new Error('steering page has no Remote connection') - const warningStart = tripwire.warnings.length - await socket.close({ code: 1012, reason: 'steering reconnect checkpoint' }) - await expect.poll(() => remoteSocket !== socket, { timeout: 10_000 }).toBe(true) - await expect.poll(() => page.locator('[data-submission-echo]').count(), { timeout: 10_000 }).toBe(0) - expect(await page.getByText(STEER, { exact: true }).count()).toBe(0) - acknowledgeReloadConnectionLoss(tripwire, warningStart) + if (handoff === 'reconnect') { + const socket = remoteSocket + if (socket === undefined) throw new Error('steering page has no Remote connection') + const warningStart = tripwire.warnings.length + await socket.close({ code: 1012, reason: 'steering reconnect checkpoint' }) + await expect.poll(() => remoteSocket !== socket, { timeout: 10_000 }).toBe(true) + await expect.poll(() => page.locator('[data-submission-echo]').count(), { timeout: 10_000 }).toBe(0) + expect(await page.getByText(STEER, { exact: true }).count()).toBe(0) + acknowledgeReloadConnectionLoss(tripwire, warningStart) + } else { + await expect.poll(() => heldControl.length, { timeout: 10_000 }).toBeGreaterThan(0) + admission.resolve(undefined) + await page.locator('[data-chat-flow-kind="steering"]').filter({ hasText: STEER }).waitFor({ timeout: 10_000 }) + expect(await page.getByText(STEER, { exact: true }).count()).toBe(1) + expect(await pendingSteering.count()).toBe(0) + } } finally { admission.resolve(undefined) + releaseInbox() stopHolding() await settled } diff --git a/packages/api/session-controller/README.i18n.yaml b/packages/api/session-controller/README.i18n.yaml index f0350ddf0e..c283462c19 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: 7d3e2a8a34c2a18db369a65a880c31417cdc68e2 -README.zh.md: be0ab5bc7a4bc3f9cae950ac3e14a531a32a3db7 +README.md: fa2a251e94cfa2855790d7d71457ac4bdf2ff752 +README.zh.md: d1a73ed5843fddadfc2f401fee1a86eece4e5272 diff --git a/packages/api/session-controller/README.md b/packages/api/session-controller/README.md index 7d3e2a8a34..fa2a251e94 100644 --- a/packages/api/session-controller/README.md +++ b/packages/api/session-controller/README.md @@ -48,7 +48,7 @@ The Client adapter exposes `SessionEventStream`, a Gateway `RemoteJournalStream` The Session object also carries local submission echoes: `session.beginSubmission` inserts one into `SessionSnapshot.pendingSubmissions` synchronously, before the caller serializes and prompts, so a conversation UI can show the message on the submit click's own frame. The echo stores ordered image previews and durable file references. Session derives its `transcript`, `queued`, or `steering` placement from the current running state and requested delivery mode, then retains that placement until the display handoff. The prompt's `requestId` is the correlation identity: the Host echoes it as the durable user source's `rpcId`, including pending messages in the `inbox` projection. Queued echoes retire one animation frame after queue acceptance; Chat echoes follow the admission rule below. Identified failures and abandonment retire unadmitted echoes immediately. Disposal preserves observed admission and fails other unsettled submissions. Each retirement fires `onRetire` exactly once; an observed retirement includes the ordered durable attachment references so the composer can release successful cards while preserving failed drafts. Echoes are Client memory only; reload and reconnect rebuild the conversation from durable events alone. -During uninterrupted following, transcript and steering echoes stay in Chat through Inbox acceptance and claim until their durable messages arrive. After a transcript message is admitted, its local identity remains until the Inbox watermark reaches its next-turn claim seq: Chat already renders the durable Node, while QueueDock excludes that identity even if an older Inbox frame arrives late. Other queued messages remain visible. A replacement follow baseline withdraws receipt-confirmed echoes as observed, using their accepted attachment references; unconfirmed submissions remain pending. Host data then supplies the pending or admitted rows. Reconnecting between claim and admission can briefly omit that bubble; withdrawal confirms acceptance, not execution or failure. +During uninterrupted following, transcript and steering echoes stay in Chat through Inbox acceptance and claim until their durable messages arrive. After a local Chat message is admitted, its identity remains until the Inbox watermark reaches its next-turn or next-step claim seq: Chat already renders the durable Node, while Chat and QueueDock exclude matching stale Inbox rows. Other queued messages remain visible. A replacement follow baseline withdraws receipt-confirmed echoes as observed, using their accepted attachment references; unconfirmed submissions remain pending. Host data then supplies the pending or admitted rows. Reconnecting between claim and admission can briefly omit that bubble; withdrawal confirms acceptance, not execution or failure. The user-invocable `skills/list` metadata includes the winning provider’s optional instruction-file `path`. The composer can preview that file without loading every skill body or activating a cold Agent. diff --git a/packages/api/session-controller/README.zh.md b/packages/api/session-controller/README.zh.md index be0ab5bc7a..d1a73ed584 100644 --- a/packages/api/session-controller/README.zh.md +++ b/packages/api/session-controller/README.zh.md @@ -48,7 +48,7 @@ Client 适配器提供 `SessionEventStream`,即绑定到一个普通 Session Session 对象还承载本地提交回显:`session.beginSubmission` 在调用方序列化与提示词之前,同步把一条回显写入 `SessionSnapshot.pendingSubmissions`,会话 UI 因此能在点击提交的当帧显示消息。回显按顺序存放图片预览与持久文件引用。Session 根据当前运行状态与请求的投递模式推导其 `transcript`、`queued` 或 `steering` 位置,并保留该位置直到展示接管。提示词的 `requestId` 是关联标识:Host 把它回显为 durable user source 的 `rpcId`,`inbox` 投影中的待处理消息也保留同一 source。排队回显在队列接受后延迟一个动画帧退休;Chat 回显遵循下述入档规则。尚未入档的回显在带标识的提示词失败或被放弃时立即退休。销毁时保留已观察到的入档结果,其余未结算提交按 failed 退休。每次退休恰好触发一次 `onRetire`;observed 退休还会携带有序的持久附件引用,让 composer 释放成功卡片并保留失败草稿。回显只存在于 Client 内存;刷新与重连只从持久事件重建会话。 -正常在线时,transcript 与 steering 回显在 Inbox 接受与领取期间留在 Chat,直到持久消息到达。transcript 消息入档后,本地身份保留到 Inbox 水位覆盖其 next-turn 领取序号:Chat 已显示真实 Node,而 QueueDock 继续排除该身份,避免迟到的旧 Inbox 帧重复展示它。其他排队消息照常显示。新的 follow 基线会将已有接收回执的回显按 observed 撤去,使用已接受的附件引用完成结算;尚未确认接收的提交继续保留。待处理或已入档的消息随后由 Host 数据呈现。在领取与入档之间重连时,气泡可能短暂消失;撤去回显只确认接收,不代表执行或失败。 +正常在线时,transcript 与 steering 回显在 Inbox 接受与领取期间留在 Chat,直到持久消息到达。本地 Chat 消息入档后,其身份保留到 Inbox 水位覆盖 next-turn 或 next-step 领取序号:Chat 已显示真实 Node,而 Chat 与 QueueDock 排除匹配的旧 Inbox 行。其他排队消息照常显示。新的 follow 基线会将已有接收回执的回显按 observed 撤去,使用已接受的附件引用完成结算;尚未确认接收的提交继续保留。待处理或已入档的消息随后由 Host 数据呈现。在领取与入档之间重连时,气泡可能短暂消失;撤去回显只确认接收,不代表执行或失败。 面向用户调用的 `skills/list` 元数据包含胜出提供方可选的指令文件 `path`。输入框可据此预览文件,无需加载每个 skill 的正文或激活冷态 Agent。 diff --git a/packages/api/session-controller/src/client/sessions/session.ts b/packages/api/session-controller/src/client/sessions/session.ts index 3bf9a8f2e9..7ad5c637be 100644 --- a/packages/api/session-controller/src/client/sessions/session.ts +++ b/packages/api/session-controller/src/client/sessions/session.ts @@ -812,12 +812,12 @@ export class Session implements SessionFace { this.retireAdmittedSubmission(source.rpcId) } - /** Retire admitted Chat identities only after stale Dock rows can no longer reappear. */ + /** Retire admitted Chat identities only after stale Inbox rows can no longer reappear. */ private retireAdmittedSubmission(requestId: SessionRequestId): void { const settlement = this.submissionSettlements.get(requestId) if (settlement?.admitted === undefined) return const receipt = settlement.receipt - if (settlement.placement === 'transcript' && receipt?.target === 'next-turn' && receipt.index === null + if (receipt?.index === null && (this.projections.seqOf('inbox') ?? -1) < receipt.seq) return this.scheduleObservedRetirement(requestId, settlement.admitted) } diff --git a/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts b/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts index a19f5720ef..af3c06a0b6 100644 --- a/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts +++ b/packages/api/session-controller/tests/session-pending-submissions.client.spec.ts @@ -215,27 +215,33 @@ describe('observed retirement', () => { expect(onRetire).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: refs }) }) - for (const order of ['inbox-first', 'transcript-first'] as const) { - it(`keeps an idle Chat identity until admission and the Inbox claim watermark (${order})`, async ({ mock, start }) => { + for (const { mode, target, order } of [ + { mode: 'queue', target: 'next-turn', order: 'inbox-first' }, + { mode: 'queue', target: 'next-turn', order: 'transcript-first' }, + { mode: 'steer', target: 'next-step', order: 'inbox-first' }, + { mode: 'steer', target: 'next-step', order: 'transcript-first' }, + ] as const) { + it(`keeps a ${mode} Chat identity until admission and the Inbox claim watermark (${order})`, async ({ mock, start }) => { const session = await sessionBench(mock, start, SID) await session.open() session.projections.apply('inbox', { 'next-turn': [], 'next-step': [] }, -1) const frames: FrameRequestCallback[] = [] vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => frames.push(callback)) const onRetire = vi.fn() - const handle = session.beginSubmission({ mode: 'queue', text: 'idle', attachments: [], onRetire }) + session.handleRunning(mode === 'steer') + const handle = session.beginSubmission({ mode, text: 'local input', attachments: [], onRetire }) const refs = [imageRef('idle-image'), fileRef('idle-file')] const message = queuedItem(handle.requestId, refs) - const queued = { 'next-turn': [message], 'next-step': [] } + const queued = { 'next-turn': [], 'next-step': [], [target]: [message] } const empty = { 'next-turn': [], 'next-step': [] } if (order === 'inbox-first') session.projections.apply('inbox', queued, SessionSeq(0)) await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(0), time: 1, - data: { target: 'next-turn', start: 0, inserted: [message] }, + data: { target, start: 0, inserted: [message] }, }) await pushEvent(mock, { type: 'agent/inbox/spliced', seq: SessionSeq(1), time: 2, - data: { target: 'next-turn', start: 0, removedCount: 1, inserted: [] }, + data: { target, start: 0, removedCount: 1, inserted: [] }, }) expect(session.getSnapshot().pendingSubmissions).toHaveLength(1) expect(frames).toHaveLength(0) @@ -298,15 +304,13 @@ describe('observed retirement', () => { await pushEvent(mock, ev.stepStart(SessionSeq(5), 1, 1)) await pushEvent(mock, { type: 'user/message', seq: SessionSeq(6), time: 7, surfaceOp: 'append', data: steerMessage }) flush() - expect(pending()).toEqual(['opening']) + expect(pending()).toEqual(projectionFirst ? ['opening'] : ['opening', 'steering']) expect(normalRetired).not.toHaveBeenCalled() - expect(steerRetired).toHaveBeenCalledExactlyOnceWith({ - reason: 'observed', attachments: [imageRef('steer-image'), fileRef('steer-file')], - }) + if (!projectionFirst) expect(steerRetired).not.toHaveBeenCalled() await pushEvent(mock, { type: 'user/message', seq: SessionSeq(7), time: 8, surfaceOp: 'append', data: normalMessage }) flush() if (!projectionFirst) { - expect(pending()).toEqual(['opening']) + expect(pending()).toEqual(['opening', 'steering']) session.projections.apply('inbox', accepted, SessionSeq(1)) flush() expect(normalRetired).not.toHaveBeenCalled() @@ -316,6 +320,9 @@ describe('observed retirement', () => { } expect(pending()).toEqual([]) expect(normalRetired).toHaveBeenCalledExactlyOnceWith({ reason: 'observed', attachments: [fileRef('opening-file')] }) + expect(steerRetired).toHaveBeenCalledExactlyOnceWith({ + reason: 'observed', attachments: [imageRef('steer-image'), fileRef('steer-file')], + }) await pushEvent(mock, ev.stepEnd(SessionSeq(8), 1, 1)) await pushEvent(mock, ev.turnEnd(SessionSeq(9), 1)) await pushEvent(mock, ev.turnStart(SessionSeq(10), 2)) diff --git a/packages/client/ui-chat/README.i18n.yaml b/packages/client/ui-chat/README.i18n.yaml index 5688915123..f30604f200 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: 12f9b2470c107775ff57c2c7f04c649841dd6f7a -README.zh.md: 4d25db34d283ed2dc62fcfbb15d6ab4797511881 +README.md: 1aa7d71b3f932a7a14ef6d23e9ace7eda444fc3b +README.zh.md: 2239234448e1e00fd395634de39a96c2a80a35f7 diff --git a/packages/client/ui-chat/README.md b/packages/client/ui-chat/README.md index 12f9b2470c..1aa7d71b3f 100644 --- a/packages/client/ui-chat/README.md +++ b/packages/client/ui-chat/README.md @@ -72,7 +72,7 @@ The completed-turn action footer follows the recorded Turn end. Its action row s ## Turn Process Folding -During uninterrupted following, local transcript and steering echoes remain mounted through Inbox acceptance and claim until the durable message arrives, without triggering tail following twice. Pending steering follows Inbox order across clients, using matching local echoes in place. After reconnect, Host-owned rows replace receipt-confirmed local echoes; a claim awaiting admission may briefly have no bubble. +During uninterrupted following, local transcript and steering echoes remain mounted through Inbox acceptance and claim until the durable message arrives, without triggering tail following twice. Pending steering follows Inbox order across clients, using matching local echoes in place. Admitted local steering also suppresses matching stale Inbox rows until the claim projection arrives; steering without a locally tracked submission continues to follow the Inbox projection. After reconnect, Host-owned rows replace receipt-confirmed local echoes; a claim awaiting admission may briefly have no bubble. When Chat ends with an open Turn control and that Turn has no visible input, the first local transcript echo precedes the control. Other echoes remain at the flow tail. The control and echoes share one keyed list, so arrival of the control preserves the echo's mounted identity. Durable inputs replace their matching echoes in the same render. diff --git a/packages/client/ui-chat/README.zh.md b/packages/client/ui-chat/README.zh.md index 4d25db34d2..2239234448 100644 --- a/packages/client/ui-chat/README.zh.md +++ b/packages/client/ui-chat/README.zh.md @@ -72,7 +72,7 @@ Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node, ## 轮次过程折叠 -正常在线时,本地 transcript 与 steering 回显在 Inbox 接受与领取期间保持挂载,直到持久消息到达,不会重复触发跟随底部。跨客户端的待处理 steering 遵循 Inbox 顺序,在匹配位置使用本地回显。重连后,Host 消息替代已有接收回执的本地回显;已领取但尚未入档时,气泡可能短暂消失。 +正常在线时,本地 transcript 与 steering 回显在 Inbox 接受与领取期间保持挂载,直到持久消息到达,不会重复触发跟随底部。跨客户端的待处理 steering 遵循 Inbox 顺序,在匹配位置使用本地回显。已入档的本地 steering 还会排除匹配的旧 Inbox 行,直到领取投影到达;没有本地提交身份的 steering 仍按 Inbox 投影显示。重连后,Host 消息替代已有接收回执的本地回显;已领取但尚未入档时,气泡可能短暂消失。 Chat 末尾为进行中的 Turn 控制行,且该轮尚无可见输入时,第一条本地 transcript 回显显示在控制行前。其他回显保留在正文末尾。控制行与回显共用一个 keyed 列表,因此控制行到达时不会重新挂载回显。持久输入在同一次渲染中替换匹配的回显。 diff --git a/packages/client/ui-chat/src/client/chat/ChatView.tsx b/packages/client/ui-chat/src/client/chat/ChatView.tsx index b449abb26a..a7c9ef0bae 100644 --- a/packages/client/ui-chat/src/client/chat/ChatView.tsx +++ b/packages/client/ui-chat/src/client/chat/ChatView.tsx @@ -177,16 +177,19 @@ export function ChatView({ }, [pendingSubmissions, order, nodeStore]) const pendingInputs = useMemo(() => { const local = new Map(visibleSubmissions.map(submission => [submission.requestId, submission])) - const pending = inboxSteering.map((item) => { + // Admitted local identities outlive their bubbles until the Inbox claim watermark. + const localIds = new Set(pendingSubmissions.filter(submission => submission.placement !== 'queued') + .map(submission => submission.requestId)) + const pending = inboxSteering.flatMap((item) => { const source = item.source - if (source.kind !== 'user' || !('rpcId' in source)) return item + if (source.kind !== 'user' || !('rpcId' in source)) return [item] const submission = local.get(source.rpcId) - if (submission === undefined) return item + if (submission === undefined) return localIds.has(source.rpcId) ? [] : [item] local.delete(source.rpcId) - return submission + return [submission] }) return [...pending, ...local.values()] - }, [inboxSteering, visibleSubmissions]) + }, [inboxSteering, pendingSubmissions, visibleSubmissions]) const renderMessageImages = useCallback( owner => renderSlot('conversation.message.images', { ...owner, loadImage }), [loadImage, renderSlot], diff --git a/packages/client/ui-chat/tests/chat-view.client.spec.tsx b/packages/client/ui-chat/tests/chat-view.client.spec.tsx index 06098a7dac..dc70093fc5 100644 --- a/packages/client/ui-chat/tests/chat-view.client.spec.tsx +++ b/packages/client/ui-chat/tests/chat-view.client.spec.tsx @@ -1825,6 +1825,39 @@ describe('ChatView', () => { expect(view.getByLabelText('回到底部')).toBeTruthy() }) + it.each(['compact', 'detailed', 'expanded'] as const)( + 'hides an admitted local steer while its Inbox claim projection is delayed (%s)', (mode) => { + const pending: InboxState['next-step'] = ['first', 'second'].map(text => ({ + id: text as never, role: 'user', source: { kind: 'user', rpcId: text as never }, + content: [{ type: 'text', text: `steer ${text}` }], + })) + const submissions: SessionSnapshot['pendingSubmissions'] = ['first', 'second'].map(text => ({ + requestId: text as never, placement: 'steering', time: 5_000, + text: `steer ${text}`, attachments: [], + })) + const h = makeHarness({ nodes: [assistant(1, 'working')] }, { + running: true, pendingSubmissions: submissions, + testInbox: { 'next-turn': [], 'next-step': pending }, + }) + h.setTranscriptView(mode) + const view = render() + const second = view.getByText('steer second').closest('[data-submission-echo]') + expect(view.getAllByText('steer first')).toHaveLength(1) + + act(() => { h.setChat({ nodes: [assistant(1, 'working'), { + ...steering(2, 'steer first', 1), source: pending[0]!.source, + }] }) }) + expect(view.getAllByText('steer first')).toHaveLength(1) + expect(view.getByText('steer first').closest('[data-pending-steering]')).toBeNull() + expect(view.getByText('steer second').closest('[data-submission-echo]')).toBe(second) + + act(() => { h.setSession({ testInbox: { 'next-turn': [], 'next-step': [pending[1]!] } }) }) + act(() => { h.setSession({ pendingSubmissions: [submissions[1]!] }) }) + expect(view.getAllByText('steer first')).toHaveLength(1) + expect(view.getByText('steer second').closest('[data-submission-echo]')).toBe(second) + }, + ) + it('retains the same local steer bubble through Host acceptance and claim until its durable node arrives', () => { const h = makeHarness( { nodes: [assistant(1, 'working')] }, From d0dca04e22f09fe04967090b2ee70587ecdad6cc Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 23:02:28 +0800 Subject: [PATCH 29/35] release(vendor): cordis 4.0.4, cosmokit 1.8.5, group 1.0.4, hmr 1.0.19, include 1.0.9, loader 1.0.5, logger-console 1.0.4, schemastery 3.18.4, timer 1.1.6 --- vendor/cordis/package.json | 2 +- vendor/cosmokit/package.json | 2 +- vendor/group/package.json | 2 +- vendor/hmr/package.json | 2 +- vendor/include/package.json | 2 +- vendor/loader/package.json | 2 +- vendor/logger-console/package.json | 2 +- vendor/schemastery/package.json | 2 +- vendor/timer/package.json | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/vendor/cordis/package.json b/vendor/cordis/package.json index 35fe271452..abeac30e1c 100644 --- a/vendor/cordis/package.json +++ b/vendor/cordis/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis", "description": "Meta-Framework for Modern JavaScript Applications", - "version": "4.0.3", + "version": "4.0.4", "publishConfig": { "access": "public" }, diff --git a/vendor/cosmokit/package.json b/vendor/cosmokit/package.json index 0e3aa0692f..b1dcebc8a8 100644 --- a/vendor/cosmokit/package.json +++ b/vendor/cosmokit/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cosmokit", "description": "A collection of common utilities", - "version": "1.8.4", + "version": "1.8.5", "publishConfig": { "access": "public" }, diff --git a/vendor/group/package.json b/vendor/group/package.json index 0b09a6a6fe..780e89e4c5 100644 --- a/vendor/group/package.json +++ b/vendor/group/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-group", "description": "Nested plugin group for cordis", - "version": "1.0.3", + "version": "1.0.4", "publishConfig": { "access": "public" }, diff --git a/vendor/hmr/package.json b/vendor/hmr/package.json index 762a3ac0bc..76624ca522 100644 --- a/vendor/hmr/package.json +++ b/vendor/hmr/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-hmr", "description": "Hot Module Replacement Plugin for Cordis", - "version": "1.0.18", + "version": "1.0.19", "publishConfig": { "access": "public" }, diff --git a/vendor/include/package.json b/vendor/include/package.json index 4768e23f39..3592ebec9a 100644 --- a/vendor/include/package.json +++ b/vendor/include/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-include", "description": "Include files in cordis configurations", - "version": "1.0.8", + "version": "1.0.9", "publishConfig": { "access": "public" }, diff --git a/vendor/loader/package.json b/vendor/loader/package.json index d32e003efc..1c96ff3708 100644 --- a/vendor/loader/package.json +++ b/vendor/loader/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-loader", "description": "Plugin loader for cordis", - "version": "1.0.4", + "version": "1.0.5", "publishConfig": { "access": "public" }, diff --git a/vendor/logger-console/package.json b/vendor/logger-console/package.json index efc444afcc..03f12f9ac6 100644 --- a/vendor/logger-console/package.json +++ b/vendor/logger-console/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-logger-console", "description": "Console logger exporter for cordis", - "version": "1.0.3", + "version": "1.0.4", "publishConfig": { "access": "public" }, diff --git a/vendor/schemastery/package.json b/vendor/schemastery/package.json index b8a6465592..81d8be7c1b 100644 --- a/vendor/schemastery/package.json +++ b/vendor/schemastery/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/schemastery", "description": "Type driven schema validator", - "version": "3.18.3", + "version": "3.18.4", "publishConfig": { "access": "public" }, diff --git a/vendor/timer/package.json b/vendor/timer/package.json index 381299be6e..ca6d50cf11 100644 --- a/vendor/timer/package.json +++ b/vendor/timer/package.json @@ -1,7 +1,7 @@ { "name": "@deepseek-ai/cordis-plugin-timer", "description": "Timer service for cordis", - "version": "1.1.5", + "version": "1.1.6", "publishConfig": { "access": "public" }, From 10ea83bcc3cf97151710cc96dee3a58d54956a40 Mon Sep 17 00:00:00 2001 From: imccyu <276526105+imccyu@users.noreply.github.com> Date: Tue, 22 Sep 2026 23:12:55 +0800 Subject: [PATCH 30/35] release(dsh): 0.1.7-alpha.2 --- 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 d3ced6a684..b433c2407f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/apps/desktop-host/package.json b/apps/desktop-host/package.json index 705921ba0d..5d9628bdee 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.1", + "version": "0.1.7-alpha.2", "private": true, "license": "MIT", "type": "module", diff --git a/apps/desktop/package.json b/apps/desktop/package.json index ba33a3fb3e..db69834af2 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.1", + "version": "0.1.7-alpha.2", "private": true, "license": "MIT", "type": "module", diff --git a/apps/web/package.json b/apps/web/package.json index 87752f4bb5..f1c27b66c1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/package.json b/package.json index 13e90f90e4..986af9f481 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@deepseek-ai/dsh-root", - "version": "0.1.7-alpha.1", + "version": "0.1.7-alpha.2", "license": "MIT", "private": true, "type": "module", diff --git a/packages/acp/acp/package.json b/packages/acp/acp/package.json index a3a0d70e95..086843b9b5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/account-controller/package.json b/packages/api/account-controller/package.json index fbbafa2fc8..714c2c4e40 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/gateway/package.json b/packages/api/gateway/package.json index 814c3aa7e2..48dccab35f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/job-controller/package.json b/packages/api/job-controller/package.json index 9af939effc..7cf32571b1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/remotes/package.json b/packages/api/remotes/package.json index 537fb57354..dc33e2f2c0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/session-controller/package.json b/packages/api/session-controller/package.json index bb77590743..08704ed09d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/settings-controller/package.json b/packages/api/settings-controller/package.json index 0249f259bc..e228f2cbeb 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/terminal-controller/package.json b/packages/api/terminal-controller/package.json index eaeee722f4..c26390e3d6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/workspace-controller/package.json b/packages/api/workspace-controller/package.json index c7fa53a013..dfa24fae41 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/api/workspace-files/package.json b/packages/api/workspace-files/package.json index 993a1283bb..a5e73318e6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/attachment/attachment-local/package.json b/packages/attachment/attachment-local/package.json index 4cc47b0077..aa3af60e31 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/attachment/attachment/package.json b/packages/attachment/attachment/package.json index 6c9a9b52e2..c377716886 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/boot/app-boot/package.json b/packages/boot/app-boot/package.json index 52117cb7d3..051c79d0bd 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/boot/cmdline/package.json b/packages/boot/cmdline/package.json index b1e91919be..2a74de5479 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/boot/config-editor/package.json b/packages/boot/config-editor/package.json index 138a6bd16c..1a69c93b6d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/boot/hmr/package.json b/packages/boot/hmr/package.json index 415f143316..d57ac71584 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/boot/plugin-manager/package.json b/packages/boot/plugin-manager/package.json index c3c59a10af..c96579daf0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/browser-use/browser-use/package.json b/packages/browser-use/browser-use/package.json index b24eef351a..02974247ef 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/acp-app/package.json b/packages/bundle/acp-app/package.json index eeba4e1a6f..fd79e0747f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/base/package.json b/packages/bundle/base/package.json index 39fdcf615b..9bac1d952d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/headless/package.json b/packages/bundle/headless/package.json index 6f00ed63b9..01c6559068 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/sdk-app/package.json b/packages/bundle/sdk-app/package.json index b2b892d218..dc76a874fa 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/sdk-minimal/package.json b/packages/bundle/sdk-minimal/package.json index d52ce98483..d62fa60d58 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/bundle/web-app/package.json b/packages/bundle/web-app/package.json index 63e3b62b92..291cc0e58f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/connection/package.json b/packages/client/connection/package.json index fa72603fd9..572fc80588 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/file-upload/package.json b/packages/client/file-upload/package.json index 5864ad1351..c46f823fdf 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/hmr/package.json b/packages/client/hmr/package.json index 424309561b..7a94aabed6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/locale/package.json b/packages/client/locale/package.json index d735544f58..a57fdc884f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/modules/package.json b/packages/client/modules/package.json index 575a24a18c..d9cd2df64a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/resources/package.json b/packages/client/resources/package.json index d9e90b0775..cf6c67bcd0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/store/package.json b/packages/client/store/package.json index 52ff624a38..3a8a609385 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-agent-preset/package.json b/packages/client/ui-agent-preset/package.json index 64a3623375..785c41cbe5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-approval/package.json b/packages/client/ui-approval/package.json index 2ef38180c0..2159fa5af9 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-attachment/package.json b/packages/client/ui-attachment/package.json index 4bf338ddee..ec5cab12d3 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-brand-official/package.json b/packages/client/ui-brand-official/package.json index 87bca8ebff..822b612aff 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-chat/package.json b/packages/client/ui-chat/package.json index d7aeb15a14..61174be32d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-commands/package.json b/packages/client/ui-commands/package.json index b6f845f7d5..b2eb3b8b28 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-conversation/package.json b/packages/client/ui-conversation/package.json index 4b950d9b3d..7641d94c74 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-deliverables/package.json b/packages/client/ui-deliverables/package.json index 98a5aafdaa..9ed7bc692b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-directory-picker-browse/package.json b/packages/client/ui-directory-picker-browse/package.json index 90876a81a4..07127d178b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-directory-picker-native/package.json b/packages/client/ui-directory-picker-native/package.json index d151c1cf62..08cd61b1e4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-dockkit/package.json b/packages/client/ui-dockkit/package.json index 330417fec5..54daa34e50 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-goal/package.json b/packages/client/ui-goal/package.json index c54cdb0f48..ea48ca954f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-input-trigger/package.json b/packages/client/ui-input-trigger/package.json index deb1a83286..6267aff57c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-jobs/package.json b/packages/client/ui-jobs/package.json index 6c60248fba..021b4d2ac6 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.1", + "version": "0.1.7-alpha.2", "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 40f9feb045..cf4b95f168 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-message-feedback/package.json b/packages/client/ui-message-feedback/package.json index fc4c3c4647..b60cdadcfd 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-model-selection/package.json b/packages/client/ui-model-selection/package.json index 9344d5c997..15c9158526 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-open-in-app/package.json b/packages/client/ui-open-in-app/package.json index d11ca13ea8..d64b4adc15 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-permission-presets/package.json b/packages/client/ui-permission-presets/package.json index 471ec99e50..e18b5b3128 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-plan/package.json b/packages/client/ui-plan/package.json index 88bd2ef4d8..ceed39ad17 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-plugin-manager/package.json b/packages/client/ui-plugin-manager/package.json index c5e24aa76c..aa750e8760 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-primitives/package.json b/packages/client/ui-primitives/package.json index 0e4d01a714..52e29beb42 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-reference/package.json b/packages/client/ui-reference/package.json index 3d4a484a18..f3fb02b449 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-renderer/package.json b/packages/client/ui-renderer/package.json index 29e69c24df..77852c6550 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-schedule/package.json b/packages/client/ui-schedule/package.json index f032329d21..fd23490a2d 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.1", + "version": "0.1.7-alpha.2", "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 fe83d2616e..40d1884750 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-account/package.json b/packages/client/ui-settings-account/package.json index 03a42eaff5..8dd7ccb9db 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-agent-loop/package.json b/packages/client/ui-settings-agent-loop/package.json index 88b949811d..3d97598629 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-general/package.json b/packages/client/ui-settings-general/package.json index a00f40a4c9..c8430e7058 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-models/package.json b/packages/client/ui-settings-models/package.json index 60d2f7ac60..93959d0734 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-plugin-inventory/package.json b/packages/client/ui-settings-plugin-inventory/package.json index 4922cf9343..0948468ce4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-plugins/package.json b/packages/client/ui-settings-plugins/package.json index 03d92c3ea9..745ff32976 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-shell/package.json b/packages/client/ui-settings-shell/package.json index e6b7859680..e3551daa21 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-subagent/package.json b/packages/client/ui-settings-subagent/package.json index d0da1ba3ca..4c2fd80f37 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings-web-search/package.json b/packages/client/ui-settings-web-search/package.json index 3409e17e65..e21ca4aaa7 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-settings/package.json b/packages/client/ui-settings/package.json index 655a2ac47c..90ae1eb92b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-browser/package.json b/packages/client/ui-sidebar-browser/package.json index b8523a5b04..276edca457 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-documentpreview/package.json b/packages/client/ui-sidebar-documentpreview/package.json index ad0c6fe49b..bae13db1d5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-files/package.json b/packages/client/ui-sidebar-files/package.json index d5b0a8f803..492f3a1129 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-right/package.json b/packages/client/ui-sidebar-right/package.json index b8c92a7ae3..b36613d81e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar-terminal/package.json b/packages/client/ui-sidebar-terminal/package.json index e75cbb959d..1bf7b868b9 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-sidebar/package.json b/packages/client/ui-sidebar/package.json index 076c7e3d3f..cf9d1a2893 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-skill/package.json b/packages/client/ui-skill/package.json index 54f5b19f79..49bee1c402 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-slots/package.json b/packages/client/ui-slots/package.json index 464072b246..40ddbe4970 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-subagent/package.json b/packages/client/ui-subagent/package.json index d5c87a7518..89a118ddad 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-theme/package.json b/packages/client/ui-theme/package.json index e63647fa62..8fdbec3862 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-tool/package.json b/packages/client/ui-tool/package.json index d75d8e49e0..1f36739781 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-trajectory/package.json b/packages/client/ui-trajectory/package.json index 742e2b7846..b9a31b6307 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-user-questions/package.json b/packages/client/ui-user-questions/package.json index e8d377742b..af7574df7c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-workflow-run/package.json b/packages/client/ui-workflow-run/package.json index 1c59474572..95243a24ea 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/ui-workspace/package.json b/packages/client/ui-workspace/package.json index 9fec8c9c93..b604aee9ff 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/client/web/package.json b/packages/client/web/package.json index 023c0ac544..03c4707cd8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/command-compact/package.json b/packages/compaction/command-compact/package.json index 53dedea10d..f1124114e6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-basic/package.json b/packages/compaction/compaction-basic/package.json index 076d88f18b..028c88f678 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-image-offload/package.json b/packages/compaction/compaction-image-offload/package.json index a77e71796a..1053f6cbd4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction-tool-result-pruner/package.json b/packages/compaction/compaction-tool-result-pruner/package.json index 051e88585e..7d30cded68 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/compaction/compaction/package.json b/packages/compaction/compaction/package.json index 430219d464..067a42d1a1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/computer-use/computer-use/package.json b/packages/computer-use/computer-use/package.json index 275924505d..5892b9f69a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/agent-instructions/package.json b/packages/context/agent-instructions/package.json index 5da6d7e009..90cfff97ab 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/file-reference-local/package.json b/packages/context/file-reference-local/package.json index b4a3997116..a42d833f65 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/file-reference/package.json b/packages/context/file-reference/package.json index 88d1410c2a..6b7f48d3e5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/session-reference/package.json b/packages/context/session-reference/package.json index f2453f9239..3427d2a847 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/time-context/package.json b/packages/context/time-context/package.json index d22ffa7366..85b9acf6d3 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/context/tmux-context/package.json b/packages/context/tmux-context/package.json index bcd67705fc..40638291d6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-default-model/package.json b/packages/core/agent-default-model/package.json index c4a00536ce..e27550b897 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-loop/package.json b/packages/core/agent-loop/package.json index 30aea4c21a..ddfb2645ac 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent-tool-presentation/package.json b/packages/core/agent-tool-presentation/package.json index d50567c802..c0ad0084a0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/agent/package.json b/packages/core/agent/package.json index 99d7fece31..0e39e03c71 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/scope/package.json b/packages/core/scope/package.json index 805b64c1cf..56ec1246c6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/session/package.json b/packages/core/session/package.json index 26cc9ee9ea..3cce03e091 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/system-prompt/package.json b/packages/core/system-prompt/package.json index 9cc4976a07..0ab266f3a6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/core/tools/package.json b/packages/core/tools/package.json index 8e97f843cd..b5839d2e50 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/authorization/package.json b/packages/credentials/authorization/package.json index 2eaf6b40af..6e8c3ddc7b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/credentials-local/package.json b/packages/credentials/credentials-local/package.json index 541415dde0..c69efa42a0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/credentials/package.json b/packages/credentials/credentials/package.json index 68e33c0ca9..65fe3cb106 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/deepseek-account-platform/package.json b/packages/credentials/deepseek-account-platform/package.json index 14b6a698df..abf1170a15 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/credentials/deepseek-account/package.json b/packages/credentials/deepseek-account/package.json index 9199faca05..b0f00e6a7c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/deliverables/tool-present/package.json b/packages/deliverables/tool-present/package.json index f15a4d5209..a91f72803a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/deliverables/workspace-changes/package.json b/packages/deliverables/workspace-changes/package.json index 9a5b84c082..a062496179 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/document/office-to-pdf/package.json b/packages/document/office-to-pdf/package.json index 6f1c45502f..660db725e5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/agent-team-profile/package.json b/packages/experimental/agent-team-profile/package.json index 3c58e78ecf..ba73fb30ce 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.1", + "version": "0.1.7-alpha.2", "icon": "./icon.svg", "publishConfig": { "access": "public" diff --git a/packages/experimental/agent-team/package.json b/packages/experimental/agent-team/package.json index 119af0da93..cb54ce3b73 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/api-speech-to-text/package.json b/packages/experimental/api-speech-to-text/package.json index 80c3b31208..2b6235edb2 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/auto-review/package.json b/packages/experimental/auto-review/package.json index 1e844007f6..c6cbbd994a 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.1", + "version": "0.1.7-alpha.2", "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 95b7555b2e..73317d1ead 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-playwright-mcp/package.json b/packages/experimental/browser-use-playwright-mcp/package.json index eea3441ee8..963c8cbdf3 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-runtime/package.json b/packages/experimental/browser-use-runtime/package.json index c4e5ee7196..2628535f4f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/browser-use-stagehand-native/package.json b/packages/experimental/browser-use-stagehand-native/package.json index c1af40b350..cd9880acbb 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/client-ui-agent-team/package.json b/packages/experimental/client-ui-agent-team/package.json index 242d368795..8138182114 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/client-ui-voice-input/package.json b/packages/experimental/client-ui-voice-input/package.json index bf775ee89d..8759866c9d 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.1", + "version": "0.1.7-alpha.2", "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 194f3d75e8..172690c42f 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.1", + "version": "0.1.7-alpha.2", "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 cac34e5873..80b7447d8a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/inspector/package.json b/packages/experimental/inspector/package.json index 86ad829569..4e1325661b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/ptc-runtime-python/package.json b/packages/experimental/ptc-runtime-python/package.json index 973e6aeb0b..a938a45f2c 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.1", + "version": "0.1.7-alpha.2", "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 1feb884e68..65acfd37de 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/speech-to-text/package.json b/packages/experimental/speech-to-text/package.json index 93a5dddd54..a27c6d5f9b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/tool-agent-team/package.json b/packages/experimental/tool-agent-team/package.json index de51f63edb..fe2455915a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/voice-input-bundle/package.json b/packages/experimental/voice-input-bundle/package.json index e84a1589e8..b228379ab3 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.1", + "version": "0.1.7-alpha.2", "icon": "./icon.svg", "publishConfig": { "access": "public" diff --git a/packages/experimental/webworker-packer/package.json b/packages/experimental/webworker-packer/package.json index 3485fd6d61..952cbb8a9b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/experimental/webworker-runtime/package.json b/packages/experimental/webworker-runtime/package.json index f535fa1a06..9328a73218 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/cordis-client-runner/package.json b/packages/extensions/cordis-client-runner/package.json index 24e98d9b8b..939e310bf0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/cordis-host-runner/package.json b/packages/extensions/cordis-host-runner/package.json index 75935f2799..167baa0017 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/tool-cordis/package.json b/packages/extensions/tool-cordis/package.json index 7691ec1e29..3a09adac07 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/extensions/ui-cordis/package.json b/packages/extensions/ui-cordis/package.json index ab85f1e314..4ecb8b6c7e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/feedback/command-feedback/package.json b/packages/feedback/command-feedback/package.json index 75107af4aa..c05ba51ed8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/feedback/message-feedback/package.json b/packages/feedback/message-feedback/package.json index b235d59266..f322034362 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-local/package.json b/packages/fs/fs-local/package.json index 43ff5238f7..d7457b3a54 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-observation-policy/package.json b/packages/fs/fs-observation-policy/package.json index 3fda7e35f7..208db70821 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs-sandbox/package.json b/packages/fs/fs-sandbox/package.json index a0c9d6c4e4..fde7ebbc67 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/fs/package.json b/packages/fs/fs/package.json index 0689f950e5..edad0a0c7e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-fs-search/package.json b/packages/fs/tool-fs-search/package.json index dc2dd213fa..706af4f1c2 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-fs/package.json b/packages/fs/tool-fs/package.json index b5d0973f01..bce844f3ee 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/fs/tool-str-replace-editor/package.json b/packages/fs/tool-str-replace-editor/package.json index 133124e89a..bcd55926be 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/goal/command-goal/package.json b/packages/goal/command-goal/package.json index 7af99b23d8..f721307c43 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/goal/goal-round-driver/package.json b/packages/goal/goal-round-driver/package.json index a229bfdc4a..52507494b8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/goal/goal/package.json b/packages/goal/goal/package.json index 4d3ad76314..6426b2245b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/goal/tool-goal/package.json b/packages/goal/tool-goal/package.json index 64f4be5c5d..bf2afbd7b6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/guard/repeat-tool-reminder/package.json b/packages/guard/repeat-tool-reminder/package.json index 8f60013995..44ea2e583d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/guard/timeout-policy/package.json b/packages/guard/timeout-policy/package.json index 50ddad5f5f..dca83b9971 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hook-protocol/package.json b/packages/hooks/hook-protocol/package.json index 60793f3889..695fe9b0c3 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hooks-claude-code/package.json b/packages/hooks/hooks-claude-code/package.json index f95f4b58e8..3a23f57137 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/hooks/hooks-codex/package.json b/packages/hooks/hooks-codex/package.json index aab639e436..d3bfcddd5b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-auto/package.json b/packages/host/directory-picker-auto/package.json index 96a2b18e35..b085694711 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-browse/package.json b/packages/host/directory-picker-browse/package.json index 47f10696d0..96c4835118 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker-native/package.json b/packages/host/directory-picker-native/package.json index 875af145c6..bb60ec57cd 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/directory-picker/package.json b/packages/host/directory-picker/package.json index b7b77204ce..a6cf71a9dc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/frontend-static/package.json b/packages/host/frontend-static/package.json index 20654e868c..edc585600e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/open-in-app/package.json b/packages/host/open-in-app/package.json index 6473170e4b..89b3a4ab6d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/plugin-inventory/package.json b/packages/host/plugin-inventory/package.json index 136a9eab59..1a8befbb71 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/product-telemetry-otel/package.json b/packages/host/product-telemetry-otel/package.json index a480455594..621f4aa930 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/host/webserver/package.json b/packages/host/webserver/package.json index 9df6eaa1e3..faeb2ff4f7 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/identity/anonymous-user-id/package.json b/packages/identity/anonymous-user-id/package.json index 457c4c470e..eff50c0cdb 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/commands/package.json b/packages/interaction/commands/package.json index d92c2189fb..e317c58444 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/permission-presets/package.json b/packages/interaction/permission-presets/package.json index fba00823fd..c5289ab201 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/tool-ask-user/package.json b/packages/interaction/tool-ask-user/package.json index bebe7f81c4..1262994e62 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/user-approval/package.json b/packages/interaction/user-approval/package.json index 029719c966..e154730a57 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/interaction/user-questions/package.json b/packages/interaction/user-questions/package.json index 02c0e6cd2e..d5c02e8825 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/jobs-local/package.json b/packages/jobs/jobs-local/package.json index fdbadaa52c..a96b1f1efc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/jobs/package.json b/packages/jobs/jobs/package.json index 295dff59f5..f5e4a36603 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/jobs/tool-jobs/package.json b/packages/jobs/tool-jobs/package.json index 15e568fe26..4f0515959f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/deepseek-llm-api-extensions/package.json b/packages/llm/deepseek-llm-api-extensions/package.json index f6a1a21b16..a17c6b6763 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-deepseek/package.json b/packages/llm/llm-deepseek/package.json index aea25af057..ff34eb4349 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-pi-ai/package.json b/packages/llm/llm-pi-ai/package.json index 83e9e1178d..d582217754 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm-retry/package.json b/packages/llm/llm-retry/package.json index 041814f8d8..5f66b839e6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/llm/package.json b/packages/llm/llm/package.json index f01f55036f..be3d84ae98 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/plugin-package-inventory-deepseek/package.json b/packages/llm/plugin-package-inventory-deepseek/package.json index 8b4cd60bc2..350d7599c4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/llm/token-meter/package.json b/packages/llm/token-meter/package.json index 99fe7d05e5..3a3be58bc1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/lsp-stdio/package.json b/packages/lsp/lsp-stdio/package.json index 559825ffdf..821604f72e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/lsp/package.json b/packages/lsp/lsp/package.json index 0a202bb16a..d03c14ec99 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/lsp/tool-lsp/package.json b/packages/lsp/tool-lsp/package.json index 5c0c40fd05..7eec9023f4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/mcp/mcp-client/package.json b/packages/mcp/mcp-client/package.json index 00f9f2deb1..2ac261cb38 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/mcp/mcp-resources/package.json b/packages/mcp/mcp-resources/package.json index 3b8b682296..b3ae9d6f5c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/plan/plan-mode/package.json b/packages/plan/plan-mode/package.json index 1976d9e39e..ab235817a1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/preset/agent-preset-registry/package.json b/packages/preset/agent-preset-registry/package.json index d5f324378f..4472149061 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/preset/agent-preset/package.json b/packages/preset/agent-preset/package.json index 306a2808fc..2fba417ecc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/preset/persona/package.json b/packages/preset/persona/package.json index 2ddf6bcd2c..c20b4006bf 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ptc-runtime/ptc-runtime-node/package.json b/packages/ptc-runtime/ptc-runtime-node/package.json index d729da5920..c8219b1743 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ptc-runtime/ptc-runtime/package.json b/packages/ptc-runtime/ptc-runtime/package.json index 67b85ec6b9..40a0d8d234 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/runtime-diagnostics/invariants/package.json b/packages/runtime-diagnostics/invariants/package.json index 73c9f3b99d..7a6179a606 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-local/package.json b/packages/sandbox/sandbox-local/package.json index a1439ff5b6..1f7cd12f59 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-policy/package.json b/packages/sandbox/sandbox-policy/package.json index 623517f836..a66942a07a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox-windows-acl/package.json b/packages/sandbox/sandbox-windows-acl/package.json index 2d4cd72e2a..716bbc0f7d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sandbox/sandbox/package.json b/packages/sandbox/sandbox/package.json index 00ab1ce45e..b07bfc9b18 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/schedule/schedule/package.json b/packages/schedule/schedule/package.json index 493dc1e0c2..d729668e9c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/client/package.json b/packages/sdk/client/package.json index a79827058d..432d7420d0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/protocol/package.json b/packages/sdk/protocol/package.json index 3905a88fd5..e5eb68077a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/sdk/server/package.json b/packages/sdk/server/package.json index cd999821ae..dd9581f36b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-log-export/package.json b/packages/session-query/session-log-export/package.json index 8bb2af84cc..6812223661 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-query-sqlite/package.json b/packages/session-query/session-query-sqlite/package.json index 9aa5c02749..567f044369 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/session-query/package.json b/packages/session-query/session-query/package.json index 032ded62a8..1efe866c2c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session-query/tool-session-query/package.json b/packages/session-query/tool-session-query/package.json index 2575f54d59..d28b8eee61 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-checkpoint-policy/package.json b/packages/session/session-checkpoint-policy/package.json index ef4d24ddce..377144a816 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format-catalog/package.json b/packages/session/session-format-catalog/package.json index 804218446e..857071b04c 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.1", + "version": "0.1.7-alpha.2", "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 fb80e3eda1..8b156a585b 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.1", + "version": "0.1.7-alpha.2", "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 6bed58e59e..bf9ed47550 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.1", + "version": "0.1.7-alpha.2", "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 f78321bb27..03fa527a4d 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.1", + "version": "0.1.7-alpha.2", "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 1cfef2bc64..f07d74f053 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-format/package.json b/packages/session/session-format/package.json index 8db03f9766..4fecebb4e6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-log-deepseek/package.json b/packages/session/session-log-deepseek/package.json index 111701f607..45ac212aa5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-persistence-jsonl/package.json b/packages/session/session-persistence-jsonl/package.json index cb3d7e132e..5d4ff97192 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-persistence/package.json b/packages/session/session-persistence/package.json index fc4e33d735..73e9e596a5 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-projection-cache/package.json b/packages/session/session-projection-cache/package.json index 90e0daa021..2d9ae15d79 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-projection/package.json b/packages/session/session-projection/package.json index 795f3b7483..68fec6c9ec 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-stats/package.json b/packages/session/session-stats/package.json index d73bd076d9..1310119bae 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-telemetry-otel/package.json b/packages/session/session-telemetry-otel/package.json index 830d0a0c8b..d422d86902 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-telemetry/package.json b/packages/session/session-telemetry/package.json index 7b08adb208..fcd35a2203 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.1", + "version": "0.1.7-alpha.2", "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 e8daebcad7..bca9d289ab 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.1", + "version": "0.1.7-alpha.2", "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 4d6531b458..9867aef734 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title-llm/package.json b/packages/session/session-title-llm/package.json index 690ea38f8a..617fd4bd7c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-title/package.json b/packages/session/session-title/package.json index 9923bb55d8..7b74eaf69a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/session/session-turn-outline/package.json b/packages/session/session-turn-outline/package.json index 2228de992c..623265c4f8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/settings/settings/package.json b/packages/settings/settings/package.json index 6a111055f2..ab7777ba69 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/bash-local/package.json b/packages/shell/bash-local/package.json index 78524471de..f0ca7a1a10 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/bash-sandbox/package.json b/packages/shell/bash-sandbox/package.json index 9091c75a9b..fdabe47048 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/pwsh-local/package.json b/packages/shell/pwsh-local/package.json index b100b5255c..a7e16bde9a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/pwsh-sandbox/package.json b/packages/shell/pwsh-sandbox/package.json index 16ad2cedcf..4753cd5b59 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/shell-env/package.json b/packages/shell/shell-env/package.json index 5c60401877..3956bb1fbe 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/shell/package.json b/packages/shell/shell/package.json index 8856e3cb90..3ac7c3ffb6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-bash-persistent/package.json b/packages/shell/tool-bash-persistent/package.json index 406fd49cae..082fd6d29b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-bash/package.json b/packages/shell/tool-bash/package.json index 07d2e42663..a397e3f60b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-pwsh-persistent/package.json b/packages/shell/tool-pwsh-persistent/package.json index 0e48e7c21e..5758b6520b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/shell/tool-pwsh/package.json b/packages/shell/tool-pwsh/package.json index 35c799e10d..c814405b91 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-badge/package.json b/packages/skill/skill-badge/package.json index 0a76f7ca23..f7eab8c85a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-filesystem/package.json b/packages/skill/skill-filesystem/package.json index 7de677b050..78aa78881e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill-office/package.json b/packages/skill/skill-office/package.json index d1db374ce5..803f1c5d1c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/skill/package.json b/packages/skill/skill/package.json index ede9e67d2f..211a20fa73 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/tool-skill/package.json b/packages/skill/tool-skill/package.json index 12e1d688e3..49b6495630 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/skill/tool-workspace-dependencies/package.json b/packages/skill/tool-workspace-dependencies/package.json index 7b8e2bdb79..019644ea31 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill-local/package.json b/packages/spill/spill-local/package.json index 28eb81b63d..eb8e15b99d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill-policy/package.json b/packages/spill/spill-policy/package.json index 4d443913ed..ecf5eb5ce6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/spill/spill/package.json b/packages/spill/spill/package.json index 806bcf9a83..3466cd5f43 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/fs-ssh/package.json b/packages/ssh/fs-ssh/package.json index 7638d2b381..e3e5455a40 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/sandbox-ssh/package.json b/packages/ssh/sandbox-ssh/package.json index 6ee7ec70eb..f61b6fbda6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/ssh/package.json b/packages/ssh/ssh/package.json index 80be73316a..1cc2289b57 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/ssh/subprocess-ssh/package.json b/packages/ssh/subprocess-ssh/package.json index 4561b0ed89..90e24535de 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-domain/package.json b/packages/storage/storage-domain/package.json index 2c70a4a387..a83948781d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-json/package.json b/packages/storage/storage-json/package.json index 8a5d7c9fb1..7efc811c36 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage-sqlite/package.json b/packages/storage/storage-sqlite/package.json index fd4872d1ac..3b57ffd8c0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/storage/storage/package.json b/packages/storage/storage/package.json index 6ab7c7e3a0..9c41ca9ee4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-acp/package.json b/packages/subagent/subagent-acp/package.json index 69adc7a68d..c16896a5ff 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-claude-code/package.json b/packages/subagent/subagent-claude-code/package.json index 8a5f5784e2..6216690b4a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-codex/package.json b/packages/subagent/subagent-codex/package.json index b6f8de79e7..a44170636a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-dsh-sdk/package.json b/packages/subagent/subagent-dsh-sdk/package.json index 318c11b0c4..ebb7f50ce7 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-fork-in-process/package.json b/packages/subagent/subagent-fork-in-process/package.json index c90e0e68d9..f9b342dd01 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-in-process-driver/package.json b/packages/subagent/subagent-in-process-driver/package.json index 967d7eb635..066987a7e4 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent-spawn-in-process/package.json b/packages/subagent/subagent-spawn-in-process/package.json index 5a5a52bb1d..744fb203c6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/subagent/package.json b/packages/subagent/subagent/package.json index f36c870f22..38fcf39a5f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/tool-subagent-control/package.json b/packages/subagent/tool-subagent-control/package.json index eda62c7c96..c7573a393e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subagent/tool-subagent/package.json b/packages/subagent/tool-subagent/package.json index a8f961d042..eb16118d7b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/subprocess-local/package.json b/packages/subprocess/subprocess-local/package.json index 50d307859b..85b2055512 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/subprocess/package.json b/packages/subprocess/subprocess/package.json index 74f248df7d..84e1c0fbbc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/subprocess/win32-process/package.json b/packages/subprocess/win32-process/package.json index 713fefb2c3..514f9f7ada 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/terminal-bash/package.json b/packages/terminal/terminal-bash/package.json index 49d644e3fa..62a0fae23e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/terminal/package.json b/packages/terminal/terminal/package.json index 71496630bb..697e9d4ebd 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/terminal/tool-terminal/package.json b/packages/terminal/tool-terminal/package.json index 8a4cc1a868..1688847288 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/agent-loop-testkit/package.json b/packages/test-support/agent-loop-testkit/package.json index 6cd1e31817..e41a535c86 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/client-runtime/package.json b/packages/test-support/client-runtime/package.json index 22bfcf7d16..b4e5a20033 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/llm-mock-server/package.json b/packages/test-support/llm-mock-server/package.json index adb49fc64b..e7c1a25aef 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/llm-replay/package.json b/packages/test-support/llm-replay/package.json index f064cc30c6..9e7e1b69fe 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/loader-smoke/package.json b/packages/test-support/loader-smoke/package.json index 197dce5c07..18c6d0a9f2 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/remote-mock/package.json b/packages/test-support/remote-mock/package.json index 64dfb2617c..a3186958b2 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-support/session-snapshot/package.json b/packages/test-support/session-snapshot/package.json index 76df2219f1..9364e43e0e 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/todo/tool-todo/package.json b/packages/todo/tool-todo/package.json index 19e93ed48b..bbd0fed447 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/typert/generator/package.json b/packages/typert/generator/package.json index 1c26c186c4..94055dde80 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/typert/loader/package.json b/packages/typert/loader/package.json index 91f7ff9162..38323ae71d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/typert/protocol/package.json b/packages/typert/protocol/package.json index a74f2c9cb9..c4c81b1377 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/typert/registry/package.json b/packages/typert/registry/package.json index 2cdfde73b2..2fa54b854f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/atomic-write/package.json b/packages/util/atomic-write/package.json index 885ddde92a..44227e213d 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/brand/package.json b/packages/util/brand/package.json index ec8c426c39..d5127c46c1 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/chunked-list/package.json b/packages/util/chunked-list/package.json index 5448935e79..3ae771f041 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/crypto/package.json b/packages/util/crypto/package.json index 219d72ac38..1c83ac57f6 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/deque/package.json b/packages/util/deque/package.json index b3b940941b..53f4e535a0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/home-paths/package.json b/packages/util/home-paths/package.json index 029ccae080..23af68a4a2 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/http-proxy/package.json b/packages/util/http-proxy/package.json index c0b5c711d3..5cdc0c5179 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/launch-environment/package.json b/packages/util/launch-environment/package.json index 47f2bf1c86..77ce691086 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/lazy-require/package.json b/packages/util/lazy-require/package.json index 38e75afcc6..4f1dcafdc8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/native-command/package.json b/packages/util/native-command/package.json index ebf73e5f73..8fa10e9d7a 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/output-retention/package.json b/packages/util/output-retention/package.json index b7147ccc68..b1c35111d7 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/package-manifest/package.json b/packages/util/package-manifest/package.json index d3e8b2d7ec..c60a771c8c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/time/package.json b/packages/util/time/package.json index 93dbad155d..1b22e958bb 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/timeout/package.json b/packages/util/timeout/package.json index 7c2c6ddd6b..5d15a2d582 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/values/package.json b/packages/util/values/package.json index 35a646a817..3404c228bc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/util/workspace-path/package.json b/packages/util/workspace-path/package.json index 0f1f31f391..6cdf54003c 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/tool-web/package.json b/packages/web/tool-web/package.json index 40feb58f66..e2c40b37dc 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-fetch-http/package.json b/packages/web/web-fetch-http/package.json index 1809552282..aa31af13ec 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-deepseek/package.json b/packages/web/web-search-deepseek/package.json index 3c28bf7f41..f92130d3d8 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-exa/package.json b/packages/web/web-search-exa/package.json index d82912919f..2816290bf3 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/web-search-perplexity/package.json b/packages/web/web-search-perplexity/package.json index 178a9f549c..89ddfc7b6f 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/web/web/package.json b/packages/web/web/package.json index a78b06e117..010eb41dec 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/webhook/webhook-github/package.json b/packages/webhook/webhook-github/package.json index 875b02eac2..ad6ce72720 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/webhook/webhook/package.json b/packages/webhook/webhook/package.json index 4d0b2d1b10..28b02bd05b 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/tool-ralph/package.json b/packages/workflow/tool-ralph/package.json index 1306414d4c..d2e76f3364 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/tool-workflow/package.json b/packages/workflow/tool-workflow/package.json index 5a9c0fcd9f..ac3d65e9e0 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/workflow-ptc/package.json b/packages/workflow/workflow-ptc/package.json index d5c2543721..fe776b7bb7 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/workflow/workflow/package.json b/packages/workflow/workflow/package.json index 8a11473eb9..7ffbb48324 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, diff --git a/packages/workspace/workspace/package.json b/packages/workspace/workspace/package.json index 9fc100415d..eab12aee36 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.1", + "version": "0.1.7-alpha.2", "publishConfig": { "access": "public" }, From ceb997cdefc2bd72970ebb33dc918771e15b2310 Mon Sep 17 00:00:00 2001 From: Turtle Date: Wed, 23 Sep 2026 10:33:17 +0800 Subject: [PATCH 31/35] fix(ui-settings-account): clear the Windows caption for the Platform return bar The embedded Platform view renders its 48px return bar at the top of the window. On Windows the Desktop-owned caption menu occupies that strip (fixed at top 0, 40px high, z-index 1100), so the "Back to DeepSeek Harness" label and the Application/Edit menu text were painted over each other. Offset the overlay by --dsh-windows-titlebar-height where the Desktop preload publishes its caption marker, the same clearance AppFrame and the sidebar caption controls use. The return bar and the native view bounds, which come from the viewport element's rectangle, both move below the strip. --- .../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/PlatformOverlay.module.css | 6 +++++ .../platform-overlay-caption.client.spec.ts | 26 +++++++++++++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index a6b62d6056..6ecf40df07 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: be38bcd68ab7affe4aa840499ef79009ba25b779 -README.zh.md: 9429d21cbd988a538c18320acbbfcb65dd6acfc0 +README.md: 5155c5cfa04f40e396ec90784a28ba73e009964c +README.zh.md: 51bba9a6d68f62acdfde26e56b8ee8d844aac6c9 diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index be38bcd68a..5155c5cfa0 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -28,7 +28,7 @@ The section registers through settings.section and uses the account Remote names Balances use Platform Web currency formatting: two decimal places and digit grouping, positive amounts truncated to cents, positive sub-cent amounts shown as <0.01, and negative amounts rounded with a minimum displayed magnitude of 0.01. Raw Host balance strings remain unchanged. -Desktop usage and top-up actions open an isolated native Platform view below a 48px return bar. Back destroys the view and preserves the Account settings page. Loading failures retain the return action and show a centered localized error with Retry. Retry reloads the same destination; renderer commands never receive the account token. +Desktop usage and top-up actions open an isolated native Platform view below a 48px return bar. On Windows Electron the return bar and the native view start below the 40px Desktop caption strip, so the Application and Edit menu text cannot cover the Back to DeepSeek Harness label. Back destroys the view and preserves the Account settings page. Loading failures retain the return action and show a centered localized error with Retry. Retry reloads the same destination; renderer commands never receive the account token. 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. diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 9429d21cbd..51bba9a6d6 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -28,7 +28,7 @@ Desktop 设置中的账号页面显示 DeepSeek 登录状态,并提供浏览 余额沿用 Platform Web 的金额格式:两位小数和千分位分组,正金额截断至分,小于一分的正金额显示为 <0.01,负金额按舍入规则处理且显示绝对值至少为 0.01。Host 返回的原始余额字符串保持不变。 -Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Platform 视图。返回操作销毁视图并保留 Account 设置页。加载失败时保留返回操作,居中显示本地化错误提示和“重试”按钮。重试重新加载同一目标页面;渲染进程命令不接收账号 token。 +Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Platform 视图。在 Windows Electron 中,返回栏与原生视图都从 40px 的 Desktop 顶栏下方开始,Application 和 Edit 菜单文字不会盖住“返回 DeepSeek Harness”。返回操作销毁视图并保留 Account 设置页。加载失败时保留返回操作,居中显示本地化错误提示和“重试”按钮。重试重新加载同一目标页面;渲染进程命令不接收账号 token。 账号菜单的“意见反馈”入口在系统浏览器中打开飞书问卷。链接通过 prefill_* 参数填写已有的构建版本、界面语言和屏幕物理分辨率,并为所有上下文字段设置 hide_*=1;不传账号 UID、token 或联系方式。可在 ui-settings-account 插件配置 contactFormUrl,切换到另一个 HTTPS 问卷。问卷支持 Harness 来源选项前,contactSource 默认为空;OS 和设备字段沿用 Web 实现,保持未填写。 diff --git a/packages/client/ui-settings-account/src/client/PlatformOverlay.module.css b/packages/client/ui-settings-account/src/client/PlatformOverlay.module.css index 62084cf12f..39f0da5deb 100644 --- a/packages/client/ui-settings-account/src/client/PlatformOverlay.module.css +++ b/packages/client/ui-settings-account/src/client/PlatformOverlay.module.css @@ -7,6 +7,12 @@ background: var(--dsw-alias-bg-base); } +/* Windows Electron: the Desktop caption menu owns the window's top strip, so + the return bar and the native Platform view start below it. */ +:global([data-windows-titlebar]) .overlay { + padding-top: var(--dsh-windows-titlebar-height); +} + .header { box-sizing: border-box; height: 48px; diff --git a/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts b/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts new file mode 100644 index 0000000000..46ec11f9ea --- /dev/null +++ b/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts @@ -0,0 +1,26 @@ +/** + * The Windows caption clearance as CSS text. jsdom has no layout, so the + * Account specs pin the return bar's DOM but cannot show where it lands; this + * reads the declaration that keeps the Desktop-owned Application and Edit menu + * from covering the return bar. + */ +import { readFileSync } from 'node:fs' +import { fileURLToPath } from 'node:url' +import { expect, it } from 'vitest' + +const css = readFileSync(fileURLToPath(new URL('../src/client/PlatformOverlay.module.css', import.meta.url)), 'utf8') + +function declarations(selector: string): string[] { + const rule = new RegExp(`${selector.replace(/[.[\]():*+^$\\]/g, '\\$&')}\\s*\\{([^{}]*)\\}`).exec(css.replace(/\/\*[\s\S]*?\*\//g, ' ')) + if (rule === null) throw new Error(`no \`${selector}\` rule`) + return (rule[1] ?? '').split(';').map(part => part.trim()).filter(Boolean) +} + +it('starts the return bar below the Desktop caption strip on Windows', () => { + // The strip and its clearance token both come from the Desktop preload's + // caption marker; without the offset the 48px return bar renders inside the + // strip that the fixed caption menu host also occupies. + expect(declarations(':global([data-windows-titlebar]) .overlay')).toEqual(expect.arrayContaining([ + 'padding-top: var(--dsh-windows-titlebar-height)', + ])) +}) From 14a062acb791a02bd943c276eab1905d1c43b392 Mon Sep 17 00:00:00 2001 From: Turtle Date: Wed, 23 Sep 2026 10:47:17 +0800 Subject: [PATCH 32/35] docs(ui-settings-account): record the Platform view caption limitation Review follow-up: the caption menu is inert while the Platform view is open, which the previous geometry hid; state it under Known Limitations, and drop the duplicated 40px figure the Desktop owns. The style spec's rule lookup anchors on the rule boundary and asserts with toContain. --- packages/client/ui-settings-account/README.i18n.yaml | 4 ++-- packages/client/ui-settings-account/README.md | 4 +++- packages/client/ui-settings-account/README.zh.md | 4 +++- .../tests/platform-overlay-caption.client.spec.ts | 6 ++---- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/client/ui-settings-account/README.i18n.yaml b/packages/client/ui-settings-account/README.i18n.yaml index 6ecf40df07..826301b3aa 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: 5155c5cfa04f40e396ec90784a28ba73e009964c -README.zh.md: 51bba9a6d68f62acdfde26e56b8ee8d844aac6c9 +README.md: 6155d54643f456395f1d2d377e0446377033df43 +README.zh.md: c9dd2f3627214972842924225bb2a08bbb505a7e diff --git a/packages/client/ui-settings-account/README.md b/packages/client/ui-settings-account/README.md index 5155c5cfa0..6155d54643 100644 --- a/packages/client/ui-settings-account/README.md +++ b/packages/client/ui-settings-account/README.md @@ -28,7 +28,7 @@ The section registers through settings.section and uses the account Remote names Balances use Platform Web currency formatting: two decimal places and digit grouping, positive amounts truncated to cents, positive sub-cent amounts shown as <0.01, and negative amounts rounded with a minimum displayed magnitude of 0.01. Raw Host balance strings remain unchanged. -Desktop usage and top-up actions open an isolated native Platform view below a 48px return bar. On Windows Electron the return bar and the native view start below the 40px Desktop caption strip, so the Application and Edit menu text cannot cover the Back to DeepSeek Harness label. Back destroys the view and preserves the Account settings page. Loading failures retain the return action and show a centered localized error with Retry. Retry reloads the same destination; renderer commands never receive the account token. +Desktop usage and top-up actions open an isolated native Platform view below a 48px return bar. On Windows Electron the return bar and the native view start below the Desktop caption strip, so the Application and Edit menu text cannot cover the Back to DeepSeek Harness label. Back destroys the view and preserves the Account settings page. Loading failures retain the return action and show a centered localized error with Retry. Retry reloads the same destination; renderer commands never receive the account token. 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. @@ -67,6 +67,8 @@ No model request prefix changes. - Profile and recharge-wallet balances use the existing Platform Web endpoints through Host getProfile / getBalance. The page refreshes when opened and after login or reconnect, preserves server-masked contact data, and shows query failures independently without manufacturing a zero balance. Usage and top-up use Host-provided links derived from platformOrigin and the browser’s own login; the links never carry a DSH token. +- The Platform view’s dialog marks every other document child inert, including the Desktop-owned caption menu host, so the Application and Edit menu stays visible but cannot be operated until the view closes. Exempting that host needs an inertness contract owned by the Desktop. + ### Dev Note diff --git a/packages/client/ui-settings-account/README.zh.md b/packages/client/ui-settings-account/README.zh.md index 51bba9a6d6..c9dd2f3627 100644 --- a/packages/client/ui-settings-account/README.zh.md +++ b/packages/client/ui-settings-account/README.zh.md @@ -28,7 +28,7 @@ Desktop 设置中的账号页面显示 DeepSeek 登录状态,并提供浏览 余额沿用 Platform Web 的金额格式:两位小数和千分位分组,正金额截断至分,小于一分的正金额显示为 <0.01,负金额按舍入规则处理且显示绝对值至少为 0.01。Host 返回的原始余额字符串保持不变。 -Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Platform 视图。在 Windows Electron 中,返回栏与原生视图都从 40px 的 Desktop 顶栏下方开始,Application 和 Edit 菜单文字不会盖住“返回 DeepSeek Harness”。返回操作销毁视图并保留 Account 设置页。加载失败时保留返回操作,居中显示本地化错误提示和“重试”按钮。重试重新加载同一目标页面;渲染进程命令不接收账号 token。 +Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Platform 视图。在 Windows Electron 中,返回栏与原生视图都从 Desktop 顶栏下方开始,Application 和 Edit 菜单文字不会盖住“返回 DeepSeek Harness”。返回操作销毁视图并保留 Account 设置页。加载失败时保留返回操作,居中显示本地化错误提示和“重试”按钮。重试重新加载同一目标页面;渲染进程命令不接收账号 token。 账号菜单的“意见反馈”入口在系统浏览器中打开飞书问卷。链接通过 prefill_* 参数填写已有的构建版本、界面语言和屏幕物理分辨率,并为所有上下文字段设置 hide_*=1;不传账号 UID、token 或联系方式。可在 ui-settings-account 插件配置 contactFormUrl,切换到另一个 HTTPS 问卷。问卷支持 Harness 来源选项前,contactSource 默认为空;OS 和设备字段沿用 Web 实现,保持未填写。 @@ -67,6 +67,8 @@ Desktop 的用量和充值操作在 48px 返回栏下方打开隔离的原生 Pl - 资料和充值钱包余额通过 Host getProfile / getBalance 复用已有 Platform Web 接口。页面在打开、登录及重连后刷新,原样显示服务端脱敏后的联系方式,并分别处理查询失败,不将失败显示为零余额。用量和充值使用 Host 按 platformOrigin 派生的链接,并沿用浏览器自身登录态,不携带 DSH token。 +- Platform 视图的弹窗会把文档内其它子节点设为 inert,其中包括 Desktop 拥有的顶栏菜单 host,因此 Application 和 Edit 菜单保持可见,但在视图关闭前无法操作。放行该 host 需要 Desktop 侧提供 inert 契约。 + ### 开发备注 diff --git a/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts b/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts index 46ec11f9ea..5df486ca8b 100644 --- a/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts +++ b/packages/client/ui-settings-account/tests/platform-overlay-caption.client.spec.ts @@ -11,7 +11,7 @@ import { expect, it } from 'vitest' const css = readFileSync(fileURLToPath(new URL('../src/client/PlatformOverlay.module.css', import.meta.url)), 'utf8') function declarations(selector: string): string[] { - const rule = new RegExp(`${selector.replace(/[.[\]():*+^$\\]/g, '\\$&')}\\s*\\{([^{}]*)\\}`).exec(css.replace(/\/\*[\s\S]*?\*\//g, ' ')) + const rule = new RegExp(`(?:^|[{}])\\s*${selector.replace(/[.[\]():*+^$\\]/g, '\\$&')}\\s*\\{([^{}]*)\\}`).exec(css.replace(/\/\*[\s\S]*?\*\//g, ' ')) if (rule === null) throw new Error(`no \`${selector}\` rule`) return (rule[1] ?? '').split(';').map(part => part.trim()).filter(Boolean) } @@ -20,7 +20,5 @@ it('starts the return bar below the Desktop caption strip on Windows', () => { // The strip and its clearance token both come from the Desktop preload's // caption marker; without the offset the 48px return bar renders inside the // strip that the fixed caption menu host also occupies. - expect(declarations(':global([data-windows-titlebar]) .overlay')).toEqual(expect.arrayContaining([ - 'padding-top: var(--dsh-windows-titlebar-height)', - ])) + expect(declarations(':global([data-windows-titlebar]) .overlay')).toContain('padding-top: var(--dsh-windows-titlebar-height)') }) From dc374b8879b961d0637dc0c365cd4e020748c171 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Wed, 23 Sep 2026 11:18:01 +0800 Subject: [PATCH 33/35] fix(web): keep official DeepSeek first in model settings --- packages/client/ui-settings-models/README.i18n.yaml | 4 ++-- packages/client/ui-settings-models/README.md | 2 +- packages/client/ui-settings-models/README.zh.md | 2 +- .../client/ui-settings-models/src/client/ModelsSection.tsx | 7 +++++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index 8dcae71776..cc8f8a2981 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: e0accf787aba9d2857887773b4f1a3d703fc1fc1 -README.zh.md: 39b443c2293a9da0f7a82bc70d10539a2d153aa8 +README.md: 0d6f34436f11eadd84ff1c2d6a7731aee1a42f32 +README.zh.md: f28744f46eda015528553e1b363e1427d2b927ae diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index e0accf787a..0d6f34436f 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 -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. +Open the Models page from the Settings navigation to see every configured provider as a row. The official DeepSeek provider (`deepseek-official`) always appears first; other providers retain their directory order. 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 39b443c229..f28744f46e 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" ## 使用本包 -从设置导航打开 Models 页面,即可看到每个已配置的提供商都有一行。其配置键未在任何位置配置的整分节提供商会渲染为其展开的设置卡片而非一行,但仅限首次运行姿态,且仅持续到用户关闭该卡片为止。每一类卡片各自持有自己的展开状态,因此关掉其中一张绝不会丢弃另一张里的草稿。 +从设置导航打开 Models 页面,即可看到每个已配置的提供商都有一行。官方 DeepSeek 提供商(`deepseek-official`)始终排在第一位,其他提供商保持目录中的原有顺序。其配置键未在任何位置配置的整分节提供商会渲染为其展开的设置卡片而非一行,但仅限首次运行姿态,且仅持续到用户关闭该卡片为止。每一类卡片各自持有自己的展开状态,因此关掉其中一张绝不会丢弃另一张里的草稿。 存在已存储目录错误的提供商仍显示诊断以及编辑、删除入口。添加操作只面向已注册的 settings 命名空间,因此不可用的命名空间不会留下无法打开编辑器的按钮。保存被拒绝时,编辑器保持打开并展示 Host 诊断。 diff --git a/packages/client/ui-settings-models/src/client/ModelsSection.tsx b/packages/client/ui-settings-models/src/client/ModelsSection.tsx index 7ae8118762..d5743645b2 100644 --- a/packages/client/ui-settings-models/src/client/ModelsSection.tsx +++ b/packages/client/ui-settings-models/src/client/ModelsSection.tsx @@ -1,7 +1,8 @@ /** * Models settings section: the provider rows joined from the configurable * directory, settings namespaces, and credential states, with one editor - * card at a time. Rows expose only confirmed API-key state through accessible + * card at a time. The official DeepSeek provider appears first; other rows + * retain directory order. Rows expose only confirmed API-key state through accessible * solid configured or missing dots. A whole-section provider without a * configured key renders as its open setup card instead of a row, but only in * the first-run posture — no provider on the page can serve requests yet — and @@ -335,7 +336,9 @@ function Loaded({ injected, renderSlot }: { injected: ModelsSectionFace; renderS // One fact decides both first-run postures on this page and the onboarding // step: whether the user already has a provider to talk to. const anyUsable = state.rows.some(providerUsable) - const configured = state.rows.filter(row => row.configured) + const configured = state.rows.filter(row => row.configured).sort((left, right) => ( + Number(right.entry.provider === 'deepseek-official') - Number(left.entry.provider === 'deepseek-official') + )) const configurable = state.rows.filter(row => state.namespaces.has(row.entry.settingsNs)) const addable: AddableRow[] = state.rows.flatMap((row) => { const namespace = state.namespaces.get(row.entry.settingsNs) From d40dbef91b32516a32f1df5818618f6449e9a898 Mon Sep 17 00:00:00 2001 From: Yichen Jiang Date: Wed, 23 Sep 2026 11:58:54 +0800 Subject: [PATCH 34/35] feat(voice-input): expose preparation download source selection --- .../expected/voice-source-auto.expected.md | 19 +++ .../expected/voice-source-manual.expected.md | 19 +++ apps/web/tests/voice-download.e2e.ts | 116 +++++++++--------- apps/web/tests/voice-setup.e2e.ts | 9 ++ docs/subsystems/voice-input.i18n.yaml | 4 +- docs/subsystems/voice-input.md | 8 +- docs/subsystems/voice-input.zh.md | 8 +- .../api-speech-to-text/README.i18n.yaml | 4 +- .../experimental/api-speech-to-text/README.md | 2 + .../api-speech-to-text/README.zh.md | 2 + .../api-speech-to-text/src/index.ts | 5 +- .../tests/controller.spec.ts | 14 +++ .../client-ui-voice-input/README.i18n.yaml | 4 +- .../client-ui-voice-input/README.md | 2 + .../client-ui-voice-input/README.zh.md | 2 + .../src/client/PreparationCard.tsx | 25 +++- .../src/client/VoiceInput.module.css | 5 +- .../src/client/VoiceInput.tsx | 4 +- .../src/client/locales.ts | 16 ++- .../client-ui-voice-input/src/client/mount.ts | 4 +- .../tests/mount.client.spec.ts | 2 + .../tests/preparation.client.spec.tsx | 54 ++++++++ .../README.i18n.yaml | 4 +- .../speech-to-text-sensevoice/README.md | 2 +- .../speech-to-text-sensevoice/README.zh.md | 2 +- .../speech-to-text-sensevoice/src/index.ts | 2 +- .../src/recognizer.ts | 29 +++-- .../tests/worker.spec.ts | 35 ++++++ .../speech-to-text/README.i18n.yaml | 4 +- .../experimental/speech-to-text/README.md | 2 + .../experimental/speech-to-text/README.zh.md | 2 + .../experimental/speech-to-text/src/index.ts | 7 +- .../experimental/speech-to-text/src/types.ts | 15 ++- .../speech-to-text/tests/service.spec.ts | 2 + .../extensions/tool-cordis/src/api-catalog.ts | 16 ++- scripts/gen-cordis-catalog.ts | 1 + 36 files changed, 346 insertions(+), 105 deletions(-) create mode 100644 apps/web/tests/expected/voice-source-auto.expected.md create mode 100644 apps/web/tests/expected/voice-source-manual.expected.md diff --git a/apps/web/tests/expected/voice-source-auto.expected.md b/apps/web/tests/expected/voice-source-auto.expected.md new file mode 100644 index 0000000000..a64c41e080 --- /dev/null +++ b/apps/web/tests/expected/voice-source-auto.expected.md @@ -0,0 +1,19 @@ +- strong: SenseVoiceSmall (INT8) +- paragraph: Local models will be downloaded to the machine running DSH. No Python or compiler is required. +- term: Disk space +- definition: Allow about 1 GB for models, runtime, and download caches +- term: Memory +- definition: About 1 GB with the model loaded; recognition may use more +- term: First setup +- definition: Allow roughly 1–10 minutes, depending on the network and machine +- text: These are estimates; slow networks may take longer. Downloads are reused; idle models release memory by default. +- button "First use downloads the local recognition models.": + - text: First use downloads the local recognition models. + - status +- text: Model download source +- combobox "Model download source": + - option "Automatic (recommended)" [selected] + - option "Hugging Face" + - option "HF-Mirror (China mirror)" +- text: Prefer the first responding source and try another if a download fails. +- button "Download and prepare" diff --git a/apps/web/tests/expected/voice-source-manual.expected.md b/apps/web/tests/expected/voice-source-manual.expected.md new file mode 100644 index 0000000000..1867a5bb80 --- /dev/null +++ b/apps/web/tests/expected/voice-source-manual.expected.md @@ -0,0 +1,19 @@ +- strong: SenseVoiceSmall (INT8) +- paragraph: Local models will be downloaded to the machine running DSH. No Python or compiler is required. +- term: Disk space +- definition: Allow about 1 GB for models, runtime, and download caches +- term: Memory +- definition: About 1 GB with the model loaded; recognition may use more +- term: First setup +- definition: Allow roughly 1–10 minutes, depending on the network and machine +- text: These are estimates; slow networks may take longer. Downloads are reused; idle models release memory by default. +- button "First use downloads the local recognition models.": + - text: First use downloads the local recognition models. + - status +- text: Model download source +- combobox "Model download source": + - option "Automatic (recommended)" + - option "Hugging Face" + - option "HF-Mirror (China mirror)" [selected] +- text: Download only from the selected source. Verified downloaded files are reused. +- button "Download and prepare" diff --git a/apps/web/tests/voice-download.e2e.ts b/apps/web/tests/voice-download.e2e.ts index c9651f1b02..0acd3489bc 100644 --- a/apps/web/tests/voice-download.e2e.ts +++ b/apps/web/tests/voice-download.e2e.ts @@ -45,7 +45,7 @@ it('shows the failed asset, actual download source and recovery advice, then ret await page.getByRole('button', { name: 'Plugins', exact: true }).click() await page.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-voice-input-bundle"]').getByRole('button').click() await page.getByRole('button', { name: 'Download and prepare', exact: true }).click() - const alert = page.getByRole('alert').filter({ hasText: 'Cannot download model.int8.onnx' }) + const alert = page.getByRole('alert') await alert.waitFor() expect(await alert.textContent()).toContain('HTTP 503') expect(await alert.textContent()).toContain(`Download source: ${origin}`) @@ -60,59 +60,65 @@ it('shows the failed asset, actual download source and recovery advice, then ret expect(tripwire.pageErrors).toEqual([]) }) -it.each([0, 1])('starts at responsive source %s and reports the fallback source through the real preparation UI', async (winner) => { - const root = await mkdtemp(join(tmpdir(), 'dsh-voice-mirrors-')) - onTestFinished(async () => { await rm(root, { recursive: true, force: true }) }) - const resources: { scaffold?: WebScaffold; browser?: Browser } = {} - const probes = new Map(), downloads: number[] = [], requestedPaths: string[] = [] - const servers = [0, 1].map(index => createServer((request, response) => { - requestedPaths.push(request.url!) - if (request.method === 'HEAD') { - probes.set(index, response) - // Release the winner only after both real Host requests overlap. - if (probes.size === 2) { const selected = probes.get(winner)!; selected.writeHead(200); selected.end() } - } else { - downloads.push(index) - response.writeHead(index === winner ? 503 : 502); response.end() - } - })) - onTestFinished(async () => { - try { await resources.browser?.close() } finally { - try { await resources.scaffold?.close() } finally { - await Promise.all(servers.map(async (server) => { - const closed = new Promise((resolve, reject) => { server.close((error) => { if (error) reject(error); else resolve() }) }) - server.closeAllConnections(); await closed - })) +it.each([{ winner: 0, manual: false }, { winner: 1, manual: false }, { winner: 0, manual: true }, { winner: 1, manual: true }])( + 'uses source $winner with manual selection $manual through the real preparation UI', async ({ winner, manual }) => { + const root = await mkdtemp(join(tmpdir(), 'dsh-voice-mirrors-')) + onTestFinished(async () => { await rm(root, { recursive: true, force: true }) }) + const resources: { scaffold?: WebScaffold; browser?: Browser } = {} + const probes = new Map(), downloads: number[] = [], requestedPaths: string[] = [] + const servers = [0, 1].map(index => createServer((request, response) => { + requestedPaths.push(request.url!) + if (request.method === 'HEAD') { + probes.set(index, response) + // Release the winner only after both real Host requests overlap. + if (probes.size === 2) { const selected = probes.get(winner)!; selected.writeHead(200); selected.end() } + } else { + downloads.push(index) + response.writeHead(index === winner ? 503 : 502); response.end() } - } + })) + onTestFinished(async () => { + try { await resources.browser?.close() } finally { + try { await resources.scaffold?.close() } finally { + await Promise.all(servers.map(async (server) => { + const closed = new Promise((resolve, reject) => { server.close((error) => { if (error) reject(error); else resolve() }) }) + server.closeAllConnections(); await closed + })) + } + } + }) + const origins = await Promise.all(servers.map(async (server) => { + server.listen(0, '127.0.0.1'); await once(server, 'listening') + const address = server.address() + if (!address || typeof address === 'string') throw new Error('Expected a loopback listener') + return `http://127.0.0.1:${address.port}` + })) + const overlay = join(root, 'voice.patch.yml') + await writeFile(overlay, `- id: speech-to-text-sensevoice\n config: ${JSON.stringify({ + dataRoot: join(root, 'models'), modelOrigins: origins, modelProbeTimeoutMs: 10_000, + })}\n`) + const scaffold = await launchWebScaffold({ profile: { packages: [{ dir: bundle, enabled: true }] }, extraOverlayPath: overlay }) + resources.scaffold = scaffold + const browser = await chromium.launch(); resources.browser = browser + const page = await newEnglishPage(browser), tripwire = watchConsole(page) + await page.goto(scaffold.authenticatedUrl) + await page.getByRole('button', { name: 'Plugins', exact: true }).click() + await page.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-voice-input-bundle"]').getByRole('button').click() + const picker = page.getByLabel('Model download source', { exact: true }) + await picker.waitFor() + if (manual) await picker.selectOption(origins[winner]!) + await page.getByRole('button', { name: 'Download and prepare', exact: true }).click() + const alert = page.getByRole('alert') + await alert.waitFor() + expect(downloads).toEqual(manual ? [winner] : [winner, 1 - winner]) + expect(requestedPaths).toHaveLength(manual ? 1 : 4) + expect(requestedPaths.every(path => path === '/csukuangfj/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/resolve/2365baeacb507f821a0c8120fcee3d484dba7a07/model.int8.onnx')).toBe(true) + const failedOrigin = origins[manual ? winner : 1 - winner]! + expect(await picker.inputValue()).toBe(manual ? origins[winner] : '') + expect(await alert.textContent()).toContain(manual ? 'HTTP 503' : 'HTTP 502') + expect(await alert.textContent()).toContain(`Download source: ${failedOrigin}`) + await compareOrRefreshGolden(manual ? expected : fileURLToPath(new URL('./expected/voice-download-fallback.expected.md', import.meta.url)), + (await captureStableAria(page, '[role="alert"]', scaffold.workspaceCwd)).replaceAll(failedOrigin, manual ? 'https://model-mirror.example' : 'https://fallback-model-source.example'), + webSnapshotMode()) + expect(tripwire.pageErrors).toEqual([]) }) - const origins = await Promise.all(servers.map(async (server) => { - server.listen(0, '127.0.0.1'); await once(server, 'listening') - const address = server.address() - if (!address || typeof address === 'string') throw new Error('Expected a loopback listener') - return `http://127.0.0.1:${address.port}` - })) - const overlay = join(root, 'voice.patch.yml') - await writeFile(overlay, `- id: speech-to-text-sensevoice\n config: ${JSON.stringify({ - dataRoot: join(root, 'models'), modelOrigins: origins, modelProbeTimeoutMs: 10_000, - })}\n`) - const scaffold = await launchWebScaffold({ profile: { packages: [{ dir: bundle, enabled: true }] }, extraOverlayPath: overlay }) - resources.scaffold = scaffold - const browser = await chromium.launch(); resources.browser = browser - const page = await newEnglishPage(browser), tripwire = watchConsole(page) - await page.goto(scaffold.authenticatedUrl) - await page.getByRole('button', { name: 'Plugins', exact: true }).click() - await page.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-voice-input-bundle"]').getByRole('button').click() - await page.getByRole('button', { name: 'Download and prepare', exact: true }).click() - const alert = page.getByRole('alert').filter({ hasText: 'Cannot download model.int8.onnx' }) - await alert.waitFor() - expect(downloads).toEqual([winner, 1 - winner]) - expect(requestedPaths).toHaveLength(4) - expect(requestedPaths.every(path => path === '/csukuangfj/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-2024-07-17/resolve/2365baeacb507f821a0c8120fcee3d484dba7a07/model.int8.onnx')).toBe(true) - expect(await alert.textContent()).toContain('HTTP 502') - expect(await alert.textContent()).toContain(`Download source: ${origins[1 - winner]}`) - await compareOrRefreshGolden(fileURLToPath(new URL('./expected/voice-download-fallback.expected.md', import.meta.url)), - (await captureStableAria(page, '[role="alert"]', scaffold.workspaceCwd)).replaceAll(origins[1 - winner]!, 'https://fallback-model-source.example'), - webSnapshotMode()) - expect(tripwire.pageErrors).toEqual([]) -}) diff --git a/apps/web/tests/voice-setup.e2e.ts b/apps/web/tests/voice-setup.e2e.ts index 93eb86b5c5..0d594f59e0 100644 --- a/apps/web/tests/voice-setup.e2e.ts +++ b/apps/web/tests/voice-setup.e2e.ts @@ -40,5 +40,14 @@ it('guides a newly enabled voice plugin to installation and lets the user postpo await page.getByRole('button', { name: 'Download and prepare', exact: true }).waitFor() expect(await dialog.count()).toBe(0) expect(await page.getByText('Local models will be downloaded to the machine running DSH. No Python or compiler is required.', { exact: true }).count()).toBe(1) + expect(await page.getByText('Audio is recognized on the machine running DSH. If models need downloading, that machine must be able to reach the selected source and its file services. Configure a proxy on that machine if needed.', { exact: true }).count()).toBe(1) + const source = page.getByLabel('Model download source', { exact: true }) + expect(await source.inputValue()).toBe('') + expect(await source.getByRole('option').allTextContents()).toEqual(['Automatic (recommended)', 'Hugging Face', 'HF-Mirror (China mirror)']) + await compareOrRefreshGolden(fileURLToPath(new URL('./expected/voice-source-auto.expected.md', import.meta.url)), + await captureStableAria(page, '[data-speech-provider]', scaffold.workspaceCwd), webSnapshotMode()) + await source.selectOption('https://hf-mirror.com') + await compareOrRefreshGolden(fileURLToPath(new URL('./expected/voice-source-manual.expected.md', import.meta.url)), + await captureStableAria(page, '[data-speech-provider]', scaffold.workspaceCwd), webSnapshotMode()) expect(tripwire.pageErrors).toEqual([]) }) diff --git a/docs/subsystems/voice-input.i18n.yaml b/docs/subsystems/voice-input.i18n.yaml index c1b12085c1..c26921adf8 100644 --- a/docs/subsystems/voice-input.i18n.yaml +++ b/docs/subsystems/voice-input.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/voice-input.md -voice-input.md: 1c128b268c8fbbcabc13f4ca52daaa62534a6366 -voice-input.zh.md: 5ce0626f4dc769cb12a842b7ad296eb915cb94ea +voice-input.md: 1d85e8226afddad187533cfe5b14b6750d46c158 +voice-input.zh.md: 78a70ab9c265df86c1d99aa863a4be0ae1abbd9e diff --git a/docs/subsystems/voice-input.md b/docs/subsystems/voice-input.md index 1c128b268c..1d85e8226a 100644 --- a/docs/subsystems/voice-input.md +++ b/docs/subsystems/voice-input.md @@ -18,6 +18,8 @@ The input facade captures a revision-bearing selection before recording. `InputA ## Preparation and settings +`SpeechProviderInfo.downloadSources` advertises preparation origins. `SpeechPreparationOptions.downloadSource` selects one for a task; omission preserves provider policy. SenseVoice validates the advertised choice, pins a manual source without fallback, and rejects source changes during active preparation. The UI keeps a choice for retries in the current card; it is not a persisted recognition preference. + The Host provider owns one preparation task across page and Session changes. The Client shares one `follow()` subscription across the composer, setup prompt and bundle details. Optional `SpeechSetupEstimate` metadata supplies provider-specific planning hints, separate from measured progress. `SpeechPreparationStepKind` identifies ordered resource operations; `SpeechPreparationStep` records each status and start time. The complete `SpeechPreparationState` retains these steps after cancellation or failure. The collapsed UI shows the current operation; expanding lists all steps, with byte progress or elapsed time only for the running step. Closing an observer never cancels preparation. Verified files survive retries and idle worker reclamation. Failed preparation can include `SpeechDownloadFailure` with the asset, source origin, classified reason and optional diagnostic code or HTTP status. The Client localizes recovery advice; raw download causes remain on the Host. @@ -66,8 +68,9 @@ Speech calls never activate or submit to an Agent. /** * Start or join one Host-owned preparation task. * @param providerId - selected recognizer. + * @param options - task-local source selection validated by the provider. */ -@Remote prepare(providerId: SpeechProviderId): void +@Remote prepare(providerId: SpeechProviderId, options?: SpeechPreparationOptions): void /** * Explicitly cancel resource preparation. @@ -130,8 +133,9 @@ async configure(patch: SpeechSelectionPatch): Promise /** * Start or join provider-owned preparation. * @param id - exact registered provider identity. + * @param options - task-local source selection validated by the provider. */ -prepare(id: SpeechProviderId): void +prepare(id: SpeechProviderId, options?: SpeechPreparationOptions): void /** * Explicitly cancel provider preparation without tying it to a browser connection. diff --git a/docs/subsystems/voice-input.zh.md b/docs/subsystems/voice-input.zh.md index 5ce0626f4d..78a70ab9c2 100644 --- a/docs/subsystems/voice-input.zh.md +++ b/docs/subsystems/voice-input.zh.md @@ -18,6 +18,8 @@ ## 准备与设置 +`SpeechProviderInfo.downloadSources` 公布准备阶段的源。`SpeechPreparationOptions.downloadSource` 为单次任务选择一个源;省略时保留提供方策略。SenseVoice 校验公布的选项,固定使用手动指定的源而不回退,并拒绝在准备期间改源。UI 为当前卡片中的重试保留选择,但不会将其保存为识别偏好。 + Host Provider 在页面和 Session 变化期间拥有同一个准备任务。Client 在输入框、安装引导弹窗、Bundle 详情之间共享一份 `follow()` 订阅。可选 `SpeechSetupEstimate` 元数据提供各 Provider 的资源预期,与实测进度分开。`SpeechPreparationStepKind` 标识有序资源操作;`SpeechPreparationStep` 记录各步骤状态与开始时间。完整 `SpeechPreparationState` 在取消或失败后保留这些步骤。折叠 UI 显示当前操作,展开后列出所有步骤,仅进行中步骤显示字节进度或等待时间。关闭观察者不会取消准备。已校验文件在重试及空闲进程回收后继续复用。 准备失败时可包含 `SpeechDownloadFailure`,提供文件、下载源、原因分类以及可选错误码或 HTTP 状态。Client 将恢复建议本地化;原始下载错误留在 Host。 @@ -66,8 +68,9 @@ Speech calls never activate or submit to an Agent. /** * Start or join one Host-owned preparation task. * @param providerId - selected recognizer. + * @param options - task-local source selection validated by the provider. */ -@Remote prepare(providerId: SpeechProviderId): void +@Remote prepare(providerId: SpeechProviderId, options?: SpeechPreparationOptions): void /** * Explicitly cancel resource preparation. @@ -130,8 +133,9 @@ async configure(patch: SpeechSelectionPatch): Promise /** * Start or join provider-owned preparation. * @param id - exact registered provider identity. + * @param options - task-local source selection validated by the provider. */ -prepare(id: SpeechProviderId): void +prepare(id: SpeechProviderId, options?: SpeechPreparationOptions): void /** * Explicitly cancel provider preparation without tying it to a browser connection. diff --git a/packages/experimental/api-speech-to-text/README.i18n.yaml b/packages/experimental/api-speech-to-text/README.i18n.yaml index 54e9523ced..454b3e5dc8 100644 --- a/packages/experimental/api-speech-to-text/README.i18n.yaml +++ b/packages/experimental/api-speech-to-text/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/experimental/api-speech-to-text/README.md -README.md: ecc83c15b4217323c074733ae77259261598803c -README.zh.md: 46ac6a16c902c32f2effb23a98141b1afbdccd37 +README.md: 113c1f94459329051182ab2503b5220ffa9ad50b +README.zh.md: bc853bd00da978a42d56dcbefcd98109efc78491 diff --git a/packages/experimental/api-speech-to-text/README.md b/packages/experimental/api-speech-to-text/README.md index ecc83c15b4..113c1f9445 100644 --- a/packages/experimental/api-speech-to-text/README.md +++ b/packages/experimental/api-speech-to-text/README.md @@ -27,6 +27,8 @@ The `speech` Remote connects browser recordings to `ctx.speechToText`. It expose Compose with the speech Service Definition and Typert. `maxAudioBytes` and `maxDurationSeconds` limit accepted recordings. The browser UI mounts this package’s generated `/remote` contribution when enabled. +`prepare(providerId, { downloadSource })` forwards one advertised source to the provider; omission keeps its configured policy. The catalog carries `downloadSources` for the picker. The provider rejects unavailable choices and changes to an active task’s source. + ----- diff --git a/packages/experimental/api-speech-to-text/README.zh.md b/packages/experimental/api-speech-to-text/README.zh.md index 46ac6a16c9..bc853bd00d 100644 --- a/packages/experimental/api-speech-to-text/README.zh.md +++ b/packages/experimental/api-speech-to-text/README.zh.md @@ -27,6 +27,8 @@ kind: "package-reference" 与语音服务定义和 Typert 组合。`maxAudioBytes` 与 `maxDurationSeconds` 限制接收的录音。浏览器 UI 启用时挂载本包生成的 `/remote` 贡献。 +`prepare(providerId, { downloadSource })` 将公布的一个下载源转发给提供方,省略时保留其配置策略。目录通过 `downloadSources` 提供选择器选项。提供方拒绝不可用的源,以及对进行中任务的源变更。 + ----- diff --git a/packages/experimental/api-speech-to-text/src/index.ts b/packages/experimental/api-speech-to-text/src/index.ts index ce53084e4b..4d19d7c5af 100644 --- a/packages/experimental/api-speech-to-text/src/index.ts +++ b/packages/experimental/api-speech-to-text/src/index.ts @@ -3,7 +3,7 @@ import { Context } from '@deepseek-ai/cordis' import z from '@deepseek-ai/schemastery' import { Remote, RemoteError, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol' import type {} from '@deepseek-ai/dsh-experimental-speech-to-text' -import type { SpeechProviderId, SpeechSelectionPatch, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' +import type { SpeechPreparationOptions, SpeechProviderId, SpeechSelectionPatch, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' import type { SpeechCatalog, TranscriptionRequest } from './types.ts' import { validateWave } from '@deepseek-ai/dsh-experimental-speech-to-text/wave' @@ -66,9 +66,10 @@ export default class SpeechController extends TypertRemoteService { /** * Start or join one Host-owned preparation task. * @param providerId - selected recognizer. + * @param options - task-local source selection validated by the provider. */ @Remote - prepare(providerId: SpeechProviderId): void { this.ctx.speechToText.prepare(providerId) } + prepare(providerId: SpeechProviderId, options?: SpeechPreparationOptions): void { this.ctx.speechToText.prepare(providerId, options) } /** * Explicitly cancel resource preparation. diff --git a/packages/experimental/api-speech-to-text/tests/controller.spec.ts b/packages/experimental/api-speech-to-text/tests/controller.spec.ts index 0cf59f5449..caa2145ea2 100644 --- a/packages/experimental/api-speech-to-text/tests/controller.spec.ts +++ b/packages/experimental/api-speech-to-text/tests/controller.spec.ts @@ -39,6 +39,20 @@ it('lists limits without inference and forwards explicit provider and language', expect(recognize).toHaveBeenLastCalledWith(expect.objectContaining({ language: 'auto' }), expect.any(AbortSignal)) }) +it('forwards an explicit download source to the registered preparation owner', async () => { + const ctx = new Context(); roots.push(ctx) + const speech = new SpeechToText(ctx, SpeechToText.Config({ defaultProvider: id })) + const prepare = vi.fn() + speech.register({ info: { id, name: 'local', location: 'host-local', languages: ['auto'], downloadSources: ['https://hf-mirror.com'] }, + preparation: { snapshot: () => ({ phase: 'unprepared' }), subscribe: () => () => {}, prepare, cancel: async () => {} }, + transcribe: async () => ({ text: '', audioSeconds: 0, inferenceSeconds: 0 }), + }) + const api = new SpeechController(ctx, { maxAudioBytes: 32044, maxDurationSeconds: 1 }) + expect(api.catalog().providers[0]?.downloadSources).toEqual(['https://hf-mirror.com']) + api.prepare(id, { downloadSource: 'https://hf-mirror.com' }) + expect(prepare).toHaveBeenCalledWith({ downloadSource: 'https://hf-mirror.com' }) +}) + it('rejects oversized, noncanonical, malformed and overlong audio without inference', async () => { const { api, recognize } = fixture() for (const audioBase64 of ['x'.repeat(50000), 'AAAA?', '', 'QQ==', recording() + '\n']) { diff --git a/packages/experimental/client-ui-voice-input/README.i18n.yaml b/packages/experimental/client-ui-voice-input/README.i18n.yaml index c81fd5bd73..50b00dd654 100644 --- a/packages/experimental/client-ui-voice-input/README.i18n.yaml +++ b/packages/experimental/client-ui-voice-input/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/experimental/client-ui-voice-input/README.md -README.md: 4d859f4d9837c249c564abfbba0682f1493502d9 -README.zh.md: 84a02e4f620feb35706de5b3bc10ec291f32c423 +README.md: 764962ff496c9fdd91073c2aa391ebceeec23608 +README.zh.md: 105cb641684eb2920c04294e74f1b5389f564c0c diff --git a/packages/experimental/client-ui-voice-input/README.md b/packages/experimental/client-ui-voice-input/README.md index 4d859f4d98..764962ff49 100644 --- a/packages/experimental/client-ui-voice-input/README.md +++ b/packages/experimental/client-ui-voice-input/README.md @@ -27,6 +27,8 @@ This optional browser plugin adds an outline microphone icon between the model s Enable the [voice input bundle](../voice-input-bundle/README.md) from Plugins. After cache inspection, missing models trigger a setup prompt with Go to setup and Later actions. Go to setup opens bundle details; Download and prepare starts installation there. Intact cached models need no prompt or repeated installation. Before preparation, local providers can show their estimated disk, memory and setup-time requirements. The preparation summary starts collapsed; expand it to inspect completed, current and pending steps. Once ready, click the microphone, allow access and click Stop to transcribe. Cancel or Escape discards capture. Recognition feedback stays inside the toolbar. Provider and language preferences are saved from bundle details through the Settings service. Browser microphone access requires HTTPS or loopback and operating-system permission. +Before downloading or retrying, **Model download source** offers Automatic and the origins advertised by the Host. SenseVoice normally offers Hugging Face and HF-Mirror; a fixed private deployment exposes only its configured origin. Manual selection uses only that source, while Automatic preserves the provider’s comparison and fallback policy. The choice is retained for retries in the current card, without changing deployment configuration or recognition preferences. Source controls are unavailable during preparation and hidden when resources are ready. + ----- diff --git a/packages/experimental/client-ui-voice-input/README.zh.md b/packages/experimental/client-ui-voice-input/README.zh.md index 84a02e4f62..105cb64168 100644 --- a/packages/experimental/client-ui-voice-input/README.zh.md +++ b/packages/experimental/client-ui-voice-input/README.zh.md @@ -27,6 +27,8 @@ kind: "package-reference" 在插件管理页启用[语音输入 Bundle](../voice-input-bundle/README.zh.md)。缓存检查后,缺少模型时弹出安装引导,可选择“前往安装”或“稍后”。“前往安装”打开 Bundle 详情,再点击“下载并准备”才开始安装。缓存完整时不弹引导,也无需重复安装。准备前,本地 Provider 可展示磁盘、内存与安装时间的估算。准备摘要默认折叠;展开后可查看已完成、当前和未开始的步骤。就绪后点击麦克风,允许访问,再点击停止以转写。取消或 Escape 丢弃录音。识别反馈留在工具栏内部。Provider 和语言偏好在 Bundle 详情中通过 Settings 服务保存。浏览器麦克风访问需要 HTTPS 或环回地址,以及操作系统权限。 +下载或重试前,**模型下载源**提供自动选择及 Host 公布的源。SenseVoice 默认提供 Hugging Face 和 HF-Mirror;固定私有部署仅显示配置的源。手动选择只使用指定源,自动选择沿用提供方的比较与回退策略。当前卡片中的重试会保留选择,不修改部署配置或识别偏好。准备期间不能改源,资源就绪后隐藏源选择器。 + ----- diff --git a/packages/experimental/client-ui-voice-input/src/client/PreparationCard.tsx b/packages/experimental/client-ui-voice-input/src/client/PreparationCard.tsx index 61a81b4586..e67edfb23f 100644 --- a/packages/experimental/client-ui-voice-input/src/client/PreparationCard.tsx +++ b/packages/experimental/client-ui-voice-input/src/client/PreparationCard.tsx @@ -44,6 +44,11 @@ function PreparationFailure({ state, t }: { state: Extract step.status === 'running' || step.status === 'failed' || step.status === 'cancelled') const preparing = preparationTone(state) === 'ongoing' const startedAt = current?.startedAt ?? ('startedAt' in state ? state.startedAt : undefined) @@ -53,8 +58,9 @@ export function PreparationCard({ provider, connected, prepare, cancelPreparatio return () => { clearInterval(timer) } }, [preparing, startedAt]) const run = async (action: () => Promise): Promise => { - setError('') + setError(''); setSubmitting(true) try { await action() } catch (failure) { setError(failure instanceof Error ? failure.message : String(failure)) } + finally { setSubmitting(false) } } const metric = state.phase === 'downloading' ? byteText(state, t) : preparing && startedAt !== undefined ? t('elapsed', { seconds: String(Math.max(0, Math.floor((now - startedAt) / 1000))) }) : '' @@ -100,10 +106,21 @@ export function PreparationCard({ provider, connected, prepare, cancelPreparatio {!expanded && } {state.phase === 'failed' && } + {canPrepare && sources.length > 0 &&
+ + {t(selectedSource === '' ? 'sourceAutoHelp' : 'sourceManualHelp')} +
}
- {['unprepared', 'cancelled', 'failed'].includes(state.phase) && } - {preparing && state.phase !== 'waking' && } + {preparing && state.phase !== 'waking' && }
{error &&

{t('failed', { message: error })}

} diff --git a/packages/experimental/client-ui-voice-input/src/client/VoiceInput.module.css b/packages/experimental/client-ui-voice-input/src/client/VoiceInput.module.css index 436b2d5286..978295ec8b 100644 --- a/packages/experimental/client-ui-voice-input/src/client/VoiceInput.module.css +++ b/packages/experimental/client-ui-voice-input/src/client/VoiceInput.module.css @@ -25,8 +25,9 @@ .stepProgress { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; } .stepProgress small { font-size: 11px; color: var(--dsw-alias-label-tertiary); overflow-wrap: anywhere; } .preferences { display: grid; gap: 12px; font-size: 13px; margin: 18px 0; } -.preferences label { display: grid; grid-template-columns: 100px minmax(120px, 280px); align-items: center; gap: 12px; } -.preferences select { border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 6px; padding: 6px 10px; background: transparent; color: inherit; font: inherit; } +.preferences label, .sourceChoice label { display: grid; grid-template-columns: 100px minmax(120px, 280px); align-items: center; gap: 12px; } +.preferences select, .sourceChoice select { border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 6px; padding: 6px 10px; background: transparent; color: inherit; font: inherit; } +.sourceChoice { display: grid; gap: 6px; } .preferences p { margin: 0; } .settingsCard { list-style: none; padding: 16px; border: 0.5px solid var(--dsw-alias-border-l1); border-radius: 10px; } .settingsCard > p { font-size: 13px; color: var(--dsw-alias-label-secondary); margin: 8px 0 0; } diff --git a/packages/experimental/client-ui-voice-input/src/client/VoiceInput.tsx b/packages/experimental/client-ui-voice-input/src/client/VoiceInput.tsx index 3610267fe3..dfef2387ee 100644 --- a/packages/experimental/client-ui-voice-input/src/client/VoiceInput.tsx +++ b/packages/experimental/client-ui-voice-input/src/client/VoiceInput.tsx @@ -3,7 +3,7 @@ import { useEffect, useLayoutEffect, useRef, useState } from 'react' import type { HostObservable, InjectFace, PropsLocale, PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots' import type { TokenSpan } from '@deepseek-ai/dsh-client-ui-conversation/client' import type { TranscriptionRequest } from '@deepseek-ai/dsh-experimental-api-speech-to-text/types' -import type { SpeechProviderId, SpeechSelection, SpeechSelectionPatch, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' +import type { SpeechPreparationOptions, SpeechProviderId, SpeechSelection, SpeechSelectionPatch, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol' import { RecordingError, audioBase64, type Recording } from './audio.ts' import type { SpeechReadiness } from './readiness.ts' @@ -17,7 +17,7 @@ export interface VoiceInputActions { /** @returns one microphone operation owned by the plugin lifecycle. */ createRecording: () => Recording transcribe: (request: TranscriptionRequest, signal: AbortSignal) => Promise> - prepare: (providerId: SpeechProviderId) => Promise + prepare: (providerId: SpeechProviderId, options?: SpeechPreparationOptions) => Promise cancelPreparation: (providerId: SpeechProviderId) => Promise configure: (patch: SpeechSelectionPatch) => Promise } diff --git a/packages/experimental/client-ui-voice-input/src/client/locales.ts b/packages/experimental/client-ui-voice-input/src/client/locales.ts index f275ad72d6..4d145cc35d 100644 --- a/packages/experimental/client-ui-voice-input/src/client/locales.ts +++ b/packages/experimental/client-ui-voice-input/src/client/locales.ts @@ -57,6 +57,12 @@ export const zh = { 'downloadAdvice.storage': '请检查运行 DSH 的机器的剩余磁盘空间,以及模型目录的写入权限后重试。', 'downloadAdvice.unknown': '请检查运行 DSH 的机器的网络、磁盘空间和模型目录权限后重试。', downloadSource: '下载来源:{source}', + sourceChoice: '模型下载源', + sourceAuto: '自动选择(推荐)', + sourceHuggingFace: 'Hugging Face', + sourceMirror: 'HF-Mirror(国内镜像)', + sourceAutoHelp: '优先使用响应较快的源,下载失败时自动尝试其他源。', + sourceManualHelp: '仅从所选源下载;已下载并通过校验的文件会复用。', downloadCode: '错误码:{code}', 'reconnecting': '正在连接语音服务…', 'preparation.unprepared': '首次使用需要下载本地识别模型。', @@ -77,7 +83,7 @@ export const zh = { start: '开始录音', stop: '停止并识别', cancel: '取消', insert: '插入文字', loading: '正在读取识别服务…', requesting: '请允许使用麦克风…', recording: '正在录音…', interrupted: '录音中断,请重试。', - local: '音频在运行 DSH 的机器上识别。首次准备默认从 Hugging Face 下载模型,该机器需要能访问 Hugging Face 及其模型下载服务。如需代理,请在该机器上配置。', + local: '音频在运行 DSH 的机器上识别。需要下载模型时,请确保该机器能访问所选下载源及其文件服务。如需代理,请在该机器上配置。', cloud: '音频将发送至所选云端服务。', empty: '未识别到语音', cancelled: '已取消语音输入。', conflict: '草稿已被修改。识别文字已保留,可在当前光标位置插入。', @@ -144,6 +150,12 @@ export const en: Record = { 'downloadAdvice.storage': 'Check available disk space and write permission for the model directory on the machine running DSH, then retry.', 'downloadAdvice.unknown': 'Check the network, disk space and model directory permissions on the machine running DSH, then retry.', downloadSource: 'Download source: {source}', + sourceChoice: 'Model download source', + sourceAuto: 'Automatic (recommended)', + sourceHuggingFace: 'Hugging Face', + sourceMirror: 'HF-Mirror (China mirror)', + sourceAutoHelp: 'Prefer the first responding source and try another if a download fails.', + sourceManualHelp: 'Download only from the selected source. Verified downloaded files are reused.', downloadCode: 'Error code: {code}', 'reconnecting': 'Connecting to speech recognition…', 'preparation.unprepared': 'First use downloads the local recognition models.', @@ -164,7 +176,7 @@ export const en: Record = { start: 'Start recording', stop: 'Stop and transcribe', cancel: 'Cancel', insert: 'Insert text', loading: 'Loading recognition services…', requesting: 'Allow microphone access to continue…', recording: 'Recording…', interrupted: 'Recording was interrupted. Please try again.', - local: 'Audio is recognized on the machine running DSH. First setup downloads models from Hugging Face by default, so that machine must be able to access Hugging Face and its model download services. If a proxy is needed, configure it on that machine.', + local: 'Audio is recognized on the machine running DSH. If models need downloading, that machine must be able to reach the selected source and its file services. Configure a proxy on that machine if needed.', cloud: 'Audio will be sent to the selected cloud service.', empty: 'No speech recognized', cancelled: 'Voice input cancelled.', conflict: 'Your draft changed. The transcript is preserved and can be inserted at the current cursor.', diff --git a/packages/experimental/client-ui-voice-input/src/client/mount.ts b/packages/experimental/client-ui-voice-input/src/client/mount.ts index cff12b511b..a3f0f2c2ae 100644 --- a/packages/experimental/client-ui-voice-input/src/client/mount.ts +++ b/packages/experimental/client-ui-voice-input/src/client/mount.ts @@ -31,7 +31,9 @@ function registerUi(ctx: Context): void { }, transcribe: async (request, signal) => await ctx.remote.speech.transcribe(request, signal), configure: async (patch) => { const result = await ctx.remote.speech.configure(patch); if (!result.ok) throw result.error }, - prepare: async (providerId) => { const result = await ctx.remote.speech.prepare(providerId); if (!result.ok) throw result.error }, + prepare: async (providerId, options) => { + const result = await ctx.remote.speech.prepare(providerId, options); if (!result.ok) throw result.error + }, cancelPreparation: async (providerId) => { const result = await ctx.remote.speech.cancelPreparation(providerId); if (!result.ok) throw result.error }, diff --git a/packages/experimental/client-ui-voice-input/tests/mount.client.spec.ts b/packages/experimental/client-ui-voice-input/tests/mount.client.spec.ts index 6f3904b972..638b5d913b 100644 --- a/packages/experimental/client-ui-voice-input/tests/mount.client.spec.ts +++ b/packages/experimental/client-ui-voice-input/tests/mount.client.spec.ts @@ -77,6 +77,8 @@ it('withdraws its Remote, localized slot and microphone captures on disposal', a const dispose = vi.spyOn(pending, 'dispose') await actions.configure({ language: 'zh' }) await actions.prepare('local' as SpeechProviderId) + await actions.prepare('local' as SpeechProviderId, { downloadSource: 'https://hf-mirror.com' }) + expect(b.prepare).toHaveBeenLastCalledWith('local', { downloadSource: 'https://hf-mirror.com' }) await actions.cancelPreparation('local' as SpeechProviderId) for (const slot of ['plugins.bundle.config', 'plugins.bundle.activation'] as const) { const item = b.ctx.slots.entries(slot)[0]! diff --git a/packages/experimental/client-ui-voice-input/tests/preparation.client.spec.tsx b/packages/experimental/client-ui-voice-input/tests/preparation.client.spec.tsx index 759bb1f994..d3b9a22ac9 100644 --- a/packages/experimental/client-ui-voice-input/tests/preparation.client.spec.tsx +++ b/packages/experimental/client-ui-voice-input/tests/preparation.client.spec.tsx @@ -70,6 +70,7 @@ it('starts preparation and offers retry without showing progress for completed o expect(b.prepare).toHaveBeenCalledWith(id) b.rerender() + await waitFor(() => { expect(screen.getByRole('button', { name: zh.retryPrepare }).disabled).toBe(false) }) b.prepare.mockRejectedValueOnce(new Error('offline')) fireEvent.click(screen.getByRole('button', { name: zh.retryPrepare })) await screen.findByText('语音识别失败:offline') @@ -155,3 +156,56 @@ it('shows provider-specific installation estimates before preparation and remove b.rerender() expect(screen.queryByText(zh['setup.local'])).toBeNull() }) + +it('offers Host sources, submits a manual choice, and retains it for retry', async () => { + const b = fixture({ phase: 'unprepared' }) + const provider = { ...b.props.provider, downloadSources: ['https://huggingface.co', 'https://hf-mirror.com'] } + b.rerender() + const picker = screen.getByLabelText(zh.sourceChoice) + expect(picker.value).toBe('') + expect(within(picker).getAllByRole('option').map(option => option.textContent)).toEqual([zh.sourceAuto, zh.sourceHuggingFace, zh.sourceMirror]) + expect(screen.getByText(zh.sourceAutoHelp)).toBeTruthy() + fireEvent.change(picker, { target: { value: 'https://hf-mirror.com' } }) + expect(screen.getByText(zh.sourceManualHelp)).toBeTruthy() + fireEvent.click(screen.getByRole('button', { name: zh.prepare })) + await waitFor(() => { expect(b.prepare).toHaveBeenCalledWith(id, { downloadSource: 'https://hf-mirror.com' }) }) + b.rerender() + expect(screen.getByLabelText(zh.sourceChoice).value).toBe('https://hf-mirror.com') + fireEvent.change(picker, { target: { value: 'https://huggingface.co' } }) + fireEvent.click(screen.getByRole('button', { name: zh.retryPrepare })) + await waitFor(() => { expect(b.prepare).toHaveBeenLastCalledWith(id, { downloadSource: 'https://huggingface.co' }) }) + fireEvent.change(picker, { target: { value: '' } }) + fireEvent.click(screen.getByRole('button', { name: zh.retryPrepare })) + await waitFor(() => { expect(b.prepare).toHaveBeenLastCalledWith(id) }) +}) + +it('respects a fixed private source and removes a choice that the Host withdraws', async () => { + const b = fixture({ phase: 'unprepared' }) + b.rerender() + fireEvent.change(screen.getByLabelText(zh.sourceChoice), { target: { value: 'https://hf-mirror.com' } }) + b.rerender() + const picker = screen.getByLabelText(zh.sourceChoice) + expect(picker.value).toBe('https://private.example') + expect(picker.disabled).toBe(true) + expect(within(picker).getAllByRole('option')).toHaveLength(1) + fireEvent.click(screen.getByRole('button', { name: zh.prepare })) + await waitFor(() => { expect(b.prepare).toHaveBeenCalledWith(id, { downloadSource: 'https://private.example' }) }) + b.rerender() + expect(screen.queryByLabelText(zh.sourceChoice)).toBeNull() +}) + +it('locks source changes while a preparation request is pending and hides them during active work', async () => { + const b = fixture({ phase: 'unprepared' }), pending = Promise.withResolvers() + b.prepare.mockImplementation(async () => { await pending.promise }) + const provider = { ...b.props.provider, downloadSources: ['https://huggingface.co', 'https://hf-mirror.com'] } + b.rerender() + fireEvent.click(screen.getByRole('button', { name: zh.prepare })) + try { + expect(screen.getByLabelText(zh.sourceChoice).disabled).toBe(true) + expect(screen.getByRole('button', { name: zh.prepare }).disabled).toBe(true) + } finally { await act(async () => { pending.resolve(undefined); await pending.promise }) } + b.rerender() + expect(screen.getByLabelText(zh.sourceChoice).disabled).toBe(true) + b.rerender() + expect(screen.queryByLabelText(zh.sourceChoice)).toBeNull() +}) diff --git a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml b/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml index 7c78c1a4a6..017646ce74 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.i18n.yaml +++ b/packages/experimental/speech-to-text-sensevoice/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/experimental/speech-to-text-sensevoice/README.md -README.md: 2dd4fe5f93248c4fde4752adbec19039afecd85c -README.zh.md: 570c343a8fef2834a8a0d00e07f3513e1d28fdb7 +README.md: 3d553d2a235346e8d51bf9c8c137bc824b0f3d48 +README.zh.md: e4ab23cc48df0d93431eb22f6c17afcebfd78916 diff --git a/packages/experimental/speech-to-text-sensevoice/README.md b/packages/experimental/speech-to-text-sensevoice/README.md index 2dd4fe5f93..3d553d2a23 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.md +++ b/packages/experimental/speech-to-text-sensevoice/README.md @@ -29,7 +29,7 @@ The [bundle](../voice-input-bundle/README.md) supplies an absolute `dataRoot` un Before each missing asset is downloaded, the Host compares the Hugging Face-compatible `modelOrigins`, which default to `https://huggingface.co` and [HF-Mirror](https://hf-mirror.com). Concurrent HEAD requests follow the pinned file path and redirects through the Host's fetch proxy; the first 2xx response is tried first. `modelProbeTimeoutMs` defaults to 3000 ms; when every probe fails, downloads use the configured order. Network, HTTP, certificate and integrity failures try the remaining sources; cancellation, storage failures and unclassified failures stop preparation. Pinned revisions, sizes and SHA-256 hashes apply to every source. Response latency does not measure download throughput; the preparation deadline still bounds the complete download. -An explicit `modelOrigin` uses only that origin, without probing or public fallback. A single-entry `modelOrigins` also skips probing. Verified caches and explicit offline paths require no source requests. Source selection adds no picker to the voice UI; preparation retains its progress and failure display. +An explicit `modelOrigin` uses only that origin, without probing or public fallback. A single-entry `modelOrigins` also skips probing. Verified caches and explicit offline paths require no source requests. The voice UI offers the advertised sources before preparation or retry. A manual choice overrides selection for that task only, uses one source without fallback, and cannot replace an active task’s source. The Host rejects choices outside its configured origins; fully offline deployments advertise no download sources. Download failures identify the asset and source origin, with a classified cause and HTTP status or diagnostic code when available. The public state omits URL credentials, query strings and raw cause messages. Retry reuses verified files; partial downloads restart. diff --git a/packages/experimental/speech-to-text-sensevoice/README.zh.md b/packages/experimental/speech-to-text-sensevoice/README.zh.md index 570c343a8f..e4ab23cc48 100644 --- a/packages/experimental/speech-to-text-sensevoice/README.zh.md +++ b/packages/experimental/speech-to-text-sensevoice/README.zh.md @@ -29,7 +29,7 @@ kind: "package-reference" 下载每个缺失文件前,Host 会比较兼容 Hugging Face 的 `modelOrigins`,默认为 `https://huggingface.co` 和 [HF-Mirror](https://hf-mirror.com)。并发 HEAD 请求沿用固定文件路径,通过 Host 的 fetch 代理跟随重定向,先返回 2xx 的源优先下载。`modelProbeTimeoutMs` 默认为 3000 毫秒;所有探测均失败时按配置顺序下载。网络、HTTP、证书或完整性校验失败会尝试其他源;取消、存储错误和未分类错误会停止准备。所有源都必须符合固定修订、大小和 SHA-256 校验值。响应延迟不代表下载吞吐量,完整下载仍受准备阶段的总超时约束。 -显式 `modelOrigin` 仅使用指定源,不探测也不回退到公共源。只有一个地址的 `modelOrigins` 同样跳过探测。已校验的缓存和显式离线路径无需请求下载源。语音 UI 不新增源选择器,准备流程继续显示进度和失败原因。 +显式 `modelOrigin` 仅使用指定源,不探测也不回退到公共源。只有一个地址的 `modelOrigins` 同样跳过探测。已校验的缓存和显式离线路径无需请求下载源。语音 UI 在准备或重试前提供已公布的下载源。手动选择仅覆盖本次任务,只使用指定源而不回退,且不能替换进行中任务的源。Host 拒绝配置之外的源;完全离线部署不公布下载源。 下载失败会标明文件与下载源,并提供原因分类,以及可用的 HTTP 状态或错误码。公开状态不包含 URL 凭据、查询参数和原始底层错误消息。重试复用已校验文件,未完成的文件重新下载。 diff --git a/packages/experimental/speech-to-text-sensevoice/src/index.ts b/packages/experimental/speech-to-text-sensevoice/src/index.ts index 461ef415c2..f714a022c7 100644 --- a/packages/experimental/speech-to-text-sensevoice/src/index.ts +++ b/packages/experimental/speech-to-text-sensevoice/src/index.ts @@ -26,7 +26,7 @@ export function apply(ctx: Context, config: Config): void { const estimatedBytes = config.precision === 'int8' ? 1_000_000_000 : 2_000_000_000 ctx.effect(() => { const unregister = ctx.speechToText.register({ - info: { id: config.providerId as SpeechProviderId, name: `SenseVoiceSmall (${config.precision.toUpperCase()})`, location: 'host-local', languages, + info: { id: config.providerId as SpeechProviderId, name: `SenseVoiceSmall (${config.precision.toUpperCase()})`, location: 'host-local', languages, downloadSources: worker.downloadSources, setupEstimate: { recommendedDiskBytes: estimatedBytes, expectedMemoryBytes: estimatedBytes, minimumMinutes: 1, maximumMinutes: 10 } }, preparation: worker, diff --git a/packages/experimental/speech-to-text-sensevoice/src/recognizer.ts b/packages/experimental/speech-to-text-sensevoice/src/recognizer.ts index fefd02acac..a74e204b6d 100644 --- a/packages/experimental/speech-to-text-sensevoice/src/recognizer.ts +++ b/packages/experimental/speech-to-text-sensevoice/src/recognizer.ts @@ -3,7 +3,7 @@ import { randomBytes } from 'node:crypto' import { mkdir } from 'node:fs/promises' import type { Context } from '@deepseek-ai/cordis' import type { SubprocessHandle } from '@deepseek-ai/dsh-subprocess' -import type { SpeechInput, SpeechPreparationState, SpeechPreparationStep, SpeechPreparationStepKind, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' +import type { SpeechPreparationOptions, SpeechInput, SpeechPreparationState, SpeechPreparationStep, SpeechPreparationStepKind, Transcript } from '@deepseek-ai/dsh-experimental-speech-to-text/types' import { deadline } from '@deepseek-ai/dsh-timeout' import { z } from 'zod' import type { Config } from './config.ts' @@ -109,9 +109,13 @@ export class SenseVoiceWorker { private state: SpeechPreparationState & { readonly steps: readonly SpeechPreparationStep[] } private readonly listeners = new Set<() => void>() private lastProgressAt = 0 - private preparing: { abort: AbortController; settled: Promise; completed: boolean } | undefined + /** Configured origins available for explicit downloads; offline deployments expose no choices. */ + readonly downloadSources: readonly string[] + private preparing: { abort: AbortController; settled: Promise; completed: boolean; downloadSource: string | undefined } | undefined constructor(private readonly ctx: Context, private readonly config: Config) { + this.downloadSources = config.modelDirectory !== undefined && config.vadModelPath !== undefined ? [] + : [...new Set((config.modelOrigin === undefined ? config.modelOrigins : [config.modelOrigin]).map(origin => new URL(origin).origin))] const kinds: SpeechPreparationStepKind[] = ['check'] if (config.modelDirectory === undefined) kinds.push('model') if (config.vadModelPath === undefined) kinds.push('vad') @@ -172,16 +176,23 @@ export class SenseVoiceWorker { }) } - /** Start one Host-owned preparation task; repeated callers join it. */ - prepare(): void { - this.runPreparation(async (signal) => { await this.start(signal) }) + /** + * Start or join one Host-owned preparation task with a fixed download source. + * @param options - omitted source uses deployment policy; a manual source must be advertised and disables fallback. + */ + prepare(options: SpeechPreparationOptions = {}): void { + const source = options.downloadSource + if (source !== undefined && !this.downloadSources.includes(source)) throw new Error('Speech download source is unavailable') + const config = source === undefined ? this.config : Object.assign({}, this.config, { modelOrigin: source }) + this.runPreparation(async (signal) => { await this.start(signal, config) }, source) } - private runPreparation(run: (signal: AbortSignal) => Promise): void { + private runPreparation(run: (signal: AbortSignal) => Promise, downloadSource?: string): void { + if (this.preparing && this.preparing.downloadSource !== downloadSource) throw new Error('Cancel preparation before changing its download source') if (this.preparing || this.worker) return this.lifetime.signal.throwIfAborted() const abort = new AbortController() - const task = { abort, settled: Promise.resolve(), completed: false } + const task = { abort, settled: Promise.resolve(), completed: false, downloadSource } this.preparing = task task.settled = this.enqueue(run, abort.signal) .catch((error: unknown) => { @@ -236,13 +247,13 @@ export class SenseVoiceWorker { return await job } - private async start(signal: AbortSignal): Promise { + private async start(signal: AbortSignal, preparationConfig: Config = this.config): Promise { if (this.worker?.closed) await this.stop() if (this.worker) return this.worker using setup = deadline(signal, this.config.prepareTimeoutMs, 'SPEECH_PREPARE_TIMEOUT') const cached = this.runtime !== undefined if (!cached) this.publish({ phase: 'checking', step: 'check', startedAt: Date.now() }) - const runtime = this.runtime ?? await prepareRuntime(this.ctx, this.config, setup.signal, (state) => { this.publish(state) }) + const runtime = this.runtime ?? await prepareRuntime(this.ctx, preparationConfig, setup.signal, (state) => { this.publish(state) }) this.runtime = runtime setup.signal.throwIfAborted() this.publish({ phase: cached ? 'waking' : 'loading', step: 'load', startedAt: Date.now() }) diff --git a/packages/experimental/speech-to-text-sensevoice/tests/worker.spec.ts b/packages/experimental/speech-to-text-sensevoice/tests/worker.spec.ts index 48313474d6..5ee007e489 100644 --- a/packages/experimental/speech-to-text-sensevoice/tests/worker.spec.ts +++ b/packages/experimental/speech-to-text-sensevoice/tests/worker.spec.ts @@ -63,6 +63,41 @@ it('keeps one worker warm across recordings and joins its exit on disposal', asy await expect(worker.transcribe({ audio, language: 'en' }, signal())).rejects.toThrow('disposed') }) +it('pins a manual source to one preparation without changing deployment defaults', async () => { + const { worker } = await fixture() + expect(worker.downloadSources).toEqual(['https://huggingface.co', 'https://hf-mirror.com']) + worker.prepare({ downloadSource: 'https://hf-mirror.com' }) + await vi.waitFor(() => { expect(worker.snapshot().phase).toBe('ready') }) + expect(prepareRuntime).toHaveBeenCalledWith(expect.anything(), expect.objectContaining({ modelOrigin: 'https://hf-mirror.com' }), + expect.any(AbortSignal), expect.any(Function)) +}) + +it('rejects unadvertised sources and preserves private and offline deployments', async () => { + const { worker } = await fixture({ modelOrigin: 'https://private.example/' }) + expect(worker.downloadSources).toEqual(['https://private.example']) + expect(() => { worker.prepare({ downloadSource: 'https://hf-mirror.com' }) }).toThrow('unavailable') + expect(prepareRuntime).not.toHaveBeenCalled() + const offline = await fixture({ modelDirectory: process.cwd(), vadModelPath: process.cwd() }) + expect(offline.worker.downloadSources).toEqual([]) + expect(() => { offline.worker.prepare({ downloadSource: 'https://huggingface.co' }) }).toThrow('unavailable') +}) + +it('joins matching requests and refuses to change the source of active preparation', async () => { + const { worker } = await fixture(), entered = Promise.withResolvers() + vi.mocked(prepareRuntime).mockImplementation(async (_ctx, _config, signal) => { + entered.resolve(undefined) + await new Promise((_resolve, reject) => { signal.addEventListener('abort', () => { reject(new Error('preparation cancelled')) }, { once: true }) }) + throw new Error('unreachable') + }) + worker.prepare({ downloadSource: 'https://hf-mirror.com' }) + await entered.promise + worker.prepare({ downloadSource: 'https://hf-mirror.com' }) + expect(() => { worker.prepare({ downloadSource: 'https://huggingface.co' }) }).toThrow('Cancel preparation') + expect(prepareRuntime).toHaveBeenCalledOnce() + await worker.cancel() + expect(worker.snapshot().phase).toBe('cancelled') +}) + it('wakes verified caches on the first recording without preparing them again', async () => { const { worker, spawn, root } = await fixture() const paths = { tokens: root, model: root, vad: root, worker: fileURLToPath(new URL('./worker.fixture.mjs', import.meta.url)) } diff --git a/packages/experimental/speech-to-text/README.i18n.yaml b/packages/experimental/speech-to-text/README.i18n.yaml index 855300b8f1..a6fbe06934 100644 --- a/packages/experimental/speech-to-text/README.i18n.yaml +++ b/packages/experimental/speech-to-text/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/experimental/speech-to-text/README.md -README.md: 3dafb5c7cfb9c3946be329e6e67b876ddebfb322 -README.zh.md: d665e5c05f7c220ecd838108b97ae886af7d952a +README.md: e96d3c09d8bea6a2ae7f19fd3ef195efbc8d6214 +README.zh.md: 23a6a4850a540ecaafbd1a4ca6380caed32f8b91 diff --git a/packages/experimental/speech-to-text/README.md b/packages/experimental/speech-to-text/README.md index 3dafb5c7cf..e96d3c09d8 100644 --- a/packages/experimental/speech-to-text/README.md +++ b/packages/experimental/speech-to-text/README.md @@ -27,6 +27,8 @@ This Service Definition selects named speech recognizers through `ctx.speechToTe Load through the [voice input bundle](../voice-input-bundle/README.md), or compose the service with a provider and consumer. `defaultProvider` is required and selects an exact registered id; the bundle supplies `sensevoice-local`. `language` supplies the omitted language hint. A missing or duplicate provider fails explicitly. +Providers advertise preparation origins through `downloadSources`. `prepare(id, options)` forwards an optional `downloadSource` for one task; the provider validates the choice and refuses source changes during active preparation. Omission retains provider policy. Source choices are not persisted recognition preferences. + ----- diff --git a/packages/experimental/speech-to-text/README.zh.md b/packages/experimental/speech-to-text/README.zh.md index d665e5c05f..23a6a4850a 100644 --- a/packages/experimental/speech-to-text/README.zh.md +++ b/packages/experimental/speech-to-text/README.zh.md @@ -27,6 +27,8 @@ kind: "package-reference" 通过[语音输入 Bundle](../voice-input-bundle/README.zh.md)加载,或组合此服务、Provider 与消费者。`defaultProvider` 为必填项,选择确切的注册 id;Bundle 提供 `sensevoice-local`。`language` 提供省略的语言提示。缺失或重复的 Provider 会明确报错。 +提供方通过 `downloadSources` 公布准备阶段可用的源。`prepare(id, options)` 为单次任务转发可选的 `downloadSource`;提供方校验选择,并拒绝在准备期间改源。省略时沿用提供方策略。下载源选择不属于持久化的识别偏好。 + ----- diff --git a/packages/experimental/speech-to-text/src/index.ts b/packages/experimental/speech-to-text/src/index.ts index ba4bb4fc9a..d88bf7aa39 100644 --- a/packages/experimental/speech-to-text/src/index.ts +++ b/packages/experimental/speech-to-text/src/index.ts @@ -5,7 +5,7 @@ import z from '@deepseek-ai/schemastery' // entry and `loader/volatile-update` merges. import type {} from '@deepseek-ai/dsh-settings' import type {} from '@deepseek-ai/cordis-plugin-loader' -import type { SpeechProvider, SpeechProviderId, SpeechProviderInfo, SpeechSnapshot, SpeechSelectionPatch, SpeechRequest, SpeechSpec, Transcript } from './types.ts' +import type { SpeechPreparationOptions, SpeechProvider, SpeechProviderId, SpeechProviderInfo, SpeechSnapshot, SpeechSelectionPatch, SpeechRequest, SpeechSpec, Transcript } from './types.ts' export type * from './types.ts' @@ -153,11 +153,12 @@ export default class SpeechToText extends Service { /** * Start or join provider-owned preparation. * @param id - exact registered provider identity. + * @param options - task-local source selection validated by the provider. */ - prepare(id: SpeechProviderId): void { + prepare(id: SpeechProviderId, options?: SpeechPreparationOptions): void { const registration = this.providers.get(id) if (!registration) throw new Error(`Speech provider is unavailable: ${id}`) - registration.provider.preparation?.prepare() + registration.provider.preparation?.prepare(options) } /** diff --git a/packages/experimental/speech-to-text/src/types.ts b/packages/experimental/speech-to-text/src/types.ts index a7f885fd69..1500aabe3e 100644 --- a/packages/experimental/speech-to-text/src/types.ts +++ b/packages/experimental/speech-to-text/src/types.ts @@ -20,6 +20,8 @@ export interface SpeechProviderInfo { /** Accepted language hints, including automatic detection when supported. */ readonly languages: readonly string[] readonly setupEstimate?: SpeechSetupEstimate + /** Origins offered for an explicit preparation download; omitted or empty when no choice applies. */ + readonly downloadSources?: readonly string[] } /** Ordered resource-preparation operations understood by the speech UI. Providers omit operations they do not need. */ @@ -75,14 +77,23 @@ export interface SpeechSnapshot { readonly selection: SpeechSelection } +/** Download choice for one preparation task; omission keeps the provider's configured selection policy. */ +export interface SpeechPreparationOptions { + /** One advertised origin; providers reject unavailable sources and use a manual choice without fallback. */ + readonly downloadSource?: string +} + /** Optional resource preparation controls. Providers without them are immediately usable. */ export interface SpeechPreparation { /** @returns the latest Host-owned state. */ snapshot(): SpeechPreparationState /** @param listener - state invalidation callback. @returns subscription disposer. */ subscribe(listener: () => void): () => void - /** Start or join the current preparation task; page and transport lifetimes do not own it. */ - prepare(): void + /** + * Start or join the current preparation task; page and transport lifetimes do not own it. + * @param options - task-local download selection; providers reject changing the source of active work. + */ + prepare(options?: SpeechPreparationOptions): void /** Cancel preparation. @returns after its resources settle. */ cancel(): Promise } diff --git a/packages/experimental/speech-to-text/tests/service.spec.ts b/packages/experimental/speech-to-text/tests/service.spec.ts index 60dfe50bd1..bf09c0af5f 100644 --- a/packages/experimental/speech-to-text/tests/service.spec.ts +++ b/packages/experimental/speech-to-text/tests/service.spec.ts @@ -35,6 +35,8 @@ it('shares Host preparation across observers and does not cancel work when obser expect((await stream.next()).value).toMatchObject({ providers: [{ id, preparation: { phase: 'unprepared' } }] }) service.prepare(id) expect(prepare).toHaveBeenCalledOnce() + service.prepare(id, { downloadSource: 'https://mirror.example' }) + expect(prepare).toHaveBeenLastCalledWith({ downloadSource: 'https://mirror.example' }) const next = stream.next() state = { phase: 'downloading', resource: 'model', completedBytes: 638, totalBytes: 936 }; notify() expect((await next).value).toMatchObject({ providers: [{ preparation: state }] }) diff --git a/packages/extensions/tool-cordis/src/api-catalog.ts b/packages/extensions/tool-cordis/src/api-catalog.ts index 65bb485075..73b823d61a 100644 --- a/packages/extensions/tool-cordis/src/api-catalog.ts +++ b/packages/extensions/tool-cordis/src/api-catalog.ts @@ -2549,9 +2549,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ returns: 'after preferences are saved.', }, { - signature: '@Remote prepare(providerId: SpeechProviderId): void', + signature: '@Remote prepare(providerId: SpeechProviderId, options?: SpeechPreparationOptions): void', description: 'Start or join one Host-owned preparation task.', - parameters: [{ name: 'providerId', description: 'selected recognizer.' }], + parameters: [{ name: 'providerId', description: 'selected recognizer.' }, { name: 'options', description: 'task-local source selection validated by the provider.' }], }, { signature: '@Remote cancelPreparation(providerId: SpeechProviderId): Promise', @@ -2603,9 +2603,9 @@ export const SERVICE_API: readonly ServiceApiEntry[] = [ returns: 'after the profile write and the live update it applies.', }, { - signature: 'prepare(id: SpeechProviderId): void', + signature: 'prepare(id: SpeechProviderId, options?: SpeechPreparationOptions): void', description: 'Start or join provider-owned preparation.', - parameters: [{ name: 'id', description: 'exact registered provider identity.' }], + parameters: [{ name: 'id', description: 'exact registered provider identity.' }, { name: 'options', description: 'task-local source selection validated by the provider.' }], }, { signature: 'async cancelPreparation(id: SpeechProviderId): Promise', @@ -6735,7 +6735,11 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SpeechPreparation', - declaration: 'export interface SpeechPreparation {\n snapshot(): SpeechPreparationState;\n subscribe(listener: () => void): () => void;\n prepare(): void;\n cancel(): Promise;\n}', + declaration: 'export interface SpeechPreparation {\n snapshot(): SpeechPreparationState;\n subscribe(listener: () => void): () => void;\n prepare(options?: SpeechPreparationOptions): void;\n cancel(): Promise;\n}', + }, + { + name: 'SpeechPreparationOptions', + declaration: 'export interface SpeechPreparationOptions {\n readonly downloadSource?: string;\n}', }, { name: 'SpeechPreparationState', @@ -6759,7 +6763,7 @@ export const TYPE_API: readonly TypeApiEntry[] = [ }, { name: 'SpeechProviderInfo', - declaration: 'export interface SpeechProviderInfo {\n readonly id: SpeechProviderId;\n readonly name: string;\n readonly location: \'host-local\' | \'cloud\';\n readonly languages: readonly string[];\n readonly setupEstimate?: SpeechSetupEstimate;\n}', + declaration: 'export interface SpeechProviderInfo {\n readonly id: SpeechProviderId;\n readonly name: string;\n readonly location: \'host-local\' | \'cloud\';\n readonly languages: readonly string[];\n readonly setupEstimate?: SpeechSetupEstimate;\n readonly downloadSources?: readonly string[];\n}', }, { name: 'SpeechProviderView', diff --git a/scripts/gen-cordis-catalog.ts b/scripts/gen-cordis-catalog.ts index 042e19d444..0dde565986 100644 --- a/scripts/gen-cordis-catalog.ts +++ b/scripts/gen-cordis-catalog.ts @@ -623,6 +623,7 @@ export const LINK_MAP: Readonly> = { JobSettleCause: 'jobs.md', SpeechDownloadFailure: 'voice-input.md', SpeechPreparationState: 'voice-input.md', + SpeechPreparationOptions: 'voice-input.md', SpeechPreparationStep: 'voice-input.md', SpeechPreparationStepKind: 'voice-input.md', SpeechProviderView: 'voice-input.md', From 5124a2a310a904d28118609c41d89f26440b946b Mon Sep 17 00:00:00 2001 From: Yudong Han Date: Wed, 23 Sep 2026 14:10:30 +0800 Subject: [PATCH 35/35] fix(web): show model IDs in monospace and names on hover (#5004) * fix(web): show original model IDs on hover * fix(web): display model IDs with names on hover --- apps/web/tests/models-settings.e2e.ts | 2 +- packages/client/ui-settings-models/README.i18n.yaml | 4 ++-- packages/client/ui-settings-models/README.md | 2 +- packages/client/ui-settings-models/README.zh.md | 2 +- .../src/client/ModelListEditor.tsx | 4 ++-- .../src/client/ModelsSection.module.css | 3 ++- .../tests/provider-form.client.spec.tsx | 12 ++++++------ 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/web/tests/models-settings.e2e.ts b/apps/web/tests/models-settings.e2e.ts index 3d9fd95906..68857956f3 100644 --- a/apps/web/tests/models-settings.e2e.ts +++ b/apps/web/tests/models-settings.e2e.ts @@ -397,7 +397,7 @@ describe('web e2e: Models settings page configures a dormant provider', () => { const picker = page.getByRole('dialog', { name: '选择要添加的模型' }) await picker.getByRole('button', { name: '取消全选' }).click() await picker.getByRole('searchbox', { name: '搜索模型' }).fill('gpt-6-astra') - await picker.getByRole('checkbox', { name: 'GPT-6 Astra', exact: true }).check() + await picker.getByRole('checkbox', { name: 'gpt-6-astra', exact: true }).check() await picker.getByRole('button', { name: '添加所选' }).click() await dialog.getByRole('button', { name: '模型选项 1' }).click() expect(await image.isChecked()).toBe(true) diff --git a/packages/client/ui-settings-models/README.i18n.yaml b/packages/client/ui-settings-models/README.i18n.yaml index cc8f8a2981..29a2070e75 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: 0d6f34436f11eadd84ff1c2d6a7731aee1a42f32 -README.zh.md: f28744f46eda015528553e1b363e1427d2b927ae +README.md: 52a8e91c158db912a5c7a4f84ff2892de2bd4a7d +README.zh.md: 9470c9c0f1e80136e31e6e656b09c5fd17f7c691 diff --git a/packages/client/ui-settings-models/README.md b/packages/client/ui-settings-models/README.md index 0d6f34436f..52a8e91c15 100644 --- a/packages/client/ui-settings-models/README.md +++ b/packages/client/ui-settings-models/README.md @@ -45,7 +45,7 @@ Expand **Customized settings → Model options** to edit each model. Both provid ### Adding and deleting providers -**Add model provider** is the one entry to the add card, offered while any editor-backed settings namespace is mounted and enabled while either mode below can proceed. The card opens on a segmented mode switch with a one-line purpose beneath it: **Third-party model provider** carries the dormant-directory provider select over the provider editor — a bare-mounted `llm-pi-ai` offers its whole installed catalog before any route exists — and **Custom model API** carries the create form for a route pi-ai does not ship: a relay, a self-hosted server, or any other OpenAI- or Anthropic-compatible endpoint. A mode is offered only while its namespace is mounted; with one mode the card shows that form alone under the mode's name, and a mode whose namespace has nothing left to adopt or no protocol to declare is disabled with the reason as its hover text. A panel mounts the first time its mode is shown and stays mounted, hidden, while the card is open and its mode stays offered, so switching modes discards neither draft; the switch locks while either panel has a write or an endpoint interrogation in flight, since a switch underneath one would orphan its answer. Each tab controls its panel through ids, and closing either panel forgets the catalog draft's target. The custom form asks for a unique **Provider ID**, an endpoint, a protocol, and at least one uniquely-identified model, because nothing can default those. The protocol picker names each protocol by its product name — OpenAI Chat Completions, OpenAI Responses, Anthropic Messages — while the stored value stays the schema identifier; a protocol the adapter adds before this page names it shows that identifier. The endpoint placeholder follows the selected protocol: OpenAI Chat Completions and Responses show `https://gateway.example/v1`, while Anthropic Messages shows `https://gateway.example` because its SDK appends `/v1/messages`. Changing the protocol preserves any address already entered. The endpoint must be a parseable HTTP or HTTPS URL; localhost, IPv4 and IPv6 literals, and custom ports remain valid. A syntax error blocks both discovery and creation at the field, while a request failure remains a separate provider error. **Fetch available models** asks the `llm/discoverModels` Remote about the endpoint the form shows, so adding a provider is one pass instead of save-then-return; the reply opens a searchable picker rather than being written, and nothing is written until **Add selected**. Each candidate displays its name, falling back to its id when no name is supplied. Rows stay on one line; hovering reveals the full text when it is truncated. Selection and configuration retain the original model id. Each selected candidate copies its id, display name, context window, output-token cap, and disclosed input types into the editable row when disclosed, while an existing row retains its user-tuned values. Search matches model ids and optional display names without clearing hidden selections. **Select all** adds the visible results, while **Deselect all** clears the entire selection so hidden results cannot be adopted accidentally. A row is deletable only when the user layer alone carries it (removal restores the composition base), and its confirmation dialog names the provider. +**Add model provider** is the one entry to the add card, offered while any editor-backed settings namespace is mounted and enabled while either mode below can proceed. The card opens on a segmented mode switch with a one-line purpose beneath it: **Third-party model provider** carries the dormant-directory provider select over the provider editor — a bare-mounted `llm-pi-ai` offers its whole installed catalog before any route exists — and **Custom model API** carries the create form for a route pi-ai does not ship: a relay, a self-hosted server, or any other OpenAI- or Anthropic-compatible endpoint. A mode is offered only while its namespace is mounted; with one mode the card shows that form alone under the mode's name, and a mode whose namespace has nothing left to adopt or no protocol to declare is disabled with the reason as its hover text. A panel mounts the first time its mode is shown and stays mounted, hidden, while the card is open and its mode stays offered, so switching modes discards neither draft; the switch locks while either panel has a write or an endpoint interrogation in flight, since a switch underneath one would orphan its answer. Each tab controls its panel through ids, and closing either panel forgets the catalog draft's target. The custom form asks for a unique **Provider ID**, an endpoint, a protocol, and at least one uniquely-identified model, because nothing can default those. The protocol picker names each protocol by its product name — OpenAI Chat Completions, OpenAI Responses, Anthropic Messages — while the stored value stays the schema identifier; a protocol the adapter adds before this page names it shows that identifier. The endpoint placeholder follows the selected protocol: OpenAI Chat Completions and Responses show `https://gateway.example/v1`, while Anthropic Messages shows `https://gateway.example` because its SDK appends `/v1/messages`. Changing the protocol preserves any address already entered. The endpoint must be a parseable HTTP or HTTPS URL; localhost, IPv4 and IPv6 literals, and custom ports remain valid. A syntax error blocks both discovery and creation at the field, while a request failure remains a separate provider error. **Fetch available models** asks the `llm/discoverModels` Remote about the endpoint the form shows, so adding a provider is one pass instead of save-then-return; the reply opens a searchable picker rather than being written, and nothing is written until **Add selected**. Each candidate displays its original model id in a monospace font to distinguish models with the same name. Rows stay on one line; hovering reveals the model name, falling back to the full id when no name is supplied. Selection and configuration retain the original model id. Each selected candidate copies its id, display name, context window, output-token cap, and disclosed input types into the editable row when disclosed, while an existing row retains its user-tuned values. Search matches model ids and optional display names without clearing hidden selections. **Select all** adds the visible results, while **Deselect all** clears the entire selection so hidden results cannot be adopted accidentally. A row is deletable only when the user layer alone carries it (removal restores the composition base), and its confirmation dialog names the provider. ### First-run dialogs diff --git a/packages/client/ui-settings-models/README.zh.md b/packages/client/ui-settings-models/README.zh.md index f28744f46e..9470c9c0f1 100644 --- a/packages/client/ui-settings-models/README.zh.md +++ b/packages/client/ui-settings-models/README.zh.md @@ -45,7 +45,7 @@ Host 配置 `credentialOnboarding` 默认为 `true`。Electron preload 标记会 ### 新增与删除提供商 -**添加模型提供商**是新增卡片的唯一入口:只要任一带编辑器的设置 namespace 已挂载就会出现,下述两种方式任一可继续时才可点击。卡片打开后顶部是分段式的方式切换,下方一行小字说明所选方式的用途:**第三方模型提供商**承载休眠目录提供商选择框与提供商编辑器——裸挂载的 `llm-pi-ai` 在任何路由存在之前就能提供其完整的已安装 catalog;**自定义模型 API**承载为 pi-ai 不提供的路由(中转站、自部署服务或其他兼容 OpenAI / Anthropic 协议的接口)准备的创建表单。某种方式只在其 namespace 已挂载时提供;只剩一种方式时卡片以该方式为标题直接显示表单;namespace 已无可采用的提供商或没有可声明的协议时,对应方式会被禁用并把原因作为悬停提示。面板在其方式首次显示时挂载,之后在卡片打开且该方式仍被提供期间保持挂载但隐藏,因此切换方式不会丢掉任何一边的草稿;任一面板有写入或端点探测进行中时滑块锁定,因为此时切换会让结果落到看不见的面板上。每个 tab 通过 id 控制其面板,关闭任一面板都会忘记目录草稿的目标。自定义表单会索要唯一的 **Provider ID**、端点、协议与至少一个可唯一识别的模型,因为没有东西能为它们兜底。协议选择框以产品名称显示各协议——OpenAI Chat Completions、OpenAI Responses、Anthropic Messages——存储的值仍是 schema 标识符;适配器新增而本页尚未命名的协议直接显示其标识符。端点占位示例随所选协议变化:OpenAI Chat Completions 与 Responses 显示 `https://gateway.example/v1`,Anthropic Messages 显示 `https://gateway.example`,因为其 SDK 会追加 `/v1/messages`。切换协议会保留已输入的地址。端点必须是可解析的 HTTP 或 HTTPS URL;localhost、IPv4 与 IPv6 字面地址以及自定义端口仍然有效。语法错误会在字段处阻止询问与创建,请求失败则继续作为独立的提供商错误显示。**获取可用模型**通过 `llm/discoverModels` Remote 查询表单显示的端点,因此新增提供商一次即可完成,而非先保存再返回;回复打开的是可搜索选择器而非直接写入,只有点击**添加所选**才会写入。候选项显示模型名称,未提供名称时回退到 id。每行保持单行,文字截断时可悬停查看完整内容。勾选与配置仍使用原始模型 id。每个选中候选会在提供商公布相应信息时,把 id、显示名、上下文窗口、最大输出 token 数和已公布的输入类型复制进可编辑行;已经存在的行保留用户调整过的值。搜索会匹配模型 id 与可选显示名称,且不会清除隐藏项的勾选状态。**全选**会加入可见结果,而**取消全选**会清空全部勾选,以免意外采用隐藏结果。只有用户层单独携带某行时,该行才可删除(删除会恢复组合基线),其确认对话框会指名该提供商。 +**添加模型提供商**是新增卡片的唯一入口:只要任一带编辑器的设置 namespace 已挂载就会出现,下述两种方式任一可继续时才可点击。卡片打开后顶部是分段式的方式切换,下方一行小字说明所选方式的用途:**第三方模型提供商**承载休眠目录提供商选择框与提供商编辑器——裸挂载的 `llm-pi-ai` 在任何路由存在之前就能提供其完整的已安装 catalog;**自定义模型 API**承载为 pi-ai 不提供的路由(中转站、自部署服务或其他兼容 OpenAI / Anthropic 协议的接口)准备的创建表单。某种方式只在其 namespace 已挂载时提供;只剩一种方式时卡片以该方式为标题直接显示表单;namespace 已无可采用的提供商或没有可声明的协议时,对应方式会被禁用并把原因作为悬停提示。面板在其方式首次显示时挂载,之后在卡片打开且该方式仍被提供期间保持挂载但隐藏,因此切换方式不会丢掉任何一边的草稿;任一面板有写入或端点探测进行中时滑块锁定,因为此时切换会让结果落到看不见的面板上。每个 tab 通过 id 控制其面板,关闭任一面板都会忘记目录草稿的目标。自定义表单会索要唯一的 **Provider ID**、端点、协议与至少一个可唯一识别的模型,因为没有东西能为它们兜底。协议选择框以产品名称显示各协议——OpenAI Chat Completions、OpenAI Responses、Anthropic Messages——存储的值仍是 schema 标识符;适配器新增而本页尚未命名的协议直接显示其标识符。端点占位示例随所选协议变化:OpenAI Chat Completions 与 Responses 显示 `https://gateway.example/v1`,Anthropic Messages 显示 `https://gateway.example`,因为其 SDK 会追加 `/v1/messages`。切换协议会保留已输入的地址。端点必须是可解析的 HTTP 或 HTTPS URL;localhost、IPv4 与 IPv6 字面地址以及自定义端口仍然有效。语法错误会在字段处阻止询问与创建,请求失败则继续作为独立的提供商错误显示。**获取可用模型**通过 `llm/discoverModels` Remote 查询表单显示的端点,因此新增提供商一次即可完成,而非先保存再返回;回复打开的是可搜索选择器而非直接写入,只有点击**添加所选**才会写入。候选项使用等宽字体显示原始模型 id,以区分同名模型。每行保持单行,悬停可查看模型名称,未提供名称时回退到完整 id。勾选与配置仍使用原始模型 id。每个选中候选会在提供商公布相应信息时,把 id、显示名、上下文窗口、最大输出 token 数和已公布的输入类型复制进可编辑行;已经存在的行保留用户调整过的值。搜索会匹配模型 id 与可选显示名称,且不会清除隐藏项的勾选状态。**全选**会加入可见结果,而**取消全选**会清空全部勾选,以免意外采用隐藏结果。只有用户层单独携带某行时,该行才可删除(删除会恢复组合基线),其确认对话框会指名该提供商。 ### 首次运行弹窗 diff --git a/packages/client/ui-settings-models/src/client/ModelListEditor.tsx b/packages/client/ui-settings-models/src/client/ModelListEditor.tsx index cfab83e8d9..3c02030b6b 100644 --- a/packages/client/ui-settings-models/src/client/ModelListEditor.tsx +++ b/packages/client/ui-settings-models/src/client/ModelListEditor.tsx @@ -447,8 +447,8 @@ export function ModelListEditor(props: ModelListEditorProps): ReactNode { checked={picked.has(candidate.id)} onChange={() => { toggle(candidate.id) }} /> - - {candidate.name ?? candidate.id} + + {candidate.id} diff --git a/packages/client/ui-settings-models/src/client/ModelsSection.module.css b/packages/client/ui-settings-models/src/client/ModelsSection.module.css index a21446f6ff..be41c27c18 100644 --- a/packages/client/ui-settings-models/src/client/ModelsSection.module.css +++ b/packages/client/ui-settings-models/src/client/ModelsSection.module.css @@ -705,9 +705,10 @@ select.input { cursor: pointer; } -.candidateName { +.candidateId { flex: 1 1 auto; min-width: 0; + font-family: var(--ds-font-family-code); font-size: 13px; overflow: hidden; text-overflow: ellipsis; 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 5140c7a427..16af464c77 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 @@ -609,8 +609,8 @@ describe('endpoint interrogation', () => { fireEvent.click(screen.getByText(en.fetchModels)) await screen.findByText(en.fetchTitle) - expect(screen.getByRole('checkbox', { name: 'Fresh' }).checked).toBe(true) - expect(screen.queryByRole('checkbox', { name: 'fresh' })).toBeNull() + expect(screen.getByRole('checkbox', { name: 'fresh' }).checked).toBe(true) + expect(screen.queryByRole('checkbox', { name: 'Fresh' })).toBeNull() // The already-configured row starts unchecked; the new one starts checked. const boxes = [...document.querySelectorAll('input[type="checkbox"]')] expect(boxes.map(box => box.checked)).toEqual([false, true]) @@ -750,8 +750,8 @@ describe('endpoint interrogation', () => { fireEvent.click(screen.getByText(en.fetchModels)) const dialog = await screen.findByRole('dialog') const search = screen.getByLabelText(en.fetchSearch) - expect(dialog.textContent).toContain('Beta Display') - expect(dialog.textContent).not.toContain('opaque-id') + expect(dialog.textContent).toContain('opaque-id') + expect(dialog.textContent).not.toContain('Beta Display') expect([...dialog.querySelectorAll('input[type="checkbox"]')] .map(box => box.checked)).toEqual([true, true, true]) @@ -760,11 +760,11 @@ describe('endpoint interrogation', () => { expect(dialog.textContent).not.toContain('opaque-id') fireEvent.change(search, { target: { value: 'beta' } }) - expect(dialog.textContent).toContain('Beta Display') + expect(dialog.textContent).toContain('opaque-id') expect(dialog.textContent).not.toContain('alpha') fireEvent.change(search, { target: { value: 'opaque' } }) - expect(dialog.textContent).toContain('Beta Display') + expect(dialog.textContent).toContain('opaque-id') expect(dialog.textContent).not.toContain('alpha') fireEvent.click(within_(dialog, en.fetchDeselectAll))