@deepseek-ai/dsh-client-ui-goal 0.1.1-rc.2 → 0.1.2-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
3
  # after editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/client/ui-goal/README.md
5
- README.md: c79d6f5a68f1b4b40f4b57f5745feeed63a25fcd
6
- README.zh.md: c2d000dd8141a989c67f2e8dc6786ed2b5067a6b
5
+ README.md: 05c44fee27f0500c6a5d53496fde3d447edbf424
6
+ README.zh.md: f280356eb37b364f49851ca24d73370eb62e6795
package/README.md CHANGED
@@ -1,16 +1,69 @@
1
+ ---
2
+ description: "Goal surface for the Web GUI: the composer-context strip that shows the current goal and edits, pauses, resumes, or clears it; for users and maintainers of the goal experience."
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-client-ui-goal
2
7
 
3
8
  English | [中文](README.zh.md)
4
9
 
5
- Goal surface plugin, browser half: the `GoalBar` strip is the second standalone card in the `conversation.input.dock` composer-context stack (order 10, after Todo and before Queue). The live goal arrives through `useProjection('goal')` — the host-computed whole value seeded by the history tail page and updated by `session/projection` frames — so the plugin owns no domain store, refresh chain, or event listener. The slot inject face carries only the four mutation verbs (edit / pause / resume / clear through `ctx.remote.goals` — an active goal offers the pause action, a paused one resume); each reads the CAS ref from the session's current projected value at call time and surfaces the rejected Remote error inline. The strip single-flights mutations synchronously because React's pending render cannot fence same-frame clicks; after a successful clear it immediately suppresses that exact goal id while the authoritative null projection catches up. Goal creation stays on the `/goal` host command; loading, absent, completed, and successfully cleared goals render nothing.
10
+ ## Summary
11
+
12
+ This package renders the goal surface in the Web GUI: a strip in the composer-context stack that shows the current goal of the session and offers edit, pause, resume, and clear actions. It reads the live goal from the host-computed projection and routes every mutation through the goal service, surfacing rejections inline. It also projects each durable `/goal` command run as a `Command input` bubble in the chat, so a goal command entered by the user or the model appears in the transcript. Goal creation is outside this plugin. The shipped Web presets other than `minimal` mount `/goal` in their agent scope.
13
+
14
+ ## Table of Contents
15
+
16
+ - [Use this package](#use-this-package)
17
+ - [Understand the implementation](#understand-the-implementation)
18
+ - [Further Exploration](#further-exploration)
19
+ - [Model Experience](#model-experience)
20
+ - [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
21
+ - [Dev Note](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## Use this package
27
+
28
+ Mount this plugin alongside `ui-conversation` and the goal domain package; the strip then appears as the second card in the composer-context stack (after Todo, before Queue) whenever the session has a goal. An active goal offers pause; a paused one offers resume; edit rewrites the objective; clear removes the goal and suppresses the strip until the projection catches up.
29
+
30
+ ### The command-input bubble
31
+
32
+ Each durable `/goal` run projects as a right-aligned monospace user-style bubble labeled `Command input` (or `指令输入`), rendered before the generic command result row. It carries no timestamp, copy, or branch actions, and reloading reconstructs it from the run.
33
+
34
+ ### Failures
35
+
36
+ A rejected mutation surfaces the Remote error inline on the strip; loading, absent, completed, and successfully cleared goals render nothing.
37
+
38
+ -----
39
+
40
+ <a id="understand-the-implementation"></a>
41
+ ## Understand the implementation
6
42
 
7
- The plugin separately projects each durable `/goal` `command/run` through its own Conversation Definition. It builds a `command-input` Chat Node before the generic command result Node and registers that Node's keyed renderer as a right-aligned 14px/22px monospace user-style bubble with the localized group name `Command input` / `命令输入` and no timestamp, copy, or branch actions. The visible non-command Node activates fresh Chat; reload reconstructs it from the run, while a history window containing only `command/done` keeps only the generic result row. This projection never creates `user/message` or a model turn.
43
+ <details>
44
+ <summary>Implementation internals — click to expand</summary>
8
45
 
9
- The `/client` exports are the plugin body (`apply`/`inject`), the `GoalBar`/`GoalDock` components, and the injected verb face types.
46
+ The strip is projection-mode: the live goal arrives through `useProjection('goal')` (seeded by the history tail page and updated by `session/projection` frames), so the plugin owns no domain store, refresh chain, or event listener. The inject face carries only the four mutation verbs through `ctx.remote.goals`; each reads the CAS ref from the session's current projected value at call time, and the RPC's compare-and-set is the staleness guard. The strip single-flights mutations synchronously because a pending render cannot fence same-frame clicks. The command-input projection is a separate Conversation Definition that builds a `command-input` Chat Node before the generic command result Node; it never creates `user/message` or a model turn.
10
47
 
48
+ </details>
49
+
50
+ -----
51
+
52
+ <a id="further-exploration"></a>
53
+ ## Further Exploration
54
+
55
+ Read these pages when the goal surface is not enough. They move from the browser strip to the goal domain and the slots it fills.
56
+
57
+ - [dsh-goal](../../goal/goal/README.md) — the goal domain, projection, and `/goal` command this surface reads and mutates.
58
+ - [ui-conversation](../ui-conversation/README.md) — declares the `conversation.input.dock` slot and owns the composer.
59
+ - [Client package map](../README.md) — adjacent browser UI packages.
60
+
61
+ -----
62
+
63
+ <a id="model-experience"></a>
11
64
  ## Model Experience
12
65
 
13
- Indirectly, through the `goals/edit`, `goals/pause`, `goals/resume`, and `goals/clear` Remote methods the strip invokes: each accepted mutation commits in a durable `agent/inbox/spliced` insertion, which the goal projection folds immediately, and queues a `goal/change` context message. The model sees that context only if a later pre-step admits it; discarding the queued message does not roll back the projected state. The strip itself adds no prompt content.
66
+ Indirectly, through the `goals/edit`, `goals/pause`, `goals/resume`, and `goals/clear` mutations the strip routes; the host GoalService owns the model-visible goal context message those mutations queue.
14
67
 
15
68
  #### KV Cache effect
16
69
 
@@ -18,4 +71,20 @@ None unless the queued goal context is admitted. An admitted context extends the
18
71
 
19
72
  ## Known Limitations and Deferred Work
20
73
 
74
+ <a id="known-limitations-and-deferred-work"></a>
75
+
76
+
77
+ These limits define the current goal surface. They are current package constraints, not a goal-domain comparison or a task backlog.
78
+
21
79
  - **Durable phase only** — the projection omits process-local activation, so the strip cannot distinguish an active-but-disarmed goal from an armed one; resume re-arms through the RPC side. There is no host-live activation channel.
80
+ - **Preset-independent host state** — switching an active session to `minimal` leaves its host-owned goal intact. `/goal` and goal tools disappear, while this strip can still edit, pause, resume, or clear the goal.
81
+
82
+ <a id="dev-note"></a>
83
+ ### Dev Note
84
+
85
+ <details>
86
+ <summary>Working context for maintainers — click to expand</summary>
87
+
88
+ None.
89
+
90
+ </details>
package/README.zh.md CHANGED
@@ -1,21 +1,90 @@
1
+ ---
2
+ description: "Web GUI 的 goal 表面:显示当前目标并支持编辑、暂停、恢复或清除的 composer 上下文条带;供 goal 体验的用户与维护者阅读。"
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-client-ui-goal
2
7
 
3
8
  [English](README.md) | 中文
4
9
 
5
- Goal 界面插件(浏览器端部分):`GoalBar` 条带是 `conversation.input.dock` composer 上下文堆栈中的第二张独立卡片(order 10,位于 Todo 之后、Queue 之前)。活值经 `useProjection('goal')` 到达——host 计算的全量值由历史尾页播种、由 `session/projection` 帧更新——因此本插件不持有领域 store、不设刷新链、不挂事件监听。slot 注入面只携带四个变更动词(edit / pause / resume / clear,经 `ctx.remote.goals` 调用——active 的 goal 提供暂停动作,paused 的提供恢复);每个动词在调用时从会话当前投影值读取 CAS ref,并将 Remote 调用的拒绝错误内联呈现。由于 React 的 pending 渲染无法拦住同一帧内的点击,横条会同步为变更建立 single-flight 防护;清除成功后,会立即抑制该 goal id 对应的目标显示,直到权威的 null 投影追上。goal 的创建仍归 `/goal` host 命令;加载中、无 goal、已完成和已成功清除的 goal 一律不渲染。
10
+ ## 概述
11
+
12
+ 本包在 Web GUI 中渲染 goal 表面:composer 上下文堆栈里的一条条带,显示会话的当前目标,并提供编辑、暂停、恢复与清除动作。它从宿主计算的投影读取活目标,把每次变更都经 goal 服务路由,并把拒绝内联呈现。它还把每条持久的 `/goal` 命令运行投影为聊天中的 `Command input` 气泡,让用户或模型输入的 goal 命令出现在文本记录中。goal 创建不归本插件。除 `minimal` 外,随附的 Web preset 都会在其 agent scope 中挂载 `/goal`。
13
+
14
+ ## 目录
15
+
16
+ - [使用本包](#use-this-package)
17
+ - [理解实现](#understand-the-implementation)
18
+ - [进一步探索](#further-exploration)
19
+ - [模型体验](#model-experience)
20
+ - [已知限制与延期工作](#known-limitations-and-deferred-work)
21
+ - [开发备注](#dev-note)
22
+
23
+ -----
24
+
25
+ <a id="use-this-package"></a>
26
+ ## 使用本包
27
+
28
+ 与 `ui-conversation` 及 goal 领域包一起挂载本插件;只要会话存在目标,条带就会作为 composer 上下文堆栈的第二张卡片出现(位于 Todo 之后、Queue 之前)。active 的 goal 提供暂停动作;paused 的提供恢复;编辑重写目标文本;清除移除目标,并在投影追上之前抑制条带。
29
+
30
+ ### 指令输入气泡
31
+
32
+ 每条持久的 `/goal` 运行都投影为一个右对齐的等宽用户样式气泡,标签为 `Command input`(或 `指令输入`),渲染在通用命令结果行之前。它不含时间戳、复制或分支操作,重新加载时会依据运行记录重建。
33
+
34
+ ### 失败
35
+
36
+ 被拒绝的变更会把 Remote 错误内联呈现到条带上;加载中、无目标、已完成与成功清除的目标一律不渲染。
37
+
38
+ -----
39
+
40
+ <a id="understand-the-implementation"></a>
41
+ ## 理解实现
6
42
 
7
- 该插件还会通过自有 Conversation Definition 投影每条持久 `/goal` `command/run`。它在通用命令结果 Node 之前构建一个 `command-input` Chat Node,并为该 Node 注册 keyed renderer;renderer 将其呈现为右对齐、使用 14px/22px 等宽字体的用户样式气泡,使用本地化分组名称 `Command input`/`命令输入`,且不含时间戳、复制或分支操作。可见的非命令 Node 会激活新 Chat;重新加载时会根据 run 重建该 Node,而仅包含 `command/done` 的历史窗口只保留通用结果行。该投影绝不会创建 `user/message` 或模型轮次。
43
+ <details>
44
+ <summary>实现细节——点击展开</summary>
8
45
 
9
- `/client` 的导出接口包括插件本体(`apply`/`inject`)、`GoalBar`/`GoalDock` 组件与注入动词面类型。
46
+ 条带是投影模式:活目标经 `useProjection('goal')` 到达(由历史尾页播种、`session/projection` 帧更新),因此插件不持有领域 store、不设刷新链、不挂事件监听。注入面只携带四个变更动词,经 `ctx.remote.goals` 调用;每个动词在调用时从会话当前投影值读取 CAS ref,比较并交换(RPC 的 CAS)就是陈旧性护栏。由于 React 的 pending 渲染无法拦住同一帧内的点击,条带会同步为变更建立 single-flight 防护。指令输入投影是独立的 Conversation Definition,在通用命令结果 Node 之前构建 `command-input` Chat Node;它绝不创建 `user/message` 或模型轮次。
10
47
 
48
+ </details>
49
+
50
+ -----
51
+
52
+ <a id="further-exploration"></a>
53
+ ## 进一步探索
54
+
55
+ 当 goal 表面不够用时阅读以下页面。它们从浏览器条带进入 goal 领域与它所填充的槽位。
56
+
57
+ - [dsh-goal](../../goal/goal/README.zh.md)——本表面读取并变更的 goal 领域、投影与 `/goal` 命令。
58
+ - [ui-conversation](../ui-conversation/README.zh.md)——声明 `conversation.input.dock` 槽位并拥有 composer。
59
+ - [客户端包映射](../README.zh.md)——相邻的浏览器 UI 包。
60
+
61
+ -----
62
+
63
+ <a id="model-experience"></a>
11
64
  ## 模型体验
12
65
 
13
- 间接影响:条带通过调用 `goals/edit`、`goals/pause`、`goals/resume` 和 `goals/clear` Remote 方法提交变更;每次被接受的变更都会在持久 `agent/inbox/spliced` 插入项中提交,goal 投影会立即折叠该插入项,同时将一条 `goal/change` 上下文消息排队。只有后续 pre-step 准入该上下文时,模型才会看到它;丢弃已排队的消息不会回滚投影状态。条带自身不添加任何提示词内容。
66
+ 间接影响:条带路由 `goals/edit`、`goals/pause`、`goals/resume` 与 `goals/clear` 变更;宿主 GoalService 拥有这些变更排队的模型可见 goal 上下文消息。
14
67
 
15
68
  #### KV Cache 影响
16
69
 
17
70
  除非已排队的 goal 上下文获准,否则没有影响。获准的上下文会像其他消息一样扩展历史尾部;准入前被丢弃的插入项不会影响缓存。
18
71
 
19
- ## 已知限制与暂缓事项
72
+ ## 已知限制与延期工作
73
+
74
+ <a id="known-limitations-and-deferred-work"></a>
75
+
76
+
77
+ 这些限制界定了当前 goal 表面。它们是当前包约束,不是 goal 领域对比或任务积压。
78
+
79
+ - **只反映持久阶段**——投影省略进程本地的激活状态,因此条带无法区分已激活但未武装的 goal 与已武装的 goal;恢复经 RPC 侧重新武装。不存在宿主实时激活通道。
80
+ - **Host 状态与 preset 无关**——把活跃会话切换到 `minimal` 后,Host 拥有的 goal 仍会保留。`/goal` 与 goal 工具会消失,但该条带仍可编辑、暂停、恢复或清除 goal。
81
+
82
+ <a id="dev-note"></a>
83
+ ### 开发备注
84
+
85
+ <details>
86
+ <summary>维护者的工作上下文——点击展开</summary>
87
+
88
+ 无。
20
89
 
21
- - **只反映持久 phase**——投影省略进程本地 activation,因此条带无法区分 active-but-disarmed 与 armed 状态;resume 通过 RPC 重新置为 armed 状态。不存在 host 实时 activation 通道。
90
+ </details>
package/lib/client.js CHANGED
@@ -251,7 +251,7 @@ window.__ModuleLoader__.load({
251
251
  }
252
252
  //#endregion
253
253
  //#region \0dsh-css:/home/runner/work/deepseek-harness/deepseek-harness/packages/client/ui-goal/src/client/GoalCommandInputView.module.css.mjs
254
- const css = ".oRe1gG_row{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.oRe1gG_stack{flex-direction:column;align-items:flex-end;min-width:0;max-width:min(525px,82%);display:flex}.oRe1gG_bubble{overflow-wrap:anywhere;background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code);white-space:pre-wrap;border-radius:22px;padding:10px 16px}";
254
+ const css = ".oRe1gG_row{flex-direction:column;align-items:flex-end;gap:6px;display:flex}.oRe1gG_stack{min-width:0;max-width:min(calc(var(--dsh-chat-content-width,748px) * .702), 82%);flex-direction:column;align-items:flex-end;display:flex}.oRe1gG_bubble{overflow-wrap:anywhere;background:var(--dsw-specific-bubble);max-width:100%;color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code);font-size:var(--dsh-content-font-size,14px);line-height:calc(22px + var(--dsh-content-font-delta,0px));white-space:pre-wrap;border-radius:22px;padding:10px 16px}";
255
255
  const tagId = "@deepseek-ai/dsh-client-ui-goal/GoalCommandInputView.module.css";
256
256
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
257
257
  const tag = document.createElement("style");
@@ -339,7 +339,7 @@ window.__ModuleLoader__.load({
339
339
  "phase.paused": "已暂停的目标",
340
340
  "phase.blocked": "受阻的目标",
341
341
  "objective.aria": "目标内容",
342
- "commandInput.aria": "命令输入",
342
+ "commandInput.aria": "指令输入",
343
343
  "action.save": "保存目标",
344
344
  "action.cancel": "取消编辑",
345
345
  "action.pause": "暂停目标",
@@ -372,14 +372,14 @@ window.__ModuleLoader__.load({
372
372
  "remote",
373
373
  "remote.goals",
374
374
  "locale",
375
- "conversationEvents"
375
+ "uiConversation"
376
376
  ];
377
377
  /**
378
378
  * Client plugin body: the GoalBar dock entry with its mutation verbs.
379
379
  * @param ctx - client root context.
380
380
  */
381
381
  function apply(ctx) {
382
- ctx.conversationEvents.register(goalCommandInputDefinition);
382
+ ctx.uiConversation.events.register(goalCommandInputDefinition);
383
383
  ctx.effect(() => ctx.locale.register(NS, {
384
384
  zh,
385
385
  en
@@ -403,8 +403,7 @@ window.__ModuleLoader__.load({
403
403
  ok: false,
404
404
  error: {
405
405
  code: "no-current-goal",
406
- message: "no current goal to mutate",
407
- details: {}
406
+ message: "no current goal to mutate"
408
407
  }
409
408
  };
410
409
  ctx.slots.inject("conversation.input.dock", () => ctx.slots.register({
@@ -1,13 +1,13 @@
1
1
  import type { SessionEvent } from '@deepseek-ai/dsh-session/types';
2
2
  import type { CommandId } from '@deepseek-ai/dsh-commands/brand';
3
- import type { ConversationNodeDefinition } from '@deepseek-ai/dsh-client-runtime/client';
3
+ import type { ConversationNodeDefinition } from '@deepseek-ai/dsh-client-ui-conversation/client';
4
4
  /** Goal-owned human command input projected independently of model messages. */
5
5
  export interface GoalCommandInputData {
6
6
  readonly commandId: CommandId;
7
7
  readonly text: string;
8
8
  readonly time: number;
9
9
  }
10
- declare module '@deepseek-ai/dsh-client-ui-conversation/client' {
10
+ declare module '@deepseek-ai/dsh-client-ui-chat/client' {
11
11
  interface ChatNodeDataMap {
12
12
  /** Human-entered `/goal` command input. */
13
13
  'command-input': GoalCommandInputData;
@@ -6,9 +6,9 @@
6
6
  * refresh chain, and no event listener. The inject face carries only the
7
7
  * four mutation verbs through the generated Goal Remote API;
8
8
  * their CAS ref reads the session's current projected value at call time.
9
- * Goal creation stays on the /goal host command.
9
+ * This plugin does not create goals; deployments may expose /goal separately.
10
10
  */
11
- import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
11
+ import type { Context as ClientContext } from '@deepseek-ai/cordis';
12
12
  import { type GoalKey } from './locales.ts';
13
13
  export { GoalBar, GoalDock } from './GoalBar.tsx';
14
14
  export type { GoalActionResult, GoalBarActions } from './slots.ts';
@@ -6,13 +6,24 @@
6
6
  * (the framework standard kit); inject carries only the mutation verbs
7
7
  * (callbacks from inject, live state from useProjection).
8
8
  */
9
- import type { RemoteResult } from '@deepseek-ai/dsh-typert-protocol';
9
+ import type { RemoteResult } from '@deepseek-ai/dsh-api-remotes/client';
10
+ /**
11
+ * The one failure the strip reports without a wire call: the session projects
12
+ * no goal, so no CAS ref exists to address a mutation to.
13
+ */
14
+ export interface GoalLocalFailure {
15
+ readonly ok: false;
16
+ readonly error: {
17
+ readonly code: 'no-current-goal';
18
+ readonly message: string;
19
+ };
20
+ }
10
21
  /**
11
22
  * Settled outcome of one goal mutation, rendered inline by the strip. The
12
23
  * strip renders the failure only — the mutated goal arrives through the
13
24
  * projection — so the success value stays unread here.
14
25
  */
15
- export type GoalActionResult = RemoteResult<unknown>;
26
+ export type GoalActionResult = RemoteResult<unknown> | GoalLocalFailure;
16
27
  /** Injected business face of the GoalBar dock entry: the mutation verbs (function properties: the strip destructures them freely). */
17
28
  export interface GoalBarActions {
18
29
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-client-ui-goal",
3
3
  "description": "Session goal surface: GoalBar docked above the composer, read from the goal session projection",
4
- "version": "0.1.1-rc.2",
4
+ "version": "0.1.2-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -32,45 +32,42 @@
32
32
  "dsh": {
33
33
  "client": {
34
34
  "inject": [
35
- "@deepseek-ai/dsh-client-runtime",
36
35
  "@deepseek-ai/dsh-api-remotes",
36
+ "@deepseek-ai/dsh-api-session-controller",
37
37
  "@deepseek-ai/dsh-client-locale",
38
- "@deepseek-ai/dsh-client-ui-conversation"
38
+ "@deepseek-ai/dsh-client-ui-chat",
39
+ "@deepseek-ai/dsh-client-ui-conversation",
40
+ "@deepseek-ai/dsh-client-ui-renderer",
41
+ "@deepseek-ai/dsh-client-ui-session"
39
42
  ],
40
43
  "platform": "web"
41
44
  }
42
45
  },
43
46
  "license": "MIT",
44
47
  "peerDependencies": {
45
- "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
46
- "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2",
47
- "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
48
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
49
- "@deepseek-ai/dsh-commands": "^0.1.1-rc.2",
50
- "@deepseek-ai/dsh-goal": "^0.1.1-rc.2",
51
- "@deepseek-ai/cordis": "^4.0.1",
52
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
53
- "@deepseek-ai/dsh-session": "^0.1.1-rc.2",
54
- "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2"
48
+ "@deepseek-ai/cordis": "^4.0.2"
55
49
  },
56
50
  "devDependencies": {
57
51
  "@testing-library/react": "^16.1.0",
58
52
  "@types/react": "~18.3.1",
59
53
  "react": "^18.2.0",
60
54
  "react-dom": "^18.2.0",
61
- "@deepseek-ai/dsh-client-locale": "^0.1.1-rc.2",
62
- "@deepseek-ai/dsh-api-remotes": "^0.1.1-rc.2",
63
- "@deepseek-ai/dsh-client-runtime": "^0.1.1-rc.2",
64
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.1-rc.2",
65
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.1-rc.2",
66
- "@deepseek-ai/dsh-goal": "^0.1.1-rc.2",
67
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
68
- "@deepseek-ai/dsh-client-test-runtime": "^0.1.1-rc.2",
69
- "@deepseek-ai/cordis": "^4.0.1",
70
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.1-rc.2",
71
- "@deepseek-ai/dsh-session": "^0.1.1-rc.2",
72
- "@deepseek-ai/dsh-typert-protocol": "^0.1.1-rc.2",
73
- "@deepseek-ai/dsh-commands": "^0.1.1-rc.2"
55
+ "@deepseek-ai/dsh-api-remotes": "^0.1.2-alpha.2",
56
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.2-alpha.2",
57
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.2-alpha.2",
58
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.2-alpha.2",
59
+ "@deepseek-ai/dsh-client-ui-renderer": "^0.1.2-alpha.2",
60
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.2-alpha.2",
61
+ "@deepseek-ai/dsh-client-ui-session": "^0.1.2-alpha.2",
62
+ "@deepseek-ai/dsh-commands": "^0.1.2-alpha.2",
63
+ "@deepseek-ai/dsh-goal": "^0.1.2-alpha.2",
64
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
65
+ "@deepseek-ai/cordis": "^4.0.2",
66
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
67
+ "@deepseek-ai/dsh-typert-protocol": "^0.1.2-alpha.2",
68
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.2-alpha.2",
69
+ "@deepseek-ai/dsh-client-locale": "^0.1.2-alpha.2",
70
+ "@deepseek-ai/dsh-client-test-runtime": "^0.1.2-alpha.2"
74
71
  },
75
72
  "files": [
76
73
  "lib/index.js",