better-dsh 0.2.3-e → 0.2.3-g

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 (270) hide show
  1. package/docs/50_test-reports/2026-09-13-preact-ui-shell/345/256/236/346/265/213/346/212/245/345/221/212.md +1 -1
  2. package/docs/50_test-reports/2026-09-14-4999-skill/346/270/205/345/215/225/344/270/216lsp-gate/345/256/236/346/265/213/346/212/245/345/221/212.md +54 -0
  3. package/docs/specs/agent/spec.md +54 -0
  4. package/docs/specs/ast/spec.md +34 -0
  5. package/docs/specs/compaction-recall/spec.md +46 -0
  6. package/docs/specs/ctx/spec.md +107 -0
  7. package/docs/specs/dsh/spec.md +47 -0
  8. package/docs/specs/dvc/spec.md +87 -0
  9. package/docs/specs/escalation-guidance/spec.md +44 -0
  10. package/docs/specs/fs-scheme-resolution/spec.md +37 -0
  11. package/docs/specs/hash-edit/spec.md +41 -0
  12. package/docs/specs/http-read/spec.md +73 -0
  13. package/docs/specs/kernel-provisioning/spec.md +53 -0
  14. package/docs/specs/lsp/spec.md +121 -0
  15. package/docs/specs/mobile-layout/spec.md +108 -0
  16. package/docs/specs/model-failover/spec.md +20 -0
  17. package/docs/specs/preact-ui-shell/spec.md +22 -0
  18. package/docs/specs/repl-dispatch-resilience/spec.md +21 -0
  19. package/docs/specs/skill/spec.md +58 -0
  20. package/docs/specs/tool-surface/spec.md +222 -0
  21. package/docs/specs/url-schema/spec.md +148 -0
  22. package/docs/specs/web-trust-fence/spec.md +43 -0
  23. package/dsh-docs/AGENTS.md +75 -0
  24. package/dsh-docs/agent-lifecycle.md +84 -0
  25. package/dsh-docs/agent-lifecycle.zh.md +86 -0
  26. package/dsh-docs/api-gateway.md +164 -0
  27. package/dsh-docs/api-gateway.zh.md +164 -0
  28. package/dsh-docs/architecture.md +150 -0
  29. package/dsh-docs/architecture.zh.md +154 -0
  30. package/dsh-docs/capability-seams.md +543 -0
  31. package/dsh-docs/capability-seams.zh.md +545 -0
  32. package/dsh-docs/config-catalog.md +3473 -0
  33. package/dsh-docs/config-catalog.zh.md +3474 -0
  34. package/dsh-docs/cookbook/adding-a-package.md +117 -0
  35. package/dsh-docs/cookbook/adding-a-package.zh.md +119 -0
  36. package/dsh-docs/cookbook/adding-a-remote-api.md +197 -0
  37. package/dsh-docs/cookbook/adding-a-remote-api.zh.md +197 -0
  38. package/dsh-docs/cookbook/adding-a-settings-card.md +102 -0
  39. package/dsh-docs/cookbook/adding-a-settings-card.zh.md +102 -0
  40. package/dsh-docs/cookbook/adding-a-tool.md +101 -0
  41. package/dsh-docs/cookbook/adding-a-tool.zh.md +103 -0
  42. package/dsh-docs/cookbook/adding-a-vendored-package.md +59 -0
  43. package/dsh-docs/cookbook/adding-a-vendored-package.zh.md +59 -0
  44. package/dsh-docs/cookbook/adding-an-llm-adapter.md +43 -0
  45. package/dsh-docs/cookbook/adding-an-llm-adapter.zh.md +43 -0
  46. package/dsh-docs/cookbook/extension-cookbook.md +132 -0
  47. package/dsh-docs/cookbook/extension-cookbook.zh.md +136 -0
  48. package/dsh-docs/cookbook/maintaining-dsh-code-review.md +64 -0
  49. package/dsh-docs/cookbook/maintaining-dsh-code-review.zh.md +64 -0
  50. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.md +32 -0
  51. package/dsh-docs/cookbook/responding-to-pr-review-on-a-stack.zh.md +32 -0
  52. package/dsh-docs/cordis-api/context.md +364 -0
  53. package/dsh-docs/cordis-api/context.zh.md +366 -0
  54. package/dsh-docs/cordis-api/events.md +207 -0
  55. package/dsh-docs/cordis-api/events.zh.md +209 -0
  56. package/dsh-docs/cordis-api/fiber.md +375 -0
  57. package/dsh-docs/cordis-api/fiber.zh.md +377 -0
  58. package/dsh-docs/cordis-api/inherited.md +39 -0
  59. package/dsh-docs/cordis-api/registry.md +152 -0
  60. package/dsh-docs/cordis-api/registry.zh.md +154 -0
  61. package/dsh-docs/cordis-api/service.md +102 -0
  62. package/dsh-docs/cordis-api/service.zh.md +104 -0
  63. package/dsh-docs/cordis-primer.md +45 -0
  64. package/dsh-docs/cordis-primer.zh.md +51 -0
  65. package/dsh-docs/cordis-tutorial/01-first-plugin.md +95 -0
  66. package/dsh-docs/cordis-tutorial/01-first-plugin.zh.md +95 -0
  67. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.md +98 -0
  68. package/dsh-docs/cordis-tutorial/02-lifecycle-and-effects.zh.md +98 -0
  69. package/dsh-docs/cordis-tutorial/03-services.md +98 -0
  70. package/dsh-docs/cordis-tutorial/03-services.zh.md +98 -0
  71. package/dsh-docs/cordis-tutorial/04-events.md +144 -0
  72. package/dsh-docs/cordis-tutorial/04-events.zh.md +144 -0
  73. package/dsh-docs/cordis-tutorial/05-config.md +84 -0
  74. package/dsh-docs/cordis-tutorial/05-config.zh.md +84 -0
  75. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.md +113 -0
  76. package/dsh-docs/cordis-tutorial/06-composition-and-hmr.zh.md +113 -0
  77. package/dsh-docs/cordis-tutorial/07-into-the-harness.md +108 -0
  78. package/dsh-docs/cordis-tutorial/07-into-the-harness.zh.md +108 -0
  79. package/dsh-docs/cordis-tutorial/index.md +60 -0
  80. package/dsh-docs/cordis-tutorial/index.zh.md +62 -0
  81. package/dsh-docs/deepseek-llm-api-wire-extensions.md +163 -0
  82. package/dsh-docs/deepseek-llm-api-wire-extensions.zh.md +163 -0
  83. package/dsh-docs/defensive-patterns.md +33 -0
  84. package/dsh-docs/defensive-patterns.zh.md +35 -0
  85. package/dsh-docs/development.md +167 -0
  86. package/dsh-docs/development.zh.md +173 -0
  87. package/dsh-docs/event-producer-consumer.md +86 -0
  88. package/dsh-docs/event-producer-consumer.zh.md +88 -0
  89. package/dsh-docs/glossary.md +45 -0
  90. package/dsh-docs/glossary.zh.md +45 -0
  91. package/dsh-docs/graph-atlas.md +22 -0
  92. package/dsh-docs/graph-atlas.zh.md +24 -0
  93. package/dsh-docs/i18n/README.md +60 -0
  94. package/dsh-docs/i18n/README.zh.md +62 -0
  95. package/dsh-docs/i18n/style-samples.md +87 -0
  96. package/dsh-docs/i18n/terminology.md +214 -0
  97. package/dsh-docs/i18n/translation-prompt.md +263 -0
  98. package/dsh-docs/i18n/translation-rules.md +69 -0
  99. package/dsh-docs/i18n/translation-rules.zh.md +69 -0
  100. package/dsh-docs/module-graph.md +1411 -0
  101. package/dsh-docs/module-graph.zh.md +1413 -0
  102. package/dsh-docs/persistence-catalog.md +1075 -0
  103. package/dsh-docs/persistence-catalog.zh.md +1077 -0
  104. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.md +113 -0
  105. package/dsh-docs/postmortem/0001-acp-default-export-drops-inject.zh.md +113 -0
  106. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.md +47 -0
  107. package/dsh-docs/postmortem/0002-js-expression-disabled-filesystem-tools.zh.md +47 -0
  108. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.md +53 -0
  109. package/dsh-docs/postmortem/0003-web-agent-gui-feedback-loop.zh.md +53 -0
  110. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.md +55 -0
  111. package/dsh-docs/postmortem/0004-landlock-partial-notice-misclassified-child-failures.zh.md +55 -0
  112. package/dsh-docs/postmortem/README.md +18 -0
  113. package/dsh-docs/postmortem/README.zh.md +18 -0
  114. package/dsh-docs/rescope.md +53 -0
  115. package/dsh-docs/rescope.zh.md +53 -0
  116. package/dsh-docs/subsystems/README.md +61 -0
  117. package/dsh-docs/subsystems/README.zh.md +61 -0
  118. package/dsh-docs/subsystems/agent-team.md +207 -0
  119. package/dsh-docs/subsystems/agent-team.zh.md +207 -0
  120. package/dsh-docs/subsystems/approval.md +170 -0
  121. package/dsh-docs/subsystems/approval.zh.md +170 -0
  122. package/dsh-docs/subsystems/attachment.md +351 -0
  123. package/dsh-docs/subsystems/attachment.zh.md +351 -0
  124. package/dsh-docs/subsystems/client-modules.md +168 -0
  125. package/dsh-docs/subsystems/client-modules.zh.md +168 -0
  126. package/dsh-docs/subsystems/code-runtime.md +195 -0
  127. package/dsh-docs/subsystems/code-runtime.zh.md +195 -0
  128. package/dsh-docs/subsystems/commands.md +219 -0
  129. package/dsh-docs/subsystems/commands.zh.md +219 -0
  130. package/dsh-docs/subsystems/compaction.md +238 -0
  131. package/dsh-docs/subsystems/compaction.zh.md +238 -0
  132. package/dsh-docs/subsystems/conversation.md +258 -0
  133. package/dsh-docs/subsystems/conversation.zh.md +258 -0
  134. package/dsh-docs/subsystems/core.md +1209 -0
  135. package/dsh-docs/subsystems/core.zh.md +1219 -0
  136. package/dsh-docs/subsystems/credentials.md +329 -0
  137. package/dsh-docs/subsystems/credentials.zh.md +329 -0
  138. package/dsh-docs/subsystems/extensions.md +382 -0
  139. package/dsh-docs/subsystems/extensions.zh.md +382 -0
  140. package/dsh-docs/subsystems/feedback.md +266 -0
  141. package/dsh-docs/subsystems/feedback.zh.md +266 -0
  142. package/dsh-docs/subsystems/filesystem.md +505 -0
  143. package/dsh-docs/subsystems/filesystem.zh.md +505 -0
  144. package/dsh-docs/subsystems/goal.md +277 -0
  145. package/dsh-docs/subsystems/goal.zh.md +277 -0
  146. package/dsh-docs/subsystems/invariants.md +88 -0
  147. package/dsh-docs/subsystems/invariants.zh.md +88 -0
  148. package/dsh-docs/subsystems/jobs.md +290 -0
  149. package/dsh-docs/subsystems/jobs.zh.md +290 -0
  150. package/dsh-docs/subsystems/llm-streaming.md +1080 -0
  151. package/dsh-docs/subsystems/llm-streaming.zh.md +1086 -0
  152. package/dsh-docs/subsystems/lsp.md +202 -0
  153. package/dsh-docs/subsystems/lsp.zh.md +202 -0
  154. package/dsh-docs/subsystems/permission-presets.md +131 -0
  155. package/dsh-docs/subsystems/permission-presets.zh.md +131 -0
  156. package/dsh-docs/subsystems/persistence.md +395 -0
  157. package/dsh-docs/subsystems/persistence.zh.md +395 -0
  158. package/dsh-docs/subsystems/plan.md +87 -0
  159. package/dsh-docs/subsystems/plan.zh.md +87 -0
  160. package/dsh-docs/subsystems/sandbox.md +220 -0
  161. package/dsh-docs/subsystems/sandbox.zh.md +220 -0
  162. package/dsh-docs/subsystems/schedule.md +192 -0
  163. package/dsh-docs/subsystems/schedule.zh.md +192 -0
  164. package/dsh-docs/subsystems/scope.md +59 -0
  165. package/dsh-docs/subsystems/scope.zh.md +59 -0
  166. package/dsh-docs/subsystems/session-projection.md +354 -0
  167. package/dsh-docs/subsystems/session-projection.zh.md +354 -0
  168. package/dsh-docs/subsystems/session-query.md +509 -0
  169. package/dsh-docs/subsystems/session-query.zh.md +509 -0
  170. package/dsh-docs/subsystems/session-reference.md +219 -0
  171. package/dsh-docs/subsystems/session-reference.zh.md +219 -0
  172. package/dsh-docs/subsystems/session-telemetry.md +194 -0
  173. package/dsh-docs/subsystems/session-telemetry.zh.md +194 -0
  174. package/dsh-docs/subsystems/session-title.md +204 -0
  175. package/dsh-docs/subsystems/session-title.zh.md +204 -0
  176. package/dsh-docs/subsystems/session.md +1155 -0
  177. package/dsh-docs/subsystems/session.zh.md +1159 -0
  178. package/dsh-docs/subsystems/settings.md +405 -0
  179. package/dsh-docs/subsystems/settings.zh.md +405 -0
  180. package/dsh-docs/subsystems/shell.md +303 -0
  181. package/dsh-docs/subsystems/shell.zh.md +303 -0
  182. package/dsh-docs/subsystems/skills.md +354 -0
  183. package/dsh-docs/subsystems/skills.zh.md +354 -0
  184. package/dsh-docs/subsystems/slots.md +175 -0
  185. package/dsh-docs/subsystems/slots.zh.md +175 -0
  186. package/dsh-docs/subsystems/spill.md +117 -0
  187. package/dsh-docs/subsystems/spill.zh.md +117 -0
  188. package/dsh-docs/subsystems/storage.md +260 -0
  189. package/dsh-docs/subsystems/storage.zh.md +260 -0
  190. package/dsh-docs/subsystems/subagent.md +766 -0
  191. package/dsh-docs/subsystems/subagent.zh.md +770 -0
  192. package/dsh-docs/subsystems/subprocess.md +324 -0
  193. package/dsh-docs/subsystems/subprocess.zh.md +324 -0
  194. package/dsh-docs/subsystems/system-prompt.md +220 -0
  195. package/dsh-docs/subsystems/system-prompt.zh.md +220 -0
  196. package/dsh-docs/subsystems/terminal.md +184 -0
  197. package/dsh-docs/subsystems/terminal.zh.md +184 -0
  198. package/dsh-docs/subsystems/todo.md +32 -0
  199. package/dsh-docs/subsystems/todo.zh.md +32 -0
  200. package/dsh-docs/subsystems/token-meter.md +105 -0
  201. package/dsh-docs/subsystems/token-meter.zh.md +105 -0
  202. package/dsh-docs/subsystems/tools.md +720 -0
  203. package/dsh-docs/subsystems/tools.zh.md +720 -0
  204. package/dsh-docs/subsystems/typert.md +343 -0
  205. package/dsh-docs/subsystems/typert.zh.md +343 -0
  206. package/dsh-docs/subsystems/user-questions.md +178 -0
  207. package/dsh-docs/subsystems/user-questions.zh.md +178 -0
  208. package/dsh-docs/subsystems/web-client.md +95 -0
  209. package/dsh-docs/subsystems/web-client.zh.md +95 -0
  210. package/dsh-docs/subsystems/web-server.md +154 -0
  211. package/dsh-docs/subsystems/web-server.zh.md +154 -0
  212. package/dsh-docs/subsystems/web.md +206 -0
  213. package/dsh-docs/subsystems/web.zh.md +206 -0
  214. package/dsh-docs/subsystems/webhook.md +70 -0
  215. package/dsh-docs/subsystems/webhook.zh.md +70 -0
  216. package/dsh-docs/subsystems/workflow.md +278 -0
  217. package/dsh-docs/subsystems/workflow.zh.md +278 -0
  218. package/dsh-docs/subsystems/workspace.md +321 -0
  219. package/dsh-docs/subsystems/workspace.zh.md +321 -0
  220. package/dsh-docs/testing.md +54 -0
  221. package/dsh-docs/testing.zh.md +54 -0
  222. package/dsh-docs/tool-catalog.md +2225 -0
  223. package/dsh-docs/tool-catalog.zh.md +2233 -0
  224. package/dsh-docs/tool-execution-pipeline.md +62 -0
  225. package/dsh-docs/tool-execution-pipeline.zh.md +64 -0
  226. package/dsh-docs/user/develop/basic/config.md +106 -0
  227. package/dsh-docs/user/develop/basic/config.zh.md +106 -0
  228. package/dsh-docs/user/develop/basic/index.md +144 -0
  229. package/dsh-docs/user/develop/basic/index.zh.md +144 -0
  230. package/dsh-docs/user/develop/basic/publish.md +183 -0
  231. package/dsh-docs/user/develop/basic/publish.zh.md +183 -0
  232. package/dsh-docs/user/develop/basic/tool.md +52 -0
  233. package/dsh-docs/user/develop/basic/tool.zh.md +52 -0
  234. package/dsh-docs/user/develop/framework/events.md +143 -0
  235. package/dsh-docs/user/develop/framework/events.zh.md +143 -0
  236. package/dsh-docs/user/develop/framework/index.md +137 -0
  237. package/dsh-docs/user/develop/framework/index.zh.md +137 -0
  238. package/dsh-docs/user/develop/framework/service.md +148 -0
  239. package/dsh-docs/user/develop/framework/service.zh.md +150 -0
  240. package/dsh-docs/user/develop/practice/dynamic-cordis.md +15 -0
  241. package/dsh-docs/user/develop/practice/dynamic-cordis.zh.md +15 -0
  242. package/dsh-docs/user/develop/practice/index.md +155 -0
  243. package/dsh-docs/user/develop/practice/index.zh.md +155 -0
  244. package/dsh-docs/user/develop/practice/llm-adapter.md +189 -0
  245. package/dsh-docs/user/develop/practice/llm-adapter.zh.md +189 -0
  246. package/dsh-docs/user/guide/github-review.md +102 -0
  247. package/dsh-docs/user/guide/github-review.zh.md +102 -0
  248. package/dsh-docs/user/guide/index.md +30 -0
  249. package/dsh-docs/user/guide/index.zh.md +30 -0
  250. package/dsh-docs/user/guide/mcp-memory.md +101 -0
  251. package/dsh-docs/user/guide/mcp-memory.zh.md +101 -0
  252. package/dsh-docs/user/guide/network-proxy.md +85 -0
  253. package/dsh-docs/user/guide/network-proxy.zh.md +85 -0
  254. package/dsh-docs/user/guide/providers.md +190 -0
  255. package/dsh-docs/user/guide/providers.zh.md +190 -0
  256. package/dsh-docs/user/guide/python-sdk.md +150 -0
  257. package/dsh-docs/user/guide/python-sdk.zh.md +150 -0
  258. package/dsh-docs/user/guide/schedule.md +21 -0
  259. package/dsh-docs/user/guide/schedule.zh.md +21 -0
  260. package/dsh-docs/user/index.md +11 -0
  261. package/dsh-docs/user/index.zh.md +11 -0
  262. package/dsh-docs/web-styling.md +29 -0
  263. package/dsh-docs/web-styling.zh.md +29 -0
  264. package/lib/client/index.js +268 -38
  265. package/lib/fs-aware/sandbox-plugin.js +1 -1
  266. package/lib/index.js +1112 -1261
  267. package/lib/lsp-server-registry-B8DNonhS.js +3 -0
  268. package/lib/lsp-server-registry-BexQagaK.js +943 -0
  269. package/lib/{wrap-DC8O3SYz.js → wrap-JFjcWwZf.js} +42 -16
  270. package/package.json +2 -1
