@elie-laloum/outpost 11.1.2 → 11.2.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 (596) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +2 -1
  3. package/SECURITY.md +5 -1
  4. package/dist/adapters/agents/antigravity/antigravity-adapter.js +9 -0
  5. package/dist/adapters/agents/antigravity/antigravity-adapter.js.map +1 -1
  6. package/dist/adapters/agents/antigravity/antigravity-hook-plan.d.ts +3 -0
  7. package/dist/adapters/agents/antigravity/antigravity-hook-plan.js +39 -0
  8. package/dist/adapters/agents/antigravity/antigravity-hook-plan.js.map +1 -0
  9. package/dist/adapters/agents/antigravity/antigravity-hooks.constants.d.ts +3 -0
  10. package/dist/adapters/agents/antigravity/antigravity-hooks.constants.js +394 -0
  11. package/dist/adapters/agents/antigravity/antigravity-hooks.constants.js.map +1 -0
  12. package/dist/adapters/agents/antigravity/antigravity-hooks.d.ts +2 -0
  13. package/dist/adapters/agents/antigravity/antigravity-hooks.js +6 -0
  14. package/dist/adapters/agents/antigravity/antigravity-hooks.js.map +1 -0
  15. package/dist/adapters/agents/antigravity/antigravity-hooks.types.d.ts +114 -0
  16. package/dist/adapters/agents/antigravity/antigravity-hooks.types.js +2 -0
  17. package/dist/adapters/agents/antigravity/antigravity-hooks.types.js.map +1 -0
  18. package/dist/adapters/agents/antigravity/antigravity.types.d.ts +1 -0
  19. package/dist/adapters/agents/antigravity/antigravity.types.js.map +1 -1
  20. package/dist/adapters/agents/authentication.js +1 -0
  21. package/dist/adapters/agents/authentication.js.map +1 -1
  22. package/dist/adapters/agents/claude/claude-adapter.js +15 -0
  23. package/dist/adapters/agents/claude/claude-adapter.js.map +1 -1
  24. package/dist/adapters/agents/claude/claude-hook-plan.constants.d.ts +1 -0
  25. package/dist/adapters/agents/claude/claude-hook-plan.constants.js +20 -0
  26. package/dist/adapters/agents/claude/claude-hook-plan.constants.js.map +1 -0
  27. package/dist/adapters/agents/claude/claude-hook-plan.d.ts +4 -0
  28. package/dist/adapters/agents/claude/claude-hook-plan.js +60 -0
  29. package/dist/adapters/agents/claude/claude-hook-plan.js.map +1 -0
  30. package/dist/adapters/agents/claude/claude-hooks.constants.d.ts +3 -0
  31. package/dist/adapters/agents/claude/claude-hooks.constants.js +2968 -0
  32. package/dist/adapters/agents/claude/claude-hooks.constants.js.map +1 -0
  33. package/dist/adapters/agents/claude/claude-hooks.d.ts +2 -0
  34. package/dist/adapters/agents/claude/claude-hooks.js +6 -0
  35. package/dist/adapters/agents/claude/claude-hooks.js.map +1 -0
  36. package/dist/adapters/agents/claude/claude-hooks.types.d.ts +900 -0
  37. package/dist/adapters/agents/claude/claude-hooks.types.js +2 -0
  38. package/dist/adapters/agents/claude/claude-hooks.types.js.map +1 -0
  39. package/dist/adapters/agents/claude/claude-profile.d.ts +1 -0
  40. package/dist/adapters/agents/claude/claude-profile.js +23 -11
  41. package/dist/adapters/agents/claude/claude-profile.js.map +1 -1
  42. package/dist/adapters/agents/codex/codex-adapter.js +17 -1
  43. package/dist/adapters/agents/codex/codex-adapter.js.map +1 -1
  44. package/dist/adapters/agents/codex/codex-authentication.js +1 -0
  45. package/dist/adapters/agents/codex/codex-authentication.js.map +1 -1
  46. package/dist/adapters/agents/codex/codex-conversations.constants.d.ts +1 -0
  47. package/dist/adapters/agents/codex/codex-conversations.constants.js +2 -0
  48. package/dist/adapters/agents/codex/codex-conversations.constants.js.map +1 -0
  49. package/dist/adapters/agents/codex/codex-conversations.js +8 -5
  50. package/dist/adapters/agents/codex/codex-conversations.js.map +1 -1
  51. package/dist/adapters/agents/codex/codex-hook-plan.d.ts +3 -0
  52. package/dist/adapters/agents/codex/codex-hook-plan.js +72 -0
  53. package/dist/adapters/agents/codex/codex-hook-plan.js.map +1 -0
  54. package/dist/adapters/agents/codex/codex-hooks.constants.d.ts +3 -0
  55. package/dist/adapters/agents/codex/codex-hooks.constants.js +942 -0
  56. package/dist/adapters/agents/codex/codex-hooks.constants.js.map +1 -0
  57. package/dist/adapters/agents/codex/codex-hooks.d.ts +2 -0
  58. package/dist/adapters/agents/codex/codex-hooks.js +6 -0
  59. package/dist/adapters/agents/codex/codex-hooks.js.map +1 -0
  60. package/dist/adapters/agents/codex/codex-hooks.types.d.ts +255 -0
  61. package/dist/adapters/agents/codex/codex-hooks.types.js +2 -0
  62. package/dist/adapters/agents/codex/codex-hooks.types.js.map +1 -0
  63. package/dist/adapters/agents/codex/codex-provider.js +2 -2
  64. package/dist/adapters/agents/codex/codex-provider.js.map +1 -1
  65. package/dist/adapters/agents/copilot/copilot-adapter.js +14 -0
  66. package/dist/adapters/agents/copilot/copilot-adapter.js.map +1 -1
  67. package/dist/adapters/agents/copilot/copilot-hook-plan.d.ts +3 -0
  68. package/dist/adapters/agents/copilot/copilot-hook-plan.js +26 -0
  69. package/dist/adapters/agents/copilot/copilot-hook-plan.js.map +1 -0
  70. package/dist/adapters/agents/copilot/copilot-hooks.constants.d.ts +3 -0
  71. package/dist/adapters/agents/copilot/copilot-hooks.constants.js +528 -0
  72. package/dist/adapters/agents/copilot/copilot-hooks.constants.js.map +1 -0
  73. package/dist/adapters/agents/copilot/copilot-hooks.d.ts +2 -0
  74. package/dist/adapters/agents/copilot/copilot-hooks.js +6 -0
  75. package/dist/adapters/agents/copilot/copilot-hooks.js.map +1 -0
  76. package/dist/adapters/agents/copilot/copilot-hooks.types.d.ts +166 -0
  77. package/dist/adapters/agents/copilot/copilot-hooks.types.js +2 -0
  78. package/dist/adapters/agents/copilot/copilot-hooks.types.js.map +1 -0
  79. package/dist/adapters/agents/copilot/copilot.types.d.ts +1 -0
  80. package/dist/adapters/agents/copilot/copilot.types.js.map +1 -1
  81. package/dist/adapters/agents/hook-groups.d.ts +2 -0
  82. package/dist/adapters/agents/hook-groups.js +17 -0
  83. package/dist/adapters/agents/hook-groups.js.map +1 -0
  84. package/dist/adapters/agents/kimi/kimi-adapter.js +16 -1
  85. package/dist/adapters/agents/kimi/kimi-adapter.js.map +1 -1
  86. package/dist/adapters/agents/kimi/kimi-hook-plan.d.ts +3 -0
  87. package/dist/adapters/agents/kimi/kimi-hook-plan.js +33 -0
  88. package/dist/adapters/agents/kimi/kimi-hook-plan.js.map +1 -0
  89. package/dist/adapters/agents/kimi/kimi-hooks.constants.d.ts +3 -0
  90. package/dist/adapters/agents/kimi/kimi-hooks.constants.js +747 -0
  91. package/dist/adapters/agents/kimi/kimi-hooks.constants.js.map +1 -0
  92. package/dist/adapters/agents/kimi/kimi-hooks.d.ts +2 -0
  93. package/dist/adapters/agents/kimi/kimi-hooks.js +6 -0
  94. package/dist/adapters/agents/kimi/kimi-hooks.js.map +1 -0
  95. package/dist/adapters/agents/kimi/kimi-hooks.types.d.ts +226 -0
  96. package/dist/adapters/agents/kimi/kimi-hooks.types.js +2 -0
  97. package/dist/adapters/agents/kimi/kimi-hooks.types.js.map +1 -0
  98. package/dist/adapters/agents/kimi/kimi-request.js +2 -0
  99. package/dist/adapters/agents/kimi/kimi-request.js.map +1 -1
  100. package/dist/adapters/agents/kimi/kimi.constants.d.ts +1 -0
  101. package/dist/adapters/agents/kimi/kimi.constants.js +1 -0
  102. package/dist/adapters/agents/kimi/kimi.constants.js.map +1 -1
  103. package/dist/adapters/agents/kimi/kimi.types.d.ts +1 -0
  104. package/dist/adapters/agents/kimi/kimi.types.js.map +1 -1
  105. package/dist/adapters/agents/native-hooks.d.ts +4 -0
  106. package/dist/adapters/agents/native-hooks.js +63 -0
  107. package/dist/adapters/agents/native-hooks.js.map +1 -0
  108. package/dist/adapters/agents/native-hooks.types.d.ts +22 -0
  109. package/dist/adapters/agents/native-hooks.types.js +2 -0
  110. package/dist/adapters/agents/native-hooks.types.js.map +1 -0
  111. package/dist/adapters/agents/settings.types.d.ts +2 -0
  112. package/dist/adapters/agents/settings.types.js.map +1 -1
  113. package/dist/adapters/decisions/system-one-provider.constants.d.ts +1 -1
  114. package/dist/adapters/decisions/system-one-provider.constants.js +1 -1
  115. package/dist/adapters/decisions/system-one-provider.constants.js.map +1 -1
  116. package/dist/adapters/decisions/system-one-provider.js +8 -21
  117. package/dist/adapters/decisions/system-one-provider.js.map +1 -1
  118. package/dist/adapters/models/anthropic-model-provider.constants.d.ts +1 -0
  119. package/dist/adapters/models/anthropic-model-provider.constants.js +4 -0
  120. package/dist/adapters/models/anthropic-model-provider.constants.js.map +1 -1
  121. package/dist/adapters/models/anthropic-model-provider.js +7 -1
  122. package/dist/adapters/models/anthropic-model-provider.js.map +1 -1
  123. package/dist/adapters/models/http-failure.d.ts +3 -0
  124. package/dist/adapters/models/http-failure.js +43 -0
  125. package/dist/adapters/models/http-failure.js.map +1 -0
  126. package/dist/adapters/models/http-provider.js +14 -20
  127. package/dist/adapters/models/http-provider.js.map +1 -1
  128. package/dist/adapters/models/model-protocol.types.d.ts +1 -0
  129. package/dist/adapters/models/model-protocol.types.js.map +1 -1
  130. package/dist/adapters/models/model.constants.d.ts +2 -0
  131. package/dist/adapters/models/model.constants.js +17 -0
  132. package/dist/adapters/models/model.constants.js.map +1 -1
  133. package/dist/adapters/models/openai-chat-stream.js +3 -1
  134. package/dist/adapters/models/openai-chat-stream.js.map +1 -1
  135. package/dist/adapters/models/openai-responses.js +4 -0
  136. package/dist/adapters/models/openai-responses.js.map +1 -1
  137. package/dist/adapters/secrets/aws.js +5 -4
  138. package/dist/adapters/secrets/aws.js.map +1 -1
  139. package/dist/adapters/secrets/azure.constants.d.ts +1 -0
  140. package/dist/adapters/secrets/azure.constants.js +2 -0
  141. package/dist/adapters/secrets/azure.constants.js.map +1 -0
  142. package/dist/adapters/secrets/azure.js +2 -1
  143. package/dist/adapters/secrets/azure.js.map +1 -1
  144. package/dist/adapters/secrets/gcp.constants.d.ts +1 -0
  145. package/dist/adapters/secrets/gcp.constants.js +2 -0
  146. package/dist/adapters/secrets/gcp.constants.js.map +1 -0
  147. package/dist/adapters/secrets/gcp.js +11 -9
  148. package/dist/adapters/secrets/gcp.js.map +1 -1
  149. package/dist/adapters/secrets/infisical.js +3 -2
  150. package/dist/adapters/secrets/infisical.js.map +1 -1
  151. package/dist/adapters/secrets/onepassword.constants.d.ts +1 -0
  152. package/dist/adapters/secrets/onepassword.constants.js +2 -0
  153. package/dist/adapters/secrets/onepassword.constants.js.map +1 -0
  154. package/dist/adapters/secrets/onepassword.js +2 -1
  155. package/dist/adapters/secrets/onepassword.js.map +1 -1
  156. package/dist/adapters/secrets/secret-source.js +3 -1
  157. package/dist/adapters/secrets/secret-source.js.map +1 -1
  158. package/dist/adapters/secrets/vault-response.js +5 -5
  159. package/dist/adapters/secrets/vault-response.js.map +1 -1
  160. package/dist/adapters/secrets/vault.js +4 -3
  161. package/dist/adapters/secrets/vault.js.map +1 -1
  162. package/dist/adapters/testing/scripted-agent.d.ts +3 -1
  163. package/dist/adapters/testing/scripted-agent.js +3 -1
  164. package/dist/adapters/testing/scripted-agent.js.map +1 -1
  165. package/dist/adapters/tools/edit-tools.js +3 -3
  166. package/dist/adapters/tools/edit-tools.js.map +1 -1
  167. package/dist/adapters/tools/git-tools.js +16 -1
  168. package/dist/adapters/tools/git-tools.js.map +1 -1
  169. package/dist/adapters/tools/mcp-launcher.constants.d.ts +1 -1
  170. package/dist/adapters/tools/mcp-launcher.constants.js +29 -7
  171. package/dist/adapters/tools/mcp-launcher.constants.js.map +1 -1
  172. package/dist/adapters/tools/mcp-resources.js +5 -1
  173. package/dist/adapters/tools/mcp-resources.js.map +1 -1
  174. package/dist/adapters/tools/mcp.constants.d.ts +0 -6
  175. package/dist/adapters/tools/mcp.constants.js +0 -6
  176. package/dist/adapters/tools/mcp.constants.js.map +1 -1
  177. package/dist/adapters/tools/mcp.js +1 -0
  178. package/dist/adapters/tools/mcp.js.map +1 -1
  179. package/dist/adapters/tools/sandbox-files.constants.d.ts +1 -0
  180. package/dist/adapters/tools/sandbox-files.constants.js +17 -0
  181. package/dist/adapters/tools/sandbox-files.constants.js.map +1 -0
  182. package/dist/adapters/tools/sandbox-files.d.ts +1 -0
  183. package/dist/adapters/tools/sandbox-files.js +14 -1
  184. package/dist/adapters/tools/sandbox-files.js.map +1 -1
  185. package/dist/adapters/tools/tools.constants.js +1 -0
  186. package/dist/adapters/tools/tools.constants.js.map +1 -1
  187. package/dist/adapters/triggers/github-webhook.js +14 -11
  188. package/dist/adapters/triggers/github-webhook.js.map +1 -1
  189. package/dist/adapters/triggers/gitlab-webhook.js +16 -13
  190. package/dist/adapters/triggers/gitlab-webhook.js.map +1 -1
  191. package/dist/adapters/triggers/slack-request.js +10 -7
  192. package/dist/adapters/triggers/slack-request.js.map +1 -1
  193. package/dist/adapters/triggers/standard-webhook.js +10 -7
  194. package/dist/adapters/triggers/standard-webhook.js.map +1 -1
  195. package/dist/application/agent-authentication.js +4 -1
  196. package/dist/application/agent-authentication.js.map +1 -1
  197. package/dist/application/agent-turn.js +20 -5
  198. package/dist/application/agent-turn.js.map +1 -1
  199. package/dist/application/cli-hooks.constants.d.ts +2 -0
  200. package/dist/application/cli-hooks.constants.js +69 -0
  201. package/dist/application/cli-hooks.constants.js.map +1 -0
  202. package/dist/application/cli-hooks.d.ts +3 -0
  203. package/dist/application/cli-hooks.js +168 -0
  204. package/dist/application/cli-hooks.js.map +1 -0
  205. package/dist/application/cli-steering.js +33 -2
  206. package/dist/application/cli-steering.js.map +1 -1
  207. package/dist/application/custom-turn.js +10 -1
  208. package/dist/application/custom-turn.js.map +1 -1
  209. package/dist/application/diagnostic-probe.d.ts +1 -1
  210. package/dist/application/diagnostic-probe.js +7 -3
  211. package/dist/application/diagnostic-probe.js.map +1 -1
  212. package/dist/application/dispatch-observation.js +4 -0
  213. package/dist/application/dispatch-observation.js.map +1 -1
  214. package/dist/application/doctor-agent.d.ts +1 -1
  215. package/dist/application/doctor-agent.js +2 -2
  216. package/dist/application/doctor-agent.js.map +1 -1
  217. package/dist/application/doctor-deadline.d.ts +1 -0
  218. package/dist/application/doctor-deadline.js +10 -0
  219. package/dist/application/doctor-deadline.js.map +1 -0
  220. package/dist/application/doctor-image.js +9 -7
  221. package/dist/application/doctor-image.js.map +1 -1
  222. package/dist/application/doctor-sandbox.js +4 -4
  223. package/dist/application/doctor-sandbox.js.map +1 -1
  224. package/dist/application/doctor.constants.d.ts +2 -0
  225. package/dist/application/doctor.constants.js +2 -0
  226. package/dist/application/doctor.constants.js.map +1 -1
  227. package/dist/application/doctor.js +12 -8
  228. package/dist/application/doctor.js.map +1 -1
  229. package/dist/application/doctor.types.d.ts +2 -0
  230. package/dist/application/doctor.types.js.map +1 -1
  231. package/dist/application/file-sandbox.js +49 -11
  232. package/dist/application/file-sandbox.js.map +1 -1
  233. package/dist/application/harness-context.js +4 -2
  234. package/dist/application/harness-context.js.map +1 -1
  235. package/dist/application/harness-hook-transforms.d.ts +8 -0
  236. package/dist/application/harness-hook-transforms.js +115 -0
  237. package/dist/application/harness-hook-transforms.js.map +1 -0
  238. package/dist/application/harness-hooks.d.ts +5 -3
  239. package/dist/application/harness-hooks.js +37 -50
  240. package/dist/application/harness-hooks.js.map +1 -1
  241. package/dist/application/harness-loop.d.ts +2 -1
  242. package/dist/application/harness-loop.js +95 -21
  243. package/dist/application/harness-loop.js.map +1 -1
  244. package/dist/application/harness-subagent.d.ts +1 -1
  245. package/dist/application/harness-subagent.js +63 -12
  246. package/dist/application/harness-subagent.js.map +1 -1
  247. package/dist/application/harness.types.d.ts +3 -0
  248. package/dist/application/harness.types.js.map +1 -1
  249. package/dist/application/hook-invocation.d.ts +4 -0
  250. package/dist/application/hook-invocation.js +59 -0
  251. package/dist/application/hook-invocation.js.map +1 -0
  252. package/dist/application/queue-worker.js +51 -9
  253. package/dist/application/queue-worker.js.map +1 -1
  254. package/dist/application/queue-worker.types.d.ts +1 -0
  255. package/dist/application/queue-worker.types.js.map +1 -1
  256. package/dist/application/recipes/native-schemas.constants.js +1439 -218
  257. package/dist/application/recipes/native-schemas.constants.js.map +1 -1
  258. package/dist/application/recovery-inspection.js +4 -1
  259. package/dist/application/recovery-inspection.js.map +1 -1
  260. package/dist/application/remote-download.js +15 -5
  261. package/dist/application/remote-download.js.map +1 -1
  262. package/dist/application/remote-paths.d.ts +1 -0
  263. package/dist/application/remote-paths.js +7 -0
  264. package/dist/application/remote-paths.js.map +1 -0
  265. package/dist/application/remote-validation.js +40 -9
  266. package/dist/application/remote-validation.js.map +1 -1
  267. package/dist/application/remote-workspace.js +17 -2
  268. package/dist/application/remote-workspace.js.map +1 -1
  269. package/dist/application/repetition-watchdog.js +3 -1
  270. package/dist/application/repetition-watchdog.js.map +1 -1
  271. package/dist/application/sandbox-attach.js +38 -9
  272. package/dist/application/sandbox-attach.js.map +1 -1
  273. package/dist/application/sandbox-dispatch.js +7 -1
  274. package/dist/application/sandbox-dispatch.js.map +1 -1
  275. package/dist/application/schedules.js +2 -0
  276. package/dist/application/schedules.js.map +1 -1
  277. package/dist/application/secrets.js +4 -0
  278. package/dist/application/secrets.js.map +1 -1
  279. package/dist/application/tool-execution.js +28 -8
  280. package/dist/application/tool-execution.js.map +1 -1
  281. package/dist/application/transport-retention.js +3 -3
  282. package/dist/application/transport-retention.js.map +1 -1
  283. package/dist/application/workspace-fingerprint.d.ts +1 -0
  284. package/dist/application/workspace-fingerprint.js +19 -4
  285. package/dist/application/workspace-fingerprint.js.map +1 -1
  286. package/dist/cli/doctor-command.js +12 -2
  287. package/dist/cli/doctor-command.js.map +1 -1
  288. package/dist/cli/image.js +2 -0
  289. package/dist/cli/image.js.map +1 -1
  290. package/dist/cli/main.constants.d.ts +14 -2
  291. package/dist/cli/main.constants.js +27 -1
  292. package/dist/cli/main.constants.js.map +1 -1
  293. package/dist/cli/project-settings.js +7 -1
  294. package/dist/cli/project-settings.js.map +1 -1
  295. package/dist/cli/recipe-yaml.js +8 -0
  296. package/dist/cli/recipe-yaml.js.map +1 -1
  297. package/dist/cli/recovery-command.js +3 -0
  298. package/dist/cli/recovery-command.js.map +1 -1
  299. package/dist/cli/recovery-unlock-command.d.ts +2 -0
  300. package/dist/cli/recovery-unlock-command.js +19 -0
  301. package/dist/cli/recovery-unlock-command.js.map +1 -0
  302. package/dist/cli/scaffold-files.js +4 -1
  303. package/dist/cli/scaffold-files.js.map +1 -1
  304. package/dist/cli/scaffold-validation.js +3 -0
  305. package/dist/cli/scaffold-validation.js.map +1 -1
  306. package/dist/cli/scaffold.js +2 -0
  307. package/dist/cli/scaffold.js.map +1 -1
  308. package/dist/domain/agent-hook.types.d.ts +28 -0
  309. package/dist/domain/agent-hook.types.js +2 -0
  310. package/dist/domain/agent-hook.types.js.map +1 -0
  311. package/dist/domain/agent-profile-hooks.d.ts +2 -0
  312. package/dist/domain/agent-profile-hooks.js +52 -0
  313. package/dist/domain/agent-profile-hooks.js.map +1 -0
  314. package/dist/domain/agent-profile-permissions.js +11 -1
  315. package/dist/domain/agent-profile-permissions.js.map +1 -1
  316. package/dist/domain/agent-profile.constants.d.ts +1 -0
  317. package/dist/domain/agent-profile.constants.js +9 -0
  318. package/dist/domain/agent-profile.constants.js.map +1 -1
  319. package/dist/domain/agent-profile.js +6 -1
  320. package/dist/domain/agent-profile.js.map +1 -1
  321. package/dist/domain/agent-profile.types.d.ts +11 -0
  322. package/dist/domain/agent-profile.types.js.map +1 -1
  323. package/dist/domain/agent.types.d.ts +2 -0
  324. package/dist/domain/agent.types.js.map +1 -1
  325. package/dist/domain/container-image.d.ts +1 -0
  326. package/dist/domain/container-image.js +8 -0
  327. package/dist/domain/container-image.js.map +1 -0
  328. package/dist/domain/context.constants.d.ts +1 -0
  329. package/dist/domain/context.constants.js +1 -0
  330. package/dist/domain/context.constants.js.map +1 -1
  331. package/dist/domain/context.js +6 -1
  332. package/dist/domain/context.js.map +1 -1
  333. package/dist/domain/egress.js +6 -1
  334. package/dist/domain/egress.js.map +1 -1
  335. package/dist/domain/glob.js +1 -1
  336. package/dist/domain/glob.js.map +1 -1
  337. package/dist/domain/harness.js +4 -1
  338. package/dist/domain/harness.js.map +1 -1
  339. package/dist/domain/hook-command.d.ts +2 -0
  340. package/dist/domain/hook-command.js +26 -0
  341. package/dist/domain/hook-command.js.map +1 -0
  342. package/dist/domain/hook-command.types.d.ts +7 -0
  343. package/dist/domain/hook-command.types.js +2 -0
  344. package/dist/domain/hook-command.types.js.map +1 -0
  345. package/dist/domain/hook-decision.d.ts +2 -0
  346. package/dist/domain/hook-decision.js +38 -0
  347. package/dist/domain/hook-decision.js.map +1 -0
  348. package/dist/domain/hook.constants.d.ts +3 -0
  349. package/dist/domain/hook.constants.js +31 -1
  350. package/dist/domain/hook.constants.js.map +1 -1
  351. package/dist/domain/hook.js +49 -5
  352. package/dist/domain/hook.js.map +1 -1
  353. package/dist/domain/hook.types.d.ts +82 -5
  354. package/dist/domain/hook.types.js.map +1 -1
  355. package/dist/domain/mcp-server.constants.d.ts +6 -0
  356. package/dist/domain/mcp-server.constants.js +6 -0
  357. package/dist/domain/mcp-server.constants.js.map +1 -1
  358. package/dist/domain/mcp-server.js +1 -0
  359. package/dist/domain/mcp-server.js.map +1 -1
  360. package/dist/domain/permissions.types.d.ts +1 -0
  361. package/dist/domain/permissions.types.js.map +1 -1
  362. package/dist/domain/pricing.js +4 -2
  363. package/dist/domain/pricing.js.map +1 -1
  364. package/dist/domain/redaction.js +6 -3
  365. package/dist/domain/redaction.js.map +1 -1
  366. package/dist/domain/secret-fault.d.ts +4 -0
  367. package/dist/domain/secret-fault.js +11 -0
  368. package/dist/domain/secret-fault.js.map +1 -0
  369. package/dist/domain/secrets.js +3 -2
  370. package/dist/domain/secrets.js.map +1 -1
  371. package/dist/domain/steering.js +2 -0
  372. package/dist/domain/steering.js.map +1 -1
  373. package/dist/domain/steering.types.d.ts +1 -1
  374. package/dist/domain/steering.types.js.map +1 -1
  375. package/dist/domain/transport.js +5 -1
  376. package/dist/domain/transport.js.map +1 -1
  377. package/dist/domain/trigger-payload.d.ts +4 -0
  378. package/dist/domain/trigger-payload.js +15 -0
  379. package/dist/domain/trigger-payload.js.map +1 -0
  380. package/dist/domain/workflow/checkpoint.js +19 -2
  381. package/dist/domain/workflow/checkpoint.js.map +1 -1
  382. package/dist/domain/workflow/retry.constants.d.ts +1 -0
  383. package/dist/domain/workflow/retry.constants.js +1 -0
  384. package/dist/domain/workflow/retry.constants.js.map +1 -1
  385. package/dist/domain/workflow/retry.js +6 -2
  386. package/dist/domain/workflow/retry.js.map +1 -1
  387. package/dist/domain/workflow/task-runner.js +5 -3
  388. package/dist/domain/workflow/task-runner.js.map +1 -1
  389. package/dist/domain/workflow/workflow-state.js +2 -1
  390. package/dist/domain/workflow/workflow-state.js.map +1 -1
  391. package/dist/domain/workflow.types.d.ts +1 -0
  392. package/dist/domain/workflow.types.js.map +1 -1
  393. package/dist/index.d.ts +15 -1
  394. package/dist/index.js +6 -0
  395. package/dist/index.js.map +1 -1
  396. package/dist/infrastructure/conversations/transcript-store.js +32 -5
  397. package/dist/infrastructure/conversations/transcript-store.js.map +1 -1
  398. package/dist/infrastructure/files.d.ts +1 -0
  399. package/dist/infrastructure/files.js +8 -4
  400. package/dist/infrastructure/files.js.map +1 -1
  401. package/dist/infrastructure/git/integration-candidate.js +3 -2
  402. package/dist/infrastructure/git/integration-candidate.js.map +1 -1
  403. package/dist/infrastructure/git/lock-recovery.d.ts +3 -0
  404. package/dist/infrastructure/git/lock-recovery.js +58 -0
  405. package/dist/infrastructure/git/lock-recovery.js.map +1 -0
  406. package/dist/infrastructure/git/lock-recovery.types.d.ts +11 -0
  407. package/dist/infrastructure/git/lock-recovery.types.js +2 -0
  408. package/dist/infrastructure/git/lock-recovery.types.js.map +1 -0
  409. package/dist/infrastructure/git/managed-worktree.js +5 -8
  410. package/dist/infrastructure/git/managed-worktree.js.map +1 -1
  411. package/dist/infrastructure/git/verification-command.js +35 -30
  412. package/dist/infrastructure/git/verification-command.js.map +1 -1
  413. package/dist/infrastructure/git/workspace-lease.js +12 -5
  414. package/dist/infrastructure/git/workspace-lease.js.map +1 -1
  415. package/dist/infrastructure/hook-configuration.constants.d.ts +1 -0
  416. package/dist/infrastructure/hook-configuration.constants.js +59 -0
  417. package/dist/infrastructure/hook-configuration.constants.js.map +1 -0
  418. package/dist/infrastructure/hook-configuration.d.ts +3 -0
  419. package/dist/infrastructure/hook-configuration.js +16 -0
  420. package/dist/infrastructure/hook-configuration.js.map +1 -0
  421. package/dist/infrastructure/hook-configuration.types.d.ts +14 -0
  422. package/dist/infrastructure/hook-configuration.types.js +2 -0
  423. package/dist/infrastructure/hook-configuration.types.js.map +1 -0
  424. package/dist/infrastructure/http-transport.constants.d.ts +1 -0
  425. package/dist/infrastructure/http-transport.constants.js +14 -0
  426. package/dist/infrastructure/http-transport.constants.js.map +1 -0
  427. package/dist/infrastructure/http-transport.d.ts +7 -0
  428. package/dist/infrastructure/http-transport.js +19 -0
  429. package/dist/infrastructure/http-transport.js.map +1 -0
  430. package/dist/infrastructure/input-failure.d.ts +4 -0
  431. package/dist/infrastructure/input-failure.js +14 -0
  432. package/dist/infrastructure/input-failure.js.map +1 -0
  433. package/dist/infrastructure/inspection-file.d.ts +1 -0
  434. package/dist/infrastructure/inspection-file.js +8 -2
  435. package/dist/infrastructure/inspection-file.js.map +1 -1
  436. package/dist/infrastructure/local-transport.js +16 -11
  437. package/dist/infrastructure/local-transport.js.map +1 -1
  438. package/dist/infrastructure/process.constants.d.ts +1 -0
  439. package/dist/infrastructure/process.constants.js +1 -0
  440. package/dist/infrastructure/process.constants.js.map +1 -1
  441. package/dist/infrastructure/process.d.ts +1 -0
  442. package/dist/infrastructure/process.js +48 -8
  443. package/dist/infrastructure/process.js.map +1 -1
  444. package/dist/infrastructure/reservation-ledger.d.ts +2 -0
  445. package/dist/infrastructure/reservation-ledger.js +84 -0
  446. package/dist/infrastructure/reservation-ledger.js.map +1 -0
  447. package/dist/infrastructure/reservation-recovery.d.ts +4 -0
  448. package/dist/infrastructure/reservation-recovery.js +28 -0
  449. package/dist/infrastructure/reservation-recovery.js.map +1 -0
  450. package/dist/infrastructure/s3-tombstones.d.ts +3 -0
  451. package/dist/infrastructure/s3-tombstones.js +46 -0
  452. package/dist/infrastructure/s3-tombstones.js.map +1 -0
  453. package/dist/infrastructure/s3-tombstones.types.d.ts +6 -0
  454. package/dist/infrastructure/s3-tombstones.types.js +2 -0
  455. package/dist/infrastructure/s3-tombstones.types.js.map +1 -0
  456. package/dist/infrastructure/s3-transport.d.ts +2 -0
  457. package/dist/infrastructure/s3-transport.js +4 -2
  458. package/dist/infrastructure/s3-transport.js.map +1 -1
  459. package/dist/infrastructure/sse.js +6 -3
  460. package/dist/infrastructure/sse.js.map +1 -1
  461. package/dist/infrastructure/task-queue-bullmq-connection.d.ts +3 -0
  462. package/dist/infrastructure/task-queue-bullmq-connection.js +32 -0
  463. package/dist/infrastructure/task-queue-bullmq-connection.js.map +1 -0
  464. package/dist/infrastructure/task-queue-bullmq-connection.types.d.ts +8 -0
  465. package/dist/infrastructure/task-queue-bullmq-connection.types.js +2 -0
  466. package/dist/infrastructure/task-queue-bullmq-connection.types.js.map +1 -0
  467. package/dist/infrastructure/task-queue-bullmq-resources.js +21 -15
  468. package/dist/infrastructure/task-queue-bullmq-resources.js.map +1 -1
  469. package/dist/infrastructure/task-queue-bullmq-state.d.ts +1 -0
  470. package/dist/infrastructure/task-queue-bullmq-state.js +1 -0
  471. package/dist/infrastructure/task-queue-bullmq-state.js.map +1 -1
  472. package/dist/infrastructure/task-queue-bullmq.constants.d.ts +2 -1
  473. package/dist/infrastructure/task-queue-bullmq.constants.js +2 -1
  474. package/dist/infrastructure/task-queue-bullmq.constants.js.map +1 -1
  475. package/dist/infrastructure/task-queue-bullmq.js +10 -1
  476. package/dist/infrastructure/task-queue-bullmq.js.map +1 -1
  477. package/dist/infrastructure/task-queue.js +13 -4
  478. package/dist/infrastructure/task-queue.js.map +1 -1
  479. package/dist/infrastructure/transfer-copy.d.ts +1 -0
  480. package/dist/infrastructure/transfer-copy.js +16 -1
  481. package/dist/infrastructure/transfer-copy.js.map +1 -1
  482. package/dist/infrastructure/transport-archive.d.ts +3 -3
  483. package/dist/infrastructure/transport-archive.js +71 -48
  484. package/dist/infrastructure/transport-archive.js.map +1 -1
  485. package/dist/infrastructure/transport-archive.types.d.ts +3 -0
  486. package/dist/infrastructure/transport-archive.types.js.map +1 -1
  487. package/dist/infrastructure/transport-checkpoint.js +14 -4
  488. package/dist/infrastructure/transport-checkpoint.js.map +1 -1
  489. package/dist/infrastructure/transport-envelope.d.ts +1 -0
  490. package/dist/infrastructure/transport-envelope.js +22 -5
  491. package/dist/infrastructure/transport-envelope.js.map +1 -1
  492. package/dist/infrastructure/transport-reservations.constants.d.ts +2 -0
  493. package/dist/infrastructure/transport-reservations.constants.js +3 -0
  494. package/dist/infrastructure/transport-reservations.constants.js.map +1 -0
  495. package/dist/infrastructure/transport-reservations.d.ts +1 -2
  496. package/dist/infrastructure/transport-reservations.js +18 -22
  497. package/dist/infrastructure/transport-reservations.js.map +1 -1
  498. package/dist/infrastructure/transport-reservations.types.d.ts +23 -2
  499. package/dist/infrastructure/transport-reservations.types.js.map +1 -1
  500. package/dist/infrastructure/trigger-server.js +12 -9
  501. package/dist/infrastructure/trigger-server.js.map +1 -1
  502. package/dist/infrastructure/trigger-server.types.d.ts +1 -1
  503. package/dist/infrastructure/trigger-server.types.js.map +1 -1
  504. package/dist/infrastructure/workflow-checkpoint.constants.d.ts +1 -0
  505. package/dist/infrastructure/workflow-checkpoint.constants.js +1 -0
  506. package/dist/infrastructure/workflow-checkpoint.constants.js.map +1 -1
  507. package/dist/infrastructure/workspace-lock.constants.d.ts +2 -1
  508. package/dist/infrastructure/workspace-lock.constants.js +2 -1
  509. package/dist/infrastructure/workspace-lock.constants.js.map +1 -1
  510. package/dist/infrastructure/workspace-lock.js +48 -10
  511. package/dist/infrastructure/workspace-lock.js.map +1 -1
  512. package/dist/providers/cloud-cache.js +14 -9
  513. package/dist/providers/cloud-cache.js.map +1 -1
  514. package/dist/providers/cloud-cache.types.d.ts +1 -0
  515. package/dist/providers/cloud-cache.types.js.map +1 -1
  516. package/dist/providers/cloud-files.js +3 -4
  517. package/dist/providers/cloud-files.js.map +1 -1
  518. package/dist/providers/cloud-input.constants.d.ts +2 -2
  519. package/dist/providers/cloud-input.constants.js +2 -1
  520. package/dist/providers/cloud-input.constants.js.map +1 -1
  521. package/dist/providers/cloud-input.d.ts +2 -2
  522. package/dist/providers/cloud-input.js +14 -3
  523. package/dist/providers/cloud-input.js.map +1 -1
  524. package/dist/providers/container-command.js +30 -5
  525. package/dist/providers/container-command.js.map +1 -1
  526. package/dist/providers/container-egress.constants.d.ts +7 -0
  527. package/dist/providers/container-egress.constants.js +8 -0
  528. package/dist/providers/container-egress.constants.js.map +1 -0
  529. package/dist/providers/container-egress.d.ts +7 -0
  530. package/dist/providers/container-egress.js +101 -0
  531. package/dist/providers/container-egress.js.map +1 -0
  532. package/dist/providers/container-files.js +10 -11
  533. package/dist/providers/container-files.js.map +1 -1
  534. package/dist/providers/container-mounts.js +3 -0
  535. package/dist/providers/container-mounts.js.map +1 -1
  536. package/dist/providers/container-network.js +16 -1
  537. package/dist/providers/container-network.js.map +1 -1
  538. package/dist/providers/container-plan.js +7 -10
  539. package/dist/providers/container-plan.js.map +1 -1
  540. package/dist/providers/container-recovery.js +8 -3
  541. package/dist/providers/container-recovery.js.map +1 -1
  542. package/dist/providers/container.js +36 -5
  543. package/dist/providers/container.js.map +1 -1
  544. package/dist/providers/container.types.d.ts +1 -0
  545. package/dist/providers/container.types.js.map +1 -1
  546. package/dist/providers/daytona-command.constants.js +4 -1
  547. package/dist/providers/daytona-command.constants.js.map +1 -1
  548. package/dist/providers/daytona-command.js +39 -16
  549. package/dist/providers/daytona-command.js.map +1 -1
  550. package/dist/providers/daytona-files.js +5 -5
  551. package/dist/providers/daytona-files.js.map +1 -1
  552. package/dist/providers/daytona-output.js +11 -3
  553. package/dist/providers/daytona-output.js.map +1 -1
  554. package/dist/providers/daytona.js +11 -9
  555. package/dist/providers/daytona.js.map +1 -1
  556. package/dist/providers/egress/address.d.ts +3 -0
  557. package/dist/providers/egress/address.js +26 -0
  558. package/dist/providers/egress/address.js.map +1 -0
  559. package/dist/providers/egress/egress.constants.d.ts +22 -0
  560. package/dist/providers/egress/egress.constants.js +23 -0
  561. package/dist/providers/egress/egress.constants.js.map +1 -0
  562. package/dist/providers/egress/egress.types.d.ts +11 -0
  563. package/dist/providers/egress/egress.types.js +2 -0
  564. package/dist/providers/egress/egress.types.js.map +1 -0
  565. package/dist/providers/egress/firewall.d.ts +3 -0
  566. package/dist/providers/egress/firewall.js +29 -0
  567. package/dist/providers/egress/firewall.js.map +1 -0
  568. package/dist/providers/egress/main.d.ts +1 -0
  569. package/dist/providers/egress/main.js +90 -0
  570. package/dist/providers/egress/main.js.map +1 -0
  571. package/dist/providers/egress/policy.d.ts +5 -0
  572. package/dist/providers/egress/policy.js +54 -0
  573. package/dist/providers/egress/policy.js.map +1 -0
  574. package/dist/providers/egress/proxy.d.ts +2 -0
  575. package/dist/providers/egress/proxy.js +129 -0
  576. package/dist/providers/egress/proxy.js.map +1 -0
  577. package/dist/providers/egress/tls-hello.d.ts +1 -0
  578. package/dist/providers/egress/tls-hello.js +75 -0
  579. package/dist/providers/egress/tls-hello.js.map +1 -0
  580. package/dist/providers/firecracker-command.js +12 -6
  581. package/dist/providers/firecracker-command.js.map +1 -1
  582. package/dist/providers/local-files.d.ts +2 -0
  583. package/dist/providers/local-files.js +24 -0
  584. package/dist/providers/local-files.js.map +1 -0
  585. package/dist/providers/local.js +2 -20
  586. package/dist/providers/local.js.map +1 -1
  587. package/dist/providers/vercel-command.js +33 -9
  588. package/dist/providers/vercel-command.js.map +1 -1
  589. package/dist/providers/vercel.js +11 -9
  590. package/dist/providers/vercel.js.map +1 -1
  591. package/dist/testing.d.ts +1 -1
  592. package/dist/testing.js +1 -1
  593. package/dist/testing.js.map +1 -1
  594. package/package.json +2 -2
  595. package/recipe-configuration.schema.json +2164 -35
  596. package/recipe.schema.json +2512 -404
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=claude-hooks.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-hooks.types.js","sourceRoot":"","sources":["../../../../src/adapters/agents/claude/claude-hooks.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { NativeHook, NativeHookOptions } from \"../native-hooks.types.ts\";\n\nexport interface ClaudeHookEvents {\n readonly SessionStart: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"SessionStart\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly source?: string;\n readonly model?: string;\n readonly session_title?: string;\n };\n readonly Setup: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"Setup\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly trigger?: string;\n };\n readonly UserPromptSubmit: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"UserPromptSubmit\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly prompt: string;\n readonly session_title?: string;\n };\n readonly UserPromptExpansion: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"UserPromptExpansion\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly prompt: string;\n readonly expansion_type?: string;\n readonly command_name?: string;\n readonly command_args?: string;\n readonly command_source?: string;\n };\n readonly PreToolUse: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PreToolUse\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_name: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly mcp_server?: Readonly<Record<string, unknown>>;\n };\n readonly PermissionRequest: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PermissionRequest\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_name: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly permission_suggestions?: readonly unknown[];\n readonly mcp_server?: Readonly<Record<string, unknown>>;\n };\n readonly PermissionDenied: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PermissionDenied\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_name: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly reason?: string;\n readonly mcp_server?: Readonly<Record<string, unknown>>;\n };\n readonly PostToolUse: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PostToolUse\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_name: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly tool_response?: unknown;\n readonly mcp_server?: Readonly<Record<string, unknown>>;\n };\n readonly PostToolUseFailure: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PostToolUseFailure\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_name: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly error?: string;\n readonly is_interrupt?: boolean;\n readonly mcp_server?: Readonly<Record<string, unknown>>;\n };\n readonly PostToolBatch: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PostToolBatch\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly tool_calls?: readonly {\n readonly tool_name?: string;\n readonly tool_input?: Readonly<Record<string, unknown>>;\n readonly tool_use_id?: string;\n readonly tool_response?: unknown;\n }[];\n };\n readonly Notification: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"Notification\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly message?: string;\n readonly title?: string;\n readonly notification_type?: string;\n };\n readonly MessageDisplay: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"MessageDisplay\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly delta: string;\n readonly turn_id?: string;\n readonly message_id?: string;\n readonly index?: number;\n readonly final?: boolean;\n };\n readonly SubagentStart: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"SubagentStart\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n };\n readonly SubagentStop: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"SubagentStop\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly agent_transcript_path?: string;\n readonly last_assistant_message?: string;\n readonly stop_hook_active?: boolean;\n };\n readonly TaskCreated: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"TaskCreated\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly task_id?: string;\n readonly task_subject?: string;\n readonly task_description?: string;\n };\n readonly TaskCompleted: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"TaskCompleted\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly task_id?: string;\n readonly task_subject?: string;\n readonly task_description?: string;\n readonly teammate_name?: string;\n readonly team_name?: string;\n };\n readonly Stop: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"Stop\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly stop_hook_active?: boolean;\n readonly last_assistant_message?: string;\n };\n readonly StopFailure: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"StopFailure\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly error?: string;\n readonly error_details?: string;\n readonly last_assistant_message?: string;\n };\n readonly TeammateIdle: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"TeammateIdle\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly teammate_name?: string;\n readonly team_name?: string;\n };\n readonly InstructionsLoaded: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"InstructionsLoaded\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly file_path?: string;\n readonly memory_type?: string;\n readonly load_reason?: string;\n readonly globs?: readonly string[];\n readonly trigger_file_path?: string;\n readonly parent_file_path?: string;\n };\n readonly ConfigChange: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"ConfigChange\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly source?: string;\n readonly file_path?: string;\n };\n readonly CwdChanged: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"CwdChanged\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly old_cwd?: string;\n readonly new_cwd?: string;\n };\n readonly DirectoryAdded: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"DirectoryAdded\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly directory?: string;\n readonly source?: \"slash_command\" | \"register_repo_root\";\n };\n readonly FileChanged: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"FileChanged\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly file_path?: string;\n readonly event?: string;\n };\n readonly WorktreeCreate: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"WorktreeCreate\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly name?: string;\n };\n readonly WorktreeRemove: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"WorktreeRemove\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly worktree_path?: string;\n };\n readonly PreCompact: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PreCompact\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly trigger?: string;\n readonly custom_instructions?: string | null;\n };\n readonly PostCompact: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PostCompact\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly trigger?: string;\n readonly compact_summary?: string;\n };\n readonly PreModelSwitch: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PreModelSwitch\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly from_model?: string;\n readonly to_model?: string;\n readonly requested_model?: string | null;\n readonly source?: string;\n readonly context_tokens?: number;\n readonly prompt_cache_warm?: boolean;\n readonly cache_ttl?: string;\n readonly estimated_cache_write_usd?: number;\n readonly pricing?: string;\n };\n readonly PostModelSwitch: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"PostModelSwitch\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly from_model?: string;\n readonly to_model?: string;\n readonly requested_model?: string | null;\n readonly source?: string;\n readonly context_tokens?: number;\n readonly prompt_cache_warm?: boolean;\n readonly cache_ttl?: string;\n readonly estimated_cache_write_usd?: number;\n readonly pricing?: string;\n };\n readonly Elicitation: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"Elicitation\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly mcp_server_name?: string;\n readonly message?: string;\n readonly mode?: string;\n readonly requested_schema?: Readonly<Record<string, unknown>>;\n readonly elicitation_id?: string;\n readonly url?: string;\n };\n readonly ElicitationResult: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"ElicitationResult\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly mcp_server_name?: string;\n readonly action?: string;\n readonly content?: Readonly<Record<string, unknown>>;\n };\n readonly SessionEnd: {\n readonly session_id: string;\n readonly transcript_path?: string;\n readonly cwd: string;\n readonly hook_event_name: \"SessionEnd\";\n readonly permission_mode?: string;\n readonly prompt_id?: string;\n readonly scratchpad_dir?: string;\n readonly agent_id?: string;\n readonly agent_type?: string;\n readonly effort?: { readonly level: string };\n readonly reason?: string;\n };\n}\n\nexport interface ClaudeHookDecisions {\n readonly SessionStart:\n | string\n | {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"SessionStart\";\n readonly additionalContext?: string;\n readonly initialUserMessage?: string;\n readonly sessionTitle?: string;\n readonly watchPaths?: readonly string[];\n readonly reloadSkills?: boolean;\n };\n readonly terminalSequence?: string;\n };\n readonly Setup: { readonly terminalSequence?: string };\n readonly UserPromptSubmit:\n | string\n | {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"UserPromptSubmit\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly UserPromptExpansion: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"UserPromptExpansion\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly PreToolUse: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PreToolUse\";\n readonly permissionDecision?: \"allow\" | \"deny\" | \"ask\" | \"defer\";\n readonly permissionDecisionReason?: string;\n readonly updatedInput?: Readonly<Record<string, unknown>>;\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly PermissionRequest: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PermissionRequest\";\n readonly decision?: {\n readonly behavior: \"allow\" | \"deny\";\n readonly updatedInput?: Readonly<Record<string, unknown>>;\n readonly updatedPermissions?: readonly unknown[];\n readonly message?: string;\n readonly interrupt?: boolean;\n };\n };\n readonly terminalSequence?: string;\n };\n readonly PermissionDenied: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PermissionDenied\";\n readonly retry?: boolean;\n };\n readonly terminalSequence?: string;\n };\n readonly PostToolUse: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PostToolUse\";\n readonly additionalContext?: string;\n readonly classifierContext?: string;\n readonly updatedToolOutput?: unknown;\n readonly updatedMCPToolOutput?: unknown;\n };\n readonly terminalSequence?: string;\n };\n readonly PostToolUseFailure: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PostToolUseFailure\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly PostToolBatch: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PostToolBatch\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly Notification: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"Notification\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly MessageDisplay: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"MessageDisplay\";\n readonly displayContent?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly SubagentStart: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"SubagentStart\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly SubagentStop: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"SubagentStop\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly TaskCreated: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly terminalSequence?: string;\n };\n readonly TaskCompleted: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly terminalSequence?: string;\n };\n readonly Stop: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"Stop\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly StopFailure: { readonly terminalSequence?: string };\n readonly TeammateIdle: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly terminalSequence?: string;\n };\n readonly InstructionsLoaded: { readonly terminalSequence?: string };\n readonly ConfigChange: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly terminalSequence?: string;\n };\n readonly CwdChanged: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"CwdChanged\";\n readonly watchPaths?: readonly string[];\n };\n readonly terminalSequence?: string;\n };\n readonly DirectoryAdded: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly terminalSequence?: string;\n };\n readonly FileChanged: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"FileChanged\";\n readonly watchPaths?: readonly string[];\n };\n readonly terminalSequence?: string;\n };\n readonly WorktreeCreate: string;\n readonly WorktreeRemove: { readonly terminalSequence?: string };\n readonly PreCompact: {\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly terminalSequence?: string;\n };\n readonly PostCompact: { readonly terminalSequence?: string };\n readonly PreModelSwitch: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly decision?: \"block\";\n readonly reason?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PreModelSwitch\";\n readonly permissionDecision?: \"allow\" | \"deny\" | \"ask\";\n readonly permissionDecisionReason?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly PostModelSwitch:\n | string\n | {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"PostModelSwitch\";\n readonly additionalContext?: string;\n };\n readonly terminalSequence?: string;\n };\n readonly Elicitation: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"Elicitation\";\n readonly action?: \"accept\" | \"decline\" | \"cancel\";\n readonly content?: Readonly<Record<string, unknown>>;\n };\n readonly decision?: \"block\";\n readonly terminalSequence?: string;\n };\n readonly ElicitationResult: {\n readonly continue?: boolean;\n readonly stopReason?: string;\n readonly suppressOutput?: boolean;\n readonly systemMessage?: string;\n readonly hookSpecificOutput?: {\n readonly hookEventName: \"ElicitationResult\";\n readonly action?: \"accept\" | \"decline\" | \"cancel\";\n readonly content?: Readonly<Record<string, unknown>>;\n };\n readonly decision?: \"block\";\n readonly terminalSequence?: string;\n };\n readonly SessionEnd: { readonly terminalSequence?: string };\n}\n\nexport type ClaudeHookPhase = keyof ClaudeHookEvents;\nexport type ClaudeHook<Phase extends ClaudeHookPhase = ClaudeHookPhase> =\n NativeHook<\"claude\", Phase>;\nexport type ClaudeHookOptions<Phase extends ClaudeHookPhase> =\n NativeHookOptions<Phase, ClaudeHookEvents[Phase], ClaudeHookDecisions[Phase]>;\n"]}
@@ -1,3 +1,4 @@
1
1
  import type { ClaudeSettings } from "../settings.types.ts";
