aiwcli 0.15.4 → 0.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. package/README.md +6 -3
  2. package/dist/capabilities/branch/adapters.d.ts +2 -0
  3. package/dist/capabilities/branch/adapters.js +21 -0
  4. package/dist/capabilities/branch/contracts.d.ts +57 -0
  5. package/dist/capabilities/branch/contracts.js +1 -0
  6. package/dist/capabilities/branch/control-plane.d.ts +2 -0
  7. package/dist/capabilities/branch/control-plane.js +343 -0
  8. package/dist/capabilities/branch/runtime-core.d.ts +5 -0
  9. package/dist/capabilities/branch/runtime-core.js +36 -0
  10. package/dist/capabilities/installation/control-plane/clean-command.d.ts +41 -0
  11. package/dist/capabilities/installation/control-plane/clean-command.js +196 -0
  12. package/dist/capabilities/installation/control-plane/clear-command.d.ts +160 -0
  13. package/dist/capabilities/installation/control-plane/clear-command.js +1220 -0
  14. package/dist/capabilities/installation/control-plane/init-command.d.ts +81 -0
  15. package/dist/capabilities/installation/control-plane/init-command.js +449 -0
  16. package/dist/capabilities/launch/contracts.d.ts +51 -0
  17. package/dist/capabilities/launch/contracts.js +1 -0
  18. package/dist/capabilities/launch/control-plane/execute-launch.d.ts +2 -0
  19. package/dist/capabilities/launch/control-plane/execute-launch.js +222 -0
  20. package/dist/capabilities/launch/runtime-core/launch-options.d.ts +14 -0
  21. package/dist/capabilities/launch/runtime-core/launch-options.js +69 -0
  22. package/dist/cli/base-command.d.ts +18 -0
  23. package/dist/cli/base-command.js +55 -0
  24. package/dist/commands/branch.d.ts +0 -20
  25. package/dist/commands/branch.js +24 -416
  26. package/dist/commands/clean.d.ts +1 -41
  27. package/dist/commands/clean.js +1 -196
  28. package/dist/commands/clear.d.ts +1 -161
  29. package/dist/commands/clear.js +1 -1121
  30. package/dist/commands/init/index.d.ts +1 -98
  31. package/dist/commands/init/index.js +4 -478
  32. package/dist/commands/launch.d.ts +36 -11
  33. package/dist/commands/launch.js +135 -159
  34. package/dist/lib/base-command.d.ts +1 -114
  35. package/dist/lib/base-command.js +1 -153
  36. package/dist/lib/claude-settings-types.d.ts +31 -19
  37. package/dist/lib/context/context-formatter.d.ts +74 -0
  38. package/dist/lib/context/context-formatter.js +493 -0
  39. package/dist/lib/context/context-selector.d.ts +42 -0
  40. package/dist/lib/context/context-selector.js +451 -0
  41. package/dist/lib/context/context-store.d.ts +100 -0
  42. package/dist/lib/context/context-store.js +618 -0
  43. package/dist/lib/context/plan-manager.d.ts +54 -0
  44. package/dist/lib/context/plan-manager.js +282 -0
  45. package/dist/lib/context/task-tracker.d.ts +44 -0
  46. package/dist/lib/context/task-tracker.js +146 -0
  47. package/dist/lib/core-ide-base.d.ts +4 -0
  48. package/dist/lib/core-ide-base.js +77 -0
  49. package/dist/lib/core-installer.d.ts +5 -0
  50. package/dist/lib/core-installer.js +54 -0
  51. package/dist/lib/git-exclude-manager.d.ts +2 -2
  52. package/dist/lib/git-exclude-manager.js +3 -3
  53. package/dist/lib/hooks/hook-utils.d.ts +143 -0
  54. package/dist/lib/hooks/hook-utils.js +609 -0
  55. package/dist/lib/hooks/session-end-logic.d.ts +5 -0
  56. package/dist/lib/hooks/session-end-logic.js +63 -0
  57. package/dist/lib/hooks-merger.js +25 -19
  58. package/dist/lib/ide-path-resolver.d.ts +19 -7
  59. package/dist/lib/ide-path-resolver.js +25 -9
  60. package/dist/lib/install-state.d.ts +34 -0
  61. package/dist/lib/install-state.js +161 -0
  62. package/dist/lib/launch-options.d.ts +1 -0
  63. package/dist/lib/launch-options.js +1 -0
  64. package/dist/lib/lsp-patch.d.ts +12 -0
  65. package/dist/lib/lsp-patch.js +156 -0
  66. package/dist/lib/multiplexer.d.ts +57 -0
  67. package/dist/lib/multiplexer.js +19 -0
  68. package/dist/lib/multiplexers/psmux.d.ts +75 -0
  69. package/dist/lib/multiplexers/psmux.js +384 -0
  70. package/dist/lib/multiplexers/tmux.d.ts +44 -0
  71. package/dist/lib/multiplexers/tmux.js +262 -0
  72. package/dist/lib/mux-utils.d.ts +5 -0
  73. package/dist/lib/mux-utils.js +42 -0
  74. package/dist/lib/paths.d.ts +2 -2
  75. package/dist/lib/paths.js +2 -2
  76. package/dist/lib/platform-commands.d.ts +27 -0
  77. package/dist/lib/platform-commands.js +49 -0
  78. package/dist/lib/runtime/aiw-cli.d.ts +37 -0
  79. package/dist/lib/runtime/aiw-cli.js +74 -0
  80. package/dist/lib/runtime/atomic-write.d.ts +19 -0
  81. package/dist/lib/runtime/atomic-write.js +121 -0
  82. package/dist/lib/runtime/cli-args.d.ts +55 -0
  83. package/dist/lib/runtime/cli-args.js +185 -0
  84. package/dist/lib/runtime/constants.d.ts +56 -0
  85. package/dist/lib/runtime/constants.js +230 -0
  86. package/dist/lib/runtime/executable-policy.d.ts +16 -0
  87. package/dist/lib/runtime/executable-policy.js +57 -0
  88. package/dist/lib/runtime/git-state.d.ts +9 -0
  89. package/dist/lib/runtime/git-state.js +59 -0
  90. package/dist/lib/runtime/inference.d.ts +37 -0
  91. package/dist/lib/runtime/inference.js +262 -0
  92. package/dist/lib/runtime/lint-dispatch.d.ts +40 -0
  93. package/dist/lib/runtime/lint-dispatch.js +285 -0
  94. package/dist/lib/runtime/logger.d.ts +66 -0
  95. package/dist/lib/runtime/logger.js +201 -0
  96. package/dist/lib/runtime/models.d.ts +14 -0
  97. package/dist/lib/runtime/models.js +14 -0
  98. package/dist/lib/runtime/platform-adapter.d.ts +7 -0
  99. package/dist/lib/runtime/platform-adapter.js +21 -0
  100. package/dist/lib/runtime/preflight.d.ts +24 -0
  101. package/dist/lib/runtime/preflight.js +65 -0
  102. package/dist/lib/runtime/sentinel-ipc.d.ts +14 -0
  103. package/dist/lib/runtime/sentinel-ipc.js +67 -0
  104. package/dist/lib/runtime/state-io.d.ts +30 -0
  105. package/dist/lib/runtime/state-io.js +174 -0
  106. package/dist/lib/runtime/stop-words.d.ts +20 -0
  107. package/dist/lib/runtime/stop-words.js +150 -0
  108. package/dist/lib/runtime/subprocess-utils.d.ts +29 -0
  109. package/dist/lib/runtime/subprocess-utils.js +96 -0
  110. package/dist/lib/runtime/tmux-preflight.d.ts +13 -0
  111. package/dist/lib/runtime/tmux-preflight.js +78 -0
  112. package/dist/lib/runtime/utils.d.ts +54 -0
  113. package/dist/lib/runtime/utils.js +162 -0
  114. package/dist/lib/sentinel-wrapper.d.ts +9 -0
  115. package/dist/lib/sentinel-wrapper.js +20 -0
  116. package/dist/lib/shell-quoting.d.ts +5 -0
  117. package/dist/lib/shell-quoting.js +17 -0
  118. package/dist/lib/spawn-errors.d.ts +6 -0
  119. package/dist/lib/spawn-errors.js +15 -0
  120. package/dist/lib/spawn.js +5 -11
  121. package/dist/lib/template-installer.d.ts +4 -5
  122. package/dist/lib/template-installer.js +36 -34
  123. package/dist/lib/template-resolver.d.ts +6 -7
  124. package/dist/lib/template-resolver.js +26 -21
  125. package/dist/lib/template-settings-reconstructor.d.ts +7 -2
  126. package/dist/lib/template-settings-reconstructor.js +76 -45
  127. package/dist/lib/terminal-strategy.d.ts +11 -0
  128. package/dist/lib/terminal-strategy.js +49 -0
  129. package/dist/lib/terminal.d.ts +28 -0
  130. package/dist/lib/terminal.js +162 -112
  131. package/dist/lib/tmux-pane-placement.d.ts +17 -0
  132. package/dist/lib/tmux-pane-placement.js +58 -0
  133. package/dist/lib/tmux-primitives.d.ts +5 -0
  134. package/dist/lib/tmux-primitives.js +15 -0
  135. package/dist/lib/tmux-session.d.ts +32 -0
  136. package/dist/lib/tmux-session.js +86 -0
  137. package/dist/lib/tty-detection.js +1 -1
  138. package/dist/lib/types.d.ts +168 -0
  139. package/dist/lib/types.js +6 -0
  140. package/dist/lib/version.d.ts +1 -1
  141. package/dist/lib/version.js +1 -1
  142. package/dist/platform/launch.d.ts +10 -0
  143. package/dist/platform/launch.js +10 -0
  144. package/dist/templates/CLAUDE.md +31 -40
  145. package/dist/templates/cc-native/.claude/settings.json +27 -27
  146. package/dist/templates/cc-native/CC-NATIVE-README.md +1 -1
  147. package/dist/templates/cc-native/TEMPLATE-SCHEMA.md +10 -9
  148. package/dist/templates/cc-native/_cc-native/CLAUDE.md +18 -18
  149. package/dist/templates/cc-native/_cc-native/artifacts/CLAUDE.md +3 -3
  150. package/dist/templates/cc-native/_cc-native/artifacts/lib/format.ts +14 -14
  151. package/dist/templates/cc-native/_cc-native/artifacts/lib/tracker.ts +1 -1
  152. package/dist/templates/cc-native/_cc-native/artifacts/lib/write.ts +3 -3
  153. package/dist/templates/cc-native/_cc-native/cc-native.config.json +3 -3
  154. package/dist/templates/cc-native/_cc-native/hooks/CLAUDE.md +16 -15
  155. package/dist/templates/cc-native/_cc-native/hooks/cc-native-plan-review.ts +3 -3
  156. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_subagent.ts +2 -2
  157. package/dist/templates/cc-native/_cc-native/hooks/enhance_plan_post_write.ts +2 -2
  158. package/dist/templates/cc-native/_cc-native/hooks/mark_questions_asked.ts +3 -3
  159. package/dist/templates/cc-native/_cc-native/hooks/plan_questions_early.ts +2 -2
  160. package/dist/templates/cc-native/_cc-native/hooks/validate_task_prompt.ts +3 -3
  161. package/dist/templates/cc-native/_cc-native/lib-ts/CLAUDE.md +8 -8
  162. package/dist/templates/cc-native/_cc-native/lib-ts/aggregate-agents.ts +1 -1
  163. package/dist/templates/cc-native/_cc-native/lib-ts/cc-native-state.ts +4 -4
  164. package/dist/templates/cc-native/_cc-native/lib-ts/cli-output-parser.ts +1 -1
  165. package/dist/templates/cc-native/_cc-native/lib-ts/config.ts +1 -1
  166. package/dist/templates/cc-native/_cc-native/lib-ts/debug.ts +1 -1
  167. package/dist/templates/cc-native/_cc-native/lib-ts/json-parser.ts +1 -1
  168. package/dist/templates/cc-native/_cc-native/lib-ts/plan-discovery.ts +2 -2
  169. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/logger.ts +1 -1
  170. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/retrieval-pipeline.ts +2 -2
  171. package/dist/templates/cc-native/_cc-native/lib-ts/rlm/types.ts +1 -1
  172. package/dist/templates/cc-native/_cc-native/lib-ts/settings.ts +8 -8
  173. package/dist/templates/cc-native/_cc-native/lib-ts/state.ts +3 -3
  174. package/dist/templates/cc-native/_cc-native/lib-ts/tsconfig.json +2 -2
  175. package/dist/templates/cc-native/_cc-native/lib-ts/types.ts +3 -3
  176. package/dist/templates/cc-native/_cc-native/plan-review/CLAUDE.md +3 -1
  177. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/agent-selection.test.ts +345 -0
  178. package/dist/templates/cc-native/_cc-native/plan-review/lib/__tests__/preflight.test.ts +344 -0
  179. package/dist/templates/cc-native/_cc-native/plan-review/lib/agent-selection.ts +37 -15
  180. package/dist/templates/cc-native/_cc-native/plan-review/lib/corroboration.ts +16 -69
  181. package/dist/templates/cc-native/_cc-native/plan-review/lib/orchestrator.ts +1 -1
  182. package/dist/templates/cc-native/_cc-native/plan-review/lib/output-builder.ts +1 -1
  183. package/dist/templates/cc-native/_cc-native/plan-review/lib/plan-questions.ts +2 -2
  184. package/dist/templates/cc-native/_cc-native/plan-review/lib/preflight.ts +56 -26
  185. package/dist/templates/cc-native/_cc-native/plan-review/lib/review-pipeline.ts +7 -7
  186. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/agent.ts +4 -4
  187. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/base/base-agent.ts +3 -3
  188. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/index.ts +1 -1
  189. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/claude-agent.ts +2 -2
  190. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/codex-agent.ts +4 -4
  191. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/gemini-agent.ts +1 -1
  192. package/dist/templates/cc-native/_cc-native/plan-review/lib/reviewers/providers/orchestrator-claude-agent.ts +5 -6
  193. package/dist/templates/core/.codex/workflows/codex.md +17 -0
  194. package/dist/templates/core/.codex/workflows/handoff.md +5 -0
  195. package/dist/templates/core/.codex/workflows/meta-plan.md +7 -0
  196. package/dist/templates/core/.cognition/AGENTS.md +5 -0
  197. package/dist/templates/core/.cognition/config.json +12 -0
  198. package/dist/templates/{_shared → core}/.windsurf/workflows/handoff.md +1 -1
  199. package/dist/templates/{_shared → core}/.windsurf/workflows/meta-plan.md +1 -1
  200. package/dist/templates/core/hooks-ts/_utils/git-state.ts +2 -0
  201. package/dist/templates/{_shared → core}/hooks-ts/archive_plan.ts +14 -23
  202. package/dist/templates/core/hooks-ts/codex_explorer.ts +160 -0
  203. package/dist/templates/{_shared → core}/hooks-ts/context_monitor.ts +23 -55
  204. package/dist/templates/{_shared → core}/hooks-ts/file-suggestion.ts +4 -3
  205. package/dist/templates/{_shared → core}/hooks-ts/lint_after_edit.ts +7 -9
  206. package/dist/templates/{_shared → core}/hooks-ts/pre_compact.ts +5 -5
  207. package/dist/templates/{_shared → core}/hooks-ts/session_end.ts +38 -78
  208. package/dist/templates/{_shared → core}/hooks-ts/session_start.ts +5 -5
  209. package/dist/templates/core/hooks-ts/task_create_capture.ts +32 -0
  210. package/dist/templates/{_shared → core}/hooks-ts/task_update_capture.ts +9 -24
  211. package/dist/templates/core/hooks-ts/user_prompt_submit.ts +46 -0
  212. package/dist/templates/{_shared → core}/lib-ts/CLAUDE.md +27 -16
  213. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/headless.ts +3 -2
  214. package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/tmux.ts +44 -15
  215. package/dist/templates/{_shared → core}/lib-ts/agent-exec/base-agent.ts +6 -4
  216. package/dist/templates/{_shared → core}/lib-ts/agent-exec/execution-backend.ts +1 -1
  217. package/dist/templates/{_shared → core}/lib-ts/agent-exec/index.ts +2 -2
  218. package/dist/templates/{_shared → core}/lib-ts/agent-exec/structured-output.ts +4 -5
  219. package/dist/templates/{_shared → core}/lib-ts/context/CLAUDE.md +9 -6
  220. package/dist/templates/{_shared → core}/lib-ts/context/context-formatter.ts +16 -21
  221. package/dist/templates/{_shared → core}/lib-ts/context/context-selector.ts +8 -6
  222. package/dist/templates/{_shared → core}/lib-ts/context/context-store.ts +32 -20
  223. package/dist/templates/{_shared → core}/lib-ts/context/plan-manager.ts +19 -15
  224. package/dist/templates/{_shared → core}/lib-ts/context/task-tracker.ts +3 -3
  225. package/dist/templates/core/lib-ts/hooks/context-monitor-logic.ts +32 -0
  226. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/hooks}/hook-utils.ts +168 -41
  227. package/dist/templates/core/lib-ts/hooks/prompt-binding-logic.ts +80 -0
  228. package/dist/templates/core/lib-ts/hooks/session-end-logic.ts +93 -0
  229. package/dist/templates/core/lib-ts/package.json +19 -0
  230. package/dist/templates/core/lib-ts/runtime/agent-launcher.ts +295 -0
  231. package/dist/templates/core/lib-ts/runtime/aiw-cli.ts +106 -0
  232. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/atomic-write.ts +12 -7
  233. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/cli-args.ts +8 -6
  234. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/constants.ts +326 -324
  235. package/dist/templates/core/lib-ts/runtime/executable-policy.ts +89 -0
  236. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/git-state.ts +6 -4
  237. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/inference.ts +59 -10
  238. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/lint-dispatch.ts +25 -23
  239. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/logger.ts +32 -29
  240. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/models.ts +2 -2
  241. package/dist/templates/core/lib-ts/runtime/platform-adapter.ts +33 -0
  242. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/preflight.ts +4 -3
  243. package/dist/templates/core/lib-ts/runtime/sentinel-ipc.ts +91 -0
  244. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/state-io.ts +11 -7
  245. package/dist/templates/core/lib-ts/runtime/stop-words.ts +185 -0
  246. package/dist/templates/core/lib-ts/runtime/subprocess-utils.ts +147 -0
  247. package/dist/templates/core/lib-ts/runtime/tmux-preflight.ts +93 -0
  248. package/dist/templates/{_shared/lib-ts/base → core/lib-ts/runtime}/utils.ts +4 -3
  249. package/dist/templates/{_shared → core}/lib-ts/templates/formatters.ts +7 -5
  250. package/dist/templates/{_shared → core}/lib-ts/templates/plan-context.ts +2 -1
  251. package/dist/templates/{_shared → core}/lib-ts/tsconfig.json +3 -1
  252. package/dist/templates/{_shared → core}/lib-ts/types.ts +78 -77
  253. package/dist/templates/core/scripts/resolve-run.ts +61 -0
  254. package/dist/templates/{_shared → core}/scripts/resolve_context.ts +3 -3
  255. package/dist/templates/{_shared → core}/scripts/status_line.ts +25 -20
  256. package/dist/templates/core/skills/codex/CLAUDE.md +78 -0
  257. package/dist/templates/{_shared → core}/skills/codex/SKILL.md +21 -18
  258. package/dist/templates/{_shared → core}/skills/codex/lib/codex-watcher.ts +76 -103
  259. package/dist/templates/{_shared → core}/skills/codex/scripts/launch-codex.ts +119 -133
  260. package/dist/templates/{_shared → core}/skills/codex/scripts/watch-codex.ts +6 -4
  261. package/dist/templates/core/skills/devin/CLAUDE.md +65 -0
  262. package/dist/templates/core/skills/devin/SKILL.md +73 -0
  263. package/dist/templates/core/skills/devin/lib/devin-watcher.ts +280 -0
  264. package/dist/templates/core/skills/devin/scripts/launch-devin.ts +257 -0
  265. package/dist/templates/{_shared → core}/skills/handoff-system/CLAUDE.md +436 -433
  266. package/dist/templates/{_shared → core}/skills/handoff-system/lib/document-generator.ts +9 -7
  267. package/dist/templates/{_shared → core}/skills/handoff-system/lib/handoff-reader.ts +6 -4
  268. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/resume_handoff.ts +10 -8
  269. package/dist/templates/{_shared → core}/skills/handoff-system/scripts/save_handoff.ts +12 -10
  270. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff-resume.md +2 -2
  271. package/dist/templates/{_shared → core}/skills/handoff-system/workflows/handoff.md +6 -5
  272. package/dist/templates/{_shared → core}/skills/meta-plan/CLAUDE.md +2 -1
  273. package/dist/templates/{_shared → core}/skills/meta-plan/workflows/meta-plan.md +8 -7
  274. package/oclif.manifest.json +89 -13
  275. package/package.json +13 -12
  276. package/dist/templates/_shared/.claude/settings.json +0 -120
  277. package/dist/templates/_shared/.claude/skills/codex/SKILL.md +0 -35
  278. package/dist/templates/_shared/.claude/skills/handoff/SKILL.md +0 -13
  279. package/dist/templates/_shared/.claude/skills/handoff-resume/SKILL.md +0 -13
  280. package/dist/templates/_shared/.claude/skills/meta-plan/SKILL.md +0 -43
  281. package/dist/templates/_shared/.codex/workflows/codex.md +0 -11
  282. package/dist/templates/_shared/.codex/workflows/handoff.md +0 -226
  283. package/dist/templates/_shared/.codex/workflows/meta-plan.md +0 -347
  284. package/dist/templates/_shared/hooks-ts/_utils/git-state.ts +0 -2
  285. package/dist/templates/_shared/hooks-ts/task_create_capture.ts +0 -48
  286. package/dist/templates/_shared/hooks-ts/user_prompt_submit.ts +0 -93
  287. package/dist/templates/_shared/lib-ts/base/launchers/tmux-launcher.ts +0 -173
  288. package/dist/templates/_shared/lib-ts/base/launchers/window-launcher.ts +0 -93
  289. package/dist/templates/_shared/lib-ts/base/launchers/wt-launcher.ts +0 -64
  290. package/dist/templates/_shared/lib-ts/base/pane-launcher.ts +0 -55
  291. package/dist/templates/_shared/lib-ts/base/sentinel-ipc.ts +0 -87
  292. package/dist/templates/_shared/lib-ts/base/stop-words.ts +0 -184
  293. package/dist/templates/_shared/lib-ts/base/subprocess-utils.ts +0 -249
  294. package/dist/templates/_shared/lib-ts/base/tmux-driver.ts +0 -341
  295. package/dist/templates/_shared/lib-ts/base/tmux-pane-placement.ts +0 -78
  296. package/dist/templates/_shared/lib-ts/package.json +0 -20
  297. package/dist/templates/_shared/scripts/resolve-run.ts +0 -62
  298. package/dist/templates/_shared/skills/codex/CLAUDE.md +0 -70
  299. /package/dist/templates/{_shared → core}/lib-ts/agent-exec/backends/index.ts +0 -0
