@gajae-code/coding-agent 0.13.2 → 0.14.0

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 (610) hide show
  1. package/CHANGELOG.md +215 -8
  2. package/README.md +2 -0
  3. package/bin/gajaessi.js +4 -0
  4. package/dist/types/async/job-manager.d.ts +55 -2
  5. package/dist/types/async/support.d.ts +14 -0
  6. package/dist/types/capability/mcp.d.ts +6 -0
  7. package/dist/types/capability/types.d.ts +6 -0
  8. package/dist/types/cli/accounts-cli.d.ts +19 -0
  9. package/dist/types/cli/args.d.ts +3 -0
  10. package/dist/types/cli/config-cli.d.ts +6 -0
  11. package/dist/types/cli/crash-cli.d.ts +10 -0
  12. package/dist/types/cli/customize-doctor.d.ts +145 -0
  13. package/dist/types/cli/daemon-cli.d.ts +3 -1
  14. package/dist/types/cli/mcp-cli.d.ts +11 -0
  15. package/dist/types/cli/notify-cli.d.ts +1 -1
  16. package/dist/types/cli/root-flags.d.ts +12 -0
  17. package/dist/types/cli/setup-cli.d.ts +3 -1
  18. package/dist/types/cli/skills-cli.d.ts +2 -1
  19. package/dist/types/cli/update-cli.d.ts +19 -1
  20. package/dist/types/cli.d.ts +6 -0
  21. package/dist/types/commands/accounts.d.ts +40 -0
  22. package/dist/types/commands/crash.d.ts +24 -0
  23. package/dist/types/commands/customize.d.ts +22 -0
  24. package/dist/types/commands/daemon.d.ts +1 -1
  25. package/dist/types/commands/launch.d.ts +6 -0
  26. package/dist/types/commands/setup.d.ts +6 -0
  27. package/dist/types/commands/skills.d.ts +6 -1
  28. package/dist/types/commands/update.d.ts +7 -0
  29. package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
  30. package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
  31. package/dist/types/config/config-schema-version.d.ts +10 -0
  32. package/dist/types/config/file-lock.d.ts +18 -0
  33. package/dist/types/config/model-profile-activation.d.ts +3 -1
  34. package/dist/types/config/model-registry.d.ts +10 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +73 -9
  37. package/dist/types/config/settings.d.ts +63 -0
  38. package/dist/types/config/skill-settings-defaults.d.ts +26 -0
  39. package/dist/types/config/task-delegation.d.ts +39 -0
  40. package/dist/types/config/update-channel.d.ts +10 -0
  41. package/dist/types/coordinator-mcp/server.d.ts +5 -1
  42. package/dist/types/crash/index-store.d.ts +87 -0
  43. package/dist/types/crash/nudge.d.ts +50 -0
  44. package/dist/types/crash/record-loader.d.ts +17 -0
  45. package/dist/types/crash/report.d.ts +134 -0
  46. package/dist/types/crash/sanitize.d.ts +25 -0
  47. package/dist/types/cursor.d.ts +13 -2
  48. package/dist/types/customization/import.d.ts +37 -0
  49. package/dist/types/customization/index.d.ts +4 -0
  50. package/dist/types/customization/inventory.d.ts +25 -0
  51. package/dist/types/customization/mutations.d.ts +32 -0
  52. package/dist/types/customization/types.d.ts +115 -0
  53. package/dist/types/daemon/control-types.d.ts +8 -1
  54. package/dist/types/daemon/operator-contract.d.ts +4 -4
  55. package/dist/types/discovery/claude.d.ts +39 -1
  56. package/dist/types/discovery/codex.d.ts +39 -1
  57. package/dist/types/discovery/index.d.ts +2 -0
  58. package/dist/types/discovery/mcp-compat.d.ts +30 -0
  59. package/dist/types/edit/renderer.d.ts +23 -0
  60. package/dist/types/extensibility/extensions/runner.d.ts +3 -0
  61. package/dist/types/extensibility/extensions/types.d.ts +21 -4
  62. package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
  63. package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
  64. package/dist/types/extensibility/hooks/loader.d.ts +19 -5
  65. package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
  66. package/dist/types/extensibility/skill-management.d.ts +107 -0
  67. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
  68. package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
  69. package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
  70. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
  71. package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
  72. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
  73. package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
  74. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
  75. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
  76. package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
  77. package/dist/types/hooks/events.d.ts +60 -0
  78. package/dist/types/hooks/normalize.d.ts +83 -0
  79. package/dist/types/hooks/skill-state.d.ts +9 -2
  80. package/dist/types/main.d.ts +2 -1
  81. package/dist/types/modes/acp/abort-scope.d.ts +13 -0
  82. package/dist/types/modes/acp/acp-agent.d.ts +7 -4
  83. package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
  84. package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
  85. package/dist/types/modes/components/customization/index.d.ts +1 -0
  86. package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
  87. package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
  88. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  89. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  90. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  91. package/dist/types/modes/components/pet-capability.d.ts +7 -21
  92. package/dist/types/modes/components/settings-selector.d.ts +5 -0
  93. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  94. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  95. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  96. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  97. package/dist/types/modes/interactive-mode.d.ts +1 -0
  98. package/dist/types/modes/theme/defaults/index.d.ts +118 -0
  99. package/dist/types/modes/types.d.ts +1 -0
  100. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  101. package/dist/types/runtime-mcp/config.d.ts +9 -0
  102. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  103. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  104. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  105. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  106. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  107. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  108. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  109. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  110. package/dist/types/runtime-mcp/types.d.ts +102 -10
  111. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  112. package/dist/types/sdk/broker/broker.d.ts +3 -55
  113. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  114. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  115. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  116. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  117. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  118. package/dist/types/sdk/bus/config.d.ts +11 -0
  119. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  120. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  121. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  122. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  123. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  124. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  125. package/dist/types/sdk/bus/index.d.ts +85 -99
  126. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  127. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  128. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  129. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  130. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  131. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  132. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  133. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  135. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  136. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  137. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  138. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  139. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  140. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  141. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  142. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  143. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  144. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  145. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  146. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  147. package/dist/types/sdk/cli/rows.d.ts +2 -11
  148. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  149. package/dist/types/sdk/client/client.d.ts +97 -1
  150. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  151. package/dist/types/sdk/host/control/index.d.ts +1 -1
  152. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  153. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  154. package/dist/types/sdk/host/host.d.ts +15 -1
  155. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  156. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  157. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  158. package/dist/types/sdk/host/types.d.ts +1 -1
  159. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  160. package/dist/types/sdk/index.d.ts +2 -1
  161. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  162. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  163. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  164. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  165. package/dist/types/sdk/mcp/server.d.ts +9 -6
  166. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  167. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  168. package/dist/types/sdk/prompt-status.d.ts +10 -3
  169. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  170. package/dist/types/sdk/receipt-state.d.ts +17 -0
  171. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  172. package/dist/types/sdk/router/index.d.ts +1 -0
  173. package/dist/types/sdk/router/session-router.d.ts +152 -0
  174. package/dist/types/sdk/session-list.d.ts +22 -0
  175. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  176. package/dist/types/sdk/session.d.ts +34 -1
  177. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  178. package/dist/types/session/account-inventory.d.ts +86 -0
  179. package/dist/types/session/agent-session.d.ts +145 -6
  180. package/dist/types/session/agent-storage.d.ts +10 -0
  181. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  182. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  183. package/dist/types/session/messages.d.ts +1 -1
  184. package/dist/types/session/secure-token-file.d.ts +3 -0
  185. package/dist/types/session/session-manager.d.ts +47 -1
  186. package/dist/types/session/startup-auth-config.d.ts +44 -0
  187. package/dist/types/session/terminal-abort.d.ts +378 -0
  188. package/dist/types/session/yield-queue.d.ts +7 -0
  189. package/dist/types/session-import/claude.d.ts +26 -0
  190. package/dist/types/session-import/codex.d.ts +88 -0
  191. package/dist/types/session-import/command.d.ts +35 -0
  192. package/dist/types/session-import/detect.d.ts +22 -0
  193. package/dist/types/session-import/index.d.ts +7 -0
  194. package/dist/types/session-import/provider-codex.d.ts +22 -0
  195. package/dist/types/session-import/provider-service.d.ts +38 -0
  196. package/dist/types/session-import/redact.d.ts +23 -0
  197. package/dist/types/session-import/service.d.ts +47 -0
  198. package/dist/types/session-import/types.d.ts +120 -0
  199. package/dist/types/setup/paseo/check.d.ts +16 -0
  200. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  201. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  202. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  203. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  204. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  205. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  206. package/dist/types/setup/paseo/remove.d.ts +14 -0
  207. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  208. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  209. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  210. package/dist/types/skill-state/active-state.d.ts +5 -1
  211. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  212. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  213. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  214. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  215. package/dist/types/slash-commands/types.d.ts +7 -1
  216. package/dist/types/task/executor.d.ts +10 -0
  217. package/dist/types/task/index.d.ts +3 -1
  218. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  219. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  220. package/dist/types/tools/bash.d.ts +2 -6
  221. package/dist/types/tools/browser/attach.d.ts +11 -0
  222. package/dist/types/tools/browser/launch.d.ts +20 -0
  223. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  224. package/dist/types/tools/browser/render.d.ts +1 -0
  225. package/dist/types/tools/browser.d.ts +3 -1
  226. package/dist/types/tools/image-gen.d.ts +10 -2
  227. package/dist/types/tools/index.d.ts +8 -0
  228. package/dist/types/tools/monitor.d.ts +1 -1
  229. package/dist/types/tools/skill-discovery.d.ts +8 -1
  230. package/dist/types/tools/subagent.d.ts +2 -0
  231. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  232. package/dist/types/utils/herdr-pane.d.ts +76 -0
  233. package/package.json +19 -9
  234. package/scripts/build-binary.ts +2 -1
  235. package/scripts/build-sdk-package-smoke.ts +2 -13
  236. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  237. package/scripts/compile-args.ts +2 -0
  238. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  239. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  240. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  241. package/scripts/generate-tool-catalog.ts +6 -4
  242. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  243. package/src/async/job-manager.ts +352 -17
  244. package/src/async/support.ts +25 -0
  245. package/src/autoresearch/dashboard.ts +28 -13
  246. package/src/capability/index.ts +3 -1
  247. package/src/capability/mcp.ts +6 -0
  248. package/src/capability/types.ts +6 -0
  249. package/src/cli/accounts-cli.ts +395 -0
  250. package/src/cli/args.ts +23 -0
  251. package/src/cli/auth-broker-cli.ts +136 -66
  252. package/src/cli/auth-gateway-cli.ts +94 -70
  253. package/src/cli/config-cli.ts +27 -2
  254. package/src/cli/crash-cli.ts +78 -0
  255. package/src/cli/customize-doctor.ts +1605 -0
  256. package/src/cli/daemon-cli.ts +12 -3
  257. package/src/cli/fast-help.ts +1 -0
  258. package/src/cli/mcp-cli.ts +128 -60
  259. package/src/cli/notify-cli.ts +8 -14
  260. package/src/cli/root-flags.ts +8 -0
  261. package/src/cli/setup-cli.ts +145 -0
  262. package/src/cli/skills-cli.ts +38 -2
  263. package/src/cli/update-cli.ts +167 -12
  264. package/src/cli.ts +4 -0
  265. package/src/commands/accounts.ts +71 -0
  266. package/src/commands/crash.ts +35 -0
  267. package/src/commands/customize.ts +84 -0
  268. package/src/commands/daemon.ts +2 -2
  269. package/src/commands/deep-interview.ts +2 -0
  270. package/src/commands/launch.ts +1 -0
  271. package/src/commands/mcp.ts +12 -7
  272. package/src/commands/ralplan.ts +2 -0
  273. package/src/commands/sdk.ts +65 -32
  274. package/src/commands/setup.ts +5 -0
  275. package/src/commands/skills.ts +14 -4
  276. package/src/commands/ultragoal.ts +10 -1
  277. package/src/commands/update.ts +26 -15
  278. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  279. package/src/config/atomic-yaml-patch.ts +769 -29
  280. package/src/config/config-schema-version.ts +10 -0
  281. package/src/config/file-lock.ts +70 -1
  282. package/src/config/mcp-schema.json +52 -14
  283. package/src/config/model-profile-activation.ts +23 -2
  284. package/src/config/model-profiles.ts +88 -21
  285. package/src/config/model-registry.ts +147 -21
  286. package/src/config/models-config-schema.ts +1 -1
  287. package/src/config/settings-schema.ts +77 -7
  288. package/src/config/settings.ts +4038 -199
  289. package/src/config/skill-settings-defaults.ts +41 -3
  290. package/src/config/task-delegation.ts +87 -0
  291. package/src/config/update-channel.ts +23 -0
  292. package/src/coordinator-mcp/server.ts +377 -308
  293. package/src/crash/index-store.ts +723 -0
  294. package/src/crash/nudge.ts +89 -0
  295. package/src/crash/record-loader.ts +149 -0
  296. package/src/crash/report.ts +551 -0
  297. package/src/crash/sanitize.ts +129 -0
  298. package/src/cursor.ts +36 -10
  299. package/src/customization/import.ts +946 -0
  300. package/src/customization/index.ts +4 -0
  301. package/src/customization/inventory.ts +335 -0
  302. package/src/customization/mutations.ts +141 -0
  303. package/src/customization/types.ts +223 -0
  304. package/src/daemon/control-types.ts +8 -1
  305. package/src/daemon/operator-contract.ts +6 -6
  306. package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
  307. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  308. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  309. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  310. package/src/discovery/claude-hooks.ts +38 -0
  311. package/src/discovery/claude.ts +142 -209
  312. package/src/discovery/codex-hooks.ts +38 -0
  313. package/src/discovery/codex.ts +132 -198
  314. package/src/discovery/helpers.ts +8 -1
  315. package/src/discovery/index.ts +2 -0
  316. package/src/discovery/mcp-compat.ts +234 -0
  317. package/src/discovery/mcp-json.ts +6 -0
  318. package/src/edit/renderer.ts +40 -0
  319. package/src/edit/streaming.ts +4 -2
  320. package/src/exec/bash-executor.ts +24 -20
  321. package/src/export/html/index.ts +51 -2
  322. package/src/extensibility/extensions/loader.ts +9 -1
  323. package/src/extensibility/extensions/runner.ts +17 -4
  324. package/src/extensibility/extensions/types.ts +31 -6
  325. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  326. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  327. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  328. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  329. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  330. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  331. package/src/extensibility/hooks/loader.ts +154 -10
  332. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  333. package/src/extensibility/skill-management.ts +368 -0
  334. package/src/extensibility/skills.ts +52 -16
  335. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  336. package/src/gjc-runtime/launch-worktree.ts +56 -2
  337. package/src/gjc-runtime/linux-proc.ts +7 -1
  338. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  339. package/src/gjc-runtime/session-state-lock.ts +992 -0
  340. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  341. package/src/gjc-runtime/state-writer.ts +39 -14
  342. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  343. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  344. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  345. package/src/gjc-runtime/workflow-settings.ts +596 -0
  346. package/src/goals/tools/goal-tool.ts +6 -1
  347. package/src/hooks/events.ts +291 -0
  348. package/src/hooks/native-skill-hook.ts +4 -0
  349. package/src/hooks/normalize.ts +369 -0
  350. package/src/hooks/skill-state.ts +165 -46
  351. package/src/internal-urls/docs-index.generated.ts +41 -32
  352. package/src/main.ts +36 -5
  353. package/src/migrate/mcp-mapper.ts +25 -2
  354. package/src/modes/acp/abort-scope.ts +29 -0
  355. package/src/modes/acp/acp-agent.ts +423 -98
  356. package/src/modes/components/assistant-message.ts +6 -1
  357. package/src/modes/components/chrome.ts +4 -3
  358. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  359. package/src/modes/components/customization/import-wizard.ts +372 -0
  360. package/src/modes/components/customization/index.ts +1 -0
  361. package/src/modes/components/dynamic-theme-text.ts +22 -0
  362. package/src/modes/components/gajae-pet-widget.ts +607 -193
  363. package/src/modes/components/irc-sidebar.ts +11 -0
  364. package/src/modes/components/iterm-pet-transport.ts +585 -0
  365. package/src/modes/components/model-selector.ts +1 -6
  366. package/src/modes/components/oauth-selector.ts +277 -86
  367. package/src/modes/components/pet-capability.ts +35 -31
  368. package/src/modes/components/settings-selector.ts +29 -5
  369. package/src/modes/components/status-line/gh.ts +45 -1
  370. package/src/modes/components/status-line/segments.ts +19 -4
  371. package/src/modes/components/tool-status-header.ts +13 -3
  372. package/src/modes/controllers/command-controller.ts +20 -8
  373. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  374. package/src/modes/controllers/input-controller.ts +10 -0
  375. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  376. package/src/modes/controllers/selector-controller.ts +238 -77
  377. package/src/modes/controllers/stt-controller.ts +3 -3
  378. package/src/modes/interactive-mode.ts +88 -16
  379. package/src/modes/print-mode.ts +35 -6
  380. package/src/modes/runtime-init.ts +21 -68
  381. package/src/modes/theme/defaults/index.ts +2 -0
  382. package/src/modes/theme/defaults/ouroboros.json +118 -0
  383. package/src/modes/types.ts +1 -0
  384. package/src/modes/utils/injected-user-submission.ts +25 -0
  385. package/src/modes/utils/terminal-bell.ts +15 -1
  386. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  387. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  388. package/src/prompts/agents/critic.md +1 -1
  389. package/src/prompts/system/rlm-research.md +1 -1
  390. package/src/prompts/system/system-prompt.md +0 -2
  391. package/src/prompts/tools/bash.md +7 -1
  392. package/src/prompts/tools/browser.md +1 -1
  393. package/src/prompts/tools/cron.md +6 -6
  394. package/src/prompts/tools/read.md +0 -2
  395. package/src/prompts/tools/skill-discovery.md +4 -2
  396. package/src/runtime-mcp/client.ts +427 -23
  397. package/src/runtime-mcp/config.ts +37 -5
  398. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  399. package/src/runtime-mcp/manager.ts +52 -2
  400. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  401. package/src/runtime-mcp/oauth-flow.ts +46 -1
  402. package/src/runtime-mcp/pool-key.ts +5 -1
  403. package/src/runtime-mcp/pool.test.ts +9 -0
  404. package/src/runtime-mcp/protocol.test.ts +353 -0
  405. package/src/runtime-mcp/protocol.ts +624 -0
  406. package/src/runtime-mcp/scope-config.ts +78 -0
  407. package/src/runtime-mcp/tool-bridge.ts +44 -10
  408. package/src/runtime-mcp/transports/http.ts +84 -13
  409. package/src/runtime-mcp/types.ts +123 -12
  410. package/src/sdk/acp/adapter.ts +328 -97
  411. package/src/sdk/broker/broker.ts +160 -741
  412. package/src/sdk/broker/ensure.ts +9 -1
  413. package/src/sdk/broker/lifecycle.ts +510 -116
  414. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  415. package/src/sdk/broker/process-incarnation.ts +19 -0
  416. package/src/sdk/broker/session-index.ts +516 -117
  417. package/src/sdk/broker/startup-failure.ts +28 -5
  418. package/src/sdk/broker/transport.ts +1 -13
  419. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  420. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  421. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  422. package/src/sdk/bus/config.ts +13 -0
  423. package/src/sdk/bus/conversation-store.ts +59 -171
  424. package/src/sdk/bus/daemon-paths.ts +20 -0
  425. package/src/sdk/bus/discord-conversation.ts +2 -0
  426. package/src/sdk/bus/discord-daemon.ts +524 -126
  427. package/src/sdk/bus/discord-live-provider.ts +206 -79
  428. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  429. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  430. package/src/sdk/bus/index.ts +2480 -456
  431. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  432. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  433. package/src/sdk/bus/managed-daemon.ts +2 -145
  434. package/src/sdk/bus/notification-service.ts +196 -0
  435. package/src/sdk/bus/operator-runtime.ts +1 -1
  436. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  437. package/src/sdk/bus/reconciliation-store.ts +553 -24
  438. package/src/sdk/bus/session-control.ts +49 -3
  439. package/src/sdk/bus/slack-conversation.ts +4 -0
  440. package/src/sdk/bus/slack-daemon.ts +733 -134
  441. package/src/sdk/bus/slack-live-provider.ts +65 -15
  442. package/src/sdk/bus/slack-provider.ts +4 -0
  443. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  444. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  445. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  446. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  447. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  448. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  449. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  450. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  451. package/src/sdk/bus/telegram-reference.ts +1 -226
  452. package/src/sdk/bus/telegram-setup.ts +2 -2
  453. package/src/sdk/bus/threaded-render.ts +1 -0
  454. package/src/sdk/bus/topic-registry.ts +279 -146
  455. package/src/sdk/cli/rows.ts +2 -35
  456. package/src/sdk/cli/session-cli.ts +776 -700
  457. package/src/sdk/client/client.ts +892 -1
  458. package/src/sdk/host/control/dispatch.ts +93 -58
  459. package/src/sdk/host/control/index.ts +1 -1
  460. package/src/sdk/host/control/operations.ts +18 -10
  461. package/src/sdk/host/control/runtime-gate.ts +40 -0
  462. package/src/sdk/host/host.ts +63 -12
  463. package/src/sdk/host/query/handlers.ts +66 -7
  464. package/src/sdk/host/reverse-leases.ts +2 -2
  465. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  466. package/src/sdk/host/session-runtime.test.ts +2787 -34
  467. package/src/sdk/host/session-runtime.ts +1489 -101
  468. package/src/sdk/host/surface-policy.ts +12 -8
  469. package/src/sdk/host/types.ts +1 -1
  470. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  471. package/src/sdk/host/websocket-transport.ts +85 -50
  472. package/src/sdk/index.ts +2 -1
  473. package/src/sdk/lifecycle/broker-client.ts +53 -0
  474. package/src/sdk/lifecycle/client.ts +234 -0
  475. package/src/sdk/lifecycle/index.ts +3 -0
  476. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  477. package/src/sdk/lifecycle/service.ts +720 -0
  478. package/src/sdk/mcp/server.ts +226 -188
  479. package/src/sdk/prompt-deadline-lease.ts +55 -0
  480. package/src/sdk/prompt-deadline-manager.ts +148 -0
  481. package/src/sdk/prompt-status.ts +11 -3
  482. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  483. package/src/sdk/protocol/operation-registry.ts +71 -8
  484. package/src/sdk/receipt-state.ts +43 -0
  485. package/src/sdk/reconciliation-extensions.ts +14 -0
  486. package/src/sdk/router/index.ts +1 -0
  487. package/src/sdk/router/session-router.ts +1658 -0
  488. package/src/sdk/session-list.ts +93 -0
  489. package/src/sdk/session-reconnect.ts +45 -1
  490. package/src/sdk/session.ts +716 -120
  491. package/src/sdk/transport/serve-cli.ts +18 -34
  492. package/src/session/account-inventory.ts +603 -0
  493. package/src/session/agent-session.ts +2873 -559
  494. package/src/session/agent-storage.ts +35 -0
  495. package/src/session/blob-store.ts +32 -1
  496. package/src/session/coordinator-tool-label.ts +40 -0
  497. package/src/session/internal/managed-session-scope.ts +4 -0
  498. package/src/session/internal/managed-session-storage.ts +199 -31
  499. package/src/session/messages.ts +1 -1
  500. package/src/session/secure-token-file.ts +80 -0
  501. package/src/session/session-manager.ts +757 -57
  502. package/src/session/session-storage.ts +25 -16
  503. package/src/session/startup-auth-config.ts +297 -0
  504. package/src/session/terminal-abort.ts +1253 -0
  505. package/src/session/yield-queue.ts +57 -15
  506. package/src/session-import/claude.ts +334 -0
  507. package/src/session-import/codex.ts +1033 -0
  508. package/src/session-import/command.ts +77 -0
  509. package/src/session-import/detect.ts +133 -0
  510. package/src/session-import/index.ts +7 -0
  511. package/src/session-import/provider-codex.ts +327 -0
  512. package/src/session-import/provider-service.ts +457 -0
  513. package/src/session-import/redact.ts +128 -0
  514. package/src/session-import/service.ts +1264 -0
  515. package/src/session-import/types.ts +148 -0
  516. package/src/setup/paseo/check.ts +213 -0
  517. package/src/setup/paseo/install-saga.ts +293 -0
  518. package/src/setup/paseo/json-publisher.ts +263 -0
  519. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  520. package/src/setup/paseo/paseo-ownership.ts +224 -0
  521. package/src/setup/paseo/paseo-setup.ts +253 -0
  522. package/src/setup/paseo/provider-config.ts +139 -0
  523. package/src/setup/paseo/remove.ts +183 -0
  524. package/src/setup/paseo/result-types.ts +79 -0
  525. package/src/setup/paseo/setup-deps.ts +175 -0
  526. package/src/setup/paseo/skills-bridge.ts +260 -0
  527. package/src/skill-state/active-state.ts +21 -11
  528. package/src/slash-commands/acp-builtins.ts +9 -1
  529. package/src/slash-commands/builtin-registry.ts +117 -19
  530. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  531. package/src/slash-commands/helpers/mcp.ts +9 -3
  532. package/src/slash-commands/helpers/usage-report.ts +61 -56
  533. package/src/slash-commands/types.ts +7 -2
  534. package/src/task/executor.ts +30 -11
  535. package/src/task/index.ts +66 -7
  536. package/src/task/render.ts +23 -9
  537. package/src/tools/ask-answer-registry.ts +23 -7
  538. package/src/tools/ask.ts +8 -4
  539. package/src/tools/bash-sleep-advisory.ts +115 -0
  540. package/src/tools/bash.ts +98 -18
  541. package/src/tools/browser/attach.ts +71 -3
  542. package/src/tools/browser/launch.ts +86 -13
  543. package/src/tools/browser/profile-discovery.ts +57 -7
  544. package/src/tools/browser/render.ts +8 -1
  545. package/src/tools/browser.ts +130 -21
  546. package/src/tools/computer.enforcement.test.ts +1 -1
  547. package/src/tools/computer.ts +3 -2
  548. package/src/tools/cron.ts +12 -1
  549. package/src/tools/image-gen.ts +349 -142
  550. package/src/tools/index.ts +8 -0
  551. package/src/tools/job.ts +33 -6
  552. package/src/tools/monitor.ts +41 -2
  553. package/src/tools/skill-discovery.ts +21 -29
  554. package/src/tools/subagent.ts +142 -24
  555. package/src/tools/todo-contract.ts +55 -3
  556. package/src/tools/todo-write.ts +4 -3
  557. package/src/tools/tool-catalog.generated.ts +6 -6
  558. package/src/tools/ultragoal-ask-guard.ts +10 -3
  559. package/src/utils/herdr-pane.ts +345 -0
  560. package/src/utils/title-generator.ts +2 -0
  561. package/src/web/scrapers/index.ts +6 -4
  562. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  563. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  564. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  565. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  566. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  567. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  568. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  569. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  570. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  571. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  572. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  573. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  574. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  575. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  576. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  577. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  578. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  579. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  580. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  581. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  582. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  583. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  584. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  585. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  586. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  587. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  588. package/dist/types/session/auth-broker-config.d.ts +0 -13
  589. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  590. package/dist/types/skills/skills.test.d.ts +0 -1
  591. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  592. package/dist/types/task/token-log.test.d.ts +0 -1
  593. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  594. package/dist/types/tools/descriptors.test.d.ts +0 -1
  595. package/scripts/g005-daemon-smoke.ts +0 -180
  596. package/scripts/g011-daemon-path-smoke.ts +0 -153
  597. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  598. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  599. package/src/sdk/bus/telegram-cli.ts +0 -212
  600. package/src/sdk/elevation/allowlist.ts +0 -54
  601. package/src/sdk/elevation/audit.ts +0 -208
  602. package/src/sdk/elevation/capability.ts +0 -41
  603. package/src/sdk/elevation/digest.ts +0 -129
  604. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  605. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  606. package/src/sdk/elevation/owner.ts +0 -109
  607. package/src/session/auth-broker-config.ts +0 -109
  608. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  609. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  610. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
