aiwcli 0.15.5 → 0.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +6 -3
  2. package/dist/capabilities/branch/adapters.d.ts +2 -0
  3. package/dist/capabilities/branch/adapters.js +21 -0
  4. package/dist/capabilities/branch/contracts.d.ts +57 -0
  5. package/dist/capabilities/branch/contracts.js +1 -0
  6. package/dist/capabilities/branch/control-plane.d.ts +2 -0
  7. package/dist/capabilities/branch/control-plane.js +343 -0
  8. package/dist/capabilities/branch/runtime-core.d.ts +5 -0
  9. package/dist/capabilities/branch/runtime-core.js +36 -0
  10. package/dist/capabilities/installation/control-plane/clean-command.d.ts +41 -0
  11. package/dist/capabilities/installation/control-plane/clean-command.js +196 -0
  12. package/dist/capabilities/installation/control-plane/clear-command.d.ts +160 -0
  13. package/dist/capabilities/installation/control-plane/clear-command.js +1220 -0
  14. package/dist/capabilities/installation/control-plane/init-command.d.ts +81 -0
  15. package/dist/capabilities/installation/control-plane/init-command.js +449 -0
  16. package/dist/capabilities/launch/contracts.d.ts +51 -0
  17. package/dist/capabilities/launch/contracts.js +1 -0
  18. package/dist/capabilities/launch/control-plane/execute-launch.d.ts +2 -0
  19. package/dist/capabilities/launch/control-plane/execute-launch.js +222 -0
  20. package/dist/capabilities/launch/runtime-core/launch-options.d.ts +14 -0
  21. package/dist/capabilities/launch/runtime-core/launch-options.js +69 -0
  22. package/dist/cli/base-command.d.ts +18 -0
  23. package/dist/cli/base-command.js +55 -0
  24. package/dist/commands/branch.d.ts +0 -20
  25. package/dist/commands/branch.js +24 -416
  26. package/dist/commands/clean.d.ts +1 -41
  27. package/dist/commands/clean.js +1 -196
  28. package/dist/commands/clear.d.ts +1 -161
  29. package/dist/commands/clear.js +1 -1121
  30. package/dist/commands/init/index.d.ts +1 -98
  31. package/dist/commands/init/index.js +4 -478
  32. package/dist/commands/launch.d.ts +36 -11
  33. package/dist/commands/launch.js +135 -159
  34. package/dist/lib/base-command.d.ts +1 -114
  35. package/dist/lib/base-command.js +1 -153
  36. package/dist/lib/claude-settings-types.d.ts +31 -19
  37. package/dist/lib/context/context-formatter.d.ts +74 -0
  38. package/dist/lib/context/context-formatter.js +493 -0
  39. package/dist/lib/context/context-selector.d.ts +42 -0
  40. package/dist/lib/context/context-selector.js +451 -0
  41. package/dist/lib/context/context-store.d.ts +100 -0
  42. package/dist/lib/context/context-store.js +618 -0
  43. package/dist/lib/context/plan-manager.d.ts +54 -0
  44. package/dist/lib/context/plan-manager.js +282 -0
  45. package/dist/lib/context/task-tracker.d.ts +44 -0
  46. package/dist/lib/context/task-tracker.js +146 -0
  47. package/dist/lib/core-ide-base.d.ts +4 -0
  48. package/dist/lib/core-ide-base.js +77 -0
  49. package/dist/lib/core-installer.d.ts +5 -0
  50. package/dist/lib/core-installer.js +54 -0
  51. package/dist/lib/git-exclude-manager.d.ts +2 -2
  52. package/dist/lib/git-exclude-manager.js +3 -3
  53. package/dist/lib/hooks/hook-utils.d.ts +143 -0
  54. package/dist/lib/hooks/hook-utils.js +609 -0
  55. package/dist/lib/hooks/session-end-logic.d.ts +5 -0
  56. package/dist/lib/hooks/session-end-logic.js +63 -0
  57. package/dist/lib/hooks-merger.js +25 -19
  58. package/dist/lib/ide-path-resolver.d.ts +19 -7
  59. package/dist/lib/ide-path-resolver.js +25 -9
  60. package/dist/lib/install-state.d.ts +34 -0
  61. package/dist/lib/install-state.js +161 -0
  62. package/dist/lib/launch-options.d.ts +1 -0
  63. package/dist/lib/launch-options.js +1 -0
  64. package/dist/lib/lsp-patch.d.ts +12 -0
  65. package/dist/lib/lsp-patch.js +156 -0
  66. package/dist/lib/multiplexer.d.ts +57 -0
  67. package/dist/lib/multiplexer.js +19 -0
  68. package/dist/lib/multiplexers/psmux.d.ts +75 -0
  69. package/dist/lib/multiplexers/psmux.js +384 -0
  70. package/dist/lib/multiplexers/tmux.d.ts +44 -0
  71. package/dist/lib/multiplexers/tmux.js +262 -0
  72. package/dist/lib/mux-utils.d.ts +5 -0
  73. package/dist/lib/mux-utils.js +42 -0
  74. package/dist/lib/paths.d.ts +2 -2
  75. package/dist/lib/paths.js +2 -2
  76. package/dist/lib/platform-commands.d.ts +27 -0
  77. package/dist/lib/platform-commands.js +49 -0
  78. package/dist/lib/runtime/aiw-cli.d.ts +37 -0
  79. package/dist/lib/runtime/aiw-cli.js +74 -0
  80. package/dist/lib/runtime/atomic-write.d.ts +19 -0
  81. package/dist/lib/runtime/atomic-write.js +121 -0
  82. package/dist/lib/runtime/cli-args.d.ts +55 -0
  83. package/dist/lib/runtime/cli-args.js +185 -0
  84. package/dist/lib/runtime/constants.d.ts +56 -0
  85. package/dist/lib/runtime/constants.js +230 -0
  86. package/dist/lib/runtime/executable-policy.d.ts +16 -0
  87. package/dist/lib/runtime/executable-policy.js +57 -0
  88. package/dist/lib/runtime/git-state.d.ts +9 -0
  89. package/dist/lib/runtime/git-state.js +59 -0
  90. package/dist/lib/runtime/inference.d.ts +37 -0
  91. package/dist/lib/runtime/inference.js +262 -0
  92. package/dist/lib/runtime/lint-dispatch.d.ts +40 -0
  93. package/dist/lib/runtime/lint-dispatch.js +285 -0
  94. package/dist/lib/runtime/logger.d.ts +66 -0
  95. package/dist/lib/runtime/logger.js +201 -0
  96. package/dist/lib/runtime/models.d.ts +14 -0
  97. package/dist/lib/runtime/models.js +14 -0
  98. package/dist/lib/runtime/platform-adapter.d.ts +7 -0
  99. package/dist/lib/runtime/platform-adapter.js +21 -0
  100. package/dist/lib/runtime/preflight.d.ts +24 -0
  101. package/dist/lib/runtime/preflight.js +65 -0
  102. package/dist/lib/runtime/sentinel-ipc.d.ts +14 -0
  103. package/dist/lib/runtime/sentinel-ipc.js +67 -0
  104. package/dist/lib/runtime/state-io.d.ts +30 -0
  105. package/dist/lib/runtime/state-io.js +174 -0
  106. package/dist/lib/runtime/stop-words.d.ts +20 -0
  107. package/dist/lib/runtime/stop-words.js +150 -0
  108. package/dist/lib/runtime/subprocess-utils.d.ts +29 -0
  109. package/dist/lib/runtime/subprocess-utils.js +96 -0
  110. package/dist/lib/runtime/tmux-preflight.d.ts +13 -0
  111. package/dist/lib/runtime/tmux-preflight.js +78 -0
  112. package/dist/lib/runtime/utils.d.ts +54 -0
  113. package/dist/lib/runtime/utils.js +162 -0
  114. package/dist/lib/sentinel-wrapper.d.ts +9 -0
  115. package/dist/lib/sentinel-wrapper.js +20 -0
  116. package/dist/lib/shell-quoting.d.ts +5 -0
  117. package/dist/lib/shell-quoting.js +17 -0
  118. package/dist/lib/spawn-errors.d.ts +6 -0
  119. package/dist/lib/spawn-errors.js +15 -0
  120. package/dist/lib/spawn.js +5 -11
  121. package/dist/lib/template-installer.d.ts +4 -5
  122. package/dist/lib/template-installer.js +36 -34
  123. package/dist/lib/template-resolver.d.ts +6 -7
  124. package/dist/lib/template-resolver.js +26 -21
  125. package/dist/lib/template-settings-reconstructor.d.ts +7 -2
  126. package/dist/lib/template-settings-reconstructor.js +76 -45
  127. package/dist/lib/terminal-strategy.d.ts +11 -0
  128. package/dist/lib/terminal-strategy.js +49 -0
  129. package/dist/lib/terminal.d.ts +28 -0
  130. package/dist/lib/terminal.js +162 -112
  131. package/dist/lib/tmux-pane-placement.d.ts +17 -0
  132. package/dist/lib/tmux-pane-placement.js +58 -0
  133. package/dist/lib/tmux-primitives.d.ts +5 -0
  134. package/dist/lib/tmux-primitives.js +15 -0
  135. package/dist/lib/tmux-session.d.ts +32 -0
  136. package/dist/lib/tmux-session.js +86 -0
  137. package/dist/lib/tty-detection.js +1 -1
  138. package/dist/lib/types.d.ts +168 -0
  139. package/dist/lib/types.js +6 -0
  140. package/dist/lib/version.d.ts +1 -1
  141. package/dist/lib/version.js +1 -1
  142. package/dist/platform/launch.d.ts +10 -0
  143. package/dist/platform/launch.js +10 -0
  144. package/dist/templates/CLAUDE.md +31 -40
  145. package/dist/templates/cc-native/.claude/settings.json +27 -27
  146. package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
  147. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +10 -9
  148. package/dist/templates/cc-native/_cc-native/CLAUDE.md +18 -18
  149. package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +3 -3
  150. package/dist/templates/cc-native/_cc-native/artifacts/lib/format.ts +14 -14
  151. package/dist/templates/cc-native/_cc-native/artifacts/lib/tracker.ts +1 -1
  152. package/dist/templates/cc-native/_cc-native/artifacts/lib/write.ts +3 -3
  153. package/dist/templates/cc-native/_cc-native/cc-native.config.json +3 -3
  154. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +16 -15
  155. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +3 -3
  156. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +2 -2
  157. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +2 -2
  158. package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +3 -3
  159. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -2
  160. package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +3 -3
  161. package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +8 -8
  162. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +1 -1
  163. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +4 -4
  164. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +1 -1
  165. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
  166. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +1 -1
  167. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +1 -1
  168. package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +2 -2
  169. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +1 -1
  170. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +2 -2
  171. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +1 -1
  172. package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +8 -8
  173. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +3 -3
  174. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
  175. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +3 -3
  176. package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +3 -1
  177. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/agent-selection.test.ts +345 -0
  178. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/preflight.test.ts +344 -0
  179. package/dist/templates/cc-native/_cc-native/plan-review/lib/agent-selection.ts +37 -15
  180. package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +16 -69
  181. package/dist/templates/cc-native/_cc-native/plan-review/lib/orchestrator.ts +1 -1
  182. package/dist/templates/cc-native/_cc-native/plan-review/lib/output-builder.ts +1 -1
  183. package/dist/templates/cc-native/_cc-native/plan-review/lib/plan-questions.ts +2 -2
  184. package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
  185. package/dist/templates/cc-native/_cc-native/plan-review/lib/review-pipeline.ts +7 -7
  186. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/agent.ts +4 -4
  187. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +3 -3
  188. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/index.ts +1 -1
  189. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/claude-agent.ts +2 -2
  190. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/codex-agent.ts +4 -4
  191. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/gemini-agent.ts +1 -1
  192. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/orchestrator-claude-agent.ts +5 -6
  193. package/dist/templates/core/.codex/workflows/codex.md +17 -0
  194. package/dist/templates/core/.codex/workflows/handoff.md +5 -0
  195. package/dist/templates/core/.codex/workflows/meta-plan.md +7 -0
  196. package/dist/templates/core/.cognition/AGENTS.md +5 -0
  197. package/dist/templates/core/.cognition/config.json +12 -0
  198. package/dist/templates/{_shared → core}/.windsurf/workflows/handoff.md +1 -1
  199. package/dist/templates/{_shared → core}/.windsurf/workflows/meta-plan.md +1 -1
  200. package/dist/templates/core/hooks-ts/_utils/git-state.ts +2 -0
  201. package/dist/templates/{_shared → core}/hooks-ts/archive_plan.ts +14 -23
  202. package/dist/templates/core/hooks-ts/codex_explorer.ts +160 -0
  203. package/dist/templates/{_shared → core}/hooks-ts/context_monitor.ts +23 -55
  204. package/dist/templates/{_shared → core}/hooks-ts/file-suggestion.ts +4 -3
  205. package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
  206. package/dist/templates/{_shared → core}/hooks-ts/pre_compact.ts +5 -5
  207. package/dist/templates/{_shared → core}/hooks-ts/session_end.ts +38 -78
  208. package/dist/templates/{_shared → core}/hooks-ts/session_start.ts +5 -5
  209. package/dist/templates/core/hooks-ts/task_create_capture.ts +32 -0
  210. package/dist/templates/{_shared → core}/hooks-ts/task_update_capture.ts +9 -24
  211. package/dist/templates/core/hooks-ts/user_prompt_submit.ts +46 -0
  212. package/dist/templates/{_shared → core}/lib-ts/CLAUDE.md +27 -16
  213. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/headless.ts +3 -2
  214. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/tmux.ts +44 -15
  215. package/dist/templates/{_shared → core}/lib-ts/agent-exec/base-agent.ts +6 -4
  216. package/dist/templates/{_shared → core}/lib-ts/agent-exec/execution-backend.ts +1 -1
  217. package/dist/templates/{_shared → core}/lib-ts/agent-exec/index.ts +2 -2
  218. package/dist/templates/{_shared → core}/lib-ts/agent-exec/structured-output.ts +4 -5
  219. package/dist/templates/{_shared → core}/lib-ts/context/CLAUDE.md +9 -6
  220. package/dist/templates/{_shared → core}/lib-ts/context/context-formatter.ts +16 -21
  221. package/dist/templates/{_shared → core}/lib-ts/context/context-selector.ts +8 -6
  222. package/dist/templates/{_shared → core}/lib-ts/context/context-store.ts +32 -20
  223. package/dist/templates/{_shared → core}/lib-ts/context/plan-manager.ts +19 -15
  224. package/dist/templates/{_shared → core}/lib-ts/context/task-tracker.ts +3 -3
  225. package/dist/templates/core/lib-ts/hooks/context-monitor-logic.ts +32 -0
  226. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/hooks}/hook-utils.ts +168 -41
  227. package/dist/templates/core/lib-ts/hooks/prompt-binding-logic.ts +80 -0
  228. package/dist/templates/core/lib-ts/hooks/session-end-logic.ts +93 -0
  229. package/dist/templates/core/lib-ts/package.json +19 -0
  230. package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +295 -0
  231. package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +106 -0
  232. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/atomic-write.ts +12 -7
  233. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/cli-args.ts +8 -6
  234. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/constants.ts +326 -324
  235. package/dist/templates/core/lib-ts/runtime/executable-policy.ts +89 -0
  236. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/git-state.ts +6 -4
  237. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/inference.ts +59 -10
  238. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/lint-dispatch.ts +25 -23
  239. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/logger.ts +32 -29
  240. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/models.ts +2 -2
  241. package/dist/templates/core/lib-ts/runtime/platform-adapter.ts +33 -0
  242. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/preflight.ts +4 -3
  243. package/dist/templates/core/lib-ts/runtime/sentinel-ipc.ts +91 -0
  244. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/state-io.ts +11 -7
  245. package/dist/templates/core/lib-ts/runtime/stop-words.ts +185 -0
  246. package/dist/templates/core/lib-ts/runtime/subprocess-utils.ts +147 -0
  247. package/dist/templates/core/lib-ts/runtime/tmux-preflight.ts +93 -0
  248. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/utils.ts +4 -3
  249. package/dist/templates/{_shared → core}/lib-ts/templates/formatters.ts +7 -5
  250. package/dist/templates/{_shared → core}/lib-ts/templates/plan-context.ts +2 -1
  251. package/dist/templates/{_shared → core}/lib-ts/tsconfig.json +3 -1
  252. package/dist/templates/{_shared → core}/lib-ts/types.ts +78 -77
  253. package/dist/templates/core/scripts/resolve-run.ts +61 -0
  254. package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
  255. package/dist/templates/{_shared → core}/scripts/status_line.ts +25 -20
  256. package/dist/templates/core/skills/codex/CLAUDE.md +78 -0
  257. package/dist/templates/{_shared → core}/skills/codex/SKILL.md +21 -18
  258. package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +76 -103
  259. package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +119 -133
  260. package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
  261. package/dist/templates/core/skills/devin/CLAUDE.md +65 -0
  262. package/dist/templates/core/skills/devin/SKILL.md +73 -0
  263. package/dist/templates/core/skills/devin/lib/devin-watcher.ts +280 -0
  264. package/dist/templates/core/skills/devin/scripts/launch-devin.ts +257 -0
  265. package/dist/templates/{_shared → core}/skills/handoff-system/CLAUDE.md +436 -433
  266. package/dist/templates/{_shared → core}/skills/handoff-system/lib/document-generator.ts +9 -7
  267. package/dist/templates/{_shared → core}/skills/handoff-system/lib/handoff-reader.ts +6 -4
  268. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/resume_handoff.ts +10 -8
  269. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/save_handoff.ts +12 -10
  270. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff-resume.md +2 -2
  271. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff.md +6 -5
  272. package/dist/templates/{_shared → core}/skills/meta-plan/CLAUDE.md +2 -1
  273. package/dist/templates/{_shared → core}/skills/meta-plan/workflows/meta-plan.md +8 -7
  274. package/oclif.manifest.json +89 -13
  275. package/package.json +13 -12
  276. package/dist/templates/_shared/.claude/settings.json +0 -120
  277. package/dist/templates/_shared/.claude/skills/codex/SKILL.md +0 -35
  278. package/dist/templates/_shared/.claude/skills/handoff/SKILL.md +0 -13
  279. package/dist/templates/_shared/.claude/skills/handoff-resume/SKILL.md +0 -13
  280. package/dist/templates/_shared/.claude/skills/meta-plan/SKILL.md +0 -43
  281. package/dist/templates/_shared/.codex/workflows/codex.md +0 -11
  282. package/dist/templates/_shared/.codex/workflows/handoff.md +0 -226
  283. package/dist/templates/_shared/.codex/workflows/meta-plan.md +0 -347
  284. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +0 -2
  285. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +0 -48
  286. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
  287. package/dist/templates/_shared/lib-ts/base/launchers/tmux-launcher.ts +0 -173
  288. package/dist/templates/_shared/lib-ts/base/launchers/window-launcher.ts +0 -93
  289. package/dist/templates/_shared/lib-ts/base/launchers/wt-launcher.ts +0 -64
  290. package/dist/templates/_shared/lib-ts/base/pane-launcher.ts +0 -55
  291. package/dist/templates/_shared/lib-ts/base/sentinel-ipc.ts +0 -87
  292. package/dist/templates/_shared/lib-ts/base/stop-words.ts +0 -184
  293. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +0 -249
  294. package/dist/templates/_shared/lib-ts/base/tmux-driver.ts +0 -341
  295. package/dist/templates/_shared/lib-ts/base/tmux-pane-placement.ts +0 -78
  296. package/dist/templates/_shared/lib-ts/package.json +0 -20
  297. package/dist/templates/_shared/scripts/resolve-run.ts +0 -62
  298. package/dist/templates/_shared/skills/codex/CLAUDE.md +0 -70
  299. /package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/index.ts +0 -0