@@ -11,7 +11,7 @@ import {
11
11
  SUMMARY_UNAVAILABLE_MESSAGE,
12
12
  summarizeFromSessionFileFallback,
13
13
  summarizeViaResume,
14
- summarizeViaSessionFileSpark,
14
+ summarizeViaSessionFile,
15
15
  waitForPaneClose,
16
16
  } from "../lib/codex-watcher.js";
17
17
 
@@ -27,7 +27,7 @@ async function main(): Promise<void> {
27
27
  const sf = sessionFile ?? "";
28
28
  const sid = sessionId ?? "";
29
29
  const summary =
30
- summarizeViaSessionFileSpark(sf) ??
30
+ (await summarizeViaSessionFile(sf)) ??
31
31
  (sid ? await summarizeViaResume(sid) : null) ??
32
32
  summarizeFromSessionFileFallback(sf) ??
33
33
  SUMMARY_UNAVAILABLE_MESSAGE;
@@ -36,7 +36,9 @@ async function main(): Promise<void> {
36
36
  console.log(summary);
37
37
  }
38
38
 
39
- main().catch((error) => {
39
+ try {
40
+ await main();
41
+ } catch (error) {
40
42
  console.error(`watch-codex error: ${String(error)}`);
41
43
  console.log(SUMMARY_UNAVAILABLE_MESSAGE);
42
- });
44
+ }
@@ -0,0 +1,65 @@
1
+ # Devin Skill
2
+
3
+ Launch Devin CLI in a visible pane (tmux on Unix, fallback to exec mode) and pass the prompt at process start.
4
+
5
+ ## Directory Structure
6
+
7
+ ```
8
+ devin/
9
+ ├── CLAUDE.md <- This file
10
+ ├── SKILL.md <- Skill metadata (user-invocable)
11
+ ├── lib/
12
+ │ └── devin-watcher.ts <- Watch/summarize library
13
+ └── scripts/
14
+ └── launch-devin.ts <- Single entry point (launch + optional watch)
15
+ ```
16
+
17
+ ## Script: launch-devin.ts
18
+
19
+ **Usage:**
20
+ ```bash
21
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts [--model <tier|id>] [--prompt <text>] [--no-watch] [--context <id>] plan
22
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts [--model <tier|id>] [--prompt <text>] [--no-watch] [--context <id>] --file <path>
23
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts [--model <tier|id>] [--prompt <text>] [--no-watch] [--context <id>] <inline text...>
24
+ ```
25
+
26
+ **Args:**
27
+ - `plan` -- discover active plan via context system, build a bootstrap startup prompt
28
+ - `--file <path>` -- build a bootstrap startup prompt that includes the file path
29
+ - `<text...>` -- join remaining args as inline prompt
30
+ - `--model <name>` -- Models: `swe`, `gpt`, `opus`, `sonnet`. Tiers: `fast`/`standard`/`smart`. Or pass-through.
31
+ - `--prompt <text>` -- append extra instructions
32
+ - `--no-watch` -- Disable watch/summarize mode
33
+
34
+ **Plan discovery order:**
35
+ 1. `--context` flag or `CLAUDE_SESSION_ID` env -> context -> `findLatestPlan(contextId)`
36
+ 2. Fallback: scan `_output/contexts/*/plans/*.md` by mtime
37
+
38
+ **Dependencies:**
39
+ - `runtime/aiw-cli.ts` -- shells out to `aiw launch --devin`
40
+ - `runtime/agent-launcher.ts` -- shared plan discovery, prompt construction, pane watching
41
+ - `runtime/cli-args.ts` -- Devin model resolution and invocation building
42
+ - `context/*` -- context lookup, formatting, plan discovery
43
+
44
+ **Watch behavior:**
45
+ - Watch is enabled by default
46
+ - Uses `waitForPaneClose` from shared agent-launcher
47
+ - Summary cascade: (1) `devin list --format json` metadata, (2) tmux pane scrollback capture, (3) static unavailable message
48
+ - Summary persisted to temp file via `persistSummary("devin", ...)`
49
+
50
+ **Design decisions:**
51
+ - No sandbox/YOLO flags (Devin uses `--permission-mode` instead, defaulting to `auto`)
52
+ - Devin model short names are server-resolved (we store just the short names)
53
+ - Shared helpers from `agent-launcher.ts` (plan discovery, prompt files, pane watching)
54
+ - Session discovery uses `devin list --format json` + `~/.config/cognition/cli/` file scanning
55
+
56
+ ## Library: lib/devin-watcher.ts
57
+
58
+ Session discovery and summarization:
59
+ - `findDevinSession(projectRoot, launchStartedAtMs)` -- discover session via `devin list` or file scanning
60
+ - `summarizeDevinSession(transcript)` -- AI inference summary
61
+ - `capturePaneScrollback(paneId)` -- tmux pane capture fallback
62
+
63
+ Re-exports `persistSummary`, `waitForPaneClose` from agent-launcher.
64
+
65
+ <!-- context-layer: generated=2026-03-06 | version=1 -->
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: devin
3
+ description: Delegate implementation to Devin sub-agents. USE WHEN devin OR send to devin OR devin implement OR hand off to devin OR launch devin OR run devin.
4
+ user-invocable: true
5
+ ---
6
+
7
+ # /devin
8
+
9
+ ## Role
10
+
11
+ You are the orchestrator. Each Devin launch spawns an implementation sub-agent. Delegate implementation work to Devin, then review results when summaries arrive.
12
+
13
+ The script blocks until Devin exits and prints a session summary. Run with Bash `run_in_background: true` so you stay unblocked and receive the summary as a background task notification.
14
+
15
+ ## Command
16
+
17
+ ```
18
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts [flags] <mode>
19
+ ```
20
+
21
+ **Modes:** `plan` | `--file <path>` | `<inline text...>`
22
+
23
+ `plan` and `--file` modes pass a filepath-first bootstrap prompt so Devin reads the file from disk instead of relying on a pasted full document.
24
+
25
+ **Flags:**
26
+ - `--context <id>` -- Project orientation for the sub-agent. Pass when implementing a plan so Devin understands the project structure.
27
+ - `--prompt <text>` -- Add extra instructions. In `plan`/`--file` mode, this is embedded into the bootstrap temp file with the target path.
28
+ - `--model <name>` -- Models: `swe`, `gpt`, `opus`, `sonnet`. Tiers: `fast`, `standard`, `smart`. Or pass-through for server-side resolution.
29
+ - `--no-watch` -- Fire-and-forget: exit immediately after launch, skip waiting for summary.
30
+
31
+ ## Retrieving Results
32
+
33
+ The script prints a summary to stdout and writes it to a temp file.
34
+
35
+ **Primary:** Check TaskOutput for the background task -- the summary and file path are inline.
36
+
37
+ **Fallback (if TaskOutput is empty):** Look for the `[summary_file:<path>]` line in the output. If found, read that file path directly.
38
+
39
+ ## Delegation Patterns
40
+
41
+ ### One-shot
42
+
43
+ For small or tightly coupled plans. One sub-agent implements the whole plan.
44
+
45
+ ```bash
46
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts --context <ctx-id> plan
47
+ ```
48
+
49
+ Run with `run_in_background: true`. Wait for the summary. Review the changes.
50
+
51
+ ### Parallel
52
+
53
+ For plans with independent sections, create small section-brief files and launch one sub-agent per brief with `--file`.
54
+
55
+ ### Ad-hoc
56
+
57
+ For tasks outside a plan. Pass inline text or a file path.
58
+
59
+ ```bash
60
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts \
61
+ "Fix the failing test in auth.ts"
62
+
63
+ bun ~/.aiwcli/bin/resolve-run.ts .aiwcli/_core/skills/devin/scripts/launch-devin.ts \
64
+ --file path/to/task-description.md
65
+ ```
66
+
67
+ ## Orchestrator Checklist
68
+
69
+ - **Delegate implementation.** If the work involves writing code and Devin can handle it, send it to Devin.
70
+ - **Split independent sections** into parallel sub-agents for faster execution.
71
+ - **Pass `--context`** when implementing a plan -- Devin needs project orientation to make good decisions.
72
+ - **Scope parallel agents with separate `--file` briefs** so each sub-agent has an explicit task boundary.
73
+ - **Review results** when summaries arrive. Check for merge conflicts between parallel agents, then verify with `tsc --noEmit`, tests, or manual inspection.
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Devin session discovery and summarization.
3
+ *
4
+ * Session discovery strategy (priority order):
5
+ * 1. `devin list --format json` — parse session metadata, match by cwd + timestamp
6
+ * 2. File scan of `~/.config/cognition/cli/` for session files
7
+ * 3. Tmux pane scrollback capture (`tmux capture-pane -p -t <paneId>`)
8
+ *
9
+ * If no session transcript is found, falls back to SUMMARY_UNAVAILABLE_MESSAGE.
10
+ */
11
+
12
+ import * as fs from "node:fs";
13
+ import * as os from "node:os";
14
+ import path from "node:path";
15
+
16
+ import { inference } from "../../../lib-ts/runtime/inference.js";
17
+ import { logDebug, logWarn } from "../../../lib-ts/runtime/logger.js";
18
+ import { execFileAsync, findExecutable } from "../../../lib-ts/runtime/subprocess-utils.js";
19
+
20
+ // Re-export shared symbols for consumers
21
+ export {
22
+ type PaneWatchTarget,
23
+ persistSummary,
24
+ waitForPaneClose,
25
+ } from "../../../lib-ts/runtime/agent-launcher.js";
26
+
27
+ export const SUMMARY_UNAVAILABLE_MESSAGE = "Devin session completed. Summary unavailable.";
28
+
29
+ const DEVIN_LIST_TIMEOUT_MS = 10_000;
30
+ const SUMMARY_TIMEOUT_SEC = 10;
31
+ const MAX_SCROLLBACK_LINES = 300;
32
+ const MAX_LINE_LENGTH = 500;
33
+
34
+ const TRANSCRIPT_SUMMARY_PROMPT = `Summarize this Devin session transcript excerpt.
35
+ Return 3-5 concise bullet points.
36
+ Focus on:
37
+ - what was accomplished
38
+ - files changed
39
+ - errors or blockers
40
+ Do not ask follow-up questions.
41
+ Do not request additional input.
42
+ If information is partial, provide best-effort summary from available text.`;
43
+
44
+ // ---------------------------------------------------------------------------
45
+ // Session Discovery via `devin list`
46
+ // ---------------------------------------------------------------------------
47
+
48
+ interface DevinSession {
49
+ id?: string;
50
+ session_id?: string;
51
+ cwd?: string;
52
+ created_at?: string;
53
+ status?: string;
54
+ title?: string;
55
+ model?: string;
56
+ }
57
+
58
+ async function getDevinSessions(): Promise<DevinSession[]> {
59
+ try {
60
+ const result = await execFileAsync("devin", ["list", "--format", "json"], {
61
+ timeout: DEVIN_LIST_TIMEOUT_MS,
62
+ });
63
+
64
+ if (result.exitCode !== 0) {
65
+ logDebug("devin-watcher", `devin list failed: exit=${result.exitCode}`);
66
+ return [];
67
+ }
68
+
69
+ const parsed = JSON.parse(result.stdout.trim());
70
+ if (!Array.isArray(parsed)) return [];
71
+ return parsed as DevinSession[];
72
+ } catch (error) {
73
+ logDebug("devin-watcher", `devin list parse failed: ${String(error)}`);
74
+ return [];
75
+ }
76
+ }
77
+
78
+ function samePath(a: string, b: string): boolean {
79
+ const left = path.resolve(a);
80
+ const right = path.resolve(b);
81
+ if (process.platform === "win32") {
82
+ return left.toLowerCase() === right.toLowerCase();
83
+ }
84
+ return left === right;
85
+ }
86
+
87
+ async function findDevinSessionViaList(
88
+ projectRoot: string,
89
+ launchStartedAtMs: number,
90
+ ): Promise<DevinSession | null> {
91
+ const sessions = await getDevinSessions();
92
+ if (sessions.length === 0) return null;
93
+
94
+ // Find sessions matching cwd and started after launch
95
+ const candidates = sessions.filter((s) => {
96
+ if (s.cwd && !samePath(s.cwd, projectRoot)) return false;
97
+ if (s.created_at) {
98
+ const createdMs = Date.parse(s.created_at);
99
+ if (createdMs > 0 && createdMs < launchStartedAtMs - 5000) return false;
100
+ }
101
+ return true;
102
+ });
103
+
104
+ // Return the most recent matching session
105
+ if (candidates.length === 0) return null;
106
+
107
+ candidates.sort((a, b) => {
108
+ const aMs = a.created_at ? Date.parse(a.created_at) : 0;
109
+ const bMs = b.created_at ? Date.parse(b.created_at) : 0;
110
+ return bMs - aMs;
111
+ });
112
+
113
+ return candidates[0] ?? null;
114
+ }
115
+
116
+ // ---------------------------------------------------------------------------
117
+ // Session Discovery via File System
118
+ // ---------------------------------------------------------------------------
119
+
120
+ function findDevinSessionFiles(launchStartedAtMs: number): string[] {
121
+ const cliDir = path.join(os.homedir(), ".config", "cognition", "cli");
122
+ if (!fs.existsSync(cliDir)) return [];
123
+
124
+ const files: string[] = [];
125
+ try {
126
+ const entries = fs.readdirSync(cliDir, { withFileTypes: true });
127
+ for (const entry of entries) {
128
+ if (!entry.isFile()) continue;
129
+ const fullPath = path.join(cliDir, entry.name);
130
+ try {
131
+ const stat = fs.statSync(fullPath);
132
+ // Only consider files modified after launch
133
+ if (stat.mtimeMs >= launchStartedAtMs - 5000) {
134
+ files.push(fullPath);
135
+ }
136
+ } catch { /* skip */ }
137
+ }
138
+ } catch {
139
+ logDebug("devin-watcher", "Failed to read ~/.config/cognition/cli/");
140
+ }
141
+
142
+ return files;
143
+ }
144
+
145
+ function readSessionFileContent(filePath: string): string {
146
+ try {
147
+ return fs.readFileSync(filePath, "utf8").trim();
148
+ } catch {
149
+ return "";
150
+ }
151
+ }
152
+
153
+ // ---------------------------------------------------------------------------
154
+ // Tmux Pane Scrollback Capture
155
+ // ---------------------------------------------------------------------------
156
+
157
+ async function capturePaneScrollback(paneId: string | null | undefined): Promise<string | null> {
158
+ if (!paneId) return null;
159
+
160
+ const tmuxPath = findExecutable("tmux");
161
+ if (!tmuxPath) return null;
162
+
163
+ try {
164
+ const result = await execFileAsync(tmuxPath, [
165
+ "capture-pane", "-p", "-t", paneId, "-S", `-${MAX_SCROLLBACK_LINES}`,
166
+ ], { timeout: 5000 });
167
+
168
+ if (result.exitCode !== 0 || !result.stdout.trim()) return null;
169
+
170
+ const lines = result.stdout.split(/\r?\n/)
171
+ .map((line) => {
172
+ const trimmed = line.trim();
173
+ return trimmed.length > MAX_LINE_LENGTH
174
+ ? `${trimmed.slice(0, MAX_LINE_LENGTH)}...`
175
+ : trimmed;
176
+ })
177
+ .filter(Boolean);
178
+
179
+ return lines.length > 0 ? lines.join("\n") : null;
180
+ } catch {
181
+ return null;
182
+ }
183
+ }
184
+
185
+ // ---------------------------------------------------------------------------
186
+ // Summarization
187
+ // ---------------------------------------------------------------------------
188
+
189
+ function looksLikeBadSummary(output: string): boolean {
190
+ const normalized = output.toLowerCase();
191
+ return (
192
+ normalized.includes("don't see") ||
193
+ normalized.includes("no output") ||
194
+ normalized.includes("could you provide") ||
195
+ normalized.includes("paste")
196
+ );
197
+ }
198
+
199
+ function buildTranscriptFromSession(session: DevinSession): string | null {
200
+ const parts: string[] = [];
201
+ if (session.title) parts.push(`Title: ${session.title}`);
202
+ if (session.status) parts.push(`Status: ${session.status}`);
203
+ if (session.model) parts.push(`Model: ${session.model}`);
204
+ if (session.id || session.session_id) parts.push(`Session: ${session.id ?? session.session_id}`);
205
+ return parts.length > 0 ? parts.join("\n") : null;
206
+ }
207
+
208
+ async function summarizeTranscript(transcript: string): Promise<string | null> {
209
+ const result = inference(
210
+ TRANSCRIPT_SUMMARY_PROMPT,
211
+ `Session transcript excerpt:\n\n${transcript}`,
212
+ "fast",
213
+ SUMMARY_TIMEOUT_SEC,
214
+ );
215
+
216
+ if (result.success && result.output?.trim() && !looksLikeBadSummary(result.output)) {
217
+ return result.output.trim();
218
+ }
219
+
220
+ logWarn("devin-watcher", `Transcript summary failed: ${result.error ?? "empty or low-signal output"}`);
221
+ return null;
222
+ }
223
+
224
+ // ---------------------------------------------------------------------------
225
+ // Main Entry Point
226
+ // ---------------------------------------------------------------------------
227
+
228
+ /**
229
+ * Discover and summarize a Devin session.
230
+ * Tries multiple sources in priority order:
231
+ * 1. devin list --format json → session metadata summary
232
+ * 2. ~/.config/cognition/cli/ session files → parse transcript
233
+ * 3. tmux pane scrollback → raw text summary
234
+ */
235
+ export async function summarizeDevinSession(
236
+ projectRoot: string,
237
+ launchStartedAtMs: number,
238
+ paneId?: string | null,
239
+ ): Promise<string | null> {
240
+ // Source 1: devin list metadata
241
+ const session = await findDevinSessionViaList(projectRoot, launchStartedAtMs);
242
+ if (session) {
243
+ logDebug("devin-watcher", `Found session via devin list: ${session.id ?? session.session_id ?? "unknown"}`);
244
+ const sessionMeta = buildTranscriptFromSession(session);
245
+ if (sessionMeta) {
246
+ const summary = await summarizeTranscript(sessionMeta);
247
+ if (summary) return summary;
248
+ }
249
+ }
250
+
251
+ // Source 2: session files in ~/.config/cognition/cli/
252
+ const sessionFiles = findDevinSessionFiles(launchStartedAtMs);
253
+ if (sessionFiles.length > 0) {
254
+ logDebug("devin-watcher", `Found ${sessionFiles.length} session file(s) in cognition cli dir`);
255
+ for (const filePath of sessionFiles) {
256
+ const content = readSessionFileContent(filePath);
257
+ if (content.length > 50) {
258
+ const summary = await summarizeTranscript(content);
259
+ if (summary) return summary;
260
+ }
261
+ }
262
+ }
263
+
264
+ // Source 3: tmux pane scrollback
265
+ const scrollback = await capturePaneScrollback(paneId);
266
+ if (scrollback) {
267
+ logDebug("devin-watcher", `Using tmux scrollback (${scrollback.length} chars)`);
268
+ const summary = await summarizeTranscript(scrollback);
269
+ if (summary) return summary;
270
+
271
+ // Raw fallback: return scrollback lines directly
272
+ const lines = scrollback.split("\n").slice(-12);
273
+ if (lines.length > 0) {
274
+ return `Devin session completed. Transcript fallback:\n- ${lines.join("\n- ")}`;
275
+ }
276
+ }
277
+
278
+ logWarn("devin-watcher", "No session data found from any source");
279
+ return null;
280
+ }