@gajae-code/coding-agent 0.17.2 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/dist/types/cli/daemon-cli.d.ts +3 -1
  3. package/dist/types/cli/github-release.d.ts +17 -0
  4. package/dist/types/cli/public-command-entry.d.ts +56 -0
  5. package/dist/types/cli/public-command-errors.d.ts +126 -0
  6. package/dist/types/cli/public-command-evidence.d.ts +99 -0
  7. package/dist/types/cli/public-command-help.d.ts +65 -0
  8. package/dist/types/cli/public-command-registry.d.ts +69 -0
  9. package/dist/types/cli/session-picker.d.ts +1 -1
  10. package/dist/types/cli/setup-cli.d.ts +1 -0
  11. package/dist/types/cli/skills-cli.d.ts +5 -0
  12. package/dist/types/cli.d.ts +3 -0
  13. package/dist/types/commands/daemon.d.ts +4 -50
  14. package/dist/types/commands/sdk.d.ts +20 -37
  15. package/dist/types/commands/setup.d.ts +3 -0
  16. package/dist/types/commands/skills.d.ts +9 -0
  17. package/dist/types/config/autorouting-tier-map.d.ts +18 -0
  18. package/dist/types/config/file-lock.d.ts +9 -1
  19. package/dist/types/config/model-profile-activation.d.ts +45 -1
  20. package/dist/types/config/model-registry.d.ts +11 -2
  21. package/dist/types/config/settings-schema.d.ts +11 -0
  22. package/dist/types/coordinator-mcp/question-state.d.ts +6 -1
  23. package/dist/types/daemon/operator-contract.d.ts +5 -1
  24. package/dist/types/eval/js/worker-protocol.d.ts +2 -0
  25. package/dist/types/extensibility/extensions/types.d.ts +12 -0
  26. package/dist/types/extensibility/gjc-plugins/registry.d.ts +4 -0
  27. package/dist/types/extensibility/runtime-skill-discovery.d.ts +18 -0
  28. package/dist/types/extensibility/shared-events.d.ts +3 -1
  29. package/dist/types/gjc-runtime/session-state-lock.d.ts +61 -0
  30. package/dist/types/internal-urls/embedded-protocol.d.ts +9 -0
  31. package/dist/types/internal-urls/index.d.ts +1 -0
  32. package/dist/types/internal-urls/parse.d.ts +9 -1
  33. package/dist/types/main.d.ts +22 -0
  34. package/dist/types/modes/acp/acp-agent.d.ts +55 -1
  35. package/dist/types/modes/acp/startup-provenance.d.ts +16 -0
  36. package/dist/types/modes/components/custom-provider-wizard.d.ts +19 -1
  37. package/dist/types/modes/components/session-selector.d.ts +5 -2
  38. package/dist/types/modes/components/user-message-selector.d.ts +5 -2
  39. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  40. package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
  41. package/dist/types/modes/interactive-mode.d.ts +1 -1
  42. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +11 -1
  43. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +14 -1
  44. package/dist/types/modes/types.d.ts +2 -2
  45. package/dist/types/runtime/process-lifecycle.d.ts +2 -0
  46. package/dist/types/runtime-mcp/manager.d.ts +56 -0
  47. package/dist/types/runtime-mcp/pool.d.ts +17 -0
  48. package/dist/types/runtime-mcp/redaction.d.ts +20 -0
  49. package/dist/types/runtime-mcp/startup-policy.d.ts +6 -0
  50. package/dist/types/runtime-mcp/tool-bridge.d.ts +9 -0
  51. package/dist/types/runtime-mcp/transports/http.d.ts +11 -0
  52. package/dist/types/sdk/broker/broker.d.ts +13 -2
  53. package/dist/types/sdk/broker/identity.d.ts +3 -1
  54. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +23 -3
  55. package/dist/types/sdk/broker/lifecycle.d.ts +15 -8
  56. package/dist/types/sdk/broker/runtime.d.ts +1 -1
  57. package/dist/types/sdk/broker/session-index.d.ts +22 -3
  58. package/dist/types/sdk/broker/spawn-authority.d.ts +4 -0
  59. package/dist/types/sdk/broker/stderr-drainer.d.ts +13 -0
  60. package/dist/types/sdk/bus/index.d.ts +19 -0
  61. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
  62. package/dist/types/sdk/bus/telegram-daemon.d.ts +5 -0
  63. package/dist/types/sdk/cli/master-cli.d.ts +6 -10
  64. package/dist/types/sdk/cli/rows.d.ts +19 -1
  65. package/dist/types/sdk/cli/session-cli.d.ts +22 -5
  66. package/dist/types/sdk/client/client.d.ts +2 -0
  67. package/dist/types/sdk/guides/cli.d.ts +3 -4
  68. package/dist/types/sdk/guides/verify.d.ts +2 -0
  69. package/dist/types/sdk/host/host.d.ts +9 -0
  70. package/dist/types/sdk/host/session-runtime.d.ts +31 -0
  71. package/dist/types/sdk/host/types.d.ts +10 -0
  72. package/dist/types/sdk/index.d.ts +1 -0
  73. package/dist/types/sdk/prompt-deadline-flush.d.ts +83 -0
  74. package/dist/types/sdk/prompt-deadline-manager.d.ts +37 -0
  75. package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -0
  76. package/dist/types/sdk/router/session-router.d.ts +2 -0
  77. package/dist/types/sdk/startup-capability.d.ts +2 -0
  78. package/dist/types/sdk/transport/relay.d.ts +1 -0
  79. package/dist/types/sdk/transport/serve-cli.d.ts +48 -4
  80. package/dist/types/sdk/transport/stdio.d.ts +5 -1
  81. package/dist/types/session/agent-session.d.ts +168 -21
  82. package/dist/types/session/fallback-chain-controller.d.ts +6 -6
  83. package/dist/types/session/fold-coordinator.d.ts +17 -3
  84. package/dist/types/session/internal/managed-session-storage.d.ts +7 -1
  85. package/dist/types/session/session-manager.d.ts +64 -1
  86. package/dist/types/session/session-work-lease.d.ts +14 -0
  87. package/dist/types/setup/model-onboarding-guidance.d.ts +1 -1
  88. package/dist/types/setup/provider-onboarding.d.ts +81 -1
  89. package/dist/types/tools/bash.d.ts +37 -11
  90. package/dist/types/tools/job.d.ts +1 -1
  91. package/dist/types/tools/steer-fold.d.ts +31 -0
  92. package/dist/types/utils/git.d.ts +28 -2
  93. package/dist/types/utils/mupdf-embedded.d.ts +2 -0
  94. package/dist/types/utils/mupdf.d.ts +4 -0
  95. package/dist/types/utils/session-title-generation.d.ts +6 -0
  96. package/dist/types/utils/title-generator.d.ts +11 -2
  97. package/dist/types/web/scrapers/types.d.ts +3 -0
  98. package/package.json +18 -10
  99. package/scripts/build-binary.ts +9 -3
  100. package/scripts/compile-args.ts +0 -9
  101. package/scripts/embed-mupdf.ts +52 -0
  102. package/scripts/generate-sdk-operation-inventory.ts +31 -1
  103. package/scripts/vendor-markit.ts +196 -0
  104. package/src/async/job-manager.ts +22 -1
  105. package/src/cli/daemon-cli.ts +53 -18
  106. package/src/cli/github-release.ts +87 -5
  107. package/src/cli/mcp-cli.ts +38 -4
  108. package/src/cli/public-command-entry.ts +450 -0
  109. package/src/cli/public-command-errors.ts +581 -0
  110. package/src/cli/public-command-evidence.ts +717 -0
  111. package/src/cli/public-command-help.ts +360 -0
  112. package/src/cli/public-command-registry.ts +535 -0
  113. package/src/cli/session-picker.ts +2 -1
  114. package/src/cli/setup-cli.ts +9 -1
  115. package/src/cli/skills-cli.ts +46 -2
  116. package/src/cli.ts +61 -1
  117. package/src/commands/daemon.ts +65 -69
  118. package/src/commands/sdk.ts +175 -117
  119. package/src/commands/setup.ts +2 -0
  120. package/src/commands/skills.ts +11 -0
  121. package/src/config/autorouting-tier-map.ts +14 -0
  122. package/src/config/file-lock.ts +147 -51
  123. package/src/config/model-profile-activation.ts +334 -43
  124. package/src/config/model-registry.ts +183 -25
  125. package/src/config/settings-schema.ts +26 -2
  126. package/src/coordinator-mcp/policy.ts +10 -5
  127. package/src/coordinator-mcp/question-gate-codec.ts +17 -0
  128. package/src/coordinator-mcp/question-state.ts +175 -8
  129. package/src/coordinator-mcp/server.ts +507 -81
  130. package/src/coordinator-mcp/session-reaper.ts +6 -4
  131. package/src/crash/record-loader.ts +6 -2
  132. package/src/daemon/operator-contract.ts +26 -12
  133. package/src/defaults/gjc/skills/ultragoal/SKILL.md +1 -1
  134. package/src/eval/js/context-manager.ts +8 -8
  135. package/src/eval/js/worker-core.ts +9 -4
  136. package/src/eval/js/worker-protocol.ts +2 -0
  137. package/src/extensibility/extensions/runner.ts +52 -4
  138. package/src/extensibility/extensions/types.ts +10 -0
  139. package/src/extensibility/gjc-plugins/registry.ts +196 -37
  140. package/src/extensibility/runtime-skill-discovery.ts +61 -3
  141. package/src/extensibility/shared-events.ts +3 -1
  142. package/src/gjc-runtime/session-state-lock.ts +165 -24
  143. package/src/gjc-runtime/ultragoal-succession.ts +31 -3
  144. package/src/internal-urls/docs-index.generated.ts +20 -19
  145. package/src/internal-urls/embedded-protocol.ts +83 -0
  146. package/src/internal-urls/index.ts +1 -0
  147. package/src/internal-urls/parse.ts +21 -1
  148. package/src/internal-urls/router.ts +4 -2
  149. package/src/main.ts +123 -55
  150. package/src/modes/acp/acp-agent.ts +408 -35
  151. package/src/modes/acp/startup-provenance.ts +59 -0
  152. package/src/modes/components/custom-provider-wizard.ts +308 -7
  153. package/src/modes/components/oauth-selector.ts +9 -0
  154. package/src/modes/components/session-selector.ts +47 -4
  155. package/src/modes/components/user-message-selector.ts +57 -15
  156. package/src/modes/controllers/command-controller.ts +58 -32
  157. package/src/modes/controllers/extension-ui-controller.ts +33 -7
  158. package/src/modes/controllers/input-controller.ts +4 -0
  159. package/src/modes/controllers/selector-controller.ts +161 -15
  160. package/src/modes/interactive-mode.ts +21 -7
  161. package/src/modes/runtime-init.ts +1 -0
  162. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +124 -7
  163. package/src/modes/shared/agent-wire/workflow-gate-types.ts +16 -2
  164. package/src/modes/types.ts +2 -2
  165. package/src/prompts/agent-fragments/browser-aside.md +1 -0
  166. package/src/prompts/system/title-system.md +1 -1
  167. package/src/prompts/tools/bash.md +1 -1
  168. package/src/prompts/tools/job.md +1 -1
  169. package/src/prompts/tools/read.md +2 -0
  170. package/src/runtime/network-prewarm-service.test.ts +36 -1
  171. package/src/runtime/network-prewarm-service.ts +28 -3
  172. package/src/runtime/process-lifecycle.ts +22 -11
  173. package/src/runtime-mcp/config.ts +16 -1
  174. package/src/runtime-mcp/manager.ts +689 -55
  175. package/src/runtime-mcp/pool.test.ts +31 -0
  176. package/src/runtime-mcp/pool.ts +304 -28
  177. package/src/runtime-mcp/redaction.ts +42 -0
  178. package/src/runtime-mcp/startup-policy.ts +7 -0
  179. package/src/runtime-mcp/tool-bridge.ts +71 -0
  180. package/src/runtime-mcp/transports/http.ts +108 -25
  181. package/src/sdk/acp/adapter.ts +27 -8
  182. package/src/sdk/broker/broker.ts +378 -52
  183. package/src/sdk/broker/identity.ts +9 -1
  184. package/src/sdk/broker/lifecycle-ledger.ts +95 -31
  185. package/src/sdk/broker/lifecycle.ts +690 -141
  186. package/src/sdk/broker/runtime.ts +1 -1
  187. package/src/sdk/broker/session-index.ts +97 -4
  188. package/src/sdk/broker/spawn-authority.ts +35 -7
  189. package/src/sdk/broker/stderr-drainer.ts +59 -0
  190. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  191. package/src/sdk/bus/chat-daemon-runtime.ts +1 -0
  192. package/src/sdk/bus/index.ts +690 -80
  193. package/src/sdk/bus/telegram-daemon-cli.ts +31 -2
  194. package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
  195. package/src/sdk/bus/telegram-daemon.ts +10 -3
  196. package/src/sdk/cli/master-cli.ts +47 -36
  197. package/src/sdk/cli/rows.ts +30 -7
  198. package/src/sdk/cli/session-cli.ts +687 -184
  199. package/src/sdk/client/client.ts +18 -0
  200. package/src/sdk/guides/catalog.ts +2 -2
  201. package/src/sdk/guides/cli.ts +20 -62
  202. package/src/sdk/guides/verify.ts +14 -0
  203. package/src/sdk/host/host.ts +49 -5
  204. package/src/sdk/host/session-runtime.test.ts +138 -2
  205. package/src/sdk/host/session-runtime.ts +311 -97
  206. package/src/sdk/host/types.ts +12 -1
  207. package/src/sdk/host/websocket-transport.lifecycle.test.ts +84 -0
  208. package/src/sdk/host/websocket-transport.ts +40 -6
  209. package/src/sdk/index.ts +11 -0
  210. package/src/sdk/prompt-deadline-flush.ts +334 -0
  211. package/src/sdk/prompt-deadline-manager.ts +133 -1
  212. package/src/sdk/prompt-tool-boundary.ts +121 -0
  213. package/src/sdk/protocol/operation-inventory.generated.json +106 -0
  214. package/src/sdk/router/session-router.ts +9 -1
  215. package/src/sdk/session.ts +182 -7
  216. package/src/sdk/startup-capability.ts +1 -1
  217. package/src/sdk/transport/relay.ts +71 -6
  218. package/src/sdk/transport/serve-cli.ts +397 -42
  219. package/src/sdk/transport/socket.ts +12 -11
  220. package/src/sdk/transport/stdio.ts +7 -3
  221. package/src/session/agent-session.ts +2437 -400
  222. package/src/session/fallback-chain-controller.ts +6 -7
  223. package/src/session/fold-coordinator.ts +24 -5
  224. package/src/session/internal/managed-session-scope.ts +58 -18
  225. package/src/session/internal/managed-session-storage.ts +304 -11
  226. package/src/session/session-manager.ts +382 -44
  227. package/src/session/session-work-lease.ts +34 -0
  228. package/src/setup/model-onboarding-guidance.ts +1 -1
  229. package/src/setup/provider-onboarding.ts +397 -24
  230. package/src/slash-commands/builtin-registry.ts +258 -14
  231. package/src/task/index.ts +14 -2
  232. package/src/tools/bash.ts +98 -78
  233. package/src/tools/fetch.ts +119 -20
  234. package/src/tools/job.ts +151 -25
  235. package/src/tools/output-meta.ts +15 -2
  236. package/src/tools/path-utils.ts +27 -3
  237. package/src/tools/read.ts +3 -3
  238. package/src/tools/steer-fold.ts +107 -0
  239. package/src/tools/tool-catalog.generated.ts +29 -2
  240. package/src/tools/tool-errors.ts +4 -0
  241. package/src/utils/git.ts +53 -3
  242. package/src/utils/markit.ts +55 -41
  243. package/src/utils/mupdf-assets.d.ts +4 -0
  244. package/src/utils/mupdf-embedded.ts +4 -0
  245. package/src/utils/mupdf.ts +129 -0
  246. package/src/utils/session-title-generation.ts +29 -0
  247. package/src/utils/title-generator.ts +46 -2
  248. package/src/web/scrapers/types.ts +24 -3
  249. package/vendor/markit-ai/LICENSE +21 -0
  250. package/vendor/markit-ai/MANIFEST.json +412 -0
  251. package/vendor/markit-ai/dist/commands/config.d.ts +4 -0
  252. package/vendor/markit-ai/dist/commands/config.js +139 -0
  253. package/vendor/markit-ai/dist/commands/convert.d.ts +6 -0
  254. package/vendor/markit-ai/dist/commands/convert.js +113 -0
  255. package/vendor/markit-ai/dist/commands/formats.d.ts +2 -0
  256. package/vendor/markit-ai/dist/commands/formats.js +92 -0
  257. package/vendor/markit-ai/dist/commands/init.d.ts +2 -0
  258. package/vendor/markit-ai/dist/commands/init.js +29 -0
  259. package/vendor/markit-ai/dist/commands/onboard.d.ts +2 -0
  260. package/vendor/markit-ai/dist/commands/onboard.js +61 -0
  261. package/vendor/markit-ai/dist/commands/plugin.d.ts +4 -0
  262. package/vendor/markit-ai/dist/commands/plugin.js +58 -0
  263. package/vendor/markit-ai/dist/config.d.ts +26 -0
  264. package/vendor/markit-ai/dist/config.js +42 -0
  265. package/vendor/markit-ai/dist/converters/audio.d.ts +7 -0
  266. package/vendor/markit-ai/dist/converters/audio.js +104 -0
  267. package/vendor/markit-ai/dist/converters/csv.d.ts +7 -0
  268. package/vendor/markit-ai/dist/converters/csv.js +83 -0
  269. package/vendor/markit-ai/dist/converters/docx.d.ts +6 -0
  270. package/vendor/markit-ai/dist/converters/docx.js +57 -0
  271. package/vendor/markit-ai/dist/converters/epub.d.ts +8 -0
  272. package/vendor/markit-ai/dist/converters/epub.js +128 -0
  273. package/vendor/markit-ai/dist/converters/github.d.ts +18 -0
  274. package/vendor/markit-ai/dist/converters/github.js +148 -0
  275. package/vendor/markit-ai/dist/converters/html.d.ts +6 -0
  276. package/vendor/markit-ai/dist/converters/html.js +30 -0
  277. package/vendor/markit-ai/dist/converters/image.d.ts +6 -0
  278. package/vendor/markit-ai/dist/converters/image.js +124 -0
  279. package/vendor/markit-ai/dist/converters/ipynb.d.ts +6 -0
  280. package/vendor/markit-ai/dist/converters/ipynb.js +75 -0
  281. package/vendor/markit-ai/dist/converters/iwork.d.ts +20 -0
  282. package/vendor/markit-ai/dist/converters/iwork.js +391 -0
  283. package/vendor/markit-ai/dist/converters/json.d.ts +6 -0
  284. package/vendor/markit-ai/dist/converters/json.js +21 -0
  285. package/vendor/markit-ai/dist/converters/pdf/columns.d.ts +35 -0
  286. package/vendor/markit-ai/dist/converters/pdf/columns.js +93 -0
  287. package/vendor/markit-ai/dist/converters/pdf/extract.d.ts +19 -0
  288. package/vendor/markit-ai/dist/converters/pdf/extract.js +514 -0
  289. package/vendor/markit-ai/dist/converters/pdf/grid.d.ts +25 -0
  290. package/vendor/markit-ai/dist/converters/pdf/grid.js +795 -0
  291. package/vendor/markit-ai/dist/converters/pdf/headers.d.ts +24 -0
  292. package/vendor/markit-ai/dist/converters/pdf/headers.js +108 -0
  293. package/vendor/markit-ai/dist/converters/pdf/index.d.ts +19 -0
  294. package/vendor/markit-ai/dist/converters/pdf/index.js +136 -0
  295. package/vendor/markit-ai/dist/converters/pdf/mupdf-loader.js +9 -0
  296. package/vendor/markit-ai/dist/converters/pdf/render.d.ts +24 -0
  297. package/vendor/markit-ai/dist/converters/pdf/render.js +513 -0
  298. package/vendor/markit-ai/dist/converters/pdf/types.d.ts +75 -0
  299. package/vendor/markit-ai/dist/converters/pdf/types.js +1 -0
  300. package/vendor/markit-ai/dist/converters/plain-text.d.ts +6 -0
  301. package/vendor/markit-ai/dist/converters/plain-text.js +87 -0
  302. package/vendor/markit-ai/dist/converters/pptx.d.ts +8 -0
  303. package/vendor/markit-ai/dist/converters/pptx.js +289 -0
  304. package/vendor/markit-ai/dist/converters/rss.d.ts +11 -0
  305. package/vendor/markit-ai/dist/converters/rss.js +138 -0
  306. package/vendor/markit-ai/dist/converters/wikipedia.d.ts +6 -0
  307. package/vendor/markit-ai/dist/converters/wikipedia.js +33 -0
  308. package/vendor/markit-ai/dist/converters/xlsx.d.ts +8 -0
  309. package/vendor/markit-ai/dist/converters/xlsx.js +147 -0
  310. package/vendor/markit-ai/dist/converters/xml.d.ts +6 -0
  311. package/vendor/markit-ai/dist/converters/xml.js +18 -0
  312. package/vendor/markit-ai/dist/converters/yaml.d.ts +6 -0
  313. package/vendor/markit-ai/dist/converters/yaml.js +17 -0
  314. package/vendor/markit-ai/dist/converters/zip.d.ts +8 -0
  315. package/vendor/markit-ai/dist/converters/zip.js +57 -0
  316. package/vendor/markit-ai/dist/index.d.ts +30 -0
  317. package/vendor/markit-ai/dist/index.js +26 -0
  318. package/vendor/markit-ai/dist/main.d.ts +2 -0
  319. package/vendor/markit-ai/dist/main.js +191 -0
  320. package/vendor/markit-ai/dist/markit.d.ts +45 -0
  321. package/vendor/markit-ai/dist/markit.js +267 -0
  322. package/vendor/markit-ai/dist/plugins/api.d.ts +7 -0
  323. package/vendor/markit-ai/dist/plugins/api.js +42 -0
  324. package/vendor/markit-ai/dist/plugins/index.d.ts +4 -0
  325. package/vendor/markit-ai/dist/plugins/index.js +3 -0
  326. package/vendor/markit-ai/dist/plugins/installer.d.ts +25 -0
  327. package/vendor/markit-ai/dist/plugins/installer.js +176 -0
  328. package/vendor/markit-ai/dist/plugins/loader.d.ts +6 -0
  329. package/vendor/markit-ai/dist/plugins/loader.js +61 -0
  330. package/vendor/markit-ai/dist/plugins/types.d.ts +25 -0
  331. package/vendor/markit-ai/dist/plugins/types.js +1 -0
  332. package/vendor/markit-ai/dist/providers/anthropic.d.ts +2 -0
  333. package/vendor/markit-ai/dist/providers/anthropic.js +47 -0
  334. package/vendor/markit-ai/dist/providers/index.d.ts +21 -0
  335. package/vendor/markit-ai/dist/providers/index.js +56 -0
  336. package/vendor/markit-ai/dist/providers/openai.d.ts +2 -0
  337. package/vendor/markit-ai/dist/providers/openai.js +76 -0
  338. package/vendor/markit-ai/dist/providers/types.d.ts +26 -0
  339. package/vendor/markit-ai/dist/providers/types.js +1 -0
  340. package/vendor/markit-ai/dist/types.d.ts +36 -0
  341. package/vendor/markit-ai/dist/types.js +1 -0
  342. package/vendor/markit-ai/dist/utils/exit-codes.d.ts +4 -0
  343. package/vendor/markit-ai/dist/utils/exit-codes.js +4 -0
  344. package/vendor/markit-ai/dist/utils/output.d.ts +22 -0
  345. package/vendor/markit-ai/dist/utils/output.js +31 -0
  346. package/vendor/markit-ai/dist/utils/turndown.d.ts +8 -0
  347. package/vendor/markit-ai/dist/utils/turndown.js +70 -0
  348. package/vendor/markit-ai/package.json +74 -0
  349. package/vendor/markit-ai.patch +49 -0
