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
@@ -13,13 +13,17 @@
13
13
  *
14
14
  * @module lib/template-settings-reconstructor
15
15
  */
16
+ import type { ClaudeSettings } from './claude-settings-types.js';
16
17
  /**
17
18
  * Reconstruct .claude/settings.json and .windsurf/hooks.json from the union
18
19
  * of all specified templates.
19
20
  *
21
+ * Note: Codex content is file-based today (`.codex/skills/*`) and does not
22
+ * have a merged settings artifact, so it is intentionally ignored here.
23
+ *
20
24
  * The function:
21
25
  * 1. Starts with empty settings
22
- * 2. Merges _shared template settings (when active templates exist)
26
+ * 2. Merges core template settings (when active templates exist)
23
27
  * 3. For each active template, merges its template-source settings
24
28
  * 4. Writes the result to the IDE settings file
25
29
  *
@@ -30,6 +34,7 @@
30
34
  *
31
35
  * @param targetDir - Project root directory
32
36
  * @param activeTemplates - Template names to include (e.g., ['cc-native', 'bmad'])
33
- * @param ides - IDEs to reconstruct for (e.g., ['claude', 'windsurf'])
37
+ * @param ides - IDEs to reconstruct for (currently claude/windsurf)
34
38
  */
35
39
  export declare function reconstructIdeSettings(targetDir: string, activeTemplates: string[], ides: string[]): Promise<void>;
40
+ export declare function normalizeTemplateSettingsPaths(settings: ClaudeSettings): ClaudeSettings;
@@ -14,19 +14,24 @@
14
14
  * @module lib/template-settings-reconstructor
15
15
  */
16
16
  import { join } from 'node:path';
17
+ import { getCoreClaudeSettingsBase, getCoreWindsurfHooksBase } from './core-ide-base.js';
17
18
  import { mergeClaudeSettings } from './hooks-merger.js';
18
19
  import { IdePathResolver } from './ide-path-resolver.js';
20
+ import { adaptHookCommand, validateCommandsForPlatform } from './platform-commands.js';
19
21
  import { readClaudeSettings, writeClaudeSettings } from './settings-hierarchy.js';
20
- import { getSharedTemplatePath, getTemplatePath } from './template-resolver.js';
22
+ import { getTemplatePath } from './template-resolver.js';
21
23
  import { getTargetHooksFile, readWindsurfHooks, writeWindsurfHooks } from './windsurf-hooks-hierarchy.js';
22
24
  import { mergeWindsurfHooks } from './windsurf-hooks-merger.js';
23
25
  /**
24
26
  * Reconstruct .claude/settings.json and .windsurf/hooks.json from the union
25
27
  * of all specified templates.
26
28
  *
29
+ * Note: Codex content is file-based today (`.codex/skills/*`) and does not
30
+ * have a merged settings artifact, so it is intentionally ignored here.
31
+ *
27
32
  * The function:
28
33
  * 1. Starts with empty settings
29
- * 2. Merges _shared template settings (when active templates exist)
34
+ * 2. Merges core template settings (when active templates exist)
30
35
  * 3. For each active template, merges its template-source settings
31
36
  * 4. Writes the result to the IDE settings file
32
37
  *
@@ -37,87 +42,113 @@ import { mergeWindsurfHooks } from './windsurf-hooks-merger.js';
37
42
  *
38
43
  * @param targetDir - Project root directory
39
44
  * @param activeTemplates - Template names to include (e.g., ['cc-native', 'bmad'])
40
- * @param ides - IDEs to reconstruct for (e.g., ['claude', 'windsurf'])
45
+ * @param ides - IDEs to reconstruct for (currently claude/windsurf)
41
46
  */
42
47
  export async function reconstructIdeSettings(targetDir, activeTemplates, ides) {
43
- const sharedTemplatePath = getSharedTemplatePath();
44
48
  if (ides.includes('claude')) {
45
- await reconstructClaudeSettings(targetDir, activeTemplates, sharedTemplatePath);
49
+ await reconstructClaudeSettings(targetDir, activeTemplates);
46
50
  }
47
51
  if (ides.includes('windsurf')) {
48
- await reconstructWindsurfHooks(targetDir, activeTemplates, sharedTemplatePath);
52
+ await reconstructWindsurfHooks(targetDir, activeTemplates);
49
53
  }
50
54
  }
51
55
  /**
52
56
  * Reconstruct .claude/settings.json from scratch using template sources.
53
57
  */