@@ -1,11 +1,33 @@
1
1
  import { expect, test, vi } from "bun:test";
2
2
  import { rm } from "node:fs/promises";
3
+ import { legacyMcpMethodNotFound } from "../../test/mcp-test-utils";
3
4
  import * as configValue from "../config/resolve-config-value";
4
5
  import { MCPManager } from "./manager";
5
6
  import { MCPConnectionPool } from "./pool";
6
7
  import { computeMCPPoolKey } from "./pool-key";
8
+ import type { MCPProtocolObservation } from "./protocol";
9
+ import { legacyEraObservation } from "./protocol";
7
10
  import type { MCPRequestOptions, MCPServerConfig, MCPServerConnection, MCPTransport } from "./types";
8
11
 
12
+ /** Fake connections model pre-v2 stdio servers: legacy era, forced by transport. */
13
+ function fakeLegacyProtocol(capabilities: {
14
+ tools?: unknown;
15
+ resources?: unknown;
16
+ prompts?: unknown;
17
+ }): MCPProtocolObservation {
18
+ return legacyEraObservation({
19
+ preference: "auto",
20
+ effectiveVersion: "2025-03-26",
21
+ negotiation: "legacy-forced",
22
+ downgradeReason: "stdio-transport",
23
+ serverInfo: { name: "fake", version: "1" },
24
+ capabilities: {
25
+ tools: capabilities.tools !== undefined,
26
+ resources: capabilities.resources !== undefined,
27
+ prompts: capabilities.prompts !== undefined,
28
+ },
29
+ });
30
+ }
9
31
  class ManagerFakeTransport implements MCPTransport {
10
32
  connected = true;
11
33
  closeCount = 0;
@@ -136,6 +158,7 @@ test("withPreparedLease admission closes before disconnectAll snapshots scoped o
136
158
  transport: new ManagerFakeTransport(),
137
159
  serverInfo: { name: "fake", version: "1" },
138
160
  capabilities: { tools: {} },
161
+ protocol: fakeLegacyProtocol({ tools: {} }),
139
162
  }) satisfies MCPServerConnection,
