@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
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Scope-aware MCP configuration access.
3
+ *
4
+ * Canonical read/write contract for GJC's native MCP config in both scopes —
5
+ * project `<project>/.gjc/mcp.json` and global `~/.gjc/agent/mcp.json`.
6
+ * These wrappers resolve the scope to its file path, reuse the atomic config
7
+ * writer, and return provenance (scope + path) with every read so callers can
8
+ * show source and status without re-deriving path rules. Secret values are
9
+ * never printed by these APIs; the CLI applies its existing redaction layer on
10
+ * top of returned configs.
11
+ */
12
+ import { getMCPConfigPath, getProjectDir } from "@gajae-code/utils";
13
+ import {
14
+ getMCPServer,
15
+ readDisabledServers,
16
+ readMCPConfigFile,
17
+ removeMCPServer,
18
+ type UpsertMCPServerResult,
19
+ upsertMCPServer,
20
+ } from "./config-writer";
21
+ import type { MCPConfigFile, MCPServerConfig } from "./types";
22
+
23
+ export type MCPConfigScope = "user" | "project";
24
+
25
+ /** Resolved scope + path + parsed config (provenance for diagnostics). */
26
+ export interface ScopeMCPConfigSnapshot {
27
+ scope: MCPConfigScope;
28
+ path: string;
29
+ config: MCPConfigFile;
30
+ }
31
+
32
+ /** Resolve the canonical file path for a native MCP config scope. */
33
+ export function resolveScopeMCPConfigPath(scope: MCPConfigScope, cwd: string = getProjectDir()): string {
34
+ return getMCPConfigPath(scope, cwd);
35
+ }
36
+
37
+ /** Read a native MCP config for a scope. Returns an empty config when absent. */
38
+ export async function readScopeMCPConfig(scope: MCPConfigScope, cwd?: string): Promise<ScopeMCPConfigSnapshot> {
39
+ const path = resolveScopeMCPConfigPath(scope, cwd);
40
+ return { scope, path, config: await readMCPConfigFile(path) };
41
+ }
42
+ /** Add a server, or overwrite an existing one only when `force` is set. */
43
+ export async function upsertScopeMCPServer(
44
+ scope: MCPConfigScope,
45
+ name: string,
46
+ config: MCPServerConfig,
47
+ options: { force?: boolean } = {},
48
+ cwd?: string,
49
+ ): Promise<ScopeMCPConfigSnapshot & { result: UpsertMCPServerResult }> {
50
+ const path = resolveScopeMCPConfigPath(scope, cwd);
51
+ const result = await upsertMCPServer(path, name, config, options);
52
+ return { scope, path, config: await readMCPConfigFile(path), result };
53
+ }
54
+
55
+ /** Remove a server from a scope (throws when the name does not exist). */
56
+ export async function removeScopeMCPServer(
57
+ scope: MCPConfigScope,
58
+ name: string,
59
+ cwd?: string,
60
+ ): Promise<ScopeMCPConfigSnapshot> {
61
+ const path = resolveScopeMCPConfigPath(scope, cwd);
62
+ await removeMCPServer(path, name);
63
+ return { scope, path, config: await readMCPConfigFile(path) };
64
+ }
65
+
66
+ /** Get a specific server config from a scope. */
67
+ export async function getScopeMCPServer(
68
+ scope: MCPConfigScope,
69
+ name: string,
70
+ cwd?: string,
71
+ ): Promise<{ scope: MCPConfigScope; path: string; config: MCPServerConfig | undefined }> {
72
+ const path = resolveScopeMCPConfigPath(scope, cwd);
73
+ return { scope, path, config: await getMCPServer(path, name) };
74
+ }
75
+ /** Read the disabled-servers denylist for a scope. */
76
+ export async function readScopeDisabledServers(scope: MCPConfigScope, cwd?: string): Promise<string[]> {
77
+ return readDisabledServers(resolveScopeMCPConfigPath(scope, cwd));
78
+ }
@@ -19,16 +19,36 @@ import { ToolAbortError, throwIfAborted } from "../tools/tool-errors";
19
19
  import { callTool } from "./client";