2
2
  export declare function supportClaudeProfile(settings: ClaudeSettings): void;
3
3
  export declare function claudeProfileArguments(settings: ClaudeSettings): readonly string[];
4
+ export declare function claudeProfileScript(settings: ClaudeSettings): string;
@@ -29,17 +29,7 @@ export function claudeProfileArguments(settings) {
29
29
  return [];
30
30
  })),
31
31
  ];
32
- const commands = profile.allowedTools
33
- .filter((tool) => tool.startsWith("shell:"))
34
- .map((tool) => tool.slice(6));
35
- const script = [
36
- `const tools = ${JSON.stringify(tools)};`,
37
- `const commands = ${JSON.stringify(commands)};`,
38
- `const shell = ${profile.allowedTools.includes("shell")};`,
39
- `const servers = ${JSON.stringify(Object.keys(settings.mcpServers ?? {}))};`,
40
- `const excluded = ${JSON.stringify(Object.entries(settings.mcpServers ?? {}).flatMap(([server, entry]) => (entry.tools?.exclude ?? []).map((tool) => `mcp__${server}__${tool}`)))};`,
41
- CLAUDE_PROFILE_HOOK,
42
- ].join("\n");
32
+ const script = claudeProfileScript(settings);
43
33
  return [
44
34
  ...instructions,
45
35
  `--tools=${tools.join(",")}`,
@@ -66,4 +56,26 @@ export function claudeProfileArguments(settings) {
66
56
  }),