140
163
  });
141
164
  const manager = new MCPManager(".", null, { pool, sessionId: "admission-disconnect" });
@@ -157,6 +180,7 @@ test("withPreparedLease admission closes during reconnect before fresh entry exi
157
180
  transport: new ManagerFakeTransport(),
158
181
  serverInfo: { name: "fake", version: "1" },
159
182
  capabilities: { tools: {} },
183
+ protocol: fakeLegacyProtocol({ tools: {} }),
160
184
  }) satisfies MCPServerConnection,
161
185
  });
162
186
  const manager = new MCPManager(".", null, { pool, sessionId: "admission-reconnect" });
@@ -182,6 +206,7 @@ test("manager connection lifecycle is owned by pool leases", async () => {
182
206
  transport,
183
207
  serverInfo: { name: "fake", version: "1" },
184
208
  capabilities: { tools: {} },
209
+ protocol: fakeLegacyProtocol({ tools: {} }),
185
210
  } satisfies MCPServerConnection;
186
211
  },
187
212
  });
@@ -207,6 +232,7 @@ test("manager resolves one canonical stdio cwd for transport and pool identity",
207
232
  transport: new ManagerFakeTransport(),
208
233
  serverInfo: { name: "fake", version: "1" },
209
234
  capabilities: { tools: {} },
235
+ protocol: fakeLegacyProtocol({ tools: {} }),
210
236
  } satisfies MCPServerConnection;