20
20
  import type { MCPPoolLease } from "./pool";
21
21
  import { renderMCPCall, renderMCPResult } from "./render";
22
- import type { MCPContent, MCPServerConnection, MCPToolCallParams, MCPToolCallResult, MCPToolDefinition } from "./types";
22
+ import type {
23
+ MCPContent,
24
+ MCPInputRequestHandler,
25
+ MCPRequestOptions,
26
+ MCPServerConnection,
27
+ MCPToolCallParams,
28
+ MCPToolCallResult,
29
+ MCPToolDefinition,
30
+ } from "./types";
23
31
 
24
32
  /** Reconnect callback: tears down stale connection, returns new one or null. */
25
33
  export type MCPReconnect = () => Promise<MCPServerConnection | null>;
26
34
 
27
35
  type MCPToolTarget = MCPServerConnection | MCPPoolLease;
28
36
 
37
+ /** Options shared by MCPTool and DeferredMCPTool. */
38
+ export interface MCPToolOptions {
39
+ /** Shared lease policy: never retry the original request after transport/auth failure. */
40
+ noReplay?: boolean;
41
+ /**
42
+ * Lazy resolver for the modern MRTR `input_required` handler, registered by the
43
+ * owning manager/runtime. Resolved per call so late registration still applies.
44
+ */
45
+ inputHandler?: () => MCPInputRequestHandler | undefined;
46
+ }
47
+
29
48
  function connectionForTool(target: MCPToolTarget): MCPServerConnection {
30
49
  return "connectionForLease" in target ? target.connectionForLease() : target;
31
50
  }
51
+
32
52
  /**
33
53
  * Network-level and stale-session errors that warrant a reconnect + single retry.
34
54
  * Conservative: only catches errors where the server is likely alive but the
@@ -226,12 +246,18 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
226
246
 
227
247
  private connection: MCPServerConnection;
228
248
  #noReplay = false;
249
+ #inputHandlerResolver: (() => MCPInputRequestHandler | undefined) | undefined;
250
+
251
+ #callOptions(signal?: AbortSignal): MCPRequestOptions {
252
+ const inputHandler = this.#inputHandlerResolver?.();
253
+ return { signal, noReplay: this.#noReplay, ...(inputHandler ? { inputHandler } : {}) };
254
+ }
229
255
  /** Create MCPTool instances for all tools from an MCP server lease/connection. */
230
256
  static fromTools(
231
257
  target: MCPToolTarget,
232
258
  tools: MCPToolDefinition[],
233
259
  reconnect?: MCPReconnect,
234
- options?: { noReplay?: boolean },
260
+ options?: MCPToolOptions,
235
261
  ): MCPTool[] {
236
262
  return tools.map(tool => new MCPTool(target, tool, reconnect, options));
237
263
  }
@@ -240,11 +266,12 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
240
266
  target: MCPToolTarget,
241
267
  private readonly tool: MCPToolDefinition,
242
268
  private readonly reconnect?: MCPReconnect,
