dsh-plugin-dev-kb 1.0.2 → 1.0.4

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.
Files changed (144) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/kb/README.md +1 -1
  3. package/kb/extra/cookbook/adding-a-vendored-package.zh.md +3 -3
  4. package/kb/extra/cookbook/maintaining-dsh-code-review.zh.md +1 -1
  5. package/kb/extra/cookbook/responding-to-pr-review-on-a-stack.zh.md +1 -1
  6. package/kb/extra/defensive-patterns.zh.md +3 -1
  7. package/kb/extra/development.zh.md +15 -9
  8. package/kb/extra/event-producer-consumer.md +5 -2
  9. package/kb/extra/event-producer-consumer.zh.md +5 -2
  10. package/kb/extra/graph-atlas.zh.md +7 -7
  11. package/kb/extra/i18n/README.md +3 -3
  12. package/kb/extra/i18n/README.zh.md +9 -7
  13. package/kb/extra/i18n/style-samples.md +1 -1
  14. package/kb/extra/i18n/translation-prompt.md +3 -3
  15. package/kb/extra/i18n/translation-rules.md +2 -2
  16. package/kb/extra/i18n/translation-rules.zh.md +3 -3
  17. package/kb/extra/module-graph.md +18 -9
  18. package/kb/extra/module-graph.zh.md +18 -9
  19. package/kb/extra/postmortem/0001-acp-default-export-drops-inject.zh.md +1 -1
  20. package/kb/extra/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +1 -1
  21. package/kb/extra/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +1 -1
  22. package/kb/extra/postmortem/README.zh.md +5 -5
  23. package/kb/extra/rescope.zh.md +1 -1
  24. package/kb/extra/subsystems/agent-team.md +2 -2
  25. package/kb/extra/subsystems/agent-team.zh.md +6 -6
  26. package/kb/extra/subsystems/attachment.md +63 -12
  27. package/kb/extra/subsystems/attachment.zh.md +63 -12
  28. package/kb/extra/subsystems/extensions.md +9 -9
  29. package/kb/extra/subsystems/extensions.zh.md +12 -12
  30. package/kb/extra/subsystems/feedback.md +2 -2
  31. package/kb/extra/subsystems/feedback.zh.md +2 -2
  32. package/kb/extra/testing.md +1 -1
  33. package/kb/extra/testing.zh.md +7 -7
  34. package/kb/extra/web-styling.zh.md +2 -2
  35. package/kb/meta/search-index.json +132 -132
  36. package/kb/meta/source.json +2 -2
  37. package/kb/meta/topics.md +2 -2
  38. package/kb/site/develop/basic/index.md +1 -1
  39. package/kb/site/develop/basic/publish.md +3 -3
  40. package/kb/site/develop/cordis-tutorial/index.md +1 -1
  41. package/kb/site/en/reference/capability-seams.md +5 -0
  42. package/kb/site/en/reference/config-catalog.md +52 -17
  43. package/kb/site/en/reference/persistence-catalog.md +1 -1
  44. package/kb/site/en/reference/subsystems/approval.md +3 -3
  45. package/kb/site/en/reference/subsystems/client-modules.md +7 -7
  46. package/kb/site/en/reference/subsystems/code-runtime.md +2 -2
  47. package/kb/site/en/reference/subsystems/commands.md +3 -3
  48. package/kb/site/en/reference/subsystems/compaction.md +3 -3
  49. package/kb/site/en/reference/subsystems/core.md +19 -19
  50. package/kb/site/en/reference/subsystems/credentials.md +163 -8
  51. package/kb/site/en/reference/subsystems/filesystem.md +5 -5
  52. package/kb/site/en/reference/subsystems/goal.md +3 -3
  53. package/kb/site/en/reference/subsystems/invariants.md +2 -2
  54. package/kb/site/en/reference/subsystems/jobs.md +2 -2
  55. package/kb/site/en/reference/subsystems/llm-streaming.md +16 -4
  56. package/kb/site/en/reference/subsystems/lsp.md +2 -2
  57. package/kb/site/en/reference/subsystems/permission-presets.md +2 -2
  58. package/kb/site/en/reference/subsystems/persistence.md +2 -2
  59. package/kb/site/en/reference/subsystems/plan.md +2 -2
  60. package/kb/site/en/reference/subsystems/sandbox.md +3 -3
  61. package/kb/site/en/reference/subsystems/session-projection.md +60 -35
  62. package/kb/site/en/reference/subsystems/session-query.md +2 -2
  63. package/kb/site/en/reference/subsystems/session-reference.md +3 -3
  64. package/kb/site/en/reference/subsystems/session-telemetry.md +3 -3
  65. package/kb/site/en/reference/subsystems/session-title.md +2 -2
  66. package/kb/site/en/reference/subsystems/session.md +6 -6
  67. package/kb/site/en/reference/subsystems/settings.md +4 -4
  68. package/kb/site/en/reference/subsystems/shell.md +3 -3
  69. package/kb/site/en/reference/subsystems/skills.md +3 -3
  70. package/kb/site/en/reference/subsystems/spill.md +2 -2
  71. package/kb/site/en/reference/subsystems/storage.md +4 -4
  72. package/kb/site/en/reference/subsystems/subagent.md +6 -6
  73. package/kb/site/en/reference/subsystems/subprocess.md +3 -3
  74. package/kb/site/en/reference/subsystems/system-prompt.md +4 -4
  75. package/kb/site/en/reference/subsystems/terminal.md +2 -2
  76. package/kb/site/en/reference/subsystems/token-meter.md +2 -2
  77. package/kb/site/en/reference/subsystems/tools.md +8 -8
  78. package/kb/site/en/reference/subsystems/typert.md +4 -4
  79. package/kb/site/en/reference/subsystems/user-questions.md +2 -2
  80. package/kb/site/en/reference/subsystems/web-server.md +46 -6
  81. package/kb/site/en/reference/subsystems/web.md +2 -2
  82. package/kb/site/en/reference/subsystems/workflow.md +8 -8
  83. package/kb/site/en/reference/subsystems/workspace.md +3 -3
  84. package/kb/site/en/reference/tool-catalog.md +3 -3
  85. package/kb/site/guide/providers.md +2 -2
  86. package/kb/site/guide/python-sdk.md +2 -2
  87. package/kb/site/guide/quickstart.md +2 -2
  88. package/kb/site/reference/capability-seams.md +5 -0
  89. package/kb/site/reference/config-catalog.md +53 -18
  90. package/kb/site/reference/cookbook/adding-a-conversation-node.md +1 -1
  91. package/kb/site/reference/cookbook/adding-a-package.md +5 -3
  92. package/kb/site/reference/cookbook/adding-a-settings-card.md +1 -1
  93. package/kb/site/reference/cookbook/adding-a-tool.md +6 -6
  94. package/kb/site/reference/cookbook/adding-an-llm-adapter.md +2 -2
  95. package/kb/site/reference/cookbook/extension-cookbook.md +6 -4
  96. package/kb/site/reference/index.md +4 -4
  97. package/kb/site/reference/persistence-catalog.md +5 -5
  98. package/kb/site/reference/subsystems/approval.md +3 -3
  99. package/kb/site/reference/subsystems/client-modules.md +8 -8
  100. package/kb/site/reference/subsystems/code-runtime.md +4 -4
  101. package/kb/site/reference/subsystems/commands.md +5 -5
  102. package/kb/site/reference/subsystems/compaction.md +7 -7
  103. package/kb/site/reference/subsystems/core.md +26 -24
  104. package/kb/site/reference/subsystems/credentials.md +163 -8
  105. package/kb/site/reference/subsystems/filesystem.md +6 -6
  106. package/kb/site/reference/subsystems/goal.md +5 -5
  107. package/kb/site/reference/subsystems/index.md +5 -5
  108. package/kb/site/reference/subsystems/invariants.md +5 -5
  109. package/kb/site/reference/subsystems/jobs.md +4 -4
  110. package/kb/site/reference/subsystems/llm-streaming.md +21 -9
  111. package/kb/site/reference/subsystems/lsp.md +3 -3
  112. package/kb/site/reference/subsystems/permission-presets.md +3 -3
  113. package/kb/site/reference/subsystems/persistence.md +6 -6
  114. package/kb/site/reference/subsystems/plan.md +4 -4
  115. package/kb/site/reference/subsystems/sandbox.md +7 -5
  116. package/kb/site/reference/subsystems/schedule.md +1 -1
  117. package/kb/site/reference/subsystems/scope.md +1 -1
  118. package/kb/site/reference/subsystems/session-projection.md +61 -36
  119. package/kb/site/reference/subsystems/session-query.md +2 -2
  120. package/kb/site/reference/subsystems/session-reference.md +3 -3
  121. package/kb/site/reference/subsystems/session-telemetry.md +5 -5
  122. package/kb/site/reference/subsystems/session-title.md +2 -2
  123. package/kb/site/reference/subsystems/session.md +13 -11
  124. package/kb/site/reference/subsystems/settings.md +4 -4
  125. package/kb/site/reference/subsystems/shell.md +6 -6
  126. package/kb/site/reference/subsystems/skills.md +3 -3
  127. package/kb/site/reference/subsystems/spill.md +3 -3
  128. package/kb/site/reference/subsystems/storage.md +7 -7
  129. package/kb/site/reference/subsystems/subagent.md +11 -9
  130. package/kb/site/reference/subsystems/subprocess.md +4 -4
  131. package/kb/site/reference/subsystems/system-prompt.md +5 -5
  132. package/kb/site/reference/subsystems/terminal.md +3 -3
  133. package/kb/site/reference/subsystems/token-meter.md +2 -2
  134. package/kb/site/reference/subsystems/tools.md +9 -9
  135. package/kb/site/reference/subsystems/typert.md +5 -5
  136. package/kb/site/reference/subsystems/user-questions.md +2 -2
  137. package/kb/site/reference/subsystems/web-server.md +48 -8
  138. package/kb/site/reference/subsystems/web.md +3 -3
  139. package/kb/site/reference/subsystems/workflow.md +11 -11
  140. package/kb/site/reference/subsystems/workspace.md +5 -5
  141. package/kb/site/reference/tool-catalog.md +9 -5
  142. package/lib/index.js +9 -1
  143. package/package.json +2 -1
  144. package/skills/dsh-plugin-dev-kb.md +1 -1