211
237
  },
212
238
  });
@@ -240,6 +266,7 @@ test("manager resource subscriptions flow through the lease aggregate", async ()
240
266
  transport,
241
267
  serverInfo: { name: "fake", version: "1" },
242
268
  capabilities: { tools: {}, resources: { subscribe: true } },
269
+ protocol: fakeLegacyProtocol({ tools: {}, resources: { subscribe: true } }),
243
270
  } satisfies MCPServerConnection;
244
271
  },
245
272
  });
@@ -285,6 +312,7 @@ test("disconnectAll cancels hanging config resolution before opening a lease", a
285
312
  transport: new ManagerFakeTransport(),
286
313
  serverInfo: { name: "fake", version: "1" },
287
314
  capabilities: { tools: {} },
315
+ protocol: fakeLegacyProtocol({ tools: {} }),
288
316
  }) satisfies MCPServerConnection,
289
317
  });
290
318
  const manager = new MCPManager(".", null, { pool, sessionId: "config-hang" });
@@ -313,6 +341,7 @@ test("caller abort after acquisition releases a hanging prepared lease", async (
313
341
  transport,
314
342
  serverInfo: { name: "fake", version: "1" },
315
343
  capabilities: { tools: {} },
344
+ protocol: fakeLegacyProtocol({ tools: {} }),
316
345
  } satisfies MCPServerConnection;
317
346
  },
