aiwcli 0.15.4 → 0.15.7

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 (299) hide show
  1. package/README.md +6 -3
  2. package/dist/capabilities/branch/adapters.d.ts +2 -0
  3. package/dist/capabilities/branch/adapters.js +21 -0
  4. package/dist/capabilities/branch/contracts.d.ts +57 -0
  5. package/dist/capabilities/branch/contracts.js +1 -0
  6. package/dist/capabilities/branch/control-plane.d.ts +2 -0
  7. package/dist/capabilities/branch/control-plane.js +343 -0
  8. package/dist/capabilities/branch/runtime-core.d.ts +5 -0
  9. package/dist/capabilities/branch/runtime-core.js +36 -0
  10. package/dist/capabilities/installation/control-plane/clean-command.d.ts +41 -0
  11. package/dist/capabilities/installation/control-plane/clean-command.js +196 -0
  12. package/dist/capabilities/installation/control-plane/clear-command.d.ts +160 -0
  13. package/dist/capabilities/installation/control-plane/clear-command.js +1220 -0
  14. package/dist/capabilities/installation/control-plane/init-command.d.ts +81 -0
  15. package/dist/capabilities/installation/control-plane/init-command.js +449 -0
  16. package/dist/capabilities/launch/contracts.d.ts +51 -0
  17. package/dist/capabilities/launch/contracts.js +1 -0
  18. package/dist/capabilities/launch/control-plane/execute-launch.d.ts +2 -0
  19. package/dist/capabilities/launch/control-plane/execute-launch.js +222 -0
  20. package/dist/capabilities/launch/runtime-core/launch-options.d.ts +14 -0
  21. package/dist/capabilities/launch/runtime-core/launch-options.js +69 -0
  22. package/dist/cli/base-command.d.ts +18 -0
  23. package/dist/cli/base-command.js +55 -0
  24. package/dist/commands/branch.d.ts +0 -20
  25. package/dist/commands/branch.js +24 -416
  26. package/dist/commands/clean.d.ts +1 -41
  27. package/dist/commands/clean.js +1 -196
  28. package/dist/commands/clear.d.ts +1 -161
  29. package/dist/commands/clear.js +1 -1121
  30. package/dist/commands/init/index.d.ts +1 -98
  31. package/dist/commands/init/index.js +4 -478
  32. package/dist/commands/launch.d.ts +36 -11
  33. package/dist/commands/launch.js +135 -159
  34. package/dist/lib/base-command.d.ts +1 -114
  35. package/dist/lib/base-command.js +1 -153
  36. package/dist/lib/claude-settings-types.d.ts +31 -19
  37. package/dist/lib/context/context-formatter.d.ts +74 -0
  38. package/dist/lib/context/context-formatter.js +493 -0
  39. package/dist/lib/context/context-selector.d.ts +42 -0
  40. package/dist/lib/context/context-selector.js +451 -0
  41. package/dist/lib/context/context-store.d.ts +100 -0
  42. package/dist/lib/context/context-store.js +618 -0
  43. package/dist/lib/context/plan-manager.d.ts +54 -0
  44. package/dist/lib/context/plan-manager.js +282 -0
  45. package/dist/lib/context/task-tracker.d.ts +44 -0
  46. package/dist/lib/context/task-tracker.js +146 -0
  47. package/dist/lib/core-ide-base.d.ts +4 -0
  48. package/dist/lib/core-ide-base.js +77 -0
  49. package/dist/lib/core-installer.d.ts +5 -0
  50. package/dist/lib/core-installer.js +54 -0
  51. package/dist/lib/git-exclude-manager.d.ts +2 -2
  52. package/dist/lib/git-exclude-manager.js +3 -3
  53. package/dist/lib/hooks/hook-utils.d.ts +143 -0
  54. package/dist/lib/hooks/hook-utils.js +609 -0
  55. package/dist/lib/hooks/session-end-logic.d.ts +5 -0
  56. package/dist/lib/hooks/session-end-logic.js +63 -0
  57. package/dist/lib/hooks-merger.js +25 -19
  58. package/dist/lib/ide-path-resolver.d.ts +19 -7
  59. package/dist/lib/ide-path-resolver.js +25 -9
  60. package/dist/lib/install-state.d.ts +34 -0
  61. package/dist/lib/install-state.js +161 -0
  62. package/dist/lib/launch-options.d.ts +1 -0
  63. package/dist/lib/launch-options.js +1 -0
  64. package/dist/lib/lsp-patch.d.ts +12 -0
  65. package/dist/lib/lsp-patch.js +156 -0
  66. package/dist/lib/multiplexer.d.ts +57 -0
  67. package/dist/lib/multiplexer.js +19 -0
  68. package/dist/lib/multiplexers/psmux.d.ts +75 -0
  69. package/dist/lib/multiplexers/psmux.js +384 -0
  70. package/dist/lib/multiplexers/tmux.d.ts +44 -0
  71. package/dist/lib/multiplexers/tmux.js +262 -0
  72. package/dist/lib/mux-utils.d.ts +5 -0
  73. package/dist/lib/mux-utils.js +42 -0
  74. package/dist/lib/paths.d.ts +2 -2
  75. package/dist/lib/paths.js +2 -2
  76. package/dist/lib/platform-commands.d.ts +27 -0
  77. package/dist/lib/platform-commands.js +49 -0
  78. package/dist/lib/runtime/aiw-cli.d.ts +37 -0
  79. package/dist/lib/runtime/aiw-cli.js +74 -0
  80. package/dist/lib/runtime/atomic-write.d.ts +19 -0
  81. package/dist/lib/runtime/atomic-write.js +121 -0
  82. package/dist/lib/runtime/cli-args.d.ts +55 -0
  83. package/dist/lib/runtime/cli-args.js +185 -0
  84. package/dist/lib/runtime/constants.d.ts +56 -0
  85. package/dist/lib/runtime/constants.js +230 -0
  86. package/dist/lib/runtime/executable-policy.d.ts +16 -0
  87. package/dist/lib/runtime/executable-policy.js +57 -0
  88. package/dist/lib/runtime/git-state.d.ts +9 -0
  89. package/dist/lib/runtime/git-state.js +59 -0
  90. package/dist/lib/runtime/inference.d.ts +37 -0
  91. package/dist/lib/runtime/inference.js +262 -0
  92. package/dist/lib/runtime/lint-dispatch.d.ts +40 -0
  93. package/dist/lib/runtime/lint-dispatch.js +285 -0
  94. package/dist/lib/runtime/logger.d.ts +66 -0
  95. package/dist/lib/runtime/logger.js +201 -0
  96. package/dist/lib/runtime/models.d.ts +14 -0
  97. package/dist/lib/runtime/models.js +14 -0
  98. package/dist/lib/runtime/platform-adapter.d.ts +7 -0
  99. package/dist/lib/runtime/platform-adapter.js +21 -0
  100. package/dist/lib/runtime/preflight.d.ts +24 -0
  101. package/dist/lib/runtime/preflight.js +65 -0
  102. package/dist/lib/runtime/sentinel-ipc.d.ts +14 -0
  103. package/dist/lib/runtime/sentinel-ipc.js +67 -0
  104. package/dist/lib/runtime/state-io.d.ts +30 -0
  105. package/dist/lib/runtime/state-io.js +174 -0
  106. package/dist/lib/runtime/stop-words.d.ts +20 -0
  107. package/dist/lib/runtime/stop-words.js +150 -0
  108. package/dist/lib/runtime/subprocess-utils.d.ts +29 -0
  109. package/dist/lib/runtime/subprocess-utils.js +96 -0
  110. package/dist/lib/runtime/tmux-preflight.d.ts +13 -0
  111. package/dist/lib/runtime/tmux-preflight.js +78 -0
  112. package/dist/lib/runtime/utils.d.ts +54 -0
  113. package/dist/lib/runtime/utils.js +162 -0
  114. package/dist/lib/sentinel-wrapper.d.ts +9 -0
  115. package/dist/lib/sentinel-wrapper.js +20 -0
  116. package/dist/lib/shell-quoting.d.ts +5 -0
  117. package/dist/lib/shell-quoting.js +17 -0
  118. package/dist/lib/spawn-errors.d.ts +6 -0
  119. package/dist/lib/spawn-errors.js +15 -0
  120. package/dist/lib/spawn.js +5 -11
  121. package/dist/lib/template-installer.d.ts +4 -5
  122. package/dist/lib/template-installer.js +36 -34
  123. package/dist/lib/template-resolver.d.ts +6 -7
  124. package/dist/lib/template-resolver.js +26 -21
  125. package/dist/lib/template-settings-reconstructor.d.ts +7 -2
  126. package/dist/lib/template-settings-reconstructor.js +76 -45
  127. package/dist/lib/terminal-strategy.d.ts +11 -0
  128. package/dist/lib/terminal-strategy.js +49 -0
  129. package/dist/lib/terminal.d.ts +28 -0
  130. package/dist/lib/terminal.js +162 -112
  131. package/dist/lib/tmux-pane-placement.d.ts +17 -0
  132. package/dist/lib/tmux-pane-placement.js +58 -0
  133. package/dist/lib/tmux-primitives.d.ts +5 -0
  134. package/dist/lib/tmux-primitives.js +15 -0
  135. package/dist/lib/tmux-session.d.ts +32 -0
  136. package/dist/lib/tmux-session.js +86 -0
  137. package/dist/lib/tty-detection.js +1 -1
  138. package/dist/lib/types.d.ts +168 -0
  139. package/dist/lib/types.js +6 -0
  140. package/dist/lib/version.d.ts +1 -1
  141. package/dist/lib/version.js +1 -1
  142. package/dist/platform/launch.d.ts +10 -0
  143. package/dist/platform/launch.js +10 -0
  144. package/dist/templates/CLAUDE.md +31 -40
  145. package/dist/templates/cc-native/.claude/settings.json +27 -27
  146. package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
  147. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +10 -9
  148. package/dist/templates/cc-native/_cc-native/CLAUDE.md +18 -18
  149. package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +3 -3
  150. package/dist/templates/cc-native/_cc-native/artifacts/lib/format.ts +14 -14
  151. package/dist/templates/cc-native/_cc-native/artifacts/lib/tracker.ts +1 -1
  152. package/dist/templates/cc-native/_cc-native/artifacts/lib/write.ts +3 -3
  153. package/dist/templates/cc-native/_cc-native/cc-native.config.json +3 -3
  154. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +16 -15
  155. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +3 -3
  156. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +2 -2
  157. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +2 -2
  158. package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +3 -3
  159. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -2
  160. package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +3 -3
  161. package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +8 -8
  162. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +1 -1
  163. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +4 -4
  164. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +1 -1
  165. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
  166. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +1 -1
  167. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +1 -1
  168. package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +2 -2
  169. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +1 -1
  170. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +2 -2
  171. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +1 -1
  172. package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +8 -8
  173. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +3 -3
  174. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
  175. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +3 -3
  176. package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +3 -1
  177. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/agent-selection.test.ts +345 -0
  178. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/preflight.test.ts +344 -0
  179. package/dist/templates/cc-native/_cc-native/plan-review/lib/agent-selection.ts +37 -15
  180. package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +16 -69
  181. package/dist/templates/cc-native/_cc-native/plan-review/lib/orchestrator.ts +1 -1
  182. package/dist/templates/cc-native/_cc-native/plan-review/lib/output-builder.ts +1 -1
  183. package/dist/templates/cc-native/_cc-native/plan-review/lib/plan-questions.ts +2 -2
  184. package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
  185. package/dist/templates/cc-native/_cc-native/plan-review/lib/review-pipeline.ts +7 -7
  186. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/agent.ts +4 -4
  187. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +3 -3
  188. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/index.ts +1 -1
  189. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/claude-agent.ts +2 -2
  190. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/codex-agent.ts +4 -4
  191. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/gemini-agent.ts +1 -1
  192. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/orchestrator-claude-agent.ts +5 -6
  193. package/dist/templates/core/.codex/workflows/codex.md +17 -0
  194. package/dist/templates/core/.codex/workflows/handoff.md +5 -0
  195. package/dist/templates/core/.codex/workflows/meta-plan.md +7 -0
  196. package/dist/templates/core/.cognition/AGENTS.md +5 -0
  197. package/dist/templates/core/.cognition/config.json +12 -0
  198. package/dist/templates/{_shared → core}/.windsurf/workflows/handoff.md +1 -1
  199. package/dist/templates/{_shared → core}/.windsurf/workflows/meta-plan.md +1 -1
  200. package/dist/templates/core/hooks-ts/_utils/git-state.ts +2 -0
  201. package/dist/templates/{_shared → core}/hooks-ts/archive_plan.ts +14 -23
  202. package/dist/templates/core/hooks-ts/codex_explorer.ts +160 -0
  203. package/dist/templates/{_shared → core}/hooks-ts/context_monitor.ts +23 -55
  204. package/dist/templates/{_shared → core}/hooks-ts/file-suggestion.ts +4 -3
  205. package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
  206. package/dist/templates/{_shared → core}/hooks-ts/pre_compact.ts +5 -5
  207. package/dist/templates/{_shared → core}/hooks-ts/session_end.ts +38 -78
  208. package/dist/templates/{_shared → core}/hooks-ts/session_start.ts +5 -5
  209. package/dist/templates/core/hooks-ts/task_create_capture.ts +32 -0
  210. package/dist/templates/{_shared → core}/hooks-ts/task_update_capture.ts +9 -24
  211. package/dist/templates/core/hooks-ts/user_prompt_submit.ts +46 -0
  212. package/dist/templates/{_shared → core}/lib-ts/CLAUDE.md +27 -16
  213. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/headless.ts +3 -2
  214. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/tmux.ts +44 -15
  215. package/dist/templates/{_shared → core}/lib-ts/agent-exec/base-agent.ts +6 -4
  216. package/dist/templates/{_shared → core}/lib-ts/agent-exec/execution-backend.ts +1 -1
  217. package/dist/templates/{_shared → core}/lib-ts/agent-exec/index.ts +2 -2
  218. package/dist/templates/{_shared → core}/lib-ts/agent-exec/structured-output.ts +4 -5
  219. package/dist/templates/{_shared → core}/lib-ts/context/CLAUDE.md +9 -6
  220. package/dist/templates/{_shared → core}/lib-ts/context/context-formatter.ts +16 -21
  221. package/dist/templates/{_shared → core}/lib-ts/context/context-selector.ts +8 -6
  222. package/dist/templates/{_shared → core}/lib-ts/context/context-store.ts +32 -20
  223. package/dist/templates/{_shared → core}/lib-ts/context/plan-manager.ts +19 -15
  224. package/dist/templates/{_shared → core}/lib-ts/context/task-tracker.ts +3 -3
  225. package/dist/templates/core/lib-ts/hooks/context-monitor-logic.ts +32 -0
  226. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/hooks}/hook-utils.ts +168 -41
  227. package/dist/templates/core/lib-ts/hooks/prompt-binding-logic.ts +80 -0
  228. package/dist/templates/core/lib-ts/hooks/session-end-logic.ts +93 -0
  229. package/dist/templates/core/lib-ts/package.json +19 -0
  230. package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +295 -0
  231. package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +106 -0
  232. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/atomic-write.ts +12 -7
  233. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/cli-args.ts +8 -6
  234. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/constants.ts +326 -324
  235. package/dist/templates/core/lib-ts/runtime/executable-policy.ts +89 -0
  236. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/git-state.ts +6 -4
  237. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/inference.ts +59 -10
  238. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/lint-dispatch.ts +25 -23
  239. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/logger.ts +32 -29
  240. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/models.ts +2 -2
  241. package/dist/templates/core/lib-ts/runtime/platform-adapter.ts +33 -0
  242. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/preflight.ts +4 -3
  243. package/dist/templates/core/lib-ts/runtime/sentinel-ipc.ts +91 -0
  244. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/state-io.ts +11 -7
  245. package/dist/templates/core/lib-ts/runtime/stop-words.ts +185 -0
  246. package/dist/templates/core/lib-ts/runtime/subprocess-utils.ts +147 -0
  247. package/dist/templates/core/lib-ts/runtime/tmux-preflight.ts +93 -0
  248. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/utils.ts +4 -3
  249. package/dist/templates/{_shared → core}/lib-ts/templates/formatters.ts +7 -5
  250. package/dist/templates/{_shared → core}/lib-ts/templates/plan-context.ts +2 -1
  251. package/dist/templates/{_shared → core}/lib-ts/tsconfig.json +3 -1
  252. package/dist/templates/{_shared → core}/lib-ts/types.ts +78 -77
  253. package/dist/templates/core/scripts/resolve-run.ts +61 -0
  254. package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
  255. package/dist/templates/{_shared → core}/scripts/status_line.ts +25 -20
  256. package/dist/templates/core/skills/codex/CLAUDE.md +78 -0
  257. package/dist/templates/{_shared → core}/skills/codex/SKILL.md +21 -18
  258. package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +76 -103
  259. package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +119 -133
  260. package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
  261. package/dist/templates/core/skills/devin/CLAUDE.md +65 -0
  262. package/dist/templates/core/skills/devin/SKILL.md +73 -0
  263. package/dist/templates/core/skills/devin/lib/devin-watcher.ts +280 -0
  264. package/dist/templates/core/skills/devin/scripts/launch-devin.ts +257 -0
  265. package/dist/templates/{_shared → core}/skills/handoff-system/CLAUDE.md +436 -433
  266. package/dist/templates/{_shared → core}/skills/handoff-system/lib/document-generator.ts +9 -7
  267. package/dist/templates/{_shared → core}/skills/handoff-system/lib/handoff-reader.ts +6 -4
  268. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/resume_handoff.ts +10 -8
  269. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/save_handoff.ts +12 -10
  270. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff-resume.md +2 -2
  271. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff.md +6 -5
  272. package/dist/templates/{_shared → core}/skills/meta-plan/CLAUDE.md +2 -1
  273. package/dist/templates/{_shared → core}/skills/meta-plan/workflows/meta-plan.md +8 -7
  274. package/oclif.manifest.json +89 -13
  275. package/package.json +13 -12
  276. package/dist/templates/_shared/.claude/settings.json +0 -120
  277. package/dist/templates/_shared/.claude/skills/codex/SKILL.md +0 -35
  278. package/dist/templates/_shared/.claude/skills/handoff/SKILL.md +0 -13
  279. package/dist/templates/_shared/.claude/skills/handoff-resume/SKILL.md +0 -13
  280. package/dist/templates/_shared/.claude/skills/meta-plan/SKILL.md +0 -43
  281. package/dist/templates/_shared/.codex/workflows/codex.md +0 -11
  282. package/dist/templates/_shared/.codex/workflows/handoff.md +0 -226
  283. package/dist/templates/_shared/.codex/workflows/meta-plan.md +0 -347
  284. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +0 -2
  285. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +0 -48
  286. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
  287. package/dist/templates/_shared/lib-ts/base/launchers/tmux-launcher.ts +0 -173
  288. package/dist/templates/_shared/lib-ts/base/launchers/window-launcher.ts +0 -93
  289. package/dist/templates/_shared/lib-ts/base/launchers/wt-launcher.ts +0 -64
  290. package/dist/templates/_shared/lib-ts/base/pane-launcher.ts +0 -55
  291. package/dist/templates/_shared/lib-ts/base/sentinel-ipc.ts +0 -87
  292. package/dist/templates/_shared/lib-ts/base/stop-words.ts +0 -184
  293. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +0 -249
  294. package/dist/templates/_shared/lib-ts/base/tmux-driver.ts +0 -341
  295. package/dist/templates/_shared/lib-ts/base/tmux-pane-placement.ts +0 -78
  296. package/dist/templates/_shared/lib-ts/package.json +0 -20
  297. package/dist/templates/_shared/scripts/resolve-run.ts +0 -62
  298. package/dist/templates/_shared/skills/codex/CLAUDE.md +0 -70
  299. /package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/index.ts +0 -0
