@sema-agent/server 7.147.0 → 7.149.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 (790) hide show
  1. package/MIGRATION.md +1468 -24
  2. package/README.md +35 -7
  3. package/README.zh-CN.md +18 -8
  4. package/USAGE.md +444 -193
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/approval-card.d.ts +36 -38
  39. package/dist/approval-gate-currency.js +3 -2
  40. package/dist/approval-leg-origin.d.ts +33 -0
  41. package/dist/approval-leg-origin.js +4 -0
  42. package/dist/approval-reconciler.d.ts +4 -13
  43. package/dist/approval-reconciler.js +2 -2
  44. package/dist/approval.d.ts +13 -11
  45. package/dist/approval.js +3 -3
  46. package/dist/audit.d.ts +10 -3
  47. package/dist/audit.js +15 -7
  48. package/dist/auth-bridge.d.ts +9 -15
  49. package/dist/auth-bridge.js +4 -11
  50. package/dist/auth-keys.d.ts +10 -1
  51. package/dist/auth-keys.js +8 -0
  52. package/dist/auto-mode-face.d.ts +10 -7
  53. package/dist/auto-mode-face.js +7 -4
  54. package/dist/background-agent-name.d.ts +19 -1
  55. package/dist/background-agent-name.js +12 -2
  56. package/dist/background-session-reap.d.ts +1 -1
  57. package/dist/bake-runner/main.js +9 -6
  58. package/dist/bench/s1/arms.js +6 -5
  59. package/dist/bench/s1/live-deps.js +5 -2
  60. package/dist/bench/s1/run-firm.js +6 -5
  61. package/dist/bind-host.d.ts +25 -0
  62. package/dist/bind-host.js +25 -0
  63. package/dist/boot/adoption.d.ts +3 -0
  64. package/dist/boot/adoption.js +1 -0
  65. package/dist/boot/deployment-mods.d.ts +1 -1
  66. package/dist/boot/execution-env.d.ts +17 -7
  67. package/dist/boot/execution-env.js +47 -42
  68. package/dist/boot/execution-lane.d.ts +6 -4
  69. package/dist/boot/execution-lane.js +3 -1
  70. package/dist/boot/exit-boundary.d.ts +2 -2
  71. package/dist/boot/exit-boundary.js +6 -5
  72. package/dist/boot/fatal-exit.d.ts +3 -5
  73. package/dist/boot/fatal-exit.js +2 -2
  74. package/dist/boot/leader.d.ts +15 -0
  75. package/dist/boot/leader.js +17 -15
  76. package/dist/boot/memory-consolidation.d.ts +37 -29
  77. package/dist/boot/memory-consolidation.js +11 -5
  78. package/dist/boot/org-delivery.d.ts +3 -2
  79. package/dist/boot/org-memory.js +1 -1
  80. package/dist/boot/parked-revive-gate.js +2 -2
  81. package/dist/boot/reapers.d.ts +4 -3
  82. package/dist/boot/reapers.js +19 -16
  83. package/dist/boot/resolve-spec.d.ts +5 -3
  84. package/dist/boot/resolve-spec.js +60 -70
  85. package/dist/boot/retention-lane.d.ts +4 -4
  86. package/dist/boot/retention-lane.js +2 -2
  87. package/dist/boot/runner-deps.d.ts +28 -7
  88. package/dist/boot/runner-deps.js +14 -5
  89. package/dist/boot/runtime-caps.d.ts +2 -2
  90. package/dist/boot/runtime-caps.js +16 -2
  91. package/dist/boot/session-faces.d.ts +16 -7
  92. package/dist/boot/session-faces.js +114 -94
  93. package/dist/boot/shutdown.d.ts +5 -4
  94. package/dist/boot/shutdown.js +6 -4
  95. package/dist/boot/stage-01-config.d.ts +1 -0
  96. package/dist/boot/stage-01-config.js +13 -4
  97. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
  98. package/dist/boot/stage-02-web-admin-pull.js +16 -3
  99. package/dist/boot/stage-03-store-backend.d.ts +4 -0
  100. package/dist/boot/stage-03-store-backend.js +4 -3
  101. package/dist/boot/stage-04-stores.d.ts +3 -0
  102. package/dist/boot/stage-04-stores.js +2 -2
  103. package/dist/boot/stage-05-execution-env.d.ts +8 -3
  104. package/dist/boot/stage-05-execution-env.js +2 -2
  105. package/dist/boot/stage-06-runners.d.ts +12 -13
  106. package/dist/boot/stage-06-runners.js +23 -15
  107. package/dist/boot/stage-07-capability-layer.d.ts +13 -9
  108. package/dist/boot/stage-07-capability-layer.js +5 -3
  109. package/dist/boot/stage-08-reapers.d.ts +13 -9
  110. package/dist/boot/stage-08-reapers.js +3 -3
  111. package/dist/boot/stage-09-leader.d.ts +14 -16
  112. package/dist/boot/stage-09-leader.js +12 -4
  113. package/dist/boot/stage-10-http-server.d.ts +14 -16
  114. package/dist/boot/stage-10-http-server.js +7 -4
  115. package/dist/boot/store-evidence.d.ts +20 -0
  116. package/dist/boot/store-evidence.js +13 -0
  117. package/dist/boot/stores.d.ts +6 -0
  118. package/dist/boot/stores.js +41 -27
  119. package/dist/boot/task-list-lane.d.ts +4 -4
  120. package/dist/boot/web-admin.d.ts +4 -2
  121. package/dist/boot/web-admin.js +55 -35
  122. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  123. package/dist/boot-reclaim.d.ts +3 -1
  124. package/dist/boot-reclaim.js +1 -1
  125. package/dist/brain.d.ts +7 -18
  126. package/dist/brain.js +5 -17
  127. package/dist/budget.js +6 -6
  128. package/dist/capabilities/center-plugins.d.ts +7 -1
  129. package/dist/capabilities/center-plugins.js +32 -10
  130. package/dist/capabilities/center-wiring.js +1 -1
  131. package/dist/capabilities/composite-members.d.ts +2 -2
  132. package/dist/capabilities/composite-members.js +2 -2
  133. package/dist/capabilities/repo-tools.d.ts +2 -0
  134. package/dist/capabilities/repo-tools.js +14 -12
  135. package/dist/capabilities/scenarios.d.ts +6 -15
  136. package/dist/capabilities/scenarios.js +11 -16
  137. package/dist/capabilities/skills.d.ts +1 -1
  138. package/dist/capabilities/tool-defer.d.ts +1 -1
  139. package/dist/capability-facts.d.ts +39 -11
  140. package/dist/capability-facts.js +35 -7
  141. package/dist/card-settle-stored-scope.d.ts +56 -0
  142. package/dist/card-settle-stored-scope.js +27 -0
  143. package/dist/card-void.d.ts +8 -13
  144. package/dist/card-void.js +2 -7
  145. package/dist/center-credential-renewer.d.ts +6 -2
  146. package/dist/center-credential-renewer.js +7 -3
  147. package/dist/config-catalog.d.ts +28 -1
  148. package/dist/config-catalog.js +95 -85
  149. package/dist/config-dir-trust.d.ts +37 -4
  150. package/dist/config-dir-trust.js +88 -44
  151. package/dist/config-invariants.d.ts +43 -3
  152. package/dist/config-invariants.js +69 -5
  153. package/dist/config-lkg.d.ts +23 -1
  154. package/dist/config-lkg.js +17 -3
  155. package/dist/config-provider.d.ts +9 -9
  156. package/dist/config-provider.js +25 -110
  157. package/dist/config-pull-failure.d.ts +50 -0
  158. package/dist/config-pull-failure.js +48 -0
  159. package/dist/config-types.d.ts +62 -21
  160. package/dist/config.d.ts +14 -21
  161. package/dist/config.js +141 -64
  162. package/dist/context-window-notice.d.ts +31 -0
  163. package/dist/context-window-notice.js +28 -0
  164. package/dist/delegated-session-owner.d.ts +1 -1
  165. package/dist/deleted-session-ids.d.ts +3 -2
  166. package/dist/deployment-governance.d.ts +3 -3
  167. package/dist/deployment-shape.d.ts +46 -11
  168. package/dist/deployment-shape.js +8 -0
  169. package/dist/egress-redirect.d.ts +25 -7
  170. package/dist/egress-redirect.js +20 -2
  171. package/dist/elicitation.d.ts +6 -5
  172. package/dist/elicitation.js +23 -22
  173. package/dist/engine-identity.d.ts +28 -0
  174. package/dist/engine-identity.js +10 -0
  175. package/dist/entry-problems.d.ts +5 -7
  176. package/dist/entry-problems.js +1 -1
  177. package/dist/env-facts.js +2 -1
  178. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  179. package/dist/env-name-allowlist-knobs.js +5 -0
  180. package/dist/env-witness.d.ts +7 -0
  181. package/dist/env-witness.js +16 -0
  182. package/dist/execution-lane-caps.d.ts +25 -23
  183. package/dist/execution-lane-caps.js +18 -26
  184. package/dist/execution-placement.d.ts +58 -18
  185. package/dist/execution-placement.js +41 -2
  186. package/dist/field-conflict.d.ts +7 -11
  187. package/dist/field-conflict.js +3 -3
  188. package/dist/file-history-capture.d.ts +3 -3
  189. package/dist/file-history-disclosure.js +1 -0
  190. package/dist/fleet/fleet-bus.d.ts +21 -3
  191. package/dist/fleet/fleet-bus.js +35 -25
  192. package/dist/fleet/fleet-reconciler.js +2 -2
  193. package/dist/fleet/serving-lease.js +3 -3
  194. package/dist/fleet-client.js +3 -3
  195. package/dist/fleet-lease.d.ts +0 -1
  196. package/dist/fleet-lease.js +4 -5
  197. package/dist/history-anchor.d.ts +23 -3
  198. package/dist/history-anchor.js +24 -4
  199. package/dist/hitl-delivery.d.ts +90 -0
  200. package/dist/hitl-delivery.js +98 -0
  201. package/dist/hooks/classic-stations.d.ts +8 -11
  202. package/dist/hooks/classic-stations.js +0 -7
  203. package/dist/hooks/command-spawn.d.ts +7 -2
  204. package/dist/hooks/command-spawn.js +13 -6
  205. package/dist/hooks/hook-llm.d.ts +5 -1
  206. package/dist/hooks/hook-llm.js +24 -15
  207. package/dist/hooks/hook-runner.d.ts +72 -57
  208. package/dist/hooks/hook-runner.js +271 -193
  209. package/dist/host-lsp-manager.d.ts +22 -8
  210. package/dist/host-lsp-manager.js +4 -1
  211. package/dist/http/active-run-conflict.d.ts +2 -43
  212. package/dist/http/active-run-conflict.js +3 -7
  213. package/dist/http/admission.d.ts +4 -18
  214. package/dist/http/admission.js +76 -79
  215. package/dist/http/approval-sweeps.d.ts +3 -3
  216. package/dist/http/approval-sweeps.js +56 -31
  217. package/dist/http/caller-trust.d.ts +8 -10
  218. package/dist/http/caller-trust.js +1 -2
  219. package/dist/http/claim-heartbeat.d.ts +49 -0
  220. package/dist/http/claim-heartbeat.js +46 -0
  221. package/dist/http/claimed-run.d.ts +16 -8
  222. package/dist/http/claimed-run.js +8 -0
  223. package/dist/http/dispatch.d.ts +8 -1
  224. package/dist/http/dispatch.js +78 -30
  225. package/dist/http/durable-run-leg.d.ts +11 -4
  226. package/dist/http/durable-run-leg.js +45 -21
  227. package/dist/http/execution-context.d.ts +122 -47
  228. package/dist/http/execution-context.js +135 -43
  229. package/dist/http/health-reader.d.ts +36 -0
  230. package/dist/http/health-reader.js +21 -0
  231. package/dist/http/health-self-report.d.ts +9 -9
  232. package/dist/http/health-self-report.js +4 -4
  233. package/dist/http/idempotency.d.ts +9 -5
  234. package/dist/http/idempotency.js +4 -4
  235. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  236. package/dist/http/memory-compliance-failure-reply.js +4 -2
  237. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  238. package/dist/http/memory-face-fault-reply.js +71 -0
  239. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  240. package/dist/http/memory-store-refusal-reply.js +3 -0
  241. package/dist/http/owner-access.d.ts +392 -67
  242. package/dist/http/owner-access.js +370 -35
  243. package/dist/http/principal-gate.d.ts +39 -89
  244. package/dist/http/principal-gate.js +26 -68
  245. package/dist/http/refusal-body.d.ts +35 -2
  246. package/dist/http/refusal-body.js +34 -0
  247. package/dist/http/request-guards.d.ts +9 -13
  248. package/dist/http/request-guards.js +34 -68
  249. package/dist/http/resume-composition.d.ts +37 -0
  250. package/dist/http/resume-composition.js +18 -0
  251. package/dist/http/resume-ctx-read.d.ts +46 -12
  252. package/dist/http/resume-ctx-read.js +31 -6
  253. package/dist/http/resume-legs.d.ts +54 -19
  254. package/dist/http/resume-legs.js +408 -196
  255. package/dist/http/retired-skill-manifest.d.ts +1 -1
  256. package/dist/http/route-ctx.d.ts +31 -32
  257. package/dist/http/routes/a2a-serve.d.ts +43 -5
  258. package/dist/http/routes/a2a-serve.js +60 -37
  259. package/dist/http/routes/admin-config-refresh.js +2 -2
  260. package/dist/http/routes/admin-drain.js +2 -2
  261. package/dist/http/routes/admin-memory-optout.js +4 -3
  262. package/dist/http/routes/adoption.d.ts +3 -0
  263. package/dist/http/routes/adoption.js +17 -10
  264. package/dist/http/routes/agents-roster.js +13 -7
  265. package/dist/http/routes/approvals-assistant.js +73 -67
  266. package/dist/http/routes/attachments.js +2 -2
  267. package/dist/http/routes/background.d.ts +3 -3
  268. package/dist/http/routes/background.js +9 -17
  269. package/dist/http/routes/capabilities.js +16 -19
  270. package/dist/http/routes/config-catalog.js +2 -2
  271. package/dist/http/routes/devices.d.ts +3 -3
  272. package/dist/http/routes/devices.js +4 -4
  273. package/dist/http/routes/diagnostics.d.ts +29 -3
  274. package/dist/http/routes/diagnostics.js +49 -18
  275. package/dist/http/routes/engine.js +2 -2
  276. package/dist/http/routes/fleet.js +5 -3
  277. package/dist/http/routes/images.js +10 -6
  278. package/dist/http/routes/leader.d.ts +7 -2
  279. package/dist/http/routes/leader.js +12 -3
  280. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  281. package/dist/http/routes/mcp-reconnect.js +7 -15
  282. package/dist/http/routes/memory-bundle.js +4 -7
  283. package/dist/http/routes/memory-compliance.js +4 -4
  284. package/dist/http/routes/memory-consolidation.js +6 -9
  285. package/dist/http/routes/memory-origin.d.ts +2 -0
  286. package/dist/http/routes/memory-origin.js +7 -8
  287. package/dist/http/routes/memory-policy.js +17 -12
  288. package/dist/http/routes/notify-wake.js +10 -19
  289. package/dist/http/routes/observability.js +3 -3
  290. package/dist/http/routes/principal-inbox.d.ts +4 -2
  291. package/dist/http/routes/principal-inbox.js +5 -4
  292. package/dist/http/routes/projects.d.ts +1 -1
  293. package/dist/http/routes/projects.js +3 -2
  294. package/dist/http/routes/retention-ops.js +6 -9
  295. package/dist/http/routes/rules.js +20 -5
  296. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  297. package/dist/http/routes/run-memory-capture.js +6 -12
  298. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  299. package/dist/http/routes/run-permission-mode.js +10 -17
  300. package/dist/http/routes/runs.js +155 -237
  301. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  302. package/dist/http/routes/session-memory-sync.js +7 -13
  303. package/dist/http/routes/session-sync.d.ts +28 -7
  304. package/dist/http/routes/session-sync.js +63 -50
  305. package/dist/http/routes/sessions-list.d.ts +3 -3
  306. package/dist/http/routes/sessions-list.js +9 -9
  307. package/dist/http/routes/sessions.js +87 -124
  308. package/dist/http/routes/shared-memory.js +6 -6
  309. package/dist/http/routes/side-query.js +2 -2
  310. package/dist/http/routes/tasks.js +237 -187
  311. package/dist/http/routes/trace-usage.d.ts +0 -12
  312. package/dist/http/routes/trace-usage.js +40 -46
  313. package/dist/http/routes/workflows.d.ts +39 -4
  314. package/dist/http/routes/workflows.js +42 -14
  315. package/dist/http/run-concurrency-cap.d.ts +20 -12
  316. package/dist/http/run-concurrency-cap.js +39 -26
  317. package/dist/http/run-read-face.d.ts +3 -5
  318. package/dist/http/run-read-face.js +8 -13
  319. package/dist/http/send.d.ts +12 -3
  320. package/dist/http/send.js +42 -6
  321. package/dist/http/server.d.ts +43 -45
  322. package/dist/http/server.js +61 -11
  323. package/dist/http/sse-log.d.ts +17 -10
  324. package/dist/http/sse-log.js +7 -7
  325. package/dist/http/stored-body-replay.d.ts +12 -0
  326. package/dist/http/stored-body-replay.js +2 -2
  327. package/dist/http/submit-ctx.d.ts +17 -8
  328. package/dist/http/submit-ctx.js +8 -5
  329. package/dist/http/submit-replay.d.ts +19 -6
  330. package/dist/http/submit-replay.js +18 -6
  331. package/dist/http/sync-submit-body.d.ts +3 -4
  332. package/dist/http/sync-submit-body.js +4 -5
  333. package/dist/http/wire-types.d.ts +4 -3
  334. package/dist/identity-source.d.ts +36 -5
  335. package/dist/identity-source.js +27 -0
  336. package/dist/index.d.ts +4 -1
  337. package/dist/index.js +2 -0
  338. package/dist/key-resolver.d.ts +32 -0
  339. package/dist/key-resolver.js +23 -9
  340. package/dist/leader/diffup.js +2 -1
  341. package/dist/leader/endpoint.d.ts +26 -5
  342. package/dist/leader/endpoint.js +154 -14
  343. package/dist/leader/fanout.d.ts +3 -0
  344. package/dist/leader/fanout.js +78 -63
  345. package/dist/leader/leader.d.ts +16 -0
  346. package/dist/leader/leader.js +43 -3
  347. package/dist/leader/merge.d.ts +9 -1
  348. package/dist/leader/merge.js +16 -1
  349. package/dist/leader/repair-wire.js +1 -1
  350. package/dist/leader/wire.d.ts +36 -3
  351. package/dist/leader/wire.js +59 -18
  352. package/dist/leg-facts.d.ts +7 -2
  353. package/dist/leg-facts.js +1 -0
  354. package/dist/local-store-declaration.d.ts +54 -0
  355. package/dist/local-store-declaration.js +59 -0
  356. package/dist/lsp-evict.d.ts +6 -4
  357. package/dist/lsp-evict.js +2 -3
  358. package/dist/mcp-assertion-header.d.ts +1 -1
  359. package/dist/mcp-assertion-header.js +1 -1
  360. package/dist/memory-operator-faces.d.ts +5 -4
  361. package/dist/memory-operator-faces.js +1 -1
  362. package/dist/memory-project-layer.js +1 -1
  363. package/dist/memory-scope.d.ts +33 -6
  364. package/dist/memory-scope.js +68 -19
  365. package/dist/memory-store-refusal.d.ts +5 -2
  366. package/dist/memory-sync-client.d.ts +3 -2
  367. package/dist/memory-sync-client.js +8 -5
  368. package/dist/model-compat.d.ts +17 -8
  369. package/dist/model-compat.js +6 -2
  370. package/dist/model-context-window.d.ts +57 -0
  371. package/dist/model-context-window.js +21 -0
  372. package/dist/model-entry-headers.d.ts +46 -4
  373. package/dist/model-entry-headers.js +2 -2
  374. package/dist/model-entry-refusal.d.ts +40 -20
  375. package/dist/model-entry-refusal.js +57 -30
  376. package/dist/model-plane-face.d.ts +19 -11
  377. package/dist/model-plane-face.js +9 -1
  378. package/dist/model-plane-probe.d.ts +2 -0
  379. package/dist/model-plane-probe.js +17 -0
  380. package/dist/model-provider.d.ts +3 -3
  381. package/dist/model-reach-scope.d.ts +2 -1
  382. package/dist/model-route-endpoint.d.ts +9 -5
  383. package/dist/model-route-endpoint.js +29 -7
  384. package/dist/model-select.d.ts +16 -0
  385. package/dist/model-select.js +4 -0
  386. package/dist/mountinfo.d.ts +37 -0
  387. package/dist/mountinfo.js +47 -0
  388. package/dist/namespaced-rule-name.d.ts +23 -14
  389. package/dist/namespaced-rule-name.js +8 -11
  390. package/dist/net-address.d.ts +1 -1
  391. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  392. package/dist/observability/corrupt-read-seat.js +5 -3
  393. package/dist/observability/fail-open.d.ts +72 -40
  394. package/dist/observability/fail-open.js +74 -40
  395. package/dist/observability/logger.d.ts +22 -1
  396. package/dist/observability/logger.js +89 -12
  397. package/dist/observability/metrics.js +4 -5
  398. package/dist/observability/otel-exporter.js +2 -1
  399. package/dist/observability/principal-context.d.ts +14 -7
  400. package/dist/observability/principal-context.js +8 -3
  401. package/dist/observability/run-terminal.d.ts +7 -1
  402. package/dist/observability/run-terminal.js +6 -2
  403. package/dist/observability/secret-env-scrub.d.ts +1 -1
  404. package/dist/observability/secret-env-scrub.js +1 -1
  405. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  406. package/dist/orchestration/hardened-vm-runner.js +11 -5
  407. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  408. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  409. package/dist/orchestration/hardened-vm-worker.js +2 -1
  410. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  411. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  412. package/dist/org-delivery-gate.d.ts +36 -10
  413. package/dist/org-delivery-gate.js +12 -8
  414. package/dist/outbound-dispatcher.d.ts +1 -1
  415. package/dist/outbound-dispatcher.js +6 -12
  416. package/dist/owner-brands.d.ts +81 -0
  417. package/dist/owner-brands.js +42 -0
  418. package/dist/owner-faces.d.ts +532 -0
  419. package/dist/owner-faces.js +126 -0
  420. package/dist/park-row-commit.d.ts +67 -0
  421. package/dist/park-row-commit.js +76 -0
  422. package/dist/parked-decide.d.ts +76 -12
  423. package/dist/parked-decide.js +152 -11
  424. package/dist/parked-revive-surface.d.ts +14 -4
  425. package/dist/parked-revive-surface.js +5 -4
  426. package/dist/peer-directory.d.ts +7 -9
  427. package/dist/peer-directory.js +3 -2
  428. package/dist/permission-rule-vocab.d.ts +53 -8
  429. package/dist/permission-rule-vocab.js +30 -2
  430. package/dist/plugins/adoption-log-sql.d.ts +3 -25
  431. package/dist/plugins/adoption-log-sql.js +23 -21
  432. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  433. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  434. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  435. package/dist/plugins/approval-ask-store-file.js +37 -14
  436. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  437. package/dist/plugins/approval-ask-store-memory.js +24 -10
  438. package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
  439. package/dist/plugins/approval-ask-store-sql.js +44 -15
  440. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  441. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  442. package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
  443. package/dist/plugins/approval-exemption-skill-m46.js +21 -0
  444. package/dist/plugins/approval-exemption-store.d.ts +32 -2
  445. package/dist/plugins/approval-exemption-store.js +42 -19
  446. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  447. package/dist/plugins/approval-nonce-store.js +72 -23
  448. package/dist/plugins/blob-backend.d.ts +2 -0
  449. package/dist/plugins/blob-backend.js +9 -6
  450. package/dist/plugins/caching-session-store.d.ts +13 -1
  451. package/dist/plugins/caching-session-store.js +43 -4
  452. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  453. package/dist/plugins/checkpoint-index-columns.js +36 -1
  454. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  455. package/dist/plugins/checkpoint-store-face.js +18 -1
  456. package/dist/plugins/device-store-sql.js +1 -0
  457. package/dist/plugins/ensure-index.d.ts +13 -1
  458. package/dist/plugins/ensure-index.js +154 -21
  459. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
  460. package/dist/plugins/ensure-schema-lock-policy.js +76 -9
  461. package/dist/plugins/file-run-store.d.ts +85 -32
  462. package/dist/plugins/file-run-store.js +177 -94
  463. package/dist/plugins/host-platform.d.ts +24 -3
  464. package/dist/plugins/host-platform.js +15 -1
  465. package/dist/plugins/image-bake-store-sql.js +2 -0
  466. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  467. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  468. package/dist/plugins/k8s-pod-reaper.js +0 -1
  469. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  470. package/dist/plugins/leader-run-store-sql.js +34 -4
  471. package/dist/plugins/local-checkpoint-store.d.ts +62 -23
  472. package/dist/plugins/local-checkpoint-store.js +197 -77
  473. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  474. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  475. package/dist/plugins/local-data-root-admission.js +100 -0
  476. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  477. package/dist/plugins/local-docker-capacity.js +194 -0
  478. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  479. package/dist/plugins/local-docker-reaper.js +102 -0
  480. package/dist/plugins/local-engine-high-water.d.ts +29 -6
  481. package/dist/plugins/local-engine-high-water.js +27 -19
  482. package/dist/plugins/local-session-store.d.ts +458 -140
  483. package/dist/plugins/local-session-store.js +906 -292
  484. package/dist/plugins/local-session-window.d.ts +3 -2
  485. package/dist/plugins/local-session-window.js +3 -2
  486. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  487. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  488. package/dist/plugins/local-task-attachment-store.js +22 -1
  489. package/dist/plugins/memory-embedder.js +9 -7
  490. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  491. package/dist/plugins/memory-engine-pg.js +14 -5
  492. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  493. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  494. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  495. package/dist/plugins/memory-engine-tidb.js +11 -2
  496. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  497. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  498. package/dist/plugins/memory-run-store.d.ts +53 -36
  499. package/dist/plugins/memory-run-store.js +116 -88
  500. package/dist/plugins/one-time-migration-marker.d.ts +26 -0
  501. package/dist/plugins/one-time-migration-marker.js +13 -0
  502. package/dist/plugins/one-time-migrations.d.ts +214 -47
  503. package/dist/plugins/one-time-migrations.js +481 -135
  504. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  505. package/dist/plugins/org-delivery-quota-store.js +31 -15
  506. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  507. package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
  508. package/dist/plugins/permission-rule-store-sql.js +11 -95
  509. package/dist/plugins/pg-pool.d.ts +2 -32
  510. package/dist/plugins/pg-pool.js +24 -17
  511. package/dist/plugins/remote-env-device.d.ts +3 -2
  512. package/dist/plugins/remote-env-e2b.d.ts +8 -32
  513. package/dist/plugins/remote-env-e2b.js +44 -32
  514. package/dist/plugins/remote-env-host.d.ts +51 -17
  515. package/dist/plugins/remote-env-host.js +111 -42
  516. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  517. package/dist/plugins/remote-env-k8s.js +111 -60
  518. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  519. package/dist/plugins/remote-env-local-docker.js +352 -72
  520. package/dist/plugins/remote-scratchpad.js +4 -0
  521. package/dist/plugins/retention-deployment.d.ts +49 -17
  522. package/dist/plugins/retention-deployment.js +39 -8
  523. package/dist/plugins/run-preview-m45.d.ts +11 -0
  524. package/dist/plugins/run-preview-m45.js +19 -0
  525. package/dist/plugins/run-store-sql.d.ts +82 -75
  526. package/dist/plugins/run-store-sql.js +164 -125
  527. package/dist/plugins/s3-answer.d.ts +2 -1
  528. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  529. package/dist/plugins/sandbox-reaper.js +2 -0
  530. package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
  531. package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
  532. package/dist/plugins/scheduler-support.d.ts +16 -1
  533. package/dist/plugins/scheduler-support.js +22 -2
  534. package/dist/plugins/schema-consistency.d.ts +131 -14
  535. package/dist/plugins/schema-consistency.js +388 -18
  536. package/dist/plugins/schema-drift-sentence.d.ts +10 -6
  537. package/dist/plugins/schema-drift-sentence.js +15 -7
  538. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  539. package/dist/plugins/schema-ensure-legs.js +1 -1
  540. package/dist/plugins/schema-indexes.js +3 -0
  541. package/dist/plugins/schema-live-columns.d.ts +14 -5
  542. package/dist/plugins/schema-live-columns.js +10 -10
  543. package/dist/plugins/send-user-file.js +2 -1
  544. package/dist/plugins/session-birth.d.ts +37 -0
  545. package/dist/plugins/session-birth.js +38 -0
  546. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  547. package/dist/plugins/session-epoch-anchor.js +33 -11
  548. package/dist/plugins/session-ext-table.d.ts +27 -3
  549. package/dist/plugins/session-ext-table.js +19 -6
  550. package/dist/plugins/session-fork.d.ts +15 -1
  551. package/dist/plugins/session-fork.js +3 -0
  552. package/dist/plugins/session-ownership.d.ts +1 -1
  553. package/dist/plugins/session-placement.d.ts +27 -20
  554. package/dist/plugins/session-placement.js +15 -12
  555. package/dist/plugins/session-row-sql.d.ts +12 -0
  556. package/dist/plugins/session-row-sql.js +3 -3
  557. package/dist/plugins/session-run-rollup.d.ts +29 -0
  558. package/dist/plugins/session-run-rollup.js +40 -0
  559. package/dist/plugins/session-store-sql.d.ts +38 -12
  560. package/dist/plugins/session-store-sql.js +130 -30
  561. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  562. package/dist/plugins/session-withdraw-sql.js +42 -0
  563. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  564. package/dist/plugins/shared-memory-store-sql.js +2 -1
  565. package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
  566. package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
  567. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  568. package/dist/plugins/sql-driver.d.ts +1 -1
  569. package/dist/plugins/sql-driver.js +2 -1
  570. package/dist/plugins/sql-errors.d.ts +32 -5
  571. package/dist/plugins/sql-errors.js +55 -7
  572. package/dist/plugins/sql-json-column.d.ts +8 -7
  573. package/dist/plugins/sql-json-column.js +10 -6
  574. package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
  575. package/dist/plugins/stop-then-start-sentence.js +7 -0
  576. package/dist/plugins/store-backend.d.ts +99 -16
  577. package/dist/plugins/store-backend.js +230 -65
  578. package/dist/plugins/store-contracts.d.ts +123 -33
  579. package/dist/plugins/store-contracts.js +38 -1
  580. package/dist/plugins/store-fault.d.ts +28 -2
  581. package/dist/plugins/store-fault.js +20 -2
  582. package/dist/plugins/task-attachment-store.d.ts +15 -3
  583. package/dist/plugins/task-attachment-store.js +22 -9
  584. package/dist/plugins/tidb-pool.d.ts +11 -6
  585. package/dist/plugins/tidb-pool.js +39 -18
  586. package/dist/plugins/web-search.js +5 -3
  587. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  588. package/dist/plugins/workflow-run-store-sql.js +11 -5
  589. package/dist/plugins/workspace-custody.d.ts +44 -0
  590. package/dist/plugins/workspace-custody.js +47 -0
  591. package/dist/principal-jwt.d.ts +4 -4
  592. package/dist/principal-jwt.js +20 -5
  593. package/dist/principal-shape.d.ts +41 -0
  594. package/dist/principal-shape.js +19 -0
  595. package/dist/project-identity.d.ts +8 -7
  596. package/dist/project-identity.js +40 -17
  597. package/dist/project-layer-key.d.ts +13 -2
  598. package/dist/project-layer-key.js +9 -1
  599. package/dist/question.d.ts +13 -23
  600. package/dist/question.js +21 -39
  601. package/dist/read-deny-floor-notice.d.ts +36 -0
  602. package/dist/read-deny-floor-notice.js +40 -0
  603. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  604. package/dist/request-declaration-disposition.js +39 -0
  605. package/dist/request-declaration-refusal.d.ts +35 -12
  606. package/dist/request-declaration-refusal.js +21 -9
  607. package/dist/request-form.d.ts +58 -0
  608. package/dist/request-form.js +72 -0
  609. package/dist/request-image-urls.d.ts +8 -2
  610. package/dist/request-image-urls.js +2 -1
  611. package/dist/request-images.d.ts +20 -0
  612. package/dist/request-images.js +59 -0
  613. package/dist/request-key-closure.d.ts +6 -7
  614. package/dist/request-key-closure.js +15 -2
  615. package/dist/resource-suspend.d.ts +7 -16
  616. package/dist/resource-suspend.js +1 -1
  617. package/dist/retired-name-host-notice.d.ts +21 -0
  618. package/dist/retired-name-host-notice.js +12 -0
  619. package/dist/rule-entry-list.d.ts +2 -2
  620. package/dist/rule-entry-list.js +3 -4
  621. package/dist/rule-issue-reading.d.ts +58 -0
  622. package/dist/rule-issue-reading.js +14 -0
  623. package/dist/rules-consent.d.ts +5 -3
  624. package/dist/rules-consent.js +1 -0
  625. package/dist/run-acceptance.d.ts +3 -1
  626. package/dist/run-acceptance.js +3 -0
  627. package/dist/run-cancel-card.d.ts +28 -0
  628. package/dist/run-cancel-card.js +19 -0
  629. package/dist/run-cancel-context.d.ts +10 -0
  630. package/dist/run-cancel-context.js +1 -0
  631. package/dist/run-local.d.ts +14 -6
  632. package/dist/run-local.js +117 -90
  633. package/dist/run-stale-default.d.ts +7 -0
  634. package/dist/run-stale-default.js +2 -0
  635. package/dist/runs.d.ts +56 -21
  636. package/dist/runs.js +73 -43
  637. package/dist/runtime-caps-resolver.d.ts +21 -6
  638. package/dist/runtime-caps-resolver.js +17 -4
  639. package/dist/runtime-governance.d.ts +2 -2
  640. package/dist/runtime-governance.js +5 -3
  641. package/dist/sealed-key-layout.d.ts +12 -5
  642. package/dist/sealed-key-layout.js +5 -0
  643. package/dist/sealed-key.d.ts +12 -2
  644. package/dist/sealed-key.js +115 -27
  645. package/dist/security.d.ts +128 -158
  646. package/dist/security.js +163 -59
  647. package/dist/sema-config-dir.d.ts +20 -0
  648. package/dist/sema-config-dir.js +25 -0
  649. package/dist/server-secret-env.d.ts +55 -25
  650. package/dist/server-secret-env.js +75 -22
  651. package/dist/session-agent.d.ts +3 -2
  652. package/dist/session-children-retire.d.ts +13 -8
  653. package/dist/session-children-retire.js +9 -7
  654. package/dist/session-deletion.d.ts +88 -0
  655. package/dist/session-deletion.js +8 -0
  656. package/dist/session-erase.d.ts +145 -0
  657. package/dist/session-erase.js +115 -0
  658. package/dist/session-error-wire.d.ts +5 -5
  659. package/dist/session-error-wire.js +1 -1
  660. package/dist/session-incarnation.d.ts +52 -5
  661. package/dist/session-incarnation.js +19 -2
  662. package/dist/session-policy-wire.d.ts +6 -3
  663. package/dist/session-policy-wire.js +11 -1
  664. package/dist/session-resident-background.d.ts +0 -71
  665. package/dist/session-resident-background.js +4 -3
  666. package/dist/session-row.d.ts +2 -1
  667. package/dist/session-rules-seat.d.ts +12 -0
  668. package/dist/session-rules-seat.js +19 -0
  669. package/dist/session-titler.d.ts +7 -15
  670. package/dist/session-titler.js +1 -1
  671. package/dist/session-workspace.d.ts +3 -3
  672. package/dist/spec-fields.d.ts +57 -3
  673. package/dist/spec-fields.js +72 -51
  674. package/dist/store-admission.d.ts +33 -0
  675. package/dist/store-admission.js +49 -0
  676. package/dist/store-posture.d.ts +141 -20
  677. package/dist/store-posture.js +205 -3
  678. package/dist/stored-request-hooks-m20.js +2 -2
  679. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  680. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  681. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  682. package/dist/stores-sql/checkpoint-store-sql.js +78 -49
  683. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  684. package/dist/stores-sql/file-history-store-sql.js +3 -5
  685. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  686. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  687. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  688. package/dist/stores-sql/pg-session-storage.js +54 -46
  689. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  690. package/dist/stores-sql/retention-store-sql.js +92 -27
  691. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  692. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  693. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  694. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  695. package/dist/stores-sql/tidb-session-storage.js +13 -8
  696. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  697. package/dist/stores-sql/tidb-session-store.js +69 -39
  698. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  699. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  700. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  701. package/dist/stores-sql/windowed-session-storage.js +9 -0
  702. package/dist/submission-exit.d.ts +50 -0
  703. package/dist/submission-exit.js +108 -0
  704. package/dist/task-a2a.d.ts +3 -8
  705. package/dist/task-a2a.js +28 -30
  706. package/dist/task-cwd.d.ts +43 -7
  707. package/dist/task-cwd.js +11 -0
  708. package/dist/task-mcp.d.ts +3 -3
  709. package/dist/task-mcp.js +4 -4
  710. package/dist/task-settings.d.ts +14 -10
  711. package/dist/task-settings.js +19 -7
  712. package/dist/terminal.d.ts +27 -43
  713. package/dist/terminal.js +49 -14
  714. package/dist/tool-approval.d.ts +173 -163
  715. package/dist/tool-approval.js +247 -232
  716. package/dist/trace/core-keyset-guard.d.ts +13 -6
  717. package/dist/trace/core-vocab-wire.d.ts +95 -0
  718. package/dist/trace/core-vocab-wire.js +15 -0
  719. package/dist/trace/engine-notice-wire.d.ts +24 -21
  720. package/dist/trace/engine-notice-wire.js +7 -3
  721. package/dist/trace/exit-seat.d.ts +30 -4
  722. package/dist/trace/exit-seat.js +40 -36
  723. package/dist/trace/extension-call-face.d.ts +3 -2
  724. package/dist/trace/extension-call-face.js +3 -1
  725. package/dist/trace/ledger-events.d.ts +4 -7
  726. package/dist/trace/ledger-sink.d.ts +4 -31
  727. package/dist/trace/ledger-sink.js +0 -11
  728. package/dist/trace/model-segment.d.ts +5 -5
  729. package/dist/trace/model-segment.js +5 -5
  730. package/dist/trace/project.d.ts +59 -44
  731. package/dist/trace/project.js +60 -26
  732. package/dist/trace/redact.d.ts +135 -27
  733. package/dist/trace/redact.js +884 -260
  734. package/dist/trace/self-minted-wire.d.ts +567 -20
  735. package/dist/trace/self-minted-wire.js +205 -24
  736. package/dist/trace/wire-projection-faces.d.ts +5 -6
  737. package/dist/trace/wire-projection-faces.js +2 -2
  738. package/dist/upstream-body.d.ts +23 -0
  739. package/dist/upstream-body.js +16 -0
  740. package/dist/url-refusal.d.ts +3 -3
  741. package/dist/url-refusal.js +11 -4
  742. package/dist/user-authored-text.d.ts +1 -1
  743. package/dist/user-input-ledger.d.ts +7 -8
  744. package/dist/user-input-ledger.js +1 -1
  745. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  746. package/dist/web-admin-client/apply-effective.js +33 -23
  747. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  748. package/dist/web-admin-client/apply-ledger.js +5 -2
  749. package/dist/web-admin-client/center-request.d.ts +2 -2
  750. package/dist/web-admin-client/center-request.js +15 -15
  751. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  752. package/dist/web-admin-client/effective-keys.js +1 -1
  753. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  754. package/dist/web-admin-client/entry-metadata.js +13 -0
  755. package/dist/web-admin-client/http-client.d.ts +1 -1
  756. package/dist/web-admin-client/http-client.js +23 -4
  757. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  758. package/dist/web-admin-client/mcp-revocation.js +2 -1
  759. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  760. package/dist/web-admin-client/read-warnings.js +1 -0
  761. package/dist/web-admin-client/restart-signal.js +8 -4
  762. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  763. package/dist/web-admin-client/types.d.ts +1 -2
  764. package/dist/workspace-space.d.ts +3 -2
  765. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  766. package/docs/error-text-lexicon.json +317 -0
  767. package/package.json +8 -3
  768. package/scripts/drain-check-local.mjs +118 -147
  769. package/scripts/drain-check.mysql.sql +22 -2
  770. package/scripts/drain-check.pg.sql +22 -2
  771. package/scripts/embed-minimal.mjs +183 -0
  772. package/wire-changes/server@7.148.0.json +1517 -0
  773. package/wire-changes/server@7.149.0.json +372 -0
  774. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  775. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  776. package/dist/http/memory-layer-reply.d.ts +0 -30
  777. package/dist/http/memory-layer-reply.js +0 -24
  778. package/dist/lsp/e2b-bridge.d.ts +0 -57
  779. package/dist/lsp/e2b-bridge.js +0 -139
  780. package/dist/lsp/e2b-manager.d.ts +0 -93
  781. package/dist/lsp/e2b-manager.js +0 -178
  782. package/dist/lsp/lsp-frames.d.ts +0 -14
  783. package/dist/lsp/lsp-frames.js +0 -25
  784. package/dist/lsp/manager.d.ts +0 -129
  785. package/dist/lsp/manager.js +0 -127
  786. package/dist/lsp/types.d.ts +0 -12
  787. package/dist/lsp/types.js +0 -2
  788. package/dist/lsp/ws-transport.d.ts +0 -40
  789. package/dist/lsp/ws-transport.js +0 -210
  790. package/dist/plain-string-record.js +0 -70
