@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
@@ -22,7 +22,7 @@ import {
22
22
  } from "../daemon/operator-contract";
23
23
  import { runChatDaemonInternal } from "../sdk/bus/chat-daemon-cli";
24
24
 
25
- export type DaemonCliAction = "list" | "status" | "stop" | "reload";
25
+ export type DaemonCliAction = "list" | "status" | "stop" | "restart";
26
26
  export type DaemonInternalCliAction = "discord-internal" | "slack-internal";
27
27
  export type DaemonCommandAction = DaemonCliAction | DaemonInternalCliAction;
28
28
 
@@ -49,6 +49,7 @@ export interface DaemonCommandArgs {
49
49
  gracefulTimeoutMs?: number;
50
50
  killTimeoutMs?: number;
51
51
  spawnIfStopped?: boolean;
52
+ allowDisabledNoop?: boolean;
52
53
  smoke?: boolean;
53
54
  ownerId?: string;
54
55
  agentDir?: string;
@@ -59,6 +60,7 @@ export interface DaemonCommandArgs {
59
60
  export interface DaemonCommandDeps {
60
61
  settings?: Settings;
61
62
  controllers?: BuiltInDaemonController[];
63
+ setExitCode?: (code: number) => void;
62
64
  }
63
65
 
64
66
  const INTERNAL_ACTIONS: DaemonInternalCliAction[] = ["discord-internal", "slack-internal"];
@@ -147,15 +149,22 @@ export async function runDaemonCommand(cmd: DaemonCommandArgs, deps: DaemonComma
147
149
  killTimeoutMs: cmd.killTimeoutMs,
148
150
  force: cmd.force,
149
151
  spawnIfStopped: cmd.spawnIfStopped,
152
+ allowDisabledNoop: cmd.allowDisabledNoop,
150
153
  };
151
154
  const results: DaemonOperationResult[] = [];
152
155
  for (const controller of controllers) {
153
- results.push(cmd.action === "reload" ? await controller.reload(opts) : await controller.stop(opts));
156
+ results.push(cmd.action === "restart" ? await controller.reload(opts) : await controller.stop(opts));
154
157
  }
155
158
  if (cmd.json) {
156
159
  process.stdout.write(`${JSON.stringify(results, null, 2)}\n`);
157
160
  } else {
158
161
  process.stdout.write(`${results.map(formatDaemonResult).join("\n")}\n`);
159
162
  }
160
- if (results.some(r => !r.ok)) process.exitCode = DAEMON_EXIT.failure;
163
+ if (results.some(r => !r.ok))
164
+ (
165
+ deps.setExitCode ??
166
+ (code => {
167
+ process.exitCode = code;
168
+ })
169
+ )(DAEMON_EXIT.failure);
161
170
  }
@@ -8,6 +8,7 @@ export function getExtraHelpText(): string {
8
8
  ${APP_NAME} session - List, inspect, create, remove, or attach sessions
9
9
  ${APP_NAME} state - Inspect or manage persisted GJC state
10
10
  ${APP_NAME} auth-broker - Manage the auth-broker (credential vault)
11
+ ${APP_NAME} accounts - List, check, pin, and remove stored OAuth accounts
11
12
  ${APP_NAME} auth-gateway - Run an auth-gateway forward proxy
12
13
  ${APP_NAME} harness - Run harness control-plane commands
13
14
  ${APP_NAME} coordinator - Manage coordinator/runtime coordination helpers
@@ -2,12 +2,24 @@
2
2
  * Direct MCP server registration CLI helpers.
3
3
  *
4
4
  * This surface only writes explicit user-provided server definitions to GJC's
5
- * own MCP config. It never imports or inherits live configs from other agents.
5
+ * own native MCP config (project `./.gjc/mcp.json` or user `~/.gjc/agent/mcp.json`)
6
+ * through the canonical scope-aware reader/writer. It never imports or inherits
7
+ * live configs from other agents. Registrations written here are consumed by
8
+ * ordinary standalone sessions at startup (conventional autoload) unless
9
+ * disabled or opted out via `--no-mcp`.
6
10
  */
7
- import { getMCPConfigPath, getProjectDir } from "@gajae-code/utils";
8
- import { getMCPServer, readMCPConfigFile, removeMCPServer, upsertMCPServer } from "../runtime-mcp/config-writer";
11
+ import { getProjectDir } from "@gajae-code/utils";
9
12
  import { redactMCPEndpoint } from "../runtime-mcp/redaction";
10
- import type { MCPConfigFile, MCPServerConfig } from "../runtime-mcp/types";
13
+ import {
14
+ getScopeMCPServer,
15
+ type MCPConfigScope,
16
+ readScopeDisabledServers,
17
+ readScopeMCPConfig,
18
+ removeScopeMCPServer,
19
+ resolveScopeMCPConfigPath,
20
+ upsertScopeMCPServer,
21
+ } from "../runtime-mcp/scope-config";
22
+ import type { MCPServerConfig } from "../runtime-mcp/types";
11
23
 
12
24
  export type MCPAction = "add" | "list" | "remove";
13
25
 
@@ -35,35 +47,62 @@ export interface MCPCommandArgs {
35
47
  export class MCPArgsError extends Error {}
36
48
 
37
49
  interface ScopedPath {
38
- scope: "user" | "project";
50
+ scope: MCPConfigScope;
39
51
  path: string;
40
52
  }
41
53
 
42
- interface RuntimeDisclosure {
43
- runtimeStatus: "storage-only";
44
- runtimeLoadedByStandalone: false;
45
- runtimeNote: string;
46
- }
54
+ /** Runtime status of a stored registration for conventional autoload. */
55
+ type AutoloadStatus = "autoload" | "autoload-off" | "disabled";
47
56
 
48
57
  interface RedactedServerEntry {
49
58
  name: string;
50
59
  config: MCPServerConfig;
51
60
  }
52
61
 
53
- interface RuntimeRedactedServerEntry extends RedactedServerEntry, RuntimeDisclosure {}
62
+ interface RuntimeServerEntry extends RedactedServerEntry {
63
+ scope: "user" | "project";
64
+ path: string;
65
+ /** Whether ordinary standalone sessions load this registration at startup. */
66
+ runtimeStatus: AutoloadStatus;
67
+ /** Human-readable explanation of the runtime status. */
68
+ runtimeNote: string;
69
+ }
54
70
 
55
71
  const REDACTED = "<redacted>";
56
72
  const SENSITIVE_KEY_PATTERN =
57
73
  /(?:token|secret|key|credential|password|passwd|pwd|authorization|auth|bearer|cookie|session)/i;
58
- const STORAGE_ONLY_RUNTIME_DISCLOSURE: RuntimeDisclosure = {
59
- runtimeStatus: "storage-only",
60
- runtimeLoadedByStandalone: false,
61
- runtimeNote: "Stored MCP registrations are not loaded by normal standalone gjc sessions today.",
62
- };
74
+
75
+ /**
76
+ * Compute the conventional-autoload status of a stored server.
77
+ *
78
+ * - `autoload-off`: the server opted out of startup connection via `autoload: false`.
79
+ * - `disabled`: the server is disabled via `enabled: false` or the `disabledServers` list.
80
+ * - `autoload`: connected by ordinary standalone sessions at startup.
81
+ */
82
+ export function computeAutoloadStatus(
83
+ name: string,
84
+ config: MCPServerConfig,
85
+ disabledServers: ReadonlySet<string>,
86
+ ): AutoloadStatus {
87
+ if (config.enabled === false || disabledServers.has(name)) return "disabled";
88
+ if (config.autoload === false) return "autoload-off";
89
+ return "autoload";
90
+ }
91
+
92
+ function autoloadStatusNote(status: AutoloadStatus): string {
93
+ switch (status) {
94
+ case "autoload":
95
+ return "Loaded by ordinary standalone gjc sessions at startup.";
96
+ case "autoload-off":
97
+ return "Configured but not auto-loaded at startup (autoload: false); connect on demand via /mcp.";
98
+ case "disabled":
99
+ return "Disabled; not loaded by sessions. Re-enable to autoload.";
100
+ }
101
+ }
63
102
 
64
103
  function resolvePath(args: MCPCommandArgs): ScopedPath {
65
- const scope = args.flags.project ? "project" : "user";
66
- return { scope, path: getMCPConfigPath(scope, args.cwd ?? getProjectDir()) };
104
+ const scope: MCPConfigScope = args.flags.project ? "project" : "user";
105
+ return { scope, path: resolveScopeMCPConfigPath(scope, args.cwd ?? getProjectDir()) };
67
106
  }
68
107
 
69
108
  function parsePairs(values: string[] | undefined, label: string): Record<string, string> | undefined {
@@ -211,14 +250,32 @@ export function redactMCPServerConfig(config: MCPServerConfig): MCPServerConfig
211
250
  return redacted;
212
251
  }
213
252
 
214
- function withRuntimeDisclosure<T extends object>(value: T): T & RuntimeDisclosure {
215
- return { ...value, ...STORAGE_ONLY_RUNTIME_DISCLOSURE };
253
+ function withRuntimeDisclosure<T extends object>(
254
+ value: T,
255
+ status: AutoloadStatus,
256
+ ): T & { runtimeStatus: AutoloadStatus; runtimeNote: string } {
257
+ return { ...value, runtimeStatus: status, runtimeNote: autoloadStatusNote(status) };
216
258
  }
217
259
 
218
- function collectEntries(config: MCPConfigFile): RuntimeRedactedServerEntry[] {
219
- return Object.entries(config.mcpServers ?? {})
260
+ async function collectEntries(scoped: ScopedPath, cwd?: string): Promise<RuntimeServerEntry[]> {
261
+ const [config, disabled] = await Promise.all([
262
+ readScopeMCPConfig(scoped.scope, cwd),
263
+ readScopeDisabledServers(scoped.scope, cwd),
264
+ ]);
265
+ const disabledSet = new Set(disabled);
266
+ return Object.entries(config.config.mcpServers ?? {})
220
267
  .sort(([a], [b]) => a.localeCompare(b))
221
- .map(([name, serverConfig]) => withRuntimeDisclosure({ name, config: redactMCPServerConfig(serverConfig) }));
268
+ .map(([name, serverConfig]) => {
269
+ const runtimeStatus = computeAutoloadStatus(name, serverConfig, disabledSet);
270
+ return {
271
+ name,
272
+ scope: scoped.scope,
273
+ path: scoped.path,
274
+ runtimeStatus,
275
+ runtimeNote: autoloadStatusNote(runtimeStatus),
276
+ config: redactMCPServerConfig(serverConfig),
277
+ };
278
+ });
222
279
  }
223
280
 
224
281
  function writeJson(value: unknown): void {
@@ -241,78 +298,89 @@ function renderDetails(entry: RedactedServerEntry): string {
241
298
  async function runAdd(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
242
299
  if (!args.name) throw new MCPArgsError("`gjc mcp add` requires a server name.");
243
300
  const config = buildServerConfig(args);
244
- const result = await upsertMCPServer(scoped.path, args.name, config, { force: args.flags.force });
301
+ const { result, config: storedConfig } = await upsertScopeMCPServer(
302
+ scoped.scope,
303
+ args.name,
304
+ config,
305
+ {
306
+ force: args.flags.force,
307
+ },
308
+ args.cwd,
309
+ );
245
310
  const redacted = redactMCPServerConfig(config);
311
+ const disabled = new Set(storedConfig.disabledServers ?? (await readScopeDisabledServers(scoped.scope, args.cwd)));
312
+ const runtimeStatus = computeAutoloadStatus(args.name, config, disabled);
246
313
  if (args.flags.json) {
247
314
  writeJson(
248
- withRuntimeDisclosure({
249
- action: "add",
250
- status: result.status,
251
- name: args.name,
252
- scope: scoped.scope,
253
- path: scoped.path,
254
- config: redacted,
255
- }),
315
+ withRuntimeDisclosure(
316
+ {
317
+ action: "add",
318
+ status: result.status,
319
+ name: args.name,
320
+ scope: scoped.scope,
321
+ path: scoped.path,
322
+ config: redacted,
323
+ },
324
+ runtimeStatus,
325
+ ),
256
326
  );
257
327
  return;
258
328
  }
259
329
  if (result.status === "skipped") {
260
330
  process.stdout.write(
261
331
  `MCP server "${args.name}" already exists in ${scoped.scope} config. Pass --force to overwrite. ` +
262
- "Status: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n",
332
+ `Runtime: ${autoloadStatusNote(runtimeStatus)}\n`,
263
333
  );
264
334
  return;
265
335
  }
266
336
  process.stdout.write(
267
- `MCP server "${args.name}" ${result.status} in ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
337
+ `MCP server "${args.name}" ${result.status} in ${scoped.scope} config: ${scoped.path}\n` +
338
+ `Runtime: ${autoloadStatusNote(runtimeStatus)}\n`,
268
339
  );
269
340
  }
270
341
 
271
342
  async function runList(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
272
- const config = await readMCPConfigFile(scoped.path);
273
- const entries = collectEntries(config);
343
+ const entries = await collectEntries(scoped, args.cwd);
274
344
  if (args.flags.json) {
275
- writeJson(withRuntimeDisclosure({ action: "list", scope: scoped.scope, path: scoped.path, servers: entries }));
345
+ writeJson({
346
+ action: "list",
347
+ scope: scoped.scope,
348
+ path: scoped.path,
349
+ servers: entries,
350
+ });
276
351
  return;
277
352
  }
278
353
  if (entries.length === 0) {
279
- process.stdout.write(
280
- `No MCP servers registered in ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
281
- );
354
+ process.stdout.write(`No MCP servers registered in ${scoped.scope} config: ${scoped.path}\n`);
282
355
  return;
283
356
  }
284
- process.stdout.write(
285
- `MCP servers in ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
286
- );
357
+ process.stdout.write(`MCP servers in ${scoped.scope} config: ${scoped.path}\n`);
287
358
  for (const entry of entries) {
288
359
  process.stdout.write(`${renderDetails(entry)}\n`);
360
+ process.stdout.write(`Runtime: ${entry.runtimeNote}\n`);
289
361
  }
290
362
  }
291
363
 
292
364
  async function runRemove(args: MCPCommandArgs, scoped: ScopedPath): Promise<void> {
293
365
  if (!args.name) throw new MCPArgsError("`gjc mcp remove` requires a server name.");
294
- const existing = await getMCPServer(scoped.path, args.name);
295
- if (!existing) {
366
+ const existing = await getScopeMCPServer(scoped.scope, args.name, args.cwd);
367
+ if (!existing.config) {
296
368
  throw new MCPArgsError(`MCP server "${args.name}" not found in ${scoped.scope} config.`);
297
369
  }
298
- await removeMCPServer(scoped.path, args.name);
299
- const entry = { name: args.name, config: redactMCPServerConfig(existing) };
370
+ await removeScopeMCPServer(scoped.scope, args.name, args.cwd);
371
+ const entry = { name: args.name, config: redactMCPServerConfig(existing.config) };
300
372
  if (args.flags.json) {
301
- writeJson(
302
- withRuntimeDisclosure({
303
- action: "remove",
304
- status: "removed",
305
- name: args.name,
306
- scope: scoped.scope,
307
- path: scoped.path,
308
- removed: entry,
309
- }),
310
- );
373
+ writeJson({
374
+ action: "remove",
375
+ status: "removed",
376
+ name: args.name,
377
+ scope: scoped.scope,
378
+ path: scoped.path,
379
+ removed: entry,
380
+ });
311
381
  return;
312
382
  }
313
- process.stdout.write(
314
- `Removed MCP server "${args.name}" from ${scoped.scope} config: ${scoped.path}\nStatus: storage-only; normal standalone gjc sessions do not load stored MCP registrations today.\n`,
315
- );
383
+ process.stdout.write(`Removed MCP server "${args.name}" from ${scoped.scope} config: ${scoped.path}\n`);
316
384
  process.stdout.write(`${renderDetails(entry)}\n`);
317
385
  }
318
386
 
@@ -7,7 +7,6 @@ import { createInterface } from "node:readline/promises";
7
7
  import { APP_NAME } from "@gajae-code/utils/dirs";
8
8
  import chalk from "chalk";
9
9
  import { Settings, type SettingsAtomicPatch } from "../config/settings";
10
- import { SessionIndex } from "../sdk/broker/session-index";
11
10
  import {
12
11
  ChatDaemonController,
13
12
  type EnsureChatDaemonResult,
@@ -15,7 +14,6 @@ import {
15
14
  ensureSlackDaemon,
16
15
  } from "../sdk/bus/chat-daemon-control";
17
16
  import { getNotificationConfig, maskToken, tokenFingerprint } from "../sdk/bus/config";
18
- import { type ActivatedPreparedSession, activatePreparedSession } from "../sdk/bus/existing-thread-readiness";
19
17
  import {
20
18
  clearTelegramActivationMarker,
21
19
  createTelegramActivationMarker,
@@ -56,6 +54,8 @@ import {
56
54
  type TelegramSetupPreflight,
57
55
  type TelegramSetupTimers,
58
56
  } from "../sdk/bus/telegram-setup";
57
+ import { SessionRouter } from "../sdk/router";
58
+ import type { ActivatedPreparedSession } from "../sdk/session-activation";
59
59
 
60
60
  export type NotifyAction =
61
61
  | "setup"
@@ -548,12 +548,7 @@ async function runTelegramSetup(cmd: NotifyCommandArgs, deps: NotifyCommandDeps)
548
548
  reconnect: async () =>
549
549
  deps.ensureTelegramDaemon
550
550
  ? await deps.ensureTelegramDaemon(settings)
551
- : await ensureTelegramDaemonRunningDetailed({
552
- settings,
553
- cwd: process.cwd(),
554
- sessionId: `notify-cli-${process.pid}`,
555
- registerRoot: false,
556
- }),
551
+ : await ensureTelegramDaemonRunningDetailed({ settings }),
557
552
  persistInactive: async marker => await persistTelegramActivationMarker(settings, marker),
558
553
  clearInactive: async marker => await clearTelegramActivationMarker(settings, marker),
559
554
  marker: activationMarker,
@@ -929,11 +924,10 @@ async function runActivateThread(cmd: NotifyCommandArgs, deps: NotifyCommandDeps
929
924
  const { sessionId } = assertStrictActivateThreadInvocation(cmd);
930
925
  const activate =
931
926
  deps.activatePreparedSession ??
932
- (async (input: { settings: Settings; sessionId: string }) =>
933
- await activatePreparedSession({
934
- sessionIndex: await new SessionIndex(input.settings.getAgentDir()).open(),
935
- sessionId: input.sessionId,
936
- }));
927
+ (async (input: { settings: Settings; sessionId: string }) => {
928
+ const router = new SessionRouter({ agentDir: input.settings.getAgentDir() });
929
+ return await router.activatePreparedSession(input.sessionId);
930
+ });
937
931
  const activated = await activate({ settings: await getSettings(deps), sessionId });
938
932
  process.stdout.write(`${formatActivatedSession(activated)}\n`);
939
933
  }
@@ -987,7 +981,7 @@ ${chalk.bold("Examples:")}
987
981
  ${APP_NAME} notify activate-thread --session-id 01J...
988
982
 
989
983
  ${chalk.bold("Threaded Mode:")}
990
- GJC uses Telegram private-chat topics for per-session threads. Setup verifies the bot
984
+ GJC uses Telegram private-chat topics for coordinator/lifecycle sessions only. Setup verifies the bot
991
985
  capability via getMe.has_topics_enabled. Enable Threaded Mode in @BotFather > Bot Settings
992
986
  > Threads Settings; bots cannot toggle it through the Bot API. If Telegram refuses topic
993
987
  creation at runtime, GJC delivers flat to the paired private chat with outbound notifications
@@ -16,9 +16,17 @@ export const ROOT_LAUNCH_FLAGS = {
16
16
  description:
17
17
  "Stored credential selector: email:<addr>, id:<n>, account:<id>, project:<id>, or provider/email:<addr>",
18
18
  }),
19
+ "prefer-credential": Flags.string({
20
+ description:
21
+ "Preferred stored credential with quota fallback: email:<addr>, id:<n>, account:<id>, project:<id>, or provider/id:<n>",
22
+ }),
19
23
  "system-prompt": Flags.string({ description: "System prompt (default: coding assistant prompt)" }),
20
24
  "append-system-prompt": Flags.string({ description: "Append text or file contents to the system prompt" }),
21
25
  "mcp-config": Flags.string({ description: "Tools-only MCP config file (absolute path)" }),
26
+ "no-mcp": Flags.boolean({
27
+ description:
28
+ "Disable conventional MCP autoload (native user ~/.gjc/agent/mcp.json and project .gjc/mcp.json registrations)",
29
+ }),
22
30
  "clipboard-transport": Flags.string({
23
31
  description: "Clipboard transport: auto (default), native, osc52, or ssh",
24
32
  options: ["auto", "native", "osc52", "ssh"],
@@ -30,6 +30,14 @@ import {
30
30
  runHermesSetup,
31
31
  } from "../setup/hermes-setup";
32
32
  import { buildHostPluginSetup, formatHostPluginSetup, type HostPluginKind } from "../setup/host-plugin-setup";
33
+ import {
34
+ type PaseoSetupFlags,
35
+ type PaseoSetupOutcome,
36
+ PaseoSetupUsageError,
37
+ runPaseoSetup,
38
+ } from "../setup/paseo/paseo-setup";
39
+ import { checkExitCode } from "../setup/paseo/result-types";
40
+ import { createDefaultPaseoSetupDependencies } from "../setup/paseo/setup-deps";
33
41
  import {
34
42
  addApiCompatibleProvider,
35
43
  formatProviderPresetList,
@@ -44,6 +52,7 @@ export type SetupComponent =
44
52
  | "defaults"
45
53
  | "hermes"
46
54
  | "hooks"
55
+ | "paseo"
47
56
  | "provider"
48
57
  | "python"
49
58
  | "stt";
@@ -67,6 +76,8 @@ export interface SetupCommandArgs {
67
76
  repo?: string;
68
77
  profile?: string;
69
78
  sessionCommand?: string;
79
+ remove?: boolean;
80
+ mpreset?: string;
70
81
  noWorktree?: boolean;
71
82
  worktreeName?: string;
72
83
  stateRoot?: string;
@@ -89,11 +100,31 @@ const VALID_COMPONENTS: SetupComponent[] = [
89
100
  "defaults",
90
101
  "hermes",
91
102
  "hooks",
103
+ "paseo",
92
104
  "provider",
93
105
  "python",
94
106
  "stt",
95
107
  ];
96
108
 
109
+ /**
110
+ * Flags introduced by the `paseo` component.
111
+ *
112
+ * Deliberately narrow: `--check`, `--json`, and `--force` are pre-existing
113
+ * shared setup flags and are NOT relabeled here, so no other component's
114
+ * behavior changes.
115
+ */
116
+ const PASEO_ONLY_FLAGS: readonly (keyof SetupCommandArgs["flags"])[] = ["remove", "mpreset"];
117
+
118
+ function rejectPaseoFlagsOutsidePaseo(component: SetupComponent, flags: SetupCommandArgs["flags"]): void {
119
+ if (component === "paseo") return;
120
+ const offending = PASEO_ONLY_FLAGS.filter(flag => flags[flag] !== undefined);
121
+ if (offending.length === 0) return;
122
+ const flagList = offending.map(flag => `--${flag}`);
123
+ process.stderr.write(`${chalk.red(`${flagList.join(", ")} require the explicit \`paseo\` component.`)}\n`);
124
+ process.stderr.write(`${chalk.dim(`Run: ${APP_NAME} setup paseo ${flagList.join(" ")}`)}\n`);
125
+ process.exit(1);
126
+ }
127
+
97
128
  function hasProviderSetupFlags(flags: SetupCommandArgs["flags"]): boolean {
98
129
  return (
99
130
  flags.compat !== undefined ||
@@ -194,6 +225,10 @@ export function parseSetupArgs(args: string[]): SetupCommandArgs | undefined {
194
225
  flags.model = [...(flags.model ?? []), args[++i] ?? ""];
195
226
  } else if (arg === "--models-path") {
196
227
  flags.modelsPath = args[++i];
228
+ } else if (arg === "--remove") {
229
+ flags.remove = true;
230
+ } else if (arg === "--mpreset") {
231
+ flags.mpreset = args[++i];
197
232
  } else if (!componentSeen && VALID_COMPONENTS.includes(arg as SetupComponent)) {
198
233
  component = arg as SetupComponent;
199
234
  componentSeen = true;
@@ -205,6 +240,7 @@ export function parseSetupArgs(args: string[]): SetupCommandArgs | undefined {
205
240
  }
206
241
 
207
242
  rejectProviderFlagsOutsideProvider(component, flags);
243
+ rejectPaseoFlagsOutsidePaseo(component, flags);
208
244
 
209
245
  return {
210
246
  component,
@@ -262,6 +298,7 @@ async function checkPythonSetup(): Promise<PythonCheckResult> {
262
298
  */
263
299
  export async function runSetupCommand(cmd: SetupCommandArgs): Promise<void> {
264
300
  rejectProviderFlagsOutsideProvider(cmd.component, cmd.flags);
301
+ rejectPaseoFlagsOutsidePaseo(cmd.component, cmd.flags);
265
302
  switch (cmd.component) {
266
303
  case "claude":
267
304
  handleHostPluginSetup("claude", cmd.flags);
@@ -278,6 +315,9 @@ export async function runSetupCommand(cmd: SetupCommandArgs): Promise<void> {
278
315
  case "hooks":
279
316
  await handleHooksSetup(cmd.flags);
280
317
  break;
318
+ case "paseo":
319
+ await handlePaseoSetup(cmd.flags);
320
+ break;
281
321
  case "provider":
282
322
  await handleProviderSetup(cmd.flags);
283
323
  break;
@@ -382,6 +422,105 @@ async function handleProviderSetup(flags: {
382
422
  }
383
423
  }
384
424
 
425
+ /**
426
+ * Register GJC with Paseo, diagnose that registration, or roll it back.
427
+ *
428
+ * Every write target belongs to another application, so failures are reported
429
+ * rather than worked around: a refusal here means the user's files were left
430
+ * exactly as they were.
431
+ */
432
+ async function handlePaseoSetup(flags: SetupCommandArgs["flags"]): Promise<void> {
433
+ const paseoFlags: PaseoSetupFlags = {
434
+ check: flags.check,
435
+ json: flags.json,
436
+ force: flags.force,
437
+ remove: flags.remove,
438
+ mpreset: flags.mpreset,
439
+ };
440
+ try {
441
+ const outcome = await runPaseoSetup(paseoFlags, createDefaultPaseoSetupDependencies());
442
+ if (flags.json) {
443
+ process.stdout.write(`${JSON.stringify(outcome.result, null, 2)}\n`);
444
+ process.exitCode = paseoExitCode(outcome);
445
+ return;
446
+ }
447
+ writePaseoHumanOutput(outcome);
448
+ } catch (error) {
449
+ const message = error instanceof Error ? error.message : String(error);
450
+ if (flags.json) {
451
+ process.stdout.write(`${JSON.stringify({ ok: false, error: message }, null, 2)}\n`);
452
+ } else {
453
+ process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup failed`)}\n`);
454
+ process.stderr.write(`${chalk.dim(message)}\n`);
455
+ }
456
+ process.exit(error instanceof PaseoSetupUsageError ? 2 : 1);
457
+ }
458
+ }
459
+
460
+ function paseoExitCode(outcome: PaseoSetupOutcome): number {
461
+ if (outcome.kind === "check") return checkExitCode(outcome.result);
462
+ if (outcome.kind === "install") return outcome.result.outcome === "installed" ? 0 : 1;
463
+ return outcome.result.outcome === "partial-removal" ? 1 : 0;
464
+ }
465
+
466
+ function writePaseoHumanOutput(outcome: PaseoSetupOutcome): void {
467
+ if (outcome.kind === "check") {
468
+ const result = outcome.result;
469
+ switch (result.status) {
470
+ case "drift":
471
+ process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup has drifted`)}\n`);
472
+ for (const reason of result.reasons) {
473
+ process.stderr.write(`${chalk.dim(` ${reason.code}: ${reason.subject} -- ${reason.detail}`)}\n`);
474
+ }
475
+ process.exitCode = 1;
476
+ return;
477
+ case "stale":
478
+ process.stdout.write(`${chalk.yellow(`${theme.status.warning} Paseo has not picked up the change yet`)}\n`);
479
+ if (result.guidance) process.stdout.write(`${chalk.dim(result.guidance)}\n`);
480
+ return;
481
+ case "skipped":
482
+ process.stdout.write(`${chalk.green(`${theme.status.success} Paseo setup files are correct`)}\n`);
483
+ process.stdout.write(
484
+ `${chalk.dim("The Paseo daemon did not respond, so its live provider list was not verified.")}\n`,
485
+ );
486
+ return;
487
+ case "pass":
488
+ process.stdout.write(`${chalk.green(`${theme.status.success} GJC is registered with Paseo`)}\n`);
489
+ return;
490
+ }
491
+ }
492
+
493
+ if (outcome.kind === "install") {
494
+ if (outcome.result.outcome === "installed") {
495
+ process.stdout.write(`${chalk.green(`${theme.status.success} GJC registered with Paseo`)}\n`);
496
+ for (const entry of outcome.result.changed) process.stdout.write(`${chalk.dim(` updated ${entry}`)}\n`);
497
+ process.stdout.write(
498
+ `${chalk.dim("Restart the Paseo daemon when convenient so it picks up the new provider.")}\n`,
499
+ );
500
+ return;
501
+ }
502
+ process.stderr.write(`${chalk.red(`${theme.status.error} Paseo setup did not complete`)}\n`);
503
+ process.stderr.write(`${chalk.dim(outcome.result.evidence.detail)}\n`);
504
+ process.exitCode = 1;
505
+ return;
506
+ }
507
+
508
+ switch (outcome.result.outcome) {
509
+ case "removed":
510
+ process.stdout.write(`${chalk.green(`${theme.status.success} GJC unregistered from Paseo`)}\n`);
511
+ for (const entry of outcome.result.removed) process.stdout.write(`${chalk.dim(` reverted ${entry}`)}\n`);
512
+ return;
513
+ case "nothing-to-remove":
514
+ process.stdout.write(`${chalk.dim("GJC has nothing recorded to remove from Paseo.")}\n`);
515
+ return;
516
+ case "partial-removal":
517
+ process.stderr.write(`${chalk.red(`${theme.status.error} Paseo removal did not complete`)}\n`);
518
+ process.stderr.write(`${chalk.dim(outcome.result.evidence.detail)}\n`);
519
+ process.exitCode = 1;
520
+ return;
521
+ }
522
+ }
523
+
385
524
  async function handleHooksSetup(flags: { json?: boolean; check?: boolean }): Promise<void> {
386
525
  const hooksPath = getDefaultCodexHooksPath();
387
526
  const existingContent = await Bun.file(hooksPath)
@@ -724,6 +863,7 @@ ${chalk.bold("Components:")}
724
863
  defaults Install bundled GJC default workflow skills (default)
725
864
  hermes Optional: render/install a Hermes MCP bridge setup package
726
865
  hooks Optional: install GJC native Codex UserPromptSubmit/Stop skill-state hooks
866
+ paseo Optional: register GJC as a Paseo ACP provider and bridge Paseo's skills
727
867
  provider Optional: add a preset, OpenAI-compatible, or Anthropic-compatible API provider
728
868
  python Optional: verify a Python 3 interpreter is reachable for code execution
729
869
  stt Optional: install speech-to-text dependencies (openai-whisper, recording tools)
@@ -770,6 +910,8 @@ ${chalk.bold("Options:")}
770
910
  --dry-run Preview discovered credentials without importing (credentials)
771
911
  -y, --yes Import discovered credentials without an interactive prompt (credentials)
772
912
  --keychain Include Claude macOS Keychain when discovering credentials
913
+ --remove Roll back the Paseo registration GJC created (paseo)
914
+ --mpreset Register an additional gjc-<preset> Paseo provider (paseo)
773
915
 
774
916
  ${chalk.bold("Examples:")}
775
917
  ${APP_NAME} setup Install bundled GJC default workflow skills
@@ -785,5 +927,8 @@ ${chalk.bold("Examples:")}
785
927
  ${APP_NAME} setup credentials Discover & import existing Claude/Codex credentials
786
928
  ${APP_NAME} setup credentials --dry-run Preview importable credentials (redacted)
787
929
  ${APP_NAME} setup credentials --yes Import without an interactive prompt
930
+ ${APP_NAME} setup paseo Register GJC as a Paseo ACP provider
931
+ ${APP_NAME} setup paseo --check Diagnose the Paseo registration
932
+ ${APP_NAME} setup paseo --remove Roll back the Paseo registration
788
933
  `);
789
934
  }