318
347
  });
@@ -346,6 +375,7 @@ test("disconnectAll releases an active prepared lease and settles its callback",
346
375
  transport,
347
376
  serverInfo: { name: "fake", version: "1" },
348
377
  capabilities: { tools: {} },
378
+ protocol: fakeLegacyProtocol({ tools: {} }),
349
379
  } satisfies MCPServerConnection;
350
380
  },
351
381
  });
@@ -375,6 +405,7 @@ test("disconnectAll aggregates active transient release failures", async () => {
375
405
  transport,
376
406
  serverInfo: { name: "fake", version: "1" },
377
407
  capabilities: { tools: {} },
408
+ protocol: fakeLegacyProtocol({ tools: {} }),
378
409
  } satisfies MCPServerConnection;
379
410
  },
380
411
  });
@@ -403,6 +434,7 @@ test("transient lease does not replace the manager-owned lease mapping", async (
403
434
  transport,
404
435
  serverInfo: { name: "fake", version: "1" },
405
436
  capabilities: { tools: {} },
437
+ protocol: fakeLegacyProtocol({ tools: {} }),
406
438
  } satisfies MCPServerConnection;
407
439
  },
408
440
  });
@@ -436,6 +468,7 @@ test("prepared transient operations acquire and release through the pool", async
436
468
  transport,
437
469
  serverInfo: { name: "fake", version: "1" },
438
470
  capabilities: { tools: {} },
471
+ protocol: fakeLegacyProtocol({ tools: {} }),
439
472
  } satisfies MCPServerConnection;
440
473
  },
441
474
  });
@@ -460,6 +493,7 @@ test("reconnect retires held transient leases before opening a fresh physical co
460
493
  transport,
461
494
  serverInfo: { name: "fake", version: "1" },
462
495
  capabilities: { tools: {} },
496
+ protocol: fakeLegacyProtocol({ tools: {} }),
463
497
  } satisfies MCPServerConnection;
464
498
  },
465
499
  });
@@ -507,6 +541,7 @@ test("shutdown closes retired and replacement physical entries after HTTP-style
507
541
  transport,
508
542
  serverInfo: { name: "fake", version: "1" },
509
543
  capabilities: { tools: {} },
544
+ protocol: fakeLegacyProtocol({ tools: {} }),
510
545
  } satisfies MCPServerConnection;
511
546
  },
512
547
  });
@@ -541,6 +576,7 @@ test("successful HTTP-style rotations remove settled retired-release records whi
541
576
  transport,
542
577
  serverInfo: { name: "fake", version: "1" },
543
578
  capabilities: { tools: {} },
579
+ protocol: fakeLegacyProtocol({ tools: {} }),
544
580
  } satisfies MCPServerConnection;
545
581
  },
546
582
  });
@@ -582,6 +618,7 @@ test("manager disconnectAll aggregates a rejecting retired HTTP-style close", as
582
618
  transport,
583
619
  serverInfo: { name: "fake", version: "1" },
584
620
  capabilities: { tools: {} },
621
+ protocol: fakeLegacyProtocol({ tools: {} }),
585
622
  } satisfies MCPServerConnection;
586
623
  },
587
624
  });
@@ -624,6 +661,7 @@ test("reconnect uses the exact backoff schedule and coalesces concurrent request
624
661
  transport: new ManagerFakeTransport(),
625
662
  serverInfo: { name: "fake", version: "1" },
626
663
  capabilities: { tools: {} },
664
+ protocol: fakeLegacyProtocol({ tools: {} }),
627
665
  } satisfies MCPServerConnection;
628
666
  },
629
667
  });
@@ -661,6 +699,7 @@ test("disconnectAll reports typed lease-release failures after clearing all stat
661
699
  transport,
662
700
  serverInfo: { name: "fake", version: "1" },
663
701
  capabilities: { tools: {} },
702
+ protocol: fakeLegacyProtocol({ tools: {} }),
664
703
  } satisfies MCPServerConnection;
665
704
  },
666
705
  });
@@ -680,6 +719,7 @@ test("manager lease advertises its canonical roots through the pool", async () =
680
719
  transport: new ManagerFakeTransport(),
681
720
  serverInfo: { name: "fake", version: "1" },
682
721
  capabilities: { tools: {} },
722
+ protocol: fakeLegacyProtocol({ tools: {} }),
683
723
  }) satisfies MCPServerConnection,
684
724
  });
685
725
  const manager = new MCPManager(".", null, { pool, sessionId: "roots-session" });
