aiwcli 0.15.5 → 0.17.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 (435) hide show
  1. package/README.md +108 -1124
  2. package/bin/run.js +0 -4
  3. package/dist/capabilities/branch/adapters.d.ts +2 -0
  4. package/dist/capabilities/branch/adapters.js +21 -0
  5. package/dist/capabilities/branch/contracts.d.ts +57 -0
  6. package/dist/capabilities/branch/contracts.js +1 -0
  7. package/dist/capabilities/branch/control-plane.d.ts +2 -0
  8. package/dist/capabilities/branch/control-plane.js +343 -0
  9. package/dist/capabilities/branch/runtime-core.d.ts +5 -0
  10. package/dist/capabilities/branch/runtime-core.js +36 -0
  11. package/dist/capabilities/installation/control-plane/clean-command.d.ts +41 -0
  12. package/dist/capabilities/installation/control-plane/clean-command.js +196 -0
  13. package/dist/capabilities/installation/control-plane/clear-command.d.ts +162 -0
  14. package/dist/capabilities/installation/control-plane/clear-command.js +1249 -0
  15. package/dist/capabilities/installation/control-plane/init-command.d.ts +81 -0
  16. package/dist/capabilities/installation/control-plane/init-command.js +449 -0
  17. package/dist/capabilities/launch/contracts.d.ts +86 -0
  18. package/dist/capabilities/launch/contracts.js +1 -0
  19. package/dist/capabilities/launch/control-plane/execute-launch.d.ts +2 -0
  20. package/dist/capabilities/launch/control-plane/execute-launch.js +261 -0
  21. package/dist/capabilities/launch/runtime-core/launch-decisions.d.ts +82 -0
  22. package/dist/capabilities/launch/runtime-core/launch-decisions.js +202 -0
  23. package/dist/capabilities/launch/runtime-core/launch-options.d.ts +14 -0
  24. package/dist/capabilities/launch/runtime-core/launch-options.js +69 -0
  25. package/dist/cli/base-command.d.ts +18 -0
  26. package/dist/cli/base-command.js +55 -0
  27. package/dist/commands/branch.d.ts +1 -21
  28. package/dist/commands/branch.js +25 -417
  29. package/dist/commands/clean.d.ts +1 -41
  30. package/dist/commands/clean.js +1 -196
  31. package/dist/commands/clear.d.ts +1 -161
  32. package/dist/commands/clear.js +1 -1121
  33. package/dist/commands/init/index.d.ts +1 -98
  34. package/dist/commands/init/index.js +4 -478
  35. package/dist/commands/launch.d.ts +32 -12
  36. package/dist/commands/launch.js +107 -166
  37. package/dist/lib/claude-settings-types.d.ts +31 -19
  38. package/dist/lib/config.js +1 -2
  39. package/dist/lib/context/context-formatter.d.ts +74 -0
  40. package/dist/lib/context/context-formatter.js +493 -0
  41. package/dist/lib/context/context-selector.d.ts +42 -0
  42. package/dist/lib/context/context-selector.js +451 -0
  43. package/dist/lib/context/context-store.d.ts +100 -0
  44. package/dist/lib/context/context-store.js +644 -0
  45. package/dist/lib/context/plan-manager.d.ts +54 -0
  46. package/dist/lib/context/plan-manager.js +282 -0
  47. package/dist/lib/context/task-tracker.d.ts +44 -0
  48. package/dist/lib/context/task-tracker.js +146 -0
  49. package/dist/lib/core-ide-base.d.ts +4 -0
  50. package/dist/lib/core-ide-base.js +77 -0
  51. package/dist/lib/core-installer.d.ts +5 -0
  52. package/dist/lib/core-installer.js +33 -0
  53. package/dist/lib/debug.d.ts +0 -10
  54. package/dist/lib/debug.js +0 -10
  55. package/dist/lib/env-sanitizer.d.ts +25 -0
  56. package/dist/lib/env-sanitizer.js +46 -0
  57. package/dist/lib/errors.d.ts +0 -13
  58. package/dist/lib/errors.js +0 -15
  59. package/dist/lib/git-exclude-manager.d.ts +2 -2
  60. package/dist/lib/git-exclude-manager.js +3 -3
  61. package/dist/lib/hooks/context-monitor-logic.d.ts +6 -0
  62. package/dist/lib/hooks/context-monitor-logic.js +25 -0
  63. package/dist/lib/hooks/hook-utils.d.ts +143 -0
  64. package/dist/lib/hooks/hook-utils.js +620 -0
  65. package/dist/lib/hooks/prompt-binding-logic.d.ts +7 -0
  66. package/dist/lib/hooks/prompt-binding-logic.js +50 -0
  67. package/dist/lib/hooks/session-end-logic.d.ts +5 -0
  68. package/dist/lib/hooks/session-end-logic.js +51 -0
  69. package/dist/lib/hooks-merger.js +25 -19
  70. package/dist/lib/ide-path-resolver.d.ts +19 -7
  71. package/dist/lib/ide-path-resolver.js +25 -9
  72. package/dist/lib/install-state.d.ts +34 -0
  73. package/dist/lib/install-state.js +154 -0
  74. package/dist/lib/json-io.d.ts +12 -0
  75. package/dist/lib/json-io.js +30 -0
  76. package/dist/lib/lsp-patch.d.ts +12 -0
  77. package/dist/lib/lsp-patch.js +156 -0
  78. package/dist/lib/multiplexer.d.ts +65 -0
  79. package/dist/lib/multiplexer.js +38 -0
  80. package/dist/lib/multiplexers/psmux.d.ts +55 -0
  81. package/dist/lib/multiplexers/psmux.js +324 -0
  82. package/dist/lib/multiplexers/tmux.d.ts +36 -0
  83. package/dist/lib/multiplexers/tmux.js +221 -0
  84. package/dist/lib/multiplexers/wezterm.d.ts +38 -0
  85. package/dist/lib/multiplexers/wezterm.js +225 -0
  86. package/dist/lib/mux-utils.d.ts +6 -0
  87. package/dist/lib/mux-utils.js +36 -0
  88. package/dist/lib/paths.d.ts +2 -2
  89. package/dist/lib/paths.js +2 -2
  90. package/dist/lib/platform-commands.d.ts +27 -0
  91. package/dist/lib/platform-commands.js +49 -0
  92. package/dist/lib/prompt-file-manager.d.ts +23 -0
  93. package/dist/lib/prompt-file-manager.js +41 -0
  94. package/dist/lib/runtime/agent-launcher.d.ts +67 -0
  95. package/dist/lib/runtime/agent-launcher.js +262 -0
  96. package/dist/lib/runtime/aiw-cli.d.ts +39 -0
  97. package/dist/lib/runtime/aiw-cli.js +76 -0
  98. package/dist/lib/runtime/atomic-write.d.ts +19 -0
  99. package/dist/lib/runtime/atomic-write.js +121 -0
  100. package/dist/lib/runtime/cli-args.d.ts +58 -0
  101. package/dist/lib/runtime/cli-args.js +200 -0
  102. package/dist/lib/runtime/constants.d.ts +56 -0
  103. package/dist/lib/runtime/constants.js +230 -0
  104. package/dist/lib/runtime/executable-policy.d.ts +16 -0
  105. package/dist/lib/runtime/executable-policy.js +57 -0
  106. package/dist/lib/runtime/git-state.d.ts +9 -0
  107. package/dist/lib/runtime/git-state.js +59 -0
  108. package/dist/lib/runtime/inference.d.ts +37 -0
  109. package/dist/lib/runtime/inference.js +251 -0
  110. package/dist/lib/runtime/lint-dispatch.d.ts +40 -0
  111. package/dist/lib/runtime/lint-dispatch.js +285 -0
  112. package/dist/lib/runtime/logger.d.ts +66 -0
  113. package/dist/lib/runtime/logger.js +201 -0
  114. package/dist/lib/runtime/models.d.ts +20 -0
  115. package/dist/lib/runtime/models.js +20 -0
  116. package/dist/lib/runtime/platform-adapter.d.ts +7 -0
  117. package/dist/lib/runtime/platform-adapter.js +21 -0
  118. package/dist/lib/runtime/preflight.d.ts +24 -0
  119. package/dist/lib/runtime/preflight.js +65 -0
  120. package/dist/lib/runtime/sentinel-ipc.d.ts +14 -0
  121. package/dist/lib/runtime/sentinel-ipc.js +67 -0
  122. package/dist/lib/runtime/state-io.d.ts +31 -0
  123. package/dist/lib/runtime/state-io.js +179 -0
  124. package/dist/lib/runtime/stop-words.d.ts +20 -0
  125. package/dist/lib/runtime/stop-words.js +150 -0
  126. package/dist/lib/runtime/subprocess-utils.d.ts +29 -0
  127. package/dist/lib/runtime/subprocess-utils.js +96 -0
  128. package/dist/lib/runtime/tmux-preflight.d.ts +13 -0
  129. package/dist/lib/runtime/tmux-preflight.js +78 -0
  130. package/dist/lib/runtime/utils.d.ts +62 -0
  131. package/dist/lib/runtime/utils.js +192 -0
  132. package/dist/lib/schemas.d.ts +250 -0
  133. package/dist/lib/schemas.js +216 -0
  134. package/dist/lib/sentinel-manager.d.ts +32 -0
  135. package/dist/lib/sentinel-manager.js +62 -0
  136. package/dist/lib/sentinel-wrapper.d.ts +10 -0
  137. package/dist/lib/sentinel-wrapper.js +29 -0
  138. package/dist/lib/settings-hierarchy.js +3 -20
  139. package/dist/lib/shell-adapters/bash-adapter.d.ts +18 -0
  140. package/dist/lib/shell-adapters/bash-adapter.js +69 -0
  141. package/dist/lib/shell-adapters/index.d.ts +5 -0
  142. package/dist/lib/shell-adapters/index.js +7 -0
  143. package/dist/lib/shell-adapters/powershell-adapter.d.ts +18 -0
  144. package/dist/lib/shell-adapters/powershell-adapter.js +62 -0
  145. package/dist/lib/shell-adapters/shell-adapter.d.ts +45 -0
  146. package/dist/lib/shell-adapters/shell-adapter.js +5 -0
  147. package/dist/lib/shell-quoting.d.ts +5 -0
  148. package/dist/lib/shell-quoting.js +17 -0
  149. package/dist/lib/spawn-errors.d.ts +9 -0
  150. package/dist/lib/spawn-errors.js +29 -0
  151. package/dist/lib/spawn.js +5 -11
  152. package/dist/lib/spinner.d.ts +0 -5
  153. package/dist/lib/spinner.js +0 -16
  154. package/dist/lib/template-installer.d.ts +14 -5
  155. package/dist/lib/template-installer.js +40 -38
  156. package/dist/lib/template-resolver.d.ts +6 -7
  157. package/dist/lib/template-resolver.js +26 -21
  158. package/dist/lib/template-settings-reconstructor.d.ts +7 -2
  159. package/dist/lib/template-settings-reconstructor.js +76 -45
  160. package/dist/lib/terminal-strategy.d.ts +12 -0
  161. package/dist/lib/terminal-strategy.js +55 -0
  162. package/dist/lib/terminal.d.ts +34 -4
  163. package/dist/lib/terminal.js +192 -119
  164. package/dist/lib/tmux-pane-placement.d.ts +17 -0
  165. package/dist/lib/tmux-pane-placement.js +58 -0
  166. package/dist/lib/tmux-primitives.d.ts +3 -0
  167. package/dist/lib/tmux-primitives.js +11 -0
  168. package/dist/lib/tmux-session.d.ts +32 -0
  169. package/dist/lib/tmux-session.js +87 -0
  170. package/dist/lib/tty-detection.js +1 -1
  171. package/dist/lib/types.d.ts +168 -0
  172. package/dist/lib/types.js +6 -0
  173. package/dist/lib/version.d.ts +1 -1
  174. package/dist/lib/version.js +1 -1
  175. package/dist/lib/windsurf-hooks-hierarchy.js +6 -23
  176. package/dist/platform/launch.d.ts +11 -0
  177. package/dist/platform/launch.js +11 -0
  178. package/dist/templates/CLAUDE.md +30 -40
  179. package/dist/templates/cc-native/.claude/settings.json +26 -36
  180. package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
  181. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +20 -12
  182. package/dist/templates/cc-native/_cc-native/cc-native.config.json +2 -6
  183. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +39 -59
  184. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +9 -11
  185. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +2 -2
  186. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +4 -5
  187. package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +4 -4
  188. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -27
  189. package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +7 -7
  190. package/dist/templates/cc-native/_cc-native/lib-ts/.mocharc.json +9 -0
  191. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/aggregate-agents.test.ts +118 -0
  192. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/artifacts.test.ts +234 -0
  193. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/cc-native-state.test.ts +170 -0
  194. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/cli-output-parser.test.ts +73 -0
  195. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/config.test.ts +64 -0
  196. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/constants.test.ts +40 -0
  197. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/debug.test.ts +42 -0
  198. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/exports.test.ts +58 -0
  199. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/helpers.ts +107 -0
  200. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/add-plan-context.hook.test.ts +97 -0
  201. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/plan-questions.hook.test.ts +81 -0
  202. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/hooks/plan-review.hook.test.ts +71 -0
  203. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/json-parser.test.ts +99 -0
  204. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/orchestrator-agent.test.ts +288 -0
  205. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/orchestrator.test.ts +48 -0
  206. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/reviewers.test.ts +32 -0
  207. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/state.test.ts +124 -0
  208. package/dist/templates/cc-native/_cc-native/lib-ts/__tests__/verdict.test.ts +93 -0
  209. package/dist/templates/cc-native/_cc-native/lib-ts/agent-selection.ts +163 -0
  210. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +6 -14
  211. package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/format.ts +597 -599
  212. package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/index.ts +26 -26
  213. package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/tracker.ts +106 -107
  214. package/dist/templates/cc-native/_cc-native/{artifacts/lib → lib-ts/artifacts}/write.ts +118 -119
  215. package/dist/templates/cc-native/_cc-native/lib-ts/artifacts.ts +21 -0
  216. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +17 -16
  217. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +132 -10
  218. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
  219. package/dist/templates/cc-native/_cc-native/lib-ts/constants.ts +6 -6
  220. package/dist/templates/cc-native/_cc-native/lib-ts/corroboration.ts +119 -0
  221. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +2 -3
  222. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/graduation.ts +132 -132
  223. package/dist/templates/cc-native/_cc-native/lib-ts/index.ts +88 -86
  224. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +5 -6
  225. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/orchestrator.ts +70 -70
  226. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/output-builder.ts +130 -121
  227. package/dist/templates/cc-native/_cc-native/lib-ts/package-lock.json +1679 -0
  228. package/dist/templates/cc-native/_cc-native/lib-ts/package.json +24 -0
  229. package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +5 -5
  230. package/dist/templates/cc-native/_cc-native/lib-ts/plan-enhancement.ts +1 -6
  231. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/plan-questions.ts +101 -101
  232. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/review-pipeline.ts +511 -543
  233. package/dist/templates/cc-native/_cc-native/lib-ts/reviewers/__tests__/agent-providers.test.ts +262 -0
  234. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/agent.ts +71 -85
  235. package/dist/templates/{_shared/lib-ts/agent-exec → cc-native/_cc-native/lib-ts/reviewers/base}/base-agent.ts +138 -150
  236. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/index.ts +12 -12
  237. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/claude-agent.ts +66 -57
  238. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/codex-agent.ts +185 -200
  239. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/gemini-agent.ts +39 -40
  240. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/providers/orchestrator-claude-agent.ts +196 -225
  241. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/schemas.ts +201 -201
  242. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/reviewers/types.ts +21 -23
  243. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/__tests__/hyde.test.ts +365 -0
  244. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/__tests__/ollama-client.test.ts +223 -0
  245. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/embedding-indexer.ts +12 -16
  246. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/hyde.ts +3 -2
  247. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/index.ts +31 -31
  248. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +7 -8
  249. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/ollama-client.ts +7 -9
  250. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +16 -19
  251. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-indexer.ts +37 -41
  252. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-loader.ts +33 -43
  253. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/transcript-searcher.ts +20 -20
  254. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +9 -10
  255. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/vector-store.ts +3 -4
  256. package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +50 -126
  257. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +20 -22
  258. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
  259. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +14 -89
  260. package/dist/templates/cc-native/_cc-native/{plan-review/lib → lib-ts}/verdict.ts +72 -72
  261. package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +38 -1
  262. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/agent-selection.test.ts +345 -0
  263. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/preflight.test.ts +344 -0
  264. package/dist/templates/cc-native/_cc-native/plan-review/lib/agent-selection.ts +38 -16
  265. package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
  266. package/dist/templates/cc-native/_cc-native/scripts/council_debate.ts +242 -0
  267. package/dist/templates/cc-native/_cc-native/scripts/council_debate_simple.ts +294 -0
  268. package/dist/templates/cc-native/_cc-native/{plan-review/workflows → workflows}/specdev.md +9 -9
  269. package/dist/templates/core/.claude/skills/codex/SKILL.md +25 -0
  270. package/dist/templates/core/.claude/skills/devin/SKILL.md +25 -0
  271. package/dist/templates/core/.claude/skills/handoff/SKILL.md +11 -0
  272. package/dist/templates/core/.claude/skills/handoff-resume/SKILL.md +11 -0
  273. package/dist/templates/core/.claude/skills/meta-plan/SKILL.md +13 -0
  274. package/dist/templates/core/.codex/skills/codex/SKILL.md +13 -0
  275. package/dist/templates/core/.codex/skills/devin/SKILL.md +19 -0
  276. package/dist/templates/core/.codex/skills/handoff/SKILL.md +11 -0
  277. package/dist/templates/core/.codex/skills/handoff-resume/SKILL.md +11 -0
  278. package/dist/templates/core/.codex/skills/meta-plan/SKILL.md +13 -0
  279. package/dist/templates/core/.devin/AGENTS.md +5 -0
  280. package/dist/templates/core/.devin/config.json +12 -0
  281. package/dist/templates/core/.devin/skills/codex/SKILL.md +19 -0
  282. package/dist/templates/core/.devin/skills/devin/SKILL.md +13 -0
  283. package/dist/templates/core/.devin/skills/handoff/SKILL.md +11 -0
  284. package/dist/templates/core/.devin/skills/handoff-resume/SKILL.md +11 -0
  285. package/dist/templates/core/.devin/skills/meta-plan/SKILL.md +13 -0
  286. package/dist/templates/core/.windsurf/workflows/handoff-resume.md +9 -0
  287. package/dist/templates/{_shared → core}/.windsurf/workflows/handoff.md +1 -1
  288. package/dist/templates/{_shared → core}/.windsurf/workflows/meta-plan.md +1 -1
  289. package/dist/templates/core/hooks-ts/_utils/git-state.ts +2 -0
  290. package/dist/templates/{_shared → core}/hooks-ts/archive_plan.ts +15 -44
  291. package/dist/templates/core/hooks-ts/codex_explorer.ts +160 -0
  292. package/dist/templates/{_shared → core}/hooks-ts/context_monitor.ts +23 -55
  293. package/dist/templates/{_shared → core}/hooks-ts/file-suggestion.ts +5 -22
  294. package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
  295. package/dist/templates/core/hooks-ts/pre_compact.ts +36 -0
  296. package/dist/templates/{_shared → core}/hooks-ts/session_end.ts +38 -78
  297. package/dist/templates/{_shared → core}/hooks-ts/session_start.ts +5 -5
  298. package/dist/templates/core/hooks-ts/task_create_capture.ts +32 -0
  299. package/dist/templates/{_shared → core}/hooks-ts/task_update_capture.ts +9 -24
  300. package/dist/templates/core/hooks-ts/user_prompt_submit.ts +46 -0
  301. package/dist/templates/{_shared → core}/lib-ts/CLAUDE.md +27 -16
  302. package/dist/templates/{_shared → core}/lib-ts/context/CLAUDE.md +9 -6
  303. package/dist/templates/{_shared → core}/lib-ts/context/context-formatter.ts +16 -21
  304. package/dist/templates/{_shared → core}/lib-ts/context/context-selector.ts +8 -6
  305. package/dist/templates/{_shared → core}/lib-ts/context/context-store.ts +59 -20
  306. package/dist/templates/{_shared → core}/lib-ts/context/plan-manager.ts +19 -15
  307. package/dist/templates/{_shared → core}/lib-ts/context/task-tracker.ts +3 -3
  308. package/dist/templates/core/lib-ts/hooks/context-monitor-logic.ts +32 -0
  309. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/hooks}/hook-utils.ts +179 -41
  310. package/dist/templates/core/lib-ts/hooks/prompt-binding-logic.ts +80 -0
  311. package/dist/templates/core/lib-ts/hooks/session-end-logic.ts +82 -0
  312. package/dist/templates/core/lib-ts/package.json +19 -0
  313. package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +369 -0
  314. package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +108 -0
  315. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/atomic-write.ts +12 -7
  316. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/cli-args.ts +24 -8
  317. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/constants.ts +326 -324
  318. package/dist/templates/core/lib-ts/runtime/executable-policy.ts +89 -0
  319. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/git-state.ts +6 -4
  320. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/inference.ts +60 -23
  321. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/lint-dispatch.ts +25 -23
  322. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/logger.ts +32 -29
  323. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/models.ts +9 -2
  324. package/dist/templates/core/lib-ts/runtime/platform-adapter.ts +33 -0
  325. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/preflight.ts +4 -3
  326. package/dist/templates/core/lib-ts/runtime/sentinel-ipc.ts +91 -0
  327. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/state-io.ts +20 -11
  328. package/dist/templates/core/lib-ts/runtime/stop-words.ts +185 -0
  329. package/dist/templates/core/lib-ts/runtime/subprocess-utils.ts +147 -0
  330. package/dist/templates/core/lib-ts/runtime/tmux-preflight.ts +93 -0
  331. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/utils.ts +34 -4
  332. package/dist/templates/core/lib-ts/schemas.ts +233 -0
  333. package/dist/templates/{_shared → core}/lib-ts/templates/formatters.ts +7 -5
  334. package/dist/templates/{_shared → core}/lib-ts/templates/plan-context.ts +2 -1
  335. package/dist/templates/{_shared → core}/lib-ts/tsconfig.json +3 -1
  336. package/dist/templates/{_shared → core}/lib-ts/types.ts +78 -77
  337. package/dist/templates/core/scripts/resolve-run.ts +93 -0
  338. package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
  339. package/dist/templates/{_shared → core}/scripts/status_line.ts +26 -21
  340. package/dist/templates/core/skills/codex/CLAUDE.md +83 -0
  341. package/dist/templates/{_shared → core}/skills/codex/SKILL.md +27 -18
  342. package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +79 -113
  343. package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +134 -148
  344. package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
  345. package/dist/templates/core/skills/devin/CLAUDE.md +122 -0
  346. package/dist/templates/core/skills/devin/SKILL.md +73 -0
  347. package/dist/templates/core/skills/devin/lib/devin-watcher.ts +300 -0
  348. package/dist/templates/core/skills/devin/scripts/launch-devin.ts +258 -0
  349. package/dist/templates/{_shared → core}/skills/handoff-system/CLAUDE.md +436 -433
  350. package/dist/templates/{_shared → core}/skills/handoff-system/lib/document-generator.ts +9 -7
  351. package/dist/templates/{_shared → core}/skills/handoff-system/lib/handoff-reader.ts +6 -4
  352. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/resume_handoff.ts +10 -8
  353. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/save_handoff.ts +12 -10
  354. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff-resume.md +2 -2
  355. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff.md +6 -5
  356. package/dist/templates/{_shared → core}/skills/meta-plan/CLAUDE.md +2 -1
  357. package/dist/templates/{_shared → core}/skills/meta-plan/workflows/meta-plan.md +8 -7
  358. package/oclif.manifest.json +89 -13
  359. package/package.json +13 -12
  360. package/dist/lib/base-command.d.ts +0 -114
  361. package/dist/lib/base-command.js +0 -153
  362. package/dist/lib/env-compat.d.ts +0 -18
  363. package/dist/lib/env-compat.js +0 -23
  364. package/dist/lib/stdin.d.ts +0 -48
  365. package/dist/lib/stdin.js +0 -60
  366. package/dist/templates/_shared/.claude/settings.json +0 -120
  367. package/dist/templates/_shared/.claude/skills/codex/SKILL.md +0 -35
  368. package/dist/templates/_shared/.claude/skills/handoff/SKILL.md +0 -13
  369. package/dist/templates/_shared/.claude/skills/handoff-resume/SKILL.md +0 -13
  370. package/dist/templates/_shared/.claude/skills/meta-plan/SKILL.md +0 -43
  371. package/dist/templates/_shared/.codex/workflows/codex.md +0 -11
  372. package/dist/templates/_shared/.codex/workflows/handoff.md +0 -226
  373. package/dist/templates/_shared/.codex/workflows/meta-plan.md +0 -347
  374. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +0 -2
  375. package/dist/templates/_shared/hooks-ts/pre_compact.ts +0 -49
  376. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +0 -48
  377. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
  378. package/dist/templates/_shared/lib-ts/agent-exec/backends/headless.ts +0 -33
  379. package/dist/templates/_shared/lib-ts/agent-exec/backends/index.ts +0 -6
  380. package/dist/templates/_shared/lib-ts/agent-exec/backends/tmux.ts +0 -119
  381. package/dist/templates/_shared/lib-ts/agent-exec/execution-backend.ts +0 -50
  382. package/dist/templates/_shared/lib-ts/agent-exec/index.ts +0 -6
  383. package/dist/templates/_shared/lib-ts/agent-exec/structured-output.ts +0 -166
  384. package/dist/templates/_shared/lib-ts/base/launchers/tmux-launcher.ts +0 -173
  385. package/dist/templates/_shared/lib-ts/base/launchers/window-launcher.ts +0 -93
  386. package/dist/templates/_shared/lib-ts/base/launchers/wt-launcher.ts +0 -64
  387. package/dist/templates/_shared/lib-ts/base/pane-launcher.ts +0 -55
  388. package/dist/templates/_shared/lib-ts/base/sentinel-ipc.ts +0 -87
  389. package/dist/templates/_shared/lib-ts/base/stop-words.ts +0 -184
  390. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +0 -249
  391. package/dist/templates/_shared/lib-ts/base/tmux-driver.ts +0 -341
  392. package/dist/templates/_shared/lib-ts/base/tmux-pane-placement.ts +0 -78
  393. package/dist/templates/_shared/lib-ts/package.json +0 -20
  394. package/dist/templates/_shared/scripts/resolve-run.ts +0 -62
  395. package/dist/templates/_shared/skills/codex/CLAUDE.md +0 -70
  396. package/dist/templates/cc-native/_cc-native/CLAUDE.md +0 -73
  397. package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +0 -64
  398. package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +0 -70
  399. package/dist/templates/cc-native/_cc-native/plan-review/CODING-STANDARDS-CHECKLIST.md +0 -75
  400. package/dist/templates/cc-native/_cc-native/plan-review/agents/CLAUDE.md +0 -143
  401. package/dist/templates/cc-native/_cc-native/plan-review/agents/PLAN-ORCHESTRATOR.md +0 -213
  402. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-questions/PLAN-QUESTIONER.md +0 -70
  403. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-EVOLUTION.md +0 -62
  404. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-PATTERNS.md +0 -61
  405. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ARCH-STRUCTURE.md +0 -62
  406. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/ASSUMPTION-TRACER.md +0 -56
  407. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CLARITY-AUDITOR.md +0 -53
  408. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-FEASIBILITY.md +0 -66
  409. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-GAPS.md +0 -70
  410. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/COMPLETENESS-ORDERING.md +0 -62
  411. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/CONSTRAINT-VALIDATOR.md +0 -72
  412. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-ADR-VALIDATOR.md +0 -61
  413. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DESIGN-SCALE-MATCHER.md +0 -64
  414. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DEVILS-ADVOCATE.md +0 -56
  415. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/DOCUMENTATION-PHILOSOPHY.md +0 -86
  416. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HANDOFF-READINESS.md +0 -59
  417. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/HIDDEN-COMPLEXITY.md +0 -58
  418. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/INCREMENTAL-DELIVERY.md +0 -66
  419. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-DEPENDENCY.md +0 -62
  420. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-FMEA.md +0 -66
  421. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-PREMORTEM.md +0 -71
  422. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/RISK-REVERSIBILITY.md +0 -74
  423. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SCOPE-BOUNDARY.md +0 -77
  424. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SIMPLICITY-GUARDIAN.md +0 -62
  425. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/SKEPTIC.md +0 -68
  426. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-BEHAVIOR-AUDITOR.md +0 -61
  427. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-CHARACTERIZATION.md +0 -71
  428. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-FIRST-VALIDATOR.md +0 -61
  429. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TESTDRIVEN-PYRAMID-ANALYZER.md +0 -61
  430. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-COSTS.md +0 -67
  431. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/TRADEOFF-STAKEHOLDERS.md +0 -65
  432. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-COVERAGE.md +0 -74
  433. package/dist/templates/cc-native/_cc-native/plan-review/agents/plan-review/VERIFY-STRENGTH.md +0 -69
  434. package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +0 -172
  435. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +0 -7