67
57
  ];
68
58
  }
59
+ export function claudeProfileScript(settings) {
60
+ const tools = [
61
+ ...new Set(settings.profile.allowedTools.flatMap((tool) => {
62
+ if (tool.startsWith("shell:"))
63
+ return ["Bash"];
64
+ if (tool === "read" || tool === "edit" || tool === "shell")
65
+ return CLAUDE_PROFILE_TOOLS[tool];
66
+ return [];
67
+ })),
68
+ ];
69
+ const commands = settings
70
+ .profile.allowedTools.filter((tool) => tool.startsWith("shell:"))
71
+ .map((tool) => tool.slice(6));
72
+ return [
73
+ `const tools = ${JSON.stringify(tools)};`,
74
+ `const commands = ${JSON.stringify(commands)};`,
75
+ `const shell = ${settings.profile.allowedTools.includes("shell")};`,
76
+ `const servers = ${JSON.stringify(Object.keys(settings.mcpServers ?? {}))};`,
77
+ `const excluded = ${JSON.stringify(Object.entries(settings.mcpServers ?? {}).flatMap(([server, entry]) => (entry.tools?.exclude ?? []).map((tool) => `mcp__${server}__${tool}`)))};`,
78
+ CLAUDE_PROFILE_HOOK,
79
+ ].join("\n");
80
+ }
69
81
  //# sourceMappingURL=claude-profile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-profile.js","sourceRoot":"","sources":["../../../../src/adapters/agents/claude/claude-profile.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../../../domain/errors.ts\";\nimport { quote } from \"../../../infrastructure/process.ts\";\nimport {\n CLAUDE_PROFILE_HOOK,\n CLAUDE_PROFILE_TOOLS,\n} from \"./claude-profile.constants.ts\";\nimport type { ClaudeSettings } from \"../settings.types.ts\";\n\nexport function supportClaudeProfile(settings: ClaudeSettings): void {\n invariant(\n settings.profile?.allowedTools === undefined ||\n settings.permissions === undefined ||\n settings.permissions === \"dontAsk\",\n \"Claude Code agent profile allowedTools requires permission mode dontAsk; remove conflicting permissions\",\n );\n}\n\nexport function claudeProfileArguments(\n settings: ClaudeSettings,\n): readonly string[] {\n const profile = settings.profile;\n if (!profile) return [];\n const instructions =\n profile.instructions === undefined\n ? []\n : [\n \"--append-system-prompt\",\n profile.instructions,\n \"--system-prompt-snapshot\",\n \"off\",\n ];\n if (profile.allowedTools === undefined) return instructions;\n const tools = [\n ...new Set(\n profile.allowedTools.flatMap((tool) => {\n if (tool.startsWith(\"shell:\")) return [\"Bash\"];\n if (tool === \"read\" || tool === \"edit\" || tool === \"shell\")\n return CLAUDE_PROFILE_TOOLS[tool];\n return [];\n }),\n ),\n ];\n const commands = profile.allowedTools\n .filter((tool) => tool.startsWith(\"shell:\"))\n .map((tool) => tool.slice(6));\n const script = [\n `const tools = ${JSON.stringify(tools)};`,\n `const commands = ${JSON.stringify(commands)};`,\n `const shell = ${profile.allowedTools.includes(\"shell\")};`,\n `const servers = ${JSON.stringify(Object.keys(settings.mcpServers ?? {}))};`,\n `const excluded = ${JSON.stringify(Object.entries(settings.mcpServers ?? {}).flatMap(([server, entry]) => (entry.tools?.exclude ?? []).map((tool) => `mcp__${server}__${tool}`)))};`,\n CLAUDE_PROFILE_HOOK,\n ].join(\"\\n\");\n return [\n ...instructions,\n `--tools=${tools.join(\",\")}`,\n \"--permission-mode\",\n \"dontAsk\",\n \"--setting-sources\",\n \"\",\n \"--strict-mcp-config\",\n \"--settings\",\n JSON.stringify({\n hooks: {\n PreToolUse: [\n {\n matcher: \"*\",\n hooks: [\n {\n type: \"command\",\n command: `node -e ${quote(script)} || exit 2`,\n },\n ],\n },\n ],\n },\n }),\n ];\n}\n"]}