@@ -1,139 +0,0 @@
1
- import { FRAME_DECODER_JS } from "./lsp-frames.js";
2
- export const BRIDGE_SOURCE = FRAME_DECODER_JS +
3
- String.raw `
4
- const { WebSocketServer } = require('ws');
5
- const { spawn } = require('child_process');
6
- const { URLSearchParams } = require('url');
7
- const http = require('http');
8
- const fs = require('fs');
9
- const PORT = Number(process.env.LSP_PORT || 8123);
10
- const CMD = (process.env.LSP_CMD || 'typescript-language-server --stdio').split(' ');
11
- const TOKEN = process.env.LSP_TOKEN || '';
12
- const MAX = 50 * 1024 * 1024;
13
- const HEARTBEAT_MS = Number(process.env.LSP_HEARTBEAT_MS || 30000);
14
- const START_MS = Date.now();
15
- // Per-port pidfile (BRIDGE_DIR-relative — lspStartCommand cd's there first): the host reads this to verify a
16
- // prior generation ACTUALLY stopped before minting a replacement (§DESIGN-V2 F3) — an unconfirmed kill risks a
17
- // new generation's token being permanently rejected by a still-listening old process (the token check below).
18
- // Written ONLY after a successful bind (inside the listen callback) — a SECOND bridge racing this same port
19
- // must NOT clobber the FIRST (still listening) bridge's pidfile with its own (about-to-die) pid.
20
- const PIDFILE = 'bridge-' + PORT + '.pid';
21
- const LOGFILE = 'bridge.log';
22
- function logLine(line) { try { fs.appendFileSync(LOGFILE, line + '\n'); } catch {} }
23
- // Process-fatal hardening (§DESIGN-V2 C1/C2): an uncaught exception/rejection anywhere in this process previously
24
- // died silently (no stderr line, no log) — the host's only signal was the WS going dead with no explanation.
25
- process.on('uncaughtException', (err) => { const m = 'lsp-bridge fatal ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
26
- process.on('unhandledRejection', (err) => { const m = 'lsp-bridge fatal ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
27
- function tokenOf(url) { return new URLSearchParams(((url || '').split('?')[1]) || '').get('token'); }
28
- const server = http.createServer((req, res) => {
29
- const path = ((req && req.url) || '').split('?')[0];
30
- if (path === '/healthz') {
31
- // Same-origin auth as the WS gate below: TOKEN unset = open (dev/test), TOKEN set + mismatch = 401.
32
- if (TOKEN && tokenOf(req.url) !== TOKEN) { res.writeHead(401); res.end(); return; }
33
- const body = JSON.stringify({ pid: process.pid, uptimeMs: Date.now() - START_MS, connections: wss.clients.size, generationToken: TOKEN.slice(0, 8) });
34
- res.writeHead(200, { 'Content-Type': 'application/json' });
35
- res.end(body);
36
- return;
37
- }
38
- const body = http.STATUS_CODES[426]; // preserves ws's own default "upgrade required" response for any other path
39
- res.writeHead(426, { 'Content-Length': Buffer.byteLength(body), 'Content-Type': 'text/plain' });
40
- res.end(body);
41
- });
42
- // A zero-listener 'error' on ANY EventEmitter throws and crashes the process (Node default). Without this, a
43
- // bind failure (e.g. EADDRINUSE — a second bridge start racing the same port) took down the WHOLE bridge
44
- // process, killing every language's LSP session in the sandbox, not just the one that failed to start (HRD-LSP-4).
45
- // Exit loud + explicit instead of an uncaught-exception dump so the failure is at least attributable.
46
- server.on('error', (err) => { const m = 'lsp-bridge wss error ' + (err && err.message); console.error(m); logLine(m); process.exit(1); });
47
- const wss = new WebSocketServer({ server });
48
- wss.on('connection', (ws, req) => {
49
- // Same zero-listener 'error' hazard as wss above, but per-connection: registered FIRST, before anything else
50
- // touches this socket. Close (don't crash) — the heartbeat reaper's own ws.terminate() below is a routine
51
- // source of a socket 'error' on an already-half-open connection (HRD-LSP-4).
52
- ws.on('error', () => { try { ws.terminate(); } catch {} });
53
- const q = ((req && req.url) || '').split('?')[1] || '';
54
- if (TOKEN && new URLSearchParams(q).get('token') !== TOKEN) { ws.close(); return; } // auth (council #4)
55
- ws.isAlive = true;
56
- ws.on('pong', () => { ws.isAlive = true; });
57
- const child = spawn(CMD[0], CMD.slice(1), { stdio: ['pipe', 'pipe', 'inherit'] });
58
- child.stdin.on('error', () => {}); // EPIPE on a write racing the server's exit must not crash the bridge
59
- child.on('error', () => { try { ws.close(); } catch {} }); // spawn failure (missing binary) → close, don't crash
60
- const decode = makeFrameDecoder(MAX);
61
- child.stdout.on('data', (d) => { for (const f of decode(d)) ws.send(f); });
62
- ws.on('message', (data) => { const p = Buffer.from(data.toString(), 'utf8'); child.stdin.write('Content-Length: ' + p.length + '\r\n\r\n'); child.stdin.write(p); });
63
- // pid guard: the child 'error' handler above routes spawn FAILURES (missing binary — pid never assigned)
64
- // through ws.close() → this 'close' handler. Killing a child whose pid was never assigned can signal the
65
- // CALLER's process group instead of the (nonexistent) child (HRD-LSP-4; same hazard class as bake-runner's
66
- // spawner, src/bake-runner/main.ts).
67
- ws.on('close', () => { if (child.pid !== undefined) child.kill(); });
68
- child.on('exit', (code, signal) => { logLine('lsp-bridge child exit code=' + code + ' signal=' + signal); try { ws.close(); } catch {} });
69
- });
70
- // Reap half-open connections: the E2B proxy kills a WS at ~60-75s and the kill can be SILENT on THIS side too —
71
- // no close frame, so the per-connection language server above would outlive its dead socket (one leaked server
72
- // per heal; a long task accumulates them until the sandbox OOMs). terminate() fires 'close' → child.kill().
73
- setInterval(() => {
74
- for (const ws of wss.clients) {
75
- if (ws.isAlive === false) { try { ws.terminate(); } catch {} continue; }
76
- ws.isAlive = false;
77
- try { ws.ping(); } catch {}
78
- }
79
- }, HEARTBEAT_MS);
80
- server.listen(PORT, '0.0.0.0', () => {
81
- try { fs.writeFileSync(PIDFILE, String(process.pid)); } catch (e) { logLine('lsp-bridge pidfile write failed ' + (e && e.message)); }
82
- console.log('lsp-bridge listening', PORT);
83
- });
84
- `;
85
- export const BRIDGE_DIR = "/home/user/.lsp-bridge";
86
- export const TSSERVER_JS_PATH = `${BRIDGE_DIR}/node_modules/typescript/lib/tsserver.js`;
87
- export const SERVER_CMD = {
88
- typescript: "typescript-language-server --stdio",
89
- javascript: "typescript-language-server --stdio",
90
- python: "pyright-langserver --stdio",
91
- go: "gopls",
92
- dart: "dart language-server",
93
- kotlin: "kotlin-language-server",
94
- java: "jdtls",
95
- swift: "sourcekit-lsp",
96
- };
97
- export const SERVER_NPM = {
98
- typescript: "typescript-language-server typescript",
99
- javascript: "typescript-language-server typescript",
100
- python: "pyright",
101
- };
102
- export function portForLanguage(language) {
103
- const ports = { typescript: 8123, javascript: 8123, dart: 8124, kotlin: 8125, python: 8126, go: 8127, java: 8128, swift: 8129 };
104
- return ports[language] ?? 8123;
105
- }
106
- export function lspInstallCommand(language) {
107
- const cmd = SERVER_CMD[language];
108
- const npm = SERVER_NPM[language];
109
- return [
110
- `mkdir -p ${BRIDGE_DIR}`,
111
- `[ -f ${BRIDGE_DIR}/node_modules/ws/package.json ] || (cd ${BRIDGE_DIR} && echo '{}' > package.json && npm i ws >/tmp/lsp-setup.log 2>&1)`,
112
- npm ? `command -v ${cmd.split(" ")[0]} >/dev/null || npm i -g ${npm} >>/tmp/lsp-setup.log 2>&1` : "true",
113
- npm?.includes("typescript")
114
- ? `[ -f ${TSSERVER_JS_PATH} ] || (cd ${BRIDGE_DIR} && npm i typescript@5 >>/tmp/lsp-setup.log 2>&1)`
115
- : "true",
116
- ].join(" && ");
117
- }
118
- export function lspStartCommand(language, port, token) {
119
- return `cd ${BRIDGE_DIR} && LSP_PORT=${port} LSP_TOKEN='${token}' LSP_CMD='${SERVER_CMD[language]}' node bridge.cjs`;
120
- }
121
- export const LSP_SETUP_LOG = "/tmp/lsp-setup.log";
122
- export function bridgeLogFile() {
123
- return `${BRIDGE_DIR}/bridge.log`;
124
- }
125
- export function bridgePidFile(port) {
126
- return `${BRIDGE_DIR}/bridge-${port}.pid`;
127
- }
128
- export function terminateBridgeCommand(port) {
129
- const pidfile = bridgePidFile(port);
130
- return [
131
- `[ -f ${pidfile} ] || exit 0`,
132
- `PID=$(cat ${pidfile})`,
133
- `kill "$PID" 2>/dev/null`,
134
- `i=0`,
135
- `while [ $i -lt 20 ]; do kill -0 "$PID" 2>/dev/null || exit 0; i=$((i+1)); sleep 0.1; done`,
136
- `exit 1`,
137
- ].join("; ");
138
- }
139
- //# sourceMappingURL=e2b-bridge.js.map
@@ -1,93 +0,0 @@
1
- import { connectWsLspTransport } from "./ws-transport.js";
2
- import { E2bLspManager, type LspCapableEnv, type LspUnavailableReason } from "./manager.js";
3
- import type { LspTransport } from "./types.js";
4
- export interface E2bLspOptions {
5
- /** Injectable for tests (no E2B/ws). */
6
- connect?: typeof connectWsLspTransport;
7
- retry?: {
8
- attempts: number;
9
- delayMs: number;
10
- };
11
- /** Bridge auth token override. The manager pins ONE token per env+PORT — the bridge RESOURCE, not the
12
- * language (`portForLanguage` maps several languages, e.g. typescript/javascript, onto the SAME port/process
13
- * — see `createE2bLspManager`). On a RE-open (transport heal after the E2B proxy idle-killed the WS) the
14
- * original bridge process is still listening with the FIRST token — a fresh random token would be rejected
15
- * and the reconnect would always fail. */
16
- token?: string;
17
- /** WS scheme for the bridge URL. E2B's `getHost` returns a public TLS proxy host → `wss` (default);
18
- * the k8s adapter returns a cluster-internal `podIP:port` → plain `ws` (no TLS on the pod network;
19
- * the per-session bridge token still gates access). */
20
- scheme?: "ws" | "wss";
21
- /** Observability hook (open/heal/degrade events) — prod wires the service logger. */
22
- log?: (event: string, fields: Record<string, unknown>) => void;
23
- /** §DESIGN-V2 F11: metrics registry (structural — matches the narrow surface remote-env-e2b.ts's `cfg.metrics`
24
- * already uses). `provider`/`generation`/`reason` labels are filled in by this module, never left freeform. */
25
- metrics?: {
26
- inc(name: string, labels?: Record<string, string>): void;
27
- };
28
- /** §DESIGN-V2 F11: the deployment lane feeding this manager (boot/execution-env.ts passes it explicitly —
29
- * "e2b" or "k8s" — rather than this module guessing it back out of `scheme`, which is a WS-protocol detail
30
- * that happens to correlate with the lane but isn't the same axis). Defaults to inferring from `scheme` only
31
- * so existing callers that don't pass it (tests) keep working. */
32
- provider?: string;
33
- /** §DESIGN-V2 F2/C6: health-probe override for tests (no real sandbox network). Defaults to a real
34
- * `GET /healthz` fetch (1s timeout) — `scheme` maps to the probe's URL scheme, F11 (`wss→https`, `ws→http`). */
35
- probe?: (env: LspCapableEnv, port: number, token: string, scheme: "ws" | "wss") => Promise<boolean>;
36
- }
37
- /** Start (+ install on a non-baked template) the language server + bridge inside THIS env's sandbox, then connect.
38
- * Every call starts (or re-starts) the bridge unconditionally — the one production caller is
39
- * `createE2bLspManager`, which de-dupes per env+port before ever reaching here (see its doc). */
40
- export declare function openE2bLspTransport(language: string, env: LspCapableEnv, opts?: E2bLspOptions): Promise<LspTransport | undefined>;
41
- /** §DESIGN-V2 A: `starting` while the write+install+startBackground sequence is in flight; `ready` once at
42
- * least one WS connect through this generation has succeeded; `dead` once this generation is confirmed (or
43
- * presumed, per its own failure) unusable — the ONLY way out of `dead` is minting a new generation. */
44
- export type BridgeState = "starting" | "ready" | "dead";
45
- /**
46
- * §DESIGN-V2 A/F3/F6: one bridge RESOURCE per env+port (not per language — `portForLanguage` maps
47
- * typescript/javascript onto the SAME port/process off the same `SERVER_CMD`, HRD-LSP-4). A crashed/never-
48
- * booted bridge can be replaced by minting a new `generation` (bounded by `MAX_BRIDGE_GENERATIONS` — a
49
- * crash-loop must degrade the language, not burn the sandbox indefinitely); the NEW generation is only ever
50
- * minted after `terminateBridgeCommand` confirms the OLD one actually stopped (F3) — an unconfirmed kill risks
51
- * EADDRINUSE permanently rejecting the new generation's fresh token (the old process is still the one
52
- * listening, and its token check has no way to know a replacement was intended).
53
- */
54
- export interface E2bBridgeHandle {
55
- readonly port: number;
56
- /** Pinned once per generation — the shared bridge resource's auth secret. A per-LANGUAGE token would be
57
- * rejected by the one bridge process actually listening whenever two languages share a port (see the
58
- * module doc's HRD-LSP-4 reference): the second language mints a different token, the bridge only
59
- * recognizes whichever token started it, auth fails, retries exhaust, and that language is permanently
60
- * degraded to grep/read_file for the task. */
61
- readonly token: string;
62
- /** The `LSP_CMD` this generation's bridge process was launched with — identity documentation (ts/js sharing
63
- * one value/port/process is legitimate, §DESIGN-V2 "不做"); not read back by this module. */
64
- readonly serverCmd: string;
65
- /** 1 at first mint; +1 every restart. Bounds the restart budget (`MAX_BRIDGE_GENERATIONS`). */
66
- readonly generation: number;
67
- state: BridgeState;
68
- /** The most recent human-readable diagnostic (write/install/start/connect failure, or a probe verdict) —
69
- * feeds `lastError`-style debugging; the MODEL-facing word is `deathReason` (via `unavailableReason`), not
70
- * this free-text string. */
71
- lastError?: string;
72
- /** The SPECIFIC reason THIS generation died (unset while starting/ready). `unavailableReason`-facing
73
- * reporting overrides this to `bridge-restart-budget-exhausted` once `generation >= MAX_BRIDGE_GENERATIONS`
74
- * — "further restarts won't help" is a different (and, once true, more useful) word than "what killed the
75
- * last one." */
76
- deathReason?: LspUnavailableReason;
77
- /** True once this generation has completed at least one real WS connect. Gates the fast healthz-probe heal
78
- * path (§DESIGN-V2 F2/F6): a generation that has never connected yet is still cold-starting, not dead —
79
- * treating an unreachable healthz as "dead" during that window would misjudge ordinary boot lag as a crash
80
- * and burn a restart generation for nothing. A generation that HAS connected before, though, really should
81
- * be reachable again quickly, so it skips the blind 6×1500ms retry loop and asks the bridge directly. */
82
- everConnected: boolean;
83
- /** Resolves once the write+install+startBackground sequence has been ATTEMPTED for this generation — `false`
84
- * (with `state` already flipped to `dead` + `deathReason`/`lastError` set) means it failed before ever
85
- * reaching a connect attempt. */
86
- ready: Promise<boolean>;
87
- }
88
- /** A crash-loop must degrade the language, not retry the sandbox forever. 3 covers "an occasional OOM kill";
89
- * a bridge that dies again immediately after 3 fresh starts is a standing failure, not a blip. */
90
- export declare const MAX_BRIDGE_GENERATIONS = 3;
91
- /** The single shared `LspServerManager` for the deployment (`RunnerDeps.lspManager`). */
92
- export declare function createE2bLspManager(opts?: E2bLspOptions): E2bLspManager;
93
- //# sourceMappingURL=e2b-manager.d.ts.map
@@ -1,178 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import { connectWsLspTransport } from "./ws-transport.js";
3
- import { E2bLspManager } from "./manager.js";
4
- import { BRIDGE_DIR, BRIDGE_SOURCE, TSSERVER_JS_PATH, LSP_SETUP_LOG, bridgeLogFile, lspInstallCommand, lspStartCommand, portForLanguage, SERVER_CMD, terminateBridgeCommand, } from "./e2b-bridge.js";
5
- function describeErr(e) {
6
- return e instanceof Error ? e.message : String(e);
7
- }
8
- async function tailLog(env, path, lines = 40, capBytes = 4096) {
9
- const r = await env.exec(`tail -n ${lines} ${path} 2>/dev/null`).catch(() => undefined);
10
- if (!r?.ok)
11
- return undefined;
12
- const out = r.value?.stdout ?? "";
13
- return out.length > capBytes ? out.slice(-capBytes) : out;
14
- }
15
- function httpSchemeFor(scheme) {
16
- return scheme === "wss" ? "https" : "http";
17
- }
18
- async function defaultProbeHealthz(env, port, token, scheme) {
19
- const host = await env.getHost(port);
20
- if (!host)
21
- return false;
22
- try {
23
- const res = await fetch(`${httpSchemeFor(scheme)}://${host}/healthz?token=${token}`, { signal: AbortSignal.timeout(1000) });
24
- return res.ok;
25
- }
26
- catch {
27
- return false;
28
- }
29
- }
30
- async function startE2bBridge(language, env, port, token) {
31
- const wrote = await env.writeFile(`${BRIDGE_DIR}/bridge.cjs`, BRIDGE_SOURCE).catch((e) => ({ ok: false, error: e }));
32
- if (!wrote.ok) {
33
- const detail = "error" in wrote && wrote.error !== undefined ? `bridge.cjs write failed: ${describeErr(wrote.error)}` : "bridge.cjs write failed";
34
- return { ok: false, reason: "bridge-start-failed", detail };
35
- }
36
- const installed = await env.exec(lspInstallCommand(language)).catch(() => undefined);
37
- if (!installed || !installed.ok || installed.value?.exitCode !== 0) {
38
- const snippet = await tailLog(env, LSP_SETUP_LOG);
39
- return { ok: false, reason: "install-failed", detail: snippet ? `install failed: ${snippet}` : "install failed (no setup log)" };
40
- }
41
- try {
42
- await env.startBackground(lspStartCommand(language, port, token));
43
- }
44
- catch (e) {
45
- return { ok: false, reason: "bridge-start-failed", detail: `background start failed: ${describeErr(e)}` };
46
- }
47
- return { ok: true };
48
- }
49
- async function connectE2bLspBridge(env, port, token, opts, language) {
50
- const connect = opts?.connect ?? connectWsLspTransport;
51
- const retry = opts?.retry ?? { attempts: 6, delayMs: 1500 };
52
- const root = env.workspaceHandle().mountPath;
53
- const initOptions = language === "typescript" || language === "javascript" ? { tsserver: { path: TSSERVER_JS_PATH } } : undefined;
54
- const scheme = opts?.scheme ?? "wss";
55
- for (let attempt = 0; attempt < retry.attempts; attempt++) {
56
- const host = await env.getHost(port);
57
- if (host) {
58
- const transport = await connect(`${scheme}://${host}/?token=${token}`, root, undefined, initOptions);
59
- if (transport)
60
- return transport;
61
- }
62
- await new Promise((r) => setTimeout(r, retry.delayMs));
63
- }
64
- return undefined;
65
- }
66
- export async function openE2bLspTransport(language, env, opts) {
67
- if (!SERVER_CMD[language])
68
- return undefined;
69
- const port = portForLanguage(language);
70
- const token = opts?.token ?? randomUUID();
71
- const started = await startE2bBridge(language, env, port, token);
72
- if (!started.ok)
73
- return undefined;
74
- return connectE2bLspBridge(env, port, token, opts, language);
75
- }
76
- export const MAX_BRIDGE_GENERATIONS = 3;
77
- export function createE2bLspManager(opts) {
78
- const bridges = new WeakMap();
79
- const scheme = opts?.scheme ?? "wss";
80
- const provider = opts?.provider ?? (scheme === "ws" ? "k8s" : "e2b");
81
- const log = opts?.log ?? (() => { });
82
- const metrics = opts?.metrics;
83
- const probe = opts?.probe ?? defaultProbeHealthz;
84
- function reasonFor(handle) {
85
- if (handle.generation >= MAX_BRIDGE_GENERATIONS)
86
- return "bridge-restart-budget-exhausted";
87
- return handle.deathReason ?? "bridge-connect-exhausted";
88
- }
89
- function markDead(handle, reason, detail) {
90
- if (handle.state === "dead")
91
- return reasonFor(handle);
92
- handle.state = "dead";
93
- handle.deathReason = reason;
94
- handle.lastError = detail;
95
- const reported = reasonFor(handle);
96
- metrics?.inc("lsp_bridge_dead_total", { reason: reported });
97
- log("lsp_bridge_dead", { port: handle.port, generation: handle.generation, reason: reported, detail });
98
- return reported;
99
- }
100
- async function postmortem(env, port) {
101
- const tail = await tailLog(env, bridgeLogFile());
102
- if (tail !== undefined)
103
- log("lsp_bridge_postmortem", { port, tail });
104
- }
105
- return new E2bLspManager({
106
- log: opts?.log,
107
- metrics,
108
- hasServerCommand: (language) => Boolean(SERVER_CMD[language]),
109
- transportFactory: async (language, env) => {
110
- if (!SERVER_CMD[language])
111
- return { ok: false, reason: "no-server-command" };
112
- const port = portForLanguage(language);
113
- let perPort = bridges.get(env);
114
- if (!perPort) {
115
- perPort = new Map();
116
- bridges.set(env, perPort);
117
- }
118
- let handle = perPort.get(port);
119
- if (!handle || handle.state === "dead") {
120
- if (handle && handle.generation >= MAX_BRIDGE_GENERATIONS)
121
- return { ok: false, reason: reasonFor(handle) };
122
- const priorHandle = handle;
123
- const generation = handle ? handle.generation + 1 : 1;
124
- const token = opts?.token ?? randomUUID();
125
- const newHandle = {
126
- port,
127
- token,
128
- serverCmd: SERVER_CMD[language],
129
- generation,
130
- state: "starting",
131
- everConnected: false,
132
- ready: Promise.resolve(false),
133
- };
134
- newHandle.ready = (async () => {
135
- if (priorHandle) {
136
- const released = await env.exec(terminateBridgeCommand(port)).catch(() => undefined);
137
- if (!released?.ok || released.value?.exitCode !== 0) {
138
- markDead(newHandle, "bridge-start-failed", "previous generation could not be confirmed stopped — held back from starting to avoid a doomed EADDRINUSE race");
139
- log("lsp_bridge_restart_blocked", { port, generation });
140
- return false;
141
- }
142
- }
143
- const started = await startE2bBridge(language, env, port, token);
144
- if (!started.ok) {
145
- markDead(newHandle, started.reason ?? "bridge-start-failed", started.detail ?? "bridge start failed");
146
- return false;
147
- }
148
- metrics?.inc("lsp_bridge_start_total", { provider, generation: String(generation) });
149
- log("lsp_bridge_start", { port, generation });
150
- return true;
151
- })();
152
- perPort.set(port, newHandle);
153
- handle = newHandle;
154
- }
155
- const started = await handle.ready;
156
- if (!started)
157
- return { ok: false, reason: reasonFor(handle) };
158
- if (handle.everConnected) {
159
- const alive = await probe(env, handle.port, handle.token, scheme);
160
- if (!alive) {
161
- const reason = markDead(handle, "bridge-connect-exhausted", "healthz probe reported the bridge unreachable");
162
- await postmortem(env, port);
163
- return { ok: false, reason };
164
- }
165
- }
166
- const transport = await connectE2bLspBridge(env, handle.port, handle.token, opts, language);
167
- if (!transport) {
168
- const reason = markDead(handle, "bridge-connect-exhausted", "bridge connect exhausted after all retries");
169
- await postmortem(env, port);
170
- return { ok: false, reason };
171
- }
172
- handle.everConnected = true;
173
- handle.state = "ready";
174
- return { ok: true, transport };
175
- },
176
- });
177
- }
178
- //# sourceMappingURL=e2b-manager.js.map
@@ -1,14 +0,0 @@
1
- /**
2
- * The LSP stdio Content-Length frame decoder, as JS SOURCE — embedded verbatim into `BRIDGE_SOURCE` (which runs
3
- * inside the E2B sandbox, can't import TS) AND unit-tested here (test/lsp-frames.test.ts evals this same string).
4
- * So the in-sandbox parser is actually exercised (council #5: the untestable raw-string parser was the risk).
5
- *
6
- * Guards: a frame claiming a non-finite / negative / over-cap length is skipped instead of looping or waiting
7
- * forever (council #1 defense); the accumulator is dropped if it exceeds the cap with no complete frame (council
8
- * #2 — a server that never sends `\r\n\r\n`, or a huge Content-Length, can't grow the buffer without bound).
9
- * The runaway cap carries a `HEADER_SLACK` (core 1.196 #6 twin): a VALID frame whose PAYLOAD passes the
10
- * `len <= maxBytes` check but whose `Content-Length: <n>\r\n\r\n` header pushes header+payload just over `maxBytes`
11
- * must NOT be wiped mid-arrival (that silently dropped an in-window legal reply) — so cap at `maxBytes + 128`.
12
- */
13
- export declare const FRAME_DECODER_JS: string;
14
- //# sourceMappingURL=lsp-frames.d.ts.map
@@ -1,25 +0,0 @@
1
- export const FRAME_DECODER_JS = String.raw `
2
- function makeFrameDecoder(maxBytes) {
3
- var HEADER_SLACK = 128; // room for "Content-Length: <n>\r\n\r\n" ON TOP of a max-size payload (core 1.196 #6 twin)
4
- let buf = Buffer.alloc(0);
5
- return function decode(chunk) {
6
- const frames = [];
7
- buf = Buffer.concat([buf, chunk]);
8
- if (buf.length > maxBytes + HEADER_SLACK) buf = Buffer.alloc(0); // runaway / no delimiter → drop (council #2); +slack so a valid frame isn't wiped when its header pushes total past maxBytes (core #6)
9
- for (;;) {
10
- const he = buf.indexOf('\r\n\r\n');
11
- if (he === -1) break;
12
- const m = /Content-Length:\s*(\d+)/i.exec(buf.slice(0, he).toString('ascii'));
13
- if (!m) { buf = buf.slice(he + 4); continue; }
14
- const len = Number(m[1]);
15
- if (!Number.isFinite(len) || len < 0 || len > maxBytes) { buf = buf.slice(he + 4); continue; } // skip bad frame (council #1/#2)
16
- const start = he + 4;
17
- if (buf.length < start + len) break; // wait for the rest of this frame
18
- frames.push(buf.slice(start, start + len).toString('utf8'));
19
- buf = buf.slice(start + len);
20
- }
21
- return frames;
22
- };
23
- }
24
- `;
25
- //# sourceMappingURL=lsp-frames.js.map
@@ -1,129 +0,0 @@
1
- import { LspDiagnosticsRegistry } from "@sema-agent/core";
2
- import type { ExecutionEnv } from "@sema-agent/core";
3
- import type { LspServerManager, LspSession, LspTransport } from "./types.js";
4
- /** The E2B surface the LSP needs beyond base ExecutionEnv (present on RemoteContainerExecutionEnv).
5
- * `exec`'s `stdout` is optional/structural (§DESIGN-V2 F7) — additive to the existing `stderr`-only shape so
6
- * the postmortem/install-failure tail reads (`tail -n … <log>`, whose output arrives on stdout) can use the
7
- * SAME duck-typed surface without widening what a plain command result MUST carry. */
8
- export interface LspCapableEnv {
9
- exec(command: string): Promise<{
10
- ok: boolean;
11
- value?: {
12
- exitCode: number;
13
- stderr: string;
14
- stdout?: string;
15
- };
16
- }>;
17
- startBackground(command: string): Promise<void>;
18
- writeFile(path: string, content: string): Promise<{
19
- ok: boolean;
20
- }>;
21
- getHost(port: number): Promise<string | undefined>;
22
- readTextFile(path: string): Promise<{
23
- ok: boolean;
24
- value?: string;
25
- }>;
26
- workspaceHandle(): {
27
- mountPath: string;
28
- };
29
- }
30
- /**
31
- * §DESIGN-V2 B/F5/F7: the fixed, model-facing failure vocabulary for `unavailableReason`. Three are STATIC
32
- * (re-derivable synchronously from `filePath`+`env` alone, without ever having attempted an open —
33
- * `env-not-lsp-capable` / `language-not-mapped` / `no-server-command`); the other five are DYNAMIC (only
34
- * knowable after an actual open attempt, so they're recorded in `lastFailure` per env+language and read back).
35
- * Short + stable by design — a model reads these directly (core lsp.js renders `why` straight into the tool's
36
- * degrade text), so adding/renaming a word is a behavior-facing change, not a refactor.
37
- */
38
- export type LspUnavailableReason = "env-not-lsp-capable" | "language-not-mapped" | "no-server-command" | "install-failed" | "bridge-start-failed" | "bridge-connect-exhausted" | "bridge-restart-budget-exhausted" | "session-open-failed";
39
- /** §DESIGN-V2 F5: the transport factory's discriminated result — replaces the old plain `LspTransport|undefined`
40
- * so the bridge-resource owner (e2b-manager's `transportFactory`) can report WHY an attempt failed directly
41
- * through its return value, instead of a side channel that could drift from what actually happened. */
42
- export type LspFactoryResult = {
43
- ok: true;
44
- transport: LspTransport;
45
- } | {
46
- ok: false;
47
- reason: LspUnavailableReason;
48
- };
49
- /** Duck-type check: is this ExecutionEnv an E2B adapter with the LSP surface? */
50
- export declare function isLspCapable(env: ExecutionEnv): env is ExecutionEnv & LspCapableEnv;
51
- export interface E2bLspManagerOptions {
52
- /** Opens (+ `initialize`s) a WS transport to the language server inside THIS env's sandbox. */
53
- transportFactory: (language: string, env: LspCapableEnv) => Promise<LspFactoryResult>;
54
- /** Override the file-extension → languageId map. */
55
- extToLang?: Readonly<Record<string, string>>;
56
- /** Observability hook (open/heal/degrade events) — prod wires the service logger; silent when unset. */
57
- log?: (event: string, fields: Record<string, unknown>) => void;
58
- /** §DESIGN-V2 F5: synchronous re-derivation of the "no-server-command" static reason — owned by the factory
59
- * (e2b-manager's `SERVER_CMD` table), which this generic manager doesn't import. `undefined` (option unset)
60
- * or a `true` return ⇒ a server command IS configured, so a miss (if any) is dynamic (read from
61
- * `lastFailure`) rather than this static one. */
62
- hasServerCommand?: (language: string) => boolean;
63
- /** §DESIGN-V2 E: `lsp_session_open_total{language,outcome}` / `lsp_session_heal_total{outcome}` — fired at
64
- * the SAME point as the matching `log()` call (event and metric share one source, never drift apart). */
65
- metrics?: {
66
- inc(name: string, labels?: Record<string, string>): void;
67
- };
68
- }
69
- /**
70
- * §DESIGN-V2 F1/F8/F9 —— 本文件曾**手抄**一份 core 的 `settleOnAbort`(注释自陈 core「un-exported」,并写下
71
- * 「一旦 core 导出即 find-and-delete」的计划)。[ref]([ref])执行了那句话:core 现已从包根导出它
72
- * (`index.d.ts`,来自 `core/lsp.js`),手抄件遂删除,本文件的两处调用直接消费 core 的实现。
73
- *
74
- * 它的语义(读点在 `open` 的两处调用):给**这一个**调用方一个自己的 settle —— 调用方的 `signal` 让它拿到
75
- * `onAbort()` 的返回,而**共享作业本身不受打扰**(别的调用方可能还等着它)。铁律仍在:绝不能把 signal 穿进
76
- * 作业里(F9:共享的 open/heal 链不接受 per-caller signal,见 `open` 的文档)。
77
- */
78
- export declare class E2bLspManager implements LspServerManager {
79
- /** Per-sandbox session cache: env (weak) → language → the (self-contained, see `startJob`) shared job. */
80
- private readonly perEnv;
81
- /** §DESIGN-V2 B/F10: env (weak) → language → the reason the MOST RECENT open/heal attempt failed. Cleared
82
- * on a successful open (F10) so a stale reason never outlives the failure that produced it. */
83
- private readonly lastFailure;
84
- private readonly factory;
85
- private readonly extToLang;
86
- private readonly log;
87
- private readonly hasServerCommand;
88
- private readonly metrics;
89
- /** [ref] (core 1.220, board [S] ①): the workspace diagnostics registry — WORKSPACE-scoped (survives
90
- * heal/evict; diagnostics belong to files, not servers), drained by the Runner at turn boundaries. Every
91
- * session feeds it from `textDocument/publishDiagnostics` (the WS transport now dispatches notifications).
92
- * ⚠️ ONE registry across sandboxes on this manager instance (it is per-deployment) — same posture as
93
- * NodeLspManager's workspace scoping; a task only sees diagnostics for files IT touched (delivered-set +
94
- * fileEdited keying is per-uri, and sandbox workspace paths are per-task-unique). */
95
- readonly diagnostics: LspDiagnosticsRegistry;
96
- constructor(opts: E2bLspManagerOptions);
97
- /**
98
- * §DESIGN-V2 B: the core 1.86.2+ seam's optional method — WHY the most recent `sessionFor` miss for this
99
- * file happened. Three reasons are STATIC (re-derived here fresh, every call, from `filePath`+`env` alone —
100
- * never stored, since they don't need an open attempt to be knowable); the rest are DYNAMIC, read back from
101
- * `lastFailure`. `undefined` = this exact (env, language) was never attempted (NOT "available" — a
102
- * best-effort postmortem surface, per the seam's own contract).
103
- */
104
- unavailableReason(filePath: string, env?: ExecutionEnv): LspUnavailableReason | undefined;
105
- sessionFor(filePath: string, signal?: AbortSignal, env?: ExecutionEnv): Promise<LspSession | undefined>;
106
- /**
107
- * §DESIGN-V2 F1 (aligned with core's `NodeLspManager.open`, node-lsp-manager.js `open` — same self-
108
- * contained-job shape, not the same code: that manager also tracks a TTL/LRU cache and per-job
109
- * `SharedAbortScope`, which this one has no equivalent of per F9). The returned job is SELF-completing:
110
- *
111
- * - self-caches: registers itself into `sessions` synchronously BEFORE returning (so a concurrent caller
112
- * in the SAME microtask sees it — no dedupe race);
113
- * - self-cleans: on failure, removes ITSELF from `sessions` (never a newer entry a racer already installed
114
- * — the `sessions.get(language) === job` check) so the next request retries instead of caching a miss;
115
- * - self-warms: a heal job (`heal` set) `warmOpen`s the carried files as part of settling, before anyone
116
- * can observe it as "done" — no caller-side extra step, no window where a racer sees a warm-less session;
117
- * - self-closes an orphan: if a CONCURRENT heal already replaced this job in `sessions` before it settled
118
- * (this job "lost" the race), the just-opened transport is closed instead of leaked with no owner.
119
- *
120
- * Callers must NEVER wrap `settleOnAbort` around a naive `await` of a SHARED promise and then branch the
121
- * logging/cache-eviction on THAT wrapped value — a caller whose OWN signal aborted would then look
122
- * indistinguishable from the job itself failing, misfiring `lsp_session_*_failed` and evicting a still-live
123
- * in-flight entry out from under a concurrent caller (§DESIGN-V2 F1). `sessionFor` only ever wraps the
124
- * RETURN boundary; every cache/log decision above happens INSIDE the job, driven by the job's own outcome.
125
- */
126
- private startJob;
127
- private open;
128
- }
129
- //# sourceMappingURL=manager.d.ts.map