@@ -3,114 +3,116 @@
3
3
  * Re-exports the public API from all modules.
4
4
  */
5
5
 
6
- // Artifacts
7
- export {
8
- buildCombinedJson,
9
- buildHighIssuesDocument,
10
- buildInlineReviewSummary,
11
- extractTopIssuesText,
12
- formatCombinedMarkdown,
13
- formatReviewMarkdown,
14
- generateReviewIndex,
15
- writeCombinedArtifacts,
16
- } from "../artifacts/lib/index.js";
17
-
18
- // Orchestrator
19
- export { buildOrchestratorSchema, runOrchestrator } from "../plan-review/lib/orchestrator.js";
20
-
21
- // Reviewers
22
- export {
23
- AgentReviewer,
24
- runAgentReview,
25
- } from "../plan-review/lib/reviewers/index.js";
26
-
27
- // Verdict aggregation
28
- export { computeReviewDecision, worstVerdict } from "../plan-review/lib/verdict.js";
29
-
30
- // Agent aggregation
31
- export {
32
- aggregateAgents,
33
- extractBody,
34
- extractFrontmatter,
35
- } from "./aggregate-agents.js";
6
+ // Types & schemas
7
+ export type {
8
+ Verdict,
9
+ ReviewDecision,
10
+ ComplexityCategory,
11
+ ReviewIssue,
12
+ ReviewData,
13
+ ReviewerResult,
14
+ OrchestratorResult,
15
+ CombinedReviewResult,
16
+ ReviewDecisionResult,
17
+ AgentConfig,
18
+ OrchestratorConfig,
19
+ IterationState,
20
+ IterationEntry,
21
+ CcNativeState,
22
+ PlanReviewState,
23
+ QuestionsAskedState,
24
+ StuckDetectionState,
25
+ PlanReviewConfig,
26
+ DisplaySettings,
27
+ ReviewOptions,
28
+ Reviewer,
29
+ } from "./types.js";
36
30
 
