@gajae-code/coding-agent 0.13.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/CHANGELOG.md +215 -8
  2. package/README.md +2 -0
  3. package/bin/gajaessi.js +4 -0
  4. package/dist/types/async/job-manager.d.ts +55 -2
  5. package/dist/types/async/support.d.ts +14 -0
  6. package/dist/types/capability/mcp.d.ts +6 -0
  7. package/dist/types/capability/types.d.ts +6 -0
  8. package/dist/types/cli/accounts-cli.d.ts +19 -0
  9. package/dist/types/cli/args.d.ts +3 -0
  10. package/dist/types/cli/config-cli.d.ts +6 -0
  11. package/dist/types/cli/crash-cli.d.ts +10 -0
  12. package/dist/types/cli/customize-doctor.d.ts +145 -0
  13. package/dist/types/cli/daemon-cli.d.ts +3 -1
  14. package/dist/types/cli/mcp-cli.d.ts +11 -0
  15. package/dist/types/cli/notify-cli.d.ts +1 -1
  16. package/dist/types/cli/root-flags.d.ts +12 -0
  17. package/dist/types/cli/setup-cli.d.ts +3 -1
  18. package/dist/types/cli/skills-cli.d.ts +2 -1
  19. package/dist/types/cli/update-cli.d.ts +19 -1
  20. package/dist/types/cli.d.ts +6 -0
  21. package/dist/types/commands/accounts.d.ts +40 -0
  22. package/dist/types/commands/crash.d.ts +24 -0
  23. package/dist/types/commands/customize.d.ts +22 -0
  24. package/dist/types/commands/daemon.d.ts +1 -1
  25. package/dist/types/commands/launch.d.ts +6 -0
  26. package/dist/types/commands/setup.d.ts +6 -0
  27. package/dist/types/commands/skills.d.ts +6 -1
  28. package/dist/types/commands/update.d.ts +7 -0
  29. package/dist/types/config/atomic-yaml-patch-worker.d.ts +25 -0
  30. package/dist/types/config/atomic-yaml-patch.d.ts +62 -2
  31. package/dist/types/config/config-schema-version.d.ts +10 -0
  32. package/dist/types/config/file-lock.d.ts +18 -0
  33. package/dist/types/config/model-profile-activation.d.ts +3 -1
  34. package/dist/types/config/model-registry.d.ts +10 -1
  35. package/dist/types/config/models-config-schema.d.ts +2 -0
  36. package/dist/types/config/settings-schema.d.ts +73 -9
  37. package/dist/types/config/settings.d.ts +63 -0
  38. package/dist/types/config/skill-settings-defaults.d.ts +26 -0
  39. package/dist/types/config/task-delegation.d.ts +39 -0
  40. package/dist/types/config/update-channel.d.ts +10 -0
  41. package/dist/types/coordinator-mcp/server.d.ts +5 -1
  42. package/dist/types/crash/index-store.d.ts +87 -0
  43. package/dist/types/crash/nudge.d.ts +50 -0
  44. package/dist/types/crash/record-loader.d.ts +17 -0
  45. package/dist/types/crash/report.d.ts +134 -0
  46. package/dist/types/crash/sanitize.d.ts +25 -0
  47. package/dist/types/cursor.d.ts +13 -2
  48. package/dist/types/customization/import.d.ts +37 -0
  49. package/dist/types/customization/index.d.ts +4 -0
  50. package/dist/types/customization/inventory.d.ts +25 -0
  51. package/dist/types/customization/mutations.d.ts +32 -0
  52. package/dist/types/customization/types.d.ts +115 -0
  53. package/dist/types/daemon/control-types.d.ts +8 -1
  54. package/dist/types/daemon/operator-contract.d.ts +4 -4
  55. package/dist/types/discovery/claude.d.ts +39 -1
  56. package/dist/types/discovery/codex.d.ts +39 -1
  57. package/dist/types/discovery/index.d.ts +2 -0
  58. package/dist/types/discovery/mcp-compat.d.ts +30 -0
  59. package/dist/types/edit/renderer.d.ts +23 -0
  60. package/dist/types/extensibility/extensions/runner.d.ts +3 -0
  61. package/dist/types/extensibility/extensions/types.d.ts +21 -4
  62. package/dist/types/extensibility/gjc-plugins/observability.d.ts +6 -1
  63. package/dist/types/extensibility/gjc-plugins/registry.d.ts +8 -1
  64. package/dist/types/extensibility/hooks/loader.d.ts +19 -5
  65. package/dist/types/extensibility/runtime-skill-discovery.d.ts +22 -1
  66. package/dist/types/extensibility/skill-management.d.ts +107 -0
  67. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +3 -1
  68. package/dist/types/gjc-runtime/launch-worktree.d.ts +8 -0
  69. package/dist/types/gjc-runtime/linux-proc.d.ts +3 -0
  70. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +10 -6
  71. package/dist/types/gjc-runtime/session-state-lock.d.ts +104 -0
  72. package/dist/types/gjc-runtime/session-state-sidecar.d.ts +120 -2
  73. package/dist/types/gjc-runtime/state-writer.d.ts +10 -1
  74. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +4 -2
  75. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -6
  76. package/dist/types/gjc-runtime/workflow-settings.d.ts +109 -0
  77. package/dist/types/hooks/events.d.ts +60 -0
  78. package/dist/types/hooks/normalize.d.ts +83 -0
  79. package/dist/types/hooks/skill-state.d.ts +9 -2
  80. package/dist/types/main.d.ts +2 -1
  81. package/dist/types/modes/acp/abort-scope.d.ts +13 -0
  82. package/dist/types/modes/acp/acp-agent.d.ts +7 -4
  83. package/dist/types/modes/components/customization/customization-dashboard.d.ts +44 -0
  84. package/dist/types/modes/components/customization/import-wizard.d.ts +21 -0
  85. package/dist/types/modes/components/customization/index.d.ts +1 -0
  86. package/dist/types/modes/components/dynamic-theme-text.d.ts +9 -0
  87. package/dist/types/modes/components/gajae-pet-widget.d.ts +6 -28
  88. package/dist/types/modes/components/irc-sidebar.d.ts +1 -0
  89. package/dist/types/modes/components/iterm-pet-transport.d.ts +122 -0
  90. package/dist/types/modes/components/oauth-selector.d.ts +10 -4
  91. package/dist/types/modes/components/pet-capability.d.ts +7 -21
  92. package/dist/types/modes/components/settings-selector.d.ts +5 -0
  93. package/dist/types/modes/components/status-line/gh.d.ts +6 -2
  94. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -1
  95. package/dist/types/modes/controllers/selector-controller.d.ts +7 -8
  96. package/dist/types/modes/controllers/stt-controller.d.ts +1 -1
  97. package/dist/types/modes/interactive-mode.d.ts +1 -0
  98. package/dist/types/modes/theme/defaults/index.d.ts +118 -0
  99. package/dist/types/modes/types.d.ts +1 -0
  100. package/dist/types/modes/utils/injected-user-submission.d.ts +10 -0
  101. package/dist/types/runtime-mcp/config.d.ts +9 -0
  102. package/dist/types/runtime-mcp/manager.d.ts +26 -1
  103. package/dist/types/runtime-mcp/oauth-discovery.d.ts +4 -0
  104. package/dist/types/runtime-mcp/oauth-flow.d.ts +24 -1
  105. package/dist/types/runtime-mcp/pool-key.d.ts +2 -0
  106. package/dist/types/runtime-mcp/protocol.d.ts +278 -0
  107. package/dist/types/runtime-mcp/scope-config.d.ts +29 -0
  108. package/dist/types/runtime-mcp/tool-bridge.d.ts +15 -13
  109. package/dist/types/runtime-mcp/transports/http.d.ts +9 -0
  110. package/dist/types/runtime-mcp/types.d.ts +102 -10
  111. package/dist/types/sdk/acp/adapter.d.ts +26 -5
  112. package/dist/types/sdk/broker/broker.d.ts +3 -55
  113. package/dist/types/sdk/broker/lifecycle.d.ts +18 -12
  114. package/dist/types/sdk/broker/session-index.d.ts +14 -5
  115. package/dist/types/sdk/broker/startup-failure.d.ts +16 -1
  116. package/dist/types/sdk/bus/chat-daemon-control.d.ts +51 -1
  117. package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +4 -41
  118. package/dist/types/sdk/bus/config.d.ts +11 -0
  119. package/dist/types/sdk/bus/conversation-store.d.ts +0 -1
  120. package/dist/types/sdk/bus/daemon-paths.d.ts +6 -0
  121. package/dist/types/sdk/bus/discord-conversation.d.ts +2 -0
  122. package/dist/types/sdk/bus/discord-daemon.d.ts +17 -12
  123. package/dist/types/sdk/bus/existing-thread-readiness.d.ts +4 -34
  124. package/dist/types/sdk/bus/inbound-reaction-ordering.d.ts +61 -0
  125. package/dist/types/sdk/bus/index.d.ts +85 -99
  126. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +29 -7
  127. package/dist/types/sdk/bus/managed-daemon.d.ts +2 -32
  128. package/dist/types/sdk/bus/notification-service.d.ts +52 -0
  129. package/dist/types/sdk/bus/operator-runtime.d.ts +1 -1
  130. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +16 -5
  131. package/dist/types/sdk/bus/reconciliation-store.d.ts +113 -5
  132. package/dist/types/sdk/bus/session-control.d.ts +25 -1
  133. package/dist/types/sdk/bus/slack-conversation.d.ts +4 -0
  134. package/dist/types/sdk/bus/slack-daemon.d.ts +9 -17
  135. package/dist/types/sdk/bus/slack-live-provider.d.ts +3 -1
  136. package/dist/types/sdk/bus/slack-provider.d.ts +4 -0
  137. package/dist/types/sdk/bus/slack-thread-binding.d.ts +6 -40
  138. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +30 -104
  139. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +10 -0
  140. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +262 -19
  141. package/dist/types/sdk/bus/telegram-daemon-orphan-reap.d.ts +125 -0
  142. package/dist/types/sdk/bus/telegram-daemon-owner-registry.d.ts +22 -0
  143. package/dist/types/sdk/bus/telegram-daemon.d.ts +119 -310
  144. package/dist/types/sdk/bus/telegram-reference.d.ts +1 -47
  145. package/dist/types/sdk/bus/threaded-render.d.ts +1 -0
  146. package/dist/types/sdk/bus/topic-registry.d.ts +33 -17
  147. package/dist/types/sdk/cli/rows.d.ts +2 -11
  148. package/dist/types/sdk/cli/session-cli.d.ts +15 -25
  149. package/dist/types/sdk/client/client.d.ts +97 -1
  150. package/dist/types/sdk/host/control/dispatch.d.ts +0 -7
  151. package/dist/types/sdk/host/control/index.d.ts +1 -1
  152. package/dist/types/sdk/host/control/operations.d.ts +18 -5
  153. package/dist/types/sdk/host/control/runtime-gate.d.ts +19 -0
  154. package/dist/types/sdk/host/host.d.ts +15 -1
  155. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  156. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  157. package/dist/types/sdk/host/session-runtime.d.ts +127 -7
  158. package/dist/types/sdk/host/types.d.ts +1 -1
  159. package/dist/types/sdk/host/websocket-transport.d.ts +1 -1
  160. package/dist/types/sdk/index.d.ts +2 -1
  161. package/dist/types/sdk/lifecycle/broker-client.d.ts +8 -0
  162. package/dist/types/sdk/lifecycle/client.d.ts +59 -0
  163. package/dist/types/sdk/lifecycle/index.d.ts +3 -0
  164. package/dist/types/sdk/lifecycle/service.d.ts +232 -0
  165. package/dist/types/sdk/mcp/server.d.ts +9 -6
  166. package/dist/types/sdk/prompt-deadline-lease.d.ts +43 -0
  167. package/dist/types/sdk/prompt-deadline-manager.d.ts +28 -0
  168. package/dist/types/sdk/prompt-status.d.ts +10 -3
  169. package/dist/types/sdk/protocol/operation-registry.d.ts +5 -0
  170. package/dist/types/sdk/receipt-state.d.ts +17 -0
  171. package/dist/types/sdk/reconciliation-extensions.d.ts +2 -0
  172. package/dist/types/sdk/router/index.d.ts +1 -0
  173. package/dist/types/sdk/router/session-router.d.ts +152 -0
  174. package/dist/types/sdk/session-list.d.ts +22 -0
  175. package/dist/types/sdk/session-reconnect.d.ts +43 -1
  176. package/dist/types/sdk/session.d.ts +34 -1
  177. package/dist/types/sdk/transport/serve-cli.d.ts +1 -4
  178. package/dist/types/session/account-inventory.d.ts +86 -0
  179. package/dist/types/session/agent-session.d.ts +145 -6
  180. package/dist/types/session/agent-storage.d.ts +10 -0
  181. package/dist/types/session/coordinator-tool-label.d.ts +28 -0
  182. package/dist/types/session/internal/managed-session-storage.d.ts +23 -4
  183. package/dist/types/session/messages.d.ts +1 -1
  184. package/dist/types/session/secure-token-file.d.ts +3 -0
  185. package/dist/types/session/session-manager.d.ts +47 -1
  186. package/dist/types/session/startup-auth-config.d.ts +44 -0
  187. package/dist/types/session/terminal-abort.d.ts +378 -0
  188. package/dist/types/session/yield-queue.d.ts +7 -0
  189. package/dist/types/session-import/claude.d.ts +26 -0
  190. package/dist/types/session-import/codex.d.ts +88 -0
  191. package/dist/types/session-import/command.d.ts +35 -0
  192. package/dist/types/session-import/detect.d.ts +22 -0
  193. package/dist/types/session-import/index.d.ts +7 -0
  194. package/dist/types/session-import/provider-codex.d.ts +22 -0
  195. package/dist/types/session-import/provider-service.d.ts +38 -0
  196. package/dist/types/session-import/redact.d.ts +23 -0
  197. package/dist/types/session-import/service.d.ts +47 -0
  198. package/dist/types/session-import/types.d.ts +120 -0
  199. package/dist/types/setup/paseo/check.d.ts +16 -0
  200. package/dist/types/setup/paseo/install-saga.d.ts +115 -0
  201. package/dist/types/setup/paseo/json-publisher.d.ts +76 -0
  202. package/dist/types/setup/paseo/orchestration-preferences.d.ts +24 -0
  203. package/dist/types/setup/paseo/paseo-ownership.d.ts +87 -0
  204. package/dist/types/setup/paseo/paseo-setup.d.ts +29 -0
  205. package/dist/types/setup/paseo/provider-config.d.ts +35 -0
  206. package/dist/types/setup/paseo/remove.d.ts +14 -0
  207. package/dist/types/setup/paseo/result-types.d.ts +59 -0
  208. package/dist/types/setup/paseo/setup-deps.d.ts +73 -0
  209. package/dist/types/setup/paseo/skills-bridge.d.ts +44 -0
  210. package/dist/types/skill-state/active-state.d.ts +5 -1
  211. package/dist/types/slash-commands/acp-builtins.d.ts +5 -1
  212. package/dist/types/slash-commands/builtin-registry.d.ts +2 -0
  213. package/dist/types/slash-commands/helpers/credential-switch.d.ts +12 -0
  214. package/dist/types/slash-commands/helpers/usage-report.d.ts +5 -6
  215. package/dist/types/slash-commands/types.d.ts +7 -1
  216. package/dist/types/task/executor.d.ts +10 -0
  217. package/dist/types/task/index.d.ts +3 -1
  218. package/dist/types/tools/ask-answer-registry.d.ts +6 -3
  219. package/dist/types/tools/bash-sleep-advisory.d.ts +14 -0
  220. package/dist/types/tools/bash.d.ts +2 -6
  221. package/dist/types/tools/browser/attach.d.ts +11 -0
  222. package/dist/types/tools/browser/launch.d.ts +20 -0
  223. package/dist/types/tools/browser/profile-discovery.d.ts +6 -0
  224. package/dist/types/tools/browser/render.d.ts +1 -0
  225. package/dist/types/tools/browser.d.ts +3 -1
  226. package/dist/types/tools/image-gen.d.ts +10 -2
  227. package/dist/types/tools/index.d.ts +8 -0
  228. package/dist/types/tools/monitor.d.ts +1 -1
  229. package/dist/types/tools/skill-discovery.d.ts +8 -1
  230. package/dist/types/tools/subagent.d.ts +2 -0
  231. package/dist/types/tools/ultragoal-ask-guard.d.ts +2 -2
  232. package/dist/types/utils/herdr-pane.d.ts +76 -0
  233. package/package.json +19 -9
  234. package/scripts/build-binary.ts +2 -1
  235. package/scripts/build-sdk-package-smoke.ts +2 -13
  236. package/scripts/capture-sticky-viewport-showcase.ts +0 -1
  237. package/scripts/compile-args.ts +2 -0
  238. package/scripts/generate-sdk-adapter-parity-manifest.ts +31 -16
  239. package/scripts/generate-sdk-operation-inventory.ts +28 -0
  240. package/scripts/generate-telegram-baseline-manifest.ts +1 -0
  241. package/scripts/generate-tool-catalog.ts +6 -4
  242. package/scripts/verify-gjc-sdk-canonicalization.ts +5 -39
  243. package/src/async/job-manager.ts +352 -17
  244. package/src/async/support.ts +25 -0
  245. package/src/autoresearch/dashboard.ts +28 -13
  246. package/src/capability/index.ts +3 -1
  247. package/src/capability/mcp.ts +6 -0
  248. package/src/capability/types.ts +6 -0
  249. package/src/cli/accounts-cli.ts +395 -0
  250. package/src/cli/args.ts +23 -0
  251. package/src/cli/auth-broker-cli.ts +136 -66
  252. package/src/cli/auth-gateway-cli.ts +94 -70
  253. package/src/cli/config-cli.ts +27 -2
  254. package/src/cli/crash-cli.ts +78 -0
  255. package/src/cli/customize-doctor.ts +1605 -0
  256. package/src/cli/daemon-cli.ts +12 -3
  257. package/src/cli/fast-help.ts +1 -0
  258. package/src/cli/mcp-cli.ts +128 -60
  259. package/src/cli/notify-cli.ts +8 -14
  260. package/src/cli/root-flags.ts +8 -0
  261. package/src/cli/setup-cli.ts +145 -0
  262. package/src/cli/skills-cli.ts +38 -2
  263. package/src/cli/update-cli.ts +167 -12
  264. package/src/cli.ts +4 -0
  265. package/src/commands/accounts.ts +71 -0
  266. package/src/commands/crash.ts +35 -0
  267. package/src/commands/customize.ts +84 -0
  268. package/src/commands/daemon.ts +2 -2
  269. package/src/commands/deep-interview.ts +2 -0
  270. package/src/commands/launch.ts +1 -0
  271. package/src/commands/mcp.ts +12 -7
  272. package/src/commands/ralplan.ts +2 -0
  273. package/src/commands/sdk.ts +65 -32
  274. package/src/commands/setup.ts +5 -0
  275. package/src/commands/skills.ts +14 -4
  276. package/src/commands/ultragoal.ts +10 -1
  277. package/src/commands/update.ts +26 -15
  278. package/src/config/atomic-yaml-patch-worker.ts +57 -0
  279. package/src/config/atomic-yaml-patch.ts +769 -29
  280. package/src/config/config-schema-version.ts +10 -0
  281. package/src/config/file-lock.ts +70 -1
  282. package/src/config/mcp-schema.json +52 -14
  283. package/src/config/model-profile-activation.ts +23 -2
  284. package/src/config/model-profiles.ts +88 -21
  285. package/src/config/model-registry.ts +147 -21
  286. package/src/config/models-config-schema.ts +1 -1
  287. package/src/config/settings-schema.ts +77 -7
  288. package/src/config/settings.ts +4038 -199
  289. package/src/config/skill-settings-defaults.ts +41 -3
  290. package/src/config/task-delegation.ts +87 -0
  291. package/src/config/update-channel.ts +23 -0
  292. package/src/coordinator-mcp/server.ts +377 -308
  293. package/src/crash/index-store.ts +723 -0
  294. package/src/crash/nudge.ts +89 -0
  295. package/src/crash/record-loader.ts +149 -0
  296. package/src/crash/report.ts +551 -0
  297. package/src/crash/sanitize.ts +129 -0
  298. package/src/cursor.ts +36 -10
  299. package/src/customization/import.ts +946 -0
  300. package/src/customization/index.ts +4 -0
  301. package/src/customization/inventory.ts +335 -0
  302. package/src/customization/mutations.ts +141 -0
  303. package/src/customization/types.ts +223 -0
  304. package/src/daemon/control-types.ts +8 -1
  305. package/src/daemon/operator-contract.ts +6 -6
  306. package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +31 -6
  307. package/src/defaults/gjc/skills/deep-interview/SKILL.md +11 -22
  308. package/src/defaults/gjc/skills/ralplan/SKILL.md +36 -23
  309. package/src/defaults/gjc/skills/ultragoal/SKILL.md +16 -0
  310. package/src/discovery/claude-hooks.ts +38 -0
  311. package/src/discovery/claude.ts +142 -209
  312. package/src/discovery/codex-hooks.ts +38 -0
  313. package/src/discovery/codex.ts +132 -198
  314. package/src/discovery/helpers.ts +8 -1
  315. package/src/discovery/index.ts +2 -0
  316. package/src/discovery/mcp-compat.ts +234 -0
  317. package/src/discovery/mcp-json.ts +6 -0
  318. package/src/edit/renderer.ts +40 -0
  319. package/src/edit/streaming.ts +4 -2
  320. package/src/exec/bash-executor.ts +24 -20
  321. package/src/export/html/index.ts +51 -2
  322. package/src/extensibility/extensions/loader.ts +9 -1
  323. package/src/extensibility/extensions/runner.ts +17 -4
  324. package/src/extensibility/extensions/types.ts +31 -6
  325. package/src/extensibility/gjc-plugins/constrained-hooks.ts +33 -0
  326. package/src/extensibility/gjc-plugins/installer.ts +9 -5
  327. package/src/extensibility/gjc-plugins/observability.ts +8 -2
  328. package/src/extensibility/gjc-plugins/registry.ts +13 -2
  329. package/src/extensibility/gjc-plugins/runtime-adapters.ts +3 -1
  330. package/src/extensibility/gjc-plugins/schema.ts +222 -39
  331. package/src/extensibility/hooks/loader.ts +154 -10
  332. package/src/extensibility/runtime-skill-discovery.ts +257 -60
  333. package/src/extensibility/skill-management.ts +368 -0
  334. package/src/extensibility/skills.ts +52 -16
  335. package/src/gjc-runtime/deep-interview-runtime.ts +45 -61
  336. package/src/gjc-runtime/launch-worktree.ts +56 -2
  337. package/src/gjc-runtime/linux-proc.ts +7 -1
  338. package/src/gjc-runtime/ralplan-runtime.ts +100 -164
  339. package/src/gjc-runtime/session-state-lock.ts +992 -0
  340. package/src/gjc-runtime/session-state-sidecar.ts +644 -142
  341. package/src/gjc-runtime/state-writer.ts +39 -14
  342. package/src/gjc-runtime/tmux-owner-isolation.ts +5 -4
  343. package/src/gjc-runtime/ultragoal-guard.ts +11 -4
  344. package/src/gjc-runtime/ultragoal-runtime.ts +44 -41
  345. package/src/gjc-runtime/workflow-settings.ts +596 -0
  346. package/src/goals/tools/goal-tool.ts +6 -1
  347. package/src/hooks/events.ts +291 -0
  348. package/src/hooks/native-skill-hook.ts +4 -0
  349. package/src/hooks/normalize.ts +369 -0
  350. package/src/hooks/skill-state.ts +165 -46
  351. package/src/internal-urls/docs-index.generated.ts +41 -32
  352. package/src/main.ts +36 -5
  353. package/src/migrate/mcp-mapper.ts +25 -2
  354. package/src/modes/acp/abort-scope.ts +29 -0
  355. package/src/modes/acp/acp-agent.ts +423 -98
  356. package/src/modes/components/assistant-message.ts +6 -1
  357. package/src/modes/components/chrome.ts +4 -3
  358. package/src/modes/components/customization/customization-dashboard.ts +443 -0
  359. package/src/modes/components/customization/import-wizard.ts +372 -0
  360. package/src/modes/components/customization/index.ts +1 -0
  361. package/src/modes/components/dynamic-theme-text.ts +22 -0
  362. package/src/modes/components/gajae-pet-widget.ts +607 -193
  363. package/src/modes/components/irc-sidebar.ts +11 -0
  364. package/src/modes/components/iterm-pet-transport.ts +585 -0
  365. package/src/modes/components/model-selector.ts +1 -6
  366. package/src/modes/components/oauth-selector.ts +277 -86
  367. package/src/modes/components/pet-capability.ts +35 -31
  368. package/src/modes/components/settings-selector.ts +29 -5
  369. package/src/modes/components/status-line/gh.ts +45 -1
  370. package/src/modes/components/status-line/segments.ts +19 -4
  371. package/src/modes/components/tool-status-header.ts +13 -3
  372. package/src/modes/controllers/command-controller.ts +20 -8
  373. package/src/modes/controllers/extension-ui-controller.ts +56 -257
  374. package/src/modes/controllers/input-controller.ts +10 -0
  375. package/src/modes/controllers/runtime-mcp-command-controller.ts +16 -3
  376. package/src/modes/controllers/selector-controller.ts +238 -77
  377. package/src/modes/controllers/stt-controller.ts +3 -3
  378. package/src/modes/interactive-mode.ts +88 -16
  379. package/src/modes/print-mode.ts +35 -6
  380. package/src/modes/runtime-init.ts +21 -68
  381. package/src/modes/theme/defaults/index.ts +2 -0
  382. package/src/modes/theme/defaults/ouroboros.json +118 -0
  383. package/src/modes/types.ts +1 -0
  384. package/src/modes/utils/injected-user-submission.ts +25 -0
  385. package/src/modes/utils/terminal-bell.ts +15 -1
  386. package/src/prompts/agent-fragments/ralplan-persistence.md +1 -1
  387. package/src/prompts/agent-fragments/restricted-bash.md +1 -1
  388. package/src/prompts/agents/critic.md +1 -1
  389. package/src/prompts/system/rlm-research.md +1 -1
  390. package/src/prompts/system/system-prompt.md +0 -2
  391. package/src/prompts/tools/bash.md +7 -1
  392. package/src/prompts/tools/browser.md +1 -1
  393. package/src/prompts/tools/cron.md +6 -6
  394. package/src/prompts/tools/read.md +0 -2
  395. package/src/prompts/tools/skill-discovery.md +4 -2
  396. package/src/runtime-mcp/client.ts +427 -23
  397. package/src/runtime-mcp/config.ts +37 -5
  398. package/src/runtime-mcp/manager-pool.test.ts +56 -0
  399. package/src/runtime-mcp/manager.ts +52 -2
  400. package/src/runtime-mcp/oauth-discovery.ts +13 -0
  401. package/src/runtime-mcp/oauth-flow.ts +46 -1
  402. package/src/runtime-mcp/pool-key.ts +5 -1
  403. package/src/runtime-mcp/pool.test.ts +9 -0
  404. package/src/runtime-mcp/protocol.test.ts +353 -0
  405. package/src/runtime-mcp/protocol.ts +624 -0
  406. package/src/runtime-mcp/scope-config.ts +78 -0
  407. package/src/runtime-mcp/tool-bridge.ts +44 -10
  408. package/src/runtime-mcp/transports/http.ts +84 -13
  409. package/src/runtime-mcp/types.ts +123 -12
  410. package/src/sdk/acp/adapter.ts +328 -97
  411. package/src/sdk/broker/broker.ts +160 -741
  412. package/src/sdk/broker/ensure.ts +9 -1
  413. package/src/sdk/broker/lifecycle.ts +510 -116
  414. package/src/sdk/broker/operation-receipt-ledger.ts +11 -2
  415. package/src/sdk/broker/process-incarnation.ts +19 -0
  416. package/src/sdk/broker/session-index.ts +516 -117
  417. package/src/sdk/broker/startup-failure.ts +28 -5
  418. package/src/sdk/broker/transport.ts +1 -13
  419. package/src/sdk/bus/chat-daemon-cli.ts +4 -2
  420. package/src/sdk/bus/chat-daemon-control.ts +67 -6
  421. package/src/sdk/bus/chat-daemon-runtime.ts +183 -859
  422. package/src/sdk/bus/config.ts +13 -0
  423. package/src/sdk/bus/conversation-store.ts +59 -171
  424. package/src/sdk/bus/daemon-paths.ts +20 -0
  425. package/src/sdk/bus/discord-conversation.ts +2 -0
  426. package/src/sdk/bus/discord-daemon.ts +524 -126
  427. package/src/sdk/bus/discord-live-provider.ts +206 -79
  428. package/src/sdk/bus/existing-thread-readiness.ts +4 -97
  429. package/src/sdk/bus/inbound-reaction-ordering.ts +122 -0
  430. package/src/sdk/bus/index.ts +2480 -456
  431. package/src/sdk/bus/kind-aware-reconciliation.ts +204 -34
  432. package/src/sdk/bus/lifecycle-commands.ts +2 -2
  433. package/src/sdk/bus/managed-daemon.ts +2 -145
  434. package/src/sdk/bus/notification-service.ts +196 -0
  435. package/src/sdk/bus/operator-runtime.ts +1 -1
  436. package/src/sdk/bus/prompt-reconciliation.ts +24 -15
  437. package/src/sdk/bus/reconciliation-store.ts +553 -24
  438. package/src/sdk/bus/session-control.ts +49 -3
  439. package/src/sdk/bus/slack-conversation.ts +4 -0
  440. package/src/sdk/bus/slack-daemon.ts +733 -134
  441. package/src/sdk/bus/slack-live-provider.ts +65 -15
  442. package/src/sdk/bus/slack-provider.ts +4 -0
  443. package/src/sdk/bus/slack-thread-binding.ts +9 -104
  444. package/src/sdk/bus/telegram-adoption-intent.ts +299 -209
  445. package/src/sdk/bus/telegram-daemon-cli.ts +194 -7
  446. package/src/sdk/bus/telegram-daemon-contract.ts +265 -19
  447. package/src/sdk/bus/telegram-daemon-control.ts +3 -13
  448. package/src/sdk/bus/telegram-daemon-orphan-reap.ts +498 -0
  449. package/src/sdk/bus/telegram-daemon-owner-registry.ts +176 -0
  450. package/src/sdk/bus/telegram-daemon.ts +2552 -2280
  451. package/src/sdk/bus/telegram-reference.ts +1 -226
  452. package/src/sdk/bus/telegram-setup.ts +2 -2
  453. package/src/sdk/bus/threaded-render.ts +1 -0
  454. package/src/sdk/bus/topic-registry.ts +279 -146
  455. package/src/sdk/cli/rows.ts +2 -35
  456. package/src/sdk/cli/session-cli.ts +776 -700
  457. package/src/sdk/client/client.ts +892 -1
  458. package/src/sdk/host/control/dispatch.ts +93 -58
  459. package/src/sdk/host/control/index.ts +1 -1
  460. package/src/sdk/host/control/operations.ts +18 -10
  461. package/src/sdk/host/control/runtime-gate.ts +40 -0
  462. package/src/sdk/host/host.ts +63 -12
  463. package/src/sdk/host/query/handlers.ts +66 -7
  464. package/src/sdk/host/reverse-leases.ts +2 -2
  465. package/src/sdk/host/sdk-surface-parity.test.ts +1 -1
  466. package/src/sdk/host/session-runtime.test.ts +2787 -34
  467. package/src/sdk/host/session-runtime.ts +1489 -101
  468. package/src/sdk/host/surface-policy.ts +12 -8
  469. package/src/sdk/host/types.ts +1 -1
  470. package/src/sdk/host/websocket-transport.lifecycle.test.ts +31 -59
  471. package/src/sdk/host/websocket-transport.ts +85 -50
  472. package/src/sdk/index.ts +2 -1
  473. package/src/sdk/lifecycle/broker-client.ts +53 -0
  474. package/src/sdk/lifecycle/client.ts +234 -0
  475. package/src/sdk/lifecycle/index.ts +3 -0
  476. package/src/sdk/{bus/recent-activity.ts → lifecycle/recent-sessions.ts} +5 -2
  477. package/src/sdk/lifecycle/service.ts +720 -0
  478. package/src/sdk/mcp/server.ts +226 -188
  479. package/src/sdk/prompt-deadline-lease.ts +55 -0
  480. package/src/sdk/prompt-deadline-manager.ts +148 -0
  481. package/src/sdk/prompt-status.ts +11 -3
  482. package/src/sdk/protocol/operation-inventory.generated.json +272 -129
  483. package/src/sdk/protocol/operation-registry.ts +71 -8
  484. package/src/sdk/receipt-state.ts +43 -0
  485. package/src/sdk/reconciliation-extensions.ts +14 -0
  486. package/src/sdk/router/index.ts +1 -0
  487. package/src/sdk/router/session-router.ts +1658 -0
  488. package/src/sdk/session-list.ts +93 -0
  489. package/src/sdk/session-reconnect.ts +45 -1
  490. package/src/sdk/session.ts +716 -120
  491. package/src/sdk/transport/serve-cli.ts +18 -34
  492. package/src/session/account-inventory.ts +603 -0
  493. package/src/session/agent-session.ts +2873 -559
  494. package/src/session/agent-storage.ts +35 -0
  495. package/src/session/blob-store.ts +32 -1
  496. package/src/session/coordinator-tool-label.ts +40 -0
  497. package/src/session/internal/managed-session-scope.ts +4 -0
  498. package/src/session/internal/managed-session-storage.ts +199 -31
  499. package/src/session/messages.ts +1 -1
  500. package/src/session/secure-token-file.ts +80 -0
  501. package/src/session/session-manager.ts +757 -57
  502. package/src/session/session-storage.ts +25 -16
  503. package/src/session/startup-auth-config.ts +297 -0
  504. package/src/session/terminal-abort.ts +1253 -0
  505. package/src/session/yield-queue.ts +57 -15
  506. package/src/session-import/claude.ts +334 -0
  507. package/src/session-import/codex.ts +1033 -0
  508. package/src/session-import/command.ts +77 -0
  509. package/src/session-import/detect.ts +133 -0
  510. package/src/session-import/index.ts +7 -0
  511. package/src/session-import/provider-codex.ts +327 -0
  512. package/src/session-import/provider-service.ts +457 -0
  513. package/src/session-import/redact.ts +128 -0
  514. package/src/session-import/service.ts +1264 -0
  515. package/src/session-import/types.ts +148 -0
  516. package/src/setup/paseo/check.ts +213 -0
  517. package/src/setup/paseo/install-saga.ts +293 -0
  518. package/src/setup/paseo/json-publisher.ts +263 -0
  519. package/src/setup/paseo/orchestration-preferences.ts +86 -0
  520. package/src/setup/paseo/paseo-ownership.ts +224 -0
  521. package/src/setup/paseo/paseo-setup.ts +253 -0
  522. package/src/setup/paseo/provider-config.ts +139 -0
  523. package/src/setup/paseo/remove.ts +183 -0
  524. package/src/setup/paseo/result-types.ts +79 -0
  525. package/src/setup/paseo/setup-deps.ts +175 -0
  526. package/src/setup/paseo/skills-bridge.ts +260 -0
  527. package/src/skill-state/active-state.ts +21 -11
  528. package/src/slash-commands/acp-builtins.ts +9 -1
  529. package/src/slash-commands/builtin-registry.ts +117 -19
  530. package/src/slash-commands/helpers/credential-switch.ts +143 -0
  531. package/src/slash-commands/helpers/mcp.ts +9 -3
  532. package/src/slash-commands/helpers/usage-report.ts +61 -56
  533. package/src/slash-commands/types.ts +7 -2
  534. package/src/task/executor.ts +30 -11
  535. package/src/task/index.ts +66 -7
  536. package/src/task/render.ts +23 -9
  537. package/src/tools/ask-answer-registry.ts +23 -7
  538. package/src/tools/ask.ts +8 -4
  539. package/src/tools/bash-sleep-advisory.ts +115 -0
  540. package/src/tools/bash.ts +98 -18
  541. package/src/tools/browser/attach.ts +71 -3
  542. package/src/tools/browser/launch.ts +86 -13
  543. package/src/tools/browser/profile-discovery.ts +57 -7
  544. package/src/tools/browser/render.ts +8 -1
  545. package/src/tools/browser.ts +130 -21
  546. package/src/tools/computer.enforcement.test.ts +1 -1
  547. package/src/tools/computer.ts +3 -2
  548. package/src/tools/cron.ts +12 -1
  549. package/src/tools/image-gen.ts +349 -142
  550. package/src/tools/index.ts +8 -0
  551. package/src/tools/job.ts +33 -6
  552. package/src/tools/monitor.ts +41 -2
  553. package/src/tools/skill-discovery.ts +21 -29
  554. package/src/tools/subagent.ts +142 -24
  555. package/src/tools/todo-contract.ts +55 -3
  556. package/src/tools/todo-write.ts +4 -3
  557. package/src/tools/tool-catalog.generated.ts +6 -6
  558. package/src/tools/ultragoal-ask-guard.ts +10 -3
  559. package/src/utils/herdr-pane.ts +345 -0
  560. package/src/utils/title-generator.ts +2 -0
  561. package/src/web/scrapers/index.ts +6 -4
  562. package/dist/types/cli/malloc-env-guard.test.d.ts +0 -1
  563. package/dist/types/defaults/gjc-defaults.test.d.ts +0 -1
  564. package/dist/types/memory-backend/lazy-loading.test.d.ts +0 -1
  565. package/dist/types/runtime/boot-ordering.test.d.ts +0 -1
  566. package/dist/types/runtime/lazy-service.test.d.ts +0 -1
  567. package/dist/types/runtime/network-prewarm-service.test.d.ts +0 -1
  568. package/dist/types/runtime/workspace-tree-service.test.d.ts +0 -1
  569. package/dist/types/runtime-mcp/config.test.d.ts +0 -1
  570. package/dist/types/runtime-mcp/http.test.d.ts +0 -1
  571. package/dist/types/runtime-mcp/manager-pool.test.d.ts +0 -1
  572. package/dist/types/runtime-mcp/pool-key.test.d.ts +0 -1
  573. package/dist/types/runtime-mcp/pool.test.d.ts +0 -1
  574. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +0 -117
  575. package/dist/types/sdk/bus/lifecycle-orchestrator.d.ts +0 -141
  576. package/dist/types/sdk/bus/telegram-cli.d.ts +0 -31
  577. package/dist/types/sdk/elevation/allowlist.d.ts +0 -20
  578. package/dist/types/sdk/elevation/audit.d.ts +0 -93
  579. package/dist/types/sdk/elevation/capability.d.ts +0 -3
  580. package/dist/types/sdk/elevation/digest.d.ts +0 -72
  581. package/dist/types/sdk/elevation/dispatch-receipt.d.ts +0 -85
  582. package/dist/types/sdk/elevation/grant-ledger.d.ts +0 -163
  583. package/dist/types/sdk/elevation/owner.d.ts +0 -48
  584. package/dist/types/sdk/host/import-graph.test.d.ts +0 -1
  585. package/dist/types/sdk/host/sdk-surface-parity.test.d.ts +0 -1
  586. package/dist/types/sdk/host/session-runtime.test.d.ts +0 -1
  587. package/dist/types/sdk/host/websocket-transport.lifecycle.test.d.ts +0 -1
  588. package/dist/types/session/auth-broker-config.d.ts +0 -13
  589. package/dist/types/session/heap-eviction-artifacts.test.d.ts +0 -1
  590. package/dist/types/skills/skills.test.d.ts +0 -1
  591. package/dist/types/slash-commands/notify-command.test.d.ts +0 -1
  592. package/dist/types/task/token-log.test.d.ts +0 -1
  593. package/dist/types/tools/computer.enforcement.test.d.ts +0 -1
  594. package/dist/types/tools/descriptors.test.d.ts +0 -1
  595. package/scripts/g005-daemon-smoke.ts +0 -180
  596. package/scripts/g011-daemon-path-smoke.ts +0 -153
  597. package/src/sdk/bus/lifecycle-control-runtime.ts +0 -1733
  598. package/src/sdk/bus/lifecycle-orchestrator.ts +0 -489
  599. package/src/sdk/bus/telegram-cli.ts +0 -212
  600. package/src/sdk/elevation/allowlist.ts +0 -54
  601. package/src/sdk/elevation/audit.ts +0 -208
  602. package/src/sdk/elevation/capability.ts +0 -41
  603. package/src/sdk/elevation/digest.ts +0 -129
  604. package/src/sdk/elevation/dispatch-receipt.ts +0 -184
  605. package/src/sdk/elevation/grant-ledger.ts +0 -1142
  606. package/src/sdk/elevation/owner.ts +0 -109
  607. package/src/session/auth-broker-config.ts +0 -109
  608. /package/dist/types/{ai-core-import-gate.test.d.ts → discovery/claude-hooks.d.ts} +0 -0
  609. /package/dist/types/{cli/fixture-report.test.d.ts → discovery/codex-hooks.d.ts} +0 -0
  610. /package/dist/types/sdk/{bus/recent-activity.d.ts → lifecycle/recent-sessions.d.ts} +0 -0
