@deepseek-ai/dsh-session-stats 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/session/session-stats/README.md
5
- README.md: 81b0de17e335b67936afd6fb11f15411beee3b76
6
- README.zh.md: 606628ea09bc34203a5374e49db62c1646293846
5
+ README.md: fd5120de49f98c1d74cb7e07689a1474d20c54fa
6
+ README.zh.md: 6278fdbca593a3f624e9877f565fc4f1c569dc10
package/README.md CHANGED
@@ -1,39 +1,132 @@
1
+ ---
2
+ description: "Whole-log conversation counts and wall times for clients and maintainers choosing, composing, or debugging the sessionStats projection unit."
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-session-stats
2
7
 
3
8
  English | [中文](README.zh.md)
4
9
 
5
- Function plugin registering the `sessionStats` projection unit: whole-log conversation figures — turn/step counts and the LLM, tool, first-token, and decode wall times — folded from step boundaries, stream chunks, tool pairs, and assembled assistant messages, and served through the session-projection seam (registry snapshot, change feed, and every projection carrier: history tail page, `session/projection` push frames, session list rows). Clients render full-session figures that paging and compaction cannot change; the reference consumer is the web chat stats strip, whose window fold mirrors these field names as its no-unit fallback.
10
+ ## Summary
11
+
12
+ `dsh-session-stats` serves whole-log conversation figures — turn and step counts plus LLM, tool, first-token, and decode wall times — as the `sessionStats` projection unit. Clients read the figures from the registry's snapshot and change feed, and paging or compaction cannot change them because they fold from the complete durable log. Choose it in compositions that already mount the projection registry, such as the web chat bundle whose stats strip is the reference consumer; assemblies without the registry are unaffected and their consumers fall back to window-scoped counting. Setup and field semantics come first; the fold internals live in a collapsible developer section below.
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
+ -----
6
24
 
7
- ## Fold semantics
25
+ <a id="use-this-package"></a>
26
+ ## Use this package
8
27
 
9
- - `steps` counts `step/end` events. The agent loop appends exactly one per entered step, in a `finally`, so completed, failed, cancelled, and max-tokens steps all count. Counting assembled assistant messages instead would overcount max-tokens usage-host messages (empty content, excluded from the surface) and undercount cancelled steps (aborted before the message assembles).
10
- - `turns` counts distinct turns carrying at least one closed step; rejected or empty turns (closed with no step) are uncounted. Turn numbers are host-assigned and monotonic per session, so the fold keeps only the last counted turn.
11
- - `llmMs` sums `step/start` → `assistant/message` per step that assembled a message (retry waits inside the step are model time, as in the window fold).
12
- - `ttftMs`/`ttftSteps` sum and count `step/start` → first non-empty delta chunk; the first attempt's boundary survives an in-step `llm/retry` (window `resetForRetry` parity).
13
- - `decodeMs`/`decodeTokens` sum first token → assembled message and the provider-reported output tokens, only over steps carrying both.
14
- - `toolMs` sums `tool/call` → `tool/result` pairs matched by callId; unresolved calls are dropped at `turn/end` (results land within their turn).
15
- - Every field is 0 until its first contributing event. A composed registry always serves the key, so clients read the value, never key presence.
28
+ Mount the plugin beside the session store and the projection registry when clients should display whole-session conversation figures that survive paging and compaction. The unit registers only when the registry is present.
16
29
 
17
- ## Composition
30
+ ### Composition
18
31
 
19
32
  ```yaml
20
- - id: session-stats
21
- name: '@deepseek-ai/dsh-session-stats'
33
+ - name: '@deepseek-ai/dsh-session'
34
+ - name: '@deepseek-ai/dsh-session-projection'
35
+ - name: '@deepseek-ai/dsh-session-stats'
22
36
  ```
23
37
 