37
- // CC-native state
38
31
  export {
39
- getCcNativeState,
40
- isPlanAlreadyReviewed,
41
- markPlanReviewed,
42
- markQuestionsAsked,
43
- saveCcNativeState,
44
- wasPlanPreviouslyDenied,
45
- wasQuestionsAsked,
46
- } from "./cc-native-state.js";
47
-
48
- // CLI output parsing
49
- export { parseCliOutput } from "./cli-output-parser.js";
50
-
51
- // Configuration
52
- export { getDisplaySettings, loadConfig } from "./config.js";
32
+ REVIEW_SCHEMA,
33
+ ORCHESTRATOR_SCHEMA,
34
+ REVIEW_PROMPT_PREFIX,
35
+ AGENT_REVIEW_PROMPT_PREFIX,
36
+ DEFAULT_DISPLAY,
37
+ DEFAULT_SANITIZATION,
38
+ } from "./types.js";
53
39
 
54
40
  // Constants & security
55
41
  export {
56
- ENABLE_PLAN_NOTIFICATIONS,
57
42
  ENABLE_ROBUST_PLAN_WRITES,
58
- MAX_ERROR_FILE_SIZE,
43
+ ENABLE_PLAN_NOTIFICATIONS,
44
+ PLANS_DIR,
59
45
  MAX_PLAN_PATH_LENGTH,
46
+ MAX_ERROR_FILE_SIZE,
60
47
  MAX_RETRY_ATTEMPTS,
61
- MAX_TOTAL_RETRY_TIME_MS,
62
- PLANS_DIR,
63
48
  RETRY_BACKOFF_MS,
49
+ MAX_TOTAL_RETRY_TIME_MS,
64
50
  validatePlanPath,
65
51
  } from "./constants.js";
