@sema-agent/server 1.323.0 → 2.0.0

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 (539) hide show
  1. package/dist/approval-hmac.d.ts +40 -0
  2. package/dist/approval-hmac.js +67 -0
  3. package/dist/approval.d.ts +31 -0
  4. package/dist/approval.js +72 -4
  5. package/dist/audit.d.ts +26 -0
  6. package/dist/audit.js +40 -1
  7. package/dist/auth-bridge.d.ts +10 -0
  8. package/dist/auth-bridge.js +47 -4
  9. package/dist/auth-keys.d.ts +19 -0
  10. package/dist/auth-keys.js +13 -0
  11. package/dist/bake-runner/main.d.ts +5 -0
  12. package/dist/bake-runner/main.js +43 -4
  13. package/dist/bake-runner/protocol.d.ts +57 -0
  14. package/dist/bake-runner/protocol.js +58 -3
  15. package/dist/bake-runner/runner.d.ts +54 -0
  16. package/dist/bake-runner/runner.js +87 -5
  17. package/dist/bench/l8/artifact.d.ts +63 -0
  18. package/dist/bench/l8/artifact.js +61 -2
  19. package/dist/bench/l8/escape.d.ts +36 -0
  20. package/dist/bench/l8/escape.js +25 -0
  21. package/dist/bench/l8/index.d.ts +14 -0
  22. package/dist/bench/l8/index.js +14 -0
  23. package/dist/bench/l8/probes.d.ts +74 -0
  24. package/dist/bench/l8/probes.js +60 -0
  25. package/dist/bench/l8/run-probes.d.ts +43 -0
  26. package/dist/bench/l8/run-probes.js +45 -2
  27. package/dist/bench/s1/arms.d.ts +126 -0
  28. package/dist/bench/s1/arms.js +188 -13
  29. package/dist/bench/s1/live-deps.d.ts +66 -0
  30. package/dist/bench/s1/live-deps.js +249 -11
  31. package/dist/bench/s1/oracle.d.ts +49 -0
  32. package/dist/bench/s1/oracle.js +36 -1
  33. package/dist/bench/s1/repair-oracle-adapter.d.ts +33 -0
  34. package/dist/bench/s1/repair-oracle-adapter.js +30 -0
  35. package/dist/bench/s1/reviewer.d.ts +38 -0
  36. package/dist/bench/s1/reviewer.js +34 -0
  37. package/dist/bench/s1/row.d.ts +77 -0
  38. package/dist/bench/s1/row.js +62 -0
  39. package/dist/bench/s1/run-firm.d.ts +47 -0
  40. package/dist/bench/s1/run-firm.js +70 -4
  41. package/dist/bench/s1/runner-ctx.d.ts +71 -0
  42. package/dist/bench/s1/runner-ctx.js +36 -0
  43. package/dist/bench/s1/tasks.d.ts +108 -0
  44. package/dist/bench/s1/tasks.js +115 -0
  45. package/dist/boot-reclaim.d.ts +19 -0
  46. package/dist/boot-reclaim.js +20 -0
  47. package/dist/brain.d.ts +25 -0
  48. package/dist/brain.js +61 -1
  49. package/dist/budget.d.ts +66 -0
  50. package/dist/budget.js +128 -4
  51. package/dist/capabilities/builtin-tools.d.ts +3 -0
  52. package/dist/capabilities/builtin-tools.js +3 -0
  53. package/dist/capabilities/center-plugins.d.ts +17 -1
  54. package/dist/capabilities/center-plugins.js +45 -4
  55. package/dist/capabilities/center-prompts.d.ts +46 -0
  56. package/dist/capabilities/center-prompts.js +57 -3
  57. package/dist/capabilities/code-review-council.d.ts +28 -0
  58. package/dist/capabilities/code-review-council.js +40 -7
  59. package/dist/capabilities/collab-wire.d.ts +2 -0
  60. package/dist/capabilities/collab-workflows.d.ts +7 -0
  61. package/dist/capabilities/collab-workflows.js +44 -1
  62. package/dist/capabilities/oa-tools.d.ts +6 -0
  63. package/dist/capabilities/oa-tools.js +10 -0
  64. package/dist/capabilities/prompt.d.ts +14 -0
  65. package/dist/capabilities/prompt.js +14 -0
  66. package/dist/capabilities/prompts/code-review.d.ts +14 -0
  67. package/dist/capabilities/prompts/code-review.js +14 -0
  68. package/dist/capabilities/prompts/identity.d.ts +6 -0
  69. package/dist/capabilities/prompts/identity.js +6 -0
  70. package/dist/capabilities/prompts/team.d.ts +4 -0
  71. package/dist/capabilities/prompts/team.js +4 -0
  72. package/dist/capabilities/repo-tools.d.ts +11 -0
  73. package/dist/capabilities/repo-tools.js +8 -0
  74. package/dist/capabilities/sandbox-file-send.d.ts +95 -0
  75. package/dist/capabilities/sandbox-file-send.js +91 -3
  76. package/dist/capabilities/scenarios.d.ts +130 -0
  77. package/dist/capabilities/scenarios.js +180 -7
  78. package/dist/capabilities/select-environment-tool.d.ts +7 -0
  79. package/dist/capabilities/select-environment-tool.js +30 -0
  80. package/dist/capabilities/send-user-file-tool.d.ts +33 -0
  81. package/dist/capabilities/send-user-file-tool.js +65 -1
  82. package/dist/capabilities/skills.d.ts +29 -0
  83. package/dist/capabilities/skills.js +13 -2
  84. package/dist/capabilities/team.d.ts +22 -0
  85. package/dist/capabilities/team.js +22 -2
  86. package/dist/capabilities/tool-defer.d.ts +26 -0
  87. package/dist/capabilities/tool-defer.js +3 -0
  88. package/dist/config-center/apply-effective.d.ts +65 -0
  89. package/dist/config-center/apply-effective.js +204 -12
  90. package/dist/config-center/http-client.d.ts +34 -0
  91. package/dist/config-center/http-client.js +68 -0
  92. package/dist/config-center/restart-signal.d.ts +22 -0
  93. package/dist/config-center/restart-signal.js +39 -0
  94. package/dist/config-center/skills-mcp.d.ts +20 -1
  95. package/dist/config-center/skills-mcp.js +42 -7
  96. package/dist/config-center/types.d.ts +92 -1
  97. package/dist/config-lkg.d.ts +12 -0
  98. package/dist/config-lkg.js +41 -0
  99. package/dist/config-provider.d.ts +78 -0
  100. package/dist/config-provider.js +165 -2
  101. package/dist/config-types.d.ts +546 -0
  102. package/dist/config.d.ts +64 -0
  103. package/dist/config.js +455 -60
  104. package/dist/degenerate-instrument.d.ts +38 -0
  105. package/dist/degenerate-instrument.js +55 -3
  106. package/dist/elicitation.d.ts +39 -0
  107. package/dist/elicitation.js +87 -3
  108. package/dist/env-facts.d.ts +61 -0
  109. package/dist/env-facts.js +73 -7
  110. package/dist/fleet/fleet-bus.d.ts +185 -0
  111. package/dist/fleet/fleet-bus.js +333 -27
  112. package/dist/fleet/subagent-tail-bus.d.ts +11 -0
  113. package/dist/fleet/subagent-tail-bus.js +33 -2
  114. package/dist/fleet-client.d.ts +38 -0
  115. package/dist/fleet-client.js +44 -9
  116. package/dist/fleet-lease.d.ts +46 -0
  117. package/dist/fleet-lease.js +73 -5
  118. package/dist/hooks/branch-transcript.d.ts +8 -0
  119. package/dist/hooks/branch-transcript.js +33 -0
  120. package/dist/hooks/cc-stop-prompt.d.ts +42 -0
  121. package/dist/hooks/cc-stop-prompt.js +43 -1
  122. package/dist/hooks/hook-llm.d.ts +15 -0
  123. package/dist/hooks/hook-llm.js +47 -0
  124. package/dist/hooks/hook-runner.d.ts +89 -0
  125. package/dist/hooks/hook-runner.js +327 -18
  126. package/dist/http/idempotency.d.ts +31 -0
  127. package/dist/http/idempotency.js +34 -0
  128. package/dist/http/principal-gate.d.ts +17 -0
  129. package/dist/http/principal-gate.js +35 -3
  130. package/dist/http/route-ctx.d.ts +36 -0
  131. package/dist/http/routes/approvals-assistant.d.ts +25 -0
  132. package/dist/http/routes/approvals-assistant.js +253 -23
  133. package/dist/http/routes/attachments.js +22 -4
  134. package/dist/http/routes/capabilities.d.ts +7 -0
  135. package/dist/http/routes/capabilities.js +202 -1
  136. package/dist/http/routes/fleet.d.ts +6 -0
  137. package/dist/http/routes/fleet.js +94 -5
  138. package/dist/http/routes/images.d.ts +17 -0
  139. package/dist/http/routes/images.js +222 -14
  140. package/dist/http/routes/leader.d.ts +7 -0
  141. package/dist/http/routes/leader.js +10 -0
  142. package/dist/http/routes/memory-policy.d.ts +6 -0
  143. package/dist/http/routes/memory-policy.js +38 -6
  144. package/dist/http/routes/notify-wake.d.ts +10 -0
  145. package/dist/http/routes/notify-wake.js +19 -3
  146. package/dist/http/routes/observability.d.ts +6 -0
  147. package/dist/http/routes/observability.js +19 -2
  148. package/dist/http/routes/runs.d.ts +15 -0
  149. package/dist/http/routes/runs.js +464 -41
  150. package/dist/http/routes/session-sync.d.ts +15 -0
  151. package/dist/http/routes/session-sync.js +229 -19
  152. package/dist/http/routes/sessions-list.d.ts +6 -0
  153. package/dist/http/routes/sessions-list.js +35 -4
  154. package/dist/http/routes/sessions.d.ts +14 -0
  155. package/dist/http/routes/sessions.js +176 -31
  156. package/dist/http/routes/side-query.d.ts +8 -0
  157. package/dist/http/routes/side-query.js +26 -1
  158. package/dist/http/routes/tasks.d.ts +18 -0
  159. package/dist/http/routes/tasks.js +501 -38
  160. package/dist/http/routes/trace-usage.d.ts +10 -0
  161. package/dist/http/routes/trace-usage.js +66 -14
  162. package/dist/http/routes/workflows.d.ts +12 -0
  163. package/dist/http/routes/workflows.js +180 -19
  164. package/dist/http/run-meta.d.ts +11 -0
  165. package/dist/http/run-meta.js +6 -0
  166. package/dist/http/send.d.ts +19 -0
  167. package/dist/http/send.js +11 -0
  168. package/dist/http/server.d.ts +255 -0
  169. package/dist/http/server.js +921 -75
  170. package/dist/http/sse-log.d.ts +15 -0
  171. package/dist/http/sse-log.js +16 -0
  172. package/dist/http/tar.d.ts +9 -0
  173. package/dist/http/tar.js +21 -5
  174. package/dist/http/wire-gate.d.ts +9 -0
  175. package/dist/http/wire-gate.js +9 -0
  176. package/dist/http/wire-types.d.ts +187 -0
  177. package/dist/http/workspace-content.d.ts +8 -0
  178. package/dist/http/workspace-content.js +10 -0
  179. package/dist/images/bake-validate.d.ts +63 -0
  180. package/dist/images/bake-validate.js +71 -1
  181. package/dist/images/manifest.d.ts +19 -0
  182. package/dist/images/manifest.js +6 -1
  183. package/dist/index.d.ts +1 -5
  184. package/dist/index.js +10 -5
  185. package/dist/key-resolver.d.ts +23 -0
  186. package/dist/key-resolver.js +27 -2
  187. package/dist/leader/diffout.d.ts +23 -0
  188. package/dist/leader/diffout.js +8 -1
  189. package/dist/leader/diffup.d.ts +32 -0
  190. package/dist/leader/diffup.js +43 -0
  191. package/dist/leader/endpoint.d.ts +20 -0
  192. package/dist/leader/endpoint.js +25 -2
  193. package/dist/leader/fanout.d.ts +60 -0
  194. package/dist/leader/fanout.js +29 -3
  195. package/dist/leader/grader-env-factory.d.ts +74 -0
  196. package/dist/leader/grader-env-factory.js +62 -3
  197. package/dist/leader/leader.d.ts +97 -0
  198. package/dist/leader/leader.js +151 -4
  199. package/dist/leader/merge.d.ts +94 -0
  200. package/dist/leader/merge.js +112 -9
  201. package/dist/leader/planner.d.ts +52 -0
  202. package/dist/leader/planner.js +47 -3
  203. package/dist/leader/repair-oracle.d.ts +61 -0
  204. package/dist/leader/repair-oracle.js +59 -1
  205. package/dist/leader/repair-wire.d.ts +78 -0
  206. package/dist/leader/repair-wire.js +79 -2
  207. package/dist/leader/wire.d.ts +79 -0
  208. package/dist/leader/wire.js +255 -8
  209. package/dist/lsp/e2b-bridge.d.ts +16 -0
  210. package/dist/lsp/e2b-bridge.js +32 -4
  211. package/dist/lsp/e2b-manager.d.ts +10 -0
  212. package/dist/lsp/e2b-manager.js +18 -2
  213. package/dist/lsp/lsp-frames.d.ts +12 -0
  214. package/dist/lsp/lsp-frames.js +12 -0
  215. package/dist/lsp/manager.d.ts +12 -0
  216. package/dist/lsp/manager.js +35 -2
  217. package/dist/lsp/types.d.ts +10 -0
  218. package/dist/lsp/ws-transport.d.ts +12 -0
  219. package/dist/lsp/ws-transport.js +53 -5
  220. package/dist/lsp-evict.d.ts +14 -0
  221. package/dist/lsp-evict.js +15 -1
  222. package/dist/main.js +2132 -96
  223. package/dist/memory-export.d.ts +1 -0
  224. package/dist/memory-export.js +4 -0
  225. package/dist/memory-scope.d.ts +49 -0
  226. package/dist/memory-scope.js +87 -4
  227. package/dist/memory-sync-client.d.ts +24 -0
  228. package/dist/memory-sync-client.js +41 -2
  229. package/dist/memory-sync.d.ts +23 -0
  230. package/dist/memory-sync.js +70 -1
  231. package/dist/model-select.d.ts +39 -0
  232. package/dist/model-select.js +42 -1
  233. package/dist/observability/cost-quota.d.ts +20 -0
  234. package/dist/observability/cost-quota.js +4 -0
  235. package/dist/observability/cost-taxonomy.d.ts +45 -0
  236. package/dist/observability/cost-taxonomy.js +34 -0
  237. package/dist/observability/logger.d.ts +1 -0
  238. package/dist/observability/logger.js +6 -0
  239. package/dist/observability/metrics.d.ts +13 -0
  240. package/dist/observability/metrics.js +63 -0
  241. package/dist/observability/otel-exporter.d.ts +9 -0
  242. package/dist/observability/otel-exporter.js +11 -3
  243. package/dist/observability/principal-context.d.ts +9 -0
  244. package/dist/observability/principal-context.js +9 -0
  245. package/dist/observability/prompt-manifest.d.ts +37 -0
  246. package/dist/observability/prompt-manifest.js +35 -1
  247. package/dist/observability/rate-limit.d.ts +10 -0
  248. package/dist/observability/rate-limit.js +1 -0
  249. package/dist/observability/tool-trace.d.ts +24 -0
  250. package/dist/observability/tool-trace.js +41 -1
  251. package/dist/orchestration/hardened-vm-runner.d.ts +107 -0
  252. package/dist/orchestration/hardened-vm-runner.js +119 -4
  253. package/dist/orchestration/hardened-vm-worker-runner.d.ts +14 -0
  254. package/dist/orchestration/hardened-vm-worker-runner.js +26 -1
  255. package/dist/orchestration/hardened-vm-worker.js +27 -0
  256. package/dist/orchestration/subagent-steer.d.ts +44 -0
  257. package/dist/orchestration/subagent-steer.js +45 -1
  258. package/dist/orchestration/workflow-agent-steer.d.ts +54 -0
  259. package/dist/orchestration/workflow-agent-steer.js +80 -1
  260. package/dist/orchestration/workflow-completion-inbox.d.ts +189 -2
  261. package/dist/orchestration/workflow-completion-inbox.js +283 -32
  262. package/dist/orchestration/workflow-notify-journal.d.ts +132 -1
  263. package/dist/orchestration/workflow-notify-journal.js +187 -13
  264. package/dist/parked-decide.d.ts +61 -0
  265. package/dist/parked-decide.js +58 -1
  266. package/dist/per-task-image.d.ts +54 -0
  267. package/dist/per-task-image.js +41 -0
  268. package/dist/plan-cache-probe.d.ts +35 -0
  269. package/dist/plan-cache-probe.js +18 -3
  270. package/dist/plugins/approval-exemption-store.d.ts +7 -0
  271. package/dist/plugins/approval-exemption-store.js +28 -2
  272. package/dist/plugins/approval-store-sql.d.ts +64 -0
  273. package/dist/plugins/approval-store-sql.js +32 -0
  274. package/dist/plugins/background-agent-store-sql.d.ts +55 -0
  275. package/dist/plugins/background-agent-store-sql.js +91 -4
  276. package/dist/plugins/background-shell-support.d.ts +98 -0
  277. package/dist/plugins/background-shell-support.js +117 -13
  278. package/dist/plugins/blob-backend.d.ts +104 -0
  279. package/dist/plugins/blob-backend.js +163 -6
  280. package/dist/plugins/breaker-state-sql.d.ts +65 -1
  281. package/dist/plugins/breaker-state-sql.js +46 -8
  282. package/dist/plugins/caching-session-store.d.ts +42 -0
  283. package/dist/plugins/caching-session-store.js +63 -3
  284. package/dist/plugins/checkpoint-store-sql.d.ts +179 -0
  285. package/dist/plugins/checkpoint-store-sql.js +239 -11
  286. package/dist/plugins/file-outcome-sink.d.ts +4 -0
  287. package/dist/plugins/file-outcome-sink.js +9 -0
  288. package/dist/plugins/file-resume-anchor-store.d.ts +20 -0
  289. package/dist/plugins/file-resume-anchor-store.js +43 -4
  290. package/dist/plugins/file-run-store.d.ts +90 -0
  291. package/dist/plugins/file-run-store.js +145 -13
  292. package/dist/plugins/file-snapshot-store-sql.d.ts +133 -1
  293. package/dist/plugins/file-snapshot-store-sql.js +178 -10
  294. package/dist/plugins/file-workflow-journal-store.d.ts +10 -0
  295. package/dist/plugins/file-workflow-journal-store.js +10 -0
  296. package/dist/plugins/fork-routing-session-store.d.ts +47 -0
  297. package/dist/plugins/fork-routing-session-store.js +51 -3
  298. package/dist/plugins/host-platform.d.ts +69 -0
  299. package/dist/plugins/host-platform.js +81 -2
  300. package/dist/plugins/image-bake-store-sql.d.ts +136 -1
  301. package/dist/plugins/image-bake-store-sql.js +241 -7
  302. package/dist/plugins/image-index-sql.d.ts +46 -0
  303. package/dist/plugins/image-index-sql.js +113 -4
  304. package/dist/plugins/k8s-bg-scripts.d.ts +34 -0
  305. package/dist/plugins/k8s-bg-scripts.js +88 -4
  306. package/dist/plugins/k8s-exec-protocol.d.ts +33 -0
  307. package/dist/plugins/k8s-exec-protocol.js +41 -0
  308. package/dist/plugins/local-checkpoint-store.d.ts +40 -0
  309. package/dist/plugins/local-checkpoint-store.js +86 -7
  310. package/dist/plugins/local-session-store.d.ts +157 -0
  311. package/dist/plugins/local-session-store.js +289 -34
  312. package/dist/plugins/local-task-attachment-store.js +14 -2
  313. package/dist/plugins/mailbox-store-sql.d.ts +38 -0
  314. package/dist/plugins/mailbox-store-sql.js +39 -6
  315. package/dist/plugins/memory-engine-pg.d.ts +30 -0
  316. package/dist/plugins/memory-engine-pg.js +122 -4
  317. package/dist/plugins/memory-engine-tidb.d.ts +26 -0
  318. package/dist/plugins/memory-engine-tidb.js +115 -5
  319. package/dist/plugins/memory-engine-vector-util.d.ts +5 -0
  320. package/dist/plugins/memory-engine-vector-util.js +5 -0
  321. package/dist/plugins/memory-resume-anchor-store.d.ts +8 -0
  322. package/dist/plugins/memory-resume-anchor-store.js +17 -0
  323. package/dist/plugins/memory-run-store.d.ts +63 -0
  324. package/dist/plugins/memory-run-store.js +73 -8
  325. package/dist/plugins/memory-session-policy-store.d.ts +17 -0
  326. package/dist/plugins/memory-session-policy-store.js +17 -0
  327. package/dist/plugins/memory-sync-store-pg.d.ts +42 -0
  328. package/dist/plugins/memory-sync-store-pg.js +45 -2
  329. package/dist/plugins/memory-sync-store-tidb.d.ts +9 -0
  330. package/dist/plugins/memory-sync-store-tidb.js +31 -1
  331. package/dist/plugins/outcome-ledger-sql.d.ts +63 -0
  332. package/dist/plugins/outcome-ledger-sql.js +97 -3
  333. package/dist/plugins/pg-approval-store.d.ts +7 -0
  334. package/dist/plugins/pg-approval-store.js +7 -0
  335. package/dist/plugins/pg-breaker-state.d.ts +6 -0
  336. package/dist/plugins/pg-breaker-state.js +6 -0
  337. package/dist/plugins/pg-checkpoint-store.d.ts +8 -0
  338. package/dist/plugins/pg-checkpoint-store.js +8 -0
  339. package/dist/plugins/pg-cost-quota.d.ts +17 -0
  340. package/dist/plugins/pg-cost-quota.js +6 -0
  341. package/dist/plugins/pg-file-snapshot-store.d.ts +6 -0
  342. package/dist/plugins/pg-file-snapshot-store.js +6 -0
  343. package/dist/plugins/pg-image-bake.d.ts +9 -0
  344. package/dist/plugins/pg-image-bake.js +9 -0
  345. package/dist/plugins/pg-image-index.d.ts +9 -0
  346. package/dist/plugins/pg-image-index.js +9 -0
  347. package/dist/plugins/pg-outcome-ledger.d.ts +9 -0
  348. package/dist/plugins/pg-outcome-ledger.js +9 -0
  349. package/dist/plugins/pg-pool.d.ts +50 -0
  350. package/dist/plugins/pg-pool.js +78 -0
  351. package/dist/plugins/pg-query.d.ts +11 -0
  352. package/dist/plugins/pg-rate-limiter.d.ts +23 -0
  353. package/dist/plugins/pg-rate-limiter.js +12 -2
  354. package/dist/plugins/pg-resume-anchor-store.d.ts +5 -0
  355. package/dist/plugins/pg-resume-anchor-store.js +5 -0
  356. package/dist/plugins/pg-run-store.d.ts +7 -0
  357. package/dist/plugins/pg-run-store.js +7 -0
  358. package/dist/plugins/pg-safe-json.d.ts +13 -0
  359. package/dist/plugins/pg-safe-json.js +40 -4
  360. package/dist/plugins/pg-session-policy-store.d.ts +5 -0
  361. package/dist/plugins/pg-session-policy-store.js +5 -0
  362. package/dist/plugins/pg-session-storage.d.ts +72 -0
  363. package/dist/plugins/pg-session-storage.js +152 -20
  364. package/dist/plugins/pg-session-store.d.ts +10 -0
  365. package/dist/plugins/pg-session-store.js +10 -0
  366. package/dist/plugins/pg-tool-result-store.d.ts +7 -0
  367. package/dist/plugins/pg-tool-result-store.js +7 -0
  368. package/dist/plugins/pg-workflow-journal-store.d.ts +7 -0
  369. package/dist/plugins/pg-workflow-journal-store.js +7 -0
  370. package/dist/plugins/pg-workflow-run-store.d.ts +7 -0
  371. package/dist/plugins/pg-workflow-run-store.js +7 -0
  372. package/dist/plugins/posix-shell-fs.d.ts +3 -0
  373. package/dist/plugins/posix-shell-fs.js +31 -1
  374. package/dist/plugins/remote-env-adb.d.ts +25 -0
  375. package/dist/plugins/remote-env-adb.js +95 -12
  376. package/dist/plugins/remote-env-e2b.d.ts +146 -0
  377. package/dist/plugins/remote-env-e2b.js +371 -40
  378. package/dist/plugins/remote-env-file-error.d.ts +34 -0
  379. package/dist/plugins/remote-env-file-error.js +37 -0
  380. package/dist/plugins/remote-env-host.d.ts +151 -0
  381. package/dist/plugins/remote-env-host.js +468 -70
  382. package/dist/plugins/remote-env-k8s.d.ts +135 -0
  383. package/dist/plugins/remote-env-k8s.js +318 -32
  384. package/dist/plugins/remote-env-local-docker.d.ts +65 -0
  385. package/dist/plugins/remote-env-local-docker.js +149 -24
  386. package/dist/plugins/remote-env-ssh.d.ts +35 -0
  387. package/dist/plugins/remote-env-ssh.js +117 -20
  388. package/dist/plugins/remote-scratchpad.d.ts +38 -0
  389. package/dist/plugins/remote-scratchpad.js +32 -2
  390. package/dist/plugins/remote-shell.d.ts +22 -0
  391. package/dist/plugins/remote-shell.js +27 -1
  392. package/dist/plugins/resume-anchor-store-sql.d.ts +28 -0
  393. package/dist/plugins/resume-anchor-store-sql.js +11 -0
  394. package/dist/plugins/roster-store-sql.d.ts +27 -0
  395. package/dist/plugins/roster-store-sql.js +54 -0
  396. package/dist/plugins/run-store-sql.d.ts +194 -0
  397. package/dist/plugins/run-store-sql.js +210 -9
  398. package/dist/plugins/s3-presign.d.ts +20 -0
  399. package/dist/plugins/s3-presign.js +49 -2
  400. package/dist/plugins/scheduler-support.d.ts +12 -0
  401. package/dist/plugins/scheduler-support.js +75 -3
  402. package/dist/plugins/send-file-ledger.d.ts +15 -0
  403. package/dist/plugins/send-file-ledger.js +53 -4
  404. package/dist/plugins/send-user-file.d.ts +77 -0
  405. package/dist/plugins/send-user-file.js +92 -4
  406. package/dist/plugins/session-policy-store-sql.d.ts +15 -0
  407. package/dist/plugins/session-policy-store-sql.js +75 -3
  408. package/dist/plugins/session-store.d.ts +45 -0
  409. package/dist/plugins/session-store.js +51 -0
  410. package/dist/plugins/sql-driver.d.ts +77 -0
  411. package/dist/plugins/sql-driver.js +4 -0
  412. package/dist/plugins/sql-escape.d.ts +8 -0
  413. package/dist/plugins/sql-escape.js +8 -0
  414. package/dist/plugins/sql-row-helpers.d.ts +25 -0
  415. package/dist/plugins/sql-row-helpers.js +25 -0
  416. package/dist/plugins/store-backend.d.ts +103 -0
  417. package/dist/plugins/store-backend.js +120 -27
  418. package/dist/plugins/store-contracts.d.ts +62 -0
  419. package/dist/plugins/store-contracts.js +3 -0
  420. package/dist/plugins/task-attachment-store.d.ts +60 -0
  421. package/dist/plugins/task-attachment-store.js +49 -3
  422. package/dist/plugins/task-list-store-sql.d.ts +25 -0
  423. package/dist/plugins/task-list-store-sql.js +21 -0
  424. package/dist/plugins/tidb-approval-store.d.ts +6 -0
  425. package/dist/plugins/tidb-approval-store.js +6 -0
  426. package/dist/plugins/tidb-breaker-state.d.ts +5 -0
  427. package/dist/plugins/tidb-breaker-state.js +5 -0
  428. package/dist/plugins/tidb-checkpoint-store.d.ts +7 -0
  429. package/dist/plugins/tidb-checkpoint-store.js +7 -0
  430. package/dist/plugins/tidb-cost-quota.d.ts +6 -0
  431. package/dist/plugins/tidb-cost-quota.js +1 -0
  432. package/dist/plugins/tidb-file-snapshot-store.d.ts +6 -0
  433. package/dist/plugins/tidb-file-snapshot-store.js +6 -0
  434. package/dist/plugins/tidb-image-bake.d.ts +8 -0
  435. package/dist/plugins/tidb-image-bake.js +8 -0
  436. package/dist/plugins/tidb-image-index.d.ts +8 -0
  437. package/dist/plugins/tidb-image-index.js +8 -0
  438. package/dist/plugins/tidb-outcome-ledger.d.ts +10 -0
  439. package/dist/plugins/tidb-outcome-ledger.js +10 -0
  440. package/dist/plugins/tidb-pool.d.ts +56 -0
  441. package/dist/plugins/tidb-pool.js +181 -1
  442. package/dist/plugins/tidb-rate-limiter.d.ts +11 -0
  443. package/dist/plugins/tidb-rate-limiter.js +5 -2
  444. package/dist/plugins/tidb-resume-anchor-store.d.ts +5 -0
  445. package/dist/plugins/tidb-resume-anchor-store.js +5 -0
  446. package/dist/plugins/tidb-run-store.d.ts +7 -0
  447. package/dist/plugins/tidb-run-store.js +7 -0
  448. package/dist/plugins/tidb-session-policy-store.d.ts +5 -0
  449. package/dist/plugins/tidb-session-policy-store.js +5 -0
  450. package/dist/plugins/tidb-session-storage.d.ts +43 -0
  451. package/dist/plugins/tidb-session-storage.js +62 -3
  452. package/dist/plugins/tidb-session-store.d.ts +142 -0
  453. package/dist/plugins/tidb-session-store.js +264 -16
  454. package/dist/plugins/tidb-tool-result-store.d.ts +5 -0
  455. package/dist/plugins/tidb-tool-result-store.js +7 -0
  456. package/dist/plugins/tidb-workflow-journal-store.d.ts +7 -0
  457. package/dist/plugins/tidb-workflow-journal-store.js +7 -0
  458. package/dist/plugins/tidb-workflow-run-store.d.ts +8 -0
  459. package/dist/plugins/tidb-workflow-run-store.js +8 -0
  460. package/dist/plugins/tool-result-store-sql.d.ts +58 -0
  461. package/dist/plugins/tool-result-store-sql.js +38 -2
  462. package/dist/plugins/web-search.d.ts +35 -0
  463. package/dist/plugins/web-search.js +45 -9
  464. package/dist/plugins/workflow-journal-limits.d.ts +10 -0
  465. package/dist/plugins/workflow-journal-limits.js +10 -0
  466. package/dist/plugins/workflow-journal-store-sql.d.ts +78 -0
  467. package/dist/plugins/workflow-journal-store-sql.js +58 -2
  468. package/dist/plugins/workflow-run-store-sql.d.ts +84 -0
  469. package/dist/plugins/workflow-run-store-sql.js +84 -6
  470. package/dist/plugins/worktree-isolation.d.ts +45 -0
  471. package/dist/plugins/worktree-isolation.js +105 -6
  472. package/dist/plugins/write-behind-counter.d.ts +56 -1
  473. package/dist/plugins/write-behind-counter.js +53 -14
  474. package/dist/principal-jwt.d.ts +24 -0
  475. package/dist/principal-jwt.js +60 -5
  476. package/dist/project-memory.d.ts +22 -0
  477. package/dist/project-memory.js +144 -15
  478. package/dist/prompts-domain-validate.d.ts +28 -0
  479. package/dist/prompts-domain-validate.js +42 -1
  480. package/dist/question.d.ts +33 -0
  481. package/dist/question.js +69 -2
  482. package/dist/resource-suspend.d.ts +21 -0
  483. package/dist/resource-suspend.js +16 -0
  484. package/dist/router/route-orchestration.d.ts +78 -0
  485. package/dist/router/route-orchestration.js +77 -0
  486. package/dist/run-local.d.ts +32 -0
  487. package/dist/run-local.js +172 -8
  488. package/dist/runs.d.ts +189 -4
  489. package/dist/runs.js +465 -24
  490. package/dist/runtime-caps-resolver.d.ts +106 -0
  491. package/dist/runtime-caps-resolver.js +89 -4
  492. package/dist/runtime-governance.d.ts +84 -0
  493. package/dist/runtime-governance.js +127 -1
  494. package/dist/sandbox-pkg-source.d.ts +23 -0
  495. package/dist/sandbox-pkg-source.js +37 -0
  496. package/dist/sealed-key.d.ts +54 -0
  497. package/dist/sealed-key.js +68 -3
  498. package/dist/security.d.ts +108 -0
  499. package/dist/security.js +145 -6
  500. package/dist/sema-registry.d.ts +21 -0
  501. package/dist/sema-registry.js +21 -0
  502. package/dist/session-leaf-bus.d.ts +31 -0
  503. package/dist/session-leaf-bus.js +32 -0
  504. package/dist/session-sync-content.d.ts +46 -0
  505. package/dist/session-sync-content.js +47 -1
  506. package/dist/session-sync-kernel.d.ts +89 -0
  507. package/dist/session-sync-kernel.js +48 -3
  508. package/dist/session-sync.d.ts +125 -0
  509. package/dist/session-sync.js +181 -8
  510. package/dist/session-titler.d.ts +26 -0
  511. package/dist/session-titler.js +41 -7
  512. package/dist/session-watch.d.ts +53 -1
  513. package/dist/session-watch.js +73 -9
  514. package/dist/sighup-idle.d.ts +30 -0
  515. package/dist/sighup-idle.js +12 -1
  516. package/dist/spec-fields.d.ts +91 -3
  517. package/dist/spec-fields.js +116 -4
  518. package/dist/task-cwd.d.ts +50 -0
  519. package/dist/task-cwd.js +68 -1
  520. package/dist/task-mcp.d.ts +47 -0
  521. package/dist/task-mcp.js +29 -0
  522. package/dist/task-settings.d.ts +175 -0
  523. package/dist/task-settings.js +226 -11
  524. package/dist/task-workflow.d.ts +67 -0
  525. package/dist/task-workflow.js +75 -8
  526. package/dist/tool-approval.d.ts +91 -0
  527. package/dist/tool-approval.js +215 -0
  528. package/dist/trace/artifacts.d.ts +9 -0
  529. package/dist/trace/artifacts.js +30 -5
  530. package/dist/trace/core-keyset-guard.d.ts +18 -0
  531. package/dist/trace/ledger-sink.d.ts +43 -0
  532. package/dist/trace/ledger-sink.js +64 -5
  533. package/dist/trace/project.d.ts +133 -0
  534. package/dist/trace/project.js +189 -2
  535. package/dist/trace/redact.d.ts +19 -0
  536. package/dist/trace/redact.js +66 -9
  537. package/dist/usage-analytics.d.ts +26 -0
  538. package/dist/usage-analytics.js +26 -3
  539. package/package.json +1 -1