24
- Injects `sessionProjections` the plugin's whole purpose; in assemblies without the registry the fiber stays pending and nothing registers.
38
+ ### What the figures mean
39
+
40
+ | Field | Meaning |
41
+ |---|---|
42
+ | `turns` | Distinct turns with at least one closed step; rejected or empty turns are uncounted |
43
+ | `steps` | Closed steps — completed, failed, cancelled, and max-tokens steps all count |
44
+ | `llmMs` | Summed model wall time over steps that assembled a message |
45
+ | `toolMs` | Summed matched `tool/call` → `tool/result` wall time |
46
+ | `ttftMs` / `ttftSteps` | Summed first-token latency and the steps carrying it |
47
+ | `decodeMs` / `decodeTokens` | Summed decode wall time and provider output tokens over usage-reporting steps |
48
+
49
+ Every field is 0 until its first contributing event; the composed registry always serves the key, so clients read the value rather than key presence. Clients render whole-log figures through the projection seam's snapshot and change feed; the reference consumer is the web chat stats strip, whose window fold mirrors these field names as its no-unit fallback.
50
+
51
+ ### Failures and recovery
52
+
53
+ The unit is inert without the projection registry: `inject` keeps the fiber pending and nothing registers, so other assemblies lack the `sessionStats` key. Unmounting the plugin removes the key, because registrations are effects on the mounting fiber. A crash-interrupted step counts after the session reloads, when crash recovery appends its synthetic `step/end`.
54
+
55
+ -----
56
+
57
+ <a id="understand-the-implementation"></a>
58
+ ## Understand the implementation
59
+
60
+ <details>
61
+ <summary>Implementation internals — click to expand</summary>
62
+
63
+ This section explains the fold behind the figures; the observable behavior is fully covered in [Use this package](#use-this-package).
64
+
65
+ ### Design concept
66
+
67
+ The unit is a pure fold over committed session events: `step/end` is the counted step event because the agent loop appends exactly one per entered step in a `finally`, so completed, failed, cancelled, and max-tokens steps all land one. Counting assembled assistant messages instead would overcount max-tokens usage-host messages (empty content, excluded from the surface) and undercount cancelled steps (aborted before the message assembles). The wall-time folds mirror the client window fold field by field.
68
+
69
+ ### Source map
70
+
71
+ | File | Role |
72
+ |---|---|
73
+ | [`src/index.ts`](src/index.ts) | Plugin entry: `inject`, unit registration on the mounting fiber |
74
+ | [`src/projection.ts`](src/projection.ts) | The fold: state shape, per-event transitions, wire view |
75
+ | [`src/types.ts`](src/types.ts) | One home of the `sessionStats` projection-key declaration and field types |
25
76
 
77
+ ### Data model
78
+
79
+ The fold state holds the eight totals plus in-flight boundaries: `lastTurn` (turn of the last counted `step/end`), `openStep` (the open step's boundary facts, closed by its `assistant/message`), and `pendingCalls` (tool dispatch times by callId). The wire view is a strict subset — the eight totals — so the persisted-cache state schema extends the view schema with the boundary fields.
80
+
81
+ ### Fold rules
82
+
83
+ - Uninteresting events return the same state reference; the registry's `Object.is` gate keeps the change feed quiet.
84
+ - First-token latency records the first non-empty delta chunk and survives an in-step `llm/retry`.
85
+ - Decode time and tokens accrue only over steps carrying both a first token and a valid provider usage report; malformed usage is ignored like the window fold guards node usage.
86
+ - Tool time pairs `tool/call` → `tool/result` by callId; unresolved calls are dropped at `turn/end` because results land within their turn, and a callId colliding with an `Object` prototype name reads as unmatched.
87
+
88
+ </details>
89
+
90
+ -----
91
+
92
+ <a id="further-exploration"></a>
93
+ ## Further Exploration
94
+
95
+ Read these pages when the unit's contract is not enough. They move from the registry that drives units to adjacent session packages.
96
+
97
+ - [Session projection subsystem](../../../docs/subsystems/session-projection.md) — the registry that drives units and serves snapshot and change-feed values.
98
+ - [Session projection registry package](../session-projection/README.md) — the registry contract units register against.
99
+ - [Session package map](../README.md) — adjacent persistence, projection, title, and telemetry packages.
100
+
101
+ -----
102
+
103
+ <a id="model-experience"></a>
26
104
  ## Model Experience
27
105
 
28
- None, as the plugin only computes a client-facing read model of already-logged session events and touches no prompt, message, schema, stream, or tool result.
106
+ None, as the sessionStats unit folds already-logged step boundaries into a client-facing read model and registers nothing model-facing.
29
107
 
30
108
  #### KV Cache effect
31
109
 
32
- None; the plugin never assembles or sends provider requests.
110
+ None; the package never assembles or sends provider requests.
33
111
 
34
112
  ## Known Limitations and Deferred Work
35
113
 
36
- - **Steps count work attempted, not visible output** — a step that failed before producing any visible content still closed with `step/end` and counts; a step interrupted by a crash counts after the session reloads, when crash recovery appends its synthetic `step/end` (`interruptedTurnClosers` in dsh-session).
37
- - **A cancelled step is counted but untimed** — no assistant message assembles, so its partial stream time enters no wall-time figure, matching the window fold's untimed interrupted node; a max-tokens usage-host message conversely contributes model time the surface does not show.
114
+ <a id="known-limitations-and-deferred-work"></a>
115
+
116
+
117
+ These limits define what the figures describe and when the unit is absent. They are current package constraints.
118
+
119
+ - **Steps count work attempted, not visible output** — a step that failed before producing visible content still closes with `step/end` and counts; a step interrupted by a crash counts after the session reloads, when crash recovery appends its synthetic `step/end`.
120
+ - **A cancelled step is counted but untimed** — no assistant message assembles, so its partial stream time enters no wall-time figure; a max-tokens usage-host message conversely contributes model time the surface does not show.
38
121
  - **Counts are log-scoped, not surface-scoped** — steps whose messages were later compacted away stay counted; the figures describe the whole session, not the current model-visible surface.
39
- - **Mounted only in the web-app bundle** — other assemblies serve no `sessionStats` key, and their consumers fall back to window-scoped counting (the web stats strip's fallback path).
122
+ - **Mounted only where the projection registry is composed** — other assemblies serve no `sessionStats` key, and their consumers fall back to window-scoped counting.
123
+
124
+ <a id="dev-note"></a>
125
+ ### Dev Note
126
+
127
+ <details>
128
+ <summary>Working context for maintainers — click to expand</summary>
129
+
130
+ None.
131
+
132
+ </details>
package/README.zh.md CHANGED
@@ -1,39 +1,132 @@
1
+ ---
2
+ description: "面向客户端与维护者的全日志会话计数与墙钟时间说明,用于选择、组合或排查 sessionStats 投影单元。"
3
+ kind: "package-reference"
4
+ ---
5
+
1
6
  # @deepseek-ai/dsh-session-stats
2
7
 
3
8
  [English](README.md) | 中文
4
9
 
5
- 注册 `sessionStats` projection 单元的函数插件:从步边界、流式 chunk、工具配对与已组装的 assistant 消息折叠出全日志会话数字——轮/步计数以及 LLM、工具、首 token、解码墙钟时间——经 session-projection 缝对外提供(registry 快照、变更流,以及每一个 projection 载体:history 尾页、`session/projection` 推送帧、会话列表行)。客户端由此渲染分页与压缩都无法改变的全会话数字;参考消费者是 Web 聊天统计条,其窗口折叠以相同字段名充当无单元时的回退。
10
+ ## 概述
11
+
12
+ `dsh-session-stats` 提供全日志会话数字——轮/步计数以及 LLM、工具、首 token、解码墙钟时间——以 `sessionStats` 投影单元的形式对外提供。客户端从注册表的快照与变更流中读取数字,且由于它们从完整持久日志折叠而来,分页或压缩都无法改变它们。在已挂载投影注册表的组合中选择它,例如 Web 聊天包(其统计条是参考消费者);没有注册表的装配不受影响,其消费者回退到窗口口径计数。设置与字段语义在前;折叠内部细节放在下方可折叠的开发者章节中。
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
+ -----
6
24
 
7
- ## 折叠语义
25
+ <a id="use-this-package"></a>
26
+ ## 使用本包
8
27
 
9
- - `steps` 统计 `step/end` 事件。agent loop 对每个进入的步在 `finally` 中恰好追加一条,因此完成、失败、取消、max-tokens 的步全部计入。若改按已组装的 assistant 消息计数,则会多算 max-tokens 的 usage 宿主消息(空内容、被排除在 surface 之外),并少算被取消的步(在消息组装前已中止)。
10
- - `turns` 统计含至少一个已关闭步的不同 turn;被拒绝或空轮(未进入任何步即关闭)不计。turn 号由宿主分配、按会话单调递增,因此折叠只需保留最近计入的 turn。
11
- - `llmMs` 按步累加 `step/start` → `assistant/message`(组装出消息的步;步内重试的等待与窗口折叠一样计入模型时间)。
12
- - `ttftMs`/`ttftSteps` 累加并统计 `step/start` → 首个非空 delta chunk;首次尝试的边界在步内 `llm/retry` 后保留(与窗口 `resetForRetry` 对齐)。
13
- - `decodeMs`/`decodeTokens` 累加首 token → 已组装消息的时长与提供方上报的输出 token,仅统计两者兼备的步。
14
- - `toolMs` 按 callId 配对累加 `tool/call` → `tool/result`;未解决的调用在 `turn/end` 时丢弃(结果总在其轮内落地)。
15
- - 每个字段在首个贡献事件之前均为 0。已装配的 registry 恒提供该键,客户端读取值本身,而非键的存在性。
28
+ 当客户端需要显示不受分页与压缩影响的全会话数字时,在会话存储与投影注册表旁挂载此插件。只有存在注册表时单元才会注册。
16
29
 
17
- ## 组合
30
+ ### 组合
18
31
 
19
32
  ```yaml
20
- - id: session-stats
21
- name: '@deepseek-ai/dsh-session-stats'
33
+ - name: '@deepseek-ai/dsh-session'
34
+ - name: '@deepseek-ai/dsh-session-projection'
35
+ - name: '@deepseek-ai/dsh-session-stats'
22
36
  ```
23
37
 
24
- 注入 `sessionProjections`——这是插件的全部用途;在没有 registry 的装配中 fiber 保持挂起,不注册任何内容。
38
+ ### 各字段含义
39
+
40
+ | 字段 | 含义 |
41
+ |---|---|
42
+ | `turns` | 含至少一个已关闭步的不同轮次;被拒绝或空轮不计 |
43
+ | `steps` | 已关闭的步——完成、失败、取消与 max-tokens 的步全部计入 |
44
+ | `llmMs` | 组装出消息的步的模型墙钟时间之和 |
45
+ | `toolMs` | 匹配的 `tool/call` → `tool/result` 墙钟时间之和 |
46
+ | `ttftMs` / `ttftSteps` | 首 token 延迟之和及其承载步数 |
47
+ | `decodeMs` / `decodeTokens` | 上报用量的步的解码墙钟时间与提供方输出 token 之和 |
48
+
49
+ 每个字段在首个贡献事件之前均为 0;已装配的注册表恒提供该键,因此客户端读取值本身,而非键的存在性。客户端通过投影 seam 的快照与变更流渲染全日志数字;参考消费者是 Web 聊天统计条,其窗口折叠以相同字段名充当无单元时的回退。
50
+
51
+ ### 失败与恢复
52
+
53
+ 没有投影注册表时单元是惰性的:`inject` 使 fiber 保持挂起,不注册任何内容,因此其他装配缺少 `sessionStats` 键。卸载插件会移除该键,因为注册是挂载 fiber 上的 effect。被崩溃打断的步在会话重新加载后计入,届时崩溃恢复补写合成的 `step/end`。
54
+
55
+ -----
56
+
57
+ <a id="understand-the-implementation"></a>
58
+ ## 理解实现
59
+
60
+ <details>
61
+ <summary>实现细节——点击展开</summary>
62
+
63
+ 本节解释数字背后的折叠;可观察行为已在[使用本包](#use-this-package)中完整说明。
64
+
65
+ ### 设计理念
66
+
67
+ 该单元是对已提交会话事件的纯折叠:`step/end` 是被计数的步事件,因为 agent loop 对每个进入的步在 `finally` 中恰好追加一条,因此完成、失败、取消与 max-tokens 的步都会落地一条。若改按已组装的 assistant 消息计数,则会多算 max-tokens 的 usage 宿主消息(空内容、被排除在 surface 之外),并少算被取消的步(在消息组装前已中止)。墙钟折叠逐字段对齐客户端窗口折叠。
68
+
69
+ ### 源码地图
70
+
71
+ | 文件 | 职责 |
72
+ |---|---|
73
+ | [`src/index.ts`](src/index.ts) | 插件入口:`inject`、在挂载 fiber 上注册单元 |
74
+ | [`src/projection.ts`](src/projection.ts) | 折叠:状态形状、逐事件转换、wire 视图 |
75
+ | [`src/types.ts`](src/types.ts) | `sessionStats` 投影键声明与字段类型的唯一归属 |
25
76
 
77
+ ### 数据模型
78
+
79
+ 折叠状态保存八个总计外加进行中的边界:`lastTurn`(最近一次被计数 `step/end` 的轮次)、`openStep`(打开步的边界事实,由其 `assistant/message` 关闭)与 `pendingCalls`(按 callId 记录的工具分发时间)。wire 视图是严格子集——八个总计——因此持久缓存的状态 schema 以边界字段扩展视图 schema。
80
+
81
+ ### 折叠规则
82
+
83
+ - 不相关事件返回同一状态引用;注册表的 `Object.is` 门禁保持变更流安静。
84
+ - 首 token 延迟记录首个非空 delta chunk,并在步内 `llm/retry` 后保留。
85
+ - 解码时间与 token 只在同时携带首 token 与有效提供方用量报告的步上累加;与窗口折叠守卫节点用量一样忽略畸形用量。
86
+ - 工具时间按 callId 配对 `tool/call` → `tool/result`;未解决的调用在 `turn/end` 时丢弃,因为结果总在其轮内落地,而撞上 `Object` 原型名的 callId 读作未匹配。
87
+
88
+ </details>
89
+
90
+ -----
91
+
92
+ <a id="further-exploration"></a>
93
+ ## 进一步探索
94
+
95
+ 当单元约定不够用时阅读以下页面。它们从驱动单元的注册表逐步进入相邻的会话包。
96
+
97
+ - [会话投影子系统](../../../docs/subsystems/session-projection.zh.md)——驱动单元并提供快照与变更流值的注册表。
98
+ - [会话投影注册表包](../session-projection/README.zh.md)——单元注册所依据的注册表约定。
99
+ - [会话包映射](../README.zh.md)——相邻的持久化、投影、标题与遥测包。
100
+
101
+ -----
102
+
103
+ <a id="model-experience"></a>
26
104
  ## 模型体验
27
105
 
28
- 无,因为插件只计算面向客户端的、由已写入日志的会话事件派生的读模型,不触碰任何提示词、消息、schema、流或工具结果。
106
+ 无,因为 sessionStats 单元把已写入日志的步边界折叠成面向客户端的读模型,不注册任何面向模型的内容。
29
107
 
30
108
  #### KV Cache 影响
31
109
 
32
- 无;插件从不组装或发送提供方请求。
110
+ 无;本包从不组装或发送提供方请求。
111
+
112
+ ## 已知限制与延期工作
113
+
114
+ <a id="known-limitations-and-deferred-work"></a>
115
+
33
116
 
34
- ## 已知局限与延后工作
117
+ 这些限制说明数字描述什么、单元何时缺失。它们是当前包约束。
35
118
 
36
- - **步数统计的是已发生的工作,而非可见输出**——在产生任何可见内容前就失败的步仍以 `step/end` 关闭并计入;被崩溃打断的步在会话重新加载后计入,届时崩溃恢复为其补写合成的 `step/end`(dsh-session 的 `interruptedTurnClosers`)。
37
- - **被取消的步计数但不计时**——没有组装出 assistant 消息,其部分流式时间不进入任何墙钟数字,与窗口折叠的无计时 interrupted 节点一致;反之 max-tokens 的 usage 宿主消息贡献 surface 上看不到的模型时间。
119
+ - **步数统计的是已发生的工作,而非可见输出**——在产生任何可见内容前就失败的步仍以 `step/end` 关闭并计入;被崩溃打断的步在会话重新加载后计入,届时崩溃恢复补写合成的 `step/end`。
120
+ - **被取消的步计数但不计时**——没有组装出 assistant 消息,其部分流式时间不进入任何墙钟数字;反之 max-tokens 的 usage 宿主消息贡献 surface 上看不到的模型时间。
38
121
  - **计数是日志口径,不是 surface 口径**——消息后来被压缩掉的步仍然计入;数字描述整个会话,而非当前模型可见 surface。
39
- - **仅挂载于 web-app bundle**——其他装配不提供 `sessionStats` 键,其消费者回退到窗口口径计数(Web 统计条的回退路径)。
122
+ - **仅在组合了投影注册表时挂载**——其他装配不提供 `sessionStats` 键,其消费者回退到窗口口径计数。
123
+
124
+ <a id="dev-note"></a>
125
+ ### 开发备注
126
+
127
+ <details>
128
+ <summary>维护者的工作上下文——点击展开</summary>
129
+
130
+ 无。
131
+
132
+ </details>
package/lib/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { z } from "zod";
2
- import { isTokenDelta } from "@deepseek-ai/dsh-llm/message";
3
2
  //#region lib/types/projection.js
4
3
  /**
5
4
  * The `sessionStats` projection unit: a pure fold of step boundaries, stream
@@ -25,6 +24,15 @@ import { isTokenDelta } from "@deepseek-ai/dsh-llm/message";
25
24
  *
26
25
  * @module @deepseek-ai/dsh-session-stats/projection
27
26
  */
27
+ /** Whether a stream chunk carries a non-empty first-token delta. */
28
+ function isTokenDelta(chunk) {
29
+ switch (chunk.type) {
30
+ case "text-delta":
31
+ case "reasoning-delta": return chunk.text !== "";
32
+ case "tool-call-delta": return chunk.argumentsDelta !== "" || chunk.name !== void 0;
33
+ default: return false;
34
+ }
35
+ }
28
36
  const sessionStatsSchema = z.object({
29
37
  turns: z.number().int().nonnegative(),
30
38
  steps: z.number().int().nonnegative(),
@@ -23,7 +23,19 @@
23
23
  * @module @deepseek-ai/dsh-session-stats/projection
24
24
  */
25
25
  import { z } from 'zod';
26
- import { isTokenDelta } from '@deepseek-ai/dsh-llm/message';
26
+ /* jscpd:ignore-start -- Session Stats owns its whole-log timing projection independently. */
27
+ /** Whether a stream chunk carries a non-empty first-token delta. */
28
+ function isTokenDelta(chunk) {
29
+ switch (chunk.type) {
30
+ case 'text-delta':
31
+ case 'reasoning-delta':
32
+ return chunk.text !== '';
33
+ case 'tool-call-delta':
34
+ return chunk.argumentsDelta !== '' || chunk.name !== undefined;
35
+ default:
36
+ return false;
37
+ }
38
+ }
27
39
  const sessionStatsSchema = z.object({
28
40
  turns: z.number().int().nonnegative(),
29
41
  steps: z.number().int().nonnegative(),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh-session-stats",
3
3
  "description": "Whole-log conversation counts and wall times projection (sessionStats) for the DeepSeek Harness",
4
- "version": "0.1.1-rc.2",
4
+ "version": "0.1.2-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -41,22 +41,22 @@
41
41
  ],
42
42
  "license": "MIT",
43
43
  "peerDependencies": {
44
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
45
- "@deepseek-ai/dsh-session": "^0.1.1-rc.2",
46
- "@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
47
- "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2",
48
- "@deepseek-ai/cordis": "^4.0.1"
44
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
45
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
46
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
47
+ "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.2",
48
+ "@deepseek-ai/cordis": "^4.0.2"
49
49
  },
50
50
  "dependencies": {
51
51
  "zod": "^4.4.3"
52
52
  },
53
53
  "devDependencies": {
54
- "@deepseek-ai/cordis-plugin-include": "^1.0.6",
55
- "@deepseek-ai/cordis-plugin-loader": "^1.0.2",
56
- "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
57
- "@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
58
- "@deepseek-ai/dsh-session": "^0.1.1-rc.2",
59
- "@deepseek-ai/dsh-session-projection": "^0.1.1-rc.2",
60
- "@deepseek-ai/cordis": "^4.0.1"
54
+ "@deepseek-ai/cordis-plugin-include": "^1.0.7",
55
+ "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
56
+ "@deepseek-ai/dsh-invariants": "^0.1.2-alpha.2",
57
+ "@deepseek-ai/dsh-llm": "^0.1.2-alpha.2",
58
+ "@deepseek-ai/dsh-session": "^0.1.2-alpha.2",
59
+ "@deepseek-ai/dsh-session-projection": "^0.1.2-alpha.2",
60
+ "@deepseek-ai/cordis": "^4.0.2"
61
61
  }
62
62
  }