1
+ {"version":3,"file":"claude-profile.js","sourceRoot":"","sources":["../../../../src/adapters/agents/claude/claude-profile.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../../../domain/errors.ts\";\nimport { quote } from \"../../../infrastructure/process.ts\";\nimport {\n CLAUDE_PROFILE_HOOK,\n CLAUDE_PROFILE_TOOLS,\n} from \"./claude-profile.constants.ts\";\nimport type { ClaudeSettings } from \"../settings.types.ts\";\n\nexport function supportClaudeProfile(settings: ClaudeSettings): void {\n invariant(\n settings.profile?.allowedTools === undefined ||\n settings.permissions === undefined ||\n settings.permissions === \"dontAsk\",\n \"Claude Code agent profile allowedTools requires permission mode dontAsk; remove conflicting permissions\",\n );\n}\n\nexport function claudeProfileArguments(\n settings: ClaudeSettings,\n): readonly string[] {\n const profile = settings.profile;\n if (!profile) return [];\n const instructions =\n profile.instructions === undefined\n ? []\n : [\n \"--append-system-prompt\",\n profile.instructions,\n \"--system-prompt-snapshot\",\n \"off\",\n ];\n if (profile.allowedTools === undefined) return instructions;\n const tools = [\n ...new Set(\n profile.allowedTools.flatMap((tool) => {\n if (tool.startsWith(\"shell:\")) return [\"Bash\"];\n if (tool === \"read\" || tool === \"edit\" || tool === \"shell\")\n return CLAUDE_PROFILE_TOOLS[tool];\n return [];\n }),\n ),\n ];\n const script = claudeProfileScript(settings);\n return [\n ...instructions,\n `--tools=${tools.join(\",\")}`,\n \"--permission-mode\",\n \"dontAsk\",\n \"--setting-sources\",\n \"\",\n \"--strict-mcp-config\",\n \"--settings\",\n JSON.stringify({\n hooks: {\n PreToolUse: [\n {\n matcher: \"*\",\n hooks: [\n {\n type: \"command\",\n command: `node -e ${quote(script)} || exit 2`,\n },\n ],\n },\n ],\n },\n }),\n ];\n}\n\nexport function claudeProfileScript(settings: ClaudeSettings): string {\n const tools = [\n ...new Set(\n settings.profile!.allowedTools!.flatMap((tool) => {\n if (tool.startsWith(\"shell:\")) return [\"Bash\"];\n if (tool === \"read\" || tool === \"edit\" || tool === \"shell\")\n return CLAUDE_PROFILE_TOOLS[tool];\n return [];\n }),\n ),\n ];\n const commands = settings\n .profile!.allowedTools!.filter((tool) => tool.startsWith(\"shell:\"))\n .map((tool) => tool.slice(6));\n return [\n `const tools = ${JSON.stringify(tools)};`,\n `const commands = ${JSON.stringify(commands)};`,\n `const shell = ${settings.profile!.allowedTools!.includes(\"shell\")};`,\n `const servers = ${JSON.stringify(Object.keys(settings.mcpServers ?? {}))};`,\n `const excluded = ${JSON.stringify(Object.entries(settings.mcpServers ?? {}).flatMap(([server, entry]) => (entry.tools?.exclude ?? []).map((tool) => `mcp__${server}__${tool}`)))};`,\n CLAUDE_PROFILE_HOOK,\n ].join(\"\\n\");\n}\n"]}
@@ -1,3 +1,6 @@
1
+ import { composedNativeHooks } from "../native-hooks.js";
2
+ import { codexHookSchemas } from "./codex-hooks.constants.js";
3
+ import { codexHookPlan } from "./codex-hook-plan.js";
1
4
  import { rejectProfileTools } from "../profile-support.js";