@@ -0,0 +1,291 @@
1
+ /** Stable canonical names used to compare hook surfaces without replacing runtime event types. */
2
+ export const HookEventKind = {
3
+ UserPromptSubmit: "user_prompt_submit",
4
+ PreToolUse: "pre_tool_use",
5
+ PostToolUse: "post_tool_use",
6
+ Stop: "stop",
7
+ SessionStart: "session_start",
8
+ SessionShutdown: "session_shutdown",
9
+ } as const;
10
+
11
+ export type HookEventKind = (typeof HookEventKind)[keyof typeof HookEventKind];
12
+
13
+ export const HookAuthority = {
14
+ Constrained: "constrained",
15
+ Command: "command",
16
+ InProcess: "in-process",
17
+ } as const;
18
+
19
+ export type HookAuthority = (typeof HookAuthority)[keyof typeof HookAuthority];
20
+
21
+ export const HookSourceConvention = {
22
+ NativeGjc: "native-gjc",
23
+ ClaudeCode: "claude-code",
24
+ Codex: "codex",
25
+ CodexManagedJson: "codex-managed-json",
26
+ GjcPlugin: "gjc-plugin",
27
+ InProcess: "in-process",
28
+ } as const;
29
+
30
+ export type HookSourceConvention = (typeof HookSourceConvention)[keyof typeof HookSourceConvention];
31
+
32
+ export interface HookEventSchemaContract {
33
+ kind: HookEventKind;
34
+ input: string;
35
+ output: string;
36
+ }
37
+
38
+ /**
39
+ * Canonical schema references. These point at existing runtime types; they are not a
40
+ * second runtime event union and do not change payloads dispatched by the hook runners.
41
+ */
42
+ export const HOOK_EVENT_SCHEMAS: Record<HookEventKind, HookEventSchemaContract> = {
43
+ [HookEventKind.UserPromptSubmit]: {
44
+ kind: HookEventKind.UserPromptSubmit,
45
+ input: "BeforeAgentStartEvent { type, prompt, images?, systemPrompt } or provider-owned named-event payload",
46
+ output: "BeforeAgentStartEventResult { message?, systemPrompt? } or provider-owned command output",
47
+ },
48
+ [HookEventKind.PreToolUse]: {
49
+ kind: HookEventKind.PreToolUse,
50
+ input: "ToolCallEvent { type, toolName, toolCallId, input }",
51
+ output: "ToolCallEventResult { block?, reason? }",
52
+ },
53
+ [HookEventKind.PostToolUse]: {
54
+ kind: HookEventKind.PostToolUse,
55
+ input: "ToolResultEvent { type, toolName, toolCallId, input, content, details, isError }",
56
+ output: "ToolResultEventResult { content?, details?, isError? }",
57
+ },
58
+ [HookEventKind.Stop]: {
59
+ kind: HookEventKind.Stop,
60
+ input: "AgentEndEvent for GJC in-process hooks, or provider-owned Stop payload",
61
+ output: "void for GJC in-process hooks, or provider-owned command output",
62
+ },
63
+ [HookEventKind.SessionStart]: {
64
+ kind: HookEventKind.SessionStart,
65
+ input: "SessionStartEvent { type: session_start }",
66
+ output: "void",
67
+ },
68
+ [HookEventKind.SessionShutdown]: {
69
+ kind: HookEventKind.SessionShutdown,
70
+ input: "SessionShutdownEvent { type: session_shutdown }",
71
+ output: "void",
72
+ },
73
+ };
74
+
75
+ export type HookOrdering = "sequential" | "external-runtime";
76
+ export type HookAwaitBehavior = "awaited" | "external-runtime";
77
+ export type HookErrorBehavior = "isolate" | "fail-closed" | "external-runtime";
78
+ export type HookProcessAuthority = "none" | "hook-api" | "command" | "ambient-host";
79
+ export type HookTrustRequirement = "not-enforced" | "provider-owned";
80
+ export type HookRedaction = "none" | "provider-owned";
81
+
82
+ export interface HookExecutionContract {
83
+ kind: HookEventKind;
84
+ runtimeEvent: string;
85
+ authority: HookAuthority;
86
+ awaitBehavior: HookAwaitBehavior;
87
+ ordering: HookOrdering;
88
+ canCancel: boolean;
89
+ mutation: readonly string[];
90
+ timeoutMs: number | null;
91
+ errorBehavior: HookErrorBehavior;
92
+ processAuthority: HookProcessAuthority;
93
+ trustRequirement: HookTrustRequirement;
94
+ redaction: HookRedaction;
95
+ logging: string;
96
+ semanticNotes: string;
97
+ }
98
+
99
+ const hookModulePre: HookExecutionContract = {
100
+ kind: HookEventKind.PreToolUse,
101
+ runtimeEvent: "tool_call",
102
+ authority: HookAuthority.InProcess,
103
+ awaitBehavior: "awaited",
104
+ ordering: "sequential",
105
+ canCancel: true,
106
+ mutation: [],
107
+ timeoutMs: null,
108
+ errorBehavior: "fail-closed",
109
+ processAuthority: "hook-api",
110
+ trustRequirement: "not-enforced",
111
+ redaction: "none",
112
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
113
+ semanticNotes:
114
+ "The first blocking result stops later handlers. Directory hooks are imported modules, not shell scripts.",
115
+ };
116
+
117
+ const hookModulePost: HookExecutionContract = {
118
+ kind: HookEventKind.PostToolUse,
119
+ runtimeEvent: "tool_result",
120
+ authority: HookAuthority.InProcess,
121
+ awaitBehavior: "awaited",
122
+ ordering: "sequential",
123
+ canCancel: false,
124
+ mutation: ["content", "details", "isError"],
125
+ timeoutMs: 30_000,
126
+ errorBehavior: "isolate",
127
+ processAuthority: "hook-api",
128
+ trustRequirement: "not-enforced",
129
+ redaction: "none",
130
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
131
+ semanticNotes:
132
+ "Handlers receive the prior handler's replacements; content, details, and isError changes are chained in registration order.",
133
+ };
134
+
135
+ const constrainedPre: HookExecutionContract = {
136
+ ...hookModulePre,
137
+ authority: HookAuthority.Constrained,
138
+ processAuthority: "ambient-host",
139
+ semanticNotes:
140
+ "The plugin API denies exec, messaging, commands, renderers, and session mutation, but the imported module is not a process sandbox and retains ambient Bun/host globals. A thrown pre-hook error blocks the tool.",
141
+ };
142
+
143
+ const constrainedPost: HookExecutionContract = {
144
+ ...hookModulePost,
145
+ authority: HookAuthority.Constrained,
146
+ timeoutMs: 30_000,
147
+ processAuthority: "ambient-host",
148
+ mutation: ["content", "details", "isError"],
149
+ semanticNotes: "The constrained hook is adapted into ExtensionRunner; timeout and thrown errors are isolated.",
150
+ };
151
+
152
+ const constrainedLifecycle = (kind: HookEventKind, runtimeEvent: string): HookExecutionContract => ({
153
+ kind,
154
+ runtimeEvent,
155
+ authority: HookAuthority.Constrained,
156
+ awaitBehavior: "awaited",
157
+ ordering: "sequential",
158
+ canCancel: false,
159
+ mutation: [],
160
+ timeoutMs: 30_000,
161
+ errorBehavior: "isolate",
162
+ processAuthority: "ambient-host",
163
+ trustRequirement: "not-enforced",
164
+ redaction: "none",
165
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
166
+ semanticNotes:
167
+ "The constrained GJC API remains denied, but the imported plugin module retains ambient host-process authority.",
168
+ });
169
+
170
+ const managedPrompt: HookExecutionContract = {
171
+ kind: HookEventKind.UserPromptSubmit,
172
+ runtimeEvent: "UserPromptSubmit",
173
+ authority: HookAuthority.Command,
174
+ awaitBehavior: "external-runtime",
175
+ ordering: "external-runtime",
176
+ canCancel: false,
177
+ mutation: [],
178
+ timeoutMs: null,
179
+ errorBehavior: "external-runtime",
180
+ processAuthority: "command",
181
+ trustRequirement: "provider-owned",
182
+ redaction: "provider-owned",
183
+ logging: "Codex owns command invocation logging; GJC only installs and handles its managed command payload.",
184
+ semanticNotes: "Normalization describes hooks.json configuration; GJC does not schedule this command itself.",
185
+ };
186
+
187
+ const managedStop: HookExecutionContract = {
188
+ ...managedPrompt,
189
+ kind: HookEventKind.Stop,
190
+ runtimeEvent: "Stop",
191
+ };
192
+
193
+ const inProcessPrompt: HookExecutionContract = {
194
+ kind: HookEventKind.UserPromptSubmit,
195
+ runtimeEvent: "before_agent_start",
196
+ authority: HookAuthority.InProcess,
197
+ awaitBehavior: "awaited",
198
+ ordering: "sequential",
199
+ canCancel: false,
200
+ mutation: ["message", "systemPrompt"],
201
+ timeoutMs: 30_000,
202
+ errorBehavior: "isolate",
203
+ processAuthority: "hook-api",
204
+ trustRequirement: "not-enforced",
205
+ redaction: "none",
206
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
207
+ semanticNotes: "This is a before-agent-start callback, not a byte-for-byte Claude/Codex UserPromptSubmit payload.",
208
+ };
209
+
210
+ const inProcessStop: HookExecutionContract = {
211
+ kind: HookEventKind.Stop,
212
+ runtimeEvent: "agent_end",
213
+ authority: HookAuthority.InProcess,
214
+ awaitBehavior: "awaited",
215
+ ordering: "sequential",
216
+ canCancel: false,
217
+ mutation: [],
218
+ timeoutMs: 30_000,
219
+ errorBehavior: "isolate",
220
+ processAuthority: "hook-api",
221
+ trustRequirement: "not-enforced",
222
+ redaction: "none",
223
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
224
+ semanticNotes:
225
+ "agent_end is the loop-end equivalent. turn_end is per-turn and is intentionally not normalized to Stop.",
226
+ };
227
+
228
+ const lifecycle = (kind: HookEventKind, runtimeEvent: string): HookExecutionContract => ({
229
+ kind,
230
+ runtimeEvent,
231
+ authority: HookAuthority.InProcess,
232
+ awaitBehavior: "awaited",
233
+ ordering: "sequential",
234
+ canCancel: false,
235
+ mutation: [],
236
+ timeoutMs: 30_000,
237
+ errorBehavior: "isolate",
238
+ processAuthority: "hook-api",
239
+ trustRequirement: "not-enforced",
240
+ redaction: "none",
241
+ logging: "Extension errors expose the extension path, event name, error message, and stack to registered listeners.",
242
+ semanticNotes: "Dispatched by ExtensionRunner and awaited sequentially with the shared extension timeout.",
243
+ });
244
+
245
+ /** Per-convention execution truth. Missing entries are unsupported. */
246
+ export const CONVENTION_EVENT_CONTRACTS: Record<
247
+ HookSourceConvention,
248
+ Partial<Record<HookEventKind, HookExecutionContract>>
249
+ > = {
250
+ [HookSourceConvention.NativeGjc]: {
251
+ [HookEventKind.PreToolUse]: hookModulePre,
252
+ [HookEventKind.PostToolUse]: hookModulePost,
253
+ },
254
+ [HookSourceConvention.ClaudeCode]: {
255
+ [HookEventKind.PreToolUse]: hookModulePre,
256
+ [HookEventKind.PostToolUse]: hookModulePost,
257
+ },
258
+ [HookSourceConvention.Codex]: {
259
+ [HookEventKind.PreToolUse]: hookModulePre,
260
+ [HookEventKind.PostToolUse]: hookModulePost,
261
+ },
262
+ [HookSourceConvention.CodexManagedJson]: {
263
+ [HookEventKind.UserPromptSubmit]: managedPrompt,
264
+ [HookEventKind.Stop]: managedStop,
265
+ },
266
+ [HookSourceConvention.GjcPlugin]: {
267
+ [HookEventKind.PreToolUse]: constrainedPre,
268
+ [HookEventKind.PostToolUse]: constrainedPost,
269
+ [HookEventKind.SessionStart]: constrainedLifecycle(HookEventKind.SessionStart, "session_start"),
270
+ [HookEventKind.SessionShutdown]: constrainedLifecycle(HookEventKind.SessionShutdown, "session_shutdown"),
271
+ },
272
+ [HookSourceConvention.InProcess]: {
273
+ [HookEventKind.UserPromptSubmit]: inProcessPrompt,
274
+ [HookEventKind.PreToolUse]: hookModulePre,
275
+ [HookEventKind.PostToolUse]: hookModulePost,
276
+ [HookEventKind.Stop]: inProcessStop,
277
+ [HookEventKind.SessionStart]: lifecycle(HookEventKind.SessionStart, "session_start"),
278
+ [HookEventKind.SessionShutdown]: lifecycle(HookEventKind.SessionShutdown, "session_shutdown"),
279
+ },
280
+ };
281
+
282
+ export const EXTERNAL_EVENT_ALIASES: Readonly<Record<string, HookEventKind>> = {
283
+ UserPromptSubmit: HookEventKind.UserPromptSubmit,
284
+ Stop: HookEventKind.Stop,
285
+ before_agent_start: HookEventKind.UserPromptSubmit,
286
+ tool_call: HookEventKind.PreToolUse,
287
+ tool_result: HookEventKind.PostToolUse,
288
+ agent_end: HookEventKind.Stop,
289
+ session_start: HookEventKind.SessionStart,
290
+ session_shutdown: HookEventKind.SessionShutdown,
291
+ };
@@ -119,6 +119,8 @@ function mergeRawSkillConfig(
119
119
  const rawSkills = readNestedRecord(raw, "skills");
120
120
  const enabled = readBoolean(rawSkills.enabled);
121
121
  const enableSkillCommands = readBoolean(rawSkills.enableSkillCommands);
122
+ const trustProjectSkills = readBoolean(rawSkills.trustProjectSkills);
123
+ const trustUserSkills = readBoolean(rawSkills.trustUserSkills);
122
124
  const enablePiUser = readBoolean(rawSkills.enablePiUser);
123
125
  const enablePiProject = readBoolean(rawSkills.enablePiProject);
124
126
  const enableCodexUser = readBoolean(rawSkills.enableCodexUser);
@@ -133,6 +135,8 @@ function mergeRawSkillConfig(
133
135
  ...currentSkills,
134
136
  ...(enabled !== undefined ? { enabled } : {}),
135
137
  ...(enableSkillCommands !== undefined ? { enableSkillCommands } : {}),
138
+ ...(trustProjectSkills !== undefined ? { trustProjectSkills } : {}),
139
+ ...(trustUserSkills !== undefined ? { trustUserSkills } : {}),
136
140
  ...(enablePiUser !== undefined ? { enablePiUser } : {}),
137
141
  ...(enablePiProject !== undefined ? { enablePiProject } : {}),
138
142
  ...(enableCodexUser !== undefined ? { enableCodexUser } : {}),
@@ -0,0 +1,369 @@
1
+ import {
2
+ CONVENTION_EVENT_CONTRACTS,
3
+ EXTERNAL_EVENT_ALIASES,
4
+ type HookAuthority,
5
+ HookEventKind,
6
+ type HookExecutionContract,
7
+ HookSourceConvention,
8
+ } from "./events";
9
+
10
+ export const HookDiagnosticSeverity = {
11
+ Error: "error",
12
+ Warning: "warning",
13
+ } as const;
14
+
15
+ export type HookDiagnosticSeverity = (typeof HookDiagnosticSeverity)[keyof typeof HookDiagnosticSeverity];
16
+
17
+ export const HookDiagnosticCode = {
18
+ UnsupportedConventionEvent: "unsupported_convention_event",
19
+ UnrecognizedPluginEvent: "unrecognized_plugin_event",
20
+ InvalidPluginPhase: "invalid_plugin_phase",
21
+ InvalidToolMatcher: "invalid_tool_matcher",
22
+ InvalidSource: "invalid_source",
23
+ InvalidCommand: "invalid_command",
24
+ DuplicateHook: "duplicate_hook",
25
+ InProcessEventOutsideIr: "in_process_event_outside_hook_ir",
26
+ SemanticMismatch: "semantic_mismatch",
27
+ } as const;
28
+
29
+ export type HookDiagnosticCode = (typeof HookDiagnosticCode)[keyof typeof HookDiagnosticCode];
30
+
31
+ export interface HookNormalizationDiagnostic {
32
+ severity: HookDiagnosticSeverity;
33
+ code: HookDiagnosticCode;
34
+ message: string;
35
+ convention: HookSourceConvention;
36
+ externalEvent?: string;
37
+ canonicalKind?: HookEventKind;
38
+ source?: string;
39
+ }
40
+
41
+ export interface NormalizedHook {
42
+ kind: HookEventKind;
43
+ authority: HookAuthority;
44
+ convention: HookSourceConvention;
45
+ runtimeEvent: string;
46
+ toolName: string;
47
+ source: string;
48
+ contract: HookExecutionContract;
49
+ }
50
+
51
+ export interface NormalizeHookResult {
52
+ hook: NormalizedHook | null;
53
+ diagnostics: HookNormalizationDiagnostic[];
54
+ }
55
+
56
+ export function resolveExecutionContract(
57
+ convention: HookSourceConvention,
58
+ kind: HookEventKind,
59
+ ): HookExecutionContract | null {
60
+ return CONVENTION_EVENT_CONTRACTS[convention][kind] ?? null;
61
+ }
62
+
63
+ export function resolveAuthority(convention: HookSourceConvention, kind: HookEventKind): HookAuthority | null {
64
+ return resolveExecutionContract(convention, kind)?.authority ?? null;
65
+ }
66
+
67
+ export function resolveCanonicalKind(externalEvent: string): HookEventKind | null {
68
+ return EXTERNAL_EVENT_ALIASES[externalEvent] ?? null;
69
+ }
70
+
71
+ export function unsupportedEventDiagnostic(
72
+ convention: HookSourceConvention,
73
+ externalEvent: string,
74
+ canonicalKind: HookEventKind | null,
75
+ source?: string,
76
+ ): HookNormalizationDiagnostic {
77
+ return {
78
+ severity: HookDiagnosticSeverity.Error,
79
+ code: HookDiagnosticCode.UnsupportedConventionEvent,
80
+ message: canonicalKind
81
+ ? `Convention "${convention}" does not support canonical event "${canonicalKind}".`
82
+ : `Convention "${convention}" received unrecognized external event "${externalEvent}".`,
83
+ convention,
84
+ externalEvent,
85
+ canonicalKind: canonicalKind ?? undefined,
86
+ source,
87
+ };
88
+ }
89
+
90
+ function invalid(
91
+ code: HookDiagnosticCode,
92
+ message: string,
93
+ convention: HookSourceConvention,
94
+ input: { source?: string; externalEvent?: string; canonicalKind?: HookEventKind },
95
+ ): NormalizeHookResult {
96
+ return {
97
+ hook: null,
98
+ diagnostics: [{ severity: HookDiagnosticSeverity.Error, code, message, convention, ...input }],
99
+ };
100
+ }
101
+
102
+ function validateSource(convention: HookSourceConvention, source: string): NormalizeHookResult | null {
103
+ if (source.trim()) return null;
104
+ return invalid(HookDiagnosticCode.InvalidSource, "Hook source provenance must be non-empty.", convention, {
105
+ source,
106
+ });
107
+ }
108
+
109
+ /** Tool identifiers are logical, case-sensitive runtime names, not filesystem paths. */
110
+ export function normalizeToolMatcher(toolName: unknown): string | null {
111
+ if (typeof toolName !== "string") return null;
112
+ const normalized = toolName.trim();
113
+ if (!normalized || normalized === "." || normalized === "..") return null;
114
+ if (normalized !== toolName) return null;
115
+ if (normalized !== "*" && (normalized.includes("/") || normalized.includes("\\") || normalized.includes("\0"))) {
116
+ return null;
117
+ }
118
+ return normalized;
119
+ }
120
+
121
+ function buildHook(
122
+ convention: HookSourceConvention,
123
+ kind: HookEventKind,
124
+ toolName: unknown,
125
+ source: string,
126
+ ): NormalizeHookResult {
127
+ const sourceFailure = validateSource(convention, source);
128
+ if (sourceFailure) return sourceFailure;
129
+ const contract = resolveExecutionContract(convention, kind);
130
+ if (!contract) return { hook: null, diagnostics: [unsupportedEventDiagnostic(convention, kind, kind, source)] };
131
+ const matcher = normalizeToolMatcher(toolName);
132
+ if (!matcher) {
133
+ return invalid(
134
+ HookDiagnosticCode.InvalidToolMatcher,
135
+ `Invalid tool matcher "${toolName}"; matchers are case-sensitive logical names or "*", never paths.`,
136
+ convention,
137
+ { source, canonicalKind: kind },
138
+ );
139
+ }
140
+ return {
141
+ hook: {
142
+ kind,
143
+ authority: contract.authority,
144
+ convention,
145
+ runtimeEvent: contract.runtimeEvent,
146
+ toolName: matcher,
147
+ source,
148
+ contract,
149
+ },
150
+ diagnostics: [],
151
+ };
152
+ }
153
+
154
+ export interface DirectoryHookInput {
155
+ convention: HookSourceConvention;
156
+ phase: "pre" | "post";
157
+ toolName: string;
158
+ source: string;
159
+ /** Original discovered filename, when normalization participates in discovery. */
160
+ externalName?: string;
161
+ }
162
+
163
+ /** Normalize discovery metadata for native, Claude, or Codex hook modules. */
164
+ export function normalizeDirectoryHook(input: DirectoryHookInput): NormalizeHookResult {
165
+ if (
166
+ input.convention !== HookSourceConvention.NativeGjc &&
167
+ input.convention !== HookSourceConvention.ClaudeCode &&
168
+ input.convention !== HookSourceConvention.Codex
169
+ ) {
170
+ const kind = input.phase === "pre" ? HookEventKind.PreToolUse : HookEventKind.PostToolUse;
171
+ return {
172
+ hook: null,
173
+ diagnostics: [unsupportedEventDiagnostic(input.convention, input.phase, kind, input.source)],
174
+ };
175
+ }
176
+ if (input.convention === HookSourceConvention.Codex && input.externalName) {
177
+ const expectedPrefix = `${input.phase}-`;
178
+ if (!input.externalName.startsWith(expectedPrefix)) {
179
+ return invalid(
180
+ HookDiagnosticCode.SemanticMismatch,
181
+ `Codex hook filename "${input.externalName}" must use the ${expectedPrefix}<tool>.ts|js convention.`,
182
+ input.convention,
183
+ { source: input.source, externalEvent: input.externalName },
184
+ );
185
+ }
186
+ }
187
+ return buildHook(
188
+ input.convention,
189
+ input.phase === "pre" ? HookEventKind.PreToolUse : HookEventKind.PostToolUse,
190
+ input.toolName,
191
+ input.source,
192
+ );
193
+ }
194
+
195
+ export interface ManagedJsonHookInput {
196
+ externalEvent: string;
197
+ command: string;
198
+ source: string;
199
+ }
200
+
201
+ /** Normalize the two GJC-managed Codex hooks.json entries. */
202
+ export function normalizeManagedJsonHook(input: ManagedJsonHookInput): NormalizeHookResult {
203
+ if (!input.command.trim()) {
204
+ return invalid(
205
+ HookDiagnosticCode.InvalidCommand,
206
+ "Managed hooks.json command must be non-empty.",
207
+ HookSourceConvention.CodexManagedJson,
208
+ { source: input.source, externalEvent: input.externalEvent },
209
+ );
210
+ }
211
+ const kind =
212
+ input.externalEvent === "UserPromptSubmit"
213
+ ? HookEventKind.UserPromptSubmit
214
+ : input.externalEvent === "Stop"
215
+ ? HookEventKind.Stop
216
+ : null;
217
+ if (!kind) {
218
+ return {
219
+ hook: null,
220
+ diagnostics: [
221
+ unsupportedEventDiagnostic(HookSourceConvention.CodexManagedJson, input.externalEvent, null, input.source),
222
+ ],
223
+ };
224
+ }
225
+ return buildHook(HookSourceConvention.CodexManagedJson, kind, "*", input.source);
226
+ }
227
+
228
+ export interface PluginHookInput {
229
+ declaredEvent: string;
230
+ target?: unknown;
231
+ phase?: unknown;
232
+ plugin: string;
233
+ source: string;
234
+ }
235
+
236
+ /** Normalize only manifest shapes that the constrained plugin compiler accepts. */
237
+ export function normalizePluginHook(input: PluginHookInput): NormalizeHookResult {
238
+ if (input.declaredEvent === "session_start" || input.declaredEvent === "session_shutdown") {
239
+ if (input.phase !== undefined || input.target !== undefined) {
240
+ return invalid(
241
+ HookDiagnosticCode.InvalidPluginPhase,
242
+ `Plugin "${input.plugin}" ${input.declaredEvent} hooks do not accept target or phase.`,
243
+ HookSourceConvention.GjcPlugin,
244
+ { source: input.source, externalEvent: input.declaredEvent },
245
+ );
246
+ }
247
+ return buildHook(
248
+ HookSourceConvention.GjcPlugin,
249
+ input.declaredEvent === "session_start" ? HookEventKind.SessionStart : HookEventKind.SessionShutdown,
250
+ "*",
251
+ input.source,
252
+ );
253
+ }
254
+ if (input.declaredEvent !== "tool_call" && input.declaredEvent !== "tool_result") {
255
+ return invalid(
256
+ HookDiagnosticCode.UnrecognizedPluginEvent,
257
+ `Plugin "${input.plugin}" declared unsupported event "${input.declaredEvent}"; aliases cannot expand plugin authority.`,
258
+ HookSourceConvention.GjcPlugin,
259
+ { source: input.source, externalEvent: input.declaredEvent },
260
+ );
261
+ }
262
+
263
+ if (input.declaredEvent === "tool_call") {
264
+ if (!input.target || (input.phase !== "before" && input.phase !== "after")) {
265
+ return invalid(
266
+ HookDiagnosticCode.InvalidPluginPhase,
267
+ `Plugin "${input.plugin}" tool_call hooks require both target and before/after phase.`,
268
+ HookSourceConvention.GjcPlugin,
269
+ { source: input.source, externalEvent: input.declaredEvent },
270
+ );
271
+ }
272
+ return buildHook(
273
+ HookSourceConvention.GjcPlugin,
274
+ input.phase === "before" ? HookEventKind.PreToolUse : HookEventKind.PostToolUse,
275
+ input.target,
276
+ input.source,
277
+ );
278
+ }
279
+
280
+ if (input.phase !== "after") {
281
+ return invalid(
282
+ HookDiagnosticCode.InvalidPluginPhase,
283
+ `Plugin "${input.plugin}" tool_result hooks require phase "after".`,
284
+ HookSourceConvention.GjcPlugin,
285
+ { source: input.source, externalEvent: input.declaredEvent },
286
+ );
287
+ }
288
+ return buildHook(HookSourceConvention.GjcPlugin, HookEventKind.PostToolUse, input.target ?? "*", input.source);
289
+ }
290
+
291
+ export interface InProcessHookInput {
292
+ registeredEvent: string;
293
+ source: string;
294
+ }
295
+
296
+ export function normalizeInProcessHook(input: InProcessHookInput): NormalizeHookResult {
297
+ if (input.registeredEvent === "turn_end") {
298
+ return invalid(
299
+ HookDiagnosticCode.SemanticMismatch,
300
+ "turn_end fires once per turn and is not equivalent to provider Stop/agent_end.",
301
+ HookSourceConvention.InProcess,
302
+ { source: input.source, externalEvent: input.registeredEvent, canonicalKind: HookEventKind.Stop },
303
+ );
304
+ }
305
+ const kind =
306
+ input.registeredEvent === "before_agent_start"
307
+ ? HookEventKind.UserPromptSubmit
308
+ : input.registeredEvent === "tool_call"
309
+ ? HookEventKind.PreToolUse
310
+ : input.registeredEvent === "tool_result"
311
+ ? HookEventKind.PostToolUse
312
+ : input.registeredEvent === "agent_end"
313
+ ? HookEventKind.Stop
314
+ : input.registeredEvent === "session_start"
315
+ ? HookEventKind.SessionStart
316
+ : input.registeredEvent === "session_shutdown"
317
+ ? HookEventKind.SessionShutdown
318
+ : null;
319
+ if (!kind) {
320
+ return {
321
+ hook: null,
322
+ diagnostics: [
323
+ {
324
+ severity: HookDiagnosticSeverity.Warning,
325
+ code: HookDiagnosticCode.InProcessEventOutsideIr,
326
+ message: `In-process event "${input.registeredEvent}" remains on the broader HookAPI and is not normalized.`,
327
+ convention: HookSourceConvention.InProcess,
328
+ externalEvent: input.registeredEvent,
329
+ source: input.source,
330
+ },
331
+ ],
332
+ };
333
+ }
334
+ return buildHook(HookSourceConvention.InProcess, kind, "*", input.source);
335
+ }
336
+
337
+ export interface BatchNormalizeResult {
338
+ hooks: NormalizedHook[];
339
+ diagnostics: HookNormalizationDiagnostic[];
340
+ }
341
+
342
+ /** Stable first-wins deduplication; rejected and duplicate entries remain visible as diagnostics. */
343
+ export function normalizeHookBatch(results: ReadonlyArray<NormalizeHookResult>): BatchNormalizeResult {
344
+ const hooks: NormalizedHook[] = [];
345
+ const diagnostics: HookNormalizationDiagnostic[] = [];
346
+ const seen = new Map<string, NormalizedHook>();
347
+
348
+ for (const result of results) {
349
+ diagnostics.push(...result.diagnostics);
350
+ if (!result.hook) continue;
351
+ const key = `${result.hook.convention}\0${result.hook.kind}\0${result.hook.toolName}\0${result.hook.source}`;
352
+ const prior = seen.get(key);
353
+ if (prior) {
354
+ diagnostics.push({
355
+ severity: HookDiagnosticSeverity.Warning,
356
+ code: HookDiagnosticCode.DuplicateHook,
357
+ message: `Duplicate hook descriptor ignored; first occurrence remains ordered first.`,
358
+ convention: result.hook.convention,
359
+ canonicalKind: result.hook.kind,
360
+ source: result.hook.source,
361
+ });
362
+ continue;
363
+ }
364
+ seen.set(key, result.hook);
365
+ hooks.push(result.hook);
366
+ }
367
+
368
+ return { hooks, diagnostics };
369
+ }