@gajae-code/coding-agent 0.13.3 → 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 (599) hide show
  1. package/CHANGELOG.md +184 -2
  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 +9 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +70 -6
  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 +1 -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/gajae-pet-widget.d.ts +8 -30
  87. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  88. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  89. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  90. package/dist/types/modes/components/pet-capability.d.ts +11 -25
  91. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  92. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  93. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  94. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  95. package/dist/types/modes/interactive-mode.d.ts +1 -0
  96. package/dist/types/modes/types.d.ts +1 -0
  97. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  98. package/dist/types/runtime-mcp/config.d.ts +9 -0
  99. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  100. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  101. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  102. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  103. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  104. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  105. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  106. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  107. package/dist/types/runtime-mcp/types.d.ts +102 -10
  108. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  109. package/dist/types/sdk/broker/broker.d.ts +3 -55
  110. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  111. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  112. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  113. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  114. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  115. package/dist/types/sdk/bus/config.d.ts +11 -0
  116. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  117. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  118. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  119. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  120. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  121. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  122. package/dist/types/sdk/bus/index.d.ts +85 -99
  123. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  124. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  125. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  126. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  127. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  128. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  129. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  130. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  131. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  132. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  133. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  135. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  136. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  137. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  138. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  139. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  140. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  141. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  142. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  143. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  144. package/dist/types/sdk/cli/rows.d.ts +2 -11
  145. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  146. package/dist/types/sdk/client/client.d.ts +97 -1
  147. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  148. package/dist/types/sdk/host/control/index.d.ts +1 -1
  149. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  150. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  151. package/dist/types/sdk/host/host.d.ts +15 -1
  152. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  153. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  154. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  155. package/dist/types/sdk/host/types.d.ts +1 -1
  156. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  157. package/dist/types/sdk/index.d.ts +2 -1
  158. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  159. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  160. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  161. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  162. package/dist/types/sdk/mcp/server.d.ts +9 -6
  163. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  164. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  165. package/dist/types/sdk/prompt-status.d.ts +10 -3
  166. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  167. package/dist/types/sdk/receipt-state.d.ts +17 -0
  168. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  169. package/dist/types/sdk/router/index.d.ts +1 -0
  170. package/dist/types/sdk/router/session-router.d.ts +152 -0
  171. package/dist/types/sdk/session-list.d.ts +22 -0
  172. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  173. package/dist/types/sdk/session.d.ts +34 -1
  174. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  175. package/dist/types/session/account-inventory.d.ts +86 -0
  176. package/dist/types/session/agent-session.d.ts +145 -6
  177. package/dist/types/session/agent-storage.d.ts +10 -0
  178. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  179. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  180. package/dist/types/session/messages.d.ts +1 -1
  181. package/dist/types/session/secure-token-file.d.ts +3 -0
  182. package/dist/types/session/session-manager.d.ts +40 -1
  183. package/dist/types/session/startup-auth-config.d.ts +44 -0
  184. package/dist/types/session/terminal-abort.d.ts +378 -0
  185. package/dist/types/session/yield-queue.d.ts +7 -0
  186. package/dist/types/session-import/claude.d.ts +26 -0
  187. package/dist/types/session-import/codex.d.ts +88 -0
  188. package/dist/types/session-import/command.d.ts +35 -0
  189. package/dist/types/session-import/detect.d.ts +22 -0
  190. package/dist/types/session-import/index.d.ts +7 -0
  191. package/dist/types/session-import/provider-codex.d.ts +22 -0
  192. package/dist/types/session-import/provider-service.d.ts +38 -0
  193. package/dist/types/session-import/redact.d.ts +23 -0
  194. package/dist/types/session-import/service.d.ts +47 -0
  195. package/dist/types/session-import/types.d.ts +120 -0
  196. package/dist/types/setup/paseo/check.d.ts +16 -0
  197. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  198. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  199. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  200. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  201. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  202. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  203. package/dist/types/setup/paseo/remove.d.ts +14 -0
  204. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  205. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  206. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  207. package/dist/types/skill-state/active-state.d.ts +5 -1
  208. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  209. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  210. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  211. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  212. package/dist/types/slash-commands/types.d.ts +7 -1
  213. package/dist/types/task/executor.d.ts +10 -0
  214. package/dist/types/task/index.d.ts +3 -1
  215. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  216. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  217. package/dist/types/tools/bash.d.ts +2 -6
  218. package/dist/types/tools/browser/attach.d.ts +11 -0
  219. package/dist/types/tools/browser/launch.d.ts +20 -0
  220. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  221. package/dist/types/tools/browser/render.d.ts +1 -0
  222. package/dist/types/tools/browser.d.ts +3 -1
  223. package/dist/types/tools/image-gen.d.ts +9 -2
  224. package/dist/types/tools/index.d.ts +8 -0
  225. package/dist/types/tools/monitor.d.ts +1 -1
  226. package/dist/types/tools/skill-discovery.d.ts +8 -1
  227. package/dist/types/tools/subagent.d.ts +2 -0
  228. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  229. package/dist/types/utils/herdr-pane.d.ts +76 -0
  230. package/package.json +19 -9
  231. package/scripts/build-binary.ts +2 -1
  232. package/scripts/build-sdk-package-smoke.ts +2 -13
  233. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  234. package/scripts/compile-args.ts +2 -0
  235. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  236. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  237. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  238. package/scripts/generate-tool-catalog.ts +6 -4
  239. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  240. package/src/async/job-manager.ts +352 -17
  241. package/src/async/support.ts +25 -0
  242. package/src/autoresearch/dashboard.ts +28 -13
  243. package/src/capability/index.ts +3 -1
  244. package/src/capability/mcp.ts +6 -0
  245. package/src/capability/types.ts +6 -0
  246. package/src/cli/accounts-cli.ts +395 -0
  247. package/src/cli/args.ts +23 -0
  248. package/src/cli/auth-broker-cli.ts +136 -66
  249. package/src/cli/auth-gateway-cli.ts +94 -70
  250. package/src/cli/config-cli.ts +27 -2
  251. package/src/cli/crash-cli.ts +78 -0
  252. package/src/cli/customize-doctor.ts +1605 -0
  253. package/src/cli/daemon-cli.ts +12 -3
  254. package/src/cli/fast-help.ts +1 -0
  255. package/src/cli/mcp-cli.ts +128 -60
  256. package/src/cli/notify-cli.ts +8 -14
  257. package/src/cli/root-flags.ts +8 -0
  258. package/src/cli/setup-cli.ts +145 -0
  259. package/src/cli/skills-cli.ts +38 -2
  260. package/src/cli/update-cli.ts +167 -12
  261. package/src/cli.ts +4 -0
  262. package/src/commands/accounts.ts +71 -0
  263. package/src/commands/crash.ts +35 -0
  264. package/src/commands/customize.ts +84 -0
  265. package/src/commands/daemon.ts +2 -2
  266. package/src/commands/deep-interview.ts +2 -0
  267. package/src/commands/launch.ts +1 -0
  268. package/src/commands/mcp.ts +12 -7
  269. package/src/commands/ralplan.ts +2 -0
  270. package/src/commands/sdk.ts +65 -32
  271. package/src/commands/setup.ts +5 -0
  272. package/src/commands/skills.ts +14 -4
  273. package/src/commands/ultragoal.ts +10 -1
  274. package/src/commands/update.ts +26 -15
  275. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  276. package/src/config/atomic-yaml-patch.ts +769 -29
  277. package/src/config/config-schema-version.ts +10 -0
  278. package/src/config/file-lock.ts +70 -1
  279. package/src/config/mcp-schema.json +52 -14
  280. package/src/config/model-profile-activation.ts +20 -1
  281. package/src/config/model-profiles.ts +29 -19
  282. package/src/config/model-registry.ts +132 -21
  283. package/src/config/models-config-schema.ts +1 -1
  284. package/src/config/settings-schema.ts +76 -6
  285. package/src/config/settings.ts +4038 -199
  286. package/src/config/skill-settings-defaults.ts +41 -3
  287. package/src/config/task-delegation.ts +87 -0
  288. package/src/config/update-channel.ts +23 -0
  289. package/src/coordinator-mcp/server.ts +377 -308
  290. package/src/crash/index-store.ts +723 -0
  291. package/src/crash/nudge.ts +89 -0
  292. package/src/crash/record-loader.ts +149 -0
  293. package/src/crash/report.ts +551 -0
  294. package/src/crash/sanitize.ts +129 -0
  295. package/src/cursor.ts +36 -10
  296. package/src/customization/import.ts +946 -0
  297. package/src/customization/index.ts +4 -0
  298. package/src/customization/inventory.ts +335 -0
  299. package/src/customization/mutations.ts +141 -0
  300. package/src/customization/types.ts +223 -0
  301. package/src/daemon/control-types.ts +8 -1
  302. package/src/daemon/operator-contract.ts +6 -6
  303. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  304. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  305. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  306. package/src/discovery/claude-hooks.ts +38 -0
  307. package/src/discovery/claude.ts +142 -209
  308. package/src/discovery/codex-hooks.ts +38 -0
  309. package/src/discovery/codex.ts +132 -198
  310. package/src/discovery/helpers.ts +8 -1
  311. package/src/discovery/index.ts +2 -0
  312. package/src/discovery/mcp-compat.ts +234 -0
  313. package/src/discovery/mcp-json.ts +6 -0
  314. package/src/edit/renderer.ts +40 -0
  315. package/src/edit/streaming.ts +4 -2
  316. package/src/exec/bash-executor.ts +24 -20
  317. package/src/export/html/index.ts +51 -2
  318. package/src/extensibility/extensions/loader.ts +9 -1
  319. package/src/extensibility/extensions/runner.ts +17 -4
  320. package/src/extensibility/extensions/types.ts +31 -6
  321. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  322. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  323. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  324. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  325. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  326. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  327. package/src/extensibility/hooks/loader.ts +154 -10
  328. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  329. package/src/extensibility/skill-management.ts +368 -0
  330. package/src/extensibility/skills.ts +52 -16
  331. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  332. package/src/gjc-runtime/launch-worktree.ts +56 -2
  333. package/src/gjc-runtime/linux-proc.ts +7 -1
  334. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  335. package/src/gjc-runtime/session-state-lock.ts +992 -0
  336. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  337. package/src/gjc-runtime/state-writer.ts +39 -14
  338. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  339. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  340. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  341. package/src/gjc-runtime/workflow-settings.ts +596 -0
  342. package/src/goals/tools/goal-tool.ts +6 -1
  343. package/src/hooks/events.ts +291 -0
  344. package/src/hooks/native-skill-hook.ts +4 -0
  345. package/src/hooks/normalize.ts +369 -0
  346. package/src/hooks/skill-state.ts +165 -46
  347. package/src/internal-urls/docs-index.generated.ts +40 -32
  348. package/src/main.ts +32 -5
  349. package/src/migrate/mcp-mapper.ts +25 -2
  350. package/src/modes/acp/abort-scope.ts +29 -0
  351. package/src/modes/acp/acp-agent.ts +423 -98
  352. package/src/modes/components/assistant-message.ts +6 -1
  353. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  354. package/src/modes/components/customization/import-wizard.ts +372 -0
  355. package/src/modes/components/customization/index.ts +1 -0
  356. package/src/modes/components/gajae-pet-widget.ts +539 -213
  357. package/src/modes/components/irc-sidebar.ts +11 -0
  358. package/src/modes/components/iterm-pet-transport.ts +585 -0
  359. package/src/modes/components/oauth-selector.ts +277 -86
  360. package/src/modes/components/pet-capability.ts +39 -40
  361. package/src/modes/components/settings-selector.ts +9 -0
  362. package/src/modes/components/status-line/gh.ts +45 -1
  363. package/src/modes/components/status-line/segments.ts +16 -1
  364. package/src/modes/components/tool-status-header.ts +13 -3
  365. package/src/modes/controllers/command-controller.ts +20 -8
  366. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  367. package/src/modes/controllers/input-controller.ts +10 -0
  368. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  369. package/src/modes/controllers/selector-controller.ts +177 -72
  370. package/src/modes/controllers/stt-controller.ts +3 -3
  371. package/src/modes/interactive-mode.ts +88 -16
  372. package/src/modes/print-mode.ts +35 -6
  373. package/src/modes/runtime-init.ts +21 -68
  374. package/src/modes/types.ts +1 -0
  375. package/src/modes/utils/injected-user-submission.ts +25 -0
  376. package/src/modes/utils/terminal-bell.ts +15 -1
  377. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  378. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  379. package/src/prompts/agents/critic.md +1 -1
  380. package/src/prompts/system/rlm-research.md +1 -1
  381. package/src/prompts/system/system-prompt.md +0 -2
  382. package/src/prompts/tools/bash.md +7 -1
  383. package/src/prompts/tools/browser.md +1 -1
  384. package/src/prompts/tools/cron.md +6 -6
  385. package/src/prompts/tools/read.md +0 -2
  386. package/src/prompts/tools/skill-discovery.md +4 -2
  387. package/src/runtime-mcp/client.ts +427 -23
  388. package/src/runtime-mcp/config.ts +37 -5
  389. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  390. package/src/runtime-mcp/manager.ts +52 -2
  391. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  392. package/src/runtime-mcp/oauth-flow.ts +46 -1
  393. package/src/runtime-mcp/pool-key.ts +5 -1
  394. package/src/runtime-mcp/pool.test.ts +9 -0
  395. package/src/runtime-mcp/protocol.test.ts +353 -0
  396. package/src/runtime-mcp/protocol.ts +624 -0
  397. package/src/runtime-mcp/scope-config.ts +78 -0
  398. package/src/runtime-mcp/tool-bridge.ts +44 -10
  399. package/src/runtime-mcp/transports/http.ts +84 -13
  400. package/src/runtime-mcp/types.ts +123 -12
  401. package/src/sdk/acp/adapter.ts +328 -97
  402. package/src/sdk/broker/broker.ts +160 -741
  403. package/src/sdk/broker/ensure.ts +9 -1
  404. package/src/sdk/broker/lifecycle.ts +510 -116
  405. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  406. package/src/sdk/broker/process-incarnation.ts +19 -0
  407. package/src/sdk/broker/session-index.ts +516 -117
  408. package/src/sdk/broker/startup-failure.ts +28 -5
  409. package/src/sdk/broker/transport.ts +1 -13
  410. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  411. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  412. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  413. package/src/sdk/bus/config.ts +13 -0
  414. package/src/sdk/bus/conversation-store.ts +59 -171
  415. package/src/sdk/bus/daemon-paths.ts +20 -0
  416. package/src/sdk/bus/discord-conversation.ts +2 -0
  417. package/src/sdk/bus/discord-daemon.ts +524 -126
  418. package/src/sdk/bus/discord-live-provider.ts +206 -79
  419. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  420. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  421. package/src/sdk/bus/index.ts +2480 -456
  422. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  423. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  424. package/src/sdk/bus/managed-daemon.ts +2 -145
  425. package/src/sdk/bus/notification-service.ts +196 -0
  426. package/src/sdk/bus/operator-runtime.ts +1 -1
  427. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  428. package/src/sdk/bus/reconciliation-store.ts +553 -24
  429. package/src/sdk/bus/session-control.ts +49 -3
  430. package/src/sdk/bus/slack-conversation.ts +4 -0
  431. package/src/sdk/bus/slack-daemon.ts +733 -134
  432. package/src/sdk/bus/slack-live-provider.ts +65 -15
  433. package/src/sdk/bus/slack-provider.ts +4 -0
  434. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  435. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  436. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  437. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  438. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  439. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  440. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  441. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  442. package/src/sdk/bus/telegram-reference.ts +1 -226
  443. package/src/sdk/bus/telegram-setup.ts +2 -2
  444. package/src/sdk/bus/threaded-render.ts +1 -0
  445. package/src/sdk/bus/topic-registry.ts +279 -146
  446. package/src/sdk/cli/rows.ts +2 -35
  447. package/src/sdk/cli/session-cli.ts +776 -700
  448. package/src/sdk/client/client.ts +892 -1
  449. package/src/sdk/host/control/dispatch.ts +93 -58
  450. package/src/sdk/host/control/index.ts +1 -1
  451. package/src/sdk/host/control/operations.ts +18 -10
  452. package/src/sdk/host/control/runtime-gate.ts +40 -0
  453. package/src/sdk/host/host.ts +63 -12
  454. package/src/sdk/host/query/handlers.ts +66 -7
  455. package/src/sdk/host/reverse-leases.ts +2 -2
  456. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  457. package/src/sdk/host/session-runtime.test.ts +2787 -34
  458. package/src/sdk/host/session-runtime.ts +1489 -101
  459. package/src/sdk/host/surface-policy.ts +12 -8
  460. package/src/sdk/host/types.ts +1 -1
  461. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  462. package/src/sdk/host/websocket-transport.ts +85 -50
  463. package/src/sdk/index.ts +2 -1
  464. package/src/sdk/lifecycle/broker-client.ts +53 -0
  465. package/src/sdk/lifecycle/client.ts +234 -0
  466. package/src/sdk/lifecycle/index.ts +3 -0
  467. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  468. package/src/sdk/lifecycle/service.ts +720 -0
  469. package/src/sdk/mcp/server.ts +226 -188
  470. package/src/sdk/prompt-deadline-lease.ts +55 -0
  471. package/src/sdk/prompt-deadline-manager.ts +148 -0
  472. package/src/sdk/prompt-status.ts +11 -3
  473. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  474. package/src/sdk/protocol/operation-registry.ts +71 -8
  475. package/src/sdk/receipt-state.ts +43 -0
  476. package/src/sdk/reconciliation-extensions.ts +14 -0
  477. package/src/sdk/router/index.ts +1 -0
  478. package/src/sdk/router/session-router.ts +1658 -0
  479. package/src/sdk/session-list.ts +93 -0
  480. package/src/sdk/session-reconnect.ts +45 -1
  481. package/src/sdk/session.ts +716 -120
  482. package/src/sdk/transport/serve-cli.ts +18 -34
  483. package/src/session/account-inventory.ts +603 -0
  484. package/src/session/agent-session.ts +2857 -582
  485. package/src/session/agent-storage.ts +35 -0
  486. package/src/session/blob-store.ts +32 -1
  487. package/src/session/coordinator-tool-label.ts +40 -0
  488. package/src/session/internal/managed-session-scope.ts +4 -0
  489. package/src/session/internal/managed-session-storage.ts +173 -12
  490. package/src/session/messages.ts +1 -1
  491. package/src/session/secure-token-file.ts +80 -0
  492. package/src/session/session-manager.ts +730 -58
  493. package/src/session/session-storage.ts +25 -16
  494. package/src/session/startup-auth-config.ts +297 -0
  495. package/src/session/terminal-abort.ts +1253 -0
  496. package/src/session/yield-queue.ts +57 -15
  497. package/src/session-import/claude.ts +334 -0
  498. package/src/session-import/codex.ts +1033 -0
  499. package/src/session-import/command.ts +77 -0
  500. package/src/session-import/detect.ts +133 -0
  501. package/src/session-import/index.ts +7 -0
  502. package/src/session-import/provider-codex.ts +327 -0
  503. package/src/session-import/provider-service.ts +457 -0
  504. package/src/session-import/redact.ts +128 -0
  505. package/src/session-import/service.ts +1264 -0
  506. package/src/session-import/types.ts +148 -0
  507. package/src/setup/paseo/check.ts +213 -0
  508. package/src/setup/paseo/install-saga.ts +293 -0
  509. package/src/setup/paseo/json-publisher.ts +263 -0
  510. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  511. package/src/setup/paseo/paseo-ownership.ts +224 -0
  512. package/src/setup/paseo/paseo-setup.ts +253 -0
  513. package/src/setup/paseo/provider-config.ts +139 -0
  514. package/src/setup/paseo/remove.ts +183 -0
  515. package/src/setup/paseo/result-types.ts +79 -0
  516. package/src/setup/paseo/setup-deps.ts +175 -0
  517. package/src/setup/paseo/skills-bridge.ts +260 -0
  518. package/src/skill-state/active-state.ts +21 -11
  519. package/src/slash-commands/acp-builtins.ts +9 -1
  520. package/src/slash-commands/builtin-registry.ts +98 -16
  521. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  522. package/src/slash-commands/helpers/mcp.ts +9 -3
  523. package/src/slash-commands/helpers/usage-report.ts +61 -56
  524. package/src/slash-commands/types.ts +7 -2
  525. package/src/task/executor.ts +30 -11
  526. package/src/task/index.ts +66 -7
  527. package/src/task/render.ts +23 -9
  528. package/src/tools/ask-answer-registry.ts +23 -7
  529. package/src/tools/ask.ts +8 -4
  530. package/src/tools/bash-sleep-advisory.ts +115 -0
  531. package/src/tools/bash.ts +98 -18
  532. package/src/tools/browser/attach.ts +71 -3
  533. package/src/tools/browser/launch.ts +86 -13
  534. package/src/tools/browser/profile-discovery.ts +57 -7
  535. package/src/tools/browser/render.ts +8 -1
  536. package/src/tools/browser.ts +130 -21
  537. package/src/tools/computer.enforcement.test.ts +1 -1
  538. package/src/tools/computer.ts +3 -2
  539. package/src/tools/cron.ts +12 -1
  540. package/src/tools/image-gen.ts +27 -16
  541. package/src/tools/index.ts +8 -0
  542. package/src/tools/job.ts +33 -6
  543. package/src/tools/monitor.ts +41 -2
  544. package/src/tools/skill-discovery.ts +21 -29
  545. package/src/tools/subagent.ts +142 -24
  546. package/src/tools/tool-catalog.generated.ts +6 -6
  547. package/src/tools/ultragoal-ask-guard.ts +10 -3
  548. package/src/utils/herdr-pane.ts +345 -0
  549. package/src/utils/title-generator.ts +2 -0
  550. package/src/web/scrapers/index.ts +6 -4
  551. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  552. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  553. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  554. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  555. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  556. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  557. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  558. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  559. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  560. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  561. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  562. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  563. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  564. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  565. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  566. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  567. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  568. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  569. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  570. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  571. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  572. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  573. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  574. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  575. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  576. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  577. package/dist/types/session/auth-broker-config.d.ts +0 -13
  578. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  579. package/dist/types/skills/skills.test.d.ts +0 -1
  580. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  581. package/dist/types/task/token-log.test.d.ts +0 -1
  582. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  583. package/dist/types/tools/descriptors.test.d.ts +0 -1
  584. package/scripts/g005-daemon-smoke.ts +0 -180
  585. package/scripts/g011-daemon-path-smoke.ts +0 -153
  586. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  587. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  588. package/src/sdk/bus/telegram-cli.ts +0 -212
  589. package/src/sdk/elevation/allowlist.ts +0 -54
  590. package/src/sdk/elevation/audit.ts +0 -208
  591. package/src/sdk/elevation/capability.ts +0 -41
  592. package/src/sdk/elevation/digest.ts +0 -129
  593. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  594. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  595. package/src/sdk/elevation/owner.ts +0 -109
  596. package/src/session/auth-broker-config.ts +0 -109
  597. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  598. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  599. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