66
52
 
67
- // Debug logging
68
- export { cleanupDebugFolder, debugLog, debugRaw, getDebugDir } from "./debug.js";
53
+ // Verdict aggregation
54
+ export { worstVerdict, computeReviewDecision } from "./verdict.js";
69
55
 
70
56
  // JSON parsing
71
- export { coerceToReview, parseJsonMaybe } from "./json-parser.js";
57
+ export { parseJsonMaybe, coerceToReview } from "./json-parser.js";
58
+
59
+ // CLI output parsing
60
+ export { parseCliOutput } from "./cli-output-parser.js";
61
+
62
+ // Configuration
63
+ export { loadConfig, getDisplaySettings } from "./config.js";
64
+
65
+ // Debug logging
66
+ export { debugLog, debugRaw, getDebugDir, cleanupDebugFolder } from "./debug.js";
67
+
68
+ // CC-native state
69
+ export {
70
+ getCcNativeState,
71
+ saveCcNativeState,
72
+ isPlanAlreadyReviewed,
73
+ wasPlanPreviouslyDenied,
74
+ markPlanReviewed,
75
+ wasQuestionsAsked,
76
+ markQuestionsAsked,
77
+ getStuckDetectionState,
78
+ updateStuckDetectionState,
79
+ } from "./cc-native-state.js";
72
80
 
