@gajae-code/coding-agent 0.17.1 → 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 (375) hide show
  1. package/CHANGELOG.md +266 -0
  2. package/dist/types/async/job-manager.d.ts +7 -6
  3. package/dist/types/cli/daemon-cli.d.ts +3 -1
  4. package/dist/types/cli/github-release.d.ts +17 -0
  5. package/dist/types/cli/public-command-entry.d.ts +56 -0
  6. package/dist/types/cli/public-command-errors.d.ts +126 -0
  7. package/dist/types/cli/public-command-evidence.d.ts +99 -0
  8. package/dist/types/cli/public-command-help.d.ts +65 -0
  9. package/dist/types/cli/public-command-registry.d.ts +69 -0
  10. package/dist/types/cli/session-picker.d.ts +1 -1
  11. package/dist/types/cli/setup-cli.d.ts +1 -0
  12. package/dist/types/cli/skills-cli.d.ts +5 -0
  13. package/dist/types/cli.d.ts +3 -0
  14. package/dist/types/commands/daemon.d.ts +4 -50
  15. package/dist/types/commands/sdk.d.ts +20 -37
  16. package/dist/types/commands/setup.d.ts +3 -0
  17. package/dist/types/commands/skills.d.ts +9 -0
  18. package/dist/types/config/autorouting-tier-map.d.ts +24 -0
  19. package/dist/types/config/file-lock.d.ts +10 -1
  20. package/dist/types/config/model-profile-activation.d.ts +63 -4
  21. package/dist/types/config/model-registry.d.ts +20 -2
  22. package/dist/types/config/settings-schema.d.ts +11 -0
  23. package/dist/types/coordinator-mcp/question-state.d.ts +6 -1
  24. package/dist/types/coordinator-mcp/server.d.ts +3 -0
  25. package/dist/types/daemon/operator-contract.d.ts +5 -1
  26. package/dist/types/eval/js/worker-protocol.d.ts +2 -0
  27. package/dist/types/extensibility/extensions/types.d.ts +12 -0
  28. package/dist/types/extensibility/gjc-plugins/registry.d.ts +4 -0
  29. package/dist/types/extensibility/runtime-skill-discovery.d.ts +18 -0
  30. package/dist/types/extensibility/shared-events.d.ts +3 -1
  31. package/dist/types/gjc-runtime/session-state-lock.d.ts +61 -0
  32. package/dist/types/internal-urls/embedded-protocol.d.ts +9 -0
  33. package/dist/types/internal-urls/index.d.ts +1 -0
  34. package/dist/types/internal-urls/parse.d.ts +9 -1
  35. package/dist/types/main.d.ts +22 -0
  36. package/dist/types/modes/acp/acp-agent.d.ts +94 -1
  37. package/dist/types/modes/acp/startup-provenance.d.ts +16 -0
  38. package/dist/types/modes/components/custom-provider-wizard.d.ts +19 -1
  39. package/dist/types/modes/components/session-selector.d.ts +5 -2
  40. package/dist/types/modes/components/thinking-selector.d.ts +2 -1
  41. package/dist/types/modes/components/user-message-selector.d.ts +5 -2
  42. package/dist/types/modes/controllers/command-controller.d.ts +1 -1
  43. package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
  44. package/dist/types/modes/interactive-mode.d.ts +1 -1
  45. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +11 -1
  46. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +14 -1
  47. package/dist/types/modes/types.d.ts +2 -2
  48. package/dist/types/runtime/process-lifecycle.d.ts +2 -0
  49. package/dist/types/runtime-mcp/manager.d.ts +56 -0
  50. package/dist/types/runtime-mcp/pool.d.ts +17 -0
  51. package/dist/types/runtime-mcp/redaction.d.ts +20 -0
  52. package/dist/types/runtime-mcp/startup-policy.d.ts +6 -0
  53. package/dist/types/runtime-mcp/tool-bridge.d.ts +9 -0
  54. package/dist/types/runtime-mcp/transports/http.d.ts +11 -0
  55. package/dist/types/sdk/acp/adapter.d.ts +27 -0
  56. package/dist/types/sdk/acp/final-text.d.ts +8 -0
  57. package/dist/types/sdk/broker/broker.d.ts +13 -2
  58. package/dist/types/sdk/broker/ensure.d.ts +46 -1
  59. package/dist/types/sdk/broker/identity.d.ts +3 -1
  60. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +23 -3
  61. package/dist/types/sdk/broker/lifecycle.d.ts +15 -8
  62. package/dist/types/sdk/broker/runtime.d.ts +1 -1
  63. package/dist/types/sdk/broker/session-index.d.ts +22 -3
  64. package/dist/types/sdk/broker/spawn-authority.d.ts +4 -0
  65. package/dist/types/sdk/broker/stderr-drainer.d.ts +13 -0
  66. package/dist/types/sdk/bus/index.d.ts +19 -0
  67. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +3 -1
  68. package/dist/types/sdk/bus/telegram-daemon.d.ts +5 -0
  69. package/dist/types/sdk/cli/master-cli.d.ts +6 -10
  70. package/dist/types/sdk/cli/rows.d.ts +19 -1
  71. package/dist/types/sdk/cli/session-cli.d.ts +22 -5
  72. package/dist/types/sdk/client/client.d.ts +2 -0
  73. package/dist/types/sdk/guides/cli.d.ts +3 -4
  74. package/dist/types/sdk/guides/verify.d.ts +2 -0
  75. package/dist/types/sdk/host/host.d.ts +9 -0
  76. package/dist/types/sdk/host/session-runtime.d.ts +31 -0
  77. package/dist/types/sdk/host/types.d.ts +10 -0
  78. package/dist/types/sdk/index.d.ts +1 -0
  79. package/dist/types/sdk/prompt-deadline-flush.d.ts +83 -0
  80. package/dist/types/sdk/prompt-deadline-manager.d.ts +38 -1
  81. package/dist/types/sdk/prompt-failure.d.ts +30 -1
  82. package/dist/types/sdk/prompt-status.d.ts +8 -0
  83. package/dist/types/sdk/prompt-tool-boundary.d.ts +73 -0
  84. package/dist/types/sdk/router/replay-retention-gap-cache.d.ts +13 -0
  85. package/dist/types/sdk/router/session-router.d.ts +2 -0
  86. package/dist/types/sdk/startup-capability.d.ts +2 -0
  87. package/dist/types/sdk/transport/relay.d.ts +1 -0
  88. package/dist/types/sdk/transport/serve-cli.d.ts +73 -2
  89. package/dist/types/sdk/transport/stdio.d.ts +5 -1
  90. package/dist/types/session/agent-session.d.ts +168 -21
  91. package/dist/types/session/fallback-chain-controller.d.ts +6 -6
  92. package/dist/types/session/fold-coordinator.d.ts +17 -3
  93. package/dist/types/session/internal/managed-session-storage.d.ts +7 -1
  94. package/dist/types/session/session-manager.d.ts +64 -1
  95. package/dist/types/session/session-work-lease.d.ts +14 -0
  96. package/dist/types/setup/model-onboarding-guidance.d.ts +1 -1
  97. package/dist/types/setup/provider-onboarding.d.ts +81 -1
  98. package/dist/types/thinking.d.ts +3 -1
  99. package/dist/types/tools/bash.d.ts +37 -11
  100. package/dist/types/tools/job.d.ts +1 -1
  101. package/dist/types/tools/steer-fold.d.ts +31 -0
  102. package/dist/types/utils/git.d.ts +28 -2
  103. package/dist/types/utils/mupdf-embedded.d.ts +2 -0
  104. package/dist/types/utils/mupdf-wasm-embedded.d.ts +2 -0
  105. package/dist/types/utils/mupdf.d.ts +4 -0
  106. package/dist/types/utils/session-title-generation.d.ts +6 -0
  107. package/dist/types/utils/title-generator.d.ts +11 -2
  108. package/dist/types/web/scrapers/types.d.ts +3 -0
  109. package/package.json +18 -10
  110. package/scripts/build-binary.ts +9 -3
  111. package/scripts/compile-args.ts +0 -9
  112. package/scripts/embed-mupdf.ts +52 -0
  113. package/scripts/generate-sdk-operation-inventory.ts +31 -1
  114. package/scripts/vendor-markit.ts +196 -0
  115. package/src/async/job-manager.ts +60 -9
  116. package/src/cli/daemon-cli.ts +53 -18
  117. package/src/cli/github-release.ts +87 -5
  118. package/src/cli/mcp-cli.ts +38 -4
  119. package/src/cli/public-command-entry.ts +450 -0
  120. package/src/cli/public-command-errors.ts +581 -0
  121. package/src/cli/public-command-evidence.ts +717 -0
  122. package/src/cli/public-command-help.ts +360 -0
  123. package/src/cli/public-command-registry.ts +535 -0
  124. package/src/cli/session-picker.ts +2 -1
  125. package/src/cli/setup-cli.ts +9 -1
  126. package/src/cli/skills-cli.ts +46 -2
  127. package/src/cli.ts +61 -1
  128. package/src/commands/daemon.ts +65 -69
  129. package/src/commands/sdk.ts +232 -100
  130. package/src/commands/setup.ts +2 -0
  131. package/src/commands/skills.ts +11 -0
  132. package/src/config/autorouting-tier-map.ts +16 -0
  133. package/src/config/file-lock.ts +199 -68
  134. package/src/config/model-profile-activation.ts +406 -53
  135. package/src/config/model-registry.ts +204 -25
  136. package/src/config/settings-schema.ts +26 -2
  137. package/src/coordinator-mcp/policy.ts +10 -5
  138. package/src/coordinator-mcp/question-gate-codec.ts +17 -0
  139. package/src/coordinator-mcp/question-state.ts +175 -8
  140. package/src/coordinator-mcp/server.ts +528 -87
  141. package/src/coordinator-mcp/session-reaper.ts +6 -4
  142. package/src/crash/record-loader.ts +6 -2
  143. package/src/daemon/operator-contract.ts +26 -12
  144. package/src/debug/report-bundle.ts +114 -24
  145. package/src/defaults/gjc/skills/ultragoal/SKILL.md +1 -1
  146. package/src/eval/js/context-manager.ts +8 -8
  147. package/src/eval/js/worker-core.ts +9 -4
  148. package/src/eval/js/worker-protocol.ts +2 -0
  149. package/src/extensibility/extensions/runner.ts +52 -4
  150. package/src/extensibility/extensions/types.ts +10 -0
  151. package/src/extensibility/gjc-plugins/registry.ts +196 -37
  152. package/src/extensibility/runtime-skill-discovery.ts +61 -3
  153. package/src/extensibility/shared-events.ts +3 -1
  154. package/src/gjc-runtime/managed-owner-admission.ts +67 -50
  155. package/src/gjc-runtime/session-state-lock.ts +165 -24
  156. package/src/gjc-runtime/ultragoal-succession.ts +31 -3
  157. package/src/internal-urls/docs-index.generated.ts +21 -19
  158. package/src/internal-urls/embedded-protocol.ts +83 -0
  159. package/src/internal-urls/index.ts +1 -0
  160. package/src/internal-urls/parse.ts +21 -1
  161. package/src/internal-urls/router.ts +4 -2
  162. package/src/main.ts +123 -55
  163. package/src/modes/acp/acp-agent.ts +593 -47
  164. package/src/modes/acp/acp-event-mapper.ts +9 -0
  165. package/src/modes/acp/startup-provenance.ts +59 -0
  166. package/src/modes/components/custom-provider-wizard.ts +308 -7
  167. package/src/modes/components/model-selector.ts +31 -15
  168. package/src/modes/components/oauth-selector.ts +9 -0
  169. package/src/modes/components/session-selector.ts +47 -4
  170. package/src/modes/components/status-line/segments.ts +6 -1
  171. package/src/modes/components/thinking-selector.ts +7 -3
  172. package/src/modes/components/user-message-selector.ts +57 -15
  173. package/src/modes/controllers/command-controller.ts +58 -32
  174. package/src/modes/controllers/extension-ui-controller.ts +33 -7
  175. package/src/modes/controllers/input-controller.ts +4 -0
  176. package/src/modes/controllers/selector-controller.ts +177 -18
  177. package/src/modes/interactive-mode.ts +21 -7
  178. package/src/modes/runtime-init.ts +1 -0
  179. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +124 -7
  180. package/src/modes/shared/agent-wire/workflow-gate-types.ts +16 -2
  181. package/src/modes/types.ts +2 -2
  182. package/src/prompts/agent-fragments/browser-aside.md +1 -0
  183. package/src/prompts/system/title-system.md +1 -1
  184. package/src/prompts/tools/bash.md +1 -1
  185. package/src/prompts/tools/job.md +1 -1
  186. package/src/prompts/tools/read.md +2 -0
  187. package/src/runtime/network-prewarm-service.test.ts +36 -1
  188. package/src/runtime/network-prewarm-service.ts +28 -3
  189. package/src/runtime/process-lifecycle.ts +22 -11
  190. package/src/runtime-mcp/config.ts +16 -1
  191. package/src/runtime-mcp/manager.ts +689 -55
  192. package/src/runtime-mcp/pool.test.ts +31 -0
  193. package/src/runtime-mcp/pool.ts +304 -28
  194. package/src/runtime-mcp/redaction.ts +42 -0
  195. package/src/runtime-mcp/startup-policy.ts +7 -0
  196. package/src/runtime-mcp/tool-bridge.ts +71 -0
  197. package/src/runtime-mcp/transports/http.ts +108 -25
  198. package/src/sdk/acp/adapter.ts +90 -9
  199. package/src/sdk/acp/final-text.ts +19 -2
  200. package/src/sdk/broker/broker.ts +378 -52
  201. package/src/sdk/broker/ensure.ts +97 -19
  202. package/src/sdk/broker/identity.ts +9 -1
  203. package/src/sdk/broker/lifecycle-ledger.ts +95 -31
  204. package/src/sdk/broker/lifecycle.ts +690 -141
  205. package/src/sdk/broker/runtime.ts +1 -1
  206. package/src/sdk/broker/session-index.ts +97 -4
  207. package/src/sdk/broker/spawn-authority.ts +35 -7
  208. package/src/sdk/broker/stderr-drainer.ts +59 -0
  209. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  210. package/src/sdk/bus/chat-daemon-runtime.ts +1 -0
  211. package/src/sdk/bus/index.ts +721 -84
  212. package/src/sdk/bus/telegram-daemon-cli.ts +31 -2
  213. package/src/sdk/bus/telegram-daemon-contract.ts +3 -1
  214. package/src/sdk/bus/telegram-daemon.ts +10 -3
  215. package/src/sdk/cli/master-cli.ts +47 -36
  216. package/src/sdk/cli/rows.ts +30 -7
  217. package/src/sdk/cli/session-cli.ts +687 -184
  218. package/src/sdk/client/client.ts +18 -0
  219. package/src/sdk/guides/catalog.ts +2 -2
  220. package/src/sdk/guides/cli.ts +20 -62
  221. package/src/sdk/guides/verify.ts +14 -0
  222. package/src/sdk/host/host.ts +49 -5
  223. package/src/sdk/host/session-runtime.test.ts +636 -9
  224. package/src/sdk/host/session-runtime.ts +499 -118
  225. package/src/sdk/host/types.ts +12 -1
  226. package/src/sdk/host/websocket-transport.lifecycle.test.ts +84 -0
  227. package/src/sdk/host/websocket-transport.ts +40 -6
  228. package/src/sdk/index.ts +11 -0
  229. package/src/sdk/prompt-deadline-flush.ts +334 -0
  230. package/src/sdk/prompt-deadline-manager.ts +136 -4
  231. package/src/sdk/prompt-failure.ts +43 -1
  232. package/src/sdk/prompt-status.ts +8 -0
  233. package/src/sdk/prompt-tool-boundary.ts +121 -0
  234. package/src/sdk/protocol/operation-inventory.generated.json +106 -0
  235. package/src/sdk/router/replay-retention-gap-cache.ts +27 -0
  236. package/src/sdk/router/session-router.ts +31 -4
  237. package/src/sdk/session.ts +194 -16
  238. package/src/sdk/startup-capability.ts +1 -1
  239. package/src/sdk/transport/relay.ts +71 -6
  240. package/src/sdk/transport/serve-cli.ts +494 -49
  241. package/src/sdk/transport/socket.ts +12 -11
  242. package/src/sdk/transport/stdio.ts +7 -3
  243. package/src/session/agent-session.ts +2437 -400
  244. package/src/session/fallback-chain-controller.ts +6 -7
  245. package/src/session/fold-coordinator.ts +24 -5
  246. package/src/session/internal/managed-session-scope.ts +58 -18
  247. package/src/session/internal/managed-session-storage.ts +304 -11
  248. package/src/session/session-manager.ts +382 -44
  249. package/src/session/session-work-lease.ts +34 -0
  250. package/src/session-import/codex.ts +12 -3
  251. package/src/setup/model-onboarding-guidance.ts +1 -1
  252. package/src/setup/provider-onboarding.ts +397 -24
  253. package/src/slash-commands/builtin-registry.ts +258 -14
  254. package/src/task/index.ts +14 -2
  255. package/src/thinking.ts +21 -2
  256. package/src/tools/bash.ts +98 -78
  257. package/src/tools/fetch.ts +119 -20
  258. package/src/tools/job.ts +151 -25
  259. package/src/tools/output-meta.ts +15 -2
  260. package/src/tools/path-utils.ts +27 -3
  261. package/src/tools/read.ts +3 -3
  262. package/src/tools/steer-fold.ts +107 -0
  263. package/src/tools/tool-catalog.generated.ts +29 -2
  264. package/src/tools/tool-errors.ts +4 -0
  265. package/src/utils/git.ts +53 -3
  266. package/src/utils/markit.ts +55 -41
  267. package/src/utils/mupdf-assets.d.ts +4 -0
  268. package/src/utils/mupdf-embedded.ts +4 -0
  269. package/src/utils/mupdf-wasm-embedded.ts +3 -0
  270. package/src/utils/mupdf-wasm.ts +24 -2
  271. package/src/utils/mupdf.ts +129 -0
  272. package/src/utils/session-title-generation.ts +29 -0
  273. package/src/utils/title-generator.ts +46 -2
  274. package/src/web/scrapers/types.ts +24 -3
  275. package/vendor/markit-ai/LICENSE +21 -0
  276. package/vendor/markit-ai/MANIFEST.json +412 -0
  277. package/vendor/markit-ai/dist/commands/config.d.ts +4 -0
  278. package/vendor/markit-ai/dist/commands/config.js +139 -0
  279. package/vendor/markit-ai/dist/commands/convert.d.ts +6 -0
  280. package/vendor/markit-ai/dist/commands/convert.js +113 -0
  281. package/vendor/markit-ai/dist/commands/formats.d.ts +2 -0
  282. package/vendor/markit-ai/dist/commands/formats.js +92 -0
  283. package/vendor/markit-ai/dist/commands/init.d.ts +2 -0
  284. package/vendor/markit-ai/dist/commands/init.js +29 -0
  285. package/vendor/markit-ai/dist/commands/onboard.d.ts +2 -0
  286. package/vendor/markit-ai/dist/commands/onboard.js +61 -0
  287. package/vendor/markit-ai/dist/commands/plugin.d.ts +4 -0
  288. package/vendor/markit-ai/dist/commands/plugin.js +58 -0
  289. package/vendor/markit-ai/dist/config.d.ts +26 -0
  290. package/vendor/markit-ai/dist/config.js +42 -0
  291. package/vendor/markit-ai/dist/converters/audio.d.ts +7 -0
  292. package/vendor/markit-ai/dist/converters/audio.js +104 -0
  293. package/vendor/markit-ai/dist/converters/csv.d.ts +7 -0
  294. package/vendor/markit-ai/dist/converters/csv.js +83 -0
  295. package/vendor/markit-ai/dist/converters/docx.d.ts +6 -0
  296. package/vendor/markit-ai/dist/converters/docx.js +57 -0
  297. package/vendor/markit-ai/dist/converters/epub.d.ts +8 -0
  298. package/vendor/markit-ai/dist/converters/epub.js +128 -0
  299. package/vendor/markit-ai/dist/converters/github.d.ts +18 -0
  300. package/vendor/markit-ai/dist/converters/github.js +148 -0
  301. package/vendor/markit-ai/dist/converters/html.d.ts +6 -0
  302. package/vendor/markit-ai/dist/converters/html.js +30 -0
  303. package/vendor/markit-ai/dist/converters/image.d.ts +6 -0
  304. package/vendor/markit-ai/dist/converters/image.js +124 -0
  305. package/vendor/markit-ai/dist/converters/ipynb.d.ts +6 -0
  306. package/vendor/markit-ai/dist/converters/ipynb.js +75 -0
  307. package/vendor/markit-ai/dist/converters/iwork.d.ts +20 -0
  308. package/vendor/markit-ai/dist/converters/iwork.js +391 -0
  309. package/vendor/markit-ai/dist/converters/json.d.ts +6 -0
  310. package/vendor/markit-ai/dist/converters/json.js +21 -0
  311. package/vendor/markit-ai/dist/converters/pdf/columns.d.ts +35 -0
  312. package/vendor/markit-ai/dist/converters/pdf/columns.js +93 -0
  313. package/vendor/markit-ai/dist/converters/pdf/extract.d.ts +19 -0
  314. package/vendor/markit-ai/dist/converters/pdf/extract.js +514 -0
  315. package/vendor/markit-ai/dist/converters/pdf/grid.d.ts +25 -0
  316. package/vendor/markit-ai/dist/converters/pdf/grid.js +795 -0
  317. package/vendor/markit-ai/dist/converters/pdf/headers.d.ts +24 -0
  318. package/vendor/markit-ai/dist/converters/pdf/headers.js +108 -0
  319. package/vendor/markit-ai/dist/converters/pdf/index.d.ts +19 -0
  320. package/vendor/markit-ai/dist/converters/pdf/index.js +136 -0
  321. package/vendor/markit-ai/dist/converters/pdf/mupdf-loader.js +9 -0
  322. package/vendor/markit-ai/dist/converters/pdf/render.d.ts +24 -0
  323. package/vendor/markit-ai/dist/converters/pdf/render.js +513 -0
  324. package/vendor/markit-ai/dist/converters/pdf/types.d.ts +75 -0
  325. package/vendor/markit-ai/dist/converters/pdf/types.js +1 -0
  326. package/vendor/markit-ai/dist/converters/plain-text.d.ts +6 -0
  327. package/vendor/markit-ai/dist/converters/plain-text.js +87 -0
  328. package/vendor/markit-ai/dist/converters/pptx.d.ts +8 -0
  329. package/vendor/markit-ai/dist/converters/pptx.js +289 -0
  330. package/vendor/markit-ai/dist/converters/rss.d.ts +11 -0
  331. package/vendor/markit-ai/dist/converters/rss.js +138 -0
  332. package/vendor/markit-ai/dist/converters/wikipedia.d.ts +6 -0
  333. package/vendor/markit-ai/dist/converters/wikipedia.js +33 -0
  334. package/vendor/markit-ai/dist/converters/xlsx.d.ts +8 -0
  335. package/vendor/markit-ai/dist/converters/xlsx.js +147 -0
  336. package/vendor/markit-ai/dist/converters/xml.d.ts +6 -0
  337. package/vendor/markit-ai/dist/converters/xml.js +18 -0
  338. package/vendor/markit-ai/dist/converters/yaml.d.ts +6 -0
  339. package/vendor/markit-ai/dist/converters/yaml.js +17 -0
  340. package/vendor/markit-ai/dist/converters/zip.d.ts +8 -0
  341. package/vendor/markit-ai/dist/converters/zip.js +57 -0
  342. package/vendor/markit-ai/dist/index.d.ts +30 -0
  343. package/vendor/markit-ai/dist/index.js +26 -0
  344. package/vendor/markit-ai/dist/main.d.ts +2 -0
  345. package/vendor/markit-ai/dist/main.js +191 -0
  346. package/vendor/markit-ai/dist/markit.d.ts +45 -0
  347. package/vendor/markit-ai/dist/markit.js +267 -0
  348. package/vendor/markit-ai/dist/plugins/api.d.ts +7 -0
  349. package/vendor/markit-ai/dist/plugins/api.js +42 -0
  350. package/vendor/markit-ai/dist/plugins/index.d.ts +4 -0
  351. package/vendor/markit-ai/dist/plugins/index.js +3 -0
  352. package/vendor/markit-ai/dist/plugins/installer.d.ts +25 -0
  353. package/vendor/markit-ai/dist/plugins/installer.js +176 -0
  354. package/vendor/markit-ai/dist/plugins/loader.d.ts +6 -0
  355. package/vendor/markit-ai/dist/plugins/loader.js +61 -0
  356. package/vendor/markit-ai/dist/plugins/types.d.ts +25 -0
  357. package/vendor/markit-ai/dist/plugins/types.js +1 -0
  358. package/vendor/markit-ai/dist/providers/anthropic.d.ts +2 -0
  359. package/vendor/markit-ai/dist/providers/anthropic.js +47 -0
  360. package/vendor/markit-ai/dist/providers/index.d.ts +21 -0
  361. package/vendor/markit-ai/dist/providers/index.js +56 -0
  362. package/vendor/markit-ai/dist/providers/openai.d.ts +2 -0
  363. package/vendor/markit-ai/dist/providers/openai.js +76 -0
  364. package/vendor/markit-ai/dist/providers/types.d.ts +26 -0
  365. package/vendor/markit-ai/dist/providers/types.js +1 -0
  366. package/vendor/markit-ai/dist/types.d.ts +36 -0
  367. package/vendor/markit-ai/dist/types.js +1 -0
  368. package/vendor/markit-ai/dist/utils/exit-codes.d.ts +4 -0
  369. package/vendor/markit-ai/dist/utils/exit-codes.js +4 -0
  370. package/vendor/markit-ai/dist/utils/output.d.ts +22 -0
  371. package/vendor/markit-ai/dist/utils/output.js +31 -0
  372. package/vendor/markit-ai/dist/utils/turndown.d.ts +8 -0
  373. package/vendor/markit-ai/dist/utils/turndown.js +70 -0
  374. package/vendor/markit-ai/package.json +74 -0
  375. package/vendor/markit-ai.patch +49 -0
@@ -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
  /**
@@ -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";
@@ -21,7 +40,25 @@ export declare class PromptDeadlineManager {
21
40
  getLeaseMs: () => number;
22
41
  getMaxMs: () => number;
23
42
  now?: () => number;
24
- onExpired?: (correlation: InvocationCorrelation) => void;
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