@@ -1,26 +1,27 @@
1
1
  /**
2
- * Anthropic Code project provider.
2
+ * Claude Code project/global skill layout adapter (import source).
3
3
  *
4
- * Supports project-local `.Anthropic model/` compatibility only. User-home Anthropic model
5
- * directories are intentionally ignored so `~/.Anthropic model` content is never injected
6
- * into GJC sessions.
4
+ * The `.claude/skills` layout is an explicit import source into the canonical
5
+ * `.gjc` skill locations — it is never loaded as an ordinary runtime authority.
6
+ * These helpers enumerate the layout for import/inspection consumers (#4291
7
+ * import UI, #4288 provenance diagnostics) and are deliberately NOT registered
8
+ * as capability providers: activating Claude's other surfaces (MCP servers,
9
+ * hooks, commands, tools, prompts, settings) is owned by sibling issues.
10
+ *
11
+ * User-home `~/.claude/skills` is enumerated as an explicit import candidate
12
+ * only; it is never loaded into sessions without an explicit import action.
7
13
  */
8
14
  import * as path from "node:path";
9
15
  import { hasFsCode, tryParseJson } from "@gajae-code/utils";
10
- import { registerProvider } from "../capability";
11
- import { type ContextFile, contextFileCapability } from "../capability/context-file";
12
- import { type ExtensionModule, extensionModuleCapability } from "../capability/extension-module";
16
+ import type { ExtensionModule } from "../capability/extension-module";
13
17
  import { readFile } from "../capability/fs";