73
81
  // Iteration state
74
82
  export {
75
- DEFAULT_REVIEW_ITERATIONS,
76
- deleteState,
77
- getIterationState,
78
83
  getStateFilePath,
79
84
  loadState,
80
85
  saveStateToPlan,
81
- shouldContinueIterating,
86
+ deleteState,
87
+ getIterationState,
82
88
  updateIterationState,
89
+ shouldContinueIterating,
83
90
  } from "./state.js";
84
91
 
85
- // Types & schemas
86
- export type {
87
- AgentConfig,
88
- CcNativeState,
89
- CombinedReviewResult,
90
- ComplexityCategory,
91
- DisplaySettings,
92
- IterationEntry,
93
- IterationState,
94
- OrchestratorConfig,
95
- OrchestratorResult,
96
- PlanReviewConfig,
97
- PlanReviewState,
98
- QuestionsAskedState,
99
- ReviewData,
100
- ReviewDecision,
101
- ReviewDecisionResult,
102
- Reviewer,
103
- ReviewerResult,
104
- ReviewIssue,
105
- ReviewOptions,
106
- Verdict,
107
- } from "./types.js";
92
+ // Orchestrator
93
+ export { runOrchestrator, buildOrchestratorSchema } from "./orchestrator.js";
108
94
 
