@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
@@ -32,8 +32,7 @@ export interface SdkGuidesCliArgs {
32
32
  }
33
33
  /**
34
34
  * Runs the `gjc sdk guides` command family. Exported for command routing from
35
- * `src/commands/sdk.ts` and for direct service use; the injected `write` /
36
- * `setExitCode` hooks keep the surface testable without touching stdout or
37
- * the process exit code.
35
+ * `src/commands/sdk.ts` and for direct service use. Only successful results are
36
+ * written here; typed failures belong to the outer public family writer.
38
37
  */
39
- export declare function runSdkGuidesCli(args: SdkGuidesCliArgs, writeOutput?: (value: unknown) => void, setExitCode?: (exitCode: 1 | 2) => void): Promise<void>;
38
+ export declare function runSdkGuidesCli(args: SdkGuidesCliArgs, writeOutput?: (value: unknown) => void): Promise<void>;
@@ -12,6 +12,8 @@ export interface GuidePinnedKey {
12
12
  /** DER-encoded SPKI public key, hex. */
13
13
  spkiDerHex: string;
14
14
  source: "bundled";
15
+ /** Optional retirement bound for old bundled signers. */
16
+ validUntil?: number;
15
17
  }
16
18
  export declare const GUIDE_PINNED_KEYS: readonly GuidePinnedKey[];
17
19
  export declare const GUIDE_PINNED_KEY_IDS: readonly string[];