2
5
  import { createCodexConversations, codexConversationLayout, } from "./codex-conversations.js";
3
6
  import { codexLabel, codexMcpSupport, codexModelSupport, codexQuotaPatterns, codexUnavailablePatterns, } from "./codex.constants.js";
@@ -21,12 +24,20 @@ function bindCodex(settings) {
21
24
  const credentials = credentialPlanner(codexLabel, codexCredentials(settings.modelProvider), settings.authentication, settings.model);
22
25
  const configuration = mcpConfigurationPlanner(codexLabel, settings.mcpServers, undefined, codexMcpLogins);
23
26
  return Object.freeze({
27
+ ...(settings.hooks?.length ? { hooks: codexHookPlan(settings.hooks) } : {}),
24
28
  name: "codex",
25
29
  ...(credentials ? { credentials } : {}),
26
30
  ...(configuration ? { configuration } : {}),
27
31
  bootstrap: "codex",
28
32
  ...conversationStorage(settings, createCodexConversations),
29
33
  resumable: true,
34
+ fileWorkspaces: Object.freeze({
35
+ dispatch: true,
36
+ repairs: true,
37
+ continuation: true,
38
+ liveInput: true,
39
+ interactive: true,
40
+ }),
30
41
  capture: settings.saveConversations ?? true,
31
42
  variables: Object.freeze({ ...settings.variables }),
32
43
  request: (input) => codexRequest(settings, input),
@@ -42,9 +53,14 @@ export function createCodexHarness(settings = {}) {
42
53
  harnessSettings(settings);
43
54
  conversationSettings(codexLabel, codexConversationLayout.format, settings);
44
55
  const configured = configuredSettings(settings);
56
+ const hooks = composedNativeHooks("codex", codexHookSchemas, configured.profile?.hooks?.codex, settings.hooks);
45
57
  return Object.freeze({
46
58
  kind: "cli",
47
- bind: (model) => bindCodex({ ...configured, ...(model === undefined ? {} : { model }) }),
59
+ bind: (model) => bindCodex({
60
+ ...configured,
61
+ hooks,
62
+ ...(model === undefined ? {} : { model }),
63
+ }),
48
64
  });
49
65
  }
50
66
  //# sourceMappingURL=codex-adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { rejectProfileTools } from \"../profile-support.ts\";\nimport {\n createCodexConversations,\n codexConversationLayout,\n} from \"./codex-conversations.ts\";\nimport {\n codexLabel,\n codexMcpSupport,\n codexModelSupport,\n codexQuotaPatterns,\n codexUnavailablePatterns,\n} from \"./codex.constants.ts\";\nimport { codexMcpLogins } from \"./codex-mcp.ts\";\nimport {\n mcpConfigurationPlanner,\n supportMcpServers,\n} from \"../mcp-configuration.ts\";\nimport { textMatcher } from \"../text-matcher.ts\";\nimport {\n conversationSettings,\n conversationStorage,\n} from \"../conversation-settings.ts\";\nimport { transientNoticePatterns } from \"../unavailable.constants.ts\";\nimport type { AgentModel } from \"../../../domain/model.types.ts\";\nimport { credentialPlanner } from \"../authentication.ts\";\nimport { codexCredentials } from \"./codex-authentication.ts\";\nimport type {\n AgentAdapter,\n AgentInput,\n CliHarness,\n} from \"../../../domain/agent.types.ts\";\nimport { codexAppSession } from \"./codex-app-session.ts\";\nimport { codexProvider } from \"./codex-provider.ts\";\nimport { codexEvents } from \"./codex-events.ts\";\nimport { codexRequest } from \"./codex-request.ts\";\nimport {\n configuredSettings,\n harnessSettings,\n supportModel,\n} from \"../model-support.ts\";\nimport type { Bound, CodexSettings } from \"../settings.types.ts\";\n\nfunction bindCodex(settings: Bound<CodexSettings>): AgentAdapter {\n supportModel(codexModelSupport, settings.model);\n rejectProfileTools(codexLabel, settings.profile);\n supportMcpServers(codexMcpSupport, settings.mcpServers);\n codexProvider(settings);\n const credentials = credentialPlanner(\n codexLabel,\n codexCredentials(settings.modelProvider),\n settings.authentication,\n settings.model,\n );\n const configuration = mcpConfigurationPlanner(\n codexLabel,\n settings.mcpServers,\n undefined,\n codexMcpLogins,\n );\n return Object.freeze({\n name: \"codex\",\n ...(credentials ? { credentials } : {}),\n ...(configuration ? { configuration } : {}),\n bootstrap: \"codex\",\n ...conversationStorage(settings, createCodexConversations),\n resumable: true,\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => codexRequest(settings, input),\n events: codexEvents,\n liveInput: Object.freeze({\n open: (input: AgentInput) => codexAppSession(settings, input),\n }),\n quota: textMatcher(codexQuotaPatterns),\n unavailable: textMatcher(codexUnavailablePatterns, transientNoticePatterns),\n } satisfies AgentAdapter);\n}\n\nexport function createCodexHarness(settings: CodexSettings = {}): CliHarness {\n harnessSettings(settings);\n conversationSettings(codexLabel, codexConversationLayout.format, settings);\n const configured = configuredSettings(settings);\n return Object.freeze({\n kind: \"cli\",\n bind: (model?: AgentModel) =>\n bindCodex({ ...configured, ...(model === undefined ? {} : { model }) }),\n });\n}\n"]}
1
+ {"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { composedNativeHooks } from \"../native-hooks.ts\";\nimport { codexHookSchemas } from \"./codex-hooks.constants.ts\";\nimport { codexHookPlan } from \"./codex-hook-plan.ts\";\nimport { rejectProfileTools } from \"../profile-support.ts\";\nimport {\n createCodexConversations,\n codexConversationLayout,\n} from \"./codex-conversations.ts\";\nimport {\n codexLabel,\n codexMcpSupport,\n codexModelSupport,\n codexQuotaPatterns,\n codexUnavailablePatterns,\n} from \"./codex.constants.ts\";\nimport { codexMcpLogins } from \"./codex-mcp.ts\";\nimport {\n mcpConfigurationPlanner,\n supportMcpServers,\n} from \"../mcp-configuration.ts\";\nimport { textMatcher } from \"../text-matcher.ts\";\nimport {\n conversationSettings,\n conversationStorage,\n} from \"../conversation-settings.ts\";\nimport { transientNoticePatterns } from \"../unavailable.constants.ts\";\nimport type { AgentModel } from \"../../../domain/model.types.ts\";\nimport { credentialPlanner } from \"../authentication.ts\";\nimport { codexCredentials } from \"./codex-authentication.ts\";\nimport type {\n AgentAdapter,\n AgentInput,\n CliHarness,\n} from \"../../../domain/agent.types.ts\";\nimport { codexAppSession } from \"./codex-app-session.ts\";\nimport { codexProvider } from \"./codex-provider.ts\";\nimport { codexEvents } from \"./codex-events.ts\";\nimport { codexRequest } from \"./codex-request.ts\";\nimport {\n configuredSettings,\n harnessSettings,\n supportModel,\n} from \"../model-support.ts\";\nimport type { Bound, CodexSettings } from \"../settings.types.ts\";\n\nfunction bindCodex(settings: Bound<CodexSettings>): AgentAdapter {\n supportModel(codexModelSupport, settings.model);\n rejectProfileTools(codexLabel, settings.profile);\n supportMcpServers(codexMcpSupport, settings.mcpServers);\n codexProvider(settings);\n const credentials = credentialPlanner(\n codexLabel,\n codexCredentials(settings.modelProvider),\n settings.authentication,\n settings.model,\n );\n const configuration = mcpConfigurationPlanner(\n codexLabel,\n settings.mcpServers,\n undefined,\n codexMcpLogins,\n );\n return Object.freeze({\n ...(settings.hooks?.length ? { hooks: codexHookPlan(settings.hooks) } : {}),\n name: \"codex\",\n ...(credentials ? { credentials } : {}),\n ...(configuration ? { configuration } : {}),\n bootstrap: \"codex\",\n ...conversationStorage(settings, createCodexConversations),\n resumable: true,\n fileWorkspaces: Object.freeze({\n dispatch: true,\n repairs: true,\n continuation: true,\n liveInput: true,\n interactive: true,\n }),\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => codexRequest(settings, input),\n events: codexEvents,\n liveInput: Object.freeze({\n open: (input: AgentInput) => codexAppSession(settings, input),\n }),\n quota: textMatcher(codexQuotaPatterns),\n unavailable: textMatcher(codexUnavailablePatterns, transientNoticePatterns),\n } satisfies AgentAdapter);\n}\n\nexport function createCodexHarness(settings: CodexSettings = {}): CliHarness {\n harnessSettings(settings);\n conversationSettings(codexLabel, codexConversationLayout.format, settings);\n const configured = configuredSettings(settings);\n const hooks = composedNativeHooks(\n \"codex\",\n codexHookSchemas,\n configured.profile?.hooks?.codex,\n settings.hooks,\n );\n return Object.freeze({\n kind: \"cli\",\n bind: (model?: AgentModel) =>\n bindCodex({\n ...configured,\n hooks,\n ...(model === undefined ? {} : { model }),\n }),\n });\n}\n"]}
@@ -17,6 +17,7 @@ const file = hostFile({
17
17
  const key = variableCredential({
18
18
  variable: codexCredentialVariables.usage,
19
19
  expose: (secret) => ({
20
+ requiresSandbox: true,
20
21
  commands: [
21
22
  toolCommand("codex", ["login", "--with-api-key"], { stdin: secret }),
22
23
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"codex-authentication.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-authentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE;KACpD;IACD,WAAW,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACzC,KAAK,EAAE,sDAAsD;IAC7D,WAAW,EAAE,gBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC7D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,wBAAwB,CAAC,KAAK;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnB,QAAQ,EAAE;YACR,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrE;KACF,CAAC;CACH,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,QAA4B;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,IAAI,wBAAwB,CAAC,KAAK,CAAC;IAC9E,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,WAAW,EAAE,QAAQ,CAAC,GAAG;QACzB,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAwC;IAExC,IAAI,QAAQ;QAAE,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,cAAc,EAAE,IAAI,CAAC,IAAI;QACzB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,WAAW,EAAE,GAAG,CAAC,GAAG;QACpB,gBAAgB,EAAE,GAAG,CAAC,QAAQ;KAC/B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { codexCredentialVariables, codexLabel } from \"./codex.constants.ts\";\nimport {\n hostFile,\n toolCommand,\n variableCredential,\n} from \"../authentication.ts\";\nimport type { CredentialStrategy } from \"../authentication.types.ts\";\nimport { parseCredential } from \"../protocol.ts\";\nimport type { CodexModelProvider } from \"../settings.types.ts\";\n\nconst file = hostFile({\n source: {\n path: \"~/.codex/auth.json\",\n home: { variable: \"CODEX_HOME\", path: \"auth.json\" },\n },\n destination: { file: \".codex/auth.json\" },\n login: 'codex login with cli_auth_credentials_store = \"file\"',\n alternative: `\"usage\" with ${codexCredentialVariables.usage}`,\n select: (content) => {\n parseCredential(content, codexLabel);\n return content;\n },\n});\n\nconst key = variableCredential({\n variable: codexCredentialVariables.usage,\n expose: (secret) => ({\n commands: [\n toolCommand(\"codex\", [\"login\", \"--with-api-key\"], { stdin: secret }),\n ],\n }),\n});\n\nfunction providerCredentials(provider: CodexModelProvider): CredentialStrategy {\n const variable = provider.apiKeyEnvironment ?? codexCredentialVariables.usage;\n if (variable === false) return {};\n const external = variableCredential({ variable });\n return Object.freeze({\n usage: external.preset,\n \"usage.key\": external.key,\n \"usage.variable\": external.variable,\n });\n}\n\nexport function codexCredentials(\n provider: CodexModelProvider | undefined,\n): CredentialStrategy {\n if (provider) return providerCredentials(provider);\n return Object.freeze({\n account: file.preset,\n \"account.file\": file.file,\n usage: key.preset,\n \"usage.key\": key.key,\n \"usage.variable\": key.variable,\n });\n}\n"]}
1
+ {"version":3,"file":"codex-authentication.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-authentication.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,QAAQ,EACR,WAAW,EACX,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjD,MAAM,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,EAAE;QACN,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE;KACpD;IACD,WAAW,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE;IACzC,KAAK,EAAE,sDAAsD;IAC7D,WAAW,EAAE,gBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC7D,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,wBAAwB,CAAC,KAAK;IACxC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACnB,eAAe,EAAE,IAAI;QACrB,QAAQ,EAAE;YACR,WAAW,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACrE;KACF,CAAC;CACH,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,QAA4B;IACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,IAAI,wBAAwB,CAAC,KAAK,CAAC;IAC9E,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,WAAW,EAAE,QAAQ,CAAC,GAAG;QACzB,gBAAgB,EAAE,QAAQ,CAAC,QAAQ;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAwC;IAExC,IAAI,QAAQ;QAAE,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,IAAI,CAAC,MAAM;QACpB,cAAc,EAAE,IAAI,CAAC,IAAI;QACzB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,WAAW,EAAE,GAAG,CAAC,GAAG;QACpB,gBAAgB,EAAE,GAAG,CAAC,QAAQ;KAC/B,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { codexCredentialVariables, codexLabel } from \"./codex.constants.ts\";\nimport {\n hostFile,\n toolCommand,\n variableCredential,\n} from \"../authentication.ts\";\nimport type { CredentialStrategy } from \"../authentication.types.ts\";\nimport { parseCredential } from \"../protocol.ts\";\nimport type { CodexModelProvider } from \"../settings.types.ts\";\n\nconst file = hostFile({\n source: {\n path: \"~/.codex/auth.json\",\n home: { variable: \"CODEX_HOME\", path: \"auth.json\" },\n },\n destination: { file: \".codex/auth.json\" },\n login: 'codex login with cli_auth_credentials_store = \"file\"',\n alternative: `\"usage\" with ${codexCredentialVariables.usage}`,\n select: (content) => {\n parseCredential(content, codexLabel);\n return content;\n },\n});\n\nconst key = variableCredential({\n variable: codexCredentialVariables.usage,\n expose: (secret) => ({\n requiresSandbox: true,\n commands: [\n toolCommand(\"codex\", [\"login\", \"--with-api-key\"], { stdin: secret }),\n ],\n }),\n});\n\nfunction providerCredentials(provider: CodexModelProvider): CredentialStrategy {\n const variable = provider.apiKeyEnvironment ?? codexCredentialVariables.usage;\n if (variable === false) return {};\n const external = variableCredential({ variable });\n return Object.freeze({\n usage: external.preset,\n \"usage.key\": external.key,\n \"usage.variable\": external.variable,\n });\n}\n\nexport function codexCredentials(\n provider: CodexModelProvider | undefined,\n): CredentialStrategy {\n if (provider) return providerCredentials(provider);\n return Object.freeze({\n account: file.preset,\n \"account.file\": file.file,\n usage: key.preset,\n \"usage.key\": key.key,\n \"usage.variable\": key.variable,\n });\n}\n"]}
@@ -0,0 +1 @@
1
+ export declare const CODEX_ROLLOUT_DATE: RegExp;
@@ -0,0 +1,2 @@
1
+ export const CODEX_ROLLOUT_DATE = /^rollout-(\d{4})-(\d{2})-(\d{2})T/;
2
+ //# sourceMappingURL=codex-conversations.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-conversations.constants.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-conversations.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,mCAAmC,CAAC","sourcesContent":["export const CODEX_ROLLOUT_DATE = /^rollout-(\\d{4})-(\\d{2})-(\\d{2})T/;\n"]}
@@ -1,7 +1,10 @@
1
- import { basename, join, posix } from "node:path";
1
+ import { join, posix } from "node:path";
2
2
  import { createTranscriptConversations } from "../../../infrastructure/conversations/transcript-store.js";
3
- function datePath() {
4
- return new Date().toISOString().slice(0, 10).split("-");
3
+ import { CODEX_ROLLOUT_DATE } from "./codex-conversations.constants.js";
4
+ function rolloutPath(original) {
5
+ const file = posix.basename(original.replaceAll("\\", "/"));
6
+ const date = CODEX_ROLLOUT_DATE.exec(file);
7
+ return [...(date ? date.slice(1) : []), file];
5
8
  }
6
9
  export const codexConversationLayout = {
7
10
  format: "codex",
@@ -11,8 +14,8 @@ export const codexConversationLayout = {
11
14
  remoteSearchRoot: (home) => posix.join(home, ".codex", "sessions"),
12
15
  pattern: (id) => `*-${id}.jsonl`,
13
16
  matches: (file, id) => file.endsWith(`-${id}.jsonl`),
14
- capturePath: (_id, _repository, home, original) => join(home, ".codex", "sessions", ...datePath(), posix.basename(original.replaceAll("\\", "/"))),
15
- remotePath: (_id, lease, original) => posix.join(lease.home, ".codex", "sessions", ...datePath(), basename(original)),
17
+ capturePath: (_id, _repository, home, original) => join(home, ".codex", "sessions", ...rolloutPath(original)),
18
+ remotePath: (_id, lease, original) => posix.join(lease.home, ".codex", "sessions", ...rolloutPath(original)),
16
19
  };
17
20
  /** Creates the native store for Codex rollouts under ~/.codex/sessions. */
18
21
  export function createCodexConversations() {
@@ -1 +1 @@
1
- {"version":3,"file":"codex-conversations.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-conversations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGlD,OAAO,EAAE,6BAA6B,EAAE,MAAM,2DAA2D,CAAC;AAE1G,SAAS,QAAQ;IACf,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAiC;IACnE,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IACtD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACpD,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAChD,IAAI,CACF,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,GAAG,QAAQ,EAAE,EACb,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAC/C;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CACnC,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,IAAI,EACV,QAAQ,EACR,UAAU,EACV,GAAG,QAAQ,EAAE,EACb,QAAQ,CAAC,QAAQ,CAAC,CACnB;CACJ,CAAC;AAEF,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB;IACtC,OAAO,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { basename, join, posix } from \"node:path\";\nimport type { NativeConversationStore } from \"../../../domain/conversation.types.ts\";\nimport type { TranscriptConversationLayout } from \"../../../infrastructure/conversations/layout.types.ts\";\nimport { createTranscriptConversations } from \"../../../infrastructure/conversations/transcript-store.ts\";\n\nfunction datePath(): string[] {\n return new Date().toISOString().slice(0, 10).split(\"-\");\n}\n\nexport const codexConversationLayout: TranscriptConversationLayout = {\n format: \"codex\",\n sidecars: false,\n directory: (_repository, home) => join(home, \".codex\", \"sessions\"),\n searchRoot: (home) => join(home, \".codex\", \"sessions\"),\n remoteSearchRoot: (home) => posix.join(home, \".codex\", \"sessions\"),\n pattern: (id) => `*-${id}.jsonl`,\n matches: (file, id) => file.endsWith(`-${id}.jsonl`),\n capturePath: (_id, _repository, home, original) =>\n join(\n home,\n \".codex\",\n \"sessions\",\n ...datePath(),\n posix.basename(original.replaceAll(\"\\\\\", \"/\")),\n ),\n remotePath: (_id, lease, original) =>\n posix.join(\n lease.home,\n \".codex\",\n \"sessions\",\n ...datePath(),\n basename(original),\n ),\n};\n\n/** Creates the native store for Codex rollouts under ~/.codex/sessions. */\nexport function createCodexConversations(): NativeConversationStore {\n return createTranscriptConversations(codexConversationLayout);\n}\n"]}
1
+ {"version":3,"file":"codex-conversations.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-conversations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,6BAA6B,EAAE,MAAM,2DAA2D,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAExE,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAiC;IACnE,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClE,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IACtD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC;IAClE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACpD,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAChD,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC5D,UAAU,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CACnC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;CACzE,CAAC;AAEF,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB;IACtC,OAAO,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;AAChE,CAAC","sourcesContent":["import { join, posix } from \"node:path\";\nimport type { NativeConversationStore } from \"../../../domain/conversation.types.ts\";\nimport type { TranscriptConversationLayout } from \"../../../infrastructure/conversations/layout.types.ts\";\nimport { createTranscriptConversations } from \"../../../infrastructure/conversations/transcript-store.ts\";\nimport { CODEX_ROLLOUT_DATE } from \"./codex-conversations.constants.ts\";\n\nfunction rolloutPath(original: string): string[] {\n const file = posix.basename(original.replaceAll(\"\\\\\", \"/\"));\n const date = CODEX_ROLLOUT_DATE.exec(file);\n return [...(date ? date.slice(1) : []), file];\n}\n\nexport const codexConversationLayout: TranscriptConversationLayout = {\n format: \"codex\",\n sidecars: false,\n directory: (_repository, home) => join(home, \".codex\", \"sessions\"),\n searchRoot: (home) => join(home, \".codex\", \"sessions\"),\n remoteSearchRoot: (home) => posix.join(home, \".codex\", \"sessions\"),\n pattern: (id) => `*-${id}.jsonl`,\n matches: (file, id) => file.endsWith(`-${id}.jsonl`),\n capturePath: (_id, _repository, home, original) =>\n join(home, \".codex\", \"sessions\", ...rolloutPath(original)),\n remotePath: (_id, lease, original) =>\n posix.join(lease.home, \".codex\", \"sessions\", ...rolloutPath(original)),\n};\n\n/** Creates the native store for Codex rollouts under ~/.codex/sessions. */\nexport function createCodexConversations(): NativeConversationStore {\n return createTranscriptConversations(codexConversationLayout);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentHookPlan } from "../../../domain/agent-hook.types.ts";
2
+ import type { CodexHook } from "./codex-hooks.types.ts";
3
+ export declare function codexHookPlan(value: readonly CodexHook[]): AgentHookPlan;
@@ -0,0 +1,72 @@
1
+ import { createHash } from "node:crypto";
2
+ import { nativeHooks } from "../native-hooks.js";
3
+ function toml(value) {
4
+ if (Array.isArray(value))
5
+ return `[${value.map(toml).join(",")}]`;
6
+ if (value !== null && typeof value === "object")
7
+ return `{${Object.entries(value)
8
+ .map(([key, entry]) => `${JSON.stringify(key)}=${toml(entry)}`)
9
+ .join(",")}}`;
10
+ return JSON.stringify(value);
11
+ }
12
+ function canonical(value) {
13
+ if (Array.isArray(value))
14
+ return value.map(canonical);
15
+ if (value !== null && typeof value === "object")
16
+ return Object.fromEntries(Object.entries(value)
17
+ .sort(([a], [b]) => a.localeCompare(b, "en"))
18
+ .map(([key, entry]) => [key, canonical(entry)]));
19
+ return value;
20
+ }
21
+ export function codexHookPlan(value) {
22
+ const handlers = nativeHooks("codex", value);
23
+ return {
24
+ handlers,
25
+ async prepare(_sandbox, commands) {
26
+ const groups = {};
27
+ const state = {};
28
+ handlers.forEach((hook, index) => {
29
+ const label = hook.on.replace(/[A-Z]/g, (letter, index) => `${index ? "_" : ""}${letter.toLowerCase()}`);
30
+ const timeout = hook.on === "SessionEnd" || hook.on === "Interrupt"
31
+ ? Math.min(3, Math.ceil(hook.timeoutMs / 1000))
32
+ : Math.ceil(hook.timeoutMs / 1000);
33
+ const matcher = ["Stop", "UserPromptSubmit", "Interrupt"].includes(hook.on)
34
+ ? undefined
35
+ : hook.matcher;
36
+ const group = {
37
+ ...(matcher === undefined ? {} : { matcher }),
38
+ hooks: [
39
+ {
40
+ type: "command",
41
+ command: commands[index],
42
+ timeout,
43
+ async: false,
44
+ },
45
+ ],
46
+ };
47
+ const siblings = (groups[hook.on] ??= []);
48
+ const hash = `sha256:${createHash("sha256")
49
+ .update(JSON.stringify(canonical({ event_name: label, ...group })))
50
+ .digest("hex")}`;
51
+ for (const source of [
52
+ "/<session-flags>/config.toml",
53
+ "C:\\<session-flags>\\config.toml",
54
+ ])
55
+ state[`${source}:${label}:${siblings.length}:0`] = {
56
+ trusted_hash: hash,
57
+ enabled: true,
58
+ };
59
+ siblings.push(group);
60
+ });
61
+ const args = Object.entries({ ...groups, state }).flatMap(([key, value]) => ["-c", `hooks.${key}=${toml(value)}`]);
62
+ return {
63
+ command: (command) => ({
64
+ ...command,
65
+ arguments: [...args, ...(command.arguments ?? [])],
66
+ }),
67
+ close: async () => undefined,
68
+ };
69
+ },
70
+ };
71
+ }
72
+ //# sourceMappingURL=codex-hook-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-hook-plan.js","sourceRoot":"","sources":["../../../../src/adapters/agents/codex/codex-hook-plan.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { AgentHookPlan } from \"../../../domain/agent-hook.types.ts\";\nimport { nativeHooks } from \"../native-hooks.ts\";\nimport type { CodexHook } from \"./codex-hooks.types.ts\";\n\nfunction toml(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(toml).join(\",\")}]`;\n if (value !== null && typeof value === \"object\")\n return `{${Object.entries(value)\n .map(([key, entry]) => `${JSON.stringify(key)}=${toml(entry)}`)\n .join(\",\")}}`;\n return JSON.stringify(value);\n}\n\nfunction canonical(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonical);\n if (value !== null && typeof value === \"object\")\n return Object.fromEntries(\n Object.entries(value)\n .sort(([a], [b]) => a.localeCompare(b, \"en\"))\n .map(([key, entry]) => [key, canonical(entry)]),\n );\n return value;\n}\n\nexport function codexHookPlan(value: readonly CodexHook[]): AgentHookPlan {\n const handlers = nativeHooks(\"codex\", value);\n return {\n handlers,\n async prepare(_sandbox, commands) {\n const groups: Record<string, unknown[]> = {};\n const state: Record<string, unknown> = {};\n handlers.forEach((hook, index) => {\n const label = hook.on.replace(\n /[A-Z]/g,\n (letter, index: number) =>\n `${index ? \"_\" : \"\"}${letter.toLowerCase()}`,\n );\n const timeout =\n hook.on === \"SessionEnd\" || hook.on === \"Interrupt\"\n ? Math.min(3, Math.ceil(hook.timeoutMs / 1000))\n : Math.ceil(hook.timeoutMs / 1000);\n const matcher = [\"Stop\", \"UserPromptSubmit\", \"Interrupt\"].includes(\n hook.on,\n )\n ? undefined\n : hook.matcher;\n const group = {\n ...(matcher === undefined ? {} : { matcher }),\n hooks: [\n {\n type: \"command\",\n command: commands[index],\n timeout,\n async: false,\n },\n ],\n };\n const siblings = (groups[hook.on] ??= []);\n const hash = `sha256:${createHash(\"sha256\")\n .update(JSON.stringify(canonical({ event_name: label, ...group })))\n .digest(\"hex\")}`;\n for (const source of [\n \"/<session-flags>/config.toml\",\n \"C:\\\\<session-flags>\\\\config.toml\",\n ])\n state[`${source}:${label}:${siblings.length}:0`] = {\n trusted_hash: hash,\n enabled: true,\n };\n siblings.push(group);\n });\n const args = Object.entries({ ...groups, state }).flatMap(\n ([key, value]) => [\"-c\", `hooks.${key}=${toml(value)}`],\n );\n return {\n command: (command) => ({\n ...command,\n arguments: [...args, ...(command.arguments ?? [])],\n }),\n close: async () => undefined,\n };\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { NativeHookSchema } from "../native-hooks.types.ts";
2
+ import type { CodexHookPhase } from "./codex-hooks.types.ts";
3
+ export declare const codexHookSchemas: Readonly<Record<CodexHookPhase, NativeHookSchema>>;