@@ -9,9 +9,9 @@ import * as path from "node:path";
9
9
 
10
10
  import { validatePlanPath } from "./constants.js";
11
11
  import type { IterationState, IterationEntry } from "./types.js";
12
- import { atomicWrite } from "../../_shared/lib-ts/base/atomic-write.js";
13
- import { logInfo, logWarn, logError } from "../../_shared/lib-ts/base/logger.js";
14
- import { nowIso } from "../../_shared/lib-ts/base/utils.js";
12
+ import { atomicWrite } from "../../_core/lib-ts/runtime/atomic-write.js";
13
+ import { logInfo, logWarn, logError } from "../../_core/lib-ts/runtime/logger.js";
14
+ import { nowIso } from "../../_core/lib-ts/runtime/utils.js";
15
15
 
16
16
  // ---------------------------------------------------------------------------
17
17
  // Constants
@@ -13,6 +13,6 @@
13
13
  "types": ["bun-types"],
14
14
  "skipLibCheck": true
15
15
  },
16
- "include": ["./**/*.ts", "../../_shared/lib-ts/**/*.ts"],
17
- "exclude": ["../../_shared/lib-ts/__tests__/**"]
16
+ "include": ["./**/*.ts", "../../_core/lib-ts/**/*.ts"],
17
+ "exclude": ["../../_core/lib-ts/__tests__/**"]
18
18
  }
