@gajae-code/coding-agent 0.12.14 → 0.12.16-nightly.20260807070805.31156495595.g91c4eff67ce2

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 (553) hide show
  1. package/CHANGELOG.md +65 -1
  2. package/dist/types/ai-core-import-gate.test.d.ts +1 -0
  3. package/dist/types/capability/mcp.d.ts +2 -0
  4. package/dist/types/capability/skill.d.ts +11 -1
  5. package/dist/types/cli/args.d.ts +1 -1
  6. package/dist/types/cli/file-processor.d.ts +1 -1
  7. package/dist/types/cli/initial-message.d.ts +1 -1
  8. package/dist/types/cli/mcp-cli.d.ts +1 -0
  9. package/dist/types/cli/native-smoke.d.ts +12 -0
  10. package/dist/types/cli/plugin-cli.d.ts +1 -0
  11. package/dist/types/cli/setup-cli.d.ts +1 -1
  12. package/dist/types/cli/update-cli.d.ts +38 -10
  13. package/dist/types/cli.d.ts +1 -1
  14. package/dist/types/commands/mcp.d.ts +5 -0
  15. package/dist/types/commands/plugin.d.ts +3 -0
  16. package/dist/types/commands/update.d.ts +3 -3
  17. package/dist/types/commit/agentic/agent.d.ts +1 -1
  18. package/dist/types/commit/analysis/conventional.d.ts +1 -1
  19. package/dist/types/commit/analysis/summary.d.ts +1 -1
  20. package/dist/types/commit/changelog/generate.d.ts +1 -1
  21. package/dist/types/commit/changelog/index.d.ts +1 -1
  22. package/dist/types/commit/map-reduce/index.d.ts +1 -1
  23. package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
  24. package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
  25. package/dist/types/commit/model-selection.d.ts +1 -1
  26. package/dist/types/commit/shared-llm.d.ts +1 -1
  27. package/dist/types/commit/utils.d.ts +1 -1
  28. package/dist/types/config/model-discovery-manager.d.ts +1 -1
  29. package/dist/types/config/model-equivalence.d.ts +1 -1
  30. package/dist/types/config/model-profile-activation.d.ts +1 -1
  31. package/dist/types/config/model-registry.d.ts +7 -2
  32. package/dist/types/config/model-resolver.d.ts +1 -1
  33. package/dist/types/config/models-config-schema.d.ts +18 -0
  34. package/dist/types/config/settings-schema.d.ts +71 -1
  35. package/dist/types/config/settings.d.ts +1 -2
  36. package/dist/types/config/update-channel.d.ts +13 -0
  37. package/dist/types/coordinator/contract.d.ts +1 -1
  38. package/dist/types/coordinator-mcp/codex-handoff.d.ts +88 -0
  39. package/dist/types/coordinator-mcp/codex-wake-publisher.d.ts +23 -0
  40. package/dist/types/coordinator-mcp/server.d.ts +31 -0
  41. package/dist/types/cursor.d.ts +1 -1
  42. package/dist/types/debug/index.d.ts +5 -0
  43. package/dist/types/debug/raw-sse-buffer.d.ts +1 -1
  44. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -1
  45. package/dist/types/defaults/gjc-defaults.d.ts +12 -0
  46. package/dist/types/defaults/gjc-defaults.test.d.ts +1 -0
  47. package/dist/types/defaults/gjc-skills.generated.d.ts +16 -0
  48. package/dist/types/discovery/helpers.d.ts +4 -0
  49. package/dist/types/eval/types.d.ts +1 -1
  50. package/dist/types/exa/factory.d.ts +1 -1
  51. package/dist/types/exa/mcp-client.d.ts +1 -1
  52. package/dist/types/exa/researcher.d.ts +1 -1
  53. package/dist/types/exa/search.d.ts +1 -1
  54. package/dist/types/exa/types.d.ts +1 -1
  55. package/dist/types/exa/websets.d.ts +1 -1
  56. package/dist/types/exec/bash-executor.d.ts +1 -1
  57. package/dist/types/extensibility/custom-tools/loader.d.ts +3 -2
  58. package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
  59. package/dist/types/extensibility/custom-tools/wrapper.d.ts +1 -1
  60. package/dist/types/extensibility/extensions/compact-handler.d.ts +1 -1
  61. package/dist/types/extensibility/extensions/loader.d.ts +1 -1
  62. package/dist/types/extensibility/extensions/runner.d.ts +1 -1
  63. package/dist/types/extensibility/extensions/types.d.ts +1 -1
  64. package/dist/types/extensibility/extensions/wrapper.d.ts +1 -1
  65. package/dist/types/extensibility/gjc-plugins/activation.d.ts +1 -1
  66. package/dist/types/extensibility/gjc-plugins/compiler.d.ts +1 -0
  67. package/dist/types/extensibility/gjc-plugins/constrained-hooks.d.ts +22 -0
  68. package/dist/types/extensibility/gjc-plugins/index.d.ts +3 -1
  69. package/dist/types/extensibility/gjc-plugins/injection.d.ts +4 -1
  70. package/dist/types/extensibility/gjc-plugins/installer.d.ts +4 -0
  71. package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +4 -0
  72. package/dist/types/extensibility/gjc-plugins/metadata.d.ts +11 -0
  73. package/dist/types/extensibility/gjc-plugins/migration.d.ts +45 -0
  74. package/dist/types/extensibility/gjc-plugins/prompt-appendix.d.ts +7 -2
  75. package/dist/types/extensibility/gjc-plugins/registry.d.ts +5 -3
  76. package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +15 -0
  77. package/dist/types/extensibility/gjc-plugins/subskill-authority.d.ts +38 -0
  78. package/dist/types/extensibility/gjc-plugins/tools.d.ts +2 -0
  79. package/dist/types/extensibility/gjc-plugins/types.d.ts +71 -1
  80. package/dist/types/extensibility/hooks/runner.d.ts +2 -2
  81. package/dist/types/extensibility/hooks/tool-wrapper.d.ts +1 -1
  82. package/dist/types/extensibility/hooks/types.d.ts +1 -1
  83. package/dist/types/extensibility/shared-events.d.ts +1 -1
  84. package/dist/types/extensibility/skills.d.ts +8 -1
  85. package/dist/types/gjc-runtime/managed-owner-admission.d.ts +1 -1
  86. package/dist/types/hooks/mcp-delegate-host-context.d.ts +29 -0
  87. package/dist/types/internal-urls/local-protocol.d.ts +1 -1
  88. package/dist/types/internal-urls/mcp-protocol.d.ts +1 -1
  89. package/dist/types/internal-urls/types.d.ts +2 -0
  90. package/dist/types/main.d.ts +1 -1
  91. package/dist/types/memory-backend/index.d.ts +4 -4
  92. package/dist/types/memory-backend/lazy-loading.test.d.ts +1 -0
  93. package/dist/types/memory-backend/off-backend.d.ts +1 -7
  94. package/dist/types/memory-backend/resolve.d.ts +18 -11
  95. package/dist/types/memory-backend/service.d.ts +11 -0
  96. package/dist/types/memory-backend/types.d.ts +4 -3
  97. package/dist/types/modes/acp/acp-agent.d.ts +7 -2
  98. package/dist/types/modes/components/assistant-message.d.ts +1 -1
  99. package/dist/types/modes/components/message-frame.d.ts +1 -1
  100. package/dist/types/modes/components/model-selector.d.ts +1 -1
  101. package/dist/types/modes/components/settings-selector.d.ts +1 -1
  102. package/dist/types/modes/controllers/command-controller.d.ts +2 -1
  103. package/dist/types/modes/controllers/selector-controller.d.ts +1 -1
  104. package/dist/types/modes/interactive-mode.d.ts +6 -3
  105. package/dist/types/modes/print-mode.d.ts +1 -1
  106. package/dist/types/modes/shared/agent-wire/event-contract.d.ts +1 -1
  107. package/dist/types/modes/theme/theme.d.ts +2 -2
  108. package/dist/types/modes/types.d.ts +3 -2
  109. package/dist/types/modes/utils/context-usage.d.ts +1 -1
  110. package/dist/types/modes/utils/injected-user-submission.d.ts +1 -1
  111. package/dist/types/modes/utils/ui-helpers.d.ts +1 -1
  112. package/dist/types/reminders/star-reminder.d.ts +1 -1
  113. package/dist/types/rlm/python-tool.d.ts +1 -1
  114. package/dist/types/runtime/boot-ordering.test.d.ts +1 -0
  115. package/dist/types/runtime/lazy-registration.d.ts +23 -0
  116. package/dist/types/runtime/lazy-service.d.ts +44 -0
  117. package/dist/types/runtime/lazy-service.test.d.ts +1 -0
  118. package/dist/types/runtime/network-prewarm-service.d.ts +15 -0
  119. package/dist/types/runtime/network-prewarm-service.test.d.ts +1 -0
  120. package/dist/types/runtime/optional-runtime-services.d.ts +22 -0
  121. package/dist/types/runtime/workspace-tree-service.d.ts +16 -0
  122. package/dist/types/runtime/workspace-tree-service.test.d.ts +1 -0
  123. package/dist/types/runtime-credential-selector.d.ts +1 -1
  124. package/dist/types/runtime-mcp/client.d.ts +6 -2
  125. package/dist/types/runtime-mcp/config.test.d.ts +1 -0
  126. package/dist/types/runtime-mcp/http.test.d.ts +1 -0
  127. package/dist/types/runtime-mcp/index.d.ts +2 -0
  128. package/dist/types/runtime-mcp/loader.d.ts +2 -0
  129. package/dist/types/runtime-mcp/manager-pool.test.d.ts +1 -0
  130. package/dist/types/runtime-mcp/manager.d.ts +38 -3
  131. package/dist/types/runtime-mcp/pool-key.d.ts +62 -0
  132. package/dist/types/runtime-mcp/pool-key.test.d.ts +1 -0
  133. package/dist/types/runtime-mcp/pool.d.ts +208 -0
  134. package/dist/types/runtime-mcp/pool.test.d.ts +1 -0
  135. package/dist/types/runtime-mcp/tool-bridge.d.ts +19 -7
  136. package/dist/types/runtime-mcp/transports/http.d.ts +1 -0
  137. package/dist/types/runtime-mcp/types.d.ts +5 -2
  138. package/dist/types/sdk/broker/lifecycle.d.ts +4 -0
  139. package/dist/types/sdk/bus/chat-daemon-control.d.ts +3 -1
  140. package/dist/types/sdk/bus/index.d.ts +49 -15
  141. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +10 -2
  142. package/dist/types/sdk/bus/telegram-daemon.d.ts +28 -0
  143. package/dist/types/sdk/host/host.d.ts +2 -0
  144. package/dist/types/sdk/host/import-graph.test.d.ts +1 -0
  145. package/dist/types/sdk/host/index.d.ts +2 -0
  146. package/dist/types/sdk/host/reverse-leases.d.ts +5 -0
  147. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +1 -0
  148. package/dist/types/sdk/host/session-runtime.d.ts +125 -0
  149. package/dist/types/sdk/host/session-runtime.test.d.ts +1 -0
  150. package/dist/types/sdk/host/surface-policy.d.ts +21 -0
  151. package/dist/types/sdk/host/websocket-transport.d.ts +22 -0
  152. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +1 -0
  153. package/dist/types/sdk/models.d.ts +1 -1
  154. package/dist/types/sdk/session-directory.d.ts +2 -1
  155. package/dist/types/sdk/session.d.ts +17 -5
  156. package/dist/types/secrets/obfuscator.d.ts +1 -1
  157. package/dist/types/session/agent-session.d.ts +17 -2
  158. package/dist/types/session/agent-storage.d.ts +1 -1
  159. package/dist/types/session/artifacts.d.ts +28 -0
  160. package/dist/types/session/auth-storage.d.ts +2 -2
  161. package/dist/types/session/cache-economics.d.ts +1 -1
  162. package/dist/types/session/heap-eviction-artifacts.test.d.ts +1 -0
  163. package/dist/types/session/history-storage.d.ts +1 -0
  164. package/dist/types/session/internal/managed-session-scope.d.ts +23 -4
  165. package/dist/types/session/internal/managed-session-storage.d.ts +7 -2
  166. package/dist/types/session/messages.d.ts +1 -1
  167. package/dist/types/session/session-dump-format.d.ts +1 -1
  168. package/dist/types/session/session-manager.d.ts +16 -3
  169. package/dist/types/session/session-storage.d.ts +1 -1
  170. package/dist/types/session/tool-choice-queue.d.ts +1 -1
  171. package/dist/types/setup/credential-auto-import.d.ts +1 -1
  172. package/dist/types/setup/credential-import.d.ts +1 -1
  173. package/dist/types/setup/model-onboarding-guidance.d.ts +1 -1
  174. package/dist/types/setup/provider-onboarding.d.ts +3 -2
  175. package/dist/types/skill-state/active-state.d.ts +12 -2
  176. package/dist/types/skills/index.d.ts +16 -0
  177. package/dist/types/skills/skills.test.d.ts +1 -0
  178. package/dist/types/slash-commands/helpers/fast-status-report.d.ts +1 -1
  179. package/dist/types/slash-commands/notify-command.test.d.ts +1 -0
  180. package/dist/types/task/executor.d.ts +6 -1
  181. package/dist/types/task/index.d.ts +1 -1
  182. package/dist/types/task/types.d.ts +1 -1
  183. package/dist/types/task/worktree.d.ts +1 -2
  184. package/dist/types/tools/ask-answer-registry.d.ts +2 -0
  185. package/dist/types/tools/ask-contract.d.ts +589 -0
  186. package/dist/types/tools/ask.d.ts +5 -477
  187. package/dist/types/tools/bash-command-fixup.d.ts +21 -0
  188. package/dist/types/tools/browser/tab-protocol.d.ts +1 -1
  189. package/dist/types/tools/computer-policy.d.ts +16 -0
  190. package/dist/types/tools/computer.d.ts +1 -11
  191. package/dist/types/tools/computer.enforcement.test.d.ts +1 -0
  192. package/dist/types/tools/descriptor-validation.d.ts +164 -0
  193. package/dist/types/tools/descriptors.d.ts +100 -0
  194. package/dist/types/tools/descriptors.test.d.ts +1 -0
  195. package/dist/types/tools/image-gen.d.ts +1 -1
  196. package/dist/types/tools/implementations.d.ts +42 -0
  197. package/dist/types/tools/index.d.ts +21 -47
  198. package/dist/types/tools/output-meta.d.ts +15 -0
  199. package/dist/types/tools/path-utils.d.ts +2 -0
  200. package/dist/types/tools/recipe/index.d.ts +2 -0
  201. package/dist/types/tools/recipe/render.d.ts +2 -2
  202. package/dist/types/tools/render-utils.d.ts +2 -4
  203. package/dist/types/tools/ssh.d.ts +2 -1
  204. package/dist/types/tools/telegram-send.d.ts +2 -1
  205. package/dist/types/tools/todo-contract.d.ts +15 -0
  206. package/dist/types/tools/todo-write.d.ts +9 -10
  207. package/dist/types/tools/tool-catalog.generated.d.ts +30 -0
  208. package/dist/types/tools/tool-result.d.ts +1 -1
  209. package/dist/types/utils/image-loading.d.ts +1 -1
  210. package/dist/types/utils/image-resize.d.ts +1 -1
  211. package/dist/types/utils/npm-registry.d.ts +3 -1
  212. package/dist/types/utils/pasted-image-loading.d.ts +1 -1
  213. package/dist/types/utils/prompt-suggestion.d.ts +1 -1
  214. package/dist/types/utils/title-generator.d.ts +1 -1
  215. package/dist/types/utils/tool-choice.d.ts +1 -1
  216. package/dist/types/web/kagi.d.ts +1 -1
  217. package/dist/types/web/search/index.d.ts +1 -1
  218. package/dist/types/web/search/provider.d.ts +1 -1
  219. package/dist/types/web/search/providers/anthropic.d.ts +1 -1
  220. package/dist/types/web/search/providers/base.d.ts +1 -1
  221. package/dist/types/web/search/providers/brave.d.ts +1 -1
  222. package/dist/types/web/search/providers/codex.d.ts +1 -1
  223. package/dist/types/web/search/providers/duckduckgo.d.ts +1 -1
  224. package/dist/types/web/search/providers/exa.d.ts +1 -1
  225. package/dist/types/web/search/providers/gemini.d.ts +1 -1
  226. package/dist/types/web/search/providers/insane.d.ts +1 -1
  227. package/dist/types/web/search/providers/jina.d.ts +1 -1
  228. package/dist/types/web/search/providers/kagi.d.ts +1 -1
  229. package/dist/types/web/search/providers/kimi.d.ts +1 -1
  230. package/dist/types/web/search/providers/parallel.d.ts +1 -1
  231. package/dist/types/web/search/providers/perplexity.d.ts +1 -1
  232. package/dist/types/web/search/providers/searxng.d.ts +1 -1
  233. package/dist/types/web/search/providers/synthetic.d.ts +1 -1
  234. package/dist/types/web/search/providers/tavily.d.ts +1 -1
  235. package/dist/types/web/search/providers/xai.d.ts +1 -1
  236. package/dist/types/web/search/providers/zai.d.ts +1 -1
  237. package/examples/sdk/README.md +1 -1
  238. package/package.json +12 -9
  239. package/scripts/build-sdk-package-smoke.ts +10 -3
  240. package/scripts/compile-args.ts +4 -0
  241. package/scripts/generate-tool-catalog.ts +503 -0
  242. package/scripts/verify-gjc-sdk-canonicalization.ts +17 -4
  243. package/src/ai-core-import-gate.test.ts +59 -0
  244. package/src/capability/mcp.ts +2 -0
  245. package/src/capability/skill.ts +12 -1
  246. package/src/cli/args.ts +1 -1
  247. package/src/cli/auth-broker-cli.ts +1 -1
  248. package/src/cli/auth-gateway-cli.ts +2 -2
  249. package/src/cli/file-processor.ts +1 -1
  250. package/src/cli/initial-message.ts +1 -1
  251. package/src/cli/list-models.ts +1 -1
  252. package/src/cli/mcp-cli.ts +5 -1
  253. package/src/cli/native-smoke.ts +47 -0
  254. package/src/cli/plugin-cli.ts +79 -7
  255. package/src/cli/setup-cli.ts +5 -3
  256. package/src/cli/skills-cli.ts +4 -3
  257. package/src/cli/update-cli.ts +132 -33
  258. package/src/cli.ts +22 -25
  259. package/src/commands/launch.ts +1 -1
  260. package/src/commands/mcp.ts +7 -0
  261. package/src/commands/plugin.ts +2 -0
  262. package/src/commands/update.ts +30 -1
  263. package/src/commit/agentic/agent.ts +1 -1
  264. package/src/commit/analysis/conventional.ts +2 -2
  265. package/src/commit/analysis/summary.ts +2 -2
  266. package/src/commit/changelog/generate.ts +2 -2
  267. package/src/commit/changelog/index.ts +1 -1
  268. package/src/commit/map-reduce/index.ts +1 -1
  269. package/src/commit/map-reduce/map-phase.ts +2 -2
  270. package/src/commit/map-reduce/reduce-phase.ts +2 -2
  271. package/src/commit/model-selection.ts +1 -1
  272. package/src/commit/pipeline.ts +1 -1
  273. package/src/commit/shared-llm.ts +2 -2
  274. package/src/commit/utils.ts +1 -1
  275. package/src/config/mcp-schema.json +6 -0
  276. package/src/config/model-discovery-manager.ts +1 -1
  277. package/src/config/model-equivalence.ts +1 -1
  278. package/src/config/model-profile-activation.ts +1 -1
  279. package/src/config/model-profiles.ts +3 -3
  280. package/src/config/model-registry.ts +225 -31
  281. package/src/config/model-resolver.ts +7 -1
  282. package/src/config/models-config-schema.ts +4 -1
  283. package/src/config/provider-ranking.ts +2 -0
  284. package/src/config/resolve-config-value.ts +11 -1
  285. package/src/config/settings-schema.ts +70 -0
  286. package/src/config/settings.ts +4 -2
  287. package/src/config/update-channel.ts +19 -0
  288. package/src/coordinator/contract.ts +3 -0
  289. package/src/coordinator-mcp/codex-handoff.ts +477 -0
  290. package/src/coordinator-mcp/codex-wake-publisher.ts +356 -0
  291. package/src/coordinator-mcp/question-gate-codec.ts +9 -2
  292. package/src/coordinator-mcp/server.ts +576 -3
  293. package/src/cursor.ts +1 -1
  294. package/src/debug/index.ts +13 -3
  295. package/src/debug/raw-sse-buffer.ts +1 -1
  296. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/register.ts +1 -1
  297. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +1 -1
  298. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/usage.ts +1 -1
  299. package/src/defaults/gjc-defaults.test.ts +23 -0
  300. package/src/defaults/gjc-defaults.ts +101 -74
  301. package/src/defaults/gjc-skills.generated.ts +103 -0
  302. package/src/discovery/helpers.ts +68 -10
  303. package/src/discovery/mcp-json.ts +3 -0
  304. package/src/edit/diff.ts +0 -2
  305. package/src/edit/modes/replace.ts +29 -12
  306. package/src/eval/js/context-manager.ts +1 -1
  307. package/src/eval/py/executor.ts +10 -0
  308. package/src/eval/types.ts +1 -1
  309. package/src/exa/factory.ts +1 -1
  310. package/src/exa/mcp-client.ts +1 -1
  311. package/src/exa/researcher.ts +1 -1
  312. package/src/exa/search.ts +1 -1
  313. package/src/exa/types.ts +1 -1
  314. package/src/exa/websets.ts +1 -1
  315. package/src/exec/bash-executor.ts +12 -1
  316. package/src/extensibility/custom-tools/loader.ts +13 -3
  317. package/src/extensibility/custom-tools/types.ts +1 -1
  318. package/src/extensibility/custom-tools/wrapper.ts +1 -1
  319. package/src/extensibility/extensions/compact-handler.ts +1 -1
  320. package/src/extensibility/extensions/loader.ts +2 -2
  321. package/src/extensibility/extensions/runner.ts +1 -1
  322. package/src/extensibility/extensions/types.ts +1 -1
  323. package/src/extensibility/extensions/wrapper.ts +1 -1
  324. package/src/extensibility/gjc-plugins/activation.ts +36 -44
  325. package/src/extensibility/gjc-plugins/compiler.ts +50 -0
  326. package/src/extensibility/gjc-plugins/constrained-hooks.ts +97 -72
  327. package/src/extensibility/gjc-plugins/index.ts +3 -1
  328. package/src/extensibility/gjc-plugins/injection.ts +26 -31
  329. package/src/extensibility/gjc-plugins/installer.ts +27 -13
  330. package/src/extensibility/gjc-plugins/lifecycle.ts +232 -34
  331. package/src/extensibility/gjc-plugins/metadata.ts +426 -0
  332. package/src/extensibility/gjc-plugins/migration.ts +274 -0
  333. package/src/extensibility/gjc-plugins/prompt-appendix.ts +58 -10
  334. package/src/extensibility/gjc-plugins/registry.ts +163 -8
  335. package/src/extensibility/gjc-plugins/runtime-adapters.ts +126 -4
  336. package/src/extensibility/gjc-plugins/schema.ts +6 -1
  337. package/src/extensibility/gjc-plugins/session-validation.ts +10 -0
  338. package/src/extensibility/gjc-plugins/state.ts +12 -2
  339. package/src/extensibility/gjc-plugins/subskill-authority.ts +242 -0
  340. package/src/extensibility/gjc-plugins/tools.ts +32 -8
  341. package/src/extensibility/gjc-plugins/types.ts +92 -1
  342. package/src/extensibility/hooks/runner.ts +2 -2
  343. package/src/extensibility/hooks/tool-wrapper.ts +1 -1
  344. package/src/extensibility/hooks/types.ts +1 -1
  345. package/src/extensibility/shared-events.ts +1 -1
  346. package/src/extensibility/skills.ts +18 -3
  347. package/src/gjc-runtime/managed-owner-admission.ts +12 -11
  348. package/src/gjc-runtime/managed-owner-supervisor.ts +3 -3
  349. package/src/gjc-runtime/session-state-sidecar.ts +33 -22
  350. package/src/gjc-runtime/tmux-owner-isolation.ts +16 -3
  351. package/src/gjc-runtime/tmux-sessions.ts +4 -3
  352. package/src/gjc-runtime/ultragoal-owner-loss-recovery.ts +14 -2
  353. package/src/hashline/hash.ts +3 -22
  354. package/src/hindsight/transcript.ts +1 -1
  355. package/src/hooks/mcp-delegate-host-context.ts +144 -0
  356. package/src/hooks/native-skill-hook.ts +29 -10
  357. package/src/internal-urls/artifact-protocol.ts +26 -8
  358. package/src/internal-urls/docs-index.generated.ts +8 -7
  359. package/src/internal-urls/local-protocol.ts +18 -3
  360. package/src/internal-urls/mcp-protocol.ts +7 -5
  361. package/src/internal-urls/memory-protocol.ts +8 -2
  362. package/src/internal-urls/skill-protocol.ts +12 -0
  363. package/src/internal-urls/types.ts +2 -0
  364. package/src/lsp/client.ts +8 -2
  365. package/src/lsp/render.ts +13 -3
  366. package/src/main.ts +36 -18
  367. package/src/memories/index.ts +1 -1
  368. package/src/memory-backend/index.ts +4 -4
  369. package/src/memory-backend/lazy-loading.test.ts +83 -0
  370. package/src/memory-backend/off-backend.ts +1 -16
  371. package/src/memory-backend/resolve.ts +77 -18
  372. package/src/memory-backend/service.ts +33 -0
  373. package/src/memory-backend/types.ts +4 -3
  374. package/src/modes/acp/acp-agent.ts +134 -13
  375. package/src/modes/components/assistant-message.ts +1 -1
  376. package/src/modes/components/message-frame.ts +1 -1
  377. package/src/modes/components/model-selector.ts +1 -1
  378. package/src/modes/components/session-observer-overlay.ts +1 -1
  379. package/src/modes/components/settings-selector.ts +22 -2
  380. package/src/modes/components/skill-message.ts +1 -1
  381. package/src/modes/controllers/command-controller.ts +30 -24
  382. package/src/modes/controllers/event-controller.ts +2 -2
  383. package/src/modes/controllers/input-controller.ts +1 -1
  384. package/src/modes/controllers/plan-mode-controller.ts +1 -1
  385. package/src/modes/controllers/runtime-mcp-command-controller.ts +39 -53
  386. package/src/modes/controllers/selector-controller.ts +3 -3
  387. package/src/modes/interactive-mode.ts +59 -18
  388. package/src/modes/print-mode.ts +1 -1
  389. package/src/modes/shared/agent-wire/event-contract.ts +1 -1
  390. package/src/modes/theme/theme.ts +65 -22
  391. package/src/modes/types.ts +3 -2
  392. package/src/modes/utils/context-usage.ts +1 -1
  393. package/src/modes/utils/injected-user-submission.ts +1 -1
  394. package/src/modes/utils/ui-helpers.ts +1 -1
  395. package/src/prompts/tools/todo-write.md +1 -1
  396. package/src/reminders/star-reminder.ts +1 -1
  397. package/src/rlm/python-tool.ts +1 -1
  398. package/src/runtime/boot-ordering.test.ts +151 -0
  399. package/src/runtime/lazy-registration.ts +193 -0
  400. package/src/runtime/lazy-service.test.ts +263 -0
  401. package/src/runtime/lazy-service.ts +262 -0
  402. package/src/runtime/network-prewarm-service.test.ts +48 -0
  403. package/src/runtime/network-prewarm-service.ts +59 -0
  404. package/src/runtime/optional-runtime-services.ts +41 -0
  405. package/src/runtime/workspace-tree-service.test.ts +61 -0
  406. package/src/runtime/workspace-tree-service.ts +43 -0
  407. package/src/runtime-credential-selector.ts +1 -1
  408. package/src/runtime-mcp/client.ts +58 -14
  409. package/src/runtime-mcp/config.test.ts +19 -0
  410. package/src/runtime-mcp/config.ts +7 -0
  411. package/src/runtime-mcp/http.test.ts +18 -0
  412. package/src/runtime-mcp/index.ts +4 -1
  413. package/src/runtime-mcp/loader.ts +3 -1
  414. package/src/runtime-mcp/manager-pool.test.ts +1604 -0
  415. package/src/runtime-mcp/manager.ts +920 -234
  416. package/src/runtime-mcp/pool-key.test.ts +178 -0
  417. package/src/runtime-mcp/pool-key.ts +292 -0
  418. package/src/runtime-mcp/pool.test.ts +605 -0
  419. package/src/runtime-mcp/pool.ts +983 -0
  420. package/src/runtime-mcp/tool-bridge.ts +41 -16
  421. package/src/runtime-mcp/transports/http.ts +10 -3
  422. package/src/runtime-mcp/transports/stdio.ts +2 -2
  423. package/src/runtime-mcp/types.ts +5 -1
  424. package/src/sdk/acp/adapter.ts +10 -5
  425. package/src/sdk/broker/discovery.ts +13 -1
  426. package/src/sdk/broker/ensure.ts +19 -0
  427. package/src/sdk/broker/lifecycle.ts +81 -13
  428. package/src/sdk/broker/process-incarnation.ts +2 -2
  429. package/src/sdk/bus/chat-daemon-control.ts +19 -8
  430. package/src/sdk/bus/index.ts +502 -298
  431. package/src/sdk/bus/notification-service.ts +10 -2
  432. package/src/sdk/bus/recent-activity.ts +20 -3
  433. package/src/sdk/bus/telegram-daemon-cli.ts +25 -1
  434. package/src/sdk/bus/telegram-daemon-contract.ts +10 -2
  435. package/src/sdk/bus/telegram-daemon-control.ts +3 -3
  436. package/src/sdk/bus/telegram-daemon.ts +115 -15
  437. package/src/sdk/host/host.ts +22 -7
  438. package/src/sdk/host/import-graph.test.ts +132 -0
  439. package/src/sdk/host/index.ts +2 -0
  440. package/src/sdk/host/reverse-leases.ts +23 -1
  441. package/src/sdk/host/sdk-surface-parity.test.ts +314 -0
  442. package/src/sdk/host/session-runtime.test.ts +212 -0
  443. package/src/sdk/host/session-runtime.ts +1111 -0
  444. package/src/sdk/host/surface-policy.ts +124 -0
  445. package/src/sdk/host/websocket-transport.lifecycle.test.ts +191 -0
  446. package/src/sdk/host/websocket-transport.ts +296 -0
  447. package/src/sdk/models.ts +1 -1
  448. package/src/sdk/session-directory.ts +2 -13
  449. package/src/sdk/session.ts +412 -246
  450. package/src/secrets/obfuscator.ts +1 -1
  451. package/src/session/agent-session.ts +540 -221
  452. package/src/session/agent-storage.ts +1 -1
  453. package/src/session/artifacts.ts +74 -0
  454. package/src/session/auth-storage.ts +2 -2
  455. package/src/session/cache-economics.ts +1 -1
  456. package/src/session/contribution-prep.ts +1 -1
  457. package/src/session/heap-eviction-artifacts.test.ts +379 -0
  458. package/src/session/history-storage.ts +19 -7
  459. package/src/session/internal/managed-session-scope.ts +128 -66
  460. package/src/session/internal/managed-session-storage.ts +205 -67
  461. package/src/session/messages.ts +1 -1
  462. package/src/session/session-dump-format.ts +1 -1
  463. package/src/session/session-manager.ts +208 -28
  464. package/src/session/session-storage.ts +20 -9
  465. package/src/session/tool-choice-queue.ts +1 -1
  466. package/src/setup/credential-auto-import.ts +1 -1
  467. package/src/setup/credential-import.ts +1 -1
  468. package/src/setup/model-onboarding-guidance.ts +1 -1
  469. package/src/setup/provider-onboarding.ts +22 -9
  470. package/src/setup/provider-presets.json +3 -1
  471. package/src/skill-state/active-state.ts +49 -8
  472. package/src/skills/index.ts +36 -0
  473. package/src/skills/skills.test.ts +89 -0
  474. package/src/slash-commands/builtin-registry.ts +32 -30
  475. package/src/slash-commands/helpers/context-report.ts +1 -1
  476. package/src/slash-commands/helpers/fast-status-report.ts +1 -1
  477. package/src/slash-commands/helpers/mcp.ts +9 -26
  478. package/src/slash-commands/helpers/usage-report.ts +1 -1
  479. package/src/slash-commands/notify-command.test.ts +56 -0
  480. package/src/ssh/connection-manager.ts +10 -7
  481. package/src/task/executor.ts +7 -1
  482. package/src/task/index.ts +4 -2
  483. package/src/task/types.ts +1 -1
  484. package/src/task/worktree.ts +14 -2
  485. package/src/tools/ask-answer-registry.ts +3 -0
  486. package/src/tools/ask-contract.ts +515 -0
  487. package/src/tools/ask.ts +73 -505
  488. package/src/tools/ast-edit.ts +11 -4
  489. package/src/tools/ast-grep.ts +10 -3
  490. package/src/tools/bash-command-fixup.ts +11 -2
  491. package/src/tools/bash-interactive.ts +12 -1
  492. package/src/tools/browser/attach.ts +9 -5
  493. package/src/tools/browser/tab-protocol.ts +1 -1
  494. package/src/tools/computer-policy.ts +54 -0
  495. package/src/tools/computer.enforcement.test.ts +309 -0
  496. package/src/tools/computer.ts +132 -102
  497. package/src/tools/descriptor-validation.ts +45 -0
  498. package/src/tools/descriptors.test.ts +818 -0
  499. package/src/tools/descriptors.ts +502 -0
  500. package/src/tools/eval.ts +1 -1
  501. package/src/tools/fetch.ts +16 -3
  502. package/src/tools/find.ts +14 -4
  503. package/src/tools/fs-cache-invalidation.ts +14 -5
  504. package/src/tools/image-gen.ts +3 -1
  505. package/src/tools/implementations.ts +43 -0
  506. package/src/tools/index.ts +88 -197
  507. package/src/tools/output-meta.ts +17 -1
  508. package/src/tools/path-utils.ts +8 -1
  509. package/src/tools/read.ts +13 -2
  510. package/src/tools/recipe/index.ts +3 -0
  511. package/src/tools/render-utils.ts +2 -4
  512. package/src/tools/resolve.ts +1 -1
  513. package/src/tools/search.ts +20 -1
  514. package/src/tools/ssh.ts +2 -1
  515. package/src/tools/subagent.ts +0 -1
  516. package/src/tools/telegram-send.ts +8 -6
  517. package/src/tools/todo-contract.ts +72 -0
  518. package/src/tools/todo-write.ts +37 -44
  519. package/src/tools/tool-catalog.generated.ts +2695 -0
  520. package/src/tools/tool-result.ts +1 -1
  521. package/src/utils/clipboard.ts +10 -3
  522. package/src/utils/commit-message-generator.ts +2 -2
  523. package/src/utils/file-mentions.ts +10 -3
  524. package/src/utils/image-loading.ts +1 -1
  525. package/src/utils/image-resize.ts +1 -1
  526. package/src/utils/npm-registry.ts +15 -12
  527. package/src/utils/pasted-image-loading.ts +1 -1
  528. package/src/utils/prompt-suggestion.ts +1 -1
  529. package/src/utils/title-generator.ts +1 -1
  530. package/src/utils/tool-choice.ts +2 -2
  531. package/src/web/kagi.ts +1 -1
  532. package/src/web/parallel.ts +1 -1
  533. package/src/web/search/index.ts +1 -1
  534. package/src/web/search/provider.ts +1 -1
  535. package/src/web/search/providers/anthropic.ts +7 -5
  536. package/src/web/search/providers/base.ts +1 -1
  537. package/src/web/search/providers/brave.ts +1 -1
  538. package/src/web/search/providers/codex.ts +1 -1
  539. package/src/web/search/providers/duckduckgo.ts +1 -1
  540. package/src/web/search/providers/exa.ts +1 -1
  541. package/src/web/search/providers/gemini.ts +2 -2
  542. package/src/web/search/providers/insane.ts +1 -1
  543. package/src/web/search/providers/jina.ts +1 -1
  544. package/src/web/search/providers/kagi.ts +1 -1
  545. package/src/web/search/providers/kimi.ts +1 -1
  546. package/src/web/search/providers/parallel.ts +1 -1
  547. package/src/web/search/providers/perplexity.ts +1 -1
  548. package/src/web/search/providers/searxng.ts +1 -1
  549. package/src/web/search/providers/synthetic.ts +1 -1
  550. package/src/web/search/providers/tavily.ts +1 -1
  551. package/src/web/search/providers/xai.ts +1 -1
  552. package/src/web/search/providers/zai.ts +1 -1
  553. package/src/workspace-tree.ts +20 -2
