@chinhae/atw-cli 0.1.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 (710) hide show
  1. package/COPYRIGHT +14 -0
  2. package/LICENSE +77 -0
  3. package/README.md +122 -0
  4. package/bin/atw.js +3 -0
  5. package/dist/cli/index.d.ts +3 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +299 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/commands/ablate.d.ts +14 -0
  10. package/dist/commands/ablate.d.ts.map +1 -0
  11. package/dist/commands/ablate.js +307 -0
  12. package/dist/commands/ablate.js.map +1 -0
  13. package/dist/commands/channel/adapters/claude.d.ts +53 -0
  14. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  15. package/dist/commands/channel/adapters/claude.js +225 -0
  16. package/dist/commands/channel/adapters/claude.js.map +1 -0
  17. package/dist/commands/channel/adapters/codex.d.ts +93 -0
  18. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  19. package/dist/commands/channel/adapters/codex.js +573 -0
  20. package/dist/commands/channel/adapters/codex.js.map +1 -0
  21. package/dist/commands/channel/adapters/index.d.ts +94 -0
  22. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  23. package/dist/commands/channel/adapters/index.js +116 -0
  24. package/dist/commands/channel/adapters/index.js.map +1 -0
  25. package/dist/commands/channel/adapters/types.d.ts +33 -0
  26. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  27. package/dist/commands/channel/adapters/types.js +2 -0
  28. package/dist/commands/channel/adapters/types.js.map +1 -0
  29. package/dist/commands/channel/agent-loader.d.ts +32 -0
  30. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  31. package/dist/commands/channel/agent-loader.js +158 -0
  32. package/dist/commands/channel/agent-loader.js.map +1 -0
  33. package/dist/commands/channel/context-loader.d.ts +26 -0
  34. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  35. package/dist/commands/channel/context-loader.js +311 -0
  36. package/dist/commands/channel/context-loader.js.map +1 -0
  37. package/dist/commands/channel/context-trust.d.ts +31 -0
  38. package/dist/commands/channel/context-trust.d.ts.map +1 -0
  39. package/dist/commands/channel/context-trust.js +139 -0
  40. package/dist/commands/channel/context-trust.js.map +1 -0
  41. package/dist/commands/channel/context.d.ts +16 -0
  42. package/dist/commands/channel/context.d.ts.map +1 -0
  43. package/dist/commands/channel/context.js +83 -0
  44. package/dist/commands/channel/context.js.map +1 -0
  45. package/dist/commands/channel/create.d.ts +27 -0
  46. package/dist/commands/channel/create.d.ts.map +1 -0
  47. package/dist/commands/channel/create.js +39 -0
  48. package/dist/commands/channel/create.js.map +1 -0
  49. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  50. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  51. package/dist/commands/channel/dev-parse-trace.js +70 -0
  52. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  53. package/dist/commands/channel/guard.d.ts +150 -0
  54. package/dist/commands/channel/guard.d.ts.map +1 -0
  55. package/dist/commands/channel/guard.js +479 -0
  56. package/dist/commands/channel/guard.js.map +1 -0
  57. package/dist/commands/channel/index.d.ts +3 -0
  58. package/dist/commands/channel/index.d.ts.map +1 -0
  59. package/dist/commands/channel/index.js +535 -0
  60. package/dist/commands/channel/index.js.map +1 -0
  61. package/dist/commands/channel/interrupt.d.ts +10 -0
  62. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  63. package/dist/commands/channel/interrupt.js +22 -0
  64. package/dist/commands/channel/interrupt.js.map +1 -0
  65. package/dist/commands/channel/kill.d.ts +7 -0
  66. package/dist/commands/channel/kill.d.ts.map +1 -0
  67. package/dist/commands/channel/kill.js +130 -0
  68. package/dist/commands/channel/kill.js.map +1 -0
  69. package/dist/commands/channel/list.d.ts +17 -0
  70. package/dist/commands/channel/list.d.ts.map +1 -0
  71. package/dist/commands/channel/list.js +233 -0
  72. package/dist/commands/channel/list.js.map +1 -0
  73. package/dist/commands/channel/messages.d.ts +15 -0
  74. package/dist/commands/channel/messages.d.ts.map +1 -0
  75. package/dist/commands/channel/messages.js +245 -0
  76. package/dist/commands/channel/messages.js.map +1 -0
  77. package/dist/commands/channel/rm.d.ts +27 -0
  78. package/dist/commands/channel/rm.d.ts.map +1 -0
  79. package/dist/commands/channel/rm.js +216 -0
  80. package/dist/commands/channel/rm.js.map +1 -0
  81. package/dist/commands/channel/run.d.ts +30 -0
  82. package/dist/commands/channel/run.d.ts.map +1 -0
  83. package/dist/commands/channel/run.js +130 -0
  84. package/dist/commands/channel/run.js.map +1 -0
  85. package/dist/commands/channel/send.d.ts +11 -0
  86. package/dist/commands/channel/send.d.ts.map +1 -0
  87. package/dist/commands/channel/send.js +24 -0
  88. package/dist/commands/channel/send.js.map +1 -0
  89. package/dist/commands/channel/spawn.d.ts +43 -0
  90. package/dist/commands/channel/spawn.d.ts.map +1 -0
  91. package/dist/commands/channel/spawn.js +247 -0
  92. package/dist/commands/channel/spawn.js.map +1 -0
  93. package/dist/commands/channel/store/events.d.ts +22 -0
  94. package/dist/commands/channel/store/events.d.ts.map +1 -0
  95. package/dist/commands/channel/store/events.js +43 -0
  96. package/dist/commands/channel/store/events.js.map +1 -0
  97. package/dist/commands/channel/store/filter.d.ts +3 -0
  98. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  99. package/dist/commands/channel/store/filter.js +2 -0
  100. package/dist/commands/channel/store/filter.js.map +1 -0
  101. package/dist/commands/channel/store/lock.d.ts +23 -0
  102. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  103. package/dist/commands/channel/store/lock.js +99 -0
  104. package/dist/commands/channel/store/lock.js.map +1 -0
  105. package/dist/commands/channel/store/paths.d.ts +77 -0
  106. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  107. package/dist/commands/channel/store/paths.js +272 -0
  108. package/dist/commands/channel/store/paths.js.map +1 -0
  109. package/dist/commands/channel/store/schema.d.ts +27 -0
  110. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  111. package/dist/commands/channel/store/schema.js +34 -0
  112. package/dist/commands/channel/store/schema.js.map +1 -0
  113. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  114. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  115. package/dist/commands/channel/store/thread-state.js +16 -0
  116. package/dist/commands/channel/store/thread-state.js.map +1 -0
  117. package/dist/commands/channel/store/watch.d.ts +19 -0
  118. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  119. package/dist/commands/channel/store/watch.js +153 -0
  120. package/dist/commands/channel/store/watch.js.map +1 -0
  121. package/dist/commands/channel/supervisor/idle.d.ts +45 -0
  122. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  123. package/dist/commands/channel/supervisor/idle.js +70 -0
  124. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  125. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  126. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  127. package/dist/commands/channel/supervisor/inbox.js +160 -0
  128. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  129. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  130. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  131. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  132. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  133. package/dist/commands/channel/supervisor/stdout.d.ts +71 -0
  134. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  135. package/dist/commands/channel/supervisor/stdout.js +229 -0
  136. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  137. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  138. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  139. package/dist/commands/channel/supervisor/turns.js +45 -0
  140. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  141. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  142. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  143. package/dist/commands/channel/supervisor/warning.js +77 -0
  144. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  145. package/dist/commands/channel/supervisor.d.ts +91 -0
  146. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  147. package/dist/commands/channel/supervisor.js +463 -0
  148. package/dist/commands/channel/supervisor.js.map +1 -0
  149. package/dist/commands/channel/text-body.d.ts +13 -0
  150. package/dist/commands/channel/text-body.d.ts.map +1 -0
  151. package/dist/commands/channel/text-body.js +47 -0
  152. package/dist/commands/channel/text-body.js.map +1 -0
  153. package/dist/commands/channel/threads.d.ts +39 -0
  154. package/dist/commands/channel/threads.d.ts.map +1 -0
  155. package/dist/commands/channel/threads.js +106 -0
  156. package/dist/commands/channel/threads.js.map +1 -0
  157. package/dist/commands/channel/title.d.ts +12 -0
  158. package/dist/commands/channel/title.d.ts.map +1 -0
  159. package/dist/commands/channel/title.js +24 -0
  160. package/dist/commands/channel/title.js.map +1 -0
  161. package/dist/commands/channel/wait.d.ts +17 -0
  162. package/dist/commands/channel/wait.d.ts.map +1 -0
  163. package/dist/commands/channel/wait.js +75 -0
  164. package/dist/commands/channel/wait.js.map +1 -0
  165. package/dist/commands/init.d.ts +71 -0
  166. package/dist/commands/init.d.ts.map +1 -0
  167. package/dist/commands/init.js +1612 -0
  168. package/dist/commands/init.js.map +1 -0
  169. package/dist/commands/mem.d.ts +30 -0
  170. package/dist/commands/mem.d.ts.map +1 -0
  171. package/dist/commands/mem.js +423 -0
  172. package/dist/commands/mem.js.map +1 -0
  173. package/dist/commands/uninstall.d.ts +36 -0
  174. package/dist/commands/uninstall.d.ts.map +1 -0
  175. package/dist/commands/uninstall.js +205 -0
  176. package/dist/commands/uninstall.js.map +1 -0
  177. package/dist/commands/update.d.ts +133 -0
  178. package/dist/commands/update.d.ts.map +1 -0
  179. package/dist/commands/update.js +2255 -0
  180. package/dist/commands/update.js.map +1 -0
  181. package/dist/commands/upgrade.d.ts +28 -0
  182. package/dist/commands/upgrade.d.ts.map +1 -0
  183. package/dist/commands/upgrade.js +84 -0
  184. package/dist/commands/upgrade.js.map +1 -0
  185. package/dist/commands/workflow.d.ts +35 -0
  186. package/dist/commands/workflow.d.ts.map +1 -0
  187. package/dist/commands/workflow.js +232 -0
  188. package/dist/commands/workflow.js.map +1 -0
  189. package/dist/configurators/antigravity.d.ts +7 -0
  190. package/dist/configurators/antigravity.d.ts.map +1 -0
  191. package/dist/configurators/antigravity.js +11 -0
  192. package/dist/configurators/antigravity.js.map +1 -0
  193. package/dist/configurators/claude.d.ts +23 -0
  194. package/dist/configurators/claude.d.ts.map +1 -0
  195. package/dist/configurators/claude.js +123 -0
  196. package/dist/configurators/claude.js.map +1 -0
  197. package/dist/configurators/codebuddy.d.ts +10 -0
  198. package/dist/configurators/codebuddy.d.ts.map +1 -0
  199. package/dist/configurators/codebuddy.js +24 -0
  200. package/dist/configurators/codebuddy.js.map +1 -0
  201. package/dist/configurators/codex.d.ts +57 -0
  202. package/dist/configurators/codex.d.ts.map +1 -0
  203. package/dist/configurators/codex.js +170 -0
  204. package/dist/configurators/codex.js.map +1 -0
  205. package/dist/configurators/copilot.d.ts +18 -0
  206. package/dist/configurators/copilot.d.ts.map +1 -0
  207. package/dist/configurators/copilot.js +50 -0
  208. package/dist/configurators/copilot.js.map +1 -0
  209. package/dist/configurators/cursor.d.ts +10 -0
  210. package/dist/configurators/cursor.d.ts.map +1 -0
  211. package/dist/configurators/cursor.js +23 -0
  212. package/dist/configurators/cursor.js.map +1 -0
  213. package/dist/configurators/devin.d.ts +8 -0
  214. package/dist/configurators/devin.d.ts.map +1 -0
  215. package/dist/configurators/devin.js +12 -0
  216. package/dist/configurators/devin.js.map +1 -0
  217. package/dist/configurators/droid.d.ts +10 -0
  218. package/dist/configurators/droid.d.ts.map +1 -0
  219. package/dist/configurators/droid.js +24 -0
  220. package/dist/configurators/droid.js.map +1 -0
  221. package/dist/configurators/dsh.d.ts +29 -0
  222. package/dist/configurators/dsh.d.ts.map +1 -0
  223. package/dist/configurators/dsh.js +64 -0
  224. package/dist/configurators/dsh.js.map +1 -0
  225. package/dist/configurators/gemini.d.ts +19 -0
  226. package/dist/configurators/gemini.d.ts.map +1 -0
  227. package/dist/configurators/gemini.js +40 -0
  228. package/dist/configurators/gemini.js.map +1 -0
  229. package/dist/configurators/grok.d.ts +17 -0
  230. package/dist/configurators/grok.d.ts.map +1 -0
  231. package/dist/configurators/grok.js +38 -0
  232. package/dist/configurators/grok.js.map +1 -0
  233. package/dist/configurators/index.d.ts +68 -0
  234. package/dist/configurators/index.d.ts.map +1 -0
  235. package/dist/configurators/index.js +191 -0
  236. package/dist/configurators/index.js.map +1 -0
  237. package/dist/configurators/kilo.d.ts +7 -0
  238. package/dist/configurators/kilo.d.ts.map +1 -0
  239. package/dist/configurators/kilo.js +11 -0
  240. package/dist/configurators/kilo.js.map +1 -0
  241. package/dist/configurators/kimi.d.ts +26 -0
  242. package/dist/configurators/kimi.d.ts.map +1 -0
  243. package/dist/configurators/kimi.js +74 -0
  244. package/dist/configurators/kimi.js.map +1 -0
  245. package/dist/configurators/kiro.d.ts +11 -0
  246. package/dist/configurators/kiro.d.ts.map +1 -0
  247. package/dist/configurators/kiro.js +30 -0
  248. package/dist/configurators/kiro.js.map +1 -0
  249. package/dist/configurators/omp.d.ts +6 -0
  250. package/dist/configurators/omp.d.ts.map +1 -0
  251. package/dist/configurators/omp.js +28 -0
  252. package/dist/configurators/omp.js.map +1 -0
  253. package/dist/configurators/opencode.d.ts +5 -0
  254. package/dist/configurators/opencode.d.ts.map +1 -0
  255. package/dist/configurators/opencode.js +80 -0
  256. package/dist/configurators/opencode.js.map +1 -0
  257. package/dist/configurators/pi.d.ts +5 -0
  258. package/dist/configurators/pi.d.ts.map +1 -0
  259. package/dist/configurators/pi.js +39 -0
  260. package/dist/configurators/pi.js.map +1 -0
  261. package/dist/configurators/qoder.d.ts +12 -0
  262. package/dist/configurators/qoder.d.ts.map +1 -0
  263. package/dist/configurators/qoder.js +30 -0
  264. package/dist/configurators/qoder.js.map +1 -0
  265. package/dist/configurators/reasonix.d.ts +17 -0
  266. package/dist/configurators/reasonix.d.ts.map +1 -0
  267. package/dist/configurators/reasonix.js +37 -0
  268. package/dist/configurators/reasonix.js.map +1 -0
  269. package/dist/configurators/shared.d.ts +196 -0
  270. package/dist/configurators/shared.d.ts.map +1 -0
  271. package/dist/configurators/shared.js +600 -0
  272. package/dist/configurators/shared.js.map +1 -0
  273. package/dist/configurators/snow.d.ts +25 -0
  274. package/dist/configurators/snow.d.ts.map +1 -0
  275. package/dist/configurators/snow.js +69 -0
  276. package/dist/configurators/snow.js.map +1 -0
  277. package/dist/configurators/trae.d.ts +16 -0
  278. package/dist/configurators/trae.d.ts.map +1 -0
  279. package/dist/configurators/trae.js +34 -0
  280. package/dist/configurators/trae.js.map +1 -0
  281. package/dist/configurators/workflow.d.ts +51 -0
  282. package/dist/configurators/workflow.d.ts.map +1 -0
  283. package/dist/configurators/workflow.js +210 -0
  284. package/dist/configurators/workflow.js.map +1 -0
  285. package/dist/configurators/zcode.d.ts +19 -0
  286. package/dist/configurators/zcode.d.ts.map +1 -0
  287. package/dist/configurators/zcode.js +51 -0
  288. package/dist/configurators/zcode.js.map +1 -0
  289. package/dist/constants/paths.d.ts +74 -0
  290. package/dist/constants/paths.d.ts.map +1 -0
  291. package/dist/constants/paths.js +83 -0
  292. package/dist/constants/paths.js.map +1 -0
  293. package/dist/constants/version.d.ts +9 -0
  294. package/dist/constants/version.d.ts.map +1 -0
  295. package/dist/constants/version.js +15 -0
  296. package/dist/constants/version.js.map +1 -0
  297. package/dist/index.d.ts +9 -0
  298. package/dist/index.d.ts.map +1 -0
  299. package/dist/index.js +9 -0
  300. package/dist/index.js.map +1 -0
  301. package/dist/migrations/index.d.ts +65 -0
  302. package/dist/migrations/index.d.ts.map +1 -0
  303. package/dist/migrations/index.js +202 -0
  304. package/dist/migrations/index.js.map +1 -0
  305. package/dist/templates/atw/agents/implement-agent.md +69 -0
  306. package/dist/templates/atw/agents/review.md +68 -0
  307. package/dist/templates/atw/config.yaml +158 -0
  308. package/dist/templates/atw/gitattributes.txt +9 -0
  309. package/dist/templates/atw/gitignore.txt +32 -0
  310. package/dist/templates/atw/index.d.ts +70 -0
  311. package/dist/templates/atw/index.d.ts.map +1 -0
  312. package/dist/templates/atw/index.js +137 -0
  313. package/dist/templates/atw/index.js.map +1 -0
  314. package/dist/templates/atw/scripts/__init__.py +5 -0
  315. package/dist/templates/atw/scripts/add_session.py +1545 -0
  316. package/dist/templates/atw/scripts/common/__init__.py +94 -0
  317. package/dist/templates/atw/scripts/common/active_task.py +857 -0
  318. package/dist/templates/atw/scripts/common/atw_config.py +239 -0
  319. package/dist/templates/atw/scripts/common/cli_adapter.py +949 -0
  320. package/dist/templates/atw/scripts/common/config.py +482 -0
  321. package/dist/templates/atw/scripts/common/developer.py +192 -0
  322. package/dist/templates/atw/scripts/common/git.py +203 -0
  323. package/dist/templates/atw/scripts/common/git_context.py +106 -0
  324. package/dist/templates/atw/scripts/common/io.py +160 -0
  325. package/dist/templates/atw/scripts/common/log.py +45 -0
  326. package/dist/templates/atw/scripts/common/packages_context.py +238 -0
  327. package/dist/templates/atw/scripts/common/paths.py +543 -0
  328. package/dist/templates/atw/scripts/common/safe_commit.py +322 -0
  329. package/dist/templates/atw/scripts/common/session_context.py +892 -0
  330. package/dist/templates/atw/scripts/common/task_context.py +470 -0
  331. package/dist/templates/atw/scripts/common/task_queue.py +188 -0
  332. package/dist/templates/atw/scripts/common/task_store.py +1940 -0
  333. package/dist/templates/atw/scripts/common/task_utils.py +498 -0
  334. package/dist/templates/atw/scripts/common/tasks.py +122 -0
  335. package/dist/templates/atw/scripts/common/types.py +110 -0
  336. package/dist/templates/atw/scripts/common/workflow_phase.py +242 -0
  337. package/dist/templates/atw/scripts/get_context.py +16 -0
  338. package/dist/templates/atw/scripts/get_developer.py +26 -0
  339. package/dist/templates/atw/scripts/github_sync.py +391 -0
  340. package/dist/templates/atw/scripts/hooks/linear_sync.py +243 -0
  341. package/dist/templates/atw/scripts/init_developer.py +51 -0
  342. package/dist/templates/atw/scripts/task.py +833 -0
  343. package/dist/templates/atw/scripts/tickets.py +495 -0
  344. package/dist/templates/atw/tasks/.gitkeep +0 -0
  345. package/dist/templates/atw/workflow.md +754 -0
  346. package/dist/templates/claude/agents/atw-implement-agent.md +107 -0
  347. package/dist/templates/claude/agents/atw-review.md +113 -0
  348. package/dist/templates/claude/hooks/statusline.py +332 -0
  349. package/dist/templates/claude/index.d.ts +31 -0
  350. package/dist/templates/claude/index.d.ts.map +1 -0
  351. package/dist/templates/claude/index.js +57 -0
  352. package/dist/templates/claude/index.js.map +1 -0
  353. package/dist/templates/claude/settings.json +73 -0
  354. package/dist/templates/codebuddy/agents/atw-implement-agent.md +107 -0
  355. package/dist/templates/codebuddy/agents/atw-review.md +113 -0
  356. package/dist/templates/codebuddy/index.d.ts +15 -0
  357. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  358. package/dist/templates/codebuddy/index.js +15 -0
  359. package/dist/templates/codebuddy/index.js.map +1 -0
  360. package/dist/templates/codebuddy/settings.json +69 -0
  361. package/dist/templates/codex/agents/atw-implement-agent.toml +37 -0
  362. package/dist/templates/codex/agents/atw-review.toml +56 -0
  363. package/dist/templates/codex/config.toml +39 -0
  364. package/dist/templates/codex/hooks/session-start.py +514 -0
  365. package/dist/templates/codex/hooks.json +27 -0
  366. package/dist/templates/codex/index.d.ts +35 -0
  367. package/dist/templates/codex/index.d.ts.map +1 -0
  368. package/dist/templates/codex/index.js +67 -0
  369. package/dist/templates/codex/index.js.map +1 -0
  370. package/dist/templates/common/bundled-skills/atw-askme/SKILL.md +7 -0
  371. package/dist/templates/common/bundled-skills/atw-askme/agents/openai.yaml +5 -0
  372. package/dist/templates/common/bundled-skills/atw-askme-with-docs/SKILL.md +7 -0
  373. package/dist/templates/common/bundled-skills/atw-askme-with-docs/agents/openai.yaml +5 -0
  374. package/dist/templates/common/bundled-skills/atw-channel/SKILL.md +67 -0
  375. package/dist/templates/common/bundled-skills/atw-channel/references/command-reference.md +480 -0
  376. package/dist/templates/common/bundled-skills/atw-channel/references/forum.md +233 -0
  377. package/dist/templates/common/bundled-skills/atw-channel/references/progress-debugging.md +226 -0
  378. package/dist/templates/common/bundled-skills/atw-channel/references/workers.md +274 -0
  379. package/dist/templates/common/bundled-skills/atw-channel/references/workflows.md +125 -0
  380. package/dist/templates/common/bundled-skills/atw-code-review/SKILL.md +113 -0
  381. package/dist/templates/common/bundled-skills/atw-code-review/agents/openai.yaml +3 -0
  382. package/dist/templates/common/bundled-skills/atw-codebase-design/DEEPENING.md +37 -0
  383. package/dist/templates/common/bundled-skills/atw-codebase-design/DESIGN-IT-TWICE.md +44 -0
  384. package/dist/templates/common/bundled-skills/atw-codebase-design/SKILL.md +114 -0
  385. package/dist/templates/common/bundled-skills/atw-codebase-design/agents/openai.yaml +3 -0
  386. package/dist/templates/common/bundled-skills/atw-diagnosing-bugs/SKILL.md +138 -0
  387. package/dist/templates/common/bundled-skills/atw-diagnosing-bugs/agents/openai.yaml +3 -0
  388. package/dist/templates/common/bundled-skills/atw-diagnosing-bugs/scripts/hitl-loop.template.sh +44 -0
  389. package/dist/templates/common/bundled-skills/atw-domain-modeling/ADR-FORMAT.md +47 -0
  390. package/dist/templates/common/bundled-skills/atw-domain-modeling/CONTEXT-FORMAT.md +60 -0
  391. package/dist/templates/common/bundled-skills/atw-domain-modeling/SKILL.md +74 -0
  392. package/dist/templates/common/bundled-skills/atw-domain-modeling/agents/openai.yaml +3 -0
  393. package/dist/templates/common/bundled-skills/atw-handoff/SKILL.md +16 -0
  394. package/dist/templates/common/bundled-skills/atw-handoff/agents/openai.yaml +5 -0
  395. package/dist/templates/common/bundled-skills/atw-implement/SKILL.md +21 -0
  396. package/dist/templates/common/bundled-skills/atw-implement/agents/openai.yaml +5 -0
  397. package/dist/templates/common/bundled-skills/atw-improve-codebase-architecture/HTML-REPORT.md +123 -0
  398. package/dist/templates/common/bundled-skills/atw-improve-codebase-architecture/SKILL.md +71 -0
  399. package/dist/templates/common/bundled-skills/atw-improve-codebase-architecture/agents/openai.yaml +5 -0
  400. package/dist/templates/common/bundled-skills/atw-init-repo/SKILL.md +130 -0
  401. package/dist/templates/common/bundled-skills/atw-init-repo/references/domain.md +51 -0
  402. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-atw-local.md +133 -0
  403. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-atw.md +109 -0
  404. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-github.md +45 -0
  405. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-gitlab.md +46 -0
  406. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-local.md +30 -0
  407. package/dist/templates/common/bundled-skills/atw-init-repo/references/triage-labels.md +15 -0
  408. package/dist/templates/common/bundled-skills/atw-interview/SKILL.md +22 -0
  409. package/dist/templates/common/bundled-skills/atw-interview/agents/openai.yaml +3 -0
  410. package/dist/templates/common/bundled-skills/atw-map/SKILL.md +128 -0
  411. package/dist/templates/common/bundled-skills/atw-map/agents/openai.yaml +5 -0
  412. package/dist/templates/common/bundled-skills/atw-merge/SKILL.md +14 -0
  413. package/dist/templates/common/bundled-skills/atw-merge/agents/openai.yaml +3 -0
  414. package/dist/templates/common/bundled-skills/atw-meta/SKILL.md +85 -0
  415. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/add-project-local-conventions.md +83 -0
  416. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-agents.md +55 -0
  417. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-context-loading.md +80 -0
  418. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-hooks.md +57 -0
  419. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-skills-or-commands.md +123 -0
  420. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-spec-structure.md +83 -0
  421. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-task-lifecycle.md +91 -0
  422. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-workflow.md +59 -0
  423. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/overview.md +55 -0
  424. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/bundled-skills.md +159 -0
  425. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/context-injection.md +68 -0
  426. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/generated-files.md +80 -0
  427. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/multi-agent-channel.md +69 -0
  428. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/overview.md +51 -0
  429. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/spec-system.md +102 -0
  430. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/task-system.md +126 -0
  431. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/workflow.md +79 -0
  432. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/workspace-memory.md +71 -0
  433. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/agents.md +80 -0
  434. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/hooks-and-settings.md +72 -0
  435. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/overview.md +59 -0
  436. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/platform-map.md +112 -0
  437. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/skills-and-commands.md +86 -0
  438. package/dist/templates/common/bundled-skills/atw-prototype/LOGIC.md +67 -0
  439. package/dist/templates/common/bundled-skills/atw-prototype/SKILL.md +26 -0
  440. package/dist/templates/common/bundled-skills/atw-prototype/UI.md +112 -0
  441. package/dist/templates/common/bundled-skills/atw-prototype/agents/openai.yaml +3 -0
  442. package/dist/templates/common/bundled-skills/atw-research/SKILL.md +14 -0
  443. package/dist/templates/common/bundled-skills/atw-research/agents/openai.yaml +3 -0
  444. package/dist/templates/common/bundled-skills/atw-session-insight/SKILL.md +81 -0
  445. package/dist/templates/common/bundled-skills/atw-session-insight/references/cli-quick-reference.md +65 -0
  446. package/dist/templates/common/bundled-skills/atw-session-insight/references/triggering-patterns.md +93 -0
  447. package/dist/templates/common/bundled-skills/atw-spec/SKILL.md +75 -0
  448. package/dist/templates/common/bundled-skills/atw-spec/agents/openai.yaml +5 -0
  449. package/dist/templates/common/bundled-skills/atw-spec-bootstrap/SKILL.md +41 -0
  450. package/dist/templates/common/bundled-skills/atw-spec-bootstrap/references/mcp-setup.md +90 -0
  451. package/dist/templates/common/bundled-skills/atw-spec-bootstrap/references/repository-analysis.md +59 -0
  452. package/dist/templates/common/bundled-skills/atw-spec-bootstrap/references/spec-task-planning.md +61 -0
  453. package/dist/templates/common/bundled-skills/atw-spec-bootstrap/references/spec-writing.md +70 -0
  454. package/dist/templates/common/bundled-skills/atw-tdd/SKILL.md +38 -0
  455. package/dist/templates/common/bundled-skills/atw-tdd/agents/openai.yaml +3 -0
  456. package/dist/templates/common/bundled-skills/atw-tdd/mocking.md +59 -0
  457. package/dist/templates/common/bundled-skills/atw-tdd/tests.md +77 -0
  458. package/dist/templates/common/bundled-skills/atw-tickets/SKILL.md +105 -0
  459. package/dist/templates/common/bundled-skills/atw-tickets/agents/openai.yaml +5 -0
  460. package/dist/templates/common/bundled-skills/atw-triage/AGENT-BRIEF.md +207 -0
  461. package/dist/templates/common/bundled-skills/atw-triage/OUT-OF-SCOPE.md +105 -0
  462. package/dist/templates/common/bundled-skills/atw-triage/SKILL.md +112 -0
  463. package/dist/templates/common/bundled-skills/atw-triage/agents/openai.yaml +5 -0
  464. package/dist/templates/common/commands/continue.md +55 -0
  465. package/dist/templates/common/commands/finish-work.md +69 -0
  466. package/dist/templates/common/commands/start.md +68 -0
  467. package/dist/templates/common/index.d.ts +48 -0
  468. package/dist/templates/common/index.d.ts.map +1 -0
  469. package/dist/templates/common/index.js +104 -0
  470. package/dist/templates/common/index.js.map +1 -0
  471. package/dist/templates/common/skills/before-dev.md +44 -0
  472. package/dist/templates/common/skills/brainstorm.md +194 -0
  473. package/dist/templates/common/skills/update-spec.md +351 -0
  474. package/dist/templates/copilot/copilot-instructions.md +11 -0
  475. package/dist/templates/copilot/hooks/session-start.py +510 -0
  476. package/dist/templates/copilot/hooks.json +19 -0
  477. package/dist/templates/copilot/index.d.ts +23 -0
  478. package/dist/templates/copilot/index.d.ts.map +1 -0
  479. package/dist/templates/copilot/index.js +48 -0
  480. package/dist/templates/copilot/index.js.map +1 -0
  481. package/dist/templates/cursor/agents/atw-implement-agent.md +106 -0
  482. package/dist/templates/cursor/agents/atw-review.md +112 -0
  483. package/dist/templates/cursor/hooks.json +24 -0
  484. package/dist/templates/cursor/index.d.ts +13 -0
  485. package/dist/templates/cursor/index.d.ts.map +1 -0
  486. package/dist/templates/cursor/index.js +13 -0
  487. package/dist/templates/cursor/index.js.map +1 -0
  488. package/dist/templates/droid/droids/atw-implement-agent.md +99 -0
  489. package/dist/templates/droid/droids/atw-review.md +105 -0
  490. package/dist/templates/droid/index.d.ts +15 -0
  491. package/dist/templates/droid/index.d.ts.map +1 -0
  492. package/dist/templates/droid/index.js +15 -0
  493. package/dist/templates/droid/index.js.map +1 -0
  494. package/dist/templates/droid/settings.json +69 -0
  495. package/dist/templates/dsh/DSH.md +56 -0
  496. package/dist/templates/dsh/index.d.ts +21 -0
  497. package/dist/templates/dsh/index.d.ts.map +1 -0
  498. package/dist/templates/dsh/index.js +25 -0
  499. package/dist/templates/dsh/index.js.map +1 -0
  500. package/dist/templates/extract.d.ts +40 -0
  501. package/dist/templates/extract.d.ts.map +1 -0
  502. package/dist/templates/extract.js +106 -0
  503. package/dist/templates/extract.js.map +1 -0
  504. package/dist/templates/gemini/agents/atw-implement-agent.md +99 -0
  505. package/dist/templates/gemini/agents/atw-review.md +105 -0
  506. package/dist/templates/gemini/index.d.ts +13 -0
  507. package/dist/templates/gemini/index.d.ts.map +1 -0
  508. package/dist/templates/gemini/index.js +13 -0
  509. package/dist/templates/gemini/index.js.map +1 -0
  510. package/dist/templates/gemini/settings.json +40 -0
  511. package/dist/templates/grok/agents/atw-implement-agent.md +115 -0
  512. package/dist/templates/grok/agents/atw-review.md +105 -0
  513. package/dist/templates/grok/index.d.ts +15 -0
  514. package/dist/templates/grok/index.d.ts.map +1 -0
  515. package/dist/templates/grok/index.js +18 -0
  516. package/dist/templates/grok/index.js.map +1 -0
  517. package/dist/templates/kimi/agents/atw-implement-agent.md +114 -0
  518. package/dist/templates/kimi/agents/atw-review.md +103 -0
  519. package/dist/templates/kimi/index.d.ts +20 -0
  520. package/dist/templates/kimi/index.d.ts.map +1 -0
  521. package/dist/templates/kimi/index.js +23 -0
  522. package/dist/templates/kimi/index.js.map +1 -0
  523. package/dist/templates/kiro/agents/atw-implement-agent.json +26 -0
  524. package/dist/templates/kiro/agents/atw-review.json +26 -0
  525. package/dist/templates/kiro/agents/atw.json +34 -0
  526. package/dist/templates/kiro/hooks/atw-workflow-state.kiro.hook +14 -0
  527. package/dist/templates/kiro/index.d.ts +32 -0
  528. package/dist/templates/kiro/index.d.ts.map +1 -0
  529. package/dist/templates/kiro/index.js +28 -0
  530. package/dist/templates/kiro/index.js.map +1 -0
  531. package/dist/templates/markdown/agents.md +21 -0
  532. package/dist/templates/markdown/gitignore.txt +15 -0
  533. package/dist/templates/markdown/index.d.ts +27 -0
  534. package/dist/templates/markdown/index.d.ts.map +1 -0
  535. package/dist/templates/markdown/index.js +52 -0
  536. package/dist/templates/markdown/index.js.map +1 -0
  537. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  538. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  539. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  540. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  541. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  542. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  543. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  544. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  545. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  546. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  547. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  548. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  549. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  550. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  551. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +290 -0
  552. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +634 -0
  553. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  554. package/dist/templates/markdown/workspace-index.md +125 -0
  555. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  556. package/dist/templates/omp/agents/atw-implement-agent.md +45 -0
  557. package/dist/templates/omp/agents/atw-review.md +41 -0
  558. package/dist/templates/omp/extensions/atw/index.ts.txt +1109 -0
  559. package/dist/templates/omp/index.d.ts +4 -0
  560. package/dist/templates/omp/index.d.ts.map +1 -0
  561. package/dist/templates/omp/index.js +9 -0
  562. package/dist/templates/omp/index.js.map +1 -0
  563. package/dist/templates/opencode/agents/atw-implement-agent.md +115 -0
  564. package/dist/templates/opencode/agents/atw-review.md +120 -0
  565. package/dist/templates/opencode/lib/atw-context.js +637 -0
  566. package/dist/templates/opencode/lib/context-visibility.js +148 -0
  567. package/dist/templates/opencode/lib/session-utils.js +474 -0
  568. package/dist/templates/opencode/package.json +6 -0
  569. package/dist/templates/opencode/plugins/inject-subagent-context.js +390 -0
  570. package/dist/templates/opencode/plugins/inject-workflow-state.js +240 -0
  571. package/dist/templates/opencode/plugins/session-start.js +65 -0
  572. package/dist/templates/pi/agents/atw-implement-agent.md +42 -0
  573. package/dist/templates/pi/agents/atw-review.md +37 -0
  574. package/dist/templates/pi/extensions/atw/index.ts.txt +2014 -0
  575. package/dist/templates/pi/index.d.ts +5 -0
  576. package/dist/templates/pi/index.d.ts.map +1 -0
  577. package/dist/templates/pi/index.js +12 -0
  578. package/dist/templates/pi/index.js.map +1 -0
  579. package/dist/templates/pi/settings.json +9 -0
  580. package/dist/templates/qoder/agents/atw-implement-agent.md +100 -0
  581. package/dist/templates/qoder/agents/atw-review.md +106 -0
  582. package/dist/templates/qoder/index.d.ts +15 -0
  583. package/dist/templates/qoder/index.d.ts.map +1 -0
  584. package/dist/templates/qoder/index.js +15 -0
  585. package/dist/templates/qoder/index.js.map +1 -0
  586. package/dist/templates/qoder/settings.json +59 -0
  587. package/dist/templates/reasonix/agents/atw-implement-agent.md +41 -0
  588. package/dist/templates/reasonix/agents/atw-review.md +36 -0
  589. package/dist/templates/reasonix/index.d.ts +13 -0
  590. package/dist/templates/reasonix/index.d.ts.map +1 -0
  591. package/dist/templates/reasonix/index.js +16 -0
  592. package/dist/templates/reasonix/index.js.map +1 -0
  593. package/dist/templates/shared-hooks/index.d.ts +77 -0
  594. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  595. package/dist/templates/shared-hooks/index.js +140 -0
  596. package/dist/templates/shared-hooks/index.js.map +1 -0
  597. package/dist/templates/shared-hooks/inject-shell-session-context.py +292 -0
  598. package/dist/templates/shared-hooks/inject-subagent-context.py +1178 -0
  599. package/dist/templates/shared-hooks/inject-workflow-state.py +488 -0
  600. package/dist/templates/shared-hooks/session-start.py +889 -0
  601. package/dist/templates/snow/SNOW.md +86 -0
  602. package/dist/templates/snow/agents/atw-implement-agent.md +152 -0
  603. package/dist/templates/snow/agents/atw-review.md +135 -0
  604. package/dist/templates/snow/hooks/beforeSubAgentStart.json +15 -0
  605. package/dist/templates/snow/hooks/onSessionStart.json +15 -0
  606. package/dist/templates/snow/hooks/onUserMessage.json +15 -0
  607. package/dist/templates/snow/hooks/write-atw-context.py +637 -0
  608. package/dist/templates/snow/index.d.ts +25 -0
  609. package/dist/templates/snow/index.d.ts.map +1 -0
  610. package/dist/templates/snow/index.js +35 -0
  611. package/dist/templates/snow/index.js.map +1 -0
  612. package/dist/templates/template-utils.d.ts +26 -0
  613. package/dist/templates/template-utils.d.ts.map +1 -0
  614. package/dist/templates/template-utils.js +64 -0
  615. package/dist/templates/template-utils.js.map +1 -0
  616. package/dist/templates/trae/agents/atw-implement-agent.md +100 -0
  617. package/dist/templates/trae/agents/atw-review.md +106 -0
  618. package/dist/templates/trae/hooks.json +39 -0
  619. package/dist/templates/trae/index.d.ts +15 -0
  620. package/dist/templates/trae/index.d.ts.map +1 -0
  621. package/dist/templates/trae/index.js +15 -0
  622. package/dist/templates/trae/index.js.map +1 -0
  623. package/dist/templates/zcode/agents/atw-implement-agent.md +108 -0
  624. package/dist/templates/zcode/agents/atw-review.md +109 -0
  625. package/dist/templates/zcode/config.json +52 -0
  626. package/dist/templates/zcode/index.d.ts +22 -0
  627. package/dist/templates/zcode/index.d.ts.map +1 -0
  628. package/dist/templates/zcode/index.js +26 -0
  629. package/dist/templates/zcode/index.js.map +1 -0
  630. package/dist/types/ai-tools.d.ts +95 -0
  631. package/dist/types/ai-tools.d.ts.map +1 -0
  632. package/dist/types/ai-tools.js +494 -0
  633. package/dist/types/ai-tools.js.map +1 -0
  634. package/dist/types/migration.d.ts +125 -0
  635. package/dist/types/migration.d.ts.map +1 -0
  636. package/dist/types/migration.js +8 -0
  637. package/dist/types/migration.js.map +1 -0
  638. package/dist/utils/ablation-store.d.ts +123 -0
  639. package/dist/utils/ablation-store.d.ts.map +1 -0
  640. package/dist/utils/ablation-store.js +749 -0
  641. package/dist/utils/ablation-store.js.map +1 -0
  642. package/dist/utils/agent-refs.d.ts +31 -0
  643. package/dist/utils/agent-refs.d.ts.map +1 -0
  644. package/dist/utils/agent-refs.js +63 -0
  645. package/dist/utils/agent-refs.js.map +1 -0
  646. package/dist/utils/atomic-write.d.ts +12 -0
  647. package/dist/utils/atomic-write.d.ts.map +1 -0
  648. package/dist/utils/atomic-write.js +30 -0
  649. package/dist/utils/atomic-write.js.map +1 -0
  650. package/dist/utils/compare-versions.d.ts +12 -0
  651. package/dist/utils/compare-versions.d.ts.map +1 -0
  652. package/dist/utils/compare-versions.js +86 -0
  653. package/dist/utils/compare-versions.js.map +1 -0
  654. package/dist/utils/cwd-guard.d.ts +38 -0
  655. package/dist/utils/cwd-guard.d.ts.map +1 -0
  656. package/dist/utils/cwd-guard.js +62 -0
  657. package/dist/utils/cwd-guard.js.map +1 -0
  658. package/dist/utils/file-writer.d.ts +36 -0
  659. package/dist/utils/file-writer.d.ts.map +1 -0
  660. package/dist/utils/file-writer.js +204 -0
  661. package/dist/utils/file-writer.js.map +1 -0
  662. package/dist/utils/managed-paths.d.ts +5 -0
  663. package/dist/utils/managed-paths.d.ts.map +1 -0
  664. package/dist/utils/managed-paths.js +51 -0
  665. package/dist/utils/managed-paths.js.map +1 -0
  666. package/dist/utils/managed-removal.d.ts +74 -0
  667. package/dist/utils/managed-removal.d.ts.map +1 -0
  668. package/dist/utils/managed-removal.js +270 -0
  669. package/dist/utils/managed-removal.js.map +1 -0
  670. package/dist/utils/manifest-prune.d.ts +61 -0
  671. package/dist/utils/manifest-prune.d.ts.map +1 -0
  672. package/dist/utils/manifest-prune.js +135 -0
  673. package/dist/utils/manifest-prune.js.map +1 -0
  674. package/dist/utils/posix.d.ts +13 -0
  675. package/dist/utils/posix.d.ts.map +1 -0
  676. package/dist/utils/posix.js +15 -0
  677. package/dist/utils/posix.js.map +1 -0
  678. package/dist/utils/project-detector.d.ts +46 -0
  679. package/dist/utils/project-detector.d.ts.map +1 -0
  680. package/dist/utils/project-detector.js +666 -0
  681. package/dist/utils/project-detector.js.map +1 -0
  682. package/dist/utils/proxy.d.ts +25 -0
  683. package/dist/utils/proxy.d.ts.map +1 -0
  684. package/dist/utils/proxy.js +60 -0
  685. package/dist/utils/proxy.js.map +1 -0
  686. package/dist/utils/registry-config.d.ts +7 -0
  687. package/dist/utils/registry-config.d.ts.map +1 -0
  688. package/dist/utils/registry-config.js +172 -0
  689. package/dist/utils/registry-config.js.map +1 -0
  690. package/dist/utils/task-json.d.ts +13 -0
  691. package/dist/utils/task-json.d.ts.map +1 -0
  692. package/dist/utils/task-json.js +12 -0
  693. package/dist/utils/task-json.js.map +1 -0
  694. package/dist/utils/template-fetcher.d.ts +161 -0
  695. package/dist/utils/template-fetcher.d.ts.map +1 -0
  696. package/dist/utils/template-fetcher.js +994 -0
  697. package/dist/utils/template-fetcher.js.map +1 -0
  698. package/dist/utils/template-hash.d.ts +127 -0
  699. package/dist/utils/template-hash.d.ts.map +1 -0
  700. package/dist/utils/template-hash.js +335 -0
  701. package/dist/utils/template-hash.js.map +1 -0
  702. package/dist/utils/uninstall-scrubbers.d.ts +66 -0
  703. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  704. package/dist/utils/uninstall-scrubbers.js +417 -0
  705. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  706. package/dist/utils/workflow-resolver.d.ts +86 -0
  707. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  708. package/dist/utils/workflow-resolver.js +265 -0
  709. package/dist/utils/workflow-resolver.js.map +1 -0
  710. package/package.json +93 -0