@@ -145,6 +145,13 @@ export interface MCPPoolLease {
145
145
  onEvent(listener: LeaseListener): () => void;
146
146
  release(): Promise<void>;
147
147
  }
148
+ export interface MCPPreparedReplacement {
149
+ readonly lease: MCPPoolLease;
150
+ canCommit(): boolean;
151
+ publish(): void;
152
+ commit(): void;
153
+ abort(): Promise<void>;
154
+ }
148
155
  declare class MCPPoolLeaseImpl implements MCPPoolLease {
149
156
  #private;
150
157
  readonly generation: number;
@@ -187,7 +194,11 @@ export declare class MCPConnectionPool {
187
194
  awaitRestart(key: string): Promise<boolean>;
188
195
  finishRestart(key: string, error?: unknown): void;
189
196
  releaseRestart(key: string): void;
197
+ private retiredCleanupId;
198
+ private getRetiredAcquisitionCleanup;
199
+ private getRetiredAcquisitionCleanupForKey;
190
200
  private retainCancelledAcquireCleanup;
201
+ private retainPreparedCleanup;
191
202
  private notifyPendingAcquireCleanup;
192
203
  /** @internal Whether this pool still owns the notified abandoned-acquire flight. */
193
204
  hasPendingAcquireCleanup(error: MCPPoolAcquireAbortError): boolean;
@@ -202,6 +213,12 @@ export declare class MCPConnectionPool {
202
213
  /** @internal Join and retry one generation of abandoned acquisition cleanup. */
203
214
  closePendingAcquireCleanup(key: string, generation: number): Promise<void>;
204
215
  acquire(name: string, config: MCPServerConfig, options?: MCPPoolAcquireOptions): Promise<MCPPoolLease>;
216
+ /**
217
+ * Prepared MCP replacements fence and retain acquisition cleanup ownership
218
+ * The caller validates its catalog first, then commits the key swap
219
+ * synchronously or aborts and closes only the candidate.
220
+ */
221
+ prepareReplacement(name: string, config: MCPServerConfig, options?: MCPPoolAcquireOptions): Promise<MCPPreparedReplacement>;
205
222
  private waitForPendingEntry;
206
223
  private scheduleZeroClaimCleanup;
207
224
  private cancelPendingEntry;
@@ -1,2 +1,22 @@
1
+ import type { AgentSession } from "../session/agent-session";
1
2
  export declare function redactMCPEndpoint(value: string | undefined): string | undefined;
2
3
  export declare function redactMCPDiagnosticValue(value: unknown): unknown;
4
+ /**
5
+ * Capability granted to a session that the root interactive entry point created
6
+ * with an explicit `--mcp-config` path. Holding it is the only way to read exact
7
+ * MCP status; it carries no manager, transport, or configuration reference.
8
+ */
9
+ export interface ExactMcpControls {
10
+ readonly grantSource: "root-interactive-exact-config";
11
+ /**
12
+ * The exact config this session was started with. Status needs it because a
13
+ * tools-only manager deletes a server from its own bookkeeping when the
14
+ * connection fails, so the manager alone can never report a server that did
15
+ * not come up — the very case an operator runs `/mcp` to see.
16
+ */
17
+ readonly configPath: string;
18
+ }
19
+ export declare function attachExactMcpControls(session: AgentSession, controls: ExactMcpControls): void;
20
+ export declare function getExactMcpControls(session: AgentSession): ExactMcpControls | undefined;
21
+ /** Revoke controls when the AgentSession object adopts a new logical identity. */
22
+ export declare function revokeExactMcpControls(session: AgentSession): void;
@@ -1,4 +1,10 @@
1
1
  import type { MCPServerConfig } from "./types";
2
2
  export type AutoloadStatus = "autoload" | "autoload-off" | "disabled";
3
+ /** Ordinary standalone sessions stop blocking on MCP startup after this wait. */
4
+ export declare const DEFAULT_MCP_STARTUP_WAIT_MS = 250;
5
+ /** Grace added to the largest declared per-server startup window. */
6
+ export declare const MCP_STARTUP_WAIT_GRACE_MS = 500;
7
+ /** Ordinary startup never blocks longer than this batch ceiling. */
8
+ export declare const MAX_MCP_STARTUP_WAIT_MS = 1750;
3
9
  /** Pure startup policy shared by runtime-facing CLI inspection and doctor. */
4
10
  export declare function computeAutoloadStatus(name: string, config: Pick<MCPServerConfig, "enabled" | "autoload">, disabledServers: ReadonlySet<string>): AutoloadStatus;
@@ -22,6 +22,13 @@ export interface MCPToolOptions {
22
22
  * owning manager/runtime. Resolved per call so late registration still applies.
23
23
  */
24
24
  inputHandler?: () => MCPInputRequestHandler | undefined;
25
+ /**
26
+ * Exact MCP session control: false while the owning manager has this server
27
+ * suspended. Checked alongside `#sessionControlInvalidated` so a wrapper that
28
+ * outlives a resume/reconnect still fails locally instead of reaching the
29
+ * transport for a server this session no longer has active.
30
+ */
31
+ isAvailable?: () => boolean;
25
32
  }
26
33
  export declare function isRetriableConnectionError(error: unknown): boolean;
27
34
  /** Details included in MCP tool results for rendering */
@@ -66,6 +73,7 @@ export declare class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
66
73
  /** Server name */
67
74
  readonly mcpServerName: string;
68
75
  private connection;
76
+ invalidateForSessionControl(): void;
69
77
  /** Create MCPTool instances for all tools from an MCP server lease/connection. */
70
78
  static fromTools(target: MCPToolTarget, tools: MCPToolDefinition[], reconnect?: MCPReconnect, options?: MCPToolOptions): MCPTool[];
71
79
  constructor(target: MCPToolTarget, tool: MCPToolDefinition, reconnect?: MCPReconnect | undefined, options?: MCPToolOptions);
@@ -90,6 +98,7 @@ export declare class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetai
90
98
  readonly mcpToolName: string;
91
99
  /** Server name */
92
100
  readonly mcpServerName: string;
101
+ invalidateForSessionControl(): void;
93
102
  /** Create DeferredMCPTool instances for all tools from an MCP server */
94
103
  static fromTools(serverName: string, tools: MCPToolDefinition[], getConnection: () => Promise<MCPServerConnection>, source?: SourceMeta, reconnect?: MCPReconnect, options?: MCPToolOptions): DeferredMCPTool[];
95
104
  constructor(serverName: string, tool: MCPToolDefinition, getConnection: () => Promise<MCPServerConnection>, source?: SourceMeta, reconnect?: MCPReconnect | undefined, options?: MCPToolOptions);
@@ -1,5 +1,7 @@
1
1
  import type { MCPHttpServerConfig, MCPRequestOptions, MCPSseServerConfig, MCPTransport } from "../../runtime-mcp/types";
2
2
  import { type MCPModernClientContext, type MCPProtocolEra } from "../protocol";
3
+ /** Live HTTP/SSE MCP transports awaiting postmortem release. Exposed for leak assertions/tests. */
4
+ export declare function liveHttpTransportCount(): number;
3
5
  /**
4
6
  * HTTP transport for MCP servers.
5
7
  * Uses POST for requests, supports SSE responses.
@@ -38,6 +40,15 @@ export declare class HttpTransport implements MCPTransport {
38
40
  startSSEListener(): Promise<void>;
39
41
  request<T = unknown>(method: string, params?: Record<string, unknown>, options?: MCPRequestOptions): Promise<T>;
40
42
  notify(method: string, params?: Record<string, unknown>): Promise<void>;
43
+ /**
44
+ * Terminate the server-side session on a signal or fatal exit, without the
45
+ * reader drain `close()` does: postmortem runs inside the signal handler,
46
+ * where an aborted SSE body read is never observed by JS, so awaiting the
47
+ * readers there never settles and the DELETE stays unreachable. `onClose` is
48
+ * deliberately not fired - the manager reacts to it by reconnecting, which
49
+ * would open a fresh server session on the way out.
50
+ */
51
+ releaseForPostmortem(signal: AbortSignal): Promise<void>;
41
52
  close(): Promise<void>;
42
53
  }
43
54
  /**
@@ -4,7 +4,7 @@ import { type SdkHostModelResolver } from "../host/model-pin";
4
4
  import { type DirectoryMigrationPolicy } from "../session-directory";
5
5
  import { type BrokerDiscovery, type BrokerPublicationObservation, type RedactedBrokerDiscovery } from "./discovery";
6
6
  import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
7
- import { SessionIndex } from "./session-index";
7
+ import { type IndexedSession, SessionIndex } from "./session-index";
8
8
  import { type MasterCapabilityVerifier, type SpawnSubstrateFailure, type SpawnSubstrateProvider } from "./spawn-authority";
9
9
  export interface BrokerSettings {
10
10
  agentDir: string;
@@ -149,6 +149,9 @@ export type BrokerResponse = {
149
149
  durableEffects?: LifecycleDurableEffectsReceipt;
150
150
  startupFailure?: LifecycleStartupFailureReceipt;
151
151
  };
152
+ export type InputNormalization = {
153
+ input: Record<string, unknown>;
154
+ } | BrokerResponse;
152
155
  /** Complete five-leg child endpoint pin captured at registration. */
153
156
  export type SpawnHostRegistration = {
154
157
  sessionId: string;
@@ -201,6 +204,13 @@ export interface SpawnPromptLayer {
201
204
  pinned: SpawnHostRegistration;
202
205
  }): Promise<SpawnQ26Reconciliation>;
203
206
  }
207
+ /** Exact admission predicate for the child host row published after launch. */
208
+ export declare function spawnRegistrationMatches(candidate: IndexedSession, expected: {
209
+ childId: string;
210
+ cwd: string;
211
+ stateRoot: string;
212
+ }): boolean;
213
+ export declare function normalizeBrokerInput(operation: string, input: Record<string, unknown>): InputNormalization;
204
214
  /** Test seam for lifecycle serialization identity. */
205
215
  export declare function lifecycleTargetForTest(operation: string, input: Record<string, unknown>): unknown;
206
216
  /** Tombstone prefix used by {@link Broker.reclaimStaleLock} when a dead owner's lock is renamed aside. */
@@ -235,7 +245,8 @@ export interface BrokerLockArtifactReapResult {
235
245
  * of the lock's dev+ino, so a machine accrues one directory per dead owner and
236
246
  * nothing ever removed them (54 on the install in #3963). Reaping is
237
247
  * best-effort and fail-closed: anything live, unreadable, permission-denied, or
238
- * otherwise ambiguous is kept and the reason is logged.
248
+ * otherwise ambiguous is kept. Retained paths are logged at debug level and
249
+ * summarized in one warning per reap pass.
239
250
  */
240
251
  export declare function reapStaleBrokerLockArtifacts(input: {
241
252
  agentDir: string;
@@ -1,4 +1,6 @@
1
1
  export declare function brokerIdentityPath(agentDir: string): string;
2
2
  export declare function getBrokerIdentityKey(agentDir: string): Promise<string>;
3
- export declare function deriveIdempotencyIdentity(agentDir: string, operation: string, callerKey: string, _protocolVersionOrLegacyTargetHash?: string): Promise<string>;
3
+ export declare function deriveIdempotencyIdentity(agentDir: string, operation: string, callerKey: string, targetHash?: string): Promise<string>;
4
+ /** Identity format used by lifecycle rows written before target binding. */
5
+ export declare function deriveLegacyIdentity(agentDir: string, operation: string, callerKey: string): Promise<string>;
4
6
  export declare function deriveLegacyTargetIdentity(agentDir: string, operation: string, callerKey: string, canonicalTargetHash: string): Promise<string>;
@@ -95,6 +95,23 @@ export type BeginResult = {
95
95
  kind: "in_progress";
96
96
  entry: LifecycleLedgerEntry;
97
97
  };
98
+ type BoundedSourceReadRejection = "not-regular-file" | "oversized-by-stat" | "oversized-by-read" | "read-error";
99
+ /**
100
+ * Why a terminal read-back produced no entry. `absent` means nothing terminal is
101
+ * recorded for the request; `rejected` means the source or a row was refused, which
102
+ * is evidence of a damaged ledger rather than of an unpersisted operation. Collapsing
103
+ * the two lets a corrupt source or row read as "not yet written" and unfence the session.
104
+ */
105
+ export type TerminalReadBackRejection = "bounds" | "shape" | "undecodable" | "row-not-attributable" | "partial-row" | BoundedSourceReadRejection;
106
+ export type TerminalReadBack = {
107
+ kind: "terminal";
108
+ entry: LifecycleLedgerEntry;
109
+ } | {
110
+ kind: "absent";
111
+ } | {
112
+ kind: "rejected";
113
+ reason: TerminalReadBackRejection;
114
+ };
98
115
  export interface LifecycleLedgerLimits {
99
116
  maxBytes?: number;
100
117
  maxLineBytes?: number;
@@ -121,14 +138,15 @@ export declare class LifecycleLedger {
121
138
  * uncertainly persists that conclusion, and refusing to read it back would report a
122
139
  * synced row as unpersisted and replace its true reason with a generic one.
123
140
  */
124
- readTerminal(identity: string, requestHash: string): Promise<LifecycleLedgerEntry | undefined>;
125
- findByOperationKey(operationKey: string): LifecycleLedgerEntry | undefined;
141
+ readTerminal(identity: string, requestHash: string): Promise<TerminalReadBack>;
142
+ findByOperationKey(operationKey: string, fingerprint?: string): LifecycleLedgerEntry | undefined;
143
+ findAnyByOperationKey(operationKey: string): LifecycleLedgerEntry | undefined;
126
144
  /**
127
145
  * Legacy target-inclusive rows predate the operation/key index. Their opaque
128
146
  * identities cannot establish that a different target is safe, so callers
129
147
  * must reject rather than create a second admission.
130
148
  */
131
- hasLegacyIdentity(): boolean;
149
+ hasLegacyIdentity(excludedIdentities?: ReadonlySet<string>): boolean;
132
150
  migrateIdentity(from: string, to: string, metadata: {
133
151
  operationKey: string;
134
152
  fingerprint: string;
@@ -137,6 +155,7 @@ export declare class LifecycleLedger {
137
155
  begin(identity: string, requestHash: string, metadata?: {
138
156
  operationKey?: string;
139
157
  fingerprint?: string;
158
+ intendedSessionId?: string;
140
159
  }): Promise<BeginResult>;
141
160
  transition(identity: string, state: LifecycleState, fields?: Omit<Partial<LifecycleLedgerEntry>, "identity" | "requestHash" | "state" | "ts">): Promise<LifecycleLedgerEntry>;
142
161
  assertSupportedStateVersions(): Promise<void>;
@@ -152,3 +171,4 @@ export declare class LifecycleLedger {
152
171
  listUncertainCreatesBySessionId(sessionId: string, effectMarker?: string, remoteCreateKey?: string): LifecycleLedgerEntry[];
153
172
  findPendingCleanupByTarget(sessionId: string, cwd: string, transcriptPath: string): LifecycleLedgerEntry | undefined;
154
173
  }
174
+ export {};
@@ -1,5 +1,6 @@
1
1
  import { type ChildProcess } from "node:child_process";
2
2
  import { type GjcLaunchWorktreePlan } from "../../gjc-runtime/launch-worktree";
3
+ import type { SessionWorkLease } from "../../session/session-work-lease";
3
4
  import type { SessionLifecycleMcpServer } from "../acp/mcp";
4
5
  import { type SdkStartupFailure, type SdkStartupRollbackResult } from "../startup-capability";
5
6
  import type { Broker, BrokerCleanupEvidence, BrokerResponse } from "./broker";
@@ -8,8 +9,11 @@ import { type ProcessIncarnationCommandRunner, type ProcessIncarnationOptions, p
8
9
  import { type SdkInternalSpawnCommand } from "./runtime";
9
10
  import { type IndexedSession } from "./session-index";
10
11
  export { type ProcessIncarnationCommandRunner, type ProcessIncarnationOptions, parseDarwinProcessIncarnation, processIncarnation, };
12
+ /** Remove lifecycle stderr artifacts abandoned by a broker or detached host crash. */
13
+ export declare function reapOrphanedChildStderrLogs(agentDir: string, limit?: number): Promise<number>;
14
+ export declare function lifecycleFailureMessage(message: string, child?: ChildProcess): string;
11
15
  export declare function terminalUncertainStartupMessage(response: BrokerResponse): string;
12
- export declare function waitForChildSpawn(spawned: Pick<ChildProcess, "off" | "on" | "once">, onPostSpawnError?: (error: Error) => void): Promise<void>;
16
+ export declare function waitForChildSpawn(spawned: Pick<ChildProcess, "off" | "on" | "once" | "pid">, onPostSpawnError?: (error: Error) => void): Promise<void>;
13
17
  export interface LifecycleDeadlines {
14
18
  receivedAt: number;
15
19
  requestedReadinessTimeoutMs: number;
@@ -245,8 +249,9 @@ export interface LifecycleExecutionOutcome {
245
249
  /** Returns the response together with every durable lifecycle fact needed for truthful replay. */
246
250
  export declare function executeLifecycle(broker: Broker, operation: string, input: Input, identity: string, cleanup?: CleanupEvidence): Promise<LifecycleExecutionOutcome>;
247
251
  /**
248
- * The live client/socket subscription count of the SDK session endpoint this
249
- * process serves, or `undefined` while this process serves no endpoint.
252
+ * The live SDK demand count of the session endpoint this process serves, or
253
+ * `undefined` while this process serves no endpoint. Observer-only sockets are
254
+ * excluded by {@link SessionHostRuntimeEvidence.observerClients}.
250
255
  *
251
256
  * Only the SDK session runtime owns the real socket table, so it publishes a
252
257
  * reader here instead of every consumer re-deriving attachment from the OS.
@@ -257,8 +262,10 @@ export type SessionHostAttachmentReader = () => number;
257
262
  export interface SessionHostRuntimeEvidence {
258
263
  /** This runtime's own live SDK client/socket subscription count. */
259
264
  attachedClients: SessionHostAttachmentReader;
260
- /** Whether this runtime currently has agent work in flight. */
261
- workInFlight: () => boolean;
265
+ /** Optional subset of attached sockets that only observes the host. */
266
+ observerClients?: SessionHostAttachmentReader;
267
+ /** One authoritative lease held by every admitted or continuing work state. */
268
+ workLease: SessionWorkLease;
262
269
  }
263
270
  /** One runtime's live publication, retractable only by its owner. */
264
271
  export interface SessionHostRuntimePublication {
@@ -275,19 +282,19 @@ export interface SessionHostRuntimePublication {
275
282
  */
276
283
  export declare function publishSessionHostRuntimeEvidence(evidence: SessionHostRuntimeEvidence): SessionHostRuntimePublication;
277
284
  /**
278
- * This process's currently attached SDK client count, summed across every
285
+ * This process's currently demanding SDK client count, summed across every
279
286
  * serving runtime, or `undefined` when no runtime publishes a readable count
280
287
  * (before startup, after teardown, or when every reader itself fails). Never
281
288
  * guesses: absence of a reader is absence of evidence.
282
289
  */
283
290
  export declare function sessionHostAttachedClients(): number | undefined;
284
291
  /**
285
- * Whether any runtime in this process has agent work in flight right now.
292
+ * Whether any runtime in this process still holds its authoritative work lease.
286
293
  *
287
294
  * Positive evidence only: a runtime that publishes nothing, or whose reader
288
295
  * fails, reports no work, so this can never keep an abandoned host alive.
289
296
  */
290
- export declare function sessionHostWorkInFlight(): boolean;
297
+ export declare function sessionHostWorkLeaseActive(): boolean;
291
298
  /**
292
299
  * How often a live broker re-checks its own session registrations against OS
293
300
  * process liveness.
@@ -1,4 +1,4 @@
1
- export type SdkInternalAction = "broker-internal" | "session-host-internal";
1
+ export type SdkInternalAction = "broker-internal" | "session-host-internal" | "stderr-drain-internal";
2
2
  export type SdkInternalSpawnCommand = {
3
3
  kind: "bun-source";
4
4
  file: string;
@@ -1,7 +1,7 @@
1
1
  import { SDK_STATE_VERSION, SESSION_INDEX_EVENT_VERSION } from "./state-version";
2
2
  export type SessionIndexEventType = "host_registered" | "host_heartbeat" | "host_unregistered" | "lifecycle_started" | "lifecycle_terminal" | "session_closed" | "session_deleted" | "record_reconciled";
3
3
  export type SessionActivityState = "active" | "idle";
4
- /** Coalesced broker-owned heartbeat checkpoint (C2): state plus the observation time. */
4
+ /** Host-reported or broker-coalesced heartbeat: state plus the observation time. */
5
5
  export interface SessionActivity {
6
6
  state: SessionActivityState;
7
7
  at: number;
@@ -9,6 +9,8 @@ export interface SessionActivity {
9
9
  /** Events persisted without an OS process incarnation (v1/v2 era) are legacy provenance. */
10
10
  export type SessionIdentityProvenance = "composite" | "legacy";
11
11
  export type SessionTombstoneRule = "retain" | "expire";
12
+ /** Durable provenance for a retired host registration. */
13
+ export type HostUnregisteredReason = "process_exited" | "detached_idle";
12
14
  /**
13
15
  * Injected retention policy (C3). The broker schedules compaction independently of
14
16
  * rotation; settings apply at the next scheduled compaction. `clock` drives both
@@ -76,6 +78,7 @@ export interface SessionIndexEvent {
76
78
  /** Immutable endpoint file identity captured by the broker at registration. */
77
79
  endpointFileId?: string;
78
80
  lifecycleRequestId?: string;
81
+ hostUnregisteredReason?: HostUnregisteredReason;
79
82
  terminalUncertain?: boolean;
80
83
  /**
81
84
  * Distinguishes the terminal-uncertain claim written by a forced stop of a
@@ -105,6 +108,7 @@ export interface IndexedSession {
105
108
  live: boolean;
106
109
  indexSeq: number;
107
110
  lifecycleRequestId?: string;
111
+ hostUnregisteredReason?: HostUnregisteredReason;
108
112
  terminalUncertain?: boolean;
109
113
  /** True only for a terminal-uncertain claim written by a forced stale-worktree release. */
110
114
  forcedStaleRelease?: boolean;
@@ -174,6 +178,8 @@ export interface SessionIndexAuditRecord {
174
178
  export declare const sessionIndexChecksum: (event: Omit<SessionIndexEvent, "checksum">) => string;
175
179
  /** Coalesced heartbeat checkpoint rate cap (C2): at most one per session per minute. */
176
180
  export declare const SESSION_HEARTBEAT_INTERVAL_MS = 60000;
181
+ /** A stale-host retirement requires silence well beyond the broker freshness window. */
182
+ export declare const DEAD_HOST_HEARTBEAT_SILENCE_MS: number;
177
183
  export declare const DEFAULT_SESSION_RETENTION_MAX_AGE_MS: number;
178
184
  export declare const DEFAULT_SESSION_RETENTION_MAX_ROWS = 25000;
179
185
  export declare class SessionIndex {
@@ -201,7 +207,20 @@ export declare class SessionIndex {
201
207
  refresh(): Promise<void>;
202
208
  get indexSeq(): number;
203
209
  append(input: Omit<SessionIndexEvent, "version" | "indexSeq" | "checksum" | "ts"> & Partial<Pick<SessionIndexEvent, "ts">>): Promise<SessionIndexEvent>;
204
- unregisterIfCurrent(expected: Pick<SessionIndexEvent, "sessionId" | "locator" | "endpointGeneration" | "pid" | "indexSeq" | "endpointMtimeMs" | "endpointFileId" | "lifecycleRequestId" | "processIncarnation" | "hostIncarnation">): Promise<boolean>;
210
+ /**
211
+ * Atomically fence an exact, long-silent dead-host authority before a caller
212
+ * removes state outside the broker index. The comparison and terminal event
213
+ * append share the machine-global index lock, so a heartbeat, successor
214
+ * registration, or unresolved-authority update that wins the lock prevents
215
+ * destructive coordinator cleanup.
216
+ */
217
+ retireStaleIfCurrent(expected: {
218
+ sessionId: string;
219
+ workspace: string;
220
+ endpointGeneration: number;
221
+ endpointIncarnation: string;
222
+ }): Promise<"retired" | "already_retired" | "not_found" | "stale">;
223
+ unregisterIfCurrent(expected: Pick<SessionIndexEvent, "sessionId" | "locator" | "endpointGeneration" | "pid" | "indexSeq" | "endpointMtimeMs" | "endpointFileId" | "lifecycleRequestId" | "processIncarnation" | "hostIncarnation">, reason?: HostUnregisteredReason): Promise<boolean>;
205
224
  /** Hold the canonical index lock across an authority-sensitive operation. */
206
225
  withLocked<T>(callback: () => Promise<T>): Promise<T>;
207
226
  snapshot(): Promise<void>;
@@ -210,7 +229,7 @@ export declare class SessionIndex {
210
229
  * injected retention policy to a fresh snapshot and truncates the log.
211
230
  */
212
231
  compact(): Promise<void>;
213
- listSessions(): SessionList;
232
+ listSessions(probedIncarnations?: ReadonlyMap<string, string | undefined>): SessionList;
214
233
  /**
215
234
  * Credential-free proof for one exact public endpoint generation.
216
235
  *
@@ -12,6 +12,8 @@ export type SpawnClaimV2 = {
12
12
  status: "owned" | "consumed";
13
13
  };
14
14
  childId?: string;
15
+ /** Launch proof retained while registration is still unbound so a later retry can re-prove or close it. */
16
+ substrateProof?: SpawnSubstrateProof;
15
17
  seed?: SeedDeliveryV2;
16
18
  authorityRef?: string;
17
19
  createdAt: number;
@@ -122,6 +124,8 @@ export type SpawnClaimTransition = {
122
124
  leaseEpoch?: string;
123
125
  /** The fresh child ID is committed before substrate launch. */
124
126
  childId?: string;
127
+ /** Launch proof may be appended to the pre-registration state for later reconciliation. */
128
+ substrateProof?: SpawnSubstrateProof;
125
129
  /** Required for seed and terminal state transitions that carry Q26 facts. */
126
130
  seed?: SeedDeliveryV2;
127
131
  failure?: SpawnSubstrateFailure;
@@ -0,0 +1,13 @@
1
+ /** Parse and run the private source/compiled CLI drainer route. */
2
+ export declare function runSdkStderrDrainerFromArgv(argv: readonly string[]): Promise<void>;
3
+ /**
4
+ * Drain a detached lifecycle host's stderr without letting a noisy child grow
5
+ * its diagnostic artifact. The drainer owns the read side of the pipe, so the
6
+ * host remains attached to a process that outlives the broker itself.
7
+ *
8
+ * The artifact is written through one descriptor opened up front: once the
9
+ * broker has finished reading the startup diagnostic it unlinks the path, and
10
+ * the remaining output lands on an unlinked inode that disappears with this
11
+ * process instead of accumulating under the agent directory.
12
+ */
13
+ export declare function runSdkStderrDrainer(logPath: string, maxBytes: number): Promise<void>;
@@ -25,6 +25,7 @@ import { Settings } from "../../config/settings";
25
25
  import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
26
26
  import { type WorkflowGateEmitter, type WorkflowGateTerminalProof } from "../../modes/shared/agent-wire/workflow-gate-broker";
27
27
  import type { AgentSessionEvent } from "../../session/agent-session";
28
+ import { type SessionWorkLease, type SessionWorkLeaseHandle } from "../../session/session-work-lease";
28
29
  import type { AskAnswerSource, AskAnswerSourceResult, AskRemoteControl } from "../../tools";
29
30
  import { type SessionHostRuntimePublication } from "../broker/lifecycle";
30
31
  import { type SessionSdkHost } from "../host";
@@ -342,6 +343,17 @@ interface SessionRuntime {
342
343
  serverStopped: boolean;
343
344
  /** This runtime's own host-liveness publication; only its teardown may retract it. */
344
345
  evidencePublication?: SessionHostRuntimePublication;
346
+ /** Authoritative lease held by admitted input, execution, and recovery work. */
347
+ workLease: SessionWorkLease;
348
+ /** Lease retained while an uncorrelated agent loop is active. */
349
+ activeWorkLease?: SessionWorkLeaseHandle;
350
+ /** Lease retained while an agent loop is paused awaiting resumption. */
351
+ pausedWorkLease?: SessionWorkLeaseHandle;
352
+ /**
353
+ * Handles of queued submissions promoted to their own run, handed over at
354
+ * the promotion boundary and retired by that run's agent_start.
355
+ */
356
+ promotedWorkLeases: SessionWorkLeaseHandle[];
345
357
  brokerRegistrationReleased: boolean;
346
358
  verbosity: "lean" | "verbose";
347
359
  /** Whether the agent loop is currently running (drives the typing indicator). */
@@ -639,5 +651,12 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
639
651
  expectedEpoch?: number;
640
652
  };
641
653
  }) => Promise<RunSettlementProof>;
654
+ /**
655
+ * Live, SYNCHRONOUS view of the dispatched tool calls the run resource
656
+ * ledger holds for an execution handle (#5637). Strictly read-only: it
657
+ * never claims, seals or otherwise mutates ledger state. Optional so an
658
+ * older host that does not thread it degrades to the event-derived set.
659
+ */
660
+ pendingToolExecutions?: (handle: string) => readonly string[];
642
661
  };
643
662
  }): void;
@@ -285,8 +285,10 @@ export declare const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
285
285
  * first refusal, so an owner still running the generation-178 router keeps
286
286
  * killing a session's mirroring after one transient rejection and must be
287
287
  * replaced across this upgrade.
288
+ * Generation 190 acknowledges the protected prompt-deadline boundary change,
289
+ * so generation-189 owners are replaced instead of retaining the old path.
288
290
  */
289
- export declare const DAEMON_GENERATION = 187;
291
+ export declare const DAEMON_GENERATION = 192;
290
292
  /**
291
293
  * Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
292
294
  * requires durable publication receipts and acknowledged attachment dispatch,
@@ -725,6 +725,11 @@ export interface TelegramDaemonOptions {
725
725
  enabled: boolean;
726
726
  };
727
727
  idleTimeoutMs?: number;
728
+ /**
729
+ * Standalone daemon owners keep Telegram command ingress alive while no SDK
730
+ * endpoints are attached. Embedded/test daemons retain finite-idle behavior.
731
+ */
732
+ keepAliveWithoutAttachments?: boolean;
728
733
  /** TTL for durable topic-adoption intents (default 10 minutes). Observed, not a fixed contract. */
729
734
  adoptionIntentTtlMs?: number;
730
735
  pid?: number;
@@ -1,8 +1,9 @@
1
+ import { PublicCommandFailure } from "../../cli/public-command-errors";
1
2
  import { type IndexedSession } from "../broker/session-index";
2
- export declare class SdkMasterCliError extends Error {
3
+ export declare class SdkMasterCliError extends PublicCommandFailure {
3
4
  readonly code: string;
4
5
  readonly exitCode: 1 | 2;
5
- constructor(code: string, message: string, exitCode?: 1 | 2);
6
+ constructor(code: string, _message: string, exitCode?: 1 | 2);
6
7
  }
7
8
  export interface SdkSpawnArgs {
8
9
  cwd?: string;
@@ -26,11 +27,6 @@ export interface SdkSpawnRendered {
26
27
  turnId?: string;
27
28
  status?: string;
28
29
  };
29
- idempotencyKey?: string;
30
- error?: {
31
- code: string;
32
- message: string;
33
- };
34
30
  }
35
31
  export interface SdkSpawnDependencies {
36
32
  env: Record<string, string | undefined>;
@@ -48,9 +44,9 @@ export interface SdkSpawnDependencies {
48
44
  */
49
45
  export declare function selectNewestMasterAttestationEpoch(rows: readonly IndexedSession[], ownerSessionId: string): string | undefined;
50
46
  /** Projects an arbitrary Broker response onto the allowlisted render shape. */
51
- export declare function safeSpawnRender(response: unknown): {
47
+ export declare function safeSpawnRender(response: unknown, idempotencyKey?: string): {
52
48
  rendered: SdkSpawnRendered;
53
- exitCode: 0 | 1;
49
+ exitCode: 0;
54
50
  };
55
51
  export declare function renderSpawnTable(rendered: SdkSpawnRendered): string;
56
52
  /**
@@ -59,5 +55,5 @@ export declare function renderSpawnTable(rendered: SdkSpawnRendered): string;
59
55
  */
60
56
  export declare function runSdkSpawn(args: SdkSpawnArgs, dependencies?: Partial<SdkSpawnDependencies>): Promise<{
61
57
  rendered: SdkSpawnRendered;
62
- exitCode: 0 | 1;
58
+ exitCode: 0;
63
59
  }>;
@@ -76,7 +76,25 @@ export interface SdkTailEnvelopeV1 {
76
76
  items: SdkTailItemV1[];
77
77
  }
78
78
  export declare function tailItemKey(item: SdkTailItemV1): string;
79
- /** Holds positioned live frames until the checkpoint can stamp their authoritative revision. */
79
+ /**
80
+ * Holds positioned live frames until the checkpoint can stamp their
81
+ * authoritative revision, and keeps stamping after it.
82
+ *
83
+ * A positioned frame (generation+seq) that carries no revision after the
84
+ * checkpoint used to abort the whole tail with protocol_error. The host emits
85
+ * such frames whenever its transcript provider is momentarily unavailable
86
+ * (`eventRevision` returns undefined), which is ordinary during a turn - and
87
+ * one such frame turned a live, answering session into one no consumer could
88
+ * observe: every poll failed, the caller held the turn, and after five minutes
89
+ * reported it failed while the answer sat in the transcript (2026-09-17/18,
90
+ * five sessions). A frame is never a reason to lose the tail.
91
+ *
92
+ * The stamp is the LATEST revision observed, not the checkpoint's: revisions
93
+ * advance during a turn, and lifecycle order is compared revision-first. A
94
+ * terminal frame stamped with the initial checkpoint revision would sort
95
+ * before a start that carried a later one, and `--until-idle` would wait on a
96
+ * turn that had already ended.
97
+ */
80
98
  export declare class TailRevisionBuffer {
81
99
  #private;
82
100
  push(item: SdkTailItemV1): SdkTailItemV1[];
@@ -1,8 +1,9 @@
1
+ import { PublicCommandFailure, type PublicEffectProof } from "../../cli/public-command-errors";
1
2
  import { type SdkSearchResultV1, type SdkSearchRowV1 } from "../broker/session-scope";
2
- import type { SessionLifecycleService } from "../lifecycle/service";
3
+ import type { SessionLifecycleResult, SessionLifecycleService } from "../lifecycle/service";
3
4
  import { SessionRouter } from "../router";
4
5
  import { type SdkSessionRowV1 } from "./rows";
5
- export type SdkSessionCliAction = "list" | "search" | "inspect" | "send" | "status" | "tail" | "retire" | "global" | "raw" | "control" | "query" | "global";
6
+ export type SdkSessionCliAction = "list" | "search" | "inspect" | "send" | "status" | "tail" | "close" | "retire" | "global" | "raw" | "control" | "query";
6
7
  export type SdkSessionListScope = "repo" | "cwd" | "worktree" | "all";
7
8
  export type SdkSessionCliRawKind = "control" | "query" | "global";
8
9
  export interface SdkSessionCliArgs {
@@ -24,6 +25,8 @@ export interface SdkSessionCliArgs {
24
25
  strict?: boolean;
25
26
  untilIdle?: boolean;
26
27
  allEvents?: boolean;
28
+ /** tail --cursor: transcript row id the caller has already processed; rows up to and including it are omitted. */
29
+ afterTranscriptId?: string;
27
30
  page?: boolean;
28
31
  repo?: string;
29
32
  scope?: string;
@@ -31,16 +34,28 @@ export interface SdkSessionCliArgs {
31
34
  json?: boolean;
32
35
  agentDir?: string;
33
36
  }
37
+ export interface SdkSessionCliDependencies {
38
+ readonly lifecycleService?: SessionLifecycleService;
39
+ }
34
40
  type JsonRecord = Record<string, unknown>;
35
41
  export interface RetainedTranscriptTailReader {
36
42
  readonly size: number;
37
43
  readRange(start: number, end: number): Promise<Uint8Array>;
38
44
  }
45
+ export declare const SDK_JSON_INPUT_FILE_MAX_BYTES: number;
46
+ /** Translate only SDK-owned codes and explicitly allowlisted reconciliation fields. */
47
+ export declare function sdkPublicFailure(code: string, details?: unknown, proof?: PublicEffectProof): PublicCommandFailure;
48
+ /** Lifecycle terminality/retryability is not, by itself, proof of an effect outcome. */
49
+ export declare function lifecyclePublicFailure(outcome: Extract<SessionLifecycleResult, {
50
+ ok: false;
51
+ }>): PublicCommandFailure;
52
+ /** Reads a 0600 JSON input through one descriptor, never through a replaceable pathname. */
53
+ export declare function readSecureJsonInputFile(filePath: string): Promise<string>;
39
54
  export declare function mergeProbedSearchRows(rows: readonly SdkSearchRowV1[], probedRows: readonly SdkSearchRowV1[]): readonly SdkSearchRowV1[];
40
55
  /** Resolves, lists, and probes only the exact rows selected by the Broker-scoped search. */
41
56
  export declare function runSdkSearch(args: Pick<SdkSessionCliArgs, "agentDir" | "repo" | "scope" | "limit" | "cursor">, createService?: (agentDir: string) => SessionLifecycleService, probe?: (agentDir: string, result: SdkSearchResultV1) => Promise<SdkSearchResultV1>): Promise<{
42
57
  result: SdkSearchResultV1;
43
- exitCode: 0 | 1;
58
+ exitCode: 0;
44
59
  }>;
45
60
  /** Renders a credential-free scope/status preamble and bounded search table. */
46
61
  export declare function renderSdkSearchTable(result: SdkSearchResultV1): string;
@@ -93,8 +108,10 @@ export declare function waitForTerminalStatus(router: SessionRouter, sessionId:
93
108
  status: string;
94
109
  detail: unknown;
95
110
  }>;
96
- export declare function scanRetainedTranscriptTail(reader: RetainedTranscriptTailReader): Promise<unknown[]>;
111
+ export declare function scanRetainedTranscriptTail(reader: RetainedTranscriptTailReader, options?: {
112
+ boundaryId?: string;
113
+ }): Promise<unknown[]>;
97
114
  export declare function runTail(repo: string, agentDir: string, sessionId: string, args: SdkSessionCliArgs): Promise<unknown>;
98
115
  /** Runs the broker-bound `gjc sdk session` command family without exposing endpoint credentials. */
99
- export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void): Promise<void>;
116
+ export declare function runSdkSessionCli(args: SdkSessionCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void, deps?: SdkSessionCliDependencies): Promise<void>;
100
117
  export {};
@@ -41,6 +41,8 @@ export interface SdkClientOptions {
41
41
  timeoutMs?: number;
42
42
  /** Absolute wall-clock deadline shared by connect, hello, retry, and request work. */
43
43
  deadline?: number;
44
+ /** Optional client capabilities sent in the protocol hello handshake. */
45
+ capabilities?: readonly string[];
44
46
  reconnectAttempts?: number;
45
47
  reconnectBackoffMs?: number;
46
48
  /**