54
- async function reconstructClaudeSettings(targetDir, activeTemplates, sharedTemplatePath) {
58
+ async function reconstructClaudeSettings(targetDir, activeTemplates) {
55
59
  const resolver = new IdePathResolver(targetDir);
56
60
  const settingsPath = resolver.getClaudeSettings();
57
- // Read existing settings to preserve non-template fields (methods tracking, etc.)
58
- const existingSettings = await readClaudeSettings(settingsPath);
59
- // Preserve the methods tracking from existing settings
60
- const methodsTracking = existingSettings?.methods;
61
- // Start from empty and merge all template settings
62
- let reconstructed = {};
63
- // 1. Merge _shared template settings (only when active templates exist that need them)
64
- if (activeTemplates.length > 0) {
65
- const sharedSettingsPath = join(sharedTemplatePath, '.claude', 'settings.json');
66
- const sharedSettings = await readClaudeSettings(sharedSettingsPath);
67
- if (sharedSettings) {
68
- reconstructed = mergeClaudeSettings(reconstructed, sharedSettings);
69
- }
70
- }
71
- // 2. Merge each active template's settings (sequential for deterministic merge order)
61
+ // Start from core-owned base settings, then merge method templates.
62
+ let reconstructed = getCoreClaudeSettingsBase();
63
+ // Merge each active template's settings (sequential for deterministic merge order)
72
64
  for (const template of activeTemplates) {
65
+ let templateSettingsPath = `<unresolved:${template}>/.claude/settings.json`;
73
66
  try {
74
67
  const templatePath = await getTemplatePath(template); // eslint-disable-line no-await-in-loop
75
- const templateSettingsPath = join(templatePath, '.claude', 'settings.json');
68
+ templateSettingsPath = join(templatePath, '.claude', 'settings.json');
76
69
  const templateSettings = await readClaudeSettings(templateSettingsPath); // eslint-disable-line no-await-in-loop
77
70
  if (templateSettings) {
78
- reconstructed = mergeClaudeSettings(reconstructed, templateSettings);
71
+ reconstructed = mergeClaudeSettings(reconstructed, normalizeTemplateSettingsPaths(templateSettings));
79
72
  }
80
73
  }
81
- catch {
82
- // Template not found — skip
74
+ catch (error) {
75
+ reportTemplateMergeFailure('claude', template, templateSettingsPath, error);
83
76
  }
84
77
  }
85
- // 3. Restore methods tracking
86
- if (methodsTracking && Object.keys(methodsTracking).length > 0) {
87
- reconstructed.methods = methodsTracking;
88
- }
78
+ // 3. Platform-adapt hook commands (Windows cmd.exe compatibility)
79
+ reconstructed = adaptSettingsForPlatform(reconstructed);
89
80
  // 4. Write reconstructed settings
90
81
  await writeClaudeSettings(settingsPath, reconstructed);
91
82
  }
92
83
  /**
93
84
  * Reconstruct .windsurf/hooks.json from scratch using template sources.
94
85
  */
95
- async function reconstructWindsurfHooks(targetDir, activeTemplates, sharedTemplatePath) {
86
+ async function reconstructWindsurfHooks(targetDir, activeTemplates) {
96
87
  const hooksPath = getTargetHooksFile(targetDir);
97
- // Start from empty
98
- let reconstructed = { hooks: {} };
99
- // 1. Merge _shared template hooks (only when active templates exist that need them)
100
- if (activeTemplates.length > 0) {
101
- const sharedHooksPath = join(sharedTemplatePath, '.windsurf', 'hooks.json');
102
- const sharedHooks = await readWindsurfHooks(sharedHooksPath);
103
- if (sharedHooks) {
104
- reconstructed = mergeWindsurfHooks(reconstructed, sharedHooks);
105
- }
106
- }
107
- // 2. Merge each active template's hooks (sequential for deterministic merge order)
88
+ // Start from core-owned base hooks.
89
+ let reconstructed = getCoreWindsurfHooksBase();
90
+ // Merge each active template's hooks (sequential for deterministic merge order)
108
91
  for (const template of activeTemplates) {
92
+ let templateHooksPath = `<unresolved:${template}>/.windsurf/hooks.json`;
109
93
  try {
110
94
  const templatePath = await getTemplatePath(template); // eslint-disable-line no-await-in-loop
111
- const templateHooksPath = join(templatePath, '.windsurf', 'hooks.json');
95
+ templateHooksPath = join(templatePath, '.windsurf', 'hooks.json');
112
96
  const templateHooks = await readWindsurfHooks(templateHooksPath); // eslint-disable-line no-await-in-loop
113
97
  if (templateHooks) {
114
98
  reconstructed = mergeWindsurfHooks(reconstructed, templateHooks);
115
99
  }
116
100
  }
117
- catch {
118
- // Template not found — skip
101
+ catch (error) {
102
+ reportTemplateMergeFailure('windsurf', template, templateHooksPath, error);
119
103
  }
120
104
  }
121
105
  // 3. Write reconstructed hooks
122
106
  await writeWindsurfHooks(hooksPath, reconstructed);
123
107
  }
108
+ /**
109
+ * Adapt all command strings in settings for the current platform.
110
+ * On Windows: rewrites commands for cmd.exe compatibility.
111
+ * Validates adapted commands and fails fast if unknown remain non-portable.
112
+ */
113
+ function adaptSettingsForPlatform(settings) {
114
+ const result = { ...settings };
115
+ const allCommands = [];
116
+ // Adapt top-level command configs
117
+ if (result.statusLine && 'command' in result.statusLine) {
118
+ result.statusLine = { ...result.statusLine, command: adaptHookCommand(result.statusLine.command) };
119
+ allCommands.push(result.statusLine.command);
120
+ }
121
+ if (result.fileSuggestion && 'command' in result.fileSuggestion) {
122
+ result.fileSuggestion = { ...result.fileSuggestion, command: adaptHookCommand(result.fileSuggestion.command) };
123
+ allCommands.push(result.fileSuggestion.command);
124
+ }
125
+ // Adapt all hook commands
126
+ if (result.hooks) {
127
+ const adapted = {};
128
+ for (const [event, matchers] of Object.entries(result.hooks)) {
129
+ if (!matchers)
130
+ continue;
131
+ adapted[event] = matchers.map((matcher) => ({
132
+ ...matcher,
133
+ hooks: matcher.hooks.map((hook) => {
134
+ if (hook.type !== 'command')
135
+ return hook;
136
+ const adaptedCmd = adaptHookCommand(hook.command);
137
+ allCommands.push(adaptedCmd);
138
+ return { ...hook, command: adaptedCmd };
139
+ }),
140
+ }));
141
+ }
142
+ result.hooks = adapted;
143
+ }
144
+ // Validate: fail fast if unknown command still contains bash-only syntax on Windows
145
+ validateCommandsForPlatform(allCommands);
146
+ return result;
147
+ }
148
+ function reportTemplateMergeFailure(ide, template, settingsPath, error) {
149
+ const reason = error instanceof Error ? error.message : String(error);
150
+ process.stderr.write(`[warn] Failed to merge ${ide} template "${template}" from ${settingsPath}: ${reason}\n`);
151
+ }
152
+ export function normalizeTemplateSettingsPaths(settings) {
153
+ return structuredClone(settings);
154
+ }
@@ -0,0 +1,12 @@
1
+ export interface TerminalConfig {
2
+ cmd: string;
3
+ getArgs: (command: string) => string[];
4
+ }
5
+ export type WindowsShellPreference = 'default' | 'git-bash' | 'mintty';
6
+ export type WindowsTerminalStrategy = 'git-bash-in-wt' | 'mintty' | 'powershell-fallback' | 'windows-terminal';
7
+ export declare function defaultShell(): string;
8
+ export declare const LINUX_TERMINALS: TerminalConfig[];
9
+ export declare function resolveWindowsTerminalStrategy(preference: WindowsShellPreference, gitBashPath: null | string, minttyExists: boolean, powershellCmd: string): WindowsTerminalStrategy[];
10
+ export declare function detectPowerShell(isAvailable: (command: string) => boolean): string;
11
+ export declare function isWSL(env?: NodeJS.ProcessEnv): boolean;
12
+ export declare function findAvailableLinuxTerminal(isAvailable: (command: string, platform?: NodeJS.Platform) => boolean): null | TerminalConfig;
@@ -0,0 +1,55 @@
1
+ export function defaultShell() {
2
+ return process.env.SHELL || 'bash';
3
+ }
4
+ export const LINUX_TERMINALS = (() => {
5
+ const shell = defaultShell();
6
+ return [
7
+ { cmd: 'x-terminal-emulator', getArgs: (command) => ['-e', `${shell} -c "${command}; exec ${shell}"`] },
8
+ { cmd: 'gnome-terminal', getArgs: (command) => ['--', shell, '-c', `${command}; exec ${shell}`] },
9
+ { cmd: 'konsole', getArgs: (command) => ['-e', `${shell} -c "${command}; exec ${shell}"`] },
10
+ { cmd: 'xterm', getArgs: (command) => ['-e', `${shell} -c "${command}; exec ${shell}"`] },
11
+ ];
12
+ })();
13
+ export function resolveWindowsTerminalStrategy(preference, gitBashPath, minttyExists, powershellCmd) {
14
+ const strategies = [];
15
+ if (preference === 'mintty') {
16
+ if (minttyExists && gitBashPath) {
17
+ strategies.push('mintty');
18
+ }
19
+ if (gitBashPath) {
20
+ strategies.push('git-bash-in-wt');
21
+ }
22
+ else {
23
+ strategies.push('windows-terminal');
24
+ }
25
+ }
26
+ else if (preference === 'git-bash') {
27
+ if (gitBashPath) {
28
+ strategies.push('git-bash-in-wt');
29
+ }
30
+ else {
31
+ strategies.push('windows-terminal');
32
+ }
33
+ }
34
+ else {
35
+ strategies.push('windows-terminal');
36
+ }
37
+ if (powershellCmd) {
38
+ strategies.push('powershell-fallback');
39
+ }
40
+ return [...new Set(strategies)];
41
+ }
42
+ export function detectPowerShell(isAvailable) {
43
+ return isAvailable('pwsh') ? 'pwsh' : 'powershell';
44
+ }
45
+ export function isWSL(env = process.env) {
46
+ return Boolean(env['WSL_DISTRO_NAME']);
47
+ }
48
+ export function findAvailableLinuxTerminal(isAvailable) {
49
+ for (const terminal of LINUX_TERMINALS) {
50
+ if (isAvailable(terminal.cmd, 'linux')) {
51
+ return terminal;
52
+ }
53
+ }
54
+ return null;
55
+ }
@@ -6,9 +6,9 @@
6
6
  *
7
7
  * ## Supported Platforms
8
8
  * - **Windows**: Windows Terminal (wt.exe) with PowerShell 7 (pwsh) fallback to PowerShell 5.1
9
- * - **macOS**: Terminal.app via AppleScript
9
+ * - **macOS**: Terminal.app via `open` + temporary `.command` script
10
10
  * - **WSL**: Windows Terminal (wt.exe) via wsl.exe, falls back to Linux emulators
11
- * - **Linux**: gnome-terminal, konsole, xterm, x-terminal-emulator (in order of preference)
11
+ * - **Linux**: x-terminal-emulator, gnome-terminal, konsole, xterm (in order of preference)
12
12
  *
13
13
  * ## Usage
14
14
  * ```typescript
@@ -27,6 +27,29 @@
27
27
  *
28
28
  * @module lib/terminal
29
29
  */
30
+ import { type WindowsShellPreference } from './terminal-strategy.js';
31
+ /** @internal */
32
+ export interface SpawnArgs {
33
+ args: string[];
34
+ command: string;
35
+ }
36
+ /** @internal */
37
+ export declare function resolveTerminalPlatform(platform: NodeJS.Platform, isWSLResult: boolean): 'darwin' | 'linux' | 'windows' | 'wsl';
38
+ /** @internal */
39
+ export declare function buildMacTerminalScriptContent(cwd: string, command: string, shellPath?: string): string;
40
+ /** @internal */
41
+ export declare function buildMacTerminalSpawnArgs(scriptPath: string): SpawnArgs;
42
+ /** @internal */
43
+ export declare function buildWindowsTerminalSpawnArgs(cwd: string, command: string, powershellCmd: string): SpawnArgs;
44
+ /** @internal */
45
+ export declare function buildPowerShellFallbackSpawnArgs(cwd: string, command: string, powershellCmd: string): SpawnArgs;
46
+ /** @internal */
47
+ export declare function buildLinuxTerminalSpawnArgs(cwd: string, command: string, terminalInfo: {
48
+ cmd: string;
49
+ getArgs: (cmd: string) => string[];
50
+ }): SpawnArgs;
51
+ /** @internal */
52
+ export declare function buildWSLTerminalSpawnArgs(cwd: string, command: string): SpawnArgs;
30
53
  /**
31
54
  * Options for launching a new terminal window.
32
55
  */
@@ -44,6 +67,13 @@ interface TerminalLaunchOptions {
44
67
  * If provided, debug messages will be passed to this function.
45
68
  */
46
69
  debugLog?: (message: string) => void;
70
+ /**
71
+ * Preferred shell when launching on Windows.
72
+ * - default: Existing behavior (PowerShell in wt or fallback)
73
+ * - mintty: Prefer mintty + Git Bash, fallback to git-bash in wt, then PowerShell
74
+ * - git-bash: Prefer Git Bash in wt, fallback to PowerShell if unavailable
75
+ */
76
+ windowsShellPreference?: WindowsShellPreference;
47
77
  }
48
78
  /**
49
79
  * Result of a terminal launch operation.
@@ -64,9 +94,9 @@ interface TerminalLaunchResult {
64
94
  * This function automatically detects the platform and uses the appropriate
65
95
  * terminal emulator:
66
96
  * - **Windows**: Windows Terminal (wt.exe) with PowerShell, falls back to PowerShell directly
67
- * - **macOS**: Terminal.app via AppleScript
97
+ * - **macOS**: Terminal.app via `open` + temporary `.command` script
68
98
  * - **WSL**: Windows Terminal (wt.exe) via wsl.exe, falls back to Linux terminals
69
- * - **Linux**: Tries gnome-terminal, konsole, xterm, x-terminal-emulator in order
99
+ * - **Linux**: Tries x-terminal-emulator, gnome-terminal, konsole, xterm in order
70
100
  *
71
101
  * The terminal is launched in detached mode, allowing the parent process to exit
72
102
  * without affecting the new terminal.