@@ -4,6 +4,17 @@ import { toIso } from "./sql-row-helpers.js";
4
4
  function isDupKey(err) {
5
5
  return Boolean(err) && err.code === "ER_DUP_ENTRY";
6
6
  }
7
+ /**
8
+ * TiDB-backed {@link BaseSessionStorage} — the durable L1 event log for one session.
9
+ *
10
+ * - `appendEntry` / `setLeafId` persist with an **atomic compare-and-set** on `leaf_seq` + `leaf_id`
11
+ * (core's F2 optimistic-lock seam): a write only lands if the branch leaf is still what the entry
12
+ * was built against. Two stateless runners that both woke the same session can't silently fork —
13
+ * the loser gets `SessionError("conflict")` (catch with `isSessionConflict`).
14
+ * - The in-memory base tree is the wake-time snapshot; every write is also mirrored into it so the
15
+ * live harness keeps reading a consistent view. Wake is **bounded** to `[floor .. leaf]` (F3,
16
+ * core 1.6.0 branch-floor seam); older history is covered by the last compaction's summary.
17
+ */
7
18
  export class TiDBSessionStorage extends BaseSessionStorage {
8
19
  pool;
9
20
  sessionId;
@@ -16,14 +27,29 @@ export class TiDBSessionStorage extends BaseSessionStorage {
16
27
  this.leafSeq = leafSeq;
17
28
  this.floorSeq = floorSeq;
18
29
  }
30
+ /**
31
+ * [976] S3 RB-14 pull seam — `SessionStorage.getEpochAnchor?()`: the nearest epoch carrier BELOW the
32
+ * bounded-wake floor. core's `Session.getPromptEpoch()` (≥1.305) calls this only when the in-window
33
+ * branch walk finds no carrier — i.e. a rewind/resumeAt cut inside the kept tail, where the compaction
34
+ * restatement is a DESCENDANT of the cut and the root pin sits under the floor. Semantics per core's
35
+ * ruling: highest-seq valid carrier below the floor (not an ancestor-chain walk — fallback of last
36
+ * resort); malformed rows are skipped (#13: fall back to the older valid pin — the write gate refuses
37
+ * malformed carriers, so these only exist via out-of-band writes); none ⇒ undefined = a genuine
38
+ * pre-epoch session (core mints legacy_migration, the correct meaning). core re-normalizes whatever we
39
+ * return, so this stays honest even if the two sides ever disagree on strictness.
40
+ */
19
41
  async getEpochAnchor() {
20
42
  if (this.floorSeq <= 0)
21
- return undefined;
43
+ return undefined; // full load — the walk already reaches the root pin
44
+ // Keyset-paged scan to EXHAUSTION (codex HIGH): a long-lived session upgraded across the epoch
45
+ // release carries 100+ pre-epoch compactions with NO restatement between the floor and the older
46
+ // valid pin — a bounded LIMIT would run dry on them and return undefined, which here specifically
47
+ // means "genuinely pre-epoch" and would let the caller mint a migration epoch over a durable anchor.
22
48
  let cursor = this.floorSeq;
23
49
  for (;;) {
24
50
  const [rows] = await this.pool.query("SELECT seq, payload FROM session_event WHERE session_id = ? AND seq < ? AND type IN ('prompt_epoch','compaction') ORDER BY seq DESC LIMIT 100", [this.sessionId, cursor]);
25
51
  if (rows.length === 0)
26
- return undefined;
52
+ return undefined; // exhausted — a genuine pre-epoch session
27
53
  for (const r of rows) {
28
54
  const e = (typeof r.payload === "string" ? JSON.parse(r.payload) : r.payload);
29
55
  const d = e.type === "prompt_epoch" ? normalizePromptEpoch(e) : normalizePromptEpoch(e.details?.promptEpoch);
@@ -33,7 +59,27 @@ export class TiDBSessionStorage extends BaseSessionStorage {
33
59
  cursor = Number(rows[rows.length - 1].seq);
34
60
  }
35
61
  }
62
+ /**
63
+ * Rebuild a session from its event log (= wake). Returns null if the session does not exist.
64
+ *
65
+ * F3 bounded load: only `[floor .. leaf]` is read, where floor = the last compaction's
66
+ * `firstKeptEntryId` (everything older is represented by that compaction's summary, so it never
67
+ * enters context). No compaction yet → floor=null → full load (the session is still short).
68
+ *
69
+ * This is the durable, bounded-READ equivalent of core's `boundedTail(pathEntries)` (1.42.0): that
70
+ * helper trims a FULL-loaded path in memory, whereas we compute the floor seq first and only `SELECT
71
+ * seq >= floorSeq` — so the head never leaves cold storage. Our sessions are LINEAR (no fork), so
72
+ * seq-order == root→leaf path-order and our `seq >= floorSeq` tail is byte-identical to
73
+ * `boundedTail(path).tail`; the resulting floored `BaseSessionStorage.buildContext()` matches a
74
+ * full-tree wake (core's `session-floor.test.ts`). If branching is ever added, switch to `boundedTail`.
75
+ */
36
76
  static async wake(pool, sessionId) {
77
+ // KNOWN/ACCEPTED (audit B): meta + floor + events are three queries, not one snapshot — a writer
78
+ // appending between them can make this wake see MORE events than the meta row described (never
79
+ // fewer: seq is append-only and `seq >= floorSeq` reads the tail). That's only reachable when two
80
+ // actors drive the same session concurrently, which the task_active session lock already
81
+ // serializes; the persist path then re-CASes leaf_id/leaf_seq, so a stale wake loses cleanly there. A
82
+ // single-snapshot read would need a repeatable-read txn per wake — not worth it for this guard rail.
37
83
  const [metaRows] = await pool.query("SELECT created_at, leaf_id, leaf_seq FROM session_meta WHERE session_id = ?", [sessionId]);
38
84
  const meta = metaRows[0];
39
85
  if (!meta)
@@ -44,6 +90,7 @@ export class TiDBSessionStorage extends BaseSessionStorage {
44
90
  const metadata = { id: sessionId, createdAt: toIso(meta.created_at) };
45
91
  return new TiDBSessionStorage(pool, sessionId, metadata, entries, meta.leaf_id ?? null, Number(meta.leaf_seq), floorEntryId, floorSeq);
46
92
  }
93
+ /** The bounded-window floor = last compaction's firstKeptEntryId (and its seq). */
47
94
  static async computeFloor(pool, sessionId) {
48
95
  const [compRows] = await pool.query("SELECT payload FROM session_event WHERE session_id = ? AND type = 'compaction' ORDER BY seq DESC LIMIT 1", [sessionId]);
49
96
  if (!compRows[0])
@@ -53,10 +100,12 @@ export class TiDBSessionStorage extends BaseSessionStorage {
53
100
  if (!fk)
54
101
  return { floorEntryId: null, floorSeq: 0 };
55
102
  const [seqRows] = await pool.query("SELECT seq FROM session_event WHERE session_id = ? AND entry_id = ?", [sessionId, fk]);
103
+ // firstKeptEntryId missing from the log (shouldn't happen) → degrade to full load.
56
104
  if (!seqRows[0])
57
105
  return { floorEntryId: null, floorSeq: 0 };
58
106
  return { floorEntryId: fk, floorSeq: Number(seqRows[0].seq) };
59
107
  }
108
+ /** Sub-floor lookups (e.g. a label target) aren't in the loaded tail — fall back to the durable log. */
60
109
  async getEntry(id) {
61
110
  const inMem = await super.getEntry(id);
62
111
  if (inMem)
@@ -72,10 +121,16 @@ export class TiDBSessionStorage extends BaseSessionStorage {
72
121
  this.recordEntry(entry);
73
122
  }
74
123
  async setLeafId(leafId, opts) {
124
+ // A leaf move is itself a persisted `leaf` entry whose parent is the current leaf.
75
125
  const leafEntry = this.createLeafEntry(leafId);
76
126
  await this.persist(leafEntry, opts);
77
127
  this.recordEntry(leafEntry);
78
128
  }
129
+ /**
130
+ * Atomically: CAS the meta leaf (+bump leaf_seq), then append the event at the new seq.
131
+ * The `(session_id, seq)` primary key is the backstop — a racing writer that grabbed the same
132
+ * seq makes our INSERT fail with a duplicate-key, which we translate to a conflict too.
133
+ */
79
134
  async persist(entry, opts) {
80
135
  const newLeaf = leafIdAfterEntry(entry);
81
136
  const conditional = opts !== undefined && opts.expectedLeafId !== undefined;
@@ -92,17 +147,21 @@ export class TiDBSessionStorage extends BaseSessionStorage {
92
147
  }
93
148
  const [seqRows] = await conn.query("SELECT leaf_seq, owner FROM session_meta WHERE session_id = ?", [this.sessionId]);
94
149
  const seq = Number(seqRows[0].leaf_seq);
150
+ // codex-2(S2 批):S2 发射的 owner 必须取**本事务当前行**——wake 快照在「wake 后被 delete+reclaim」
151
+ // 窗口里是陈旧 A,而旧 A 条目仍在=假匹配,新租户 leaf 泄进旧流。事务内同 SELECT 捎带=commit 时刻
152
+ // 真 owner,零额外查询;reclaim 后=B ⇒ notifyLocal 对 A 条目 drop(围栏真闭合)。
95
153
  const commitOwner = seqRows[0].owner ?? null;
96
154
  await conn.query("INSERT INTO session_event (session_id, seq, entry_id, parent_id, type, payload, ts) VALUES (?,?,?,?,?,?,?)", [this.sessionId, seq, entry.id, entry.parentId ?? null, entry.type, JSON.stringify(entry), new Date(entry.timestamp)]);
97
155
  await conn.commit();
98
156
  this.leafSeq = seq;
99
- emitLeafAdvance(this.sessionId, newLeaf, commitOwner, seq);
157
+ emitLeafAdvance(this.sessionId, newLeaf, commitOwner, seq); // S2 fast path — post-commit only, fire-and-forget (session-leaf-bus 契约)
100
158
  }
101
159
  catch (err) {
102
160
  try {
103
161
  await conn.rollback();
104
162
  }
105
163
  catch {
164
+ /* ignore rollback error */
106
165
  }
107
166
  if (err instanceof SessionError)
108
167
  throw err;
@@ -1,24 +1,55 @@
1
+ /**
2
+ * TiDB-backed Session event-log center (L1) — the durable "persistence center".
3
+ *
4
+ * Implements core's `SessionStore`. `acquire` rebuilds a session from its append-only event log
5
+ * (= wake/resume), so any stateless runner instance can continue it. Cross-instance write safety is
6
+ * enforced by the storage layer's compare-and-set (core's F2 seam); crash consistency (orphan
7
+ * tool-call after a mid-turn crash) is handled by the Runner calling `reconcileInterruptedSession`
8
+ * on acquire (core's F1).
9
+ *
10
+ * Persistence only. **Tenant authorization (who may wake which session) lives in the service layer**
11
+ * (`src/security.ts`), which uses `ownerOf` / `register` below. The store does not infer identity.
12
+ */
1
13
  import { type AcquiredSession, type SessionStore, type SessionTreeEntry } from "@sema-agent/core";
2
14
  import type { Pool } from "mysql2/promise";
3
15
  import type { SessionSummary } from "./store-contracts.js";
4
16
  import { type StagingHandle } from "../session-sync-kernel.js";
5
17
  export declare class TiDBSessionStore implements SessionStore {
6
18
  private readonly pool;
19
+ /** In-flight acquisitions keyed by id, so concurrent acquire(sameId) in one process share one. */
7
20
  private readonly pending;
8
21
  constructor(pool: Pool);
9
22
  acquire(sessionId?: string, opts?: {
10
23
  requireExisting?: boolean;
11
24
  }): Promise<AcquiredSession>;
12
25
  private load;
26
+ /** Idempotently create a session_meta row with an owner. Existing owner is never overwritten. */
13
27
  register(sessionId: string, owner: string | null): Promise<void>;
28
+ /** Owner principal of a session, `null` if registered ownerless, `undefined` if no such session. */
14
29
  ownerOf(sessionId: string): Promise<string | null | undefined>;
15
30
  touch(sessionId: string): Promise<void>;
31
+ /** E18 — the session's current leaf `SessionTreeEntry.id` (`session_meta.leaf_id`, set transactionally on every
32
+ * persist). A single SELECT, NO acquire/lock/CAS — safe to call mid-run (write-safety is the append-time CAS, not
33
+ * an acquire lease) and cache-bypassing (the resume-at turn-capture reads it without touching the warm session).
34
+ * Returns the leaf id, or null when the session has none / no such session. */
16
35
  getLeafId(sessionId: string): Promise<string | null>;
36
+ /** [1196] 六轮复审:owner+leafId **单行原子快照**(SSE watch 探针的租户围栏读)——两独立 SELECT 在
37
+ * delete/reclaim 缝里可拼出「旧 owner+新 leaf」混世代组合;单 SELECT 单行=天然一致。undefined=无此会话。 */
17
38
  getHead(sessionId: string): Promise<{
18
39
  owner: string | null;
19
40
  leafId: string | null;
20
41
  } | undefined>;
42
+ /** Durable history is retained; just drop any in-flight cache entry. */
21
43
  release(sessionId: string): Promise<void>;
44
+ /**
45
+ * E16 — list the caller's sessions (CC /resume picker), keyset-paginated newest-first by last activity.
46
+ * Session IDENTITY/enumeration comes from `session_meta` (owner-filtered on the service's OWN owner column);
47
+ * a LEFT JOIN onto the `task_run` runs ledger supplies run-level PREVIEW (latest run's objective/status,
48
+ * run count) but never gates which sessions exist — a session with zero runs still lists (preview null/0).
49
+ * Keyset on `(updated_at, session_id)`; `updated_at` is the session's last-activity marker (touch on every
50
+ * run/append). The shipped {@link SessionSummary} shape is preserved (additive): `lastActivityAt` =
51
+ * `session_meta.updated_at`, `firstActivityAt` = `session_meta.created_at`.
52
+ */
22
53
  listSessions(opts: {
23
54
  owner?: string;
24
55
  cursor?: {
@@ -28,21 +59,132 @@ export declare class TiDBSessionStore implements SessionStore {
28
59
  limit: number;
29
60
  q?: string;
30
61
  }): Promise<SessionSummary[]>;
62
+ /** Cheap pre-LLM probe: "none" = session_meta row not yet REGISTERED (createRun fires
63
+ * before the Runner's session acquire — the titler retries), "untitled" / "titled" as read. */
31
64
  probeTitle(sessionId: string): Promise<"none" | "untitled" | "titled">;
65
+ /** Write-once auto-title: lands ONLY when title IS NULL (a concurrent/prior title wins;
66
+ * the user-facing rename layer is BFF-side). Returns whether this call set it. */
32
67
  setTitleIfNull(sessionId: string, title: string): Promise<boolean>;
68
+ /**
69
+ * E17 — fork a session: copy its WHOLE durable history to a NEW uuidv7 session owned by `owner`, mirroring
70
+ * core's `PgSessionRepo.fork`. Entry ids / parent links are per-session and copy VERBATIM; only `seq` is
71
+ * re-densified from 0 in the new session. The new leaf = the source leaf (session_meta.leaf_id).
72
+ * Returns the new sessionId, or null if the source does not exist (the route maps that to 404).
73
+ *
74
+ * 🔴 FULL history, NOT `wake().getEntries()` (adversarial-review MEDIUM): `wake` loads only the bounded tail
75
+ * `[floor..leaf]` from the latest compaction floor (F3), so forking via it would copy only the active tail of a
76
+ * COMPACTED session and SILENTLY LOSE all pre-compaction history (contradicting the whole-history-copy intent).
77
+ * We instead SELECT the entire `session_event` log ordered by seq — every durable entry, compaction floor
78
+ * bypassed — and re-seq it dense from 0 into the new session, ids/parents/payload byte-verbatim.
79
+ */
33
80
  fork(sourceId: string, owner: string | null): Promise<string | null>;
81
+ /**
82
+ * 2c session-sync — EXPORT a session's full durable entry log for cross-backend migration. This is the
83
+ * READ half of {@link fork}, surfaced as the core `SessionRepo.exportEntries` seam: the WHOLE `session_event` log,
84
+ * oldest-first, ids/parents/payload/ts VERBATIM, with the compaction floor BYPASSED (NOT `wake().getEntries()`,
85
+ * which returns only the bounded `[floor..leaf]` tail and would silently truncate pre-floor history — see fork's
86
+ * note at :149-152). Returns `null` if the source does not exist (no `session_meta` row), mirroring fork's null
87
+ * semantics; an existing-but-empty session returns `[]`. The owner is NOT exported — import re-stamps it (§9).
88
+ */
34
89
  exportEntries(sessionId: string): Promise<SessionTreeEntry[] | null>;
90
+ /**
91
+ * 2c session-sync P1d-α (PULL streaming) — the IDS-ONLY projection of {@link exportEntries}: the entry ids of the
92
+ * WHOLE durable log, oldest-first (`SELECT entry_id … ORDER BY seq ASC`), with no payloads. Small even for a huge
93
+ * session, so the PULL `GET /sync/manifest` can carry it (and feed it to `classifySyncRelationshipByIds`) instead of
94
+ * the entries. Returns `null` if the source does not exist (no `session_meta` row), mirroring {@link exportEntries}.
95
+ */
35
96
  listEntryIds(sessionId: string): Promise<string[] | null>;
97
+ /**
98
+ * 2c session-sync P1d-α (PULL streaming) — STREAM the WHOLE durable log (compaction floor bypassed), oldest-first,
99
+ * as an async generator that KEYSET-PAGES the `session_event` table: mysql2 buffers a plain SELECT, so a 1M-row
100
+ * session would OOM if read in one shot. Instead the generator loops `… WHERE seq > cursor ORDER BY seq ASC LIMIT K`
101
+ * (K = `opts.batchSize ?? 500`), advancing the cursor to the last `seq` of each batch, until a SHORT page (fewer than
102
+ * K rows) ends the stream. Each batch is its OWN `pool.query` (a pooled connection acquired + released per batch), so
103
+ * a slow NDJSON consumer can NEVER pin one connection across the whole stream (the clay-mandated concurrency
104
+ * discipline). Start cursor = `opts.afterSeq ?? -1` (seq is 0-based dense, so `> -1` = from seq 0).
105
+ *
106
+ * Resolves to `null` (NOT an empty async-iterable) when the session does not exist — checked via `session_meta`
107
+ * EAGERLY here (before returning the iterable), exactly like {@link exportEntries}, so a missing session is distinct
108
+ * from a real-but-empty one (an empty stream). payload is parsed like {@link exportEntries} (string → JSON.parse,
109
+ * object passthrough). The check is eager (the method is async) because a generator body is lazy — it can't decide
110
+ * `null` vs. iterable on its own first pull.
111
+ */
36
112
  exportEntriesStream(sessionId: string, opts?: {
37
113
  afterSeq?: number;
38
114
  batchSize?: number;
39
115
  }): Promise<AsyncIterable<SessionTreeEntry> | null>;
116
+ /**
117
+ * 2c session-sync — IMPORT a verbatim entry log (from another backend's {@link exportEntries}) into a
118
+ * (typically NEW) `sessionId`. This is the WRITE half of {@link fork}, surfaced as `SessionRepo.importEntries`,
119
+ * with two 2c-mandated differences from fork:
120
+ * (a) OWNER RE-STAMP (§9): `owner` is the AUTHENTICATED importing principal passed by the caller; the bundle's
121
+ * own owner is NEVER trusted (a local push is always owner=null → would become an ownerless cloud session
122
+ * any anonymous caller could attach to). Mirrors the fork route's server-side `scope.gateOwner`.
123
+ * (b) the single INVARIANT GATE is core's {@link validateEntriesForImport} (unique ids / parent-before-child /
124
+ * exactly-one-root / leaf-resolvable / structural refs present) — we persist its VERBATIM output and do NOT
125
+ * re-implement any of those checks in SQL ([[core-service-boundary]]; the same discipline fork's hand-SQL
126
+ * was warned about). A violation throws `SessionError("invalid_session")` and NOTHING is written.
127
+ * The write itself mirrors fork: re-seq dense from 0, entry_id/parent_id/payload/ts verbatim, in ONE txn with
128
+ * `session_meta` LAST as the commit point (a mid-import crash leaves orphan events with no meta = invisible to
129
+ * wake, never a half-session). The leaf is the replayed leaf (core's `leafIdAfterEntry`), matching core's import.
130
+ */
40
131
  importEntries(sessionId: string, owner: string | null, entries: SessionTreeEntry[]): Promise<void>;
132
+ /**
133
+ * 2c session-sync (§7/§8) — IDEMPOTENT REPLACE: purge any existing conversation log for `sessionId` then re-import
134
+ * `entries` verbatim under `owner`, ALL in ONE txn. Unlike {@link importEntries} (a plain INSERT that crashes on a
135
+ * duplicate PK when the session already exists at the destination), replace is safe to run OVER an existing session
136
+ * — the §7 fast-forward path and a §8 retry-to-completion both land on it. The validate gate runs FIRST (fail-closed,
137
+ * before any write), then DELETE events + the OWNER-GUARDED meta delete (defense-in-depth, mirrors {@link deleteSession}
138
+ * — a wrong-owner caller can never replace another tenant's session), then the SAME shared insert body importEntries
139
+ * uses (so there is ONE source of the insert logic, no copy-paste drift). session_meta is still written LAST = commit
140
+ * point, so a mid-replace crash (post-delete, pre-insert) leaves orphan-free state (no meta = invisible to wake).
141
+ */
41
142
  replaceEntries(sessionId: string, owner: string | null, entries: SessionTreeEntry[]): Promise<void>;
143
+ /**
144
+ * Shared insert half of {@link importEntries} / {@link replaceEntries} (ONE source of the insert logic, no drift):
145
+ * write the validated entries re-seq dense from 0 (entry_id/parent_id/type/ts verbatim), THEN session_meta LAST as
146
+ * the commit point. Runs inside the caller's open transaction (`conn`) so the caller owns begin/commit/rollback.
147
+ * `validated` is the OUTPUT of {@link validateEntriesForImport} (the caller runs the gate before opening the txn).
148
+ */
42
149
  private insertValidatedLog;
150
+ /**
151
+ * 2c session-sync P1d-β (PUSH streaming, §15) — begin a STAGED import into `realSessionId` under the shadow id
152
+ * `${realSessionId}#stg-${token}`. The route mints the uuidv7 `token` (the store never calls uuidv7/Date.now itself
153
+ * → the staging id is deterministic + the route owns the lease key). Returns a {@link TiDBStagingHandle} the route
154
+ * streams entry batches into ({@link StagingHandle.appendBatch}) then commits ({@link StagingHandle.commit}, the
155
+ * atomic swap) or aborts. No row is touched here — the handle is a stateless cursor over this pool.
156
+ */
43
157
  beginImportStaging(realSessionId: string, token: string): StagingHandle;
158
+ /**
159
+ * 2c session-sync P1d-β (staged-row inspection) — read the rows STAGED under `stagingId` (NO session_meta probe — a
160
+ * staging id has no meta row by construction, so {@link exportEntries} would return null), oldest-first. The Phase-B
161
+ * import gate is now the per-line {@link StreamingImportValidator} (core 1.143.0) run during the stream, so this
162
+ * is no longer the validation path; it remains the staged-row inspection seam (tests/diagnostics). Returns `[]` for an
163
+ * empty/unknown staging id.
164
+ */
44
165
  readStagedEntries(stagingId: string): Promise<SessionTreeEntry[]>;
166
+ /**
167
+ * 2c session-sync P1d-β (§4) — reaper for ABANDONED staging sessions: DELETE session_event rows under a staging id
168
+ * (`session_id LIKE '%#stg-%'`) that has NO session_meta (never committed → invisible orphans) AND whose OLDEST
169
+ * staged row is older than the grace window (an IN-FLIGHT stream keeps appending fresh `ts` rows → its MIN(ts) is
170
+ * recent → it is NOT reaped, exactly like sweepOrphanBlobs' created_at grace). Per-staging-id, so a slow but live
171
+ * stream is never reaped while another abandoned one is. Returns the affected row count. Driven by main.ts's reaper.
172
+ */
45
173
  sweepStagingSessions(): Promise<number>;
174
+ /**
175
+ * E21 — purge a session's CONVERSATION HISTORY (session_meta + session_event). Idempotent: a missing
176
+ * session is a no-op (returns false). The service's OWN run-ledger / checkpoint / tool-result rows are
177
+ * purged separately by the route's `purgeSession` coordinator — this method owns only the session
178
+ * abstraction's tables (the `SessionRepo.delete` half).
179
+ *
180
+ * `owner` is the single-DB-fleet null-safe SQL owner guard on `session_meta.owner` (defense-in-depth — the
181
+ * route already owner-gates; `<=>` so a legacy null-owner session matches owner=null). session_event carries
182
+ * no owner column, so its purge is GATED on the owner-matched meta delete: if the meta DELETE matched 0 rows
183
+ * (wrong owner / already gone) we skip the event delete — so a wrong-owner caller can never strand-delete
184
+ * another tenant's events. Meta is deleted FIRST (mirrors core BUG-2: once it's gone, wake is `null`
185
+ * regardless of leftover events; if a crash interleaves, orphan events with NO meta are invisible, never a
186
+ * half-session), and the event purge only runs after that owner-matched commit point.
187
+ */
46
188
  deleteSession(sessionId: string, owner: string | null): Promise<boolean>;
47
189
  get size(): number;
48
190
  dispose(): void;