package/CHANGELOG.md CHANGED
@@ -1,6 +1,48 @@
1
1
  # Changelog
2
2
 
3
3
  ## [Unreleased]
4
+ ### Fixed
5
+
6
+ - `todo_write` and `ask` no longer reject valid calls before the tool loads. Both tools carried two independent copies of their raw-argument rules — one in the loaded tool, one in the cold descriptor registry that runs first — and the deferred copies had drifted: `todo_write`'s dropped the `content` synonym for `task` and the `complete`/`completed` aliases for `done`, accepted targetless `complete` entries the loaded tool rejects, and returned every rejection without its correction code, so the model saw a bare "raw arguments rejected before coercion" with nothing to fix and retried the same shape until the turn died. Both also rejected the harness's own injected `_i` intent field, failing any call carrying it with an unknown-root-key error the model could not repair. `todo_write` validation now lives in a single shared contract module (`tools/todo-contract.ts`) used by both paths, and both tools tolerate `_i` at the root while still rejecting genuinely unknown keys.
7
+ - Managed scope prepare and legacy-local resume no longer report success while group/other-readable descendants remain on disk (e.g. mode `0o036`/`0o644`): prepare uses a mode-only walk (not `snapshotManagedTree("")`, which races concurrent writers and broke `/move`) to detect drift, re-secures with apply+verify, and retries once; legacy-local capture uses the same resecure helper.
8
+ - ACP `session/request_permission` responses are now normalized from the spec-shaped `RequestPermissionResponse` (`{ outcome: { outcome, optionId } }`) into the SDK's flat permission-decision contract before reaching the permission provider. Standards-compliant ACP clients such as Paseo can now authorize permission-gated shell/eval and destructive file operations (`bash`, `monitor`, `eval`, `delete`, `move`, and `edit` only for delete/move operations) without an invalid-response failure; `write` and ordinary edits remain ungated. Nested and flat selected/cancelled responses are accepted by reconstructing the canonical SDK decision fields, while malformed or unknown decisions fail closed.
9
+
10
+ ### Added
11
+
12
+ - Added first-class `cline-pass` and `commandcode-goat` provider presets with documented API endpoints, environment-variable credentials, non-hardcoded live model discovery from models.dev and the Command Code Provider API, and prefix-based Claude routing.
13
+ - Added lease-backed MCP connection pooling with typed recovery, shared HTTP/SSE sessions, per-lease callback demultiplexing, and authorization binding scopes that keep credential secrets out of pool keys.
14
+ - Added plugin registry v2 as the single execution authority for plugin tools, subskills, and prompt appendices, with digest verification at final use.
15
+ - Added module-trace and process-tree RSS verification harnesses for startup-memory regressions.
16
+
17
+ ### Changed
18
+
19
+ - Deferred notification adapters, native bindings, provider construction, tools, skills, eval, session artifacts, and history storage until their feature paths are used, reducing the CLI startup module graph without changing default behavior.
20
+ - Split SDK session hosting into a transport-neutral runtime and lazy notification adapters.
21
+
22
+ ### Fixed
23
+
24
+ - `notifications-topic-registry.test.ts` pins `DAEMON_GENERATION` at 54 after #3965 (was stale at 53; Dev CI run 31133356543).
25
+ - `smithery-env-trust.test.ts` no longer awaits hung probe pipes past a hard per-attempt deadline: minimal child env, `stdin: "ignore"`, SIGKILL + settled race, and up to 2 timeout-only retries. Fixes the inherited-config case that hit exactly 60001ms on Dev CI run 31133356543 after kill-at-45s left `Promise.all` on stdout/stderr unresolved. Assertions unchanged.
26
+ - A Telegram notification daemon that dies without a clean shutdown no longer keeps advertising itself as the ready owner. Ownership was surrendered only by `releaseDaemonOwnership`, which runs after a fully quiesced and fully persisted shutdown; an uncaught error, a failed final topic-registry persist, or a signal left `ownershipPhase: "ready"` and a matching ownership lock on disk, and every later reader attached to a process that no longer existed. Observed in the field: a daemon wrote one heartbeat 559 ms after readiness, died on an uncaught `shared topic authority unavailable` error, and was still recorded as ready eight hours and seventeen crashes later, with no notification delivered in between. The daemon-internal entrypoint now records `stoppedAt` on the way out — from its own `finally` and from a `postmortem` hook that also covers the fatal paths that call `process.exit()` without unwinding — fenced on full owner identity so a successor's state is never touched, and leaving the ownership lock for the existing reclaim path to adjudicate. `isFreshLiveOwner` already treats `stoppedAt` as disqualifying, so recovery no longer depends on a pid liveness check that a recycled pid can defeat.
27
+ - Under the default configuration (no explicit `retry.*` keys), message-only first-event stream timeouts — the wrapped `Error: Provider stream timed out while waiting for the first event`, the bare canonical form, and the per-provider `Anthropic stream timed out...` / `OpenAI responses stream timed out...` variants — were not retried once the run had observable activity (e.g. a prior tool execution in the same turn), so the turn surfaced the timeout instead of retrying like other provider non-critical errors. Content-free message-only watchdog prose is now admitted in the bare-default first-event retry gate like the typed path; visible content, conflicting structured facts, near-miss prose, extension-hook participation, Alibaba/Kimi terminal policy, and ollama-cloud bounded retry remain fail-closed.
28
+ - `smithery-env-trust.test.ts` warms the Bun probe child in `beforeAll` and kills stalled spawns at a 45s budget so the first case no longer absorbs cold-start compile cost into its per-test timeout under shard contention (observed 60001ms timeout after the 60s cap on #3969 exact-head CI). Assertions unchanged.
29
+ - `smithery-env-trust.test.ts` raises the per-test child-process timeout from 30s to 60s so CI contention cannot fail at the previous 30s cap (Dev CI run 31128319216 timed out at 30004ms).
30
+ - Headless coordinator `ralplan` approval gates no longer stall with `missing_runtime_turn` or reject a direct answer with `resource_gone`. Canonical subagents keep workflow-gate emitters local instead of replacing the endpoint owner, the coordinator projects the ask-shaped `ralplan/approval` contract, and provisional notification policy retains gates without publishing them until activation. Direct-control completion is fenced to the exact source generation and preserves exact terminal proof across replacement races.
31
+ - `smithery-env-trust.test.ts` now sets a 30s per-test timeout on all five child-process-spawning trust-boundary tests, preventing CI flake when the Bun child-process spawn + env-file-parse chain exceeds the default 5s budget under parallel shard contention (Dev CI run 31102063678).
32
+ - Fire-and-forget agent continuations (auto-compaction retries, queued follow-ups) racing a still-busy agent no longer spin on a fixed 100ms reschedule forever: they now back off exponentially (100ms doubling up to 5s) and give up after 50 attempts (~4 minutes) with an explicit warn, fixing a runaway loop observed as 10,742 reschedules over 21 minutes in a single session.
33
+ - A Telegram daemon no longer crashes when the shared topic authority is momentarily unavailable. The liveness heartbeat renewed a session's topic lease through a single-argument `.then()` whose rejection escaped to the process-level fatal handler (observed as repeated `Uncaught exception` / `Unhandled rejection: shared topic authority unavailable` deaths while the authority was down); it now reports the failure and retries on the next heartbeat. A startup topic-registry load failure is likewise reported and the daemon continues with an empty registry instead of dying before it starts serving. The four `catch { throw }` authority-failure sites now preserve the underlying error as `cause`, and the compensation fence stops retrying a failed persist every 250ms forever (it gives up after ~10s and lets the next scan/session pass retry), so a shutdown can quiesce instead of spinning. `DAEMON_GENERATION` bumped to 55.
34
+ - ACP `session/prompt` no longer hangs forever when the agent continues mid-prompt. Any continuation (todo reminder, TTSR resume, auto-continue) re-enters the agent loop and emits a second `agent_start`, which shifted the already-empty pending queue and overwrote the live prompt correlation with `undefined`. The prompt's `agent_end` then carried no correlation, `terminalizePrompt` never ran, and every ACP client (Paseo, Zed, JetBrains Air) waited until the 30-minute `sdk.promptDeadlineMs` before failing with `prompt_deadline_exceeded` — despite the answer having already streamed. `agent_start` now claims a pending correlation only when the session has no active one, and the todo-completion continuation holds the predecessor `agent_end` like every other continuation call site (#3949).
35
+ - ACP `session/prompt` no longer hangs forever when the agent continues mid-prompt. Any continuation (todo reminder, TTSR resume, auto-continue) re-enters the agent loop and emits a second `agent_start`, which shifted the already-empty pending queue and overwrote the live prompt correlation with `undefined`. The prompt's `agent_end` then carried no correlation, `terminalizePrompt` never ran, and every ACP client (Paseo, Zed, JetBrains Air) waited until the 30-minute `sdk.promptDeadlineMs` before failing with `prompt_deadline_exceeded` — despite the answer having already streamed. `agent_start` now claims a pending correlation only when the session has no active one, and the todo-completion continuation holds the predecessor `agent_end` like every other continuation call site (#3949).
36
+ - ACP skills, slash commands, and initial session state now actually reach the client. `session/new`, `session/resume`, and `session/fork` scheduled their bootstrap `session/update` notifications on a fixed 50 ms timer taken *before* the session-state queries ran, so on any host where those queries took longer the notifications overtook the response that carries the `sessionId` — naming a session the client had never seen, which clients drop. Measured against Paseo: `available_commands_update` arrived 27 ms *before* the `session/new` response, so the skill list was silently discarded. Bootstrap is now scheduled only once the response payload is ready, matching the ACP session-setup sequence, which permits updates before the response only for `session/load` (#3962).
37
+ - ACP clients can now render the user's own message and its image attachments. A live prompt turn emitted no `user_message_chunk` at all — that update only existed on the `session/load` replay path — so an attached image reached the model but never appeared in the client transcript. `session/prompt` now echoes the prompt's text and image content blocks as `user_message_chunk` before dispatching the turn (#3962).
38
+ - An oversize ACP prompt now fails with a typed, actionable error instead of killing the session. The SDK WebSocket server caps a request frame at 256 KiB (`REQUEST_FRAME_BYTES`) and answers an oversize frame with `CloseCode::Size`, which surfaced to clients as an opaque `-32603 connection_closed` mid-turn; a 244 KiB PNG reproduced it while a 59 KiB PNG succeeded. The prompt is now measured inside its real `control_request` envelope and rejected up front with `-32602` naming the actual and permitted size (#3962).
39
+ - ACP `session/cancel` and `session/close` now settle the pending `session/prompt` with `stopReason: "cancelled"` instead of surfacing a transport error. A cancel that landed during prompt preflight rejected with `busy`, and `session/close` rejected with `connection_closed`, both of which clients display as spurious errors for the user's own action. The spec requires agents to "catch these errors and return the semantically meaningful `cancelled` stop reason"; involuntary teardown still rejects (#3962).
40
+ - GJC no longer advertises `mcpCapabilities.sse`. The legacy MCP HTTP+SSE transport (spec 2024-11-05, deprecated) is not implemented: an `sse` config is routed to the Streamable HTTP transport, which never performs the required `endpoint`-event handshake, so a genuine legacy-SSE server offered by an ACP client could not connect. Locally configured `sse` entries still resolve through `createTransport` and keep working (#3962).
41
+ - Reverse ACP responses (`fs/read_text_file`, terminal output) are now measured as the full serialized frame rather than only the inner `result`. A near-limit result passed the 256 KiB check and then tripped the WebSocket total-frame ceiling, closing the whole session instead of raising the typed `payload_too_large` (#3962).
42
+ - `todo_write` now accepts the synonyms models actually emit instead of failing the tool call mid-turn: `complete`/`completed` for the `done` operation, and `content` for `task`. The operation sets a status spelled `completed` and stores the task as `content`, so the schema's own vocabulary invited both mistakes. The accepted key set and the requirement that a completion name a task or phase are unchanged (#3962).
43
+
44
+ - Managed session scope failures are no longer misreported as `binding_invalid`. An over-budget managed-tree snapshot now surfaces as `capacity_exceeded` carrying the native `content_too_large` message instead of pointing operators at a byte-for-byte canonical binding file, and `migration_busy` is preserved from every classification path rather than only one of the three.
45
+ ## [0.12.15] - 2026-08-06
4
46
 
5
47
  ## [0.12.14] - 2026-08-06
6
48
 
@@ -9,9 +51,28 @@
9
51
  ### Fixed
10
52
  - ACP session configuration now emits the spec-defined `category` field on the Mode, Model, and Thinking select options (`mode`, `model`, `thought_level`), so standards-compliant ACP clients such as Paseo discover models, modes, and thinking levels instead of an empty model picker (#3922).
11
53
  - The ACP session model catalog is now filtered to active providers via `providers.list/active`, falling back to the full catalog on older session hosts, so ACP clients no longer list models for providers without usable credentials (#3922).
54
+ - Workflow-gate asks (ralplan approval, deep-interview questions) now surface through the ACP permission channel when the client does not advertise ACP form elicitation, so plain ACP clients such as Paseo can answer selector gates; free-text asks remain unanswered and the richer `ui` channel stays preferred when advertised (#3925).
55
+ - ACP `session/prompt` no longer hangs forever when the agent continues mid-prompt. Any continuation (todo reminder, TTSR resume, auto-continue) re-enters the agent loop and emits a second `agent_start`, which shifted the already-empty pending queue and overwrote the live prompt correlation with `undefined`. The prompt's `agent_end` then carried no correlation, `terminalizePrompt` never ran, and every ACP client (Paseo, Zed, JetBrains Air) waited until the 30-minute `sdk.promptDeadlineMs` before failing with `prompt_deadline_exceeded` — despite the answer having already streamed. `agent_start` now claims a pending correlation only when the session has no active one, and the todo-completion continuation holds the predecessor `agent_end` like every other continuation call site.
56
+ - ACP clients can now render the user's own message and its image attachments. A live prompt turn emitted no `user_message_chunk` at all — that update only existed on the `session/load` replay path — so an attached image reached the model but never appeared in the client transcript. `session/prompt` now echoes the prompt's text and image content blocks as `user_message_chunk` before dispatching the turn.
57
+ - An oversize ACP prompt now fails with a typed, actionable error instead of killing the session. The SDK WebSocket server caps a request frame at 256 KiB (`REQUEST_FRAME_BYTES`) and answers an oversize frame with `CloseCode::Size`, which surfaced to clients as an opaque `-32603 connection_closed` mid-turn; a 244 KiB PNG reproduced it while a 59 KiB PNG succeeded. The prompt is now measured inside its real `control_request` envelope and rejected up front with `-32602` naming the actual and permitted size.
58
+ - ACP `session/cancel` and `session/close` now settle the pending `session/prompt` with `stopReason: "cancelled"` instead of surfacing a transport error. A cancel that landed during prompt preflight rejected with `busy`, and `session/close` rejected with `connection_closed`, both of which clients display as spurious errors for the user's own action. The spec requires agents to "catch these errors and return the semantically meaningful `cancelled` stop reason"; involuntary teardown still rejects.
59
+ - GJC no longer advertises `mcpCapabilities.sse`. The legacy MCP HTTP+SSE transport (spec 2024-11-05, deprecated) is not implemented: an `sse` config is routed to the Streamable HTTP transport, which never performs the required `endpoint`-event handshake, so a genuine legacy-SSE server offered by an ACP client could not connect. Locally configured `sse` entries still resolve through `createTransport` and keep working.
60
+ - Reverse ACP responses (`fs/read_text_file`, terminal output) are now measured as the full serialized frame rather than only the inner `result`. A near-limit result passed the 256 KiB check and then tripped the WebSocket total-frame ceiling, closing the whole session instead of raising the typed `payload_too_large`.
61
+ - `todo_write` now accepts `complete` and `completed` as aliases for the `done` operation. The status this operation sets is spelled `completed`, so models repeatedly emitted `op: "complete"` and hit a hard mid-turn tool failure; the operation vocabulary is otherwise unchanged and a completion still requires a task or phase target.
62
+ ||||||| parent of d5f44548e (fix(todo): accept the operation and field synonyms models actually emit)
63
+ - ACP `session/prompt` no longer hangs forever when the agent continues mid-prompt. Any continuation (todo reminder, TTSR resume, auto-continue) re-enters the agent loop and emits a second `agent_start`, which shifted the already-empty pending queue and overwrote the live prompt correlation with `undefined`. The prompt's `agent_end` then carried no correlation, `terminalizePrompt` never ran, and every ACP client (Paseo, Zed, JetBrains Air) waited until the 30-minute `sdk.promptDeadlineMs` before failing with `prompt_deadline_exceeded` — despite the answer having already streamed. `agent_start` now claims a pending correlation only when the session has no active one, and the todo-completion continuation holds the predecessor `agent_end` like every other continuation call site.
64
+ - ACP clients can now render the user's own message and its image attachments. A live prompt turn emitted no `user_message_chunk` at all — that update only existed on the `session/load` replay path — so an attached image reached the model but never appeared in the client transcript. `session/prompt` now echoes the prompt's text and image content blocks as `user_message_chunk` before dispatching the turn.
65
+ - An oversize ACP prompt now fails with a typed, actionable error instead of killing the session. The SDK WebSocket server caps a request frame at 256 KiB (`REQUEST_FRAME_BYTES`) and answers an oversize frame with `CloseCode::Size`, which surfaced to clients as an opaque `-32603 connection_closed` mid-turn; a 244 KiB PNG reproduced it while a 59 KiB PNG succeeded. The prompt is now measured inside its real `control_request` envelope and rejected up front with `-32602` naming the actual and permitted size.
66
+ - ACP `session/cancel` and `session/close` now settle the pending `session/prompt` with `stopReason: "cancelled"` instead of surfacing a transport error. A cancel that landed during prompt preflight rejected with `busy`, and `session/close` rejected with `connection_closed`, both of which clients display as spurious errors for the user's own action. The spec requires agents to "catch these errors and return the semantically meaningful `cancelled` stop reason"; involuntary teardown still rejects.
67
+ - GJC no longer advertises `mcpCapabilities.sse`. The legacy MCP HTTP+SSE transport (spec 2024-11-05, deprecated) is not implemented: an `sse` config is routed to the Streamable HTTP transport, which never performs the required `endpoint`-event handshake, so a genuine legacy-SSE server offered by an ACP client could not connect. Locally configured `sse` entries still resolve through `createTransport` and keep working.
68
+ - Reverse ACP responses (`fs/read_text_file`, terminal output) are now measured as the full serialized frame rather than only the inner `result`. A near-limit result passed the 256 KiB check and then tripped the WebSocket total-frame ceiling, closing the whole session instead of raising the typed `payload_too_large`.
69
+ - `todo_write` now accepts `complete` and `completed` as aliases for the `done` operation. The status this operation sets is spelled `completed`, so models repeatedly emitted `op: "complete"` and hit a hard mid-turn tool failure; the operation vocabulary is otherwise unchanged and a completion still requires a task or phase target.
12
70
 
13
71
  - `todo_write` now rejects malformed raw arguments with bounded, authority-controlled correction codes instead of a generic rejection: unknown root keys, unknown operation-entry keys, done/drop entries without a task or phase target, and unknown init list-entry keys each surface a fixed message naming the accepted shape without echoing the offending input, while recoverable payloads keep the passthrough/coercion path and the existing ask-tool codes are untouched (#3916).
14
72
  - The Alibaba Token Plan onboarding preset and `alibaba-token-plan-qwen-deepseek` profile now reference the provider-supported `qwen3.8-max` model id instead of `qwen-3.8-max`, preventing the built-in profile from selecting an HTTP 400 unsupported model (#3909).
73
+ - Restored computer batch failure metadata, timeout handling, and coordinate bounds validation to match single-action dispatch.
74
+ - Preserved idempotent deletion of unknown SDK sessions and fixed concurrent `/notify on` startup after native loading became lazy.
75
+ - Kept deferred tool descriptors aligned with eager availability guards for headless asks, subagent checkpoints, IRC, GitHub, and cron.
15
76
  - `/model` reasoning menu header now shows the highlighted reasoning level (not the model id), seeds the cursor from the role badge when re-editing the same model, and uses a provider-neutral label for `max` instead of "Opus maximum reasoning" (#3847).
16
77
  - Resume listing now reverse-scans for buried but canonically valid `header_patch` titles, so a persisted manual title remains visible in the picker after later transcript growth instead of falling back to an empty/line-1 projection (#3633).
17
78
  - Custom OpenAI-compatible models whose wire id is namespaced (for example `cline-pass/deepseek-v4-flash`) now inherit capability metadata from the bundled leaf model when `contextWindow` / `maxTokens` are omitted, instead of silently falling back to the generic 128K / 16K defaults. True unknown leaf ids still default; explicit limits remain authoritative (#3856).
@@ -20,7 +81,7 @@
20
81
  - `gjc models` is no longer treated as a free-form agent prompt. The mistaken subcommand spelling now routes to the existing `--list-models` listing path so a nested bash-tool invocation cannot recursively spawn unbounded GJC agents (#3857).
21
82
  - Always-apply and rulebook rules are injected on the default system prompt path again. Discovery still loaded `.gjc/rules/`, `~/.gjc/agent/rules/`, and sticky `RULES.md`, but only `custom-system-prompt.md` rendered them, so normal sessions silently dropped the content while AGENTS.md in the same directory continued to work (#3859).
22
83
  - Made Telegram reference-client capability diagnostics safe for TUI embedding.
23
- - Custom `anthropic-messages` providers can now configure `compat.promptCacheMode` (`none`, `explicit`, or `automatic`) and `compat.supportsLongCacheRetention` at provider, model, and model-override levels. This makes the automatic Claude-family caching default safely overridable for compatible endpoints that require block-level cache markers or do not support 1-hour retention.
84
+ - Custom `anthropic-messages` providers can now configure `compat.promptCacheMode` (`none`, `explicit`, or `automatic`) and `compat.supportsLongCacheRetention` at provider, model, and model-override levels. Canonical Anthropic defaults to automatic caching, while non-canonical Claude-family endpoints default to gateway-safe explicit block markers and can opt into top-level automatic caching when supported.
24
85
  - A Telegram notification daemon whose reconciliation pass fails no longer exits. The pass persists through the shared topic authority, and a momentarily unavailable authority (lock contention or a rejected compare-and-set) rejected out of both the scan timer and the run loop into the process-level fatal handler, killing the owner. Every session topic was then left behind as an unarchived shell that answers nothing — including for sessions that were still live and lost their notifications. The pass now reports the failure and the next scan interval retries it; the queue-flush timer is guarded the same way.
25
86
  - MiniMax M3 preset and profile ids canonicalized to `MiniMax-M3` (issue #3896): the `minimax` / `minimax-cn` onboarding presets and the `minimax-eco` / `minimax-medium` / `minimax-pro` builtin model profiles no longer reference the removed lowercase `minimax-m3` / `minimax-v3` first-class catalog ids.
26
87
  - Deep-interview round identity and input caps are now Unicode-canonical. Question text, selected options, and custom input are canonicalized to NFC before hashing and persisting, so the same Korean answer arriving in decomposed form (macOS-sourced pastes and some IME/clipboard paths emit NFD) no longer produces a second `answer_hash` — the documented append-or-merge no-op holds, and intent-review approval evidence still matches the user's recorded answer. Free-text caps are measured on the NFC form, so decomposed Hangul is charged the same character budget as the identical composed text instead of 2–3 code points per syllable (#3871).
@@ -39,6 +100,9 @@
39
100
  ### Added
40
101
 
41
102
  - Added a verified, copy-installable `ooo` bridge example: `ooo interview` renders Ouroboros MCP questions in GJC, serializes startup and follow-up answers by session ID, cancellation-fences late settlement, disposes state on GJC session changes and `/clear`, drops queued predecessor-generation starts, releases dead transports and controls, honors `OUROBOROS_CLI`, and loads dependency-free in compiled binaries (#3803).
103
+ - Added a scheduled and manually dispatchable nightly deployment cycle that verifies the full `main` graph, stages one immutable source-bound prerelease version across npm/Cargo/native surfaces, publishes the complete package set under the npm `nightly` dist-tag without moving `latest`, and creates a matching GitHub prerelease with binaries and closed package evidence.
104
+
105
+ - `gjc update` now accepts `--channel stable|nightly` to switch release channels in place, and a new **Update Channel** settings entry (`startup.updateChannel`, stable by default) picks the default channel for both `gjc update` and the interactive startup update check. Channel resolution maps to the npm `latest`/`nightly` dist-tags without ever pointing nightly at `latest`, version comparison now orders nightly prereleases with real semver semantics instead of NaN-falling into a forced reinstall, and installed-version verification recognizes prerelease version strings reported by nightly binaries.
42
106
 
43
107
  ### Fixed
44
108
 
@@ -0,0 +1 @@
1
+ export {};
@@ -10,6 +10,8 @@ export interface MCPServer {
10
10
  /** Whether explicit runtime MCP consumers should connect automatically (default: true) */
11
11
  autoload?: boolean;
12
12
  /** Connection timeout in milliseconds */
13
+ /** MCP connection pool identity mode; defaults to one lease per session. */
14
+ sharing?: "per-session" | "shared";
13
15
  timeout?: number;
14
16
  /** Command to run (for stdio transport) */
15
17
  command?: string;
@@ -16,6 +16,14 @@ export interface SkillFrontmatter {
16
16
  hide?: boolean;
17
17
  [key: string]: unknown;
18
18
  }
19
+ /**
20
+ * Metadata-only skill handle. Callers must opt in to reading the body through
21
+ * `loadContent`; discovery never loads the body while building this metadata.
22
+ */
23
+ export interface SkillDescriptor {
24
+ readonly metadata: Omit<Skill, "content" | "loadContent">;
25
+ readonly loadContent: () => Promise<string>;
26
+ }
19
27
  /**
20
28
  * A skill that provides specialized knowledge or workflows.
21
29
  */
@@ -25,7 +33,9 @@ export interface Skill {
25
33
  /** Absolute path to skill file */
26
34
  path: string;
27
35
  /** Skill content (markdown) */
28
- content: string;
36
+ /** Lazily load the markdown body when the caller needs prompt content. */
37
+ loadContent?: () => Promise<string>;
38
+ content?: string;
29
39
  /** Parsed frontmatter */
30
40
  frontmatter?: SkillFrontmatter;
31
41
  /** Source level */
@@ -1,4 +1,4 @@
1
- import { type Effort } from "@gajae-code/ai";
1
+ import { type Effort } from "@gajae-code/ai/core";
2
2
  export type Mode = "text" | "json" | "acp";
3
3
  export interface Args {
4
4
  cwd?: string;
@@ -1,4 +1,4 @@
1
- import type { ImageContent } from "@gajae-code/ai";
1
+ import type { ImageContent } from "@gajae-code/ai/core";
2
2
  export interface ProcessedFiles {
3
3
  text: string;
4
4
  images: ImageContent[];
@@ -1,4 +1,4 @@
1
- import type { ImageContent } from "@gajae-code/ai";
1
+ import type { ImageContent } from "@gajae-code/ai/core";
2
2
  import type { Args } from "./args";
3
3
  export interface InitialMessageInput {
4
4
  parsed: Args;
@@ -16,6 +16,7 @@ export interface MCPCommandArgs {
16
16
  header?: string[];
17
17
  cwd?: string;
18
18
  timeout?: number;
19
+ sharing?: "per-session" | "shared";
19
20
  };
20
21
  cwd?: string;
21
22
  }
@@ -0,0 +1,12 @@
1
+ import type { WindowsJobMemoryProbeResult } from "@gajae-code/natives";
2
+ export type MemoryGuardNativeSmokeLoad = () => Record<string, unknown>;
3
+ export type MemoryGuardNativeSmokeReceipt = {
4
+ api: "memory_guard_windows_job_probe_v1";
5
+ source: "pi_natives";
6
+ result: WindowsJobMemoryProbeResult;
7
+ };
8
+ export declare function runMemoryGuardNativeSmoke(options?: {
9
+ loadNative?: MemoryGuardNativeSmokeLoad;
10
+ writeStdout?: (text: string) => void;
11
+ }): void;
12
+ export declare function runNativeSmokeTest(): Promise<void>;
@@ -10,6 +10,7 @@ export interface PluginCommandArgs {
10
10
  flags: {
11
11
  json?: boolean;
12
12
  fix?: boolean;
13
+ migratePlugins?: boolean;
13
14
  force?: boolean;
14
15
  dryRun?: boolean;
15
16
  local?: boolean;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Handles `gjc setup [component]` to install the normal defaults or optional feature dependencies.
5
5
  */
6
- import { AuthStorage, SqliteAuthCredentialStore } from "@gajae-code/ai";
6
+ import { AuthStorage, SqliteAuthCredentialStore } from "@gajae-code/ai/core";
7
7
  import { runExternalCredentialAutoImport } from "../setup/credential-auto-import";
8
8
  export type SetupComponent = "claude" | "codex" | "credentials" | "defaults" | "hermes" | "hooks" | "provider" | "python" | "stt";
9
9
  export interface SetupCommandArgs {
@@ -1,4 +1,10 @@
1
- import { type Installer, type NpmRegistryLookupOptions } from "../utils/npm-registry";
1
+ import { type UpdateChannel } from "../config/update-channel";
2
+ import { type NpmRegistryLookupOptions } from "../utils/npm-registry";
3
+ export interface UpdateCommandOptions {
4
+ force: boolean;
5
+ check: boolean;
6
+ channel?: UpdateChannel;
7
+ }
2
8
  interface ReleaseInfo {
3
9
  tag: string;
4
10
  version: string;
@@ -40,10 +46,7 @@ export interface BinaryReplacementOptions {
40
46
  * Parse update subcommand arguments.
41
47
  * Returns undefined if not an update command.
42
48
  */
43
- export declare function parseUpdateArgs(args: string[]): {
44
- force: boolean;
45
- check: boolean;
46
- } | undefined;
49
+ export declare function parseUpdateArgs(args: string[]): UpdateCommandOptions | undefined;
47
50
  export type PackageManagerTarget = {
48
51
  manager: "npm";
49
52
  packageName: string;
@@ -61,7 +64,13 @@ type PathPlatform = NodeJS.Platform;
61
64
  type PackageExists = (packageName: string, packageRoot: string) => boolean;
62
65
  export declare function resolveUpdateMethodForTest(ompPath: string, bunBinDir: string | undefined): "bun" | "npm" | "binary";
63
66
  export declare function resolveNpmManagedTargetForTest(ompPath: string, platform: PathPlatform, packageExists: PackageExists): PackageManagerTarget | undefined;
64
- export declare function getLatestReleaseForTest(options: NpmRegistryLookupOptions): Promise<ReleaseInfo>;
67
+ /** Lookup options for the release check: registry resolution plus the release channel. */
68
+ export interface LatestReleaseLookupOptions extends NpmRegistryLookupOptions {
69
+ channel?: UpdateChannel;
70
+ }
71
+ export declare function getLatestReleaseForTest(options: LatestReleaseLookupOptions): Promise<ReleaseInfo>;
72
+ export declare function compareVersionsForTest(a: string, b: string): number;
73
+ export declare function parseReportedVersionForTest(output: string): string | undefined;
65
74
  export declare function formatBinaryDownloadFailureMessageForTest(binaryName: string, url: string, status: string | number, platform?: NodeJS.Platform, registryNote?: string): string;
66
75
  export declare function buildReleaseBinaryUrlForTest(version: string, platform?: NodeJS.Platform, arch?: string): string;
67
76
  export declare function formatManualUpdateInstructionsForTest(platform?: NodeJS.Platform): string;
@@ -97,16 +106,35 @@ export declare function runBinaryUpdateFlow(targetPath: string, url: string, exp
97
106
  * Run the update command.
98
107
  */
99
108
  export interface UpdateCommandDependencies {
100
- getLatestRelease?: (installer?: Installer) => Promise<ReleaseInfo>;
109
+ getLatestRelease?: (options?: LatestReleaseLookupOptions) => Promise<ReleaseInfo>;
101
110
  resolveUpdateTarget?: () => Promise<UpdateTarget>;
102
111
  performUpdate?: (target: UpdateTarget, expectedVersion: string, registry?: string) => Promise<void>;
103
112
  refreshInstalledDefaultSkills?: () => Promise<void>;
104
113
  exit?: (code: number) => never;
105
114
  }
106
- export declare function runUpdateCommand(opts: {
115
+ /** How the update command should proceed after comparing versions. */
116
+ export interface UpdateDecision {
117
+ install: boolean;
118
+ kind: "up-to-date" | "new-version" | "switch-back" | "force";
119
+ }
120
+ /**
121
+ * Decide whether to install after comparing the channel's release with the
122
+ * installed version.
123
+ *
124
+ * A nightly install is semver-newer than every stable release (nightlies
125
+ * version as stable-max-patch+1), so a plain comparison would pin the user on
126
+ * nightly forever: switching back to stable must install even though the
127
+ * target is semver-lower. Only a stable lookup from a nightly build is an
128
+ * intentional switch-back — the reverse (a same-core nightly behind the
129
+ * installed stable) still requires --force.
130
+ */
131
+ export declare function resolveUpdateDecision(options: {
132
+ comparison: number;
107
133
  force: boolean;
108
- check: boolean;
109
- }, deps?: UpdateCommandDependencies): Promise<void>;
134
+ channel: UpdateChannel;
135
+ currentVersion: string;
136
+ }): UpdateDecision;
137
+ export declare function runUpdateCommand(opts: UpdateCommandOptions, deps?: UpdateCommandDependencies): Promise<void>;
110
138
  /**
111
139
  * Print update command help.
112
140
  */
@@ -105,7 +105,7 @@ export declare class RootHelpCommand extends Command {
105
105
  };
106
106
  thinking: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
107
107
  description: string;
108
- options: import("@gajae-code/ai").Effort[];
108
+ options: ("high" | "low" | "max" | "medium" | "minimal" | "xhigh")[];
109
109
  };
110
110
  hook: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
111
111
  description: string;
@@ -65,6 +65,11 @@ export default class MCP extends Command {
65
65
  timeout: import("@gajae-code/utils/cli").FlagDescriptor<"integer"> & {
66
66
  description: string;
67
67
  };
68
+ sharing: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
69
+ description: string;
70
+ options: string[];
71
+ default: string;
72
+ };
68
73
  };
69
74
  run(): Promise<void>;
70
75
  }
@@ -24,6 +24,9 @@ export default class Plugin extends Command {
24
24
  fix: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
25
25
  description: string;
26
26
  };
27
+ "migrate-plugins": import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
28
+ description: string;
29
+ };
27
30
  force: import("@gajae-code/utils/cli").FlagDescriptor<"boolean"> & {
28
31
  description: string;
29
32
  };
@@ -1,6 +1,3 @@
1
- /**
2
- * Check for and install updates.
3
- */
4
1
  import { Command } from "@gajae-code/utils/cli";
5
2
  export default class Update extends Command {
6
3
  static description: string;
@@ -15,6 +12,9 @@ export default class Update extends Command {
15
12
  description: string;
16
13
  default: boolean;
17
14
  };
15
+ channel: import("@gajae-code/utils/cli").FlagDescriptor<"string"> & {
16
+ description: string;
17
+ };
18
18
  };
19
19
  run(): Promise<void>;
20
20
  }
@@ -1,5 +1,5 @@
1
1
  import { type ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { ModelRegistry } from "../../config/model-registry";
4
4
  import type { Settings } from "../../config/settings";
5
5
  import type { AuthStorage } from "../../session/auth-storage";
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { ConventionalAnalysis } from "../../commit/types";
4
4
  export interface ConventionalAnalysisInput {
5
5
  model: Model<Api>;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { CommitSummary } from "../../commit/types";
4
4
  export interface SummaryInput {
5
5
  model: Model<Api>;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import * as z from "zod/v4";
4
4
  import { type ChangelogGenerationResult } from "../../commit/types";
5
5
  export declare const changelogTool: {
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  export interface ChangelogFlowInput {
4
4
  cwd: string;
5
5
  model: Model<Api>;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { ConventionalAnalysis } from "../../commit/types";
4
4
  export interface MapReduceSettings {
5
5
  enabled?: boolean;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { FileDiff, FileObservation } from "../../commit/types";
4
4
  export interface MapPhaseInput {
5
5
  model: Model<Api>;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { ConventionalAnalysis, FileObservation } from "../../commit/types";
4
4
  export interface ReducePhaseInput {
5
5
  model: Model<Api>;
@@ -1,5 +1,5 @@
1
1
  import type { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import { type ModelLookupRegistry } from "../config/model-resolver";
4
4
  import type { Settings } from "../config/settings";
5
5
  export interface ResolvedCommitModel {
@@ -1,4 +1,4 @@
1
- import type { AssistantMessage } from "@gajae-code/ai";
1
+ import type { AssistantMessage } from "@gajae-code/ai/core";
2
2
  import * as z from "zod/v4";
3
3
  import type { ConventionalAnalysis } from "./types";
4
4
  /**
@@ -1,4 +1,4 @@
1
- import type { AssistantMessage, ToolCall } from "@gajae-code/ai";
1
+ import type { AssistantMessage, ToolCall } from "@gajae-code/ai/core";
2
2
  import type { ChangelogCategory, ConventionalAnalysis, ConventionalDetail } from "./types";
3
3
  export declare function extractToolCall(message: AssistantMessage, name: string): ToolCall | undefined;
4
4
  export declare function extractTextContent(message: AssistantMessage): string;
@@ -1,4 +1,4 @@
1
- import { type Api, type Model, type ModelRefreshStrategy } from "@gajae-code/ai";
1
+ import { type Api, type Model, type ModelRefreshStrategy } from "@gajae-code/ai/core";
2
2
  export interface DiscoveryProvider {
3
3
  provider: string;
4
4
  optional?: boolean;
@@ -1,4 +1,4 @@
1
- import { type Api, type Model } from "@gajae-code/ai";
1
+ import { type Api, type Model } from "@gajae-code/ai/core";
2
2
  export type CanonicalModelSource = "override" | "bundled" | "heuristic" | "fallback";
3
3
  export interface ModelEquivalenceConfig {
4
4
  overrides?: Record<string, string>;
@@ -1,5 +1,5 @@
1
1
  import { ThinkingLevel } from "@gajae-code/agent-core";
2
- import type { Api, Model } from "@gajae-code/ai";
2
+ import type { Api, Model } from "@gajae-code/ai/core";
3
3
  import type { AgentSession } from "../session/agent-session";
4
4
  export { resolveModelProfileName } from "./model-profile-contract";
5
5
  import { type GjcModelAssignmentTargetId, type ModelRegistry } from "./model-registry";
@@ -1,4 +1,4 @@
1
- import { type Api, type AssistantMessageEventStream, type AuthCredentialSelector, type CacheRetention, type Context, type Model, type ModelRefreshStrategy, type ModelRequestTransform, type SimpleStreamOptions, type ThinkingConfig } from "@gajae-code/ai";
1
+ import { type Api, type AssistantMessageEventStream, type AuthCredentialSelector, type CacheRetention, type Context, type Model, type ModelRefreshStrategy, type ModelRequestTransform, type SimpleStreamOptions, type ThinkingConfig } from "@gajae-code/ai/core";
2
2
  import type { OAuthCredentials, OAuthLoginCallbacks } from "@gajae-code/ai/utils/oauth/types";
3
3
  import { type ThemeColor } from "../modes/theme/theme";
4
4
  import { type ActiveProviderDescriptor } from "../sdk/providers";
@@ -57,6 +57,7 @@ export declare const ModelsConfigFile: ConfigFile<{
57
57
  supportsStore?: boolean | undefined;
58
58
  supportsDeveloperRole?: boolean | undefined;
59
59
  sendSessionHeaders?: boolean | undefined;
60
+ supportsResponsesSessionAffinity?: boolean | undefined;
60
61
  supportsMultipleSystemMessages?: boolean | undefined;
61
62
  supportsReasoningEffort?: boolean | undefined;
62
63
  reasoningEffortMap?: {
@@ -101,7 +102,9 @@ export declare const ModelsConfigFile: ConfigFile<{
101
102
  authHeader?: boolean | undefined;
102
103
  auth?: "apiKey" | "none" | "oauth" | undefined;
103
104
  discovery?: {
104
- type: "llama.cpp" | "lm-studio" | "ollama" | "openai-models-list";
105
+ type: "llama.cpp" | "lm-studio" | "models-dev" | "ollama" | "openai-models-list";
106
+ apiByModelPrefix?: Record<string, "anthropic-messages" | "openai-completions"> | undefined;
107
+ modelsDevProvider?: string | undefined;
105
108
  } | undefined;
106
109
  requestTransform?: {
107
110
  profile?: "openai-proxy" | undefined;
@@ -138,6 +141,7 @@ export declare const ModelsConfigFile: ConfigFile<{
138
141
  supportsStore?: boolean | undefined;
139
142
  supportsDeveloperRole?: boolean | undefined;
140
143
  sendSessionHeaders?: boolean | undefined;
144
+ supportsResponsesSessionAffinity?: boolean | undefined;
141
145
  supportsMultipleSystemMessages?: boolean | undefined;
142
146
  supportsReasoningEffort?: boolean | undefined;
143
147
  reasoningEffortMap?: {
@@ -214,6 +218,7 @@ export declare const ModelsConfigFile: ConfigFile<{
214
218
  supportsStore?: boolean | undefined;
215
219
  supportsDeveloperRole?: boolean | undefined;
216
220
  sendSessionHeaders?: boolean | undefined;
221
+ supportsResponsesSessionAffinity?: boolean | undefined;
217
222
  supportsMultipleSystemMessages?: boolean | undefined;
218
223
  supportsReasoningEffort?: boolean | undefined;
219
224
  reasoningEffortMap?: {
@@ -2,7 +2,7 @@
2
2
  * Model resolution, scoping, and initial selection
3
3
  */
4
4
  import { ThinkingLevel } from "@gajae-code/agent-core";
5
- import { type Api, type KnownProvider, type Model } from "@gajae-code/ai";
5
+ import { type Api, type KnownProvider, type Model } from "@gajae-code/ai/core";
6
6
  import { type ModelRegistry, type ModelRole } from "./model-registry";
7
7
  import { type ModelSelectorValue } from "./model-selector-value";
8
8
  import type { Settings } from "./settings";
@@ -3,6 +3,7 @@ export declare const ModelCompatSchema: z.ZodObject<{
3
3
  supportsStore: z.ZodOptional<z.ZodBoolean>;
4
4
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
5
5
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
6
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
6
7
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
7
8
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
8
9
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -72,6 +73,7 @@ export declare const OpenAICompatSchema: z.ZodObject<{
72
73
  supportsStore: z.ZodOptional<z.ZodBoolean>;
73
74
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
74
75
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
76
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
75
77
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
76
78
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
77
79
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -255,6 +257,7 @@ export declare const ModelOverrideSchema: z.ZodObject<{
255
257
  supportsStore: z.ZodOptional<z.ZodBoolean>;
256
258
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
257
259
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
260
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
258
261
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
259
262
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
260
263
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -341,9 +344,15 @@ export declare const ProviderDiscoverySchema: z.ZodObject<{
341
344
  type: z.ZodEnum<{
342
345
  "llama.cpp": "llama.cpp";
343
346
  "lm-studio": "lm-studio";
347
+ "models-dev": "models-dev";
344
348
  ollama: "ollama";
345
349
  "openai-models-list": "openai-models-list";
346
350
  }>;
351
+ apiByModelPrefix: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
352
+ "anthropic-messages": "anthropic-messages";
353
+ "openai-completions": "openai-completions";
354
+ }>>>;
355
+ modelsDevProvider: z.ZodOptional<z.ZodString>;
347
356
  }, z.core.$strip>;
348
357
  export declare const ProviderAuthSchema: z.ZodEnum<{
349
358
  apiKey: "apiKey";
@@ -375,6 +384,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
375
384
  supportsStore: z.ZodOptional<z.ZodBoolean>;
376
385
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
377
386
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
387
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
378
388
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
379
389
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
380
390
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -455,9 +465,15 @@ export declare const ModelsConfigSchema: z.ZodObject<{
455
465
  type: z.ZodEnum<{
456
466
  "llama.cpp": "llama.cpp";
457
467
  "lm-studio": "lm-studio";
468
+ "models-dev": "models-dev";
458
469
  ollama: "ollama";
459
470
  "openai-models-list": "openai-models-list";
460
471
  }>;
472
+ apiByModelPrefix: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEnum<{
473
+ "anthropic-messages": "anthropic-messages";
474
+ "openai-completions": "openai-completions";
475
+ }>>>;
476
+ modelsDevProvider: z.ZodOptional<z.ZodString>;
461
477
  }, z.core.$strip>>;
462
478
  requestTransform: z.ZodOptional<z.ZodObject<{
463
479
  profile: z.ZodOptional<z.ZodEnum<{
@@ -548,6 +564,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
548
564
  supportsStore: z.ZodOptional<z.ZodBoolean>;
549
565
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
550
566
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
567
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
551
568
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
552
569
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
553
570
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{
@@ -695,6 +712,7 @@ export declare const ModelsConfigSchema: z.ZodObject<{
695
712
  supportsStore: z.ZodOptional<z.ZodBoolean>;
696
713
  supportsDeveloperRole: z.ZodOptional<z.ZodBoolean>;
697
714
  sendSessionHeaders: z.ZodOptional<z.ZodBoolean>;
715
+ supportsResponsesSessionAffinity: z.ZodOptional<z.ZodBoolean>;
698
716
  supportsMultipleSystemMessages: z.ZodOptional<z.ZodBoolean>;
699
717
  supportsReasoningEffort: z.ZodOptional<z.ZodBoolean>;
700
718
  reasoningEffortMap: z.ZodOptional<z.ZodObject<{