95
+ // Agent aggregation
109
96
  export {
110
- AGENT_REVIEW_PROMPT_PREFIX,
111
- DEFAULT_DISPLAY,
112
- DEFAULT_SANITIZATION,
113
- ORCHESTRATOR_SCHEMA,
114
- REVIEW_PROMPT_PREFIX,
115
- REVIEW_SCHEMA,
116
- } from "./types.js";
97
+ aggregateAgents,
98
+ extractFrontmatter,
99
+ extractBody,
100
+ } from "./aggregate-agents.js";
101
+
102
+ // Artifacts
103
+ export {
104
+ formatReviewMarkdown,
105
+ formatCombinedMarkdown,
106
+ buildInlineReviewSummary,
107
+ extractTopIssuesText,
108
+ buildHighIssuesDocument,
109
+ generateReviewIndex,
110
+ buildCombinedJson,
111
+ writeCombinedArtifacts,
112
+ } from "./artifacts.js";
113
+
114
+ // Reviewers
115
+ export {
116
+ AgentReviewer,
117
+ runAgentReview,
118
+ } from "./reviewers/index.js";
@@ -3,8 +3,8 @@
3
3
  * See cc-native-plan-review-spec.md §4.10-4.11
4
4
  */
5
5
 
6
+ import { logDebug, logWarn } from "../../_core/lib-ts/runtime/logger.js";
6
7
  import type { ReviewData, Verdict } from "./types.js";
7
- import { logDebug, logWarn } from "../../_shared/lib-ts/base/logger.js";
8
8
 
9
9
  /**
10
10
  * Try strict JSON parse. If that fails, attempt to extract the first {...} block.
@@ -16,12 +16,12 @@ import { logDebug, logWarn } from "../../_shared/lib-ts/base/logger.js";
16
16
  export function parseJsonMaybe(
17
17
  text: string,
18
18
  requireFields?: string[],
19
- ): null | Record<string, unknown> {
19
+ ): Record<string, unknown> | null {
20
20
  const trimmed = text.trim();
21
21
  if (!trimmed) return null;
22
22
 
23
- let obj: null | Record<string, unknown> = null;
24
- let parseMethod: null | string = null;
23
+ let obj: Record<string, unknown> | null = null;
24
+ let parseMethod: string | null = null;
25
25
 
26
26
  // Strict parse
27
27
  try {
@@ -93,7 +93,7 @@ export function parseJsonMaybe(
93
93
  * @returns Tuple of [ok, verdict, normalizedData]
94
94
  */