@@ -708,6 +748,7 @@ test("per-session manager facades remain isolated while shared tools-only facade
708
748
  transport,
709
749
  serverInfo: { name: "fake", version: "1" },
710
750
  capabilities: { tools: {} },
751
+ protocol: fakeLegacyProtocol({ tools: {} }),
711
752
  } satisfies MCPServerConnection;
712
753
  },
713
754
  });
@@ -757,6 +798,7 @@ test("shared prompt execution stays lease-bound while one manager releases", asy
757
798
  transport,
758
799
  serverInfo: { name: "prompt", version: "1" },
759
800
  capabilities: { tools: {}, resources: { subscribe: true }, prompts: {} },
801
+ protocol: fakeLegacyProtocol({ tools: {}, resources: { subscribe: true }, prompts: {} }),
760
802
  } satisfies MCPServerConnection;
761
803
  },
762
804
  });
@@ -807,6 +849,7 @@ test("shared replacement is deferred across an unrelated reconnecting server", a
807
849
  transport,
808
850
  serverInfo: { name: "multi", version: String(generation) },
809
851
  capabilities: { tools: {} },
852
+ protocol: fakeLegacyProtocol({ tools: {} }),
810
853
  } satisfies MCPServerConnection;
811
854
  },
812
855
  });
@@ -874,6 +917,7 @@ test("shared replacement rebind reconciles a lease acquired before a second rota
874
917
  transport,
875
918
  serverInfo: { name: "generation", version: String(generation) },
876
919
  capabilities: { tools: {} },
920
+ protocol: fakeLegacyProtocol({ tools: {} }),
877
921
  } satisfies MCPServerConnection;
878
922
  },
879
923
  });
@@ -947,6 +991,7 @@ test("shared initial join reconciles a lease acquired before owner rotation", as
947
991
  transport,
948
992
  serverInfo: { name: "initial-join", version: String(generation) },
949
993
  capabilities: { tools: {} },
994
+ protocol: fakeLegacyProtocol({ tools: {} }),
950
995
  } satisfies MCPServerConnection;
951
996
  },
952
997
  });
@@ -1010,6 +1055,7 @@ test("initial join hook rejection releases the acquired lease", async () => {
1010
1055
  transport,
1011
1056
  serverInfo: { name: "hook-rejection", version: String(opens) },
1012
1057
  capabilities: { tools: {} },
1058
+ protocol: fakeLegacyProtocol({ tools: {} }),
1013
1059
  } satisfies MCPServerConnection;
1014
1060
  },
1015
1061
  });
@@ -1060,6 +1106,7 @@ test("initial join retry failure clears pending state for a subsequent connect",
1060
1106
  transport,
1061
1107
  serverInfo: { name: "retry-failure", version: String(generation) },
1062
1108
  capabilities: { tools: {} },
1109
+ protocol: fakeLegacyProtocol({ tools: {} }),
1063
1110
  } satisfies MCPServerConnection;
1064
1111
  },
1065
1112
  });
@@ -1136,6 +1183,7 @@ test("shared replacement is requeued when reconnect starts during acquisition",
1136
1183
  transport,
1137
1184
  serverInfo: { name: "inverse", version: String(generation) },
1138
1185
  capabilities: { tools: {} },
1186
+ protocol: fakeLegacyProtocol({ tools: {} }),
1139
1187
  } satisfies MCPServerConnection;
1140
1188
  },
1141
1189
  });
@@ -1216,6 +1264,7 @@ test("queued shared replacement is dropped when teardown begins", async () => {
1216
1264
  transport,
1217
1265
  serverInfo: { name: "drop", version: String(generation) },
1218
1266
  capabilities: { tools: {} },
1267
+ protocol: fakeLegacyProtocol({ tools: {} }),
1219
1268
  } satisfies MCPServerConnection;
1220
1269
  },
1221
1270
  });
@@ -1263,6 +1312,7 @@ test("shared replacement rebind is fenced when peer disconnects during old-lease
1263
1312
  transport,
1264
1313
  serverInfo: { name: "race", version: String(opens) },
1265
1314
  capabilities: { tools: {}, resources: { subscribe: true }, prompts: {} },
1315
+ protocol: fakeLegacyProtocol({ tools: {}, resources: { subscribe: true }, prompts: {} }),
1266
1316
  } satisfies MCPServerConnection;
1267
1317
  },
1268
1318
  });
@@ -1316,6 +1366,7 @@ test("shared noReplay request failure coordinates one replacement without resend
1316
1366
  transport,
1317
1367
  serverInfo: { name: "recovery", version: "1" },
1318
1368
  capabilities: { tools: {} },
1369
+ protocol: fakeLegacyProtocol({ tools: {} }),
1319
1370
  } satisfies MCPServerConnection;
1320
1371
  },
1321
1372
  });
@@ -1358,6 +1409,7 @@ test("released shared facade tools fail live-state checks while surviving lease
1358
1409
  transport,
1359
1410
  serverInfo: { name: "fake", version: "1" },
1360
1411
  capabilities: { tools: {} },
1412
+ protocol: fakeLegacyProtocol({ tools: {} }),
1361
1413
  } satisfies MCPServerConnection;
1362
1414
  },
1363
1415
  });
@@ -1401,6 +1453,7 @@ test("shared restart rebinds every surviving manager lease before subsequent cal
1401
1453
  transport,
1402
1454
  serverInfo: { name: "fake", version: "1" },
1403
1455
  capabilities: { tools: {} },
1456
+ protocol: fakeLegacyProtocol({ tools: {} }),
1404
1457
  } satisfies MCPServerConnection;
1405
1458
  },
1406
1459
  });
@@ -1444,6 +1497,7 @@ test("shared transport crash has one restart owner across manager facades", asyn
1444
1497
  transport,
1445
1498
  serverInfo: { name: "fake", version: "1" },
1446
1499
  capabilities: { tools: {} },
1500
+ protocol: fakeLegacyProtocol({ tools: {} }),
1447
1501
  } satisfies MCPServerConnection;
1448
1502
  },
1449
1503
  });
@@ -1510,6 +1564,7 @@ test("shared HTTP leases use one MCP session and one callback stream while relea
1510
1564
  toolsListCount += 1;
1511
1565
  return Response.json({ jsonrpc: "2.0", id: message.id, result: { tools: [] } });
1512
1566
  }
1567
+ if (message.method === "server/discover") return legacyMcpMethodNotFound(message.id);
1513
1568
  return Response.json({ jsonrpc: "2.0", id: message.id, result: {} });
1514
1569
  },
1515
1570
  });
@@ -1576,6 +1631,7 @@ test("S7-style HTTP stub keeps distinct paths and queries on one host in separat
1576
1631
  if (message.method === "notifications/initialized") return new Response(null, { status: 202 });
1577
1632
  if (message.method === "tools/list")
1578
1633
  return Response.json({ jsonrpc: "2.0", id: message.id, result: { tools: [] } });
1634
+ if (message.method === "server/discover") return legacyMcpMethodNotFound(message.id);
1579
1635
  return Response.json({ jsonrpc: "2.0", id: message.id, result: {} });
1580
1636
  },
1581
1637
  });
@@ -33,12 +33,14 @@ import {
33
33
  MCPPoolLeaseObsoleteError,
34
34
  MCPPoolLeaseReleaseError,
35
35
  } from "./pool";
36
+ import type { MCPProtocolObservation } from "./protocol";
36
37
  import type { MCPToolDetails } from "./tool-bridge";
37
38
  import { DeferredMCPTool, MCPTool } from "./tool-bridge";
38
39
  import type { MCPToolCache } from "./tool-cache";
