@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
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Protocol handler for `embedded:` URLs.
3
+ *
4
+ * Bundled GJC skills and skill fragments have no filesystem home: the skill
5
+ * tool, skill discovery, and the skill registry all report the stable
6
+ * identifier `embedded:gjc/<catalog relative path>` (for example
7
+ * `embedded:gjc/skills/ultragoal/SKILL.md`). This handler resolves exactly
8
+ * those identifiers back to the bundled catalog content so the path a tool
9
+ * prints is a path `read` can open.
10
+ *
11
+ * URL forms (the `embedded:` and `embedded://` spellings are equivalent):
12
+ * - `embedded:gjc/skills/<name>/SKILL.md` — bundled skill body
13
+ * - `embedded:gjc/skills/<name>` — skill baseDir, resolves to its SKILL.md
14
+ * - `embedded:gjc/skill-fragments/<parent>/<fragment>.md` — bundled fragment
15
+ */
16
+ import { BUNDLED_GJC_SKILL_CATALOG, type BundledGjcSkillCatalogEntry } from "../defaults/gjc-skills.generated";
17
+ import type { InternalResource, InternalUrl, ProtocolHandler } from "./types";
18
+
19
+ const GJC_NAMESPACE = "gjc";
20
+
21
+ function normalizeRelativePath(relativePath: string): string {
22
+ return relativePath.replace(/^\/+/, "").replace(/\/+$/, "");
23
+ }
24
+
25
+ function findCatalogEntry(relativePath: string): BundledGjcSkillCatalogEntry | undefined {
26
+ const direct = BUNDLED_GJC_SKILL_CATALOG.find(entry => entry.relativePath === relativePath);
27
+ if (direct) return direct;
28
+ // `baseDir` identifiers point at the skill directory, not the body file.
29
+ return BUNDLED_GJC_SKILL_CATALOG.find(entry => entry.relativePath === `${relativePath}/SKILL.md`);
30
+ }
31
+
32
+ function availablePaths(): string {
33
+ return BUNDLED_GJC_SKILL_CATALOG.map(entry => `embedded:${GJC_NAMESPACE}/${entry.relativePath}`).join(", ");
34
+ }
35
+
36
+ /**
37
+ * Handler for `embedded:` URLs.
38
+ */
39
+ export class EmbeddedProtocolHandler implements ProtocolHandler {
40
+ readonly scheme = "embedded";
41
+ readonly immutable = true;
42
+
43
+ async resolve(url: InternalUrl): Promise<InternalResource> {
44
+ const namespace = (url.rawHost || url.hostname || "").toLowerCase();
45
+ if (namespace !== GJC_NAMESPACE) {
46
+ throw new Error(
47
+ `Unknown embedded namespace: ${namespace || "(empty)"}\nOnly embedded:${GJC_NAMESPACE}/... is resolvable.`,
48
+ );
49
+ }
50
+
51
+ let rawRelativePath = url.rawPathname ?? url.pathname ?? "";
52
+ try {
53
+ rawRelativePath = decodeURIComponent(rawRelativePath);
54
+ } catch {
55
+ // Leave the raw form in place; the lookup below reports it verbatim.
56
+ }
57
+ const relativePath = normalizeRelativePath(rawRelativePath);
58
+ if (!relativePath) {
59
+ throw new Error(
60
+ `embedded:${GJC_NAMESPACE}/ URL requires a bundled resource path, e.g. embedded:${GJC_NAMESPACE}/skills/ultragoal/SKILL.md`,
61
+ );
62
+ }
63
+ if (relativePath.split("/").includes("..")) {
64
+ throw new Error("Path traversal (..) is not allowed in embedded: URLs");
65
+ }
66
+
67
+ const entry = findCatalogEntry(relativePath);
68
+ if (!entry) {
69
+ throw new Error(
70
+ `Unknown embedded resource: embedded:${GJC_NAMESPACE}/${relativePath}\nAvailable: ${availablePaths()}`,
71
+ );
72
+ }
73
+
74
+ const content = await entry.loadContent();
75
+ return {
76
+ url: url.href,
77
+ content,
78
+ contentType: "text/markdown",
79
+ size: Buffer.byteLength(content, "utf-8"),
80
+ notes: [],
81
+ };
82
+ }
83
+ }
@@ -10,6 +10,7 @@
10
10
 