@@ -0,0 +1,222 @@
1
+ import path from 'node:path';
2
+ import { checkVersionCompatibility, configureTmuxSession, detectMultiplexer, ensureLspPatch, findExecutable, findToolPath, getClaudeCodeVersion, launchTerminal, ProcessSpawnError, quoteForSh, readSentinelExitCode, spawnProcess, waitForSentinelFile, } from '../../../platform/launch.js';
3
+ import { EXIT_CODES } from '../../../types/index.js';
4
+ import { buildSpawnedWindowArgs, buildUniqueSessionName, parseExtraEnv, resolvePromptText, sanitizeSessionName, } from '../runtime-core/launch-options.js';
5
+ function buildCodexArgs(platform) {
6
+ if (platform !== 'win32')
7
+ return ['--yolo'];
8
+ return ['-c', 'shell_type="bash"', '--yolo'];
9
+ }
10
+ function buildDevinArgs() {
11
+ return ['--permission-mode', 'dangerous'];
12
+ }
13
+ function toJsonLaunchResult(result, exitCode) {
14
+ return {
15
+ launched: result.launched,
16
+ backend: result.backend,
17
+ paneId: result.paneId ?? null,
18
+ sentinelPath: result.sentinelPath ?? null,
19
+ exitCode,
20
+ reason: result.reason ?? null,
21
+ };
22
+ }
23
+ async function resolveWaitExitCode(result, wait) {
24
+ if (!wait || !result.launched || !result.sentinelPath) {
25
+ return result.exitCode ?? null;
26
+ }
27
+ const finished = await waitForSentinelFile(result.sentinelPath, 14_400_000);
28
+ return finished ? readSentinelExitCode(result.sentinelPath, 1) : -1;
29
+ }
30
+ export async function executeLaunch(request, dependencies) {
31
+ const { cwd, flags, interactiveTty, platform, readPromptFile } = request;
32
+ const { host, now, pid, tempDir, writePromptFile } = dependencies;
33
+ delete process.env['CLAUDECODE'];
34
+ delete process.env['CLAUDE_CODE_ENTRYPOINT'];
35
+ const useCodex = flags.codex;
36
+ const useDevin = flags.devin;
37
+ if (platform === 'win32' && !useCodex && !useDevin) {
38
+ await ensureLspPatch({
39
+ debugLog: (message) => host.debug(message),
40
+ warn(message) {
41
+ host.warn(message);
42
+ },
43
+ });
44
+ }
45
+ const cliCommand = useDevin ? 'devin' : useCodex ? 'codex' : 'claude';
46
+ const cliArgs = useDevin ? buildDevinArgs() : useCodex ? buildCodexArgs(platform) : ['--dangerously-skip-permissions'];
47
+ const launchFlag = useDevin ? '--devin' : useCodex ? '--codex' : '';
48
+ const disableTmux = flags['no-tmux'];
49
+ const wantJson = flags.json;
50
+ const wantWait = flags.wait;
51
+ let extraEnv = {};
52
+ try {
53
+ extraEnv = parseExtraEnv(flags.env);
54
+ }
55
+ catch (error) {
56
+ host.error(error instanceof Error ? error.message : '--env must be a valid JSON object string', {
57
+ exit: EXIT_CODES.INVALID_USAGE,
58
+ });
59
+ }
60
+ const promptPath = flags['prompt-path']?.trim() || undefined;
61
+ const promptText = resolvePromptText(flags.prompt, flags['prompt-file'], readPromptFile);
62
+ if (flags.new) {
63
+ host.debug(`Launching new terminal in: ${cwd}`);
64
+ let promptFilePath;
65
+ if (!promptPath && promptText) {
66
+ promptFilePath = path.join(tempDir, `aiwcli-prompt-${now()}-${pid}.txt`);
67
+ writePromptFile(promptFilePath, promptText);
68
+ }
69
+ const launchArgs = buildSpawnedWindowArgs({
70
+ useCodex,
71
+ useDevin,
72
+ disableTmux,
73
+ ...(promptPath ? { promptPath } : {}),
74
+ ...(promptFilePath ? { promptFilePath } : {}),
75
+ ...(flags.env ? { rawEnvJson: flags.env } : {}),
76
+ ...(flags['tmux-session'] ? { tmuxSessionFlag: flags['tmux-session'] } : {}),
77
+ });
78
+ const launchCmd = launchArgs.map((arg) => quoteForSh(arg)).join(' ');
79
+ const result = await launchTerminal({
80
+ cwd,
81
+ command: launchCmd,
82
+ windowsShellPreference: platform === 'win32' ? 'mintty' : 'default',
83
+ debugLog: (message) => host.debug(message),
84
+ });
85
+ if (!result.success) {
86
+ host.error(`Failed to launch new terminal: ${result.error}`, { exit: EXIT_CODES.GENERAL_ERROR });
87
+ }
88
+ host.log(`New terminal launched with aiw launch${launchFlag ? ` ${launchFlag}` : ''}`);
89
+ return;
90
+ }
91
+ if (useCodex) {
92
+ host.debug('Launching Codex with --yolo flag');
93
+ }
94
+ else if (useDevin) {
95
+ host.debug('Launching Devin with --permission-mode dangerous');
96
+ }
97
+ const [versionCheck, mux] = await Promise.all([
98
+ useCodex || useDevin
99
+ ? null
100
+ : getClaudeCodeVersion().then((v) => checkVersionCompatibility(v)),
101
+ disableTmux ? null : detectMultiplexer(platform),
102
+ ]);
103
+ if (versionCheck) {
104
+ host.debug(`Claude Code version: ${versionCheck.version ?? 'unknown'}`);
105
+ host.debug(`Compatibility status: ${versionCheck.compatible ? 'compatible' : 'incompatible'}`);
106
+ if (versionCheck.warning) {
107
+ host.warn(versionCheck.warning);
108
+ }
109
+ }
110
+ let exitCode = 0;
111
+ try {
112
+ if (!mux) {
113
+ if (disableTmux) {
114
+ host.logInfo('Multiplexer disabled via --no-tmux — launching inline');
115
+ }
116
+ else if (!interactiveTty) {
117
+ host.logInfo('Non-interactive terminal — launching inline');
118
+ }
119
+ else if (platform === 'win32') {
120
+ host.logInfo('No multiplexer found — launching inline. Install psmux for session management: winget install psmux');
121
+ }
122
+ else {
123
+ host.logInfo('No multiplexer found — launching inline. Install tmux for session management.');
124
+ }
125
+ exitCode = await spawnProcess(cliCommand, promptText ? [...cliArgs, promptText] : cliArgs);
126
+ }
127
+ else if (mux.isInsideSession()) {
128
+ host.logInfo(`Inside ${mux.backend} session — splitting new pane`);
129
+ if (mux.backend === 'tmux') {
130
+ configureTmuxSession();
131
+ }
132
+ let effectivePromptPath = promptPath;
133
+ if (!effectivePromptPath && promptText) {
134
+ effectivePromptPath = path.join(tempDir, `aiwcli-prompt-${now()}-${pid}.txt`);
135
+ writePromptFile(effectivePromptPath, promptText);
136
+ }
137
+ const splitResult = await mux.splitPane({
138
+ toolName: cliCommand,
139
+ args: cliArgs,
140
+ env: extraEnv,
141
+ cwd,
142
+ split: flags.split ?? 'auto',
143
+ promptPath: effectivePromptPath,
144
+ sentinel: wantWait || wantJson,
145
+ });
146
+ if (wantJson) {
147
+ const jsonExitCode = await resolveWaitExitCode(splitResult, wantWait);
148
+ host.log(JSON.stringify(toJsonLaunchResult(splitResult, jsonExitCode)));
149
+ host.exit(jsonExitCode ?? 0);
150
+ }
151
+ if (splitResult.launched) {
152
+ if (splitResult.paneId) {
153
+ host.logInfo(`Launched in ${mux.backend} pane: ${splitResult.paneId}`);
154
+ }
155
+ else {
156
+ host.logInfo(`Launched in ${mux.backend}`);
157
+ }
158
+ if (wantWait && splitResult.sentinelPath) {
159
+ const waitedExitCode = await resolveWaitExitCode(splitResult, true);
160
+ host.exit(waitedExitCode ?? 1);
161
+ }
162
+ return;
163
+ }
164
+ host.logWarning(`Pane split failed (${splitResult.reason}), launching directly`);
165
+ exitCode = await spawnProcess(cliCommand, promptText ? [...cliArgs, promptText] : cliArgs);
166
+ }
167
+ else {
168
+ const resolvedPath = mux.backend === 'psmux' ? findExecutable(cliCommand) : findToolPath(cliCommand);
169
+ if (resolvedPath) {
170
+ const sessionFromFlag = flags['tmux-session']?.trim();
171
+ const reattach = Boolean(sessionFromFlag && sessionFromFlag.length > 0);
172
+ const sessionName = reattach
173
+ ? sanitizeSessionName(sessionFromFlag)
174
+ : buildUniqueSessionName(`aiw-${path.basename(cwd)}`, now(), pid);
175
+ if (reattach) {
176
+ host.logInfo(`Launching in ${mux.backend} session: ${sessionName} (reuse/attach)`);
177
+ }
178
+ else {
179
+ host.logInfo(`Launching in new ${mux.backend} session: ${sessionName}`);
180
+ }
181
+ const result = await mux.createSession({
182
+ sessionName,
183
+ reattach,
184
+ toolPath: resolvedPath,
185
+ toolArgs: cliArgs,
186
+ promptText,
187
+ });
188
+ if (result.usedMux) {
189
+ exitCode = result.exitCode;
190
+ }
191
+ else {
192
+ if (result.reason) {
193
+ if (result.reason.includes('not found') || result.reason.includes('unavailable')) {
194
+ host.logWarning(`${mux.backend} unavailable — launching inline. ${mux.backend === 'psmux' ? 'Install with: winget install psmux' : ''}`);
195
+ }
196
+ else if (result.reason.includes('too old')) {
197
+ host.logWarning(`${result.reason} — launching inline. ${mux.backend === 'psmux' ? 'Update with: winget upgrade psmux' : ''}`);
198
+ }
199
+ else if (mux.backend === 'psmux' && result.reason.includes('attach failed')) {
200
+ host.logWarning(`${result.reason} — launching inline. Recovery: run "psmux kill-server" and relaunch if this persists.`);
201
+ }
202
+ else {
203
+ host.logWarning(`${result.reason} — launching inline`);
204
+ }
205
+ }
206
+ exitCode = await spawnProcess(cliCommand, promptText ? [...cliArgs, promptText] : cliArgs);
207
+ }
208
+ }
209
+ else {
210
+ host.logWarning(`${cliCommand} not found on PATH (install from https://claude.ai/download)`);
211
+ exitCode = await spawnProcess(cliCommand, promptText ? [...cliArgs, promptText] : cliArgs);
212
+ }
213
+ }
214
+ }
215
+ catch (error) {
216
+ if (error instanceof ProcessSpawnError) {
217
+ host.error(error.message, { exit: EXIT_CODES.ENVIRONMENT_ERROR });
218
+ }
219
+ host.error('Unexpected launch failure.', { exit: EXIT_CODES.GENERAL_ERROR });
220
+ }
221
+ host.exit(exitCode);
222
+ }
@@ -0,0 +1,14 @@
1
+ export interface BuildSpawnedWindowArgsParams {
2
+ disableTmux: boolean;
3
+ promptFilePath?: string | undefined;
4
+ promptPath?: string | undefined;
5
+ rawEnvJson?: string | undefined;
6
+ tmuxSessionFlag?: string | undefined;
7
+ useCodex: boolean;
8
+ useDevin?: boolean;
9
+ }
10
+ export declare function parseExtraEnv(raw: string | undefined): Record<string, string>;
11
+ export declare function resolvePromptText(promptFlag: string | undefined, promptFileFlag: string | undefined, readFile: (filePath: string) => string | undefined): string | undefined;
12
+ export declare function buildSpawnedWindowArgs(params: BuildSpawnedWindowArgsParams): string[];
13
+ export declare function sanitizeSessionName(input: string): string;
14
+ export declare function buildUniqueSessionName(base: string, now?: number, pid?: number): string;
@@ -0,0 +1,69 @@
1
+ export function parseExtraEnv(raw) {
2
+ if (!raw)
3
+ return {};
4
+ let parsed;
5
+ try {
6
+ parsed = JSON.parse(raw);
7
+ }
8
+ catch {
9
+ throw new Error('--env must be a valid JSON object string');
10
+ }
11
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
12
+ throw new Error('--env must be a valid JSON object string');
13
+ }
14
+ return parsed;
15
+ }
16
+ export function resolvePromptText(promptFlag, promptFileFlag, readFile) {
17
+ const promptText = promptFlag?.trim();
18
+ if (promptText)
19
+ return promptText;
20
+ const promptFilePath = promptFileFlag?.trim();
21
+ if (!promptFilePath)
22
+ return undefined;
23
+ try {
24
+ const fromFile = readFile(promptFilePath)?.trim();
25
+ return fromFile || undefined;
26
+ }
27
+ catch {
28
+ return undefined;
29
+ }
30
+ }
31
+ export function buildSpawnedWindowArgs(params) {
32
+ const { useCodex, useDevin, disableTmux, promptFilePath, promptPath, rawEnvJson, tmuxSessionFlag } = params;
33
+ const parts = ['aiw', 'launch', '--spawned-window'];
34
+ if (useDevin)
35
+ parts.push('--devin');
36
+ else if (useCodex)
37
+ parts.push('--codex');
38
+ if (disableTmux)
39
+ parts.push('--no-tmux');
40
+ const tmuxSession = tmuxSessionFlag?.trim();
41
+ if (tmuxSession) {
42
+ parts.push('--tmux-session', tmuxSession);
43
+ }
44
+ const envJson = rawEnvJson?.trim();
45
+ if (envJson) {
46
+ parts.push('--env', envJson);
47
+ }
48
+ if (promptPath) {
49
+ parts.push('--prompt-path', promptPath);
50
+ }
51
+ else if (promptFilePath) {
52
+ parts.push('--prompt-file', promptFilePath);
53
+ }
54
+ return parts;
55
+ }
56
+ export function sanitizeSessionName(input) {
57
+ const trimmed = input.trim().toLowerCase();
58
+ const safe = trimmed
59
+ .replaceAll(/[^a-z0-9_-]/g, '-')
60
+ .replaceAll(/-+/g, '-')
61
+ .replaceAll(/^[-_]+|[-_]+$/g, '');
62
+ return safe || 'aiw';
63
+ }
64
+ export function buildUniqueSessionName(base, now = Date.now(), pid = process.pid) {
65
+ const safeBase = sanitizeSessionName(base);
66
+ const timestamp = now.toString(36);
67
+ const pidPart = pid.toString(36);
68
+ return sanitizeSessionName(`${safeBase}-${timestamp}-${pidPart}`);
69
+ }
@@ -0,0 +1,18 @@
1
+ import { Command } from '@oclif/core';
2
+ import { type Ora } from 'ora';
3
+ export default abstract class BaseCommand extends Command {
4
+ static baseFlags: {
5
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
6
+ help: import("@oclif/core/interfaces").BooleanFlag<void>;
7
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ init(): Promise<void>;
10
+ protected isQuiet(): boolean;
11
+ protected logDebug(message: string): void;
12
+ protected logError(message: string): void;
13
+ protected logInfo(message: string): void;
14
+ protected logSuccess(message: string): void;
15
+ protected logWarning(message: string): void;
16
+ abstract run(): Promise<void>;
17
+ protected spinner(text: string): Ora;
18
+ }
@@ -0,0 +1,55 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { debugVersion, setDebugEnabled } from '../lib/debug.js';
3
+ import { logDebug, logError, logInfo, logSuccess, logWarning } from '../lib/output.js';
4
+ import { isQuietMode, setQuietMode } from '../lib/quiet.js';
5
+ import { createSpinner } from '../lib/spinner.js';
6
+ export default class BaseCommand extends Command {
7
+ static baseFlags = {
8
+ debug: Flags.boolean({
9
+ char: 'd',
10
+ description: 'Enable verbose debug logging',
11
+ default: false,
12
+ }),
13
+ help: Flags.help({
14
+ char: 'h',
15
+ description: 'Show help for command',
16
+ }),
17
+ quiet: Flags.boolean({
18
+ char: 'q',
19
+ description: 'Suppress informational output (errors still shown)',
20
+ default: false,
21
+ }),
22
+ };
23
+ async init() {
24
+ await super.init();
25
+ const { flags } = await this.parse(this.constructor);
26
+ const debugEnabled = flags.debug ?? false;
27
+ const quietEnabled = flags.quiet ?? false;
28
+ setDebugEnabled(debugEnabled);
29
+ setQuietMode(quietEnabled);
30
+ if (debugEnabled) {
31
+ debugVersion();
32
+ }
33
+ }
34
+ isQuiet() {
35
+ return isQuietMode();
36
+ }
37
+ logDebug(message) {
38
+ logDebug(message);
39
+ }
40
+ logError(message) {
41
+ logError(message);
42
+ }
43
+ logInfo(message) {
44
+ logInfo(message, this.isQuiet());
45
+ }
46
+ logSuccess(message) {
47
+ logSuccess(message, this.isQuiet());
48
+ }
49
+ logWarning(message) {
50
+ logWarning(message, this.isQuiet());
51
+ }
52
+ spinner(text) {
53
+ return createSpinner(text, { quiet: isQuietMode() });
54
+ }
55
+ }
@@ -22,24 +22,4 @@ export default class BranchCommand extends BaseCommand {
22
22
  quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
23
  };
24
24
  run(): Promise<void>;
25
- /**
26
- * Handle --delete flag: Delete git branch and worktree folder
27
- */
28
- private handleDelete;
29
- /**
30
- * Handle --delete --all flags: Clean up all worktrees safely
31
- */
32
- private handleDeleteAll;
33
- /**
34
- * Handle --main flag: Launch aiw in main/master branch
35
- */
36
- private handleMainBranch;
37
- /**
38
- * Handle --launch flag: Create or open worktree in sibling folder
39
- */
40
- private handleWorktreeLaunch;
41
- /**
42
- * Check if current directory is a git repository
43
- */
44
- private isGitRepository;
45
25
  }