39
40
  import { HttpTransport } from "./transports/http";
40
41
  import type {
41
42
  MCPGetPromptResult,
43
+ MCPInputRequestHandler,
42
44
  MCPPrompt,
43
45
  MCPRequestOptions,
44
46
  MCPResource,
@@ -252,6 +254,12 @@ export interface MCPDiscoverOptions {
252
254
  filterBrowser?: boolean;
253
255
  /** Only connect servers with autoload !== false (default: false) */
254
256
  autoloadOnly?: boolean;
257
+ /**
258
+ * Restrict discovery to GJC's native `.gjc` scopes (user + project).
259
+ * Runtime MCP authority for GJC sessions; Claude Code/Codex files are
260
+ * explicit import sources into `.gjc`, not implicit runtime authorities.
261
+ */
262
+ nativeOnly?: boolean;
255
263
  /** Called when starting to connect to servers */
256
264
  onConnecting?: (serverNames: string[]) => void;
257
265
  /** Load only this explicit MCP config file. */
@@ -323,6 +331,7 @@ export class MCPManager {
323
331
  #pendingToolLoads = new Map<string, Promise<ToolLoadResult>>();
324
332
  #sources = new Map<string, SourceMeta>();
325
333
  #authStorage: AuthStorage | null = null;
334
+ #inputRequestHandler: MCPInputRequestHandler | null = null;
326
335
  #onNotification?: (serverName: string, method: string, params: unknown) => void;
327
336
  #onToolsChanged?: (tools: CustomTool<TSchema, MCPToolDetails>[]) => void;
328
337
  #onResourcesChanged?: (serverName: string, uri: string) => void;
@@ -862,6 +871,16 @@ export class MCPManager {
862
871
  this.#authStorage = authStorage;
863
872
  }
864
873
 
874
+ /**
875
+ * Register the handler for modern MRTR `input_required` results (structured
876
+ * elicitation/roots/sampling input requests). Runtimes with an interactive
877
+ * question surface (e.g. ACP `elicitation/create`) register here; without a
878
+ * handler, `input_required` fails explicitly instead of hanging.
879
+ */
880
+ setInputRequestHandler(handler: MCPInputRequestHandler | null): void {
881
+ this.#inputRequestHandler = handler;
882
+ }
883
+
865
884
  /**
866
885
  * Discover and connect to all MCP servers from .mcp.json files.
867
886
  * Returns tools and any connection errors.
@@ -885,6 +904,7 @@ export class MCPManager {
885
904
  filterExa: options?.filterExa,
886
905
  filterBrowser: options?.filterBrowser,
887
906
  autoloadOnly: options?.autoloadOnly,
907
+ nativeOnly: options?.nativeOnly,
888
908
  configPath: options?.configPath,
889
909
  });
890
910
  const result = await this.#connectServers(configs, sources, options?.onConnecting);
@@ -1093,6 +1113,7 @@ export class MCPManager {
1093
1113
  const reconnect = () => this.reconnectServer(name);
1094
1114
  const customTools = MCPTool.fromTools(this.#connectionForLease(connection), serverTools, reconnect, {
1095
1115
  noReplay: config.sharing === "shared",
1116
+ inputHandler: () => this.#inputRequestHandler ?? undefined,
1096
1117
  });
1097
1118
  this.#replaceServerTools(name, customTools);
1098
1119
  if (!this.#toolsOnly) this.#onToolsChanged?.(this.#tools);
@@ -1207,6 +1228,7 @@ export class MCPManager {
1207
1228
  allTools.push(
1208
1229
  ...MCPTool.fromTools(this.#connectionForLease(connection), serverTools, reconnect, {
1209
1230
  noReplay: task.config.sharing === "shared",
1231
+ inputHandler: () => this.#inputRequestHandler ?? undefined,
1210
1232
  }),
1211
1233
  );
1212
1234
  } catch (error) {
@@ -1239,7 +1261,10 @@ export class MCPManager {
1239
1261
  () => this.#waitForConnection(name).then(connection => this.#connectionForLease(connection)),
1240
1262
  source,
1241
1263
  reconnect,
1242
- { noReplay: task.config.sharing === "shared" },
1264
+ {
1265
+ noReplay: task.config.sharing === "shared",
1266
+ inputHandler: () => this.#inputRequestHandler ?? undefined,
1267
+ },
1243
1268
  ),
1244
1269
  );
1245
1270
  } catch (error) {
@@ -1379,6 +1404,27 @@ export class MCPManager {
1379
1404
  return "disconnected";
1380
1405
  }
1381
1406
 
1407
+ /**
1408
+ * Get the authoritative protocol observation for a connected server
1409
+ * (preference, negotiated era/version, downgrade decision, deprecation state).
1410
+ * Secret-free; the single observation model consumed by customization doctor
1411
+ * (#4288) and /extensions (#4291). Returns undefined when not connected.
1412
+ */
1413
+ getProtocolObservation(name: string): MCPProtocolObservation | undefined {
1414
+ return this.#connections.get(name)?.protocol;
1415
+ }
1416
+
1417
+ /**
1418
+ * Snapshot of protocol observations for all connected servers.
1419
+ */
1420
+ getProtocolObservations(): ReadonlyMap<string, MCPProtocolObservation> {
1421
+ const snapshot = new Map<string, MCPProtocolObservation>();
1422
+ for (const [name, connection] of this.#connections) {
1423
+ snapshot.set(name, connection.protocol);
1424
+ }
1425
+ return snapshot;
1426
+ }
1427
+
1382
1428
  /**
1383
1429
  * Get the source metadata for a server.
1384
1430
  */
@@ -1947,6 +1993,7 @@ export class MCPManager {
1947
1993
  const reconnect = () => this.reconnectServer(name);
1948
1994
  const customTools = MCPTool.fromTools(this.#connectionForLease(connection), serverTools, reconnect, {
1949
1995
  noReplay: config.sharing === "shared",
1996
+ inputHandler: () => this.#inputRequestHandler ?? undefined,
1950
1997
  });
1951
1998
  void this.toolCache?.set(name, config, serverTools);
1952
1999
  this.#replaceServerTools(name, customTools);
@@ -2002,8 +2049,10 @@ export class MCPManager {
2002
2049
  const globalEpoch = this.#epoch;
2003
2050
  const disconnectEpoch = this.#disconnectEpochs.get(name) ?? 0;
2004
2051
 
2005
- // Clear cached tools
2052
+ // Clear cached tools and any server-supplied freshness hints
2006
2053
  connection.tools = undefined;
2054
+ connection.toolsFreshUntil = undefined;
2055
+ connection.toolsCacheScope = undefined;
2007
2056
 
2008
2057
  // Reload tools
2009
2058
  const facade = this.#connectionForLease(connection);
@@ -2012,6 +2061,7 @@ export class MCPManager {
2012
2061
  const reconnect = () => this.reconnectServer(name);
2013
2062
  const customTools = MCPTool.fromTools(facade, serverTools, reconnect, {
2014
2063
  noReplay: connection.config.sharing === "shared",
2064
+ inputHandler: () => this.#inputRequestHandler ?? undefined,
2015
2065
  });
2016
2066
  void this.toolCache?.set(name, connection.config, serverTools);
2017
2067
 
@@ -12,6 +12,10 @@ export interface OAuthEndpoints {
12
12
  tokenUrl: string;
13
13
  clientId?: string;
14
14
  scopes?: string;
15
+ /** Issuer recorded from the validated metadata document (RFC 9207). */
16
+ issuer?: string;
17
+ /** `authorization_response_iss_parameter_supported` from the same metadata. */
18
+ authorizationResponseIssSupported?: boolean;
15
19
  }
16
20
 
17
21
  export interface AuthDetectionResult {
@@ -413,6 +417,15 @@ export async function discoverOAuthEndpoints(
413
417
  ...endpoints,
414
418
  authorizationUrl: authorization.url.toString(),
415
419
  tokenUrl: token.url.toString(),
420
+ // RFC 9207 (MCP 2026-07-28): record the issuer from this validated
421
+ // metadata document so the authorization response can be checked.
422
+ ...(issuer ? { issuer } : {}),
423
+ ...(typeof metadata.authorization_response_iss_parameter_supported === "boolean"
424
+ ? {
425
+ authorizationResponseIssSupported:
426
+ metadata.authorization_response_iss_parameter_supported,
427
+ }
428
+ : {}),
416
429
  };
417
430
  }
418
431
  }
@@ -95,15 +95,39 @@ function resolveCallbackOptions(config: MCPOAuthConfig): OAuthCallbackFlowOption
95
95
  callbackHostname: resolveCallbackHostname(redirectUri),
96
96
  callbackBindHostname: CALLBACK_BIND_HOSTNAME,
97
97
  redirectUri,
98
+ ...(config.issuer ? { expectedIssuer: config.issuer } : {}),
99
+ ...(config.issuerResponseIssSupported !== undefined
100
+ ? { issuerResponseIssSupported: config.issuerResponseIssSupported }
101
+ : {}),
98
102
  };
99
103
  }
100
104
 
105
+ /**
106
+ * Canonical MCP server resource URI per RFC 8707 §2: absolute URI, lowercase
107
+ * scheme/host, no fragment, no trailing slash on an empty path.
108
+ */
109
+ export function canonicalMCPResourceUri(raw: string): string | undefined {
110
+ try {
111
+ const url = new URL(raw);
112
+ if (url.hash) url.hash = "";
113
+ const serialized = url.toString();
114
+ return url.pathname === "/" && serialized.endsWith("/") ? serialized.slice(0, -1) : serialized;
115
+ } catch {
116
+ return undefined;
117
+ }
118
+ }
119
+
101
120
  export interface MCPOAuthConfig {
102
121
  /** Authorization endpoint URL */
103
122
  authorizationUrl: string;
104
123
  /** Token endpoint URL */
105
124
  tokenUrl: string;
106
- /** Client ID (optional when already embedded in authorization URL) */
125
+ /**
126
+ * Client ID (optional when already embedded in authorization URL). An
127
+ * HTTPS URL here is a Client ID Metadata Document (CIMD) reference per
128
+ * MCP 2026-07-28 and is used as-is; Dynamic Client Registration is only a
129
+ * deprecated backwards-compatibility fallback when no client id exists.
130
+ */
107
131
  clientId?: string;
108
132
  /** Client secret (optional for PKCE flows) */
109
133
  clientSecret?: string;
@@ -115,6 +139,19 @@ export interface MCPOAuthConfig {
115
139
  callbackPort?: number;
116
140
  /** Custom callback path (default: /callback or redirectUri pathname) */
117
141
  callbackPath?: string;
142
+ /**
143
+ * Canonical URI of the target MCP server (RFC 8707). Sent as the `resource`
144
+ * parameter on BOTH the authorization and token requests, regardless of
145
+ * authorization-server support.
146
+ */
147
+ resource?: string;
148
+ /**
149
+ * Expected authorization-server issuer recorded from validated discovery
150
+ * metadata (RFC 9207 / MCP 2026-07-28). Validation fails closed on mismatch.
151
+ */
152
+ issuer?: string;
153
+ /** `authorization_response_iss_parameter_supported` from the same metadata. */
154
+ issuerResponseIssSupported?: boolean;
118
155
  }
119
156
 
120
157
  /**
@@ -174,6 +211,10 @@ export class MCPOAuthFlow extends OAuthCallbackFlow {
174
211
  }
175
212
  params.set("redirect_uri", redirectUri);
176
213
  params.set("state", state);
214
+ // RFC 8707: the canonical MCP server resource MUST be on the authorization request.
215
+ if (this.config.resource && !params.get("resource")) {
216
+ params.set("resource", this.config.resource);
217
+ }
177
218
 
178
219
  // Add PKCE challenge (some providers require it)
179
220
  const codeVerifier = this.#generateCodeVerifier();
@@ -200,6 +241,10 @@ export class MCPOAuthFlow extends OAuthCallbackFlow {
200
241
  if (this.#resolvedClientId) {
201
242
  params.set("client_id", this.#resolvedClientId);
202
243
  }
244
+ // RFC 8707: the canonical MCP server resource MUST be on the token request.
245
+ if (this.config.resource) {
246
+ params.set("resource", this.config.resource);
247
+ }
203
248
 
204
249
  // Add code verifier for PKCE
205
250
  if (this.#codeVerifier) {
@@ -2,6 +2,7 @@
2
2
  import { createHash } from "node:crypto";
3
3
  import { realpathSync } from "node:fs";
4
4
  import * as path from "node:path";
5
+ import { resolveMCPProtocolPreference } from "./protocol";
5
6
  import type { MCPServerConfig } from "./types";
6
7
 
7
8
  export type MCPPoolSharingMode = "per-session" | "shared";
@@ -67,6 +68,8 @@ export interface MCPPoolKeyIdentity {
67
68
  authScopeId: string;
68
69
  pluginNetworkPolicyId: string;
69
70
  capabilityProfile: MCPPoolCapabilityProfile;
71
+ /** Resolved protocol preference (auto | 2026-07-28 | legacy); partitions protocol generations. */
72
+ protocolPreference: string;
70
73
  sessionId?: string;
71
74
  }
72
75
 
@@ -262,10 +265,11 @@ export function buildMCPPoolKeyIdentity(
262
265
  }
263
266
  const headers = headerIdentity(source, options, auth.kind, auth.scope);
264
267
  const identity: MCPPoolKeyIdentity = {
265
- schemaVersion: 1,
268
+ schemaVersion: 2,
266
269
  serverName,
267
270
  sharingMode,
268
271
  transport,
272
+ protocolPreference: resolveMCPProtocolPreference(source.protocol),
269
273
  command: source.type === "http" || source.type === "sse" ? "" : source.command,
270
274
  argsNormalized: source.type === "http" || source.type === "sse" ? [] : [...(source.args ?? [])],
271
275
  effectiveCwdRealpath: effectiveCwd(config, options),
@@ -1,6 +1,7 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
  import { MCPConnectionPool, MCPPoolAcquireAbortError, MCPPoolLeaseInvalidatedError } from "./pool";
3
3
  import { MCPPoolConfigError } from "./pool-key";
4
+ import { legacyEraObservation } from "./protocol";
4
5
  import type { MCPRequestOptions, MCPServerConfig, MCPServerConnection, MCPTransport } from "./types";
5
6
  import { MCPExpectedFailure, MCPNotificationMethods } from "./types";
6
7
 
@@ -103,6 +104,14 @@ function connection(name: string, configValue: MCPServerConfig, transport: FakeT
103
104
  transport,
104
105
  serverInfo: { name: "fake", version: "1" },
105
106
  capabilities: { tools: {}, resources: { subscribe: true } },
107
+ protocol: legacyEraObservation({
108
+ preference: "auto",
109
+ effectiveVersion: "2025-03-26",
110
+ negotiation: "legacy-forced",
111
+ downgradeReason: "stdio-transport",
112
+ serverInfo: { name: "fake", version: "1" },
113
+ capabilities: { tools: true, resources: true },
114
+ }),
106
115
  };
107
116
  }
108
117