@@ -164,7 +164,7 @@ Provider selection, probing, caching, and backend-specific enforcement reports b
164
164
 
165
165
  ## Cordis API
166
166
 
167
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
167
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
168
168
 
169
169
  <a id="ctxsandbox--sandboxprovider-abstract-seam"></a>
170
170
 
@@ -187,7 +187,7 @@ Abstract process-sandbox service. confine must return enforcing argv or fail clo
187
187
  abstract confine(argv: readonly string[], policy: SandboxPolicy): ConfinedArgv
188
188
  ```
189
189
 
190
- Source: [`packages/sandbox/sandbox/src/index.ts:158`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox/src/index.ts)
190
+ Source: [`packages/sandbox/sandbox/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox/src/index.ts)
191
191
 
192
192
  <a id="ctxsandboxpolicy--sandboxpolicyservice"></a>
193
193
 
@@ -217,5 +217,5 @@ overrideOf(session: Session): SandboxMode | undefined
217
217
 
218
218
  Types: [Session](./session.md)
219
219
 
220
- Source: [`packages/sandbox/sandbox-policy/src/index.ts:91`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox-policy/src/index.ts)
220
+ Source: [`packages/sandbox/sandbox-policy/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/sandbox/sandbox-policy/src/index.ts)
221
221
  <!-- END GENERATED cordis-surface -->
@@ -11,27 +11,30 @@ Source: [`packages/session/session-projection/src/index.ts`](https://github.com/
11
11
 
12
12
  ## The unit
13
13
 
14
- `SessionProjectionMap` is the merge-extensible type table for the whole chain (host unit, wire block, client hook); values are wire-JSON whole values, and rendering belongs to the slot system, never this layer. A domain contributes one `ProjectionDefinition` per key:
14
+ `SessionProjectionStateMap` is the merge-extensible table of host fold states, while `SessionProjectionMap` retains the client-visible whole values. A domain contributes one `ProjectionDefinition` per state key; a `wire` block makes that key client-visible, and rendering belongs to the slot system, never this layer:
15
15
 
16
16
  ```ts type-equiv
17
17
  /**
18
- * One domain's state-driven computation unit: three pure synchronous
19
- * functions plus declarations — never an opaque getter. The framework drives
18
+ * One domain's state-driven computation unit: a pure synchronous fold plus
19
+ * declarations and an optional client view — never an opaque getter. The framework drives
20
20
  * `apply` on every committed session event; the domain holds no
21
- * subscriptions and owns only the mathematics. All three functions MUST be
22
- * synchronous (an async unit would tear the carriers' consistency cut) and
21
+ * subscriptions and owns only the computation. All functions MUST be
22
+ * synchronous (an async unit would tear the carriers' consistency cut), and
23
23
  * `state` MUST be plain JSON (the persisted-cache precondition).
24
24
  */
25
- interface ProjectionDefinition<K extends keyof SessionProjectionMap, S> {
26
- /** The projection key this unit owns (its `SessionProjectionMap` entry). */
25
+ interface ProjectionDefinition<
26
+ K extends keyof SessionProjectionStateMap,
27
+ S extends SessionProjectionStateMap[K] = SessionProjectionStateMap[K],
28
+ > {
29
+ /** The projection key this unit owns (its `SessionProjectionStateMap` entry). */
27
30
  key: K
28
- /** Validates the wire payload (`view` output) before it leaves the host. */
29
- schema: ZodType<SessionProjectionMap[K]>
31
+ /** Validates persisted state before it seeds a fold. */
32
+ stateSchema: ZodType<S>
30
33
  /**
31
34
  * State for the empty log.
32
35
  * @returns the initial state.
33
36
  */
34
- init(): S
37
+ init(): NoInfer<S>
35
38
  /**
36
39
  * Pure transition: previous state + one committed event → next state. A
37
40
  * unit uninterested in an event MUST return the same state reference — an
@@ -40,13 +43,18 @@ interface ProjectionDefinition<K extends keyof SessionProjectionMap, S> {
40
43
  * @param event - the next committed session event.
41
44
  * @returns the next state (same reference when the event is not the unit's).
42
45
  */
43
- apply(state: S, event: SessionEvent): S
44
- /**
45
- * State wire payload (the read-side projection).
46
- * @param state - the current state.
47
- * @returns the whole current value for this unit's key.
48
- */
49
- view(state: S): SessionProjectionMap[K]
46
+ apply(state: NoInfer<S>, event: SessionEvent): NoInfer<S>
47
+ /** Client view. Omit for host-only units. */
48
+ wire?: K extends keyof SessionProjectionMap ? {
49
+ /** Validates the wire payload before it leaves the host. */
50
+ viewSchema: ZodType<SessionProjectionMap[K]>
51
+ /**
52
+ * State → wire payload (the read-side projection).
53
+ * @param state - the current state.
54
+ * @returns the whole current value for this unit's key.
55
+ */
56
+ view(state: NoInfer<S>): SessionProjectionMap[K]
57
+ } : never
50
58
  /**
51
59
  * Persisted-cache invalidation version: bump whenever the serialized state fields or the
52
60
  * fold semantics change, so persisted `(sessionId, key, ver, seq, val)`
@@ -63,14 +71,14 @@ The whole-value event rule is load-bearing: a state-carrying log event carries t
63
71
 
64
72
  ```ts type-equiv
65
73
  /**
66
- * One consistent read cut over every registered unit for one session.
74
+ * One consistent read cut over every registered client-visible unit for one session.
67
75
  * `asOfSeq` is the shared watermark — the seq of the last event every value
68
76
  * reflects (`-1` for an empty log, mirroring `session/subscribed.lastSeq`).
69
77
  */
70
78
  interface ProjectionSnapshot {
71
79
  /** Seq of the last event the values reflect; -1 for an empty log. */
72
80
  asOfSeq: number
73
- /** Whole current value per registered key. */
81
+ /** Whole current client value per registered key. */
74
82
  values: Partial<SessionProjectionMap>
75
83
  }
76
84
  ```
@@ -89,7 +97,7 @@ type ProjectionChangeListener = (
89
97
  ) => void
90
98
  ```
91
99
 
92
- `snapshot(session)` is fully synchronous: a carrier reads it in the same tick as its page slice, so `asOfSeq` covers both reads at one sequence number. Every value passes its unit's schema before return; an accidentally async `view` returns a Promise, which schema validation rejects. The change feed fires once per unit whose state *reference* changed for each committed event; `apply` must return the same reference when its state did not change.
100
+ `snapshot(session)` is fully synchronous: a carrier reads it in the same tick as its page slice, so `asOfSeq` covers both reads at one sequence number. It returns only client views, and every value passes its unit's `viewSchema` before return. `stateOf(session, key)` reads one live host state without computing unrelated views; callers must not mutate the borrowed reference. The change feed fires once per client-visible unit whose state *reference* changed for each committed event; `apply` must return the same reference when its state did not change.
93
101
 
94
102
  ## The registry: `ctx.sessionProjections`
95
103
 
@@ -101,7 +109,7 @@ type ProjectionChangeListener = (
101
109
 
102
110
  ## Cordis API
103
111
 
104
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
112
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
105
113
 
106
114
  <a id="ctxsessionprojectioncache--sessionprojectioncache"></a>
107
115
 
@@ -151,13 +159,13 @@ async coldSnapshot(id: SessionId, signal?: AbortSignal): Promise<ProjectionSnaps
151
159
 
152
160
  Types: [Session](./session.md) · [SessionHeader](./persistence.md) · [SessionId](./core.md)
153
161
 
154
- Source: [`packages/session/session-projection-cache/src/index.ts:71`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-projection-cache/src/index.ts)
162
+ Source: [`packages/session/session-projection-cache/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-projection-cache/src/index.ts)
155
163
 
156
164
  <a id="ctxsessionprojections--sessionprojectionregistry"></a>
157
165
 
158
166
  ### `ctx.sessionProjections` — `SessionProjectionRegistry`
159
167
 
160
- `ctx.sessionProjections`: the projection unit table and its drive. The service subscribes to `session/event` once; every committed event passes every registered unit's `apply` (eager drive), and a changed state reference notifies the change feed with the schema-validated view. Cells build lazily — a unit registered after events flowed, or a session older than the registry, folds `init` over the in-memory log on first touch (event or read). Registration is an effect (disposer rides the calling fiber): an unloaded domain plugin's key disappears from snapshots and clients read it as capability absence. Domain plugins register under `ctx.inject(['sessionProjections'], …)` so headless assemblies without the registry stay unaffected. Registrants sharing a key share one unit and are counted: the same tool package mounted in N agent presets registers N times, and the key survives until the last one unloads.
168
+ `ctx.sessionProjections`: the projection unit table and its drive. The service subscribes to `session/event` once; every committed event passes every registered unit's `apply` (eager drive), and a changed state reference in a client-visible unit notifies the change feed with the schema-validated view. Cells build lazily — a unit registered after events flowed, or a session older than the registry, folds `init` over the in-memory log on first touch (event or read). Registration is an effect (disposer rides the calling fiber): an unloaded domain plugin's key disappears from snapshots and clients read it as capability absence. Domain plugins register under `ctx.inject(['sessionProjections'], …)` so headless assemblies without the registry stay unaffected. Registrants sharing a key share one unit and are counted: the same tool package mounted in N agent presets registers N times, and the key survives until the last one unloads.
161
169
 
162
170
  ```ts cordis-catalog
163
171
  /**
@@ -168,28 +176,45 @@ Source: [`packages/session/session-projection-cache/src/index.ts:71`](https://gi
168
176
  * @param definition - key, state schema, pure unit functions, and stateVersion.
169
177
  * @returns the exact disposer that unregisters this unit.
170
178
  */
171
- register<K extends keyof SessionProjectionMap, S>(definition: ProjectionDefinition<K, S>): () => void
179
+ register< K extends keyof SessionProjectionMap, S extends SessionProjectionStateMap[K], >( definition: Omit<ProjectionDefinition<K, S>, 'wire'> & { wire: NonNullable<ProjectionDefinition<K, S>['wire']> }, ): () => void
180
+
181
+ /**
182
+ * Register one host-only unit. Its state is omitted from client snapshots
183
+ * and always checkpointed like every other unit.
184
+ * @param definition - key, state schema, pure unit functions, and stateVersion.
185
+ * @returns the exact disposer that unregisters this unit.
186
+ */
187
+ register< K extends Exclude<keyof SessionProjectionStateMap, keyof SessionProjectionMap>, S extends SessionProjectionStateMap[K], >( definition: Omit<ProjectionDefinition<K, S>, 'wire'>, ): () => void
172
188
 
173
189
  /**
174
190
  * Subscribe to the change feed. The registration is an effect on the
175
191
  * calling context's fiber.
176
- * @param listener - called once per unit whose state reference changed, per committed event.
192
+ * @param listener - called once per client-visible unit whose state reference changed, per committed event.
177
193
  * @returns the exact disposer that unsubscribes.
178
194
  */
179
195
  onChanged(listener: ProjectionChangeListener): () => void
180
196
 
181
197
  /**
182
- * One consistent cut over every registered unit for one session, read from
198
+ * Read one unit's current host state without computing unrelated views.
199
+ * The returned value is live; callers must not mutate it.
200
+ * @param session - the session whose state is read.
201
+ * @param key - the registered unit key.
202
+ * @returns current state, or `undefined` when the key is not registered.
203
+ */
204
+ stateOf<K extends keyof SessionProjectionStateMap>( session: Session, key: K, ): SessionProjectionStateMap[K] | undefined
205
+
206
+ /**
207
+ * One consistent cut over every registered client-visible unit for one session, read from
183
208
  * the watermark cache (missing cells fold lazily over the in-memory log).
184
209
  * Fully synchronous — every value and `asOfSeq` reflect the same log
185
- * position. Each value passes its unit's schema before leaving.
210
+ * position. Each value passes its unit's `viewSchema` before leaving.
186
211
  * @param session - the session whose projection values are read.
187
- * @returns the snapshot; `values` is empty when no unit is registered.
212
+ * @returns the snapshot; `values` is empty when no client-visible unit is registered.
188
213
  */
189
214
  snapshot(session: Session): ProjectionSnapshot
190
215
 
191
216
  /**
192
- * State-level checkpoint of every registered unit for one session, read
217
+ * State-level checkpoint of every persisted unit for one session, read
193
218
  * from the watermark cache (missing cells fold lazily over the in-memory
194
219
  * log). This is the write side of the persisted projection cache: the
195
220
  * returned rows are the `(key → {ver, seq, val})` part of the durable
@@ -200,7 +225,7 @@ snapshot(session: Session): ProjectionSnapshot
200
225
  * every subsequent snapshot and frame through it (plain JSON by the unit
201
226
  * contract, so the clone is total).
202
227
  * @param session - the session whose unit states are checkpointed.
203
- * @returns one row per registered key; empty when no unit is registered.
228
+ * @returns one row per registered key.
204
229
  */
205
230
  checkpoint(session: Session): ProjectionCheckpoint
206
231
 
@@ -224,8 +249,8 @@ restoreFloor(checkpoint: ProjectionCheckpoint): number | undefined
224
249
 
225
250
  /**
226
251
  * View a checkpoint's rows without any log read: for every registered
227
- * unit whose row's `ver` matches, serve the schema-validated
228
- * `view` of the stored state; mismatched or absent rows leave their key
252
+ * client-visible unit whose row's `ver` matches, serve the schema-validated
253
+ * `view` of the schema-validated stored state; mismatched, malformed, or absent rows leave their key
229
254
  * absent (a cold or listing consumer treats it as not-yet-available and a
230
255
  * fuller read path refolds it). The zero-I/O rung of the read ladder —
231
256
  * values are as stale as their rows, never wrong.
@@ -235,7 +260,7 @@ restoreFloor(checkpoint: ProjectionCheckpoint): number | undefined
235
260
  viewCheckpoint(checkpoint: ProjectionCheckpoint): Partial<SessionProjectionMap>
236
261
 
237
262
  /**
238
- * Cold read: fold every registered unit over a stored log suffix, seeding
263
+ * Cold read: fold every persisted unit over a stored log suffix, seeding
239
264
  * each from its checkpoint row when usable — the one read recipe (cached
240
265
  * state + forward tail replay + `view`) applied without a live `Session`.
241
266
  * Call with the events returned by a persistence
@@ -256,10 +281,10 @@ viewCheckpoint(checkpoint: ProjectionCheckpoint): Partial<SessionProjectionMap>
256
281
  * supplied event's seq, `baseSeq - 1` for an empty tail) plus the
257
282
  * refreshed checkpoint rows at that cut, ready for a durable write-back.
258
283
  */
259
- restore(checkpoint: ProjectionCheckpoint, events: readonly SessionEvent[], baseSeq: number): { snapshot: ProjectionSnapshot; checkpoint: ProjectionCheckpoint }
284
+ restore( checkpoint: ProjectionCheckpoint, events: readonly SessionEvent[], baseSeq: number, ): { snapshot: ProjectionSnapshot; checkpoint: ProjectionCheckpoint }
260
285
  ```
261
286
 
262
287
  Types: [Session](./session.md) · [SessionEvent](./session.md)
263
288
 
264
- Source: [`packages/session/session-projection/src/index.ts:171`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-projection/src/index.ts)
289
+ Source: [`packages/session/session-projection/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-projection/src/index.ts)
265
290
  <!-- END GENERATED cordis-surface -->
@@ -365,7 +365,7 @@ type SessionQueryErrorCode =
365
365
 
366
366
  ## Cordis API
367
367
 
368
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
368
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
369
369
 
370
370
  <a id="ctxsessionquery--sessionqueryengine-abstract-seam"></a>
371
371
 
@@ -494,5 +494,5 @@ async readEvent(request: SessionEventReadRequest, signal?: AbortSignal): Promise
494
494
 
495
495
  Types: [SessionId](./core.md) · [SessionTitleSnapshot](./session-title.md)
496
496
 
497
- Source: [`packages/session-query/session-query/src/index.ts:81`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session-query/session-query/src/index.ts)
497
+ Source: [`packages/session-query/session-query/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session-query/session-query/src/index.ts)
498
498
  <!-- END GENERATED cordis-surface -->
@@ -99,7 +99,7 @@ type SessionReferenceErrorCode =
99
99
 
100
100
  ## Cordis API
101
101
 
102
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
102
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
103
103
 
104
104
  <a id="ctxfilereferences--filereferenceservice-abstract-seam"></a>
105
105
 
@@ -130,7 +130,7 @@ abstract list( agent: Agent, query: string, signal: AbortSignal, ): Promise<File
130
130
 
131
131
  Types: [Agent](./core.md)
132
132
 
133
- Source: [`packages/context/file-reference/src/index.ts:27`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/file-reference/src/index.ts)
133
+ Source: [`packages/context/file-reference/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/file-reference/src/index.ts)
134
134
 
135
135
  <a id="ctxsessionreferenceresolver--sessionreferenceresolver"></a>
136
136
 
@@ -173,5 +173,5 @@ async prepare( agent: Agent, content: ContentBlock[], references: SessionReferen
173
173
 
174
174
  Types: [Agent](./core.md) · [ContentBlock](./llm-streaming.md)
175
175
 
176
- Source: [`packages/context/session-reference/src/index.ts:75`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/session-reference/src/index.ts)
176
+ Source: [`packages/context/session-reference/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/context/session-reference/src/index.ts)
177
177
  <!-- END GENERATED cordis-surface -->
@@ -134,7 +134,7 @@ Every record passes the `session-telemetry/record` [waterfall](../cordis-primer.
134
134
 
135
135
  ## Cordis API
136
136
 
137
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
137
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
138
138
 
139
139
  <a id="ctxsessiontelemetry--sessiontelemetrybackend-abstract-seam"></a>
140
140
 
@@ -159,7 +159,7 @@ flush?(): void
159
159
  abstract shutdown(): Promise<void>
160
160
  ```
161
161
 
162
- Source: [`packages/session/session-telemetry/src/index.ts:148`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry/src/index.ts)
162
+ Source: [`packages/session/session-telemetry/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry/src/index.ts)
163
163
 
164
164
  <a id="session-telemetry-events"></a>
165
165
 
@@ -193,5 +193,5 @@ Transform one outbound record before it reaches the backend. This waterfall is t
193
193
  'session-telemetry/record'(record: SessionTelemetryRecord, next: () => SessionTelemetryRecord): SessionTelemetryRecord
194
194
  ```
195
195
 
196
- Source: [`packages/session/session-telemetry/src/index.ts:43`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry/src/index.ts)
196
+ Source: [`packages/session/session-telemetry/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-telemetry/src/index.ts)
197
197
  <!-- END GENERATED cordis-surface -->
@@ -154,7 +154,7 @@ interface SessionTitleProvider {
154
154
 
155
155
  ## Cordis API
156
156
 
157
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
157
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
158
158
 
159
159
  <a id="ctxsessiontitle--sessiontitleservice"></a>
160
160
 
@@ -203,5 +203,5 @@ register(provider: SessionTitleProvider): () => Promise<void>
203
203
 
204
204
  Types: [Session](./session.md)
205
205
 
206
- Source: [`packages/session/session-title/src/index.ts:261`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title/src/index.ts)
206
+ Source: [`packages/session/session-title/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/session/session-title/src/index.ts)
207
207
  <!-- END GENERATED cordis-surface -->
@@ -617,7 +617,7 @@ The backends that consume this contract are on [persistence.md](./persistence.md
617
617
 
618
618
  ## Cordis API
619
619
 
620
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
620
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
621
621
 
622
622
  <a id="ctxsessions--sessionstore"></a>
623
623
 
@@ -753,7 +753,7 @@ fork(source: SessionForkSource, boundary?: number, childSessionId?: SessionId):
753
753
 
754
754
  Types: [CreateSessionOptions](./persistence.md) · [PrepareSessionOptions](./persistence.md) · [SessionId](./core.md)
755
755
 
756
- Source: [`packages/core/session/src/index.ts:792`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
756
+ Source: [`packages/core/session/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
757
757
 
758
758
  <a id="session-events"></a>
759
759
 
@@ -782,7 +782,7 @@ Creation announcement during session publication. A synchronous throw vetoes and
782
782
 
783
783
  Types: [Scoped](./scope.md)
784
784
 
785
- Source: [`packages/core/session/src/index.ts:54`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
785
+ Source: [`packages/core/session/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
786
786
 
787
787
  <a id="sessiondisposed--emit"></a>
788
788
 
@@ -805,7 +805,7 @@ Emitted once when an announced session leaves the store, including publication r
805
805
 
806
806
  Types: [Scoped](./scope.md)
807
807
 
808
- Source: [`packages/core/session/src/index.ts:64`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
808
+ Source: [`packages/core/session/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
809
809
 
810
810
  <a id="sessionevent--emit"></a>
811
811
 
@@ -830,7 +830,7 @@ Post-commit, fire-and-forget append feed. The listener snapshot resolves before
830
830
 
831
831
  Types: [Scoped](./scope.md)
832
832
 
833
- Source: [`packages/core/session/src/index.ts:76`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
833
+ Source: [`packages/core/session/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
834
834
 
835
835
  <a id="sessionflush--parallel"></a>
836
836
 
@@ -852,5 +852,5 @@ Awaited parallel durability checkpoint: every listener runs and the caller await
852
852
 
853
853
  Types: [Scoped](./scope.md)
854
854
 
855
- Source: [`packages/core/session/src/index.ts:85`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
855
+ Source: [`packages/core/session/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/core/session/src/index.ts)
856
856
  <!-- END GENERATED cordis-surface -->
@@ -170,7 +170,7 @@ type SettingsUpdateSource = 'update' | 'provider'
170
170
 
171
171
  ## Cordis API
172
172
 
173
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
173
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
174
174
 
175
175
  <a id="ctxsettings--settingsprovider-abstract-seam"></a>
176
176
 
@@ -255,7 +255,7 @@ async replace(ns: SettingsNamespace, section: object, expectedRevision?: number)
255
255
  async mutate(ns: SettingsNamespace, ops: readonly SettingsPathOp[], expectedRevision?: number): Promise<void>
256
256
  ```
257
257
 
258
- Source: [`packages/settings/settings/src/index.ts:350`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/index.ts)
258
+ Source: [`packages/settings/settings/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/index.ts)
259
259
 
260
260
  <a id="settings-events"></a>
261
261
 
@@ -282,7 +282,7 @@ One registered namespace's RAW user section changed, whether or not the resolved
282
282
  'settings/document-updated'(ns: SettingsNamespace, revision: number): void
283
283
  ```
284
284
 
285
- Source: [`packages/settings/settings/src/types.ts:48`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/types.ts)
285
+ Source: [`packages/settings/settings/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/types.ts)
286
286
 
287
287
  <a id="settingsupdated--emit"></a>
288
288
 
@@ -309,5 +309,5 @@ Committed change to one registered namespace's resolved value. Emitted after the
309
309
  'settings/updated'(ns: SettingsNamespace, next: unknown, prev: unknown, source: SettingsUpdateSource): void
310
310
  ```
311
311
 
312
- Source: [`packages/settings/settings/src/types.ts:35`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/types.ts)
312
+ Source: [`packages/settings/settings/src/types.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/settings/settings/src/types.ts)
313
313
  <!-- END GENERATED cordis-surface -->
@@ -229,7 +229,7 @@ interface ShellProcessRead {
229
229
 
230
230
  ## Cordis API
231
231
 
232
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
232
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
233
233
 
234
234
  <a id="ctxshell--shellexecutor-abstract-seam"></a>
235
235
 
@@ -269,7 +269,7 @@ abstract run(spec: ShellExecSpec): Promise<ShellRunResult>
269
269
  abstract start(spec: ShellExecSpec): ShellProcess
270
270
  ```
271
271
 
272
- Source: [`packages/shell/shell/src/index.ts:65`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/shell/src/index.ts)
272
+ Source: [`packages/shell/shell/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/shell/src/index.ts)
273
273
 
274
274
  <a id="ctxshellenv--shellenvregistry"></a>
275
275
 
@@ -302,5 +302,5 @@ list(): BashEnvVariableInfo[]
302
302
 
303
303
  Types: [DshEnvironment](./subprocess.md) · [ToolExecution](./tools.md)
304
304
 
305
- Source: [`packages/shell/shell-env/src/index.ts:89`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/shell-env/src/index.ts)
305
+ Source: [`packages/shell/shell-env/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/shell/shell-env/src/index.ts)
306
306
  <!-- END GENERATED cordis-surface -->
@@ -243,7 +243,7 @@ The model-facing `skill({ name })` tool validates the kebab-case name, finds the
243
243
 
244
244
  ## Cordis API
245
245
 
246
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
246
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
247
247
 
248
248
  <a id="ctxskills--skillregistry"></a>
249
249
 
@@ -307,7 +307,7 @@ async snapshot(options: SkillViewOptions = {}): Promise<SkillCatalogSnapshot>
307
307
  async get(name: string, options: SkillViewOptions = {}): Promise<SkillDefinition | undefined>
308
308
  ```
309
309
 
310
- Source: [`packages/skill/skill/src/index.ts:357`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/skill/skill/src/index.ts)
310
+ Source: [`packages/skill/skill/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/skill/skill/src/index.ts)
311
311
 
312
312
  <a id="skills-events"></a>
313
313
 
@@ -330,5 +330,5 @@ A skill provider, runtime contribution, or provider-backed catalog may have chan
330
330
  'skills/change'(): void
331
331
  ```
332
332
 
333
- Source: [`packages/skill/skill/src/index.ts:297`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/skill/skill/src/index.ts)
333
+ Source: [`packages/skill/skill/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/skill/skill/src/index.ts)
334
334
  <!-- END GENERATED cordis-surface -->
@@ -93,7 +93,7 @@ The local backend ([dsh-spill-local](https://github.com/deepseek-ai/deepseek-har
93
93
 
94
94
  ## Cordis API
95
95
 
96
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
96
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
97
97
 
98
98
  <a id="ctxspillstore--spillstore-abstract-seam"></a>
99
99
 
@@ -116,5 +116,5 @@ Semantics every implementation must honor:
116
116
  abstract saveText(input: SaveTextSpill): Promise<SpillRef>
117
117
  ```
118
118
 
119
- Source: [`packages/spill/spill/src/index.ts:45`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/spill/spill/src/index.ts)
119
+ Source: [`packages/spill/spill/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/spill/spill/src/index.ts)
120
120
  <!-- END GENERATED cordis-surface -->
@@ -133,7 +133,7 @@ type DomainChanged = DomainChangedPut | DomainChangedDeleted
133
133
 
134
134
  ## Cordis API
135
135
 
136
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
136
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
137
137
 
138
138
  <a id="ctxstorage--storage"></a>
139
139
 
@@ -159,7 +159,7 @@ mount<K extends keyof StorageForms>(form: K, facility: StorageForms[K]): () => v
159
159
  form<K extends keyof StorageForms>(form: K): StorageForms[K]
160
160
  ```
161
161
 
162
- Source: [`packages/storage/storage/src/index.ts:47`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage/src/index.ts)
162
+ Source: [`packages/storage/storage/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage/src/index.ts)
163
163
 
164
164
  <a id="ctxstoragedomain--domainfacility"></a>
165
165
 
@@ -204,7 +204,7 @@ get(name: string): DomainImpl | undefined
204
204
  async closeAll(): Promise<void>
205
205
  ```
206
206
 
207
- Source: [`packages/storage/storage-domain/src/index.ts:69`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage-domain/src/index.ts)
207
+ Source: [`packages/storage/storage-domain/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage-domain/src/index.ts)
208
208
 
209
209
  <a id="domain-events"></a>
210
210
 
@@ -228,5 +228,5 @@ A domain record or the global singleton changed, emitted once per write strictly
228
228
  'domain/changed'(change: DomainChanged): void
229
229
  ```
230
230
 
231
- Source: [`packages/storage/storage-domain/src/events.ts:46`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage-domain/src/events.ts)
231
+ Source: [`packages/storage/storage-domain/src/events.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/storage/storage-domain/src/events.ts)
232
232
  <!-- END GENERATED cordis-surface -->
@@ -483,7 +483,7 @@ The spawn and fork backends create an ordinary one-shot agent through `parent.ct
483
483
 
484
484
  ## Cordis API
485
485
 
486
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
486
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
487
487
 
488
488
  <a id="ctxsubagents--subagentruntime"></a>
489
489
 
@@ -668,7 +668,7 @@ async start(name: string, request: SubagentStartRequest): Promise<SubagentRun>
668
668
 
669
669
  Types: [Agent](./core.md) · [ContentBlock](./llm-streaming.md) · [MessageId](./llm-streaming.md) · [SessionId](./core.md)
670
670
 
671
- Source: [`packages/subagent/subagent/src/index.ts:171`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
671
+ Source: [`packages/subagent/subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
672
672
 
673
673
  <a id="subagent-events"></a>
674
674
 
@@ -694,7 +694,7 @@ A published child settled. Scope-filtered dispatch uses the same delegating pare
694
694
 
695
695
  Types: [Scoped](./scope.md)
696
696
 
697
- Source: [`packages/subagent/subagent/src/index.ts:166`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
697
+ Source: [`packages/subagent/subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
698
698
 
699
699
  <a id="subagentprovider-added--emit"></a>
700
700
 
@@ -711,7 +711,7 @@ A provider became resolvable in the registry.
711
711
  'subagent/provider-added'(provider: SubagentProvider): void
712
712
  ```
713
713
 
714
- Source: [`packages/subagent/subagent/src/index.ts:140`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
714
+ Source: [`packages/subagent/subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
715
715
 
716
716
  <a id="subagentprovider-removed--emit"></a>
717
717
 
@@ -728,7 +728,7 @@ A provider left the registry. Accepted runs remain holder-owned.
728
728
  'subagent/provider-removed'(name: string): void
729
729
  ```
730
730
 
731
- Source: [`packages/subagent/subagent/src/index.ts:146`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
731
+ Source: [`packages/subagent/subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
732
732
 
733
733
  <a id="subagentstart--emit"></a>
734
734
 
@@ -752,5 +752,5 @@ A provider established a published child. For in-process providers, `ctx.agents.
752
752
 
753
753
  Types: [Scoped](./scope.md)
754
754
 
755
- Source: [`packages/subagent/subagent/src/index.ts:157`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
755
+ Source: [`packages/subagent/subagent/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subagent/subagent/src/index.ts)
756
756
  <!-- END GENERATED cordis-surface -->
@@ -257,7 +257,7 @@ The abstract [`SubprocessRuntime`](https://github.com/deepseek-ai/deepseek-harne
257
257
 
258
258
  ## Cordis API
259
259
 
260
- Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — this section is byte-identical in both language sides of the page. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
260
+ Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
261
261
 
262
262
  <a id="ctxe2b--e2bruntime"></a>
263
263
 
@@ -274,7 +274,7 @@ Creates one lazily consumable E2B SDK handle and deletes the sandbox at timeout
274
274
  async getSandbox(): Promise<Sandbox>
275
275
  ```
276
276
 
277
- Source: [`packages/e2b/e2b/src/index.ts:74`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/e2b/e2b/src/index.ts)
277
+ Source: [`packages/e2b/e2b/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/e2b/e2b/src/index.ts)
278
278
 
279
279
  <a id="ctxsubprocess--subprocessruntime-abstract-seam"></a>
280
280
 
@@ -323,5 +323,5 @@ abstract spawn(spec: SubprocessSpawnSpec): SubprocessHandle
323
323
  abstract spawnTerminal(spec: SubprocessTerminalSpawnSpec): Promise<SubprocessTerminalHandle>
324
324
  ```
325
325
 
326
- Source: [`packages/subprocess/subprocess/src/index.ts:102`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subprocess/subprocess/src/index.ts)
326
+ Source: [`packages/subprocess/subprocess/src/index.ts`](https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/subprocess/subprocess/src/index.ts)
327
327
  <!-- END GENERATED cordis-surface -->