@@ -81,7 +81,13 @@ export interface SessionSdkHostOptions extends HostEndpointAdapters {
81
81
  * must see the same capability-gated event kinds on both legs, or live and
82
82
  * replay delivery diverge for the same subscriber. */
83
83
  export declare const TOOL_ACTIVITY_CAPABILITY = "tool_activity_v2";
84
+ /** Capability for non-replayable streamed turn content. */
85
+ export declare const TURN_STREAM_CAPABILITY = "turn_stream";
86
+ /** Capability used by notification adapters that observe a host without owning its work. */
87
+ export declare const SESSION_HOST_OBSERVER_CAPABILITY = "session_host_observer_v1";
84
88
  export declare const CAP_GATED_FRAME_KINDS: ReadonlySet<string>;
89
+ /** Keep live delivery and replay on one capability gate. */
90
+ export declare function canDeliverSdkEvent(kind: string, capabilities: ReadonlySet<string> | undefined): boolean;
85
91
  /** SDK hosting is independent of notification configuration. Only root sessions host an endpoint. */
86
92
  export declare function shouldHostSdk(_settings: unknown, isTopLevel: boolean, env?: NodeJS.ProcessEnv): boolean;
87
93
  /** Adapter-based session host; bus wiring owns NotificationServer creation and transport framing. */
@@ -119,6 +125,9 @@ export declare class SessionSdkHost {
119
125
  activate(expectedGeneration?: number): Promise<SessionActivationOutcome>;
120
126
  stop(options?: {
121
127
  allowLockContention?: boolean;
128
+ unregisterReason?: "detached_idle";
122
129
  }): Promise<"stopped" | "already">;
123
130
  registerWithBroker(writer: BrokerIndexWriter): Promise<void>;
131
+ /** Persist the host's observable activity for broker/session-list consumers. */
132
+ reportActivity(state: "active" | "idle", at?: number): Promise<void>;
124
133
  }
@@ -1,6 +1,7 @@
1
1
  import { type Settings } from "../../config/settings";
2
2
  import type { ExtensionAPI, ExtensionContext } from "../../extensibility/extensions";
3
3
  import type { AgentEndEvent } from "../../extensibility/shared-events";
4
+ import { ensureBroker } from "../broker/ensure";
4
5
  import { type MasterRoleAttestationV2, SessionIndex, type SessionLocatorV2 } from "../broker/session-index";
5
6
  import type { SdkPromptTerminalOutcome } from "../prompt-status";
6
7
  import { type ReceiptState } from "../receipt-state";
@@ -25,6 +26,13 @@ export declare function verifyMasterCapabilityFrame(input: {
25
26
  nonce: string;
26
27
  attestationEpoch: string;
27
28
  };
29
+ /**
30
+ * Keep a live session's broker discovery recoverable well inside the session
31
+ * index's two-minute heartbeat freshness window. `ensureBroker` has its own
32
+ * bounded startup/recovery budget; the in-flight guard below prevents those
33
+ * budgets from stacking when one attempt outlives this cadence.
34
+ */
35
+ export declare const SESSION_BROKER_RECOVERY_INTERVAL_MS = 30000;
28
36
  /**
29
37
  * Normalize an agent-loop stop reason into the published terminal outcome.
30
38
  *
@@ -158,6 +166,17 @@ export interface SdkOnlyTerminalAbortSeams {
158
166
  status: string;
159
167
  terminalScope?: unknown;
160
168
  }>;
169
+ /**
170
+ * Live, SYNCHRONOUS view of the dispatched tool calls the run resource
171
+ * ledger holds for an execution handle (#5637). Strictly read-only: it
172
+ * never claims, reserves, seals or quarantines ledger state. Declared here
173
+ * so both hosts expose ONE seam contract — the bus route consumes it for its
174
+ * deadline tool-boundary wait, and this route threads it so a future boundary
175
+ * wait or deadline abort reads the ledger rather than silently falling back
176
+ * to the event-derived set. Optional so an older host that does not thread it
177
+ * degrades to that fallback instead of failing to construct.
178
+ */
179
+ pendingToolExecutions?: (handle: string) => readonly string[];
161
180
  /** Test override for the maximum durable terminal reservation rows. */
162
181
  maxDurableTerminalReservationsForTests?: number;
163
182
  }
@@ -177,6 +196,8 @@ export declare class SessionSdkSessionRuntime {
177
196
  get started(): boolean;
178
197
  get generation(): number;
179
198
  getProviderDefinitions(capability: string): unknown | undefined;
199
+ /** Persist the host's current observable activity for broker/session-list consumers. */
200
+ reportActivity(state: "active" | "idle", at?: number): Promise<void>;
180
201
  emitEvent(frame: SdkFrame): void;
181
202
  /**
182
203
  * Deliver a frame to specific connections without recording it.
@@ -190,6 +211,10 @@ export declare class SessionSdkSessionRuntime {
190
211
  * disturb the turn producing the content.
191
212
  */
192
213
  sendFrameTo(connectionId: string, frame: SdkFrame): void;
214
+ /** Snapshot connections that negotiated every capability in the requirement set. */
215
+ connectionIdsWithCapabilities(required: readonly string[]): string[];
216
+ /** Deliver a non-replayable frame to connections with an explicit capability intersection. */
217
+ sendFrameToCapabilities(required: readonly string[], frame: SdkFrame, excluding?: ReadonlySet<string>): void;
193
218
  publish(frame: SdkFrame): void;
194
219
  startHost(): Promise<"started" | "already">;
195
220
  startTransport(): Promise<{
@@ -200,6 +225,7 @@ export declare class SessionSdkSessionRuntime {
200
225
  }>;
201
226
  stop(options?: {
202
227
  allowLockContention?: boolean;
228
+ unregisterReason?: "detached_idle";
203
229
  }): Promise<void>;
204
230
  registerWithBroker(writer: BrokerIndexWriter): Promise<void>;
205
231
  }
@@ -234,6 +260,11 @@ export interface CreateSdkSessionRuntimeOptions {
234
260
  terminalAbortSeams?: SdkOnlyTerminalAbortSeams;
235
261
  /** Callback when a frame is admitted to the runtime (test harness). */
236
262
  onFrameAdmitted?: () => void;
263
+ /** Timer seams for deterministic broker-recovery lifecycle tests. */
264
+ setIntervalImpl?: typeof setInterval;
265
+ clearIntervalImpl?: typeof clearInterval;
266
+ /** Test-only broker ensure seam; production always uses the owner-fenced helper. */
267
+ ensureBrokerImpl?: typeof ensureBroker;
237
268
  /** Test-only observation of a genuinely timed-out lifecycle drain. */
238
269
  onLifecycleDrainTimeoutForTests?: () => void;
239
270
  /** Test-only observation of bounded failure-diagnostic deduplication state. */
@@ -24,9 +24,19 @@ export interface BrokerIndexWriter {
24
24
  stateRoot: string;
25
25
  endpointGeneration: number;
26
26
  }): void | Promise<void>;
27
+ heartbeat?(input: {
28
+ sessionId: string;
29
+ stateRoot: string;
30
+ endpointGeneration: number;
31
+ activity: {
32
+ state: "active" | "idle";
33
+ at: number;
34
+ };
35
+ }): void | Promise<void>;
27
36
  unregister?(input: {
28
37
  sessionId: string;
29
38
  stateRoot: string;
30
39
  endpointGeneration: number;
40
+ reason?: "detached_idle";
31
41
  }): void | Promise<void>;
32
42
  }
@@ -1,4 +1,5 @@
1
1
  export { MODEL_PROFILE_DISCOVERY_QUERY, MODEL_PROFILE_ERROR_DETAIL_MAX_BYTES, type ModelProfileCatalogItem, type ModelProfileErrorCode, type ModelProfileErrorDetails, ModelProfileRegistryError, type ModelProfileRegistryErrorDetails, type UnknownModelProfileDetails, UnknownModelProfileError, } from "../config/model-profile-contract";
2
+ export type { QueuedInputAdmission, QueuedInputDelivery, QueuedInputExecution, QueuedInputQueuePolicy, QueuedInputRemovalReason, QueuedInputSubmission, QueuedInputTerminal, SendUserMessageOptions, TrackedSendUserMessageOptions, } from "../session/agent-session";
2
3
  export * as bus from "./bus";
3
4
  export * as host from "./host";
4
5
  export * as lifecycle from "./lifecycle";
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Worktree durability for a prompt retired by its deadline (#5583).
3
+ *
4
+ * A raised `sdk.promptDeadlineMs` makes the crash rarer, never impossible: the
5
+ * hard `sdk.promptMaxRuntimeMs` cap still fires on a long run, and the session
6
+ * is then torn down with whatever the agent already edited still uncommitted.
7
+ * Field reports lost ~25 minutes of finished work across 37 dirty files that
8
+ * way. Persist that work as a WIP commit in the agent's own worktree before
9
+ * teardown so the next run resumes from a commit instead of re-reasoning.
10
+ *
11
+ * Strictly best effort AND strictly bounded. Every failure — including an abort —
12
+ * is logged and swallowed: the prompt still fails with `prompt_deadline_exceeded`
13
+ * and teardown still happens, because the deadline outcome must never depend on
14
+ * git. Every git call that accepts a signal gets one, so a blocking lock or a
15
+ * hanging plumbing command is killed rather than waited on.
16
+ *
17
+ * ── Isolated index, plumbing commit, compare-and-swap ref move (#5623 round 4)
18
+ *
19
+ * The autosave never opens the user's real `.git/index` for writing and never
20
+ * runs a repository hook:
21
+ *
22
+ * 1. everything is staged into a throwaway index inside the worktree's own git
23
+ * dir (`GIT_INDEX_FILE`), seeded from the HEAD captured before staging;
24
+ * 2. the commit is built with plumbing — `write-tree` then `commit-tree` — so
25
+ * `pre-commit`/`commit-msg` cannot execute during teardown;
26
+ * 3. the ref moves with a compare-and-swap against that captured HEAD, so the
27
+ * one mutation that can outlive teardown is conditional: an abandoned flush
28
+ * that wakes up late finds HEAD moved and does nothing. `withRepoLock`
29
+ * awaits its predecessor BEFORE honouring the signal, so this really does
30
+ * happen — the abort alone cannot prevent it;
31
+ * 4. the real index is adopted only after that swap succeeds, so a successful
32
+ * autosave leaves `git status` clean instead of a phantom reverse diff.
33
+ *
34
+ * Every failing and aborted path therefore just unlinks the temp index. There is
35
+ * no rollback left to get wrong, and index-only state the user set — intent-to-add,
36
+ * skip-worktree/assume-unchanged, sparse-index, index extensions — survives byte
37
+ * for byte because the file was never written.
38
+ *
39
+ * ── Ownership
40
+ *
41
+ * Staging the whole dirty worktree (`git add -A`, untracked files included) is
42
+ * the point: the work being saved is whatever the agent touched, and narrowing
43
+ * it would strand exactly the files this exists for. What makes that safe is
44
+ * WHERE it runs. `sdk.flushWorktreeOnDeadline` still defaults to on, but the
45
+ * implicit default applies only in a LINKED worktree (`gitDir !== commonDir`) —
46
+ * what agent/paseo sessions run in, and the #5583 field report. In the user's
47
+ * primary checkout an autosave needs an explicit opt-in.
48
+ */
49
+ export interface PromptDeadlineFlushResult {
50
+ /** Branch the WIP commit landed on, or `undefined` on a detached HEAD. */
51
+ branch?: string;
52
+ /** Abbreviated SHA of the WIP commit. */
53
+ commit: string;
54
+ /** Worktree root the commit was made in. */
55
+ worktreeRoot: string;
56
+ }
57
+ export interface PromptDeadlineFlushOptions {
58
+ /**
59
+ * Whether the caller resolved `sdk.flushWorktreeOnDeadline` to `true` from a
60
+ * value the user actually wrote, rather than from the schema default. Only an
61
+ * explicit opt-in may autosave outside a linked worktree.
62
+ */
63
+ readonly explicitOptIn?: boolean;
64
+ /**
65
+ * Whether the deadline attempt still owns the prompt. The callback is checked
66
+ * immediately before the ref move and again before the real index is adopted,
67
+ * so progress that renews the lease can abandon the prepared WIP safely.
68
+ */
69
+ readonly isCurrent?: () => boolean;
70
+ readonly signal?: AbortSignal;
71
+ }
72
+ /**
73
+ * Commit any uncommitted work in the worktree owning `cwd`.
74
+ *
75
+ * Returns `undefined` — without moving any ref — when `cwd` is not inside a git
76
+ * worktree, when the tree is already clean, when the session does not own the
77
+ * checkout, or when git fails or is aborted. Only the session's own worktree is
78
+ * touched; nothing is ever pushed.
79
+ *
80
+ * The abort signal is composed with an internal `DEADLINE_FLUSH_TIMEOUT_MS`
81
+ * bound, so a caller that passes nothing still cannot hang here.
82
+ */
83
+ export declare function flushWorktreeOnPromptDeadline(cwd: string, options?: AbortSignal | PromptDeadlineFlushOptions): Promise<PromptDeadlineFlushResult | undefined>;
@@ -2,6 +2,25 @@ import type { KindAwareReconciliation } from "./bus/kind-aware-reconciliation";
2
2
  import type { InvocationCorrelation, InvocationReconciliation } from "./host/session-runtime";
3
3
  import type { SdkPromptTerminalOutcome } from "./prompt-status";
4
4
  import type { TurnResultContent } from "./turn-result";
5
+ /**
6
+ * Hard real-time bound on the best-effort durability hook, shared with
7
+ * `prompt-deadline-flush` so the manager's race and the flush's own abort
8
+ * signal cannot drift apart.
9
+ */
10
+ export declare const DEADLINE_FLUSH_TIMEOUT_MS = 10000;
11
+ /**
12
+ * Run a best-effort durability flush under a hard real-time bound that ALWAYS
13
+ * settles, and never let its result reach the caller.
14
+ *
15
+ * Shared by both expiry paths — this manager and the notification bus's own
16
+ * terminalization (#5583) — so there is one bound, one abort, and one warning,
17
+ * with no drift between them. A rejection is swallowed; a `run` that never
18
+ * settles is abandoned after `timeoutMs` with its signal aborted so any git
19
+ * subprocess dies. The signal alone is not sufficient: `git.withRepoLock`
20
+ * awaits its predecessor before honouring it, so a hung predecessor in the
21
+ * per-repo write chain is cut only by this outer race.
22
+ */
23
+ export declare function runBoundedDeadlineFlush(run: (signal: AbortSignal) => unknown, timeoutMs?: number): Promise<void>;
5
24
  type DeadlineReconciliation = InvocationReconciliation | KindAwareReconciliation;
6
25
  export type PromptDeadlineOutcome = Extract<SdkPromptTerminalOutcome, {
7
26
  kind: "failed";
@@ -22,6 +41,24 @@ export declare class PromptDeadlineManager {
22
41
  getMaxMs: () => number;
23
42
  now?: () => number;
24
43
  onExpired?: (correlation: InvocationCorrelation, outcome?: PromptDeadlineOutcome) => void;
44
+ /**
45
+ * Best-effort durability hook for the single path that genuinely retires a
46
+ * prompt as `prompt_deadline_exceeded` (#5583). Awaited after the durable
47
+ * pending claim but BEFORE the durable terminal, so a crash in that window
48
+ * leaves the record pending and recovery retries the prompt; a
49
+ * rejection is swallowed and never changes the deadline outcome. Not called
50
+ * when a real terminal transition or a real failure won the race, nor when
51
+ * renewed progress supersedes this expiry instance. The hook receives an
52
+ * abort signal that fires when it outruns `deadlineFlushTimeoutMs`, plus a
53
+ * generation fence for irreversible worktree adoption.
54
+ */
55
+ onDeadlineExceeded?: (correlation: InvocationCorrelation, signal: AbortSignal, isCurrent?: () => boolean) => void | Promise<void>;
56
+ /**
57
+ * Hard bound on `onDeadlineExceeded`. Measured with a real timer, not
58
+ * `now`, because it guards real subprocesses — which is also why it is a
59
+ * constructor option: a fake clock cannot shorten it for tests.
60
+ */
61
+ deadlineFlushTimeoutMs?: number;
25
62
  });
26
63
  onAccepted(correlation: InvocationCorrelation): void;
27
64
  /** Re-arm a durable uncertainty-recovery record after process startup without
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Bounded wait for an in-flight dispatched tool call to reach its boundary
3
+ * before an expired prompt deadline force-terminates the run (#5637).
4
+ *
5
+ * Terminal fencing aborts the run's cancellation domain FIRST and only proves
6
+ * settlement afterwards (`RunResourceLedger.waitForSettlement` resolves once the
7
+ * run is sealed and its tracked `kind: "tool"` resources have settled), so a
8
+ * tool that was mid-write when the deadline expired observes the aborted signal
9
+ * DURING its write and leaves a torn artifact behind. Waiting for that call's
10
+ * own `tool_execution_end` — under a short, finite grace — turns the kill into a
11
+ * boundary abort. When the grace is exhausted the run is force-terminated
12
+ * exactly as before, and the fact that a tool was still executing is returned as
13
+ * structured evidence rather than dropped.
14
+ *
15
+ * Deliberately dependency-light and clock-injectable: the contended bus module
16
+ * takes only a call, and the behaviour is testable without a live transport.
17
+ */
18
+ /**
19
+ * Hard bound on how long deadline expiry will wait for an in-flight tool call to
20
+ * reach its boundary before force-terminating. This guards a real subprocess, so
21
+ * it is a real timer rather than the lease clock — and a parameter rather than a
22
+ * bare module constant, so a test may shorten it explicitly instead of a fake
23
+ * clock silently shortening it for production code too.
24
+ */
25
+ export declare const TOOL_CALL_BOUNDARY_GRACE_MS = 5000;
26
+ /**
27
+ * Re-check interval for the pending set while the grace runs.
28
+ *
29
+ * The authoritative source of "is a tool running?" is the run resource ledger,
30
+ * a SYNCHRONOUS snapshot with no completion signal of its own, so the wait has
31
+ * to look again rather than being told. `whenIdle` only wakes the check early
32
+ * when the event-derived view happens to drain first. Bounded by the grace, so
33
+ * this costs at most `graceMs / pollMs` array reads on the rare expiry-with-a-
34
+ * tool-running path and nothing at all on the idle path.
35
+ */
36
+ export declare const TOOL_CALL_BOUNDARY_POLL_MS = 25;
37
+ export type ToolBoundaryOutcome = "idle" | "settled" | "forced";
38
+ export interface ToolBoundaryWaitResult {
39
+ outcome: ToolBoundaryOutcome;
40
+ waitedMs: number;
41
+ /**
42
+ * Non-empty ONLY for "forced": the dispatched tool calls still running when
43
+ * the grace expired. Ids only — never tool arguments, output or paths.
44
+ */
45
+ pendingToolCallIds: string[];
46
+ }
47
+ /**
48
+ * Shared result for the common case of no dispatched tool running at expiry.
49
+ * Frozen because it is handed to every idle caller: the deadline path must stay
50
+ * byte-identical to its pre-#5637 behaviour, which includes allocating nothing
51
+ * and arming no timer.
52
+ */
53
+ export declare const IDLE_TOOL_BOUNDARY_RESULT: ToolBoundaryWaitResult;
54
+ /**
55
+ * Wait for the pending dispatched tool calls to drain, bounded by `graceMs`.
56
+ *
57
+ * Never composed with an abort signal: at the only call site nothing has been
58
+ * aborted yet, and a signal that was already aborted would make this wait
59
+ * unreachable — which is precisely the mid-tool kill being fixed.
60
+ */
61
+ export declare function waitForToolCallBoundary(input: {
62
+ pending: () => readonly string[];
63
+ /**
64
+ * Resolves when the event-derived view of the pending set drains. A wake-up
65
+ * HINT only: `pending()` is re-read before the wait is allowed to settle,
66
+ * because the authoritative source may still hold a call this signal knows
67
+ * nothing about. Expected never to reject.
68
+ */
69
+ whenIdle: () => Promise<void>;
70
+ graceMs?: number;
71
+ pollMs?: number;
72
+ now?: () => number;
73
+ }): Promise<ToolBoundaryWaitResult>;
@@ -177,6 +177,8 @@ export interface SessionRouterOptions {
177
177
  agentDir: string;
178
178
  /** Limits attachment to exact ids selected by a Broker-scoped operation. */
179
179
  sessionIds?: readonly string[];
180
+ /** Marks default SDK clients as notification-only observers; demanding by default. */
181
+ observer?: boolean;
180
182
  deps?: SessionRouterDeps;
181
183
  /** Runtime-specific identity validation; Router supplies a conservative fallback. */
182
184
  correlateFrame?: SessionRouterFrameCorrelator;
@@ -44,6 +44,8 @@ export declare class SdkStartupRollbackTracker {
44
44
  export declare function sanitizeSdkStartupMessage(value: unknown, knownSecrets?: Iterable<unknown>): string;
45
45
  /** Convert every lifecycle bootstrap outcome to the public, bounded failure shape. */
46
46
  export declare function normalizeSdkStartupFailure(phase: SdkStartupPhase, reason: SdkStartupReason, error?: unknown, knownSecrets?: Iterable<unknown>): SdkStartupFailure;
47
+ /** Collect process-scoped credentials without exposing a raw-secret API. */
48
+ export declare function lifecycleKnownSecrets(): string[];
47
49
  /** Session-owned, exactly-once lifecycle bootstrap completion. */
48
50
  export declare class SdkStartupCapability {
49
51
  #private;
@@ -2,6 +2,7 @@ import type { Readable, Writable } from "node:stream";
2
2
  export declare const REQUEST_FRAME_BYTES: number;
3
3
  export declare const DEFAULT_PENDING_CEILING_BYTES: number;
4
4
  export declare const MIN_PENDING_CEILING_BYTES: number;
5
+ export declare const DEFAULT_UPSTREAM_HELLO_TIMEOUT_MS = 10000;
5
6
  export type RelayDirection = "downstream->ws" | "ws->downstream";
6
7
  export type TransportError = {
7
8
  type: "transport_error";
@@ -1,10 +1,13 @@
1
+ import { PublicCommandFailure } from "../../cli/public-command-errors";
1
2
  import { SdkClient } from "../client";
3
+ import type { ServeHandle } from "./index";
4
+ import { startSocketServe, startStdioServe } from "./index";
2
5
  /**
3
6
  * A `gjc sdk serve` operational failure with a stable machine-readable code and a
4
7
  * documented exit code, mirroring `SdkSessionCliError`. Usage errors keep their own
5
- * `CliParseError` path; this type covers only failures an embedder must branch on.
8
+ * public failure envelope; this type covers only failures an embedder must branch on.
6
9
  */
7
- export declare class SdkServeError extends Error {
10
+ export declare class SdkServeError extends PublicCommandFailure {
8
11
  readonly code: string;
9
12
  readonly exitCode: 1;
10
13
  readonly details?: unknown;
@@ -28,20 +31,61 @@ export declare class SdkServeError extends Error {
28
31
  export declare function resolveServeOutcome(primary: Error | undefined, cleanup: Error | undefined): Error | undefined;
29
32
  /** Resolves the pending ceiling with flag > env > default precedence; exported for tests. */
30
33
  export declare function resolveServePendingCeiling(flagValue: string | undefined, envValue: string | undefined): number;
34
+ type BrokerTranscriptIdentity = {
35
+ dev: string;
36
+ ino: string;
37
+ size: number;
38
+ mtimeMs: number;
39
+ mtimeNs: string;
40
+ sha256: string;
41
+ };
42
+ type BrokerSavedSession = {
43
+ id: string;
44
+ path: string;
45
+ identity: BrokerTranscriptIdentity;
46
+ };
47
+ type BrokerSessionLocator = {
48
+ cwd: string;
49
+ worktreeRoot: string | null;
50
+ stateRoot: string;
51
+ };
31
52
  type BrokerSessionRow = {
32
53
  sessionId: string;
33
54
  live: boolean;
34
55
  ambiguous: boolean;
56
+ terminal?: boolean;
57
+ hostUnregisteredReason?: "process_exited" | "detached_idle";
58
+ terminalUncertain?: boolean;
59
+ locator?: BrokerSessionLocator;
60
+ savedSession?: BrokerSavedSession;
35
61
  };
36
62
  /** Exhausts strict broker `session.list` pages into one full session snapshot. */
37
- export declare function listBrokerSessions(broker: SdkClient, explicitSessionId?: string): Promise<BrokerSessionRow[]>;
63
+ export declare function listBrokerSessions(broker: Pick<SdkClient, "global">, explicitSessionId?: string, cwd?: string): Promise<BrokerSessionRow[]>;
64
+ /** Resolves an explicit or automatic serve target, reattaching one stale explicit session at most once. */
65
+ export declare function resolveServeSession(broker: SdkClient, explicitSessionId?: string): Promise<string>;
38
66
  /** Selects the session to serve through broker `session.list` truth (C10); exported for tests. */
39
67
  export declare function selectBrokerSession(sessions: BrokerSessionRow[], explicitSessionId: string | undefined): string;
68
+ /** Bounded dependency seam for preflight tests; production keeps the same transport factories. */
69
+ export interface SdkServeDependencies {
70
+ readDiscovery: (agentDir: string) => Promise<{
71
+ url: string;
72
+ token: string;
73
+ } | null>;
74
+ connect: (url: string, token: string) => Promise<Pick<SdkClient, "global" | "close">>;
75
+ startStdio: typeof startStdioServe;
76
+ startSocket: typeof startSocketServe;
77
+ }
40
78
  /**
41
79
  * Attaches a stdio or Unix-socket relay to one live SDK session endpoint.
42
80
  * Session targeting is broker-bound (C10): `session.list` resolves the session
43
81
  * and `session.get_endpoint` mints the exact credential — never a direct
44
82
  * endpoint-file read. A missing or unreachable broker fails closed.
45
83
  */
46
- export declare function runSdkServe(argv: string[]): Promise<void>;
84
+ export declare function runSdkServe(argv: string[], dependencies?: SdkServeDependencies): Promise<void>;
85
+ /**
86
+ * Acquiring a ServeHandle transfers output/termination ownership to transport.
87
+ * This boundary never rejects into the ordinary public command writer, even
88
+ * when no frame has been written. Raw relay framing remains transport-owned.
89
+ */
90
+ export declare function ownSdkServeTransport(handle: ServeHandle, closeBroker: () => Promise<void>): Promise<void>;
47
91
  export {};
@@ -1,3 +1,7 @@
1
+ import type { Readable, Writable } from "node:stream";
1
2
  import type { ServeHandle, ServeOptions } from "./index";
2
3
  /** Serves one parent-owned JSONL connection over the process standard streams. */
3
- export declare function startStdioServe(options: ServeOptions): Promise<ServeHandle>;
4
+ export declare function startStdioServe(options: ServeOptions, streams?: {
5
+ readonly input?: Readable;
6
+ readonly output?: Writable;
7
+ }): Promise<ServeHandle>;