243
- options?: { noReplay?: boolean },
269
+ options?: MCPToolOptions,
244
270
  ) {
245
271
  const resolvedConnection = connectionForTool(target);
246
272
  this.connection = resolvedConnection;
247
273
  this.#noReplay = options?.noReplay === true;
274
+ this.#inputHandlerResolver = options?.inputHandler;
248
275
  this.name = createMCPToolName(resolvedConnection.name, tool.name);
249
276
  this.label = `${resolvedConnection.name}/${tool.name}`;
250
277
  this.description = tool.description ?? `MCP tool from ${resolvedConnection.name}`;
@@ -274,7 +301,7 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
274
301
  const providerName = this.connection._source?.providerName;
275
302
 
276
303
  try {
277
- const result = await callTool(this.connection, this.tool.name, args, { signal, noReplay: this.#noReplay });
304
+ const result = await callTool(this.connection, this.tool.name, args, this.#callOptions(signal));
278
305
  return buildResult(result, this.connection.name, this.tool.name, provider, providerName);
279
306
  } catch (error) {
280
307
  rethrowIfAborted(error, signal);
@@ -288,7 +315,7 @@ export class MCPTool implements CustomTool<TSchema, MCPToolDetails> {
288
315
  const retryProvider = newConn._source?.provider ?? provider;
289
316
  const retryProviderName = newConn._source?.providerName ?? providerName;
290
317
  try {
291
- const result = await callTool(newConn, this.tool.name, args, { signal, noReplay: this.#noReplay });
318
+ const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
292
319
  return buildResult(result, newConn.name, this.tool.name, retryProvider, retryProviderName);
293
320
  } catch (retryError) {
294
321
  rethrowIfAborted(retryError, signal);
@@ -322,6 +349,12 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
322
349
  readonly #fallbackProvider: string | undefined;
323
350
  readonly #fallbackProviderName: string | undefined;
324
351
  #noReplay = false;
352
+ #inputHandlerResolver: (() => MCPInputRequestHandler | undefined) | undefined;
353
+
354
+ #callOptions(signal?: AbortSignal): MCPRequestOptions {
355
+ const inputHandler = this.#inputHandlerResolver?.();
356
+ return { signal, noReplay: this.#noReplay, ...(inputHandler ? { inputHandler } : {}) };
357
+ }
325
358
 
326
359
  /** Create DeferredMCPTool instances for all tools from an MCP server */
327
360
  static fromTools(
@@ -330,7 +363,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
330
363
  getConnection: () => Promise<MCPServerConnection>,
331
364
  source?: SourceMeta,
332
365
  reconnect?: MCPReconnect,
333
- options?: { noReplay?: boolean },
366
+ options?: MCPToolOptions,
334
367
  ): DeferredMCPTool[] {
335
368
  return tools.map(tool => new DeferredMCPTool(serverName, tool, getConnection, source, reconnect, options));
336
369
  }
@@ -341,7 +374,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
341
374
  private readonly getConnection: () => Promise<MCPServerConnection>,
342
375
  source?: SourceMeta,
343
376
  private readonly reconnect?: MCPReconnect,
344
- options?: { noReplay?: boolean },
377
+ options?: MCPToolOptions,
345
378
  ) {
346
379
  this.name = createMCPToolName(serverName, tool.name);
347
380
  this.label = `${serverName}/${tool.name}`;
@@ -352,6 +385,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
352
385
  this.#fallbackProvider = source?.provider;
353
386
  this.#fallbackProviderName = source?.providerName;
354
387
  this.#noReplay = options?.noReplay === true;
388
+ this.#inputHandlerResolver = options?.inputHandler;
355
389
  }
356
390
 
357
391
  renderCall(args: unknown, _options: RenderResultOptions, theme: Theme) {
@@ -378,7 +412,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
378
412
  const connection = await untilAborted(signal, () => this.getConnection());
379
413
  throwIfAborted(signal);
380
414
  try {
381
- const result = await callTool(connection, this.tool.name, args, { signal, noReplay: this.#noReplay });
415
+ const result = await callTool(connection, this.tool.name, args, this.#callOptions(signal));
382
416
  return buildResult(
383
417
  result,
384
418
  this.serverName,
@@ -396,7 +430,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
396
430
  const retryProvider = newConn._source?.provider ?? provider;
397
431
  const retryProviderName = newConn._source?.providerName ?? providerName;
398
432
  try {
399
- const result = await callTool(newConn, this.tool.name, args, { signal, noReplay: this.#noReplay });
433
+ const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
400
434
  return buildResult(result, this.serverName, this.tool.name, retryProvider, retryProviderName);
401
435
  } catch (retryError) {
402
436
  rethrowIfAborted(retryError, signal);
@@ -421,7 +455,7 @@ export class DeferredMCPTool implements CustomTool<TSchema, MCPToolDetails> {
421
455
  const newConn = await reconnectWithAbort(this.reconnect, signal);
422
456
  if (newConn && !this.#noReplay) {
423
457
  try {
424
- const result = await callTool(newConn, this.tool.name, args, { signal, noReplay: this.#noReplay });
458
+ const result = await callTool(newConn, this.tool.name, args, this.#callOptions(signal));
425
459
  return buildResult(
426
460
  result,
427
461
  this.serverName,
@@ -2,7 +2,10 @@
2
2
  * MCP HTTP transport (Streamable HTTP).
3
3
  *
4
4
  * Implements JSON-RPC 2.0 over HTTP POST with optional SSE streaming.
5
- * Based on MCP spec 2025-03-26.
5
+ * Legacy era: session-oriented Streamable HTTP per MCP spec 2025-03-26
6
+ * (`Mcp-Session-Id`, standalone GET SSE listener, DELETE termination).
7
+ * Modern era (2026-07-28): stateless per-request `_meta` + mirrored headers,
8
+ * no sessions, no standalone stream, no replay. See ../protocol.ts.
6
9
  */
7
10
  import { logger, readSseJson, Snowflake } from "@gajae-code/utils";
8
11
  import type {
@@ -15,7 +18,7 @@ import type {
15
18
  MCPSseServerConfig,
16
19
  MCPTransport,
17
20
  } from "../../runtime-mcp/types";
18
- import { MCPExpectedFailure, toJsonRpcError } from "../../runtime-mcp/types";
21
+ import { MCPExpectedFailure, MCPHttpRequestError, MCPJsonRpcError, toJsonRpcError } from "../../runtime-mcp/types";
19
22
  import {
20
23
  cancelMCPStream,
21
24
  MCP_MAX_CONTENT_BYTES,
@@ -25,6 +28,16 @@ import {
25
28
  readMCPResponseText,
26
29
  } from "../content-limits";
27
30
  import { fetchPluginMcpRequest, isPluginMcpPublicNetworkBound } from "../plugin-network-boundary";
31
+ import { buildModernMcpHeaders, type MCPModernClientContext, type MCPProtocolEra, withModernMeta } from "../protocol";
32
+
33
+ /** Best-effort JSON parse of an error body for structured era classification. */
34
+ function tryParseJsonBody(text: string): unknown {
35
+ try {
36
+ return JSON.parse(text);
37
+ } catch {
38
+ return undefined;
39
+ }
40
+ }
28
41
 
29
42
  /**
30
43
  * HTTP transport for MCP servers.
@@ -36,6 +49,12 @@ export class HttpTransport implements MCPTransport {
36
49
  #sseConnection: AbortController | null = null;
37
50
  #streamControllers = new Set<AbortController>();
38
51
  #streamReaders = new Set<Promise<void>>();
52
+ /**
53
+ * Negotiated protocol era. Legacy keeps the sessionful 2025-03-26 behavior;
54
+ * modern (2026-07-28) is stateless: no session id, no GET stream, no DELETE.
55
+ */
56
+ #era: MCPProtocolEra = "legacy";
57
+ #modernContext: MCPModernClientContext | null = null;
39
58
 
40
59
  onClose?: () => void;
41
60
  onError?: (error: Error) => void;
@@ -57,6 +76,25 @@ export class HttpTransport implements MCPTransport {
57
76
  return this.config.url;
58
77
  }
59
78
 
79
+ /** Negotiated protocol era (defaults to legacy until the client negotiates). */
80
+ get era(): MCPProtocolEra {
81
+ return this.#era;
82
+ }
83
+
84
+ /**
85
+ * Select the protocol era. Modern mode requires the per-request client
86
+ * context (protocol version, identity, capabilities) mirrored into `_meta`
87
+ * and HTTP headers on every request.
88
+ */
89
+ setProtocolMode(era: MCPProtocolEra, modernContext?: MCPModernClientContext): void {
90
+ if (era === "modern" && !modernContext) {
91
+ throw new Error("modern MCP protocol mode requires a client context");
92
+ }
93
+ this.#era = era;
94
+ this.#modernContext = era === "modern" ? (modernContext ?? null) : null;
95
+ if (era === "modern") this.#sessionId = null;
96
+ }
97
+
60
98
  /**
61
99
  * Mark transport as connected.
62
100
  * HTTP doesn't need persistent connection, but we track state.
@@ -88,6 +126,9 @@ export class HttpTransport implements MCPTransport {
88
126
  */
89
127
  async startSSEListener(): Promise<void> {
90
128
  if (!this.#connected) return;
129
+ // The modern era removed the standalone GET stream; request-scoped SSE
130
+ // responses and subscriptions/listen are the only streams.
131
+ if (this.#era === "modern") return;
91
132
  if (this.#sseConnection) return;
92
133
 
93
134
  const sseConnection = new AbortController();
@@ -167,6 +208,13 @@ export class HttpTransport implements MCPTransport {
167
208
  }
168
209
  // Server-to-client request: has both method and id
169
210
  if ("method" in message && "id" in message && message.id != null) {
211
+ if (this.#era === "modern") {
212
+ // 2026-07-28 forbids server-initiated JSON-RPC requests on SSE streams;
213
+ // server-to-client interactions use MRTR input requests instead. Do not
214
+ // fall back to the legacy elicitation-over-stream pattern.
215
+ logger.debug("Dropping server-initiated request on modern-era stream");
216
+ return;
217
+ }
170
218
  void this.#handleServerRequest(message as JsonRpcRequest);
171
219
  return;
172
220
  }
@@ -219,7 +267,10 @@ export class HttpTransport implements MCPTransport {
219
267
  jsonrpc: "2.0" as const,
220
268
  id,
221
269
  method,
222
- params: params ?? {},
270
+ params:
271
+ this.#era === "modern" && this.#modernContext
272
+ ? withModernMeta(params ?? {}, this.#modernContext)
273
+ : (params ?? {}),
223
274
  };
224
275
 
225
276
  const headers: Record<string, string> = {
@@ -228,7 +279,18 @@ export class HttpTransport implements MCPTransport {
228
279
  ...this.config.headers,
229
280
  };
230
281
 
231
- if (this.#sessionId) {
282
+ if (this.#era === "modern" && this.#modernContext) {
283
+ // 2026-07-28: mirrored request metadata headers are REQUIRED.
284
+ Object.assign(
285
+ headers,
286
+ buildModernMcpHeaders({
287
+ protocolVersion: this.#modernContext.protocolVersion,
288
+ method,
289
+ params: body.params,
290
+ }),
291
+ );
292
+ if (options?.mcpParamHeaders) Object.assign(headers, options.mcpParamHeaders);
293
+ } else if (this.#sessionId) {
232
294
  headers["Mcp-Session-Id"] = this.#sessionId;
233
295
  }
234
296
 
@@ -248,10 +310,12 @@ export class HttpTransport implements MCPTransport {
248
310
  signal: operationSignal,
249
311
  });
250
312
 
251
- // Check for session ID in response
252
- const newSessionId = response.headers.get("Mcp-Session-Id");
253
- if (newSessionId) {
254
- this.#sessionId = newSessionId;
313
+ // Check for session ID in response (legacy era only; modern servers do not mint sessions)
314
+ if (this.#era !== "modern") {
315
+ const newSessionId = response.headers.get("Mcp-Session-Id");
316
+ if (newSessionId) {
317
+ this.#sessionId = newSessionId;
318
+ }
255
319
  }
256
320
 
257
321
  if (!response.ok) {
@@ -265,7 +329,11 @@ export class HttpTransport implements MCPTransport {
265
329
  .filter(Boolean)
266
330
  .join("; ");
267
331
  const suffix = authHints ? ` [${authHints}]` : "";
268
- throw new Error(`HTTP ${response.status}: ${text}${suffix}`);
332
+ throw new MCPHttpRequestError(
333
+ response.status,
334
+ `HTTP ${response.status}: ${text}${suffix}`,
335
+ tryParseJsonBody(text),
336
+ );
269
337
  }
270
338
 
271
339
  const contentType = response.headers.get("Content-Type") ?? "";
@@ -298,7 +366,9 @@ export class HttpTransport implements MCPTransport {
298
366
  if (!result.error) {
299
367
  throw new MCPExpectedFailure();
300
368
  }
301
- throw new MCPExpectedFailure(new Error(`MCP error ${result.error.code}: ${result.error.message}`));
369
+ throw new MCPExpectedFailure(
370
+ new MCPJsonRpcError(result.error.code, result.error.message, result.error.data),
371
+ );
302
372
  }
303
373
 
304
374
  return result.result as T;
@@ -371,7 +441,7 @@ export class HttpTransport implements MCPTransport {
371
441
  } else {
372
442
  reject(
373
443
  new MCPExpectedFailure(
374
- new Error(`MCP error ${response.error.code}: ${response.error.message}`),
444
+ new MCPJsonRpcError(response.error.code, response.error.message, response.error.data),
375
445
  ),
376
446
  );
377
447
  }
@@ -547,8 +617,9 @@ export class HttpTransport implements MCPTransport {
547
617
 
548
618
  if (!wasConnected && !this.#sessionId) return;
549
619
 
550
- // Send session termination if we have a session
551
- if (this.#sessionId) {
620
+ // Send session termination if we have a session (legacy era only;
621
+ // the modern era has no protocol session to terminate)
622
+ if (this.#era !== "modern" && this.#sessionId) {
552
623
  try {
553
624
  const timeout = this.config.timeout ?? 30000;
554
625
  const headers: Record<string, string> = {
@@ -1,16 +1,18 @@
1
1
  /**
2
2
  * MCP (Model Context Protocol) type definitions.
3
3
  *
4
- * Based on MCP specification 2025-03-26:
5
- * https://modelcontextprotocol.io/specification/2025-03-26/
4
+ * Legacy sessionful surface based on MCP specification 2025-03-26; the modern
5
+ * stateless generation (2026-07-28, "MCP v2") is modeled in ./protocol.ts.
6
+ * https://modelcontextprotocol.io/specification/2026-07-28/
6
7
  */
7
8
 
9
+ import type { SourceMeta } from "../capability/types";
10
+ import type { MCPCacheHints, MCPProtocolObservation, MCPProtocolPreference } from "./protocol";
11
+
8
12
  // =============================================================================
9
13
  // JSON-RPC 2.0 Types
10
14
  // =============================================================================
11
15
 
12
- import type { SourceMeta } from "../capability/types";
13
-
14
16
  export interface JsonRpcRequest {
15
17
  jsonrpc: "2.0";
16
18
  id: string | number;
@@ -63,15 +65,23 @@ export interface MCPServerConfigBase {
63
65
  enabled?: boolean;
64
66
  /**
65
67
  * Whether an explicit runtime MCP consumer should connect this server
66
- * automatically when that consumer starts (default: true). Normal standalone
67
- * `gjc`, `gjc --tmux`, and print-mode sessions do not consume `gjc mcp`
68
- * registrations today.
68
+ * automatically when that consumer starts (default: true). Ordinary
69
+ * standalone `gjc`, `gjc --tmux`, and print-mode sessions honor autoload for
70
+ * conventional registrations; `autoload: false` keeps a server configured
71
+ * for on-demand `/mcp` connection. `--no-mcp` opts a session out entirely.
69
72
  */
70
73
  autoload?: boolean;
71
74
  /** Connection timeout in milliseconds (default: 30000) */
72
75
  timeout?: number;
73
76
  /** Pool identity mode. W2 defaults to one physical connection per session. */
74
77
  sharing?: "per-session" | "shared";
78
+ /**
79
+ * Protocol preference for remote (http/sse) servers: `auto` (default) negotiates
80
+ * the modern 2026-07-28 stateless protocol first with a bounded, observable
81
+ * legacy fallback; `2026-07-28` is strict modern-only; `legacy` forces the
82
+ * bounded compatibility handshake. Ignored by stdio servers (always legacy-era).
83
+ */
84
+ protocol?: MCPProtocolPreference;
75
85
  /** Authentication configuration (optional) */
76
86
  auth?: MCPAuthConfig;
77
87
  /** OAuth configuration for servers requiring explicit client credentials */
@@ -140,6 +150,8 @@ export interface MCPImplementation {
140
150
  export interface MCPClientCapabilities {
141
151
  roots?: { listChanged?: boolean };
142
152
  sampling?: Record<string, never>;
153
+ /** Form-mode elicitation support (modern MRTR `elicitation/create` input requests). */
154
+ elicitation?: { form?: Record<string, never> };
143
155
  experimental?: Record<string, unknown>;
144
156
  }
145
157
 
@@ -180,7 +192,7 @@ export interface MCPToolDefinition {
180
192
  }
181
193
 
182
194
  /** tools/list response */
183
- export interface MCPToolsListResult {
195
+ export interface MCPToolsListResult extends MCPCacheHints {
184
196
  tools: MCPToolDefinition[];
185
197
  nextCursor?: string;
186
198
  }
@@ -237,13 +249,82 @@ export class MCPExpectedFailure extends Error {
237
249
  this.name = "MCPExpectedFailure";
238
250
  }
239
251
  }
252
+
253
+ /** HTTP-level request failure carrying structured detail for era classification. */
254
+ export class MCPHttpRequestError extends Error {
255
+ /** HTTP status code. */
256
+ readonly status: number;
257
+ /** Parsed JSON body when the error payload was JSON; undefined otherwise. */
258
+ readonly body: unknown;
259
+ constructor(status: number, message: string, body?: unknown) {
260
+ super(message);
261
+ this.name = "MCPHttpRequestError";
262
+ this.status = status;
263
+ this.body = body;
264
+ }
265
+ }
266
+
267
+ /** JSON-RPC error response failure carrying the protocol error code. */
268
+ export class MCPJsonRpcError extends Error {
269
+ readonly code: number;
270
+ readonly data?: unknown;
271
+ constructor(code: number, message: string, data?: unknown) {
272
+ super(`MCP error ${code}: ${message}`);
273
+ this.name = "MCPJsonRpcError";
274
+ this.code = code;
275
+ this.data = data;
276
+ }
277
+ }
240
278
  export interface MCPRequestOptions {
241
279
  /** Abort signal (e.g. Escape-to-interrupt) */
242
280
  signal?: AbortSignal;
243
281
  /** Shared lease policy: never retry the original request after transport/auth failure. */
244
282
  noReplay?: boolean;
283
+ /**
284
+ * Handler for modern MRTR `input_required` results (elicitation, roots, sampling).
285
+ * When absent, an `input_required` result fails explicitly instead of hanging.
286
+ */
287
+ inputHandler?: MCPInputRequestHandler;
288
+ /** Extra mirrored headers for modern requests (`Mcp-Param-*` from x-mcp-header bindings). */
289
+ mcpParamHeaders?: Record<string, string>;
290
+ }
291
+
292
+ // =============================================================================
293
+ // MRTR (multi round-trip) input handling
294
+ // =============================================================================
295
+
296
+ /** Context for one server input request gathered during a modern MRTR exchange. */
297
+ export interface MCPInputRequestContext {
298
+ /** Server being called. */
299
+ serverName: string;
300
+ /** Original client request method (`tools/call`, `prompts/get`, `resources/read`). */
301
+ originMethod: string;
302
+ /**
303
+ * Stable correlation id shared by the initial request and its exactly-once
304
+ * retry, fencing the accepted input to this exchange.
305
+ */
306
+ correlationId: string;
307
+ /** Request-scoped abort signal (cancellation/timeout of the original call). */
308
+ signal?: AbortSignal;
245
309
  }
246
310
 
311
+ /**
312
+ * Outcome of gathering one server input request. `result` values are placed in
313
+ * the retry's `inputResponses` under the request key. `failed` outcomes abort
314
+ * the MRTR exchange with an explicit error — except elicitation decline/cancel,
315
+ * which the handler expresses as an ElicitResult-shaped `result`.
316
+ */
317
+ export type MCPInputRequestHandlerResult =
318
+ | { kind: "result"; result: unknown }
319
+ | { kind: "failed"; reason: "declined" | "cancelled" | "timeout" | "unavailable" | "error"; message?: string };
320
+
321
+ /** Handler for one server input request inside an `input_required` result. */
322
+ export type MCPInputRequestHandler = (
323
+ key: string,
324
+ request: { method: string; params?: Record<string, unknown> },
325
+ context: MCPInputRequestContext,
326
+ ) => Promise<MCPInputRequestHandlerResult>;
327
+
247
328
  /** Transport interface - abstracts stdio/http */
248
329
  export interface MCPTransport {
249
330
  /** Send a request and wait for response */
@@ -300,6 +381,15 @@ export interface MCPServerConnection {
300
381
  instructions?: string;
301
382
  /** Cached prompts (populated on demand) */
302
383
  prompts?: MCPPrompt[];
384
+ /**
385
+ * Authoritative protocol observation for this connection (preference,
386
+ * negotiated era/version, downgrade decision, deprecation state). Secret-free.
387
+ */
388
+ protocol: MCPProtocolObservation;
389
+ /** Freshness deadline (ms epoch) for the cached tool catalog, from server ttlMs hints. */
390
+ toolsFreshUntil?: number;
391
+ /** Cache scope of the cached tool catalog; private entries never cross credential identities. */
392
+ toolsCacheScope?: "public" | "private";
303
393
  }
304
394
 
305
395
  /** MCP tool with server context */
@@ -341,13 +431,13 @@ export interface MCPResourceTemplate {
341
431
  }
342
432
 
343
433
  /** Result of resources/list */
344
- export interface MCPResourcesListResult {
434
+ export interface MCPResourcesListResult extends MCPCacheHints {
345
435
  resources: MCPResource[];
346
436
  nextCursor?: string;
347
437
  }
348
438
 
349
439
  /** Result of resources/templates/list */
350
- export interface MCPResourceTemplatesListResult {
440
+ export interface MCPResourceTemplatesListResult extends MCPCacheHints {
351
441
  resourceTemplates: MCPResourceTemplate[];
352
442
  nextCursor?: string;
353
443
  }
@@ -361,7 +451,7 @@ export interface MCPResourceContentItem {
361
451
  }
362
452
 
363
453
  /** Result of resources/read */
364
- export interface MCPResourceReadResult {
454
+ export interface MCPResourceReadResult extends MCPCacheHints {
365
455
  contents: MCPResourceContentItem[];
366
456
  }
367
457
 
@@ -395,7 +485,7 @@ export interface MCPPrompt {
395
485
  }
396
486
 
397
487
  /** Result of prompts/list */
398
- export interface MCPPromptsListResult {
488
+ export interface MCPPromptsListResult extends MCPCacheHints {
399
489
  prompts: MCPPrompt[];
400
490
  nextCursor?: string;
401
491
  }
@@ -428,6 +518,27 @@ export interface MCPGetPromptResult {
428
518
  messages: MCPPromptMessage[];
429
519
  }
430
520
 
521
+ // =============================================================================
522
+ // server/discover (modern era)
523
+ // =============================================================================
524
+
525
+ /** Result of the optional modern `server/discover` request. */
526
+ export interface MCPDiscoverResult extends MCPCacheHints {
527
+ /** Protocol versions the server supports. */
528
+ supportedVersions: string[];
529
+ /** Capabilities the server supports. */
530
+ capabilities: MCPServerCapabilities;
531
+ /** Optional natural-language usage guidance. */
532
+ instructions?: string;
533
+ /** Result metadata; `io.modelcontextprotocol/serverInfo` carries the identity. */
534
+ _meta?: Record<string, unknown>;
535
+ }
536
+
537
+ /** Decoded `server/discover` payload with the extracted server identity. */
538
+ export interface MCPDiscoverResultLite extends MCPDiscoverResult {
539
+ serverInfo?: MCPImplementation;
540
+ }
541
+
431
542
  // =============================================================================
432
543
  // MCP Notification Method Names
433
544
  // =============================================================================