@@ -0,0 +1,509 @@
1
+ # 会话查询
2
+
3
+ [English](session-query.md) | 中文
4
+
5
+ 本文定义逻辑会话语料库的查询词汇;当 live 数据存在时,该语料库优先使用 live 数据。[Service Definition 包](../../packages/session-query/session-query)负责精确读取、来源优先级、关系追踪、语义提取,以及与提供方无关的过滤器;[SQLite 提供方](../../packages/session-query/session-query-sqlite)负责具体全文索引的生命周期。
6
+
7
+ 源码:[`packages/session-query/session-query/src/types.ts`](../../packages/session-query/session-query/src/types.ts)
8
+
9
+ ## 逻辑记录
10
+
11
+ `SessionRecord` 由全语料库列表返回。它除了克隆的、优先取自 live 源的 header 外,还单独公开各源的可用性。`SessionEventRecord` 是轻量的原始日志投影;分类使用与模型历史推导相同的 `foldSurface()` 状态转换。
12
+
13
+ ```ts type-equiv
14
+ /** Whether an event is current model context, replaced context, or raw-log-only. */
15
+ type SessionEventSurface = 'current' | 'shadowed' | 'log-only'
16
+ ```
17
+
18
+ ```ts type-equiv
19
+ /** Lightweight identity and source availability for one logical session. */
20
+ interface SessionRecord {
21
+ /** Cloned session header selected from the live-preferred corpus. */
22
+ header: SessionHeader
23
+ /** Whether the id currently exists in `ctx.sessions`. */
24
+ live: boolean
25
+ /** Whether the active persistence backend currently lists the id, including a created-but-unmaterialized session it already observes. */
26
+ persisted: boolean
27
+ }
28
+ ```
29
+
30
+ `SessionLogSnapshot` 是供恢复预检使用的完整原始日志:它脱离运行时,并经过回放验证。`SessionSurfaceSnapshot` 表示一次精确读取的 surface 观测结果,而不是持续保留的订阅。
31
+
32
+ ```ts type-equiv
33
+ /** One validated detached observation of a logical session's complete raw log. */
34
+ interface SessionLogSnapshot {
35
+ /** Cloned session header selected from the same observation as `events`. */
36
+ session: SessionHeader
37
+ /** Exact number of fork-inherited events in the observed log. */
38
+ inheritedEventCount: SessionLogOffset
39
+ /** Cloned contiguous raw events after in-memory interrupted-turn balancing and replay validation. */
40
+ events: SessionEvent[]
41
+ }
42
+ ```
43
+
44
+ ```ts type-equiv
45
+ /** One atomic live-preferred observation of a session's current model surface. */
46
+ interface SessionSurfaceSnapshot {
47
+ /** Cloned session header selected from the same corpus observation as `events`. */
48
+ session: SessionHeader
49
+ /** Exact number of fork-inherited events in the observed log. */
50
+ inheritedEventCount: SessionLogOffset
51
+ /** Highest raw-log seq included in the observation, or `null` for an empty log. */
52
+ capturedThroughSeq: OptionalSessionSeq
53
+ /** Cloned current surface events in model-history order. */
54
+ events: SurfaceEvent[]
55
+ }
56
+ ```
57
+
58
+ `SessionTitleObservation` 将同样的原子观测规则应用于标题折叠,使执行授权检查的消费方能够验证提供标题的源 header。批量读取会按顺序为每个唯一请求 id 返回一个 `SessionTitleObservationResult`:操作失败只影响对应 id,而取消会拒绝整个操作。
59
+
60
+ ```ts type-equiv
61
+ /** Latest folded title bound to the same session-header observation. */
62
+ interface SessionTitleObservation {
63
+ /** Cloned header selected with the event log used for the title fold. */
64
+ session: SessionHeader
65
+ /** Latest title snapshot, absent when the observed log has no title. */
66
+ title?: SessionTitleSnapshot
67
+ }
68
+ ```
69
+
70
+ ```ts type-equiv
71
+ /** One ordered result from a batch title observation. */
72
+ type SessionTitleObservationResult =
73
+ | {
74
+ /** Requested session id. */
75
+ sessionId: SessionId
76
+ /** Successful atomic header/title observation. */
77
+ status: 'fulfilled'
78
+ /** Header and optional latest title from one logical source. */
79
+ value: SessionTitleObservation
80
+ }
81
+ | {
82
+ /** Requested session id. */
83
+ sessionId: SessionId
84
+ /** Operational failure isolated to this session. */
85
+ status: 'rejected'
86
+ /** Original failure from logical-source resolution or title folding. */
87
+ reason: unknown
88
+ }
89
+ ```
90
+
91
+ ```ts type-equiv
92
+ /** Lightweight metadata for one event within a logical session. */
93
+ interface SessionEventRecord {
94
+ /** Session that owns the event. */
95
+ sessionId: SessionId
96
+ /** Monotonic event seq within the session. */
97
+ seq: SessionSeq
98
+ /** Discriminant of the session event. */
99
+ type: SessionEventType
100
+ /** Event timestamp in Unix epoch milliseconds. */
101
+ time: number
102
+ /** Event placement in the folded session surface. */
103
+ surface: SessionEventSurface
104
+ }
105
+ ```
106
+
107
+ ## 与提供方无关的过滤器和文档
108
+
109
+ 会话和事件过滤器数组内的各项按逻辑与(AND)组合;单个列表子句中的各值按逻辑或(OR)组合。范围包含两端。事件的 `text` 子句会对提取出的语义文本执行正则表达式扫描:搜索文本按字面量处理,按 Unicode 规则执行不区分大小写的匹配,并允许灵活匹配空白字符;该过程与全文搜索提供方无关。
110
+
111
+ ```ts type-equiv
112
+ /**
113
+ * One logical-session predicate. A filter array is ANDed; `values` within a
114
+ * clause are ORed.
115
+ */
116
+ type SessionResultFilter =
117
+ | { kind: 'id'; values: readonly SessionId[] }
118
+ | { kind: 'cwd'; values: readonly (string | null)[] }
119
+ | ({ kind: 'created-at' } & SessionResultRange)
120
+ | { kind: 'parent'; values: readonly (SessionId | null)[] }
121
+ | { kind: 'availability'; values: readonly SessionAvailability[] }
122
+ ```
123
+
124
+ ```ts type-equiv
125
+ /**
126
+ * One event predicate. A filter array is ANDed; list-valued clauses are ORed.
127
+ * Text is a literal, case-insensitive, whitespace-flexible semantic-text scan.
128
+ */
129
+ type SessionEventResultFilter =
130
+ | ({ kind: 'seq' } & SessionResultRange)
131
+ | ({ kind: 'time' } & SessionResultRange)
132
+ | { kind: 'type'; values: readonly SessionEventType[] }
133
+ | { kind: 'surface'; values: readonly SessionEventSurface[] }
134
+ | { kind: 'text'; text: string }
135
+ ```
136
+
137
+ ```ts type-equiv
138
+ /** Searchable semantic document derived from one session event. */
139
+ interface SessionEventSearchDocument extends SessionEventRecord {
140
+ /** First-party semantic text used by scan filters and full-text indexes. */
141
+ text: string
142
+ }
143
+ ```
144
+
145
+ `ctx.sessionQuery.filterSessions(filters)` 会对完整的逻辑会话语料库应用 `SessionResultFilter`;`ctx.sessionQuery.filterEvents(sessionId, filters)` 按 seq 升序返回匹配的文档。消息、工具调用和工具结果、待办事项,以及失败和状态详情会纳入语义文本;推理(reasoning)块、被阻止的提示词、结构事件和流分片则不会。
146
+
147
+ ## 全文搜索结果页
148
+
149
+ 整合后的 `ctx.sessionQuery` seam 提供两个全文搜索范围。`searchSessions()` 按匹配度最强的事件对语料库分组;`searchEvents()` 搜索单个会话。请求将不透明游标与规范化后的查询、元数据过滤器和结果数量上限绑定。提供方的元数据过滤器有意不包含事件文本扫描。
150
+
151
+ ```ts type-equiv
152
+ /** Provider-owned opaque continuation token returned by session search. */
153
+ type SessionSearchCursor = Branded<'SessionSearchCursor'>
154
+ ```
155
+
156
+ ```ts type-equiv
157
+ /** Cross-session full-text search request. */
158
+ interface SessionSearchRequest {
159
+ /** Full-text query interpreted as data, never executable FTS syntax. */
160
+ query: string
161
+ /** Logical-session predicates applied before event ranking. */
162
+ sessionFilters?: readonly SessionResultFilter[]
163
+ /** Event predicates applied before event ranking. */
164
+ eventFilters?: readonly SessionEventMetadataFilter[]
165
+ /** Maximum sessions in this page. */
166
+ limit?: number
167
+ /** Opaque cursor returned for the identical normalized request. */
168
+ cursor?: SessionSearchCursor
169
+ }
170
+ ```
171
+
172
+ ```ts type-equiv
173
+ /** Within-session full-text search request. */
174
+ interface SessionEventSearchRequest {
175
+ /** Session whose live-preferred logical log is searched. */
176
+ sessionId: SessionId
177
+ /** Full-text query interpreted as data, never executable FTS syntax. */
178
+ query: string
179
+ /** Event predicates applied before ranking. */
180
+ filters?: readonly SessionEventMetadataFilter[]
181
+ /** Maximum events in this page. */
182
+ limit?: number
183
+ /** Opaque cursor returned for the identical normalized request. */
184
+ cursor?: SessionSearchCursor
185
+ }
186
+ ```
187
+
188
+ ```ts type-equiv
189
+ /** One cursor-paginated result page. */
190
+ interface SessionSearchPage<T> {
191
+ /** Results for this page in contract-defined order. */
192
+ items: readonly T[]
193
+ /** Opaque continuation cursor, absent on the final page. */
194
+ nextCursor?: SessionSearchCursor
195
+ }
196
+ ```
197
+
198
+ 与跨会话分组 hit 不同,会话内搜索结果即使没有命中项,也必须公开搜索时观测到的目标 header。
199
+
200
+ ```ts type-equiv
201
+ /** Event-search results bound to the indexed target-session observation. */
202
+ interface SessionEventSearchPage extends SessionSearchPage<SessionEventSearchHit> {
203
+ /** Cloned target header from the same indexed generation as `items`. */
204
+ session: SessionHeader
205
+ }
206
+ ```
207
+
208
+ ```ts type-equiv
209
+ /** One event full-text search hit with a bounded plain-text excerpt. */
210
+ interface SessionEventSearchHit extends SessionEventRecord {
211
+ /** Plain text excerpt selected around the match. */
212
+ snippet: string
213
+ }
214
+ ```
215
+
216
+ ```ts type-equiv
217
+ /** One grouped cross-session hit, ranked by its strongest matching event. */
218
+ interface SessionSearchHit extends SessionRecord {
219
+ /** Strongest matching event for this session. */
220
+ bestMatch: SessionEventSearchHit
221
+ }
222
+ ```
223
+
224
+ ## 会话谱系
225
+
226
+ `SessionLineageTrace` 按由近及远的顺序携带已知 parent,以及由直接 descendant 递归嵌套而成的森林。完整性判别字段使已知 root 与缺失 parent 互斥。
227
+
228
+ ```ts type-equiv
229
+ /** Recursive descendant node in a session-lineage trace. */
230
+ interface SessionLineageNode {
231
+ /** Detached logical-corpus record for this descendant. */
232
+ session: SessionRecord
233
+ /** Direct children, each carrying its own recursive descendants. */
234
+ descendants: SessionLineageNode[]
235
+ }
236
+ ```
237
+
238
+ ```ts type-equiv
239
+ /** Known ancestry and descendants for one logical session. */
240
+ type SessionLineageTrace = {
241
+ /** Detached record for the session that was traced. */
242
+ target: SessionRecord
243
+ /** Known parents from the immediate parent outward. */
244
+ ancestors: SessionRecord[]
245
+ /** Complete known descendant trees rooted at the target's direct children. */
246
+ descendants: SessionLineageNode[]
247
+ } & (
248
+ | {
249
+ /** The complete parent chain is present in the logical corpus. */
250
+ complete: true
251
+ /** Detached record at the top of the complete lineage. */
252
+ root: SessionRecord
253
+ }
254
+ | {
255
+ /** The parent chain leaves the visible logical corpus. */
256
+ complete: false
257
+ /** First parent id that is not present in the logical corpus. */
258
+ unresolvedParentId: SessionId
259
+ }
260
+ )
261
+ ```
262
+
263
+ ## 有界事件读取
264
+
265
+ 请求指定一个原始 seq 及可选的邻近数量。结果携带 `SessionHeader` 而非可用性标志,使已知的 live 目标可以独立于持久化健康状态。
266
+
267
+ ```ts type-equiv
268
+ /** Request for one event plus raw neighboring log context. */
269
+ interface SessionEventReadRequest {
270
+ /** Session that owns the target event. */
271
+ sessionId: SessionId
272
+ /** Target event seq. */
273
+ seq: SessionSeq
274
+ /** Number of preceding raw events to include. */
275
+ before?: number
276
+ /** Number of following raw events to include. */
277
+ after?: number
278
+ }
279
+ ```
280
+
281
+ ```ts type-equiv
282
+ /** Full target event and a bounded raw-log window. */
283
+ interface SessionEventWindow {
284
+ /** Cloned header for the live-preferred source read. */
285
+ session: SessionHeader
286
+ /** Exact number of fork-inherited events in the observed log. */
287
+ inheritedEventCount: SessionLogOffset
288
+ /** Full cloned target event. */
289
+ target: SessionEvent
290
+ /** Full cloned events from `startSeq` through `endSeq`. */
291
+ events: SessionEvent[]
292
+ /** First seq included in `events`. */
293
+ startSeq: SessionSeq
294
+ /** Last seq included in `events`. */
295
+ endSeq: SessionSeq
296
+ }
297
+ ```
298
+
299
+ ## 事件关系
300
+
301
+ 事件追踪会区分位置替换与被引用为来源的事件。除 `replacementChain` 外,每个 seq 列表都只包含直接链接;该链从目标沿直接 replacer 追踪到最终的位置替换。
302
+
303
+ ```ts type-equiv
304
+ /** Request for direct surface replacements and relationships to cited source events around one event. */
305
+ interface SessionEventTraceRequest {
306
+ /** Session that owns the target event. */
307
+ sessionId: SessionId
308
+ /** Target event seq. */
309
+ seq: SessionSeq
310
+ }
311
+ ```
312
+
313
+ ```ts type-equiv
314
+ /** Direct surface replacements and relationships to cited source events for one event. */
315
+ interface SessionEventTrace {
316
+ /** Lightweight target record. */
317
+ target: SessionEventRecord
318
+ /** Immediate positional replacement event, when the target was shadowed. */
319
+ replacedBy?: SessionSeq
320
+ /** Positional replacers from the immediate replacement to the final replacement. */
321
+ replacementChain: SessionSeq[]
322
+ /** Surface nodes directly removed when the target itself performed a replacement. */
323
+ replacedEventSeqs: SessionSeq[]
324
+ /** Earlier events cited directly as sources, in their recorded order. */
325
+ sourceEventSeqs: SessionSeq[]
326
+ /** Later events that directly cite the target as a source, in log order. */
327
+ derivedEventSeqs: SessionSeq[]
328
+ }
329
+ ```
330
+
331
+ ```ts type-equiv
332
+ /** Event relationships bound to the same session-header observation. */
333
+ interface SessionEventTraceObservation extends SessionEventTrace {
334
+ /** Cloned header selected with the event log used for the trace. */
335
+ session: SessionHeader
336
+ }
337
+ ```
338
+
339
+ ## 错误
340
+
341
+ 封闭的 code 联合类型区分请求校验、目标缺失、surface 日志格式错误、可选后端故障、部署关闭搜索与矛盾的源元数据。
342
+
343
+ ```ts type-equiv
344
+ /** Stable machine-routable failure taxonomy for session reads, traces, and search. */
345
+ type SessionQueryErrorCode =
346
+ | 'SESSION_QUERY_ABORTED'
347
+ | 'SESSION_QUERY_CORRUPT_SESSION'
348
+ | 'SESSION_QUERY_EVENT_NOT_FOUND'
349
+ | 'SESSION_QUERY_INDEX_FAILED'
350
+ | 'SESSION_QUERY_INVALID_CONFIG'
351
+ | 'SESSION_QUERY_INVALID_CURSOR'
352
+ | 'SESSION_QUERY_INVALID_FILTER'
353
+ | 'SESSION_QUERY_INVALID_LIMIT'
354
+ | 'SESSION_QUERY_INVALID_QUERY'
355
+ | 'SESSION_QUERY_INVALID_LINEAGE'
356
+ | 'SESSION_QUERY_INVALID_SURFACE'
357
+ | 'SESSION_QUERY_INVALID_WINDOW'
358
+ | 'SESSION_QUERY_PERSISTENCE_FAILED'
359
+ | 'SESSION_QUERY_SEARCH_DISABLED'
360
+ | 'SESSION_QUERY_SESSION_NOT_FOUND'
361
+ | 'SESSION_QUERY_STALE_CURSOR'
362
+ | 'SESSION_QUERY_SOURCE_CONFLICT'
363
+ ```
364
+
365
+ <!-- BEGIN GENERATED cordis-surface (gen-cordis-catalog.ts) — do not edit between markers -->
366
+
367
+ <a id="cordis-surface"></a>
368
+
369
+ ## Cordis API
370
+
371
+ 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.zh.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
372
+
373
+ <a id="ctxsessionquery--sessionqueryengine-abstract-seam"></a>
374
+
375
+ ### `ctx.sessionQuery` — `SessionQueryEngine` (abstract seam)
376
+
377
+ Unified live-preferred session query service.
378
+
379
+ Exact reads, filters, and traces are backend-independent concrete behavior. A backend implements full-text observation, reconciliation, ranking, cursor generations, and query execution on the same `ctx.sessionQuery` service.
380
+
381
+ ```ts cordis-catalog
382
+ /**
383
+ * Observe one exact live or prepared Session without a persistence listing preflight.
384
+ * @param sessionId - logical Session identity.
385
+ * @param options - cancellation and projection selection for this read.
386
+ * @returns a caller-owned observation lease.
387
+ */
388
+ observeSession( sessionId: SessionId, options: SessionObservationOptions = {}, ): Promise<SessionObservation>
389
+
390
+ /**
391
+ * Search the live-preferred logical corpus and group by session.
392
+ * @param request - query text, metadata filters, page size, and cursor.
393
+ * @param exec - optional cancellation control.
394
+ * @returns session hits ranked by their strongest matching event.
395
+ */
396
+ abstract searchSessions( request: SessionSearchRequest, exec?: SessionSearchExecContext, ): Promise<SessionSearchPage<SessionSearchHit>>
397
+
398
+ /**
399
+ * Search events within one live-preferred logical session.
400
+ * @param request - target session, query text, filters, page size, and cursor.
401
+ * @param exec - optional cancellation control.
402
+ * @returns matching event hits and their target header from one indexed generation.
403
+ */
404
+ abstract searchEvents( request: SessionEventSearchRequest, exec?: SessionSearchExecContext, ): Promise<SessionEventSearchPage>
405
+
406
+ /**
407
+ * List the complete logical corpus using live-preferred records.
408
+ * @param signal - optional cancellation for persistence listing.
409
+ * @returns deterministic newest-first cloned session records.
410
+ */
411
+ listSessions(signal?: AbortSignal): Promise<SessionRecord[]>
412
+
413
+ /**
414
+ * Read and replay-validate one complete logical session log without making it live.
415
+ * @param sessionId - live or persisted session id to read.
416
+ * @returns cloned header and complete raw event log from one observation.
417
+ * @throws when persistence, header compatibility, or replay validation fails.
418
+ */
419
+ async readSession(sessionId: SessionId): Promise<SessionLogSnapshot>
420
+
421
+ /**
422
+ * Filter the complete logical corpus with provider-independent predicates.
423
+ * @param filters - ANDed session metadata and availability clauses.
424
+ * @param signal - optional cancellation for persistence listing.
425
+ * @returns matching cloned records in deterministic newest-first order.
426
+ */
427
+ async filterSessions( filters: readonly SessionResultFilter[], signal?: AbortSignal, ): Promise<SessionRecord[]>
428
+
429
+ /**
430
+ * Fold the latest log-backed title from one live-preferred logical session.
431
+ * @param sessionId - live or persisted session id to read.
432
+ * @param signal - optional cancellation for source resolution and title folding.
433
+ * @returns latest title snapshot, or `undefined` when the log has no title event.
434
+ */
435
+ async readTitle( sessionId: SessionId, signal?: AbortSignal, ): Promise<SessionTitleSnapshot | undefined>
436
+
437
+ /**
438
+ * Fold the latest title and return its source header from one corpus observation.
439
+ * @param sessionId - live or persisted session id to read.
440
+ * @param signal - optional cancellation for source resolution and title folding.
441
+ * @returns cloned source header and optional latest title snapshot.
442
+ */
443
+ async readTitleSnapshot( sessionId: SessionId, signal?: AbortSignal, ): Promise<SessionTitleObservation>
444
+
445
+ /**
446
+ * Fold titles for unique sessions from one cancellable corpus observation.
447
+ *
448
+ * Results preserve first-occurrence input order. Operational failures stay
449
+ * isolated per session, while cancellation rejects the complete operation.
450
+ * @param sessionIds - live or persisted session ids to observe.
451
+ * @param signal - optional cancellation shared by all source reads.
452
+ * @returns one fulfilled or rejected result per unique requested id.
453
+ */
454
+ async readTitleSnapshots( sessionIds: readonly SessionId[], signal?: AbortSignal, ): Promise<SessionTitleObservationResult[]>
455
+
456
+ /**
457
+ * List lightweight raw-log event records for one logical session.
458
+ * @param sessionId - live-preferred session id to read.
459
+ * @returns event records in ascending seq order.
460
+ */
461
+ async listEvents(sessionId: SessionId): Promise<SessionEventRecord[]>
462
+
463
+ /**
464
+ * Scan first-party semantic event documents with provider-independent filters.
465
+ * @param sessionId - live-preferred session id to scan.
466
+ * @param filters - ANDed metadata and literal-text predicates.
467
+ * @returns matching semantic documents in ascending seq order.
468
+ */
469
+ async filterEvents( sessionId: SessionId, filters: readonly SessionEventResultFilter[], ): Promise<SessionEventSearchDocument[]>
470
+
471
+ /**
472
+ * Read one session's complete current model surface from one corpus observation.
473
+ * @param sessionId - live-preferred session id to read.
474
+ * @returns cloned header, current surface, and the last sequence number included in the raw-log capture.
475
+ * @throws when source resolution fails or the session surface is invalid.
476
+ */
477
+ async readSurface(sessionId: SessionId): Promise<SessionSurfaceSnapshot>
478
+
479
+ /**
480
+ * Trace known ancestry and descendants from one corpus observation.
481
+ * @param sessionId - logical session id to trace.
482
+ * @param signal - optional cancellation for persistence listing.
483
+ * @returns a complete lineage or the first parent that could not be resolved.
484
+ * @throws when corpus resolution fails, the target is absent, or its known ancestry cycles.
485
+ */
486
+ async traceSession(sessionId: SessionId, signal?: AbortSignal): Promise<SessionLineageTrace>
487
+
488
+ /**
489
+ * Trace one event's direct positional replacements and cited source events.
490
+ * @param request - target session id and event seq.
491
+ * @param signal - optional cancellation for persisted source resolution.
492
+ * @returns source header, direct links, and the target's positional replacement chain.
493
+ * @throws when source resolution fails, the target is absent, or surface/source-event validation fails.
494
+ */
495
+ async traceEvent(request: SessionEventTraceRequest, signal?: AbortSignal): Promise<SessionEventTraceObservation>
496
+
497
+ /**
498
+ * Read one full event plus a bounded raw-log context window.
499
+ * @param request - target session/seq and context sizes.
500
+ * @param signal - optional cancellation for persisted source resolution.
501
+ * @returns cloned target and neighboring events.
502
+ */
503
+ async readEvent(request: SessionEventReadRequest, signal?: AbortSignal): Promise<SessionEventWindow>
504
+ ```
505
+
506
+ Types: [SessionId](core.zh.md) · [SessionTitleSnapshot](session-title.zh.md)
507
+
508
+ Source: [`packages/session-query/session-query/src/index.ts`](../../packages/session-query/session-query/src/index.ts)
509
+ <!-- END GENERATED cordis-surface -->