@@ -5,10 +5,10 @@
5
5
  */
6
6
 
7
7
  // Re-export shared types used by cc-native consumers
8
- export type { ContextState, HookInput, HookOutput } from "../../_shared/lib-ts/types.js";
8
+ export type { ContextState, HookInput, HookOutput } from "../../_core/lib-ts/types.js";
9
9
 
10
10
  // Import AgentConfig for local use and re-export
11
- import type { AgentConfig as _AgentConfig } from "../../_shared/lib-ts/types.js";
11
+ import type { AgentConfig as _AgentConfig } from "../../_core/lib-ts/types.js";
12
12
  export type AgentConfig = _AgentConfig;
13
13
 
14
14
  // ---------------------------------------------------------------------------
@@ -122,7 +122,7 @@ export interface ReviewDecisionResult {
122
122
  // Agent & Orchestrator Configuration
123
123
  // ---------------------------------------------------------------------------
124
124
 
125
- // AgentConfig re-exported from _shared/lib-ts/types.ts above
125
+ // AgentConfig re-exported from _core/lib-ts/types.ts above
126
126
 
127
127
  /** Configuration for the plan orchestrator */
128
128
  export interface OrchestratorConfig {
@@ -67,8 +67,9 @@ Hooks that invoke this system (all in `../_cc-native/hooks/`):
67
67
  | Module | Key Exports |
68
68
  |--------|-------------|
69
69
  | `review-pipeline.ts` | `runReviewPipeline(input)` — main entry point |
70
- | `agent-selection.ts` | `resolveMandatoryAgents()`, `selectAgents()`, `assignModelsToAgents()` |
70
+ | `agent-selection.ts` | `resolveMandatoryAgents()`, `selectAgents()`, `assignModelsToAgents(agents, config, available?, options?)`, `resolveEnabledProviders()` (@internal). `assignModelsToAgents` accepts optional `{ isCliAvailable, randomFn }` for DI. |
71
71
  | `corroboration.ts` | `computeCorroboratedDecision()` |
72
+ | `preflight.ts` | `runPreflight()`, `collectPreflightChecks()` (@internal), `buildPreflightReport()` (@internal), `KNOWN_PROVIDERS` |
72
73
  | `graduation.ts` | `computePassEligible()`, `extractTopIssuesForTracker()`, `advanceIterationState()` |
73
74
  | `orchestrator.ts` | `runOrchestrator()`, `buildOrchestratorSchema()` (re-exported) |
74
75
  | `output-builder.ts` | `buildReviewOutput()`, `truncateAgentIssues()`, `overrideVerdictsByThreshold()` |
@@ -79,6 +80,7 @@ Hooks that invoke this system (all in `../_cc-native/hooks/`):
79
80
  ## Dependencies
80
81
 
81
82
  **Reads from shared lib-ts (stays in lib-ts, not part of plan-review):**
83
+ - `_core/lib-ts/runtime/cli-args.ts` — centralized CLI arg construction (`buildCliInvocation`, `reviewSpec`, `preflightCommandConfig`). All provider agents and preflight delegate flag construction here.
82
84
  - `../../lib-ts/types.ts` — all shared types (AgentConfig, ReviewerResult, etc.)
83
85
  - `../../lib-ts/settings.ts` — config loading
84
86
  - `../../lib-ts/plan-discovery.ts` — plan file discovery
@@ -0,0 +1,345 @@
1
+ /**
2
+ * Tests for agent-selection module.
3
+ * Tests resolveEnabledProviders directly with simple predicates — zero mocks.
4
+ * Tests assignModelsToAgents with DI options (randomFn, isCliAvailable) — zero mocks.
5
+ * Logger mock is for noise suppression only.
6
+ */
7
+
8
+ import { describe, it, expect, mock } from "bun:test";
9
+
10
+ import type { AgentConfig, ModelsConfig } from "../../../lib-ts/types.js";
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // Mock logger for noise suppression only (no assertions on logger calls)
14
+ // ---------------------------------------------------------------------------
15
+
16
+ mock.module("../../../../_core/lib-ts/runtime/logger.js", () => ({
17
+ logDebug() {},
18
+ logInfo() {},
19
+ logWarn() {},
20
+ logError() {},
21
+ }));
22
+
23
+ // Mock subprocess-utils so module load doesn't fail (not used by tests via DI)
24
+ mock.module("../../../../_core/lib-ts/runtime/subprocess-utils.js", () => ({
25
+ findExecutable: () => null,
26
+ }));
27
+
28
+ const { assignModelsToAgents, resolveEnabledProviders } = await import("../agent-selection.js");
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Helpers
32
+ // ---------------------------------------------------------------------------
33
+
34
+ function makeAgent(name: string): AgentConfig {
35
+ return {
36
+ name,
37
+ model: "default-model",
38
+ provider: "",
39
+ focus: "test",
40
+ categories: [],
41
+ description: `Test agent ${name}`,
42
+ system_prompt: "",
43
+ };
44
+ }
45
+
46
+ function makeModelsConfig(providers: Record<string, { enabled: boolean; models: string[] }>): ModelsConfig {
47
+ return { providers };
48
+ }
49
+
50
+ /** CLI always available */
51
+ const allAvailable = () => true;
52
+
53
+ /** CLI never available */
54
+ const noneAvailable = () => false;
55
+
56
+ /** Only specific CLIs available */
57
+ const onlyAvailable = (...names: string[]) => (name: string) => names.includes(name);
58
+
59
+ // ---------------------------------------------------------------------------
60
+ // resolveEnabledProviders — pure, zero mocks
61
+ // ---------------------------------------------------------------------------
62
+
63
+ describe("agent-selection", () => {
64
+ describe("resolveEnabledProviders", () => {
65
+ it("returns enabled providers sorted by priority (codex first)", () => {
66
+ const config = makeModelsConfig({
67
+ claude: { enabled: true, models: ["sonnet"] },
68
+ codex: { enabled: true, models: ["codex-mini-latest"] },
69
+ });
70
+
71
+ const result = resolveEnabledProviders(config, allAvailable);
72
+
73
+ expect(result.length).toBe(2);
74
+ expect(result[0]![0]).toBe("codex");
75
+ expect(result[1]![0]).toBe("claude");
76
+ });
77
+
78
+ it("excludes providers whose CLI is not available", () => {
79
+ const config = makeModelsConfig({
80
+ claude: { enabled: true, models: ["sonnet"] },
81
+ codex: { enabled: true, models: ["codex-mini-latest"] },
82
+ });
83
+
84
+ const result = resolveEnabledProviders(config, onlyAvailable("claude"));
85
+
86
+ expect(result.length).toBe(1);
87
+ expect(result[0]![0]).toBe("claude");
88
+ });
89
+
90
+ it("excludes disabled providers", () => {
91
+ const config = makeModelsConfig({
92
+ claude: { enabled: false, models: ["sonnet"] },
93
+ codex: { enabled: true, models: ["codex-mini-latest"] },
94
+ });
95
+
96
+ const result = resolveEnabledProviders(config, allAvailable);
97
+
98
+ expect(result.length).toBe(1);
99
+ expect(result[0]![0]).toBe("codex");
100
+ });
101
+
102
+ it("excludes providers with empty model lists", () => {
103
+ const config = makeModelsConfig({
104
+ claude: { enabled: true, models: [] },
105
+ codex: { enabled: true, models: ["codex-mini-latest"] },
106
+ });
107
+
108
+ const result = resolveEnabledProviders(config, allAvailable);
109
+
110
+ expect(result.length).toBe(1);
111
+ expect(result[0]![0]).toBe("codex");
112
+ });
113
+
114
+ it("filters models by preflight results", () => {
115
+ const config = makeModelsConfig({
116
+ claude: { enabled: true, models: ["sonnet", "opus"] },
117
+ });
118
+
119
+ const preflightAvailable = new Map([
120
+ ["claude", new Set(["sonnet"])],
121
+ ]);
122
+
123
+ const result = resolveEnabledProviders(config, allAvailable, preflightAvailable);
124
+
125
+ expect(result.length).toBe(1);
126
+ expect(result[0]![1].models).toEqual(["sonnet"]);
127
+ });
128
+
129
+ it("skips provider when no models passed preflight", () => {
130
+ const config = makeModelsConfig({
131
+ claude: { enabled: true, models: ["sonnet"] },
132
+ codex: { enabled: true, models: ["codex-mini-latest"] },
133
+ });
134
+
135
+ // Only claude passed preflight
136
+ const preflightAvailable = new Map([
137
+ ["claude", new Set(["sonnet"])],
138
+ ]);
139
+
140
+ const result = resolveEnabledProviders(config, allAvailable, preflightAvailable);
141
+
142
+ expect(result.length).toBe(1);
143
+ expect(result[0]![0]).toBe("claude");
144
+ });
145
+
146
+ it("returns empty when no providers are available", () => {
147
+ const config = makeModelsConfig({
148
+ codex: { enabled: true, models: ["codex-mini-latest"] },
149
+ });
150
+
151
+ const result = resolveEnabledProviders(config, noneAvailable);
152
+
153
+ expect(result).toEqual([]);
154
+ });
155
+
156
+ it("puts unknown providers after known ones in priority", () => {
157
+ const config = makeModelsConfig({
158
+ gemini: { enabled: true, models: ["gemini-pro"] },
159
+ codex: { enabled: true, models: ["codex-mini"] },
160
+ });
161
+
162
+ const result = resolveEnabledProviders(config, allAvailable);
163
+
164
+ expect(result[0]![0]).toBe("codex");
165
+ expect(result[1]![0]).toBe("gemini");
166
+ });
167
+ });
168
+
169
+ // ---------------------------------------------------------------------------
170
+ // assignModelsToAgents — uses DI, zero subprocess mocks
171
+ // ---------------------------------------------------------------------------
172
+
173
+ describe("assignModelsToAgents", () => {
174
+ it("assigns provider and model to agents", () => {
175
+ const agents = [makeAgent("a1"), makeAgent("a2")];
176
+ const config = makeModelsConfig({
177
+ claude: { enabled: true, models: ["sonnet"] },
178
+ });
179
+
180
+ const result = assignModelsToAgents(agents, config, undefined, {
181
+ isCliAvailable: allAvailable,
182
+ randomFn: () => 0,
183
+ });
184
+
185
+ expect(result.length).toBe(2);
186
+ expect(result[0]!.provider).toBe("claude");
187
+ expect(result[0]!.model).toBe("sonnet");
188
+ expect(result[1]!.provider).toBe("claude");
189
+ });
190
+
191
+ it("prefers codex over claude when both available", () => {
192
+ const agents = [makeAgent("a1"), makeAgent("a2"), makeAgent("a3")];
193
+ const config = makeModelsConfig({
194
+ claude: { enabled: true, models: ["sonnet"] },
195
+ codex: { enabled: true, models: ["codex-mini-latest"] },
196
+ });
197
+
198
+ const result = assignModelsToAgents(agents, config, undefined, {
199
+ isCliAvailable: allAvailable,
200
+ randomFn: () => 0,
201
+ });
202
+
203
+ expect(result.every(a => a.provider === "codex")).toBe(true);
204
+ expect(result.every(a => a.model === "codex-mini-latest")).toBe(true);
205
+ });
206
+
207
+ it("falls back to claude when codex CLI not found", () => {
208
+ const agents = [makeAgent("a1")];
209
+ const config = makeModelsConfig({
210
+ claude: { enabled: true, models: ["sonnet"] },
211
+ codex: { enabled: true, models: ["codex-mini-latest"] },
212
+ });
213
+
214
+ const result = assignModelsToAgents(agents, config, undefined, {
215
+ isCliAvailable: onlyAvailable("claude"),
216
+ randomFn: () => 0,
217
+ });
218
+
219
+ expect(result[0]!.provider).toBe("claude");
220
+ expect(result[0]!.model).toBe("sonnet");
221
+ });
222
+
223
+ it("filters models by preflight results", () => {
224
+ const agents = [makeAgent("a1")];
225
+ const config = makeModelsConfig({
226
+ claude: { enabled: true, models: ["sonnet", "opus"] },
227
+ });
228
+
229
+ const preflightAvailable = new Map([
230
+ ["claude", new Set(["sonnet"])],
231
+ ]);
232
+
233
+ const result = assignModelsToAgents(agents, config, preflightAvailable, {
234
+ isCliAvailable: allAvailable,
235
+ randomFn: () => 0,
236
+ });
237
+
238
+ expect(result[0]!.provider).toBe("claude");
239
+ expect(result[0]!.model).toBe("sonnet");
240
+ });
241
+
242
+ it("skips provider entirely when no models passed preflight", () => {
243
+ const agents = [makeAgent("a1")];
244
+ const config = makeModelsConfig({
245
+ claude: { enabled: true, models: ["sonnet"] },
246
+ codex: { enabled: true, models: ["codex-mini-latest"] },
247
+ });
248
+
249
+ const preflightAvailable = new Map([
250
+ ["claude", new Set(["sonnet"])],
251
+ ]);
252
+
253
+ const result = assignModelsToAgents(agents, config, preflightAvailable, {
254
+ isCliAvailable: allAvailable,
255
+ randomFn: () => 0,
256
+ });
257
+
258
+ expect(result[0]!.provider).toBe("claude");
259
+ });
260
+
261
+ it("falls back to claude defaults when all providers fail CLI check", () => {
262
+ const agents = [makeAgent("a1")];
263
+ const config = makeModelsConfig({
264
+ codex: { enabled: true, models: ["codex-mini-latest"] },
265
+ });
266
+
267
+ const result = assignModelsToAgents(agents, config, undefined, {
268
+ isCliAvailable: noneAvailable,
269
+ randomFn: () => 0,
270
+ });
271
+
272
+ expect(result[0]!.provider).toBe("claude");
273
+ });
274
+
275
+ it("skips disabled providers", () => {
276
+ const agents = [makeAgent("a1")];
277
+ const config = makeModelsConfig({
278
+ claude: { enabled: false, models: ["sonnet"] },
279
+ codex: { enabled: true, models: ["codex-mini-latest"] },
280
+ });
281
+
282
+ const result = assignModelsToAgents(agents, config, undefined, {
283
+ isCliAvailable: allAvailable,
284
+ randomFn: () => 0,
285
+ });
286
+
287
+ expect(result[0]!.provider).toBe("codex");
288
+ });
289
+
290
+ it("skips providers with empty model lists", () => {
291
+ const agents = [makeAgent("a1")];
292
+ const config = makeModelsConfig({
293
+ claude: { enabled: true, models: [] },
294
+ codex: { enabled: true, models: ["codex-mini-latest"] },
295
+ });
296
+
297
+ const result = assignModelsToAgents(agents, config, undefined, {
298
+ isCliAvailable: allAvailable,
299
+ randomFn: () => 0,
300
+ });
301
+
302
+ expect(result[0]!.provider).toBe("codex");
303
+ });
304
+
305
+ it("selects deterministic model with randomFn", () => {
306
+ const agents = [makeAgent("a1")];
307
+ const config = makeModelsConfig({
308
+ codex: { enabled: true, models: ["model-a", "model-b"] },
309
+ });
310
+
311
+ // randomFn=0 picks index 0 (model-a)
312
+ const result0 = assignModelsToAgents(agents, config, undefined, {
313
+ isCliAvailable: allAvailable,
314
+ randomFn: () => 0,
315
+ });
316
+ expect(result0[0]!.model).toBe("model-a");
317
+
318
+ // randomFn=0.5 picks index 1 (model-b)
319
+ const result1 = assignModelsToAgents(agents, config, undefined, {
320
+ isCliAvailable: allAvailable,
321
+ randomFn: () => 0.5,
322
+ });
323
+ expect(result1[0]!.model).toBe("model-b");
324
+ });
325
+
326
+ it("preserves agent fields other than provider and model", () => {
327
+ const agent = makeAgent("test-agent");
328
+ agent.focus = "security";
329
+ agent.system_prompt = "Be thorough";
330
+
331
+ const config = makeModelsConfig({
332
+ claude: { enabled: true, models: ["sonnet"] },
333
+ });
334
+
335
+ const result = assignModelsToAgents([agent], config, undefined, {
336
+ isCliAvailable: allAvailable,
337
+ randomFn: () => 0,
338
+ });
339
+
340
+ expect(result[0]!.name).toBe("test-agent");
341
+ expect(result[0]!.focus).toBe("security");
342
+ expect(result[0]!.system_prompt).toBe("Be thorough");
343
+ });
344
+ });
345
+ });