95
95
  export function coerceToReview(
96
- obj: null | Record<string, unknown>,
96
+ obj: Record<string, unknown> | null,
97
97
  defaultFixMsg = "Retry or check configuration.",
98
98
  ): [boolean, Verdict, ReviewData] {
99
99
  if (!obj) {
@@ -144,7 +144,6 @@ export function coerceToReview(
144
144
  `verdict=${obj.verdict}, issues_count=${Array.isArray(obj.issues) ? (obj.issues as unknown[]).length : 0}`,
145
145
  );
146
146
  }
147
-
148
147
  if (!obj.issues) {
149
148
  logDebug("coerce", "issues array empty or missing");
150
149
  }
@@ -1,70 +1,70 @@
1
- /**
2
- * Plan orchestrator — analyzes complexity and selects reviewer agents.
3
- * Uses OrchestratorClaudeAgent (BaseCliAgent framework) for subprocess execution.
4
- * See cc-native-plan-review-spec.md §4.8
5
- */
6
-
7
- import { OrchestratorClaudeAgent } from "./reviewers/providers/orchestrator-claude-agent.js";
8
- import { logInfo, logWarn } from "../../../_shared/lib-ts/base/logger.js";
9
- import type { AgentConfig, AgentReviewSettings, OrchestratorConfig, OrchestratorResult } from "../../lib-ts/types.js";
10
-
11
- // Re-export for backward compatibility (moved to reviewers/schemas.ts)
12
- export { buildOrchestratorSchema } from "./reviewers/schemas.js";
13
-
14
- // ---------------------------------------------------------------------------
15
- // Orchestrator
16
- // ---------------------------------------------------------------------------
17
-
18
- /**
19
- * Run the orchestrator agent to analyze plan complexity and select reviewers.
20
- * Never throws — returns fallback OrchestratorResult on failure.
21
- */
22
- export async function runOrchestrator(
23
- plan: string,
24
- agentLibrary: AgentConfig[],
25
- config: OrchestratorConfig,
26
- settings: AgentReviewSettings,
27
- mandatoryNames?: Set<string>,
28
- ): Promise<OrchestratorResult> {
29
- logInfo("orchestrator", "Starting plan analysis...");
30
-
31
- const mandatory = mandatoryNames ?? new Set<string>();
32
-
33
- // Create a synthetic AgentConfig for the orchestrator
34
- const orchestratorAgent: AgentConfig = {
35
- name: "orchestrator",
36
- model: config.model,
37
- provider: config.provider ?? "claude",
38
- focus: "plan analysis and agent selection",
39
- categories: [],
40
- description: "Plan orchestrator",
41
- system_prompt: "",
42
- };
43
-
44
- try {
45
- const agent = new OrchestratorClaudeAgent(
46
- orchestratorAgent,
47
- agentLibrary,
48
- mandatory,
49
- settings,
50
- config.timeout,
51
- );
52
-
53
- const result = await agent.review(plan);
54
-
55
- logInfo("orchestrator", `Result: complexity=${result.complexity}, category=${result.category}, agents=${JSON.stringify(result.selected_agents)}`);
56
-
57
- return result;
58
- } catch (error) {
59
- logWarn("orchestrator", `Unexpected error: ${error}`);
60
- const nonMandatory = agentLibrary.filter((a) => !mandatory.has(a.name));
61
- const fallbackCount = settings.agentSelection?.fallbackCount ?? 2;
62
- return {
63
- complexity: "medium",
64
- category: "code",
65
- selected_agents: nonMandatory.slice(0, fallbackCount).map((a) => a.name),
66
- reasoning: `Orchestrator failed: ${error}`,
67
- error: String(error),
68
- };
69
- }
70
- }
1
+ /**
2
+ * Plan orchestrator — analyzes complexity and selects reviewer agents.
3
+ * Uses OrchestratorClaudeAgent (BaseCliAgent framework) for subprocess execution.
4
+ * See cc-native-plan-review-spec.md §4.8
5
+ */
6
+
7
+ import { logInfo, logWarn } from "../../_core/lib-ts/runtime/logger.js";
8
+ import type { AgentConfig, OrchestratorConfig, OrchestratorResult } from "./types.js";
9
+ import { OrchestratorClaudeAgent } from "./reviewers/providers/orchestrator-claude-agent.js";
10
+
11
+ // Re-export for backward compatibility (moved to reviewers/schemas.ts)
12
+ export { buildOrchestratorSchema } from "./reviewers/schemas.js";
13
+
14
+ // ---------------------------------------------------------------------------
15
+ // Orchestrator
16
+ // ---------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Run the orchestrator agent to analyze plan complexity and select reviewers.
20
+ * Never throws — returns fallback OrchestratorResult on failure.
21
+ */
22
+ export async function runOrchestrator(
23
+ plan: string,
24
+ agentLibrary: AgentConfig[],
25
+ config: OrchestratorConfig,
26
+ settings: Record<string, unknown>,
27
+ mandatoryNames?: Set<string>,
28
+ ): Promise<OrchestratorResult> {
29
+ logInfo("orchestrator", "Starting plan analysis...");
30
+
31
+ const mandatory = mandatoryNames ?? new Set<string>();
32
+
33
+ // Create a synthetic AgentConfig for the orchestrator
34
+ const orchestratorAgent: AgentConfig = {
35
+ name: "orchestrator",
36
+ model: config.model,
37
+ provider: "claude",
38
+ focus: "plan analysis and agent selection",
39
+ categories: [],
40
+ description: "Plan orchestrator",
41
+ system_prompt: "",
42
+ };
43
+
44
+ try {
45
+ const agent = new OrchestratorClaudeAgent(
46
+ orchestratorAgent,
47
+ agentLibrary,
48
+ mandatory,
49
+ settings,
50
+ config.timeout,
51
+ );
52
+
53
+ const result = await agent.review(plan);
54
+
55
+ logInfo("orchestrator", `Result: complexity=${result.complexity}, category=${result.category}, agents=${JSON.stringify(result.selected_agents)}`);
56
+
57
+ return result;
58
+ } catch (e) {
59
+ logWarn("orchestrator", `Unexpected error: ${e}`);
60
+ const nonMandatory = agentLibrary.filter((a) => !mandatory.has(a.name));
61
+ const fallbackCount = ((settings.agentSelection as Record<string, unknown>)?.fallbackCount as number) ?? 2;
62
+ return {
63
+ complexity: "medium",
64
+ category: "code",
65
+ selected_agents: nonMandatory.slice(0, fallbackCount).map((a) => a.name),
66
+ reasoning: `Orchestrator failed: ${e}`,
67
+ error: String(e),
68
+ };
69
+ }
70
+ }
@@ -1,121 +1,130 @@
1
- /**
2
- * Output construction: issue truncation, verdict override, message building.
3
- * Extracted from cc-native-plan-review.ts.
4
- */
5
-
6
- import { logInfo } from "../../../_shared/lib-ts/base/logger.js";
7
- import {
8
- buildInlineReviewSummary,
9
- extractTopIssuesText,
10
- } from "../../artifacts/lib/format.js";
11
- import type {
12
- ReviewerResult,
13
- CombinedReviewResult,
14
- CorroborationResult,
15
- IterationState,
16
- } from "../../lib-ts/types.js";
17
-
18
- const HOOK = "output-builder";
19
-
20
- const REVIEWER_CAVEAT = "Reviewers have limited context compared to your full session — use your judgment to adopt valid points and dismiss genuine false positives. However, treat false positives as a clarity signal: if a reviewer misunderstood your plan, an agent executing it will likely hit the same confusion. Revise those sections to be unambiguous so no future reader — human or AI — makes the same mistake.";
21
- const RESUBMIT_INSTRUCTION = "IMPORTANT: After revising the plan file, you MUST call ExitPlanMode again to trigger re-review. Do not end your turn or ask the user without calling ExitPlanMode.";
22
-
23
- // ---------------------------------------------------------------------------
24
- // Issue Truncation
25
- // ---------------------------------------------------------------------------
26
-
27
- /**
28
- * Truncate per-agent issues to top N by severity.
29
- * Mutates agentResults[name].data.issues in place.
30
- */
31
- export function truncateAgentIssues(
32
- agentResults: Record<string, ReviewerResult>,
33
- maxPerAgent: number,
34
- ): void {
35
- for (const r of Object.values(agentResults)) {
36
- if (!Array.isArray(r.data?.issues)) continue;
37
- const issues = r.data.issues as Array<{ severity?: string }>;
38
- if (issues.length <= maxPerAgent) continue;
39
- const severityOrder: Record<string, number> = { high: 0, medium: 1, low: 2 };
40
- issues.sort((a, b) => (severityOrder[a.severity ?? "low"] ?? 2) - (severityOrder[b.severity ?? "low"] ?? 2));
41
- const originalCount = issues.length;
42
- r.data.issues = issues.slice(0, maxPerAgent);
43
- logInfo(HOOK, `${r.name}: truncated issues ${originalCount} → ${maxPerAgent}`);
44
- }
45
- }
46
-
47
- // ---------------------------------------------------------------------------
48
- // Verdict Override
49
- // ---------------------------------------------------------------------------
50
-
51
- /**
52
- * Override verdict to "fail" for agents exceeding high-issue threshold.
53
- * Mutates agentResults[name].verdict in place.
54
- */
55
- export function overrideVerdictsByThreshold(
56
- agentResults: Record<string, ReviewerResult>,
57
- threshold: number,
58
- ): void {
59
- for (const r of Object.values(agentResults)) {
60
- if (!r.verdict || r.verdict === "skip" || r.verdict === "error") continue;
61
- const issues = Array.isArray(r.data?.issues) ? r.data.issues as Array<{ severity?: string }> : [];
62
- const agentHigh = issues.filter(i => i.severity === "high").length;
63
- if (agentHigh >= threshold) {
64
- logInfo(HOOK, `${r.name}: verdict overridden to 'fail' (${agentHigh} high issues >= ${threshold})`);
65
- r.verdict = "fail";
66
- }
67
- }
68
- }
69
-
70
- // ---------------------------------------------------------------------------
71
- // Output Building
72
- // ---------------------------------------------------------------------------
73
-
74
- export interface ReviewOutputParams {
75
- combinedResult: CombinedReviewResult;
76
- corroborationResult: CorroborationResult;
77
- iterationState: IterationState;
78
- reviewFile: string;
79
- highIssuesPath: string;
80
- }
81
-
82
- export interface ReviewOutput {
83
- contextText: string;
84
- blockReason: string;
85
- shouldDeny: boolean;
86
- }
87
-
88
- /**
89
- * Build the final review output: context text and block reason.
90
- */
91
- export function buildReviewOutput(params: ReviewOutputParams): ReviewOutput {
92
- const { combinedResult, corroborationResult, iterationState } = params;
93
-
94
- const shouldDeny = corroborationResult.blocking.length > 0;
95
- const reviewScore = shouldDeny ? 1 : 0;
96
- const overall = corroborationResult.verdict;
97
-
98
- // Build inline summary (no individual issues — those go in blockReason)
99
- const inlineSummary = buildInlineReviewSummary(combinedResult, 0, 800, corroborationResult);
100
- const contextParts = [inlineSummary];
101
- contextParts.push(`\nFull review: \`${params.reviewFile}\`\n`);
102
-
103
- const contextText = contextParts.join("");
104
- const iterInfo = ` (iteration ${iterationState.current}/${iterationState.max}, score=${reviewScore.toFixed(2)})`;
105
-
106
- let blockReason: string;
107
- if (shouldDeny) {
108
- const topIssuesText = extractTopIssuesText(combinedResult, 15, "high");
109
- blockReason = `Plan review FAILED${iterInfo}. ` +
110
- `High-severity issues:\n${topIssuesText}\n\n` +
111
- `Full details: \`${params.highIssuesPath}\`\n` +
112
- `${REVIEWER_CAVEAT} ` +
113
- `Revise the plan to address these issues, then call ExitPlanMode again. ` +
114
- RESUBMIT_INSTRUCTION;
115
- } else {
116
- blockReason = `Plan review ${overall.toUpperCase()}${iterInfo}. Review complete. ${REVIEWER_CAVEAT}`;
117
- }
118
-
119
- return { contextText, blockReason, shouldDeny };
120
- }
121
-
1
+ /**
2
+ * Output construction: issue truncation, verdict override, message building.
3
+ * Extracted from cc-native-plan-review.ts.
4
+ */
5
+
6
+ import { logInfo } from "../../_core/lib-ts/runtime/logger.js";
7
+
8
+ import type {
9
+ ReviewerResult,
10
+ CombinedReviewResult,
11
+ CorroborationResult,
12
+ IterationState,
13
+ } from "./types.js";
14
+ import {
15
+ buildInlineReviewSummary,
16
+ extractTopIssuesText,
17
+ } from "./artifacts/format.js";
18
+ import { extractTopIssuesForTracker } from "./graduation.js";
19
+
20
+ const HOOK = "output-builder";
21
+
22
+ const REVIEWER_CAVEAT = "Reviewers have limited context compared to your full session — use your judgment to adopt valid points and dismiss genuine false positives. However, treat false positives as a clarity signal: if a reviewer misunderstood your plan, an agent executing it will likely hit the same confusion. Revise those sections to be unambiguous so no future reader — human or AI — makes the same mistake.";
23
+ const RESUBMIT_INSTRUCTION = "IMPORTANT: After revising the plan file, you MUST call ExitPlanMode again to trigger re-review. Do not end your turn or ask the user without calling ExitPlanMode.";
24
+
25
+ // ---------------------------------------------------------------------------
26
+ // Issue Truncation
27
+ // ---------------------------------------------------------------------------
28
+
29
+ /**
30
+ * Truncate per-agent issues to top N by severity.
31
+ * @mutates agentResults[name].data.issues in place.
32
+ */
33
+ export function truncateAgentIssues(
34
+ agentResults: Record<string, ReviewerResult>,
35
+ maxPerAgent: number,
36
+ ): void {
37
+ for (const r of Object.values(agentResults)) {
38
+ if (!Array.isArray(r.data?.issues)) continue;
39
+ const issues = r.data.issues as Array<{ severity?: string }>;
40
+ if (issues.length <= maxPerAgent) continue;
41
+ const severityOrder: Record<string, number> = { high: 0, medium: 1, low: 2 };
42
+ issues.sort((a, b) => (severityOrder[a.severity ?? "low"] ?? 2) - (severityOrder[b.severity ?? "low"] ?? 2));
43
+ const originalCount = issues.length;
44
+ r.data.issues = issues.slice(0, maxPerAgent);
45
+ logInfo(HOOK, `${r.name}: truncated issues ${originalCount} → ${maxPerAgent}`);
46
+ }
47
+ }
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Verdict Override
51
+ // ---------------------------------------------------------------------------
52
+
53
+ /**
54
+ * Override verdict to "fail" for agents exceeding high-issue threshold.
55
+ * @mutates agentResults[name].verdict in place.
56
+ */
57
+ export function overrideVerdictsByThreshold(
58
+ agentResults: Record<string, ReviewerResult>,
59
+ threshold: number,
60
+ ): void {
61
+ for (const r of Object.values(agentResults)) {
62
+ if (!r.verdict || r.verdict === "skip" || r.verdict === "error") continue;
63
+ const issues = Array.isArray(r.data?.issues) ? r.data.issues as Array<{ severity?: string }> : [];
64
+ const agentHigh = issues.filter(i => i.severity === "high").length;
65
+ if (agentHigh >= threshold) {
66
+ logInfo(HOOK, `${r.name}: verdict overridden to 'fail' (${agentHigh} high issues >= ${threshold})`);
67
+ r.verdict = "fail";
68
+ }
69
+ }
70
+ }
71
+
72
+ // ---------------------------------------------------------------------------
73
+ // Output Building
74
+ // ---------------------------------------------------------------------------
75
+
76
+ export interface ReviewOutputParams {
77
+ combinedResult: CombinedReviewResult;
78
+ corroborationResult: CorroborationResult;
79
+ iterationState: IterationState;
80
+ reviewFile: string;
81
+ highIssuesPath: string;
82
+ }
83
+
84
+ export interface ReviewOutput {
85
+ contextText: string;
86
+ blockReason: string;
87
+ shouldDeny: boolean;
88
+ }
89
+
90
+ /**
91
+ * Build the final review output: context text and block reason.
92
+ */
93
+ export function buildReviewOutput(params: ReviewOutputParams): ReviewOutput {
94
+ const { combinedResult, corroborationResult, iterationState } = params;
95
+
96
+ const shouldDeny = corroborationResult.blocking.length > 0;
97
+ const reviewScore = shouldDeny ? 1.0 : 0.0;
98
+ const overall = corroborationResult.verdict;
99
+
100
+ // Build inline summary
101
+ const inlineSummary = buildInlineReviewSummary(combinedResult, 5, 800, corroborationResult);
102
+ const contextParts = [inlineSummary];
103
+
104
+ // Top issues
105
+ const topIssuesList = extractTopIssuesForTracker(combinedResult, 5);
106
+ if (topIssuesList.length > 0) {
107
+ contextParts.push(`\nTop high-severity issues:\n${topIssuesList.map(i => `- ${i}`).join("\n")}`);
108
+ }
109
+ contextParts.push(`\nFull review: \`${params.reviewFile}\`\n`);
110
+
111
+ const contextText = contextParts.join("");
112
+ const iterInfo = ` (iteration ${iterationState.current}/${iterationState.max}, score=${reviewScore.toFixed(2)})`;
113
+
114
+ let blockReason: string;
115
+ if (shouldDeny) {
116
+ const topIssuesText = extractTopIssuesText(combinedResult, 3, "high");
117
+ blockReason = `Plan review FAILED${iterInfo}. ` +
118
+ `Critical issues: ${topIssuesText}. ` +
119
+ `IMPORTANT: Read \`${params.highIssuesPath}\` for ALL high-severity issues — ` +
120
+ `this file contains only the most critical findings, no noise. ` +
121
+ `${REVIEWER_CAVEAT} ` +
122
+ `Revise the plan to address these issues, then call ExitPlanMode again. ` +
123
+ RESUBMIT_INSTRUCTION;
124
+ } else {
125
+ blockReason = `Plan review ${overall.toUpperCase()}${iterInfo}. Review complete. ${REVIEWER_CAVEAT}`;
126
+ }
127
+
128
+ return { contextText, blockReason, shouldDeny };
129
+ }
130
+