14
- import { type Hook, hookCapability } from "../capability/hook";
15
- import { type MCPServer, mcpCapability } from "../capability/mcp";
16
- import { type Settings, settingsCapability } from "../capability/settings";
17
- import { type Skill, skillCapability } from "../capability/skill";
18
- import { type SlashCommand, slashCommandCapability } from "../capability/slash-command";
19
- import { type SystemPrompt, systemPromptCapability } from "../capability/system-prompt";
20
- import { type CustomTool, toolCapability } from "../capability/tool";
18
+ import type { Hook } from "../capability/hook";
19
+ import type { MCPServer } from "../capability/mcp";
20
+ import type { Skill } from "../capability/skill";
21
+ import type { SlashCommand } from "../capability/slash-command";
22
+ import type { CustomTool } from "../capability/tool";
21
23
  import type { LoadContext, LoadResult } from "../capability/types";
22
24
  import {
23
- calculateDepth,
24
25
  createSourceMeta,
25
26
  discoverExtensionModulePaths,
26
27
  expandEnvVarsDeep,
@@ -29,20 +30,83 @@ import {
29
30
  scanSkillsFromDir,
30
31
  } from "./helpers";
31
32
 
32
- const PROVIDER_ID = "claude";
33
- const DISPLAY_NAME = "Claude Code";
34
- const PRIORITY = 80;
35
- const CONFIG_DIR = ".claude";
36
-
37
- function getProjectClaude(ctx: LoadContext): string {
38
- return path.join(ctx.cwd, CONFIG_DIR);
39
- }
33
+ export const CLAUDE_PROVIDER_ID = "claude";
34
+ export const CLAUDE_DISPLAY_NAME = "Claude Code";
35
+ export const CLAUDE_CONFIG_DIR = ".claude";
40
36
 
41
37
  function isMissingDirectoryError(error: unknown): boolean {
42
38
  return hasFsCode(error, "ENOENT") || hasFsCode(error, "ENOTDIR");
43
39
  }
44
40
 
45
- async function loadMCPServers(ctx: LoadContext): Promise<LoadResult<MCPServer>> {
41
+ /**
42
+ * Enumerate `.claude/skills` from every ancestor of `cwd` up to the repo root
43
+ * (closest first) — the Claude Code project convention.
44
+ */
45
+ export async function scanClaudeProjectSkills(ctx: LoadContext): Promise<LoadResult<Skill>> {
46
+ const projectScans: Promise<LoadResult<Skill>>[] = [];
47
+ let current = ctx.cwd;
48
+ while (true) {
49
+ projectScans.push(
50
+ scanSkillsFromDir(ctx, {
51
+ dir: path.join(current, CLAUDE_CONFIG_DIR, "skills"),
52
+ providerId: CLAUDE_PROVIDER_ID,
53
+ level: "project",
54
+ requireDescription: true,
55
+ }),
56
+ );
57
+ if (current === (ctx.repoRoot ?? ctx.home)) break;
58
+ const parent = path.dirname(current);
59
+ if (parent === current) break;
60
+ current = parent;
61
+ }
62
+
63
+ const results = await Promise.allSettled(projectScans);
64
+ const items: Skill[] = [];
65
+ const warnings: string[] = [];
66
+ for (const result of results) {
67
+ if (result.status === "fulfilled") {
68
+ items.push(...result.value.items);
69
+ warnings.push(...(result.value.warnings ?? []));
70
+ } else if (!isMissingDirectoryError(result.reason)) {
71
+ warnings.push(`Failed to scan Claude project skills: ${String(result.reason)}`);
72
+ }
73
+ }
74
+ return { items, warnings };
75
+ }
76
+
77
+ /**
78
+ * Enumerate the user-global `~/.claude/skills` layout. This is an explicit
79
+ * import candidate only; GJC never loads it without an explicit import action.
80
+ */
81
+ export async function scanClaudeUserSkills(ctx: LoadContext): Promise<LoadResult<Skill>> {
82
+ return await scanSkillsFromDir(ctx, {
83
+ dir: path.join(ctx.home, CLAUDE_CONFIG_DIR, "skills"),
84
+ providerId: CLAUDE_PROVIDER_ID,
85
+ level: "user",
86
+ requireDescription: true,
87
+ });
88
+ }
89
+
90
+ export function claudeSkillSourceMeta(filePath: string, level: "user" | "project") {
91
+ return createSourceMeta(CLAUDE_PROVIDER_ID, filePath, level);
92
+ }
93
+
94
+ // =============================================================================
95
+ // Provenance inspection (#4288)
96
+ //
97
+ // The scans below enumerate the remaining `.claude/` project surfaces (MCP
98
+ // servers, hooks, tools, extensions, commands) for the `gjc customize doctor`
99
+ // provenance report. They reuse the shared discovery helpers but are
100
+ // deliberately NOT registered as capability providers: none of these surfaces
101
+ // are part of the session load path, and inspection must not change runtime
102
+ // behavior.
103
+ // =============================================================================
104
+
105
+ function getProjectClaude(ctx: LoadContext): string {
106
+ return path.join(ctx.cwd, CLAUDE_CONFIG_DIR);
107
+ }
108
+
109
+ async function inspectMCPServers(ctx: LoadContext): Promise<LoadResult<MCPServer>> {
46
110
  const items: MCPServer[] = [];
47
111
  const projectBase = getProjectClaude(ctx);
48
112
  const projectPaths = [path.join(projectBase, ".mcp.json"), path.join(projectBase, "mcp.json")];
@@ -65,7 +129,7 @@ async function loadMCPServers(ctx: LoadContext): Promise<LoadResult<MCPServer>>
65
129
  url: serverConfig.url as string | undefined,
66
130
  headers: serverConfig.headers as Record<string, string> | undefined,
67
131
  transport: serverConfig.type as "stdio" | "sse" | "http" | undefined,
68
- _source: createSourceMeta(PROVIDER_ID, filePath, "project"),
132
+ _source: createSourceMeta(CLAUDE_PROVIDER_ID, filePath, "project"),
69
133
  };
70
134
  });