@@ -0,0 +1,390 @@
1
+ /* global process */
2
+ /**
3
+ * ATW Context Injection Plugin
4
+ *
5
+ * Injects context when Task tool is called with supported subagent types.
6
+ * Uses OpenCode's tool.execute.before hook.
7
+ */
8
+
9
+ import { existsSync } from "fs"
10
+ import { join } from "path"
11
+ import {
12
+ AtwContext,
13
+ debugLog,
14
+ readContextInjectionLimits,
15
+ ContextBudget,
16
+ materializeArtifact,
17
+ } from "../lib/atw-context.js"
18
+
19
+ // Supported subagent types, `atw-` prefix stripped (see below). These must
20
+ // stay in step with AGENTS_ALL in shared-hooks/inject-subagent-context.py,
21
+ // which is the authority: this list drifted to the pre-M1 role names once and
22
+ // nothing raised — every dispatch simply fell through the whitelist and
23
+ // injection never fired. `research` is retired as a sub-agent (C5).
24
+ const AGENTS_ALL = ["implement-agent", "review"]
25
+ const AGENTS_REQUIRE_TASK = ["implement-agent", "review"]
26
+
27
+ // Match `Active task: <path>` on the first non-empty line of the dispatch
28
+ // prompt. Mirrors the contract in workflow.md's [workflow-state:implement]
29
+ // breadcrumb so multi-window users can disambiguate which task is targeted.
30
+ const ACTIVE_TASK_HINT_RE = /^\s*Active task:\s*(\S+)\s*$/m
31
+
32
+ function extractActiveTaskHint(prompt) {
33
+ if (typeof prompt !== "string" || !prompt) return null
34
+ const match = prompt.match(ACTIVE_TASK_HINT_RE)
35
+ return match ? match[1].trim() : null
36
+ }
37
+
38
+ /**
39
+ * Get context for implement agent. `taskDir` may be relative
40
+ * (`.atw/tasks/foo`) or absolute; both are resolved via
41
+ * `ctx.resolveTaskDir`.
42
+ *
43
+ * Read order (mirrors Python `get_implement_context`):
44
+ * 1. All files in implement.jsonl (spec/research manifests)
45
+ * 2. prd.md (requirements)
46
+ * `design.md` / `implement.md` are not materialized (D32/C23): nothing writes
47
+ * them, and a reader that still reaches for them is what keeps the cut from
48
+ * landing. Mirrors Python `get_implement_context`.
49
+ * All blocks share one total budget.
50
+ */
51
+ function getImplementContext(ctx, taskDir) {
52
+ const parts = []
53
+ const taskDirFull = ctx.resolveTaskDir(taskDir)
54
+ if (!taskDirFull) return ""
55
+
56
+ const limits = readContextInjectionLimits(ctx.directory)
57
+ const budget = new ContextBudget(limits.max_total_bytes)
58
+
59
+ // 1. Read implement.jsonl
60
+ const jsonlPath = join(taskDirFull, "implement.jsonl")
61
+ const blocks = ctx.readJsonlWithFiles(jsonlPath, limits, budget)
62
+ if (blocks.length > 0) {
63
+ parts.push(ctx.buildContextFromEntries(blocks))
64
+ }
65
+
66
+ // 2. Requirements document
67
+ const prdBlock = materializeArtifact(
68
+ ctx.directory,
69
+ `${taskDir}/prd.md`,
70
+ `${taskDir}/prd.md (Requirements)`,
71
+ "Requirements document",
72
+ limits,
73
+ budget,
74
+ )
75
+ if (prdBlock) parts.push(prdBlock)
76
+
77
+ return parts.join("\n\n")
78
+ }
79
+
80
+ /**
81
+ * Get context for check agent. `taskDir` may be relative or absolute.
82
+ * Same read order and shared budget as the implement context.
83
+ */
84
+ function getCheckContext(ctx, taskDir) {
85
+ const parts = []
86
+ const taskDirFull = ctx.resolveTaskDir(taskDir)
87
+ if (!taskDirFull) return ""
88
+
89
+ const limits = readContextInjectionLimits(ctx.directory)
90
+ const budget = new ContextBudget(limits.max_total_bytes)
91
+
92
+ const jsonlPath = join(taskDirFull, "check.jsonl")
93
+ const blocks = ctx.readJsonlWithFiles(jsonlPath, limits, budget)
94
+ if (blocks.length > 0) {
95
+ parts.push(ctx.buildContextFromEntries(blocks))
96
+ }
97
+
98
+ const prdBlock = materializeArtifact(
99
+ ctx.directory,
100
+ `${taskDir}/prd.md`,
101
+ `${taskDir}/prd.md (Requirements)`,
102
+ "Requirements document",
103
+ limits,
104
+ budget,
105
+ )
106
+ if (prdBlock) parts.push(prdBlock)
107
+
108
+ return parts.join("\n\n")
109
+ }
110
+
111
+ /**
112
+ * Build enhanced prompt with context
113
+ */
114
+ function buildPrompt(agentType, originalPrompt, context) {
115
+ const templates = {
116
+ "implement-agent": `<!-- atw-hook-injected -->
117
+ # Implement Agent Task
118
+
119
+ You are the Implement Agent in the Multi-Agent Pipeline.
120
+
121
+ ## Your Context
122
+
123
+ ${context}
124
+
125
+ ---
126
+
127
+ ## Your Task
128
+
129
+ ${originalPrompt}
130
+
131
+ ---
132
+
133
+ ## Workflow
134
+
135
+ 1. **Understand specs** - All dev specs are injected above
136
+ 2. **Understand task artifacts** - Read requirements, technical design if present, and execution plan if present
137
+ 3. **Implement feature** - Follow specs and task artifacts
138
+ 4. **Self-check** - Ensure code quality
139
+
140
+ ## Important Constraints
141
+
142
+ - Do NOT execute git commit
143
+ - Follow all dev specs injected above
144
+ - Report list of modified/created files when done`,
145
+
146
+ review: `<!-- atw-hook-injected -->
147
+ # Check Agent Task
148
+
149
+ You are the Check Agent in the Multi-Agent Pipeline.
150
+
151
+ ## Your Context
152
+
153
+ ${context}
154
+
155
+ ---
156
+
157
+ ## Your Task
158
+
159
+ ${originalPrompt}
160
+
161
+ ---
162
+
163
+ ## Workflow
164
+
165
+ 1. **Get changes** - Run \`git diff --name-only\` and \`git diff\`
166
+ 2. **Check against specs** - Check item by item
167
+ 3. **Self-fix** - Fix issues directly, don't just report
168
+ 4. **Run verification** - Run lint and typecheck
169
+
170
+ ## Important Constraints
171
+
172
+ - Fix issues yourself, don't just report
173
+ - Must execute complete checklist`,
174
+ }
175
+
176
+ return templates[agentType] || originalPrompt
177
+ }
178
+
179
+ function shellQuote(value) {
180
+ return `'${String(value).replace(/'/g, "'\\''")}'`
181
+ }
182
+
183
+ function powershellQuote(value) {
184
+ return `'${String(value).replace(/'/g, "''")}'`
185
+ }
186
+
187
+ function envValue(env, key) {
188
+ const value = env?.[key]
189
+ return typeof value === "string" && value.trim() ? value.trim() : null
190
+ }
191
+
192
+ function shellBasename(value) {
193
+ return value.replace(/\\/g, "/").split("/").pop()?.toLowerCase() || ""
194
+ }
195
+
196
+ function isWindowsPosixShell(env = process.env) {
197
+ if (envValue(env, "MSYSTEM")) return true
198
+ if (envValue(env, "MINGW_PREFIX")) return true
199
+ if (envValue(env, "OPENCODE_GIT_BASH_PATH")) return true
200
+
201
+ const ostype = envValue(env, "OSTYPE")?.toLowerCase() || ""
202
+ if (/(msys|mingw|cygwin)/.test(ostype)) return true
203
+
204
+ const shell = shellBasename(envValue(env, "SHELL") || "")
205
+ return /^(bash|sh|zsh)(\.exe)?$/.test(shell)
206
+ }
207
+
208
+ function buildAtwContextPrefix(contextKey, hostPlatform = process.platform, env = process.env) {
209
+ if (hostPlatform === "win32" && !isWindowsPosixShell(env)) {
210
+ return `$env:ATW_CONTEXT_ID = ${powershellQuote(contextKey)}; `
211
+ }
212
+
213
+ return `export ATW_CONTEXT_ID=${shellQuote(contextKey)}; `
214
+ }
215
+
216
+ function getBashCommandKey(args) {
217
+ if (!args || typeof args !== "object") return null
218
+ if (typeof args.command === "string") return "command"
219
+ if (typeof args.cmd === "string") return "cmd"
220
+ return null
221
+ }
222
+
223
+ function commandStartsWithAtwContext(command) {
224
+ const firstCommand = command.trimStart().split(/[;&|]/, 1)[0].trimStart()
225
+ return (
226
+ /^ATW_CONTEXT_ID\s*=/.test(firstCommand) ||
227
+ /^export\s+ATW_CONTEXT_ID\s*=/.test(firstCommand) ||
228
+ /^env\s+(?:(?:-\S+|[A-Za-z_][A-Za-z0-9_]*=\S*)\s+)*ATW_CONTEXT_ID\s*=/.test(firstCommand) ||
229
+ /^\$env:ATW_CONTEXT_ID\s*=/i.test(firstCommand)
230
+ )
231
+ }
232
+
233
+ /**
234
+ * OpenCode exposes no session identity to Bash at all — it sets no session env
235
+ * var in any process. The plugin hook does receive it, so inject it into Bash
236
+ * commands before execution; that prefix is the only channel by which an
237
+ * AI-run `task.py` sees the OpenCode session.
238
+ */
239
+ function injectAtwContextIntoBash(ctx, input, output, hostPlatform, env) {
240
+ const args = output?.args
241
+ const commandKey = getBashCommandKey(args)
242
+ if (!commandKey) return false
243
+
244
+ const command = args[commandKey]
245
+ if (!command.trim()) return false
246
+ if (commandStartsWithAtwContext(command)) return false
247
+
248
+ const contextKey = ctx.getContextKey(input)
249
+ if (!contextKey) return false
250
+
251
+ args[commandKey] = `${buildAtwContextPrefix(contextKey, hostPlatform, env)}${command}`
252
+ return true
253
+ }
254
+
255
+ // OpenCode plugin factory: `export default async (input) => hooks`.
256
+ // OpenCode 1.2.x iterates every module export and invokes it as a function
257
+ // (packages/opencode/src/plugin/index.ts — `for ([_, fn] of Object.entries(mod)) await fn(input)`);
258
+ // the previous `{ id, server }` object shape failed with
259
+ // `TypeError: fn is not a function` in 1.2.x.
260
+ export default async ({ directory, platform: hostPlatform = process.platform, env = process.env }) => {
261
+ const ctx = new AtwContext(directory)
262
+ debugLog("inject", "Plugin loaded, directory:", directory)
263
+
264
+ return {
265
+ "tool.execute.before": async (input, output) => {
266
+ try {
267
+ if (process.env.ATW_HOOKS === "0" || process.env.ATW_DISABLE_HOOKS === "1") {
268
+ return
269
+ }
270
+ debugLog("inject", "tool.execute.before called, tool:", input?.tool)
271
+
272
+ const toolName = input?.tool?.toLowerCase()
273
+ if (toolName === "bash") {
274
+ if (injectAtwContextIntoBash(ctx, input, output, hostPlatform, env)) {
275
+ debugLog("inject", "Injected ATW_CONTEXT_ID into Bash command")
276
+ }
277
+ return
278
+ }
279
+
280
+ if (toolName !== "task") {
281
+ return
282
+ }
283
+
284
+ const args = output?.args
285
+ if (!args) return
286
+
287
+ const rawSubagentType = args.subagent_type
288
+ // Agent ids carry an "atw-" prefix; the dispatch table below does not.
289
+ const subagentType = (rawSubagentType || "").replace(/^atw-/, "")
290
+ const originalPrompt = args.prompt || ""
291
+
292
+ debugLog("inject", "Task tool called, subagent_type:", rawSubagentType)
293
+
294
+ if (!AGENTS_ALL.includes(subagentType)) {
295
+ debugLog("inject", "Skipping - unsupported subagent_type")
296
+ return
297
+ }
298
+
299
+ // Resolve active task in this priority order (only later steps
300
+ // run when earlier ones miss):
301
+ // 1. Exact session runtime context lookup for input.sessionID
302
+ // 2. `Active task: <path>` hint in the dispatch prompt
303
+ // (explicit per-dispatch override — beats single-session
304
+ // inference so multi-window users can disambiguate)
305
+ // 3. Single-session fallback — only when exactly 1 session
306
+ // runtime file exists locally
307
+ let taskDir = null
308
+ let taskSource = null
309
+
310
+ const contextKey = ctx.getContextKey(input)
311
+ if (contextKey) {
312
+ const context = ctx.readContext(contextKey)
313
+ const exactRef = ctx.normalizeTaskRef(context?.current_task || "")
314
+ if (exactRef) {
315
+ taskDir = exactRef
316
+ taskSource = `session:${contextKey}`
317
+ }
318
+ }
319
+
320
+ if (!taskDir) {
321
+ const hintRef = extractActiveTaskHint(originalPrompt)
322
+ if (hintRef) {
323
+ const hintNormalized = ctx.normalizeTaskRef(hintRef)
324
+ if (hintNormalized) {
325
+ const hintDir = ctx.resolveTaskDir(hintNormalized)
326
+ if (hintDir && existsSync(hintDir)) {
327
+ taskDir = hintNormalized
328
+ taskSource = "prompt-hint"
329
+ debugLog("inject", "Resolved task from Active task: hint:", hintNormalized)
330
+ }
331
+ }
332
+ }
333
+ }
334
+
335
+ if (!taskDir) {
336
+ const fallback = ctx._resolveSingleSessionFallback()
337
+ if (fallback?.taskPath) {
338
+ const fallbackDir = ctx.resolveTaskDir(fallback.taskPath)
339
+ if (fallbackDir && existsSync(fallbackDir)) {
340
+ taskDir = fallback.taskPath
341
+ taskSource = fallback.source
342
+ debugLog("inject", "Resolved task via single-session fallback:", taskDir, "source:", taskSource)
343
+ }
344
+ }
345
+ }
346
+
347
+ // Agents requiring task directory
348
+ if (AGENTS_REQUIRE_TASK.includes(subagentType)) {
349
+ // subagentType is already stripped of "atw-" prefix above
350
+ if (!taskDir) {
351
+ debugLog("inject", "Skipping - no current task")
352
+ return
353
+ }
354
+ const taskDirFull = ctx.resolveTaskDir(taskDir)
355
+ if (!taskDirFull || !existsSync(taskDirFull)) {
356
+ debugLog("inject", "Skipping - task directory not found")
357
+ return
358
+ }
359
+ }
360
+
361
+ // Get context based on agent type
362
+ let context = ""
363
+ switch (subagentType) {
364
+ case "implement-agent":
365
+ context = getImplementContext(ctx, taskDir)
366
+ break
367
+ case "review":
368
+ context = getCheckContext(ctx, taskDir)
369
+ break
370
+ }
371
+
372
+ if (!context) {
373
+ debugLog("inject", "No context to inject")
374
+ return
375
+ }
376
+
377
+ const newPrompt = buildPrompt(subagentType, originalPrompt, context)
378
+
379
+ // Mutate args in-place — whole-object replacement does NOT work for the task tool
380
+ // because the runtime holds a local reference to the same args object.
381
+ args.prompt = newPrompt
382
+
383
+ debugLog("inject", "Injected context for", subagentType, "prompt length:", newPrompt.length)
384
+
385
+ } catch (error) {
386
+ debugLog("inject", "Error in tool.execute.before:", error.message, error.stack)
387
+ }
388
+ }
389
+ }
390
+ }
@@ -0,0 +1,240 @@
1
+ /* global process */
2
+ /**
3
+ * ATW Workflow State Injection Plugin
4
+ *
5
+ * Per-turn UserPromptSubmit equivalent for OpenCode.
6
+ *
7
+ * On every model request, inject a short <workflow-state> breadcrumb
8
+ * into the in-memory copy of the latest user message via
9
+ * `experimental.chat.messages.transform`. Stored history and the TUI
10
+ * are not modified. Breadcrumb text is pulled exclusively
11
+ * from the project's workflow.md [workflow-state:STATUS] tag blocks —
12
+ * workflow.md is the single source of truth. There are no fallback
13
+ * tables in this plugin: when workflow.md is missing or a tag is
14
+ * absent, the breadcrumb degrades to a generic
15
+ * "Refer to workflow.md for current step." line so users see (and fix)
16
+ * the broken state instead of the plugin silently masking it.
17
+ *
18
+ * Silently skips when:
19
+ * - No .atw/ directory
20
+ * - No active task in the session runtime context
21
+ * - task.json malformed or missing status
22
+ */
23
+
24
+ import { existsSync, readFileSync } from "fs"
25
+ import { join } from "path"
26
+ import {
27
+ MESSAGES_TRANSFORM_HOOK,
28
+ latestUserPromptText,
29
+ platformInputFromMessages,
30
+ prependEphemeralText,
31
+ } from "../lib/context-visibility.js"
32
+ import { AtwContext, debugLog, isAtwSubagent } from "../lib/atw-context.js"
33
+
34
+ // Supports STATUS values with letters, digits, underscores, hyphens
35
+ // (so "in-review" / "blocked-by-team" work alongside "task_error").
36
+ const TAG_RE = /\[workflow-state:([A-Za-z0-9_-]+)\]\s*\n([\s\S]*?)\n\s*\[\/workflow-state:\1\]/g
37
+
38
+ // Escape hatch for the per-turn breadcrumb. Mirrors
39
+ // `common.config.get_prompt_injection_config()` / the shared Python hook's
40
+ // `_resolve_skip_keyword()` + `prompt_has_skip_keyword()`.
41
+ const DEFAULT_PROMPT_INJECTION_SKIP_KEYWORD = "no-atw"
42
+
43
+ function stripInlineComment(value) {
44
+ let inQuote = null
45
+ for (let idx = 0; idx < value.length; idx++) {
46
+ const ch = value[idx]
47
+ if (inQuote) {
48
+ if (ch === inQuote) inQuote = null
49
+ continue
50
+ }
51
+ if (ch === '"' || ch === "'") {
52
+ inQuote = ch
53
+ continue
54
+ }
55
+ if (ch === "#" && (idx === 0 || /\s/.test(value[idx - 1]))) return value.slice(0, idx)
56
+ }
57
+ return value
58
+ }
59
+
60
+ function unquoteYaml(s) {
61
+ if (s.length >= 2 && s[0] === s[s.length - 1] && (s[0] === '"' || s[0] === "'")) return s.slice(1, -1)
62
+ return s
63
+ }
64
+
65
+ /**
66
+ * Line-based parser for ONLY the `prompt_injection:` block of
67
+ * `.atw/config.yaml`. Not a general YAML parser — mirrors
68
+ * `common.config.get_prompt_injection_config()` semantics for this section
69
+ * only (missing key keeps the default; non-string value keeps the default).
70
+ */
71
+ function readSkipKeyword(directory) {
72
+ const path = join(directory, ".atw", "config.yaml")
73
+ if (!existsSync(path)) return DEFAULT_PROMPT_INJECTION_SKIP_KEYWORD
74
+ let text
75
+ try {
76
+ text = readFileSync(path, "utf-8")
77
+ } catch {
78
+ return DEFAULT_PROMPT_INJECTION_SKIP_KEYWORD
79
+ }
80
+
81
+ let inSection = false
82
+ let sectionIndent = -1
83
+ for (const rawLine of text.split(/\r?\n/)) {
84
+ const trimmed = rawLine.trim()
85
+ if (!inSection) {
86
+ if (/^prompt_injection\s*:\s*(#.*)?$/.test(trimmed)) {
87
+ inSection = true
88
+ sectionIndent = rawLine.length - rawLine.trimStart().length
89
+ }
90
+ continue
91
+ }
92
+ if (!trimmed || trimmed.startsWith("#")) continue
93
+ const indent = rawLine.length - rawLine.trimStart().length
94
+ if (indent <= sectionIndent) break
95
+ const m = trimmed.match(/^skip_keyword\s*:\s*(.*)$/)
96
+ if (!m) continue
97
+ return unquoteYaml(stripInlineComment(m[1]).trim())
98
+ }
99
+ return DEFAULT_PROMPT_INJECTION_SKIP_KEYWORD
100
+ }
101
+
102
+ /**
103
+ * Case-insensitive, word-boundary match of `keyword` in `text`. Hyphen
104
+ * counts as a word char so "no-atwx" / "xno-atw" don't match, but
105
+ * punctuation/whitespace boundaries do. Empty keyword never matches.
106
+ */
107
+ function promptHasSkipKeyword(text, keyword) {
108
+ if (!keyword || typeof text !== "string") return false
109
+ const escaped = keyword.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
110
+ const pattern = new RegExp(`(?<![\\w-])${escaped}(?![\\w-])`, "i")
111
+ return pattern.test(text)
112
+ }
113
+
114
+ /**
115
+ * Parse workflow.md for [workflow-state:STATUS] blocks.
116
+ *
117
+ * Returns {status: body}. workflow.md is the single source of truth —
118
+ * there are no fallback tables here. Missing tags (or a missing /
119
+ * unreadable workflow.md) fall back to a generic line in
120
+ * buildBreadcrumb so users see the broken state and fix workflow.md
121
+ * rather than the plugin silently masking it.
122
+ */
123
+ function loadBreadcrumbs(directory) {
124
+ const workflowPath = join(directory, ".atw", "workflow.md")
125
+ if (!existsSync(workflowPath)) return {}
126
+ let content
127
+ try {
128
+ content = readFileSync(workflowPath, "utf-8")
129
+ } catch {
130
+ return {}
131
+ }
132
+ const result = {}
133
+ for (const match of content.matchAll(TAG_RE)) {
134
+ const status = match[1]
135
+ const body = match[2].trim()
136
+ if (body) result[status] = body
137
+ }
138
+ return result
139
+ }
140
+
141
+ /**
142
+ * Get (taskId, status) from active task, or null if no active task.
143
+ */
144
+ function getActiveTask(ctx, platformInput = null) {
145
+ const active = ctx.getActiveTask(platformInput)
146
+ const taskRef = active.taskPath
147
+ if (!taskRef) return null
148
+ const taskDir = ctx.resolveTaskDir(taskRef)
149
+ if (active.stale || !taskDir || !existsSync(taskDir)) {
150
+ return { id: taskRef.split("/").pop(), status: "stale", source: active.source }
151
+ }
152
+ const taskJsonPath = join(taskDir, "task.json")
153
+ if (!existsSync(taskJsonPath)) return null
154
+ try {
155
+ const data = JSON.parse(readFileSync(taskJsonPath, "utf-8"))
156
+ const status = typeof data.status === "string" ? data.status : ""
157
+ if (!status) return null
158
+ const id = data.id || taskRef.split("/").pop()
159
+ return { id, status, source: active.source }
160
+ } catch {
161
+ return null
162
+ }
163
+ }
164
+
165
+ /**
166
+ * Build the <workflow-state>...</workflow-state> block.
167
+ * - Known status (tag present in workflow.md) → detailed body
168
+ * - Unknown status (no tag, or workflow.md missing) → generic
169
+ * "Refer to workflow.md for current step." line
170
+ * - no_task pseudo-status (id === null) → header omits task info
171
+ */
172
+ function buildBreadcrumb(id, status, templates) {
173
+ let body = templates[status]
174
+ if (body === undefined) {
175
+ body = "Refer to workflow.md for current step."
176
+ }
177
+ let header = id === null ? `Status: ${status}` : `Task: ${id} (${status})`
178
+ return `<workflow-state>\n${header}\n${body}\n</workflow-state>`
179
+ }
180
+
181
+ // OpenCode 1.2.x expects plugins to be factory functions (see inject-subagent-context.js comment).
182
+ export default async ({ directory }) => {
183
+ const ctx = new AtwContext(directory)
184
+ debugLog("workflow-state", "Plugin loaded, directory:", directory)
185
+
186
+ return {
187
+ [MESSAGES_TRANSFORM_HOOK]: async (_input, output) => {
188
+ try {
189
+ const messages = output?.messages
190
+ const platformInput = platformInputFromMessages(messages)
191
+ // Skip ATW sub-agent turns — the per-turn breadcrumb is for the
192
+ // main session only; sub-agent context comes from the parent's
193
+ // tool.execute.before injection.
194
+ if (isAtwSubagent(platformInput)) {
195
+ debugLog("workflow-state", "Skipping atw subagent turn:", platformInput?.agent)
196
+ return
197
+ }
198
+ if (process.env.ATW_HOOKS === "0" || process.env.ATW_DISABLE_HOOKS === "1") {
199
+ return
200
+ }
201
+ if (process.env.OPENCODE_NON_INTERACTIVE === "1") {
202
+ return
203
+ }
204
+ if (!ctx.isAtwProject()) {
205
+ return
206
+ }
207
+
208
+ const originalText = latestUserPromptText(messages)
209
+
210
+ // Escape hatch: user prompt contains the skip keyword
211
+ // as a standalone word — emit nothing for this turn only.
212
+ if (promptHasSkipKeyword(originalText, readSkipKeyword(directory))) {
213
+ debugLog("workflow-state", "Skipping turn: skip keyword present in prompt")
214
+ return
215
+ }
216
+
217
+ const templates = loadBreadcrumbs(directory)
218
+ const task = getActiveTask(ctx, platformInput)
219
+ const breadcrumb = task
220
+ ? buildBreadcrumb(task.id, task.status, templates, task.source)
221
+ : buildBreadcrumb(null, "no_task", templates)
222
+
223
+ prependEphemeralText(messages, breadcrumb)
224
+ debugLog(
225
+ "workflow-state",
226
+ "Injected breadcrumb for task",
227
+ task ? task.id : "none",
228
+ "status",
229
+ task ? task.status : "no_task",
230
+ )
231
+ } catch (error) {
232
+ debugLog(
233
+ "workflow-state",
234
+ "Error in messages.transform:",
235
+ error instanceof Error ? error.message : String(error),
236
+ )
237
+ }
238
+ },
239
+ }
240
+ }
@@ -0,0 +1,65 @@
1
+ /* global process */
2
+ /**
3
+ * ATW Session Start Plugin
4
+ *
5
+ * Injects compact SessionStart context into the copy of the latest user
6
+ * message that OpenCode sends to the model. Uses
7
+ * `experimental.chat.messages.transform` so TUI / Web / SQLite history
8
+ * stay untouched.
9
+ */
10
+
11
+ import { AtwContext, debugLog, isAtwSubagent } from "../lib/atw-context.js"
12
+ import {
13
+ MESSAGES_TRANSFORM_HOOK,
14
+ platformInputFromMessages,
15
+ prependEphemeralText,
16
+ transcriptHasAssistantMessage,
17
+ } from "../lib/context-visibility.js"
18
+ import { buildSessionContext } from "../lib/session-utils.js"
19
+
20
+ const FIRST_REPLY_NOTICE_RE = /<first-reply-notice>[\s\S]*?<\/first-reply-notice>\s*/g
21
+
22
+ function stripFirstReplyNotice(context) {
23
+ return context.replace(FIRST_REPLY_NOTICE_RE, "")
24
+ }
25
+
26
+ // OpenCode 1.2.x expects plugins to be factory functions (see inject-subagent-context.js comment).
27
+ export default async ({ directory }) => {
28
+ const ctx = new AtwContext(directory)
29
+ debugLog("session", "Plugin loaded, directory:", directory)
30
+
31
+ return {
32
+ [MESSAGES_TRANSFORM_HOOK]: async (_input, output) => {
33
+ try {
34
+ const messages = output?.messages
35
+ const platformInput = platformInputFromMessages(messages)
36
+ const agent = platformInput?.agent || "unknown"
37
+ debugLog("session", "messages.transform called, agent:", agent)
38
+
39
+ if (isAtwSubagent(platformInput)) {
40
+ debugLog("session", "Skipping atw subagent turn:", agent)
41
+ return
42
+ }
43
+
44
+ if (process.env.ATW_HOOKS === "0" || process.env.ATW_DISABLE_HOOKS === "1") {
45
+ debugLog("session", "Skipping - ATW_HOOKS disabled")
46
+ return
47
+ }
48
+
49
+ if (process.env.OPENCODE_NON_INTERACTIVE === "1") {
50
+ debugLog("session", "Skipping - non-interactive mode")
51
+ return
52
+ }
53
+
54
+ let context = buildSessionContext(ctx, platformInput)
55
+ if (transcriptHasAssistantMessage(messages)) {
56
+ context = stripFirstReplyNotice(context)
57
+ }
58
+ debugLog("session", "Built context, length:", context.length)
59
+ prependEphemeralText(messages, context)
60
+ } catch (error) {
61
+ debugLog("session", "Error in messages.transform:", error.message, error.stack)
62
+ }
63
+ },
64
+ }
65
+ }