11
11
  export * from "./agent-protocol";
12
12
  export * from "./artifact-protocol";
13
+ export * from "./embedded-protocol";
13
14
  export * from "./gjc-protocol";
14
15
  export * from "./issue-pr-protocol";
15
16
  export * from "./json-query";
@@ -13,6 +13,25 @@ import type { InternalUrl } from "./types";
13
13
 
14
14
  const SCHEME_HOST_RE = /^([a-z][a-z0-9+.-]*):\/\/([^/?#]*)/i;
15
15
  const PATHNAME_RE = /^[a-z][a-z0-9+.-]*:\/\/[^/?#]*(\/[^?#]*)?/i;
16
+ // Schemes whose canonical spelling omits the authority slashes. `embedded:` is
17
+ // the identifier tools print for bundled (non-filesystem) resources, so both
18
+ // `embedded:gjc/...` and `embedded://gjc/...` must route to the same handler.
19
+ const SLASHLESS_SCHEMES = new Set(["embedded"]);
20
+ const SLASHLESS_SCHEME_RE = /^([a-z][a-z0-9+.-]*):(?!\/\/)(.*)$/is;
21
+
22
+ /**
23
+ * Canonicalize an internal URL so slashless schemes carry an authority.
24
+ *
25
+ * Every entry point that inspects or routes an internal URL (router,
26
+ * read/write tools, selector splitting) MUST normalize first, so handlers only
27
+ * ever see the `scheme://authority/path` form.
28
+ */
29
+ export function normalizeInternalUrlInput(input: string): string {
30
+ const match = input.match(SLASHLESS_SCHEME_RE);
31
+ if (!match) return input;
32
+ if (!SLASHLESS_SCHEMES.has(match[1].toLowerCase())) return input;
33
+ return `${match[1].toLowerCase()}://${match[2]}`;
34
+ }
16
35
 
17
36
  /**
18
37
  * Parse an internal URL into an InternalUrl.
@@ -20,7 +39,8 @@ const PATHNAME_RE = /^[a-z][a-z0-9+.-]*:\/\/[^/?#]*(\/[^?#]*)?/i;
20
39
  * Handles URLs where `new URL()` would fail (e.g., `skill://plugin:name`
21
40
  * where the colon is not a port separator).
22
41
  */
23
- export function parseInternalUrl(input: string): InternalUrl {
42
+ export function parseInternalUrl(rawInput: string): InternalUrl {
43
+ const input = normalizeInternalUrlInput(rawInput);
24
44
  const hostMatch = input.match(SCHEME_HOST_RE);
25
45
  const pathMatch = input.match(PATHNAME_RE);
26
46
 
@@ -7,11 +7,12 @@
7
7
  */
8
8
  import { AgentProtocolHandler } from "./agent-protocol";
9
9
  import { ArtifactProtocolHandler } from "./artifact-protocol";
10
+ import { EmbeddedProtocolHandler } from "./embedded-protocol";
10
11
  import { GjcProtocolHandler } from "./gjc-protocol";
11
12
  import { IssueProtocolHandler, PrProtocolHandler } from "./issue-pr-protocol";
12
13
  import { LocalProtocolHandler } from "./local-protocol";
13
14
  import { MemoryProtocolHandler } from "./memory-protocol";
14
- import { parseInternalUrl } from "./parse";
15
+ import { normalizeInternalUrlInput, parseInternalUrl } from "./parse";
15
16
  import { RuleProtocolHandler } from "./rule-protocol";
16
17
  import type { InternalResource, InternalUrl, ProtocolHandler, ResolveContext } from "./types";
17
18
 
@@ -29,6 +30,7 @@ export class InternalUrlRouter {
29
30
  this.register(new RuleProtocolHandler());
30
31
  this.register(new IssueProtocolHandler());
31
32
  this.register(new PrProtocolHandler());
33
+ this.register(new EmbeddedProtocolHandler());
32
34
  }
33
35
 
34
36
  /** Process-global router instance. */
@@ -55,7 +57,7 @@ export class InternalUrlRouter {
55
57
  }
56
58
 
57
59
  canHandle(input: string): boolean {
58
- const match = input.match(/^([a-z][a-z0-9+.-]*):\/\//i);
60
+ const match = normalizeInternalUrlInput(input).match(/^([a-z][a-z0-9+.-]*):\/\//i);
59
61
  if (!match) return false;
60
62
  return this.#handlers.has(match[1].toLowerCase());
61
63
  }
package/src/main.ts CHANGED
@@ -29,7 +29,11 @@ import { resolveLaunchDisposition } from "./cli/launch-disposition";
29
29
  import { runListModelsCommand } from "./cli/list-models";
30
30
  import { selectSession } from "./cli/session-picker";
31
31
  import { findConfigFile } from "./config";
32
- import { activateModelProfile, ModelProfileCredentialError } from "./config/model-profile-activation";
32
+ import {
33
+ activateModelProfile,
34
+ applyModelProfileRuntimeBindings,
35
+ ModelProfileCredentialError,
36
+ } from "./config/model-profile-activation";
33
37
  import { ModelRegistry, ModelsConfigFile } from "./config/model-registry";
34
38
  import {
35
39
  parseModelString,
@@ -59,6 +63,9 @@ import type { SubmittedUserInput } from "./modes/types";
59
63
  import { applyCliRuntimeApiKeyOverride } from "./runtime-api-key";
60
64
  import { type CliCredentialSelector, parseCliCredentialSelector } from "./runtime-credential-selector";
61
65
  import type { MCPManager } from "./runtime-mcp";
66
+ // Leaf path, not the barrel: the capability registry must stay out of the
67
+ // runtime-mcp import graph that every root command would otherwise load.
68
+ import { attachExactMcpControls } from "./runtime-mcp/redaction";
62
69
  import {
63
70
  type CreateAgentSessionOptions,
64
71
  type CreateAgentSessionResult,
@@ -477,13 +484,23 @@ async function applyStartupModelProfilesWithPolicy(
477
484
  options: {
478
485
  thinkingLevelOverride?: CreateAgentSessionOptions["thinkingLevel"];
479
486
  tolerateCredentialError?: boolean;
487
+ runtimeBindingsOnly?: boolean;
480
488
  } = {},
481
489
  ): Promise<boolean> => {
482
490
  try {
483
- await activateModelProfile(
484
- { session: args.session, modelRegistry: args.modelRegistry, settings: args.settings, profileName },
485
- { persistDefault, thinkingLevelOverride: options.thinkingLevelOverride },
486
- );
491
+ if (options.runtimeBindingsOnly) {
492
+ await applyModelProfileRuntimeBindings({
493
+ session: args.session,
494
+ modelRegistry: args.modelRegistry,
495
+ settings: args.settings,
496
+ profileName,
497
+ });
498
+ } else {
499
+ await activateModelProfile(
500
+ { session: args.session, modelRegistry: args.modelRegistry, settings: args.settings, profileName },
501
+ { persistDefault, thinkingLevelOverride: options.thinkingLevelOverride },
502
+ );
503
+ }
487
504
  return true;
488
505
  } catch (error) {
489
506
  if (error instanceof ModelProfileCredentialError && (onCredentialError || options.tolerateCredentialError)) {
@@ -519,6 +536,7 @@ async function applyStartupModelProfilesWithPolicy(
519
536
  ? args.settings.get("defaultThinkingLevel")
520
537
  : undefined,
521
538
  tolerateCredentialError: tolerateDefaultProfileFailure,
539
+ runtimeBindingsOnly: args.session.hasRecoveredDefaultFallbackChain(),
522
540
  })) && applied;
523
541
  }
524
542
  if (args.parsedArgs.mpreset) {
@@ -780,6 +798,10 @@ function hasResumePickerTerminal(): boolean {
780
798
  return process.stdin.isTTY === true && process.stdout.isTTY === true;
781
799
  }
782
800
 
801
+ export function shouldNotifyModelFallback(authBootstrap: boolean | undefined, isInteractive: boolean): boolean {
802
+ return !(authBootstrap === true && isInteractive);
803
+ }
804
+
783
805
  export async function runInteractiveMode(
784
806
  session: AgentSession,
785
807
  version: string,
@@ -1405,6 +1427,80 @@ export interface RunRootCommandDependencies {
1405
1427
  loadSettingsForScope?: typeof Settings.loadForScope;
1406
1428
  }
1407
1429
 
1430
+ type DirectSessionManager = Pick<SessionManager, "getCwd" | "getSessionFile" | "getSessionId">;
1431
+
1432
+ /**
1433
+ * Direct CLI liveness is meaningful only for sessions with a durable transcript.
1434
+ * An in-memory manager has no artifacts for GC to fence and must not touch the
1435
+ * shared SDK session-index lock.
1436
+ */
1437
+ export function directSessionRegistrationId(
1438
+ sessionManager: DirectSessionManager | undefined,
1439
+ lifecycleRequestId: string | undefined,
1440
+ ): string | undefined {
1441
+ if (lifecycleRequestId || sessionManager?.getSessionFile() === undefined) return undefined;
1442
+ return sessionManager.getSessionId();
1443
+ }
1444
+
1445
+ interface DirectSessionRegistrationDependencies {
1446
+ createIndex?: (agentDir: string) => SessionIndex;
1447
+ processIncarnation?: typeof processIncarnation;
1448
+ registerPostmortem?: typeof postmortem.register;
1449
+ masterRole?: { ownerSessionId: string; attestationEpoch: string };
1450
+ }
1451
+
1452
+ /** Register a durable direct CLI session while leaving ephemeral sessions lock-free. */
1453
+ export async function registerDirectSession(
1454
+ sessionManager: DirectSessionManager | undefined,
1455
+ agentDir: string,
1456
+ lifecycleRequestId: string | undefined,
1457
+ dependencies: DirectSessionRegistrationDependencies = {},
1458
+ ): Promise<void> {
1459
+ const directSessionId = directSessionRegistrationId(sessionManager, lifecycleRequestId);
1460
+ if (!directSessionId || !sessionManager) return;
1461
+ const sessionIndex = dependencies.createIndex?.(agentDir) ?? new SessionIndex(agentDir);
1462
+ const locator = await resolveSessionLocator(sessionManager.getCwd(), agentDir);
1463
+ const directSessionIncarnation = (dependencies.processIncarnation ?? processIncarnation)(process.pid);
1464
+ await sessionIndex.append({
1465
+ type: "host_registered",
1466
+ sessionId: directSessionId,
1467
+ locator,
1468
+ endpointGeneration: 0,
1469
+ pid: process.pid,
1470
+ ...(directSessionIncarnation ? { processIncarnation: directSessionIncarnation } : {}),
1471
+ ...(dependencies.masterRole && directSessionIncarnation
1472
+ ? {
1473
+ masterRole: {
1474
+ version: 2 as const,
1475
+ ownerSessionId: dependencies.masterRole.ownerSessionId,
1476
+ launchPid: process.pid,
1477
+ launchProcessIncarnation: directSessionIncarnation,
1478
+ role: "master" as const,
1479
+ attestationEpoch: dependencies.masterRole.attestationEpoch,
1480
+ },
1481
+ }
1482
+ : {}),
1483
+ });
1484
+ if (locator.worktreeRoot !== null) {
1485
+ try {
1486
+ await releaseLaunchWorktreeReservationAfterRegistration(agentDir, locator.worktreeRoot);
1487
+ } catch (error) {
1488
+ logger.warn("Failed to release launch worktree reservation after host registration", {
1489
+ error: error instanceof Error ? error.message : String(error),
1490
+ });
1491
+ }
1492
+ }
1493
+ (dependencies.registerPostmortem ?? postmortem.register)("direct-session-index", async _reason => {
1494
+ await sessionIndex.append({
1495
+ type: "host_unregistered",
1496
+ sessionId: directSessionId,
1497
+ locator,
1498
+ endpointGeneration: 0,
1499
+ pid: process.pid,
1500
+ });
1501
+ });
1502
+ }
1503
+
1408
1504
  export interface ModelRoleOverrides {
1409
1505
  smol?: string;
1410
1506
  slow?: string;
@@ -1987,55 +2083,15 @@ export async function runRootCommand(
1987
2083
  }
1988
2084
  // Register a resumed direct session before constructing the agent: GC holds the
1989
2085
  // same index lock while deleting artifacts, so startup and deletion are fenced.
1990
- const directSessionId = process.env.GJC_LIFECYCLE_REQUEST_ID ? undefined : sessionManager?.getSessionId();
1991
- if (directSessionId) {
1992
- const sessionIndex = new SessionIndex(settingsInstance.getAgentDir());
1993
- const locator = await resolveSessionLocator(sessionManager?.getCwd() ?? cwd, settingsInstance.getAgentDir());
1994
- // A pid is reusable, so the broker's teardown fence needs this session's OS
1995
- // start incarnation recorded alongside the pid it publishes.
1996
- const directSessionIncarnation = processIncarnation(process.pid);
1997
- await sessionIndex.append({
1998
- type: "host_registered",
1999
- sessionId: directSessionId,
2000
- locator,
2001
- endpointGeneration: 0,
2002
- pid: process.pid,
2003
- ...(directSessionIncarnation ? { processIncarnation: directSessionIncarnation } : {}),
2004
- ...(masterModeContext && directSessionIncarnation
2005
- ? {
2006
- masterRole: {
2007
- version: 2,
2008
- ownerSessionId: masterModeContext.ownerSessionId,
2009
- launchPid: process.pid,
2010
- launchProcessIncarnation: directSessionIncarnation,
2011
- role: "master" as const,
2012
- attestationEpoch: masterModeContext.attestationEpoch,
2013
- },
2014
- }
2015
- : {}),
2016
- });
2017
- if (locator.worktreeRoot !== null) {
2018
- try {
2019
- await releaseLaunchWorktreeReservationAfterRegistration(
2020
- settingsInstance.getAgentDir(),
2021
- locator.worktreeRoot,
2022
- );
2023
- } catch (error) {
2024
- logger.warn("Failed to release launch worktree reservation after host registration", {
2025
- error: error instanceof Error ? error.message : String(error),
2026
- });
2027
- }
2028
- }
2029
- postmortem.register("direct-session-index", async () => {
2030
- await sessionIndex.append({
2031
- type: "host_unregistered",
2032
- sessionId: directSessionId,
2033
- locator,
2034
- endpointGeneration: 0,
2035
- pid: process.pid,
2036
- });
2037
- });
2038
- }
2086
+ // Ephemeral sessions have no durable artifacts or liveness authority to fence.
2087
+ await registerDirectSession(sessionManager, settingsInstance.getAgentDir(), process.env.GJC_LIFECYCLE_REQUEST_ID, {
2088
+ masterRole: masterModeContext
2089
+ ? {
2090
+ ownerSessionId: masterModeContext.ownerSessionId,
2091
+ attestationEpoch: masterModeContext.attestationEpoch,
2092
+ }
2093
+ : undefined,
2094
+ });
2039
2095
 
2040
2096
  const createAgentSessionImpl = deps.createAgentSession ?? createAgentSession;
2041
2097
  const createSession: CreateSessionForMain = async (options, context): Promise<CreateAgentSessionResult> => {
@@ -2076,6 +2132,18 @@ export async function runRootCommand(
2076
2132
  // Herdr integration: report gjc lifecycle state when running in a Herdr pane.
2077
2133
  installHerdrReporter(listener => session.subscribe(listener));
2078
2134
 
2135
+ // Exact MCP capability attaches at the root interactive entry point.
2136
+ // Granted by creation path, not by call order:
2137
+ // only a session this root command built for an interactive run with an
2138
+ // explicit --mcp-config gets one. Sessions built through createAgentSession
2139
+ // directly, sub-sessions, ACP, and print/text/json runs never reach here.
2140
+ if (isInteractive && sessionOptions.mcpConfigPath) {
2141
+ attachExactMcpControls(session, {
2142
+ grantSource: "root-interactive-exact-config",
2143
+ configPath: sessionOptions.mcpConfigPath,
2144
+ });
2145
+ }
2146
+
2079
2147
  let startDeferredModelProfiles: DeferredModelProfileStartup | undefined;
2080
2148
  if (!(parsedArgs.authBootstrap === true && isInteractive)) {
2081
2149
  const profileArgs = {
@@ -2114,7 +2182,7 @@ export async function runRootCommand(
2114
2182
  }
2115
2183
  }
2116
2184
 
2117
- if (modelFallbackMessage) {
2185
+ if (modelFallbackMessage && shouldNotifyModelFallback(parsedArgs.authBootstrap, isInteractive)) {
2118
2186
  notifs.push({ kind: "warn", message: modelFallbackMessage });
2119
2187
  }
2120
2188