71
135
  };
@@ -81,91 +145,14 @@ async function loadMCPServers(ctx: LoadContext): Promise<LoadResult<MCPServer>>
81
145
  return { items, warnings: [] };
82
146
  }
83
147
 
84
- async function loadContextFiles(ctx: LoadContext): Promise<LoadResult<ContextFile>> {
85
- const items: ContextFile[] = [];
86
- const projectBase = getProjectClaude(ctx);
87
- const projectClaudeMd = path.join(projectBase, "CLAUDE.md");
88
- const projectContent = await readFile(projectClaudeMd);
89
- if (projectContent !== null) {
90
- const depth = calculateDepth(ctx.cwd, path.dirname(projectBase), path.sep);
91
- items.push({
92
- path: projectClaudeMd,
93
- content: projectContent,
94
- level: "project",
95
- depth,
96
- _source: createSourceMeta(PROVIDER_ID, projectClaudeMd, "project"),
97
- });
98
- }
99
- return { items, warnings: [] };
100
- }
101
-
102
- async function loadSkills(ctx: LoadContext): Promise<LoadResult<Skill>> {
103
- const projectScans: Promise<LoadResult<Skill>>[] = [];
104
- let current = ctx.cwd;
105
- while (true) {
106
- projectScans.push(
107
- scanSkillsFromDir(ctx, {
108
- dir: path.join(current, CONFIG_DIR, "skills"),
109
- providerId: PROVIDER_ID,
110
- level: "project",
111
- }),
112
- );
113
- if (current === (ctx.repoRoot ?? ctx.home)) break;
114
- const parent = path.dirname(current);
115
- if (parent === current) break;
116
- current = parent;
117
- }
118
-
119
- const results = await Promise.allSettled(projectScans);
120
- const items: Skill[] = [];
121
- const warnings: string[] = [];
122
- for (const result of results) {
123
- if (result.status === "fulfilled") {
124
- items.push(...result.value.items);
125
- warnings.push(...(result.value.warnings ?? []));
126
- } else if (!isMissingDirectoryError(result.reason)) {
127
- warnings.push(`Failed to scan Claude project skills: ${String(result.reason)}`);
128
- }
129
- }
130
- return { items, warnings };
131
- }
132
-
133
- async function loadExtensionModules(ctx: LoadContext): Promise<LoadResult<ExtensionModule>> {
134
- const projectExtensionsDir = path.join(getProjectClaude(ctx), "extensions");
135
- const paths = await discoverExtensionModulePaths(ctx, projectExtensionsDir);
136
- return {
137
- items: paths.map(extPath => ({
138
- name: getExtensionNameFromPath(extPath),
139
- path: extPath,
140
- level: "project" as const,
141
- _source: createSourceMeta(PROVIDER_ID, extPath, "project"),
142
- })),
143
- warnings: [],
144
- };
145
- }
146
-
147
- async function loadSlashCommands(ctx: LoadContext): Promise<LoadResult<SlashCommand>> {
148
- const projectCommandsDir = path.join(getProjectClaude(ctx), "commands");
149
- return await loadFilesFromDir<SlashCommand>(ctx, projectCommandsDir, PROVIDER_ID, "project", {
150
- extensions: ["md"],
151
- transform: (name, content, filePath, source) => ({
152
- name: name.replace(/\.md$/, ""),
153
- path: filePath,
154
- content,
155
- level: "project",
156
- _source: source,
157
- }),
158
- });
159
- }
160
-
161
- async function loadHooks(ctx: LoadContext): Promise<LoadResult<Hook>> {
148
+ async function inspectHooks(ctx: LoadContext): Promise<LoadResult<Hook>> {
162
149
  const items: Hook[] = [];
163
150
  const warnings: string[] = [];
164
151
  const projectHooksDir = path.join(getProjectClaude(ctx), "hooks");
165
152
  const hookTypes = ["pre", "post"] as const;
166
153
  const results = await Promise.all(
167
154
  hookTypes.map(hookType =>
168
- loadFilesFromDir<Hook>(ctx, path.join(projectHooksDir, hookType), PROVIDER_ID, "project", {
155
+ loadFilesFromDir<Hook>(ctx, path.join(projectHooksDir, hookType), CLAUDE_PROVIDER_ID, "project", {
169
156
  transform: (name, _content, filePath, source) => ({
170
157
  name,
171
158
  path: filePath,
@@ -184,9 +171,9 @@ async function loadHooks(ctx: LoadContext): Promise<LoadResult<Hook>> {
184
171
  return { items, warnings };
185
172
  }
186
173
 
187
- async function loadTools(ctx: LoadContext): Promise<LoadResult<CustomTool>> {
174
+ async function inspectTools(ctx: LoadContext): Promise<LoadResult<CustomTool>> {
188
175
  const projectToolsDir = path.join(getProjectClaude(ctx), "tools");
189
- return await loadFilesFromDir<CustomTool>(ctx, projectToolsDir, PROVIDER_ID, "project", {
176
+ return await loadFilesFromDir<CustomTool>(ctx, projectToolsDir, CLAUDE_PROVIDER_ID, "project", {
190
177
  transform: (name, _content, filePath, source) => {
191
178
  const toolName = name.replace(/\.(ts|js|sh|bash|py)$/, "");
192
179
  return {
@@ -200,114 +187,60 @@ async function loadTools(ctx: LoadContext): Promise<LoadResult<CustomTool>> {
200
187
  });
201
188
  }
202
189
 
203
- async function loadSystemPrompts(ctx: LoadContext): Promise<LoadResult<SystemPrompt>> {
204
- const projectSystemMd = path.join(getProjectClaude(ctx), "SYSTEM.md");
205
- const content = await readFile(projectSystemMd);
190
+ async function inspectExtensionModules(ctx: LoadContext): Promise<LoadResult<ExtensionModule>> {
191
+ const projectExtensionsDir = path.join(getProjectClaude(ctx), "extensions");
192
+ const paths = await discoverExtensionModulePaths(ctx, projectExtensionsDir);
206
193
  return {
207
- items:
208
- content === null
209
- ? []
210
- : [
211
- {
212
- path: projectSystemMd,
213
- content,
214
- level: "project",
215
- _source: createSourceMeta(PROVIDER_ID, projectSystemMd, "project"),
216
- },
217
- ],
194
+ items: paths.map(extPath => ({
195
+ name: getExtensionNameFromPath(extPath),
196
+ path: extPath,
197
+ level: "project" as const,
198
+ _source: createSourceMeta(CLAUDE_PROVIDER_ID, extPath, "project"),
199
+ })),
218
200
  warnings: [],
219
201
  };
220
202
  }
221
203
 
222
- async function loadSettings(ctx: LoadContext): Promise<LoadResult<Settings>> {
223
- const items: Settings[] = [];
224
- const warnings: string[] = [];
225
- const projectSettingsJson = path.join(getProjectClaude(ctx), "settings.json");
226
- const projectContent = await readFile(projectSettingsJson);
227
- if (projectContent) {
228
- const data = tryParseJson<Record<string, unknown>>(projectContent);
229
- if (data) {
230
- items.push({
231
- path: projectSettingsJson,
232
- data,
233
- level: "project",
234
- _source: createSourceMeta(PROVIDER_ID, projectSettingsJson, "project"),
235
- } as Settings);
236
- } else {
237
- warnings.push(`Failed to parse JSON in ${projectSettingsJson}`);
238
- }
239
- }
240
- return { items, warnings };
204
+ async function inspectSlashCommands(ctx: LoadContext): Promise<LoadResult<SlashCommand>> {
205
+ const projectCommandsDir = path.join(getProjectClaude(ctx), "commands");
206
+ return await loadFilesFromDir<SlashCommand>(ctx, projectCommandsDir, CLAUDE_PROVIDER_ID, "project", {
207
+ extensions: ["md"],
208
+ transform: (name, content, filePath, source) => ({
209
+ name: name.replace(/\.md$/, ""),
210
+ path: filePath,
211
+ content,
212
+ level: "project",
213
+ _source: source,
214
+ }),
215
+ });
241
216
  }
242
217
 
243
- registerProvider<MCPServer>(mcpCapability.id, {
244
- id: PROVIDER_ID,
245
- displayName: DISPLAY_NAME,
246
- description: "Load MCP servers from project .claude/mcp.json",
247
- priority: PRIORITY,
248
- load: loadMCPServers,
249
- });
250
-
251
- registerProvider<ContextFile>(contextFileCapability.id, {
252
- id: PROVIDER_ID,
253
- displayName: DISPLAY_NAME,
254
- description: "Load CLAUDE.md files from project .claude/ directories",
255
- priority: PRIORITY,
256
- load: loadContextFiles,
257
- });
258
-
259
- registerProvider<Skill>(skillCapability.id, {
260
- id: PROVIDER_ID,
261
- displayName: DISPLAY_NAME,
262
- description: "Load skills from project .claude/skills/",
263
- priority: PRIORITY,
264
- load: loadSkills,
265
- });
266
-
267
- registerProvider<ExtensionModule>(extensionModuleCapability.id, {
268
- id: PROVIDER_ID,
269
- displayName: DISPLAY_NAME,
270
- description: "Load extension modules from project .claude/extensions",
271
- priority: PRIORITY,
272
- load: loadExtensionModules,
273
- });
274
-
275
- registerProvider<SlashCommand>(slashCommandCapability.id, {
276
- id: PROVIDER_ID,
277
- displayName: DISPLAY_NAME,
278
- description: "Load slash commands from project .claude/commands/*.md",
279
- priority: PRIORITY,
280
- load: loadSlashCommands,
281
- });
282
-
283
- registerProvider<Hook>(hookCapability.id, {
284
- id: PROVIDER_ID,
285
- displayName: DISPLAY_NAME,
286
- description: "Load hooks from project .claude/hooks/pre/ and .claude/hooks/post/",
287
- priority: PRIORITY,
288
- load: loadHooks,
289
- });
290
-
291
- registerProvider<CustomTool>(toolCapability.id, {
292
- id: PROVIDER_ID,
293
- displayName: DISPLAY_NAME,
294
- description: "Load custom tools from project .claude/tools/",
295
- priority: PRIORITY,
296
- load: loadTools,
297
- });
298
-
299
- registerProvider<Settings>(settingsCapability.id, {
300
- id: PROVIDER_ID,
301
- displayName: DISPLAY_NAME,
302
- description: "Load settings from project .claude/settings.json",
303
- priority: PRIORITY,
304
- load: loadSettings,
305
- });
218
+ export interface ClaudeConventionInspection {
219
+ mcps: LoadResult<MCPServer>;
220
+ skills: LoadResult<Skill>;
221
+ hooks: LoadResult<Hook>;
222
+ tools: LoadResult<CustomTool>;
223
+ extensions: LoadResult<ExtensionModule>;
224
+ commands: LoadResult<SlashCommand>;
225
+ }
306
226
 
307
- registerProvider<SystemPrompt>(systemPromptCapability.id, {
308
- id: PROVIDER_ID,
309
- displayName: DISPLAY_NAME,
310
- description: "Load system prompt from project .claude/SYSTEM.md",
311
- priority: PRIORITY,
312
- load: loadSystemPrompts,
313
- });
227
+ /**
228
+ * Inspect what the Claude Code project convention (.claude/) would surface.
229
+ *
230
+ * Reuses the shared discovery scan helpers without registering any provider,
231
+ * so diagnostics can report the convention's files while keeping the runtime
232
+ * load path exactly as configured (none of these surfaces are registered for
233
+ * session loading; hooks are covered by the separate registered claude-hooks
234
+ * provider).
235
+ */
236
+ export async function inspectClaudeConvention(ctx: LoadContext): Promise<ClaudeConventionInspection> {
237
+ const [mcps, skills, hooks, tools, extensions, commands] = await Promise.all([
238
+ inspectMCPServers(ctx),
239
+ scanClaudeProjectSkills(ctx),
240
+ inspectHooks(ctx),
241
+ inspectTools(ctx),
242
+ inspectExtensionModules(ctx),
243
+ inspectSlashCommands(ctx),
244
+ ]);
245
+ return { mcps, skills, hooks, tools, extensions, commands };
246
+ }
@@ -0,0 +1,38 @@
1
+ import * as path from "node:path";
2
+ import { registerProvider } from "../capability";
3
+ import { type Hook, hookCapability } from "../capability/hook";
4
+ import type { LoadContext, LoadResult, SourceMeta } from "../capability/types";
5
+ import { loadFilesFromDir, SOURCE_PATHS } from "./helpers";
6
+
7
+ const PROVIDER_ID = "codex";
8
+ const DISPLAY_NAME = "OpenAI Codex";
9
+ const PRIORITY = 70;
10
+
11
+ async function loadHooks(ctx: LoadContext): Promise<LoadResult<Hook>> {
12
+ const projectHooksDir = path.join(ctx.cwd, SOURCE_PATHS.codex.projectDir, "hooks");
13
+ const transformHook = (name: string, _content: string, filePath: string, source: SourceMeta): Hook => {
14
+ const baseName = name.replace(/\.(ts|js)$/, "");
15
+ const match = baseName.match(/^(pre|post)-(.+)$/);
16
+ const hookType = (match?.[1] as "pre" | "post") || "pre";
17
+ return {
18
+ name,
19
+ path: filePath,
20
+ type: hookType,
21
+ tool: match?.[2] || baseName,
22
+ level: "project",
23
+ _source: source,
24
+ };
25
+ };
26
+ return await loadFilesFromDir(ctx, projectHooksDir, PROVIDER_ID, "project", {
27
+ extensions: ["ts", "js"],
28
+ transform: transformHook,
29
+ });
30
+ }
31
+
32
+ registerProvider<Hook>(hookCapability.id, {
33
+ id: PROVIDER_ID,
34
+ displayName: DISPLAY_NAME,
35
+ description: "Load hooks from project .codex/hooks/",
36
+ priority: PRIORITY,
37
+ load: loadHooks,
38
+ });