@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
@@ -11,6 +11,7 @@ import {
11
11
  isTelegramComplete,
12
12
  type NotificationSettingsReader,
13
13
  parseNotificationSettingsSnapshot,
14
+ tokenFingerprint,
14
15
  } from "./config";
15
16
  import { daemonPaths, HEARTBEAT_TTL_MS } from "./daemon-paths";
16
17
  import { doctorDaemonIdentityMatches, doctorDaemonOccupancySettled } from "./doctor-daemon-restart";
@@ -317,6 +318,8 @@ export async function runDaemonInternal(argv: string[], deps: RunDaemonInternalD
317
318
  const settings = await resolveDaemonSettings(resolvedAgentDir, deps);
318
319
  const cfg = getNotificationConfig(settings);
319
320
  if (!isProviderEffectivelyEnabled(cfg, "telegram") || !isTelegramComplete(cfg)) return;
321
+ const initialTokenFingerprint = tokenFingerprint(cfg.botToken);
322
+ const initialChatId = cfg.chatId;
320
323
  // Startup hygiene: reclaim inert quarantine/staging debris left by crashed
321
324
  // writers so the notifications dir cannot grow unboundedly and slow every
322
325
  // later endpoint scan. Never awaited by startup; a rejection is logged and
@@ -425,6 +428,7 @@ export async function runDaemonInternal(argv: string[], deps: RunDaemonInternalD
425
428
  toolActivity: cfg.toolActivity,
426
429
  topics: cfg.topics,
427
430
  btw: cfg.btw,
431
+ keepAliveWithoutAttachments: true,
428
432
  pid: deps.processPid ?? process.pid,
429
433
  control: createDaemonControlHooks(settings as Settings),
430
434
  topicRegistryAuthority,
@@ -525,6 +529,31 @@ export async function runDaemonInternal(argv: string[], deps: RunDaemonInternalD
525
529
  // running daemon — a stale or reused PID could match, killing a
526
530
  // foreign process. The stall watchdog below handles non-progress.
527
531
  }
532
+ // The daemon's startup settings object is intentionally lightweight and
533
+ // does not watch the config file. Re-resolve it only after the complete
534
+ // owner proof above. Unknown configuration cannot authorize continued
535
+ // command ingress with startup credentials.
536
+ try {
537
+ const refreshedSettings = await resolveDaemonSettings(resolvedAgentDir, deps);
538
+ if (!watchdogActive || stopRequested) return;
539
+ const refreshedCfg = getNotificationConfig(refreshedSettings);
540
+ if (
541
+ !isProviderEffectivelyEnabled(refreshedCfg, "telegram") ||
542
+ !isTelegramComplete(refreshedCfg) ||
543
+ tokenFingerprint(refreshedCfg.botToken) !== initialTokenFingerprint ||
544
+ refreshedCfg.chatId !== initialChatId
545
+ ) {
546
+ stopRequested = true;
547
+ daemon.requestStop("stop");
548
+ return;
549
+ }
550
+ } catch {
551
+ if (!watchdogActive || stopRequested) return;
552
+ stopRequested = true;
553
+ daemon.requestStop("stop");
554
+ logger.warn("telegram-daemon: configuration verification failed; stopping command ingress");
555
+ return;
556
+ }
528
557
  if (lastHeartbeatAt === undefined || heartbeatAt !== lastHeartbeatAt) {
529
558
  lastHeartbeatAt = heartbeatAt;
530
559
  stalledSince = now();
@@ -536,8 +565,8 @@ export async function runDaemonInternal(argv: string[], deps: RunDaemonInternalD
536
565
  daemon.requestStop("stop");
537
566
  }
538
567
  } catch {
539
- // Missing, malformed, or temporarily unreadable state is ambiguous.
540
- // Stop only on positive supersession or observed non-progress.
568
+ // Ambiguous ownership state does not authorize owner replacement.
569
+ // Configuration verification has its own fail-closed boundary above.
541
570
  } finally {
542
571
  watchdogTickInFlight = false;
543
572
  }
@@ -290,8 +290,10 @@ export const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
290
290
  * first refusal, so an owner still running the generation-178 router keeps
291
291
  * killing a session's mirroring after one transient rejection and must be
292
292
  * replaced across this upgrade.
293
+ * Generation 190 acknowledges the protected prompt-deadline boundary change,
294
+ * so generation-189 owners are replaced instead of retaining the old path.
293
295
  */
294
- export const DAEMON_GENERATION = 187;
296
+ export const DAEMON_GENERATION = 192;
295
297
 
296
298
  /**
297
299
  * Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
@@ -4087,6 +4087,11 @@ export interface TelegramDaemonOptions {
4087
4087
  clearIntervalImpl?: typeof clearInterval;
4088
4088
  btw?: { enabled: boolean };
4089
4089
  idleTimeoutMs?: number;
4090
+ /**
4091
+ * Standalone daemon owners keep Telegram command ingress alive while no SDK
4092
+ * endpoints are attached. Embedded/test daemons retain finite-idle behavior.
4093
+ */
4094
+ keepAliveWithoutAttachments?: boolean;
4090
4095
  /** TTL for durable topic-adoption intents (default 10 minutes). Observed, not a fixed contract. */
4091
4096
  adoptionIntentTtlMs?: number;
4092
4097
  pid?: number;
@@ -5256,6 +5261,7 @@ export class TelegramNotificationDaemon {
5256
5261
  this.#frameRouter = this.#createFrameRouter();
5257
5262
  this.#attachmentRouter = new SessionRouter({
5258
5263
  agentDir: opts.settings.getAgentDir(),
5264
+ observer: true,
5259
5265
  deps: {
5260
5266
  ...opts.routerDeps,
5261
5267
  onNotificationSubscription: subscription => this.#onAttachment(subscription),
@@ -12963,9 +12969,10 @@ export class TelegramNotificationDaemon {
12963
12969
  const idleElapsed = this.runtime.now() - idleSince >= (this.opts.idleTimeoutMs ?? 60_000);
12964
12970
  if (this.sessions.size > 0) {
12965
12971
  idleSince = this.runtime.now();
12966
- } else if (idleElapsed) {
12967
- // Zero sessions past the idle window: exit so the owner does not run
12968
- // forever. An active session resets the idle window above.
12972
+ } else if (!this.opts.keepAliveWithoutAttachments && idleElapsed) {
12973
+ // Zero sessions past the idle window: embedded/test owners exit so
12974
+ // they do not run forever. Standalone owners keep this command
12975
+ // receiver alive until control or owner fencing asks them to stop.
12969
12976
  this.requestStop("idle_timeout");
12970
12977
  break;
12971
12978
  }
@@ -9,22 +9,25 @@
9
9
  */
10
10
  import { randomUUID } from "node:crypto";
11
11
  import * as path from "node:path";
12
- import { getAgentDir } from "@gajae-code/utils";
12
+ import { replaceTabs, truncateToWidth } from "@gajae-code/tui";
13
+ import { getAgentDir, sanitizeDisplayLine } from "@gajae-code/utils";
14
+ import { PublicCommandFailure } from "../../cli/public-command-errors";
13
15
  import { type IndexedSession, isSessionAuthorityEligible, SessionIndex } from "../broker/session-index";
14
16
  import { SdkClientError } from "../client";
15
17
  import { dispatchSpawnGlobal } from "../lifecycle/broker-client";
18
+ import { sdkPublicFailure } from "./session-cli";
16
19
 
17
20
  const MASTER_CAPABILITY_ENV = "GJC_MASTER_CAPABILITY";
18
21
  const MASTER_SESSION_ENV = "GJC_MASTER_OWNER_SESSION_ID";
19
22
  const SPAWN_TIMEOUT_MS = 120_000;
20
23
 
21
- export class SdkMasterCliError extends Error {
24
+ export class SdkMasterCliError extends PublicCommandFailure {
22
25
  constructor(
23
26
  readonly code: string,
24
- message: string,
27
+ _message: string,
25
28
  readonly exitCode: 1 | 2 = 1,
26
29
  ) {
27
- super(message);
30
+ super(sdkPublicFailure(exitCode === 2 ? "usage" : code, undefined, "pre-effect").input);
28
31
  this.name = "SdkMasterCliError";
29
32
  }
30
33
  }
@@ -46,8 +49,6 @@ export interface SdkSpawnRendered {
46
49
  sessionId?: string;
47
50
  substrateKind?: string;
48
51
  seed?: { phase?: string; clientRef?: string; commandId?: string; turnId?: string; status?: string };
49
- idempotencyKey?: string;
50
- error?: { code: string; message: string };
51
52
  }
52
53
 
53
54
  export interface SdkSpawnDependencies {
@@ -143,8 +144,15 @@ function opaque(value: unknown): string | undefined {
143
144
  return typeof value === "string" && value.length > 0 && value.length <= 512 ? value : undefined;
144
145
  }
145
146
 
147
+ function safeSpawnText(value: string): string {
148
+ return truncateToWidth(replaceTabs(sanitizeDisplayLine(value).replaceAll(/[\u2028\u2029]/gu, " ")), 512);
149
+ }
150
+
146
151
  /** Projects an arbitrary Broker response onto the allowlisted render shape. */
147
- export function safeSpawnRender(response: unknown): { rendered: SdkSpawnRendered; exitCode: 0 | 1 } {
152
+ export function safeSpawnRender(
153
+ response: unknown,
154
+ idempotencyKey?: string,
155
+ ): { rendered: SdkSpawnRendered; exitCode: 0 } {
148
156
  const outer = record(response);
149
157
  if (outer?.ok === true) {
150
158
  const result = record(outer.result);
@@ -171,31 +179,29 @@ export function safeSpawnRender(response: unknown): { rendered: SdkSpawnRendered
171
179
  };
172
180
  }
173
181
  const error = record(outer?.error);
174
- const code = opaque(error?.code) ?? "spawn_failed";
175
- const retryIdempotencyKey = code === "uncertain_after_send" ? opaque(error?.idempotencyKey) : undefined;
176
- // Error messages are Broker-typed and never quote request input; an uncertain
177
- // post-send result may additionally expose its non-secret replay key.
178
- const message =
179
- typeof error?.message === "string" && error.message.length <= 512 ? error.message : "session.spawn failed";
180
- return {
181
- rendered: {
182
- code,
183
- ...(retryIdempotencyKey === undefined ? {} : { idempotencyKey: retryIdempotencyKey }),
184
- error: { code, message },
185
- },
186
- exitCode: 1,
187
- };
182
+ const result = record(outer?.result);
183
+ const seed = record(result?.seed);
184
+ const failure = sdkPublicFailure(typeof error?.code === "string" ? error.code : "operation_failed", error);
185
+ const resultReferences = sdkPublicFailure("operation_failed", result).input.references ?? [];
186
+ const seedReferences = sdkPublicFailure("operation_failed", seed).input.references ?? [];
187
+ throw new PublicCommandFailure({
188
+ ...failure.input,
189
+ references: [
190
+ ...(failure.input.references ?? []),
191
+ ...resultReferences,
192
+ ...seedReferences,
193
+ ...(idempotencyKey === undefined ? [] : [{ kind: "idempotencyKey" as const, value: idempotencyKey }]),
194
+ ],
195
+ });
188
196
  }
189
197
 
190
198
  export function renderSpawnTable(rendered: SdkSpawnRendered): string {
191
- const lines = [`Result: ${rendered.code}`];
192
- if (rendered.claimId) lines.push(`Claim: ${rendered.claimId}`);
193
- if (rendered.sessionId) lines.push(`Child session: ${rendered.sessionId}`);
194
- if (rendered.substrateKind) lines.push(`Substrate: ${rendered.substrateKind}`);
195
- if (rendered.seed?.phase) lines.push(`Seed phase: ${rendered.seed.phase}`);
196
- if (rendered.seed?.status) lines.push(`Seed status: ${rendered.seed.status}`);
197
- if (rendered.error) lines.push(`Error: ${rendered.error.code}: ${rendered.error.message}`);
198
- if (rendered.idempotencyKey) lines.push(`Retry idempotency key: ${rendered.idempotencyKey}`);
199
+ const lines = [`Result: ${safeSpawnText(rendered.code)}`];
200
+ if (rendered.claimId) lines.push(`Claim: ${safeSpawnText(rendered.claimId)}`);
201
+ if (rendered.sessionId) lines.push(`Child session: ${safeSpawnText(rendered.sessionId)}`);
202
+ if (rendered.substrateKind) lines.push(`Substrate: ${safeSpawnText(rendered.substrateKind)}`);
203
+ if (rendered.seed?.phase) lines.push(`Seed phase: ${safeSpawnText(rendered.seed.phase)}`);
204
+ if (rendered.seed?.status) lines.push(`Seed status: ${safeSpawnText(rendered.seed.status)}`);
199
205
 
200
206
  return lines.join("\n");
201
207
  }
@@ -207,7 +213,7 @@ export function renderSpawnTable(rendered: SdkSpawnRendered): string {
207
213
  export async function runSdkSpawn(
208
214
  args: SdkSpawnArgs,
209
215
  dependencies: Partial<SdkSpawnDependencies> = {},
210
- ): Promise<{ rendered: SdkSpawnRendered; exitCode: 0 | 1 }> {
216
+ ): Promise<{ rendered: SdkSpawnRendered; exitCode: 0 }> {
211
217
  const deps: SdkSpawnDependencies = {
212
218
  env: dependencies.env ?? process.env,
213
219
  dispatch: dependencies.dispatch ?? brokerSpawnDispatch,
@@ -246,14 +252,19 @@ export async function runSdkSpawn(
246
252
  },
247
253
  idempotencyKey,
248
254
  );
249
- return safeSpawnRender(response);
255
+ return safeSpawnRender(response, idempotencyKey);
250
256
  } catch (error) {
251
- if (error instanceof SdkClientError && error.code === "uncertain_after_send") {
252
- return safeSpawnRender({
253
- ok: false,
254
- error: { code: error.code, message: error.message, idempotencyKey },
257
+ if (error instanceof PublicCommandFailure) throw error;
258
+ if (error instanceof SdkClientError) {
259
+ const failure = sdkPublicFailure(error.code, error.details);
260
+ throw new PublicCommandFailure({
261
+ ...failure.input,
262
+ references: [...(failure.input.references ?? []), { kind: "idempotencyKey", value: idempotencyKey }],
255
263
  });
256
264
  }
257
- throw error;
265
+ throw new PublicCommandFailure({
266
+ kind: "operation_failed",
267
+ references: [{ kind: "idempotencyKey", value: idempotencyKey }],
268
+ });
258
269
  }
259
270
  }
@@ -90,27 +90,50 @@ export function tailItemKey(item: SdkTailItemV1): string {
90
90
  return `${item.kind}\u0000${JSON.stringify(item.payload)}`;
91
91
  }
92
92
 
93
- /** Holds positioned live frames until the checkpoint can stamp their authoritative revision. */
93
+ /**
94
+ * Holds positioned live frames until the checkpoint can stamp their
95
+ * authoritative revision, and keeps stamping after it.
96
+ *
97
+ * A positioned frame (generation+seq) that carries no revision after the
98
+ * checkpoint used to abort the whole tail with protocol_error. The host emits
99
+ * such frames whenever its transcript provider is momentarily unavailable
100
+ * (`eventRevision` returns undefined), which is ordinary during a turn - and
101
+ * one such frame turned a live, answering session into one no consumer could
102
+ * observe: every poll failed, the caller held the turn, and after five minutes
103
+ * reported it failed while the answer sat in the transcript (2026-09-17/18,
104
+ * five sessions). A frame is never a reason to lose the tail.
105
+ *
106
+ * The stamp is the LATEST revision observed, not the checkpoint's: revisions
107
+ * advance during a turn, and lifecycle order is compared revision-first. A
108
+ * terminal frame stamped with the initial checkpoint revision would sort
109
+ * before a start that carried a later one, and `--until-idle` would wait on a
110
+ * turn that had already ended.
111
+ */
94
112
  export class TailRevisionBuffer {
95
113
  #pending: SdkTailItemV1[] = [];
96
- #resolved = false;
114
+ #revision: number | undefined;
97
115
 
98
116
  push(item: SdkTailItemV1): SdkTailItemV1[] {
99
- if (item.revision !== undefined || item.generation === undefined || item.seq === undefined) return [item];
100
- if (!this.#resolved) {
117
+ if (item.revision !== undefined) {
118
+ if (this.#revision === undefined || item.revision > this.#revision) this.#revision = item.revision;
119
+ return [item];
120
+ }
121
+ if (item.generation === undefined || item.seq === undefined) return [item];
122
+ if (this.#revision === undefined) {
101
123
  this.#pending.push(item);
102
124
  return [];
103
125
  }
104
- throw new Error("A positioned live tail item arrived without an authoritative revision after checkpoint.");
126
+ item.revision = this.#revision;
127
+ return [item];
105
128
  }
106
129
 
107
130
  resolve(revision: number): SdkTailItemV1[] {
108
131
  if (!Number.isSafeInteger(revision) || revision < 0)
109
132
  throw new Error("Tail revision must be a non-negative integer.");
110
- this.#resolved = true;
133
+ if (this.#revision === undefined || revision > this.#revision) this.#revision = revision;
111
134
  const pending = this.#pending;
112
135
  this.#pending = [];
113
- for (const item of pending) item.revision = revision;
136
+ for (const item of pending) item.revision = this.#revision;
114
137
  return pending;
115
138
  }
116
139
  }