@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,148 @@
1
+ import { createHash } from "node:crypto"
2
+
3
+ const PART_ID_PATTERN = /^prt_([0-9a-f]{12})[0-9A-Za-z]{14}$/
4
+ const CONTEXT_PART_KINDS = {
5
+ sessionStart: { offset: 2n, slot: "0" },
6
+ workflowState: { offset: 1n, slot: "1" },
7
+ }
8
+ const MAX_CONTEXT_PART_OFFSET = Object.values(CONTEXT_PART_KINDS).reduce(
9
+ (maximum, definition) => definition.offset > maximum ? definition.offset : maximum,
10
+ 0n,
11
+ )
12
+
13
+ /**
14
+ * Return the first ordinary user-authored text part.
15
+ *
16
+ * ATW plugins can run in either order, so callers must not mistake a
17
+ * synthetic context part inserted by another plugin for the user's prompt.
18
+ */
19
+ export function findUserTextPart(parts) {
20
+ if (!Array.isArray(parts)) return undefined
21
+ return parts.find(
22
+ part => part?.type === "text" && part.synthetic !== true && part.text !== undefined,
23
+ )
24
+ }
25
+
26
+ function findIdentitySourcePart(parts) {
27
+ return parts
28
+ .filter(
29
+ part =>
30
+ part?.synthetic !== true &&
31
+ typeof part?.id === "string" &&
32
+ typeof part?.sessionID === "string" &&
33
+ typeof part?.messageID === "string" &&
34
+ PART_ID_PATTERN.test(part.id),
35
+ )
36
+ .sort((left, right) => (left.id < right.id ? -1 : left.id > right.id ? 1 : 0))[0]
37
+ }
38
+
39
+ function contextPartId(source, kind) {
40
+ const definition = CONTEXT_PART_KINDS[kind]
41
+ if (!definition) throw new TypeError(`unknown context part kind: ${kind}`)
42
+
43
+ const match = PART_ID_PATTERN.exec(source.id)
44
+ if (!match) throw new TypeError(`unsupported OpenCode part ID: ${source.id}`)
45
+ const sourceOrdinal = BigInt(`0x${match[1]}`)
46
+ if (sourceOrdinal <= MAX_CONTEXT_PART_OFFSET) {
47
+ throw new TypeError(`unsupported OpenCode part ID ordinal: ${source.id}`)
48
+ }
49
+ const ordinal = sourceOrdinal - definition.offset
50
+ const suffix = createHash("sha256")
51
+ .update(`${source.messageID}\0${kind}`)
52
+ .digest("hex")
53
+ .slice(0, 13)
54
+ return `prt_${ordinal.toString(16).padStart(12, "0")}${definition.slot}${suffix}`
55
+ }
56
+
57
+ /**
58
+ * Persist machine-authored context ahead of the ordinary user parts without
59
+ * mutating any existing part. The generated identity sorts before the source
60
+ * user part in the same order during both the first request and stored replay.
61
+ */
62
+ export function insertSyntheticTextPart(parts, text, kind) {
63
+ if (!Array.isArray(parts)) throw new TypeError("parts must be an array")
64
+ if (typeof text !== "string") throw new TypeError("text must be a string")
65
+ if (!CONTEXT_PART_KINDS[kind]) throw new TypeError(`unknown context part kind: ${kind}`)
66
+
67
+ const source = findIdentitySourcePart(parts)
68
+ if (!source) throw new TypeError("no ordinary OpenCode part with a persisted identity")
69
+
70
+ const id = contextPartId(source, kind)
71
+ if (parts.some(part => part?.id === id)) {
72
+ throw new TypeError(`duplicate synthetic context part: ${kind}`)
73
+ }
74
+ const part = {
75
+ id,
76
+ sessionID: source.sessionID,
77
+ messageID: source.messageID,
78
+ type: "text",
79
+ text,
80
+ synthetic: true,
81
+ }
82
+ const insertionIndex = parts.findIndex(existing => typeof existing?.id !== "string" || id < existing.id)
83
+ if (insertionIndex === -1) parts.push(part)
84
+ else parts.splice(insertionIndex, 0, part)
85
+ return part
86
+ }
87
+
88
+ /** OpenCode hook that mutates the in-memory model payload, not stored history. */
89
+ export const MESSAGES_TRANSFORM_HOOK = "experimental.chat.messages.transform"
90
+
91
+ /**
92
+ * Index of the last user message in an OpenCode `{info, parts}[]` transcript.
93
+ * Compaction and prompt both pass that shape to messages.transform.
94
+ */
95
+ export function findLatestUserMessageIndex(messages) {
96
+ if (!Array.isArray(messages)) return -1
97
+ for (let i = messages.length - 1; i >= 0; i--) {
98
+ if (messages[i]?.info?.role === "user") return i
99
+ }
100
+ return -1
101
+ }
102
+
103
+ export function platformInputFromMessages(messages) {
104
+ const index = findLatestUserMessageIndex(messages)
105
+ if (index < 0) return null
106
+ const info = messages[index].info
107
+ if (!info || typeof info !== "object") return null
108
+ return {
109
+ sessionID: info.sessionID,
110
+ agent: info.agent,
111
+ }
112
+ }
113
+
114
+ export function latestUserPromptText(messages) {
115
+ const index = findLatestUserMessageIndex(messages)
116
+ if (index < 0) return ""
117
+ const part = findUserTextPart(messages[index].parts)
118
+ return typeof part?.text === "string" ? part.text : ""
119
+ }
120
+
121
+ export function transcriptHasAssistantMessage(messages) {
122
+ if (!Array.isArray(messages)) return false
123
+ return messages.some(message => message?.info?.role === "assistant")
124
+ }
125
+
126
+ /**
127
+ * Clone the latest user message and prepend an ephemeral synthetic text
128
+ * part. The original message object and its `parts` array are left
129
+ * untouched so a transform cannot leak into OpenCode's stored history.
130
+ */
131
+ export function prependEphemeralText(messages, text) {
132
+ if (!Array.isArray(messages)) return false
133
+ if (typeof text !== "string") return false
134
+ const index = findLatestUserMessageIndex(messages)
135
+ if (index < 0) return false
136
+ const original = messages[index]
137
+ const parts = Array.isArray(original.parts) ? original.parts.slice() : []
138
+ parts.unshift({
139
+ type: "text",
140
+ text,
141
+ synthetic: true,
142
+ })
143
+ messages[index] = {
144
+ ...original,
145
+ parts,
146
+ }
147
+ return true
148
+ }
@@ -0,0 +1,474 @@
1
+ /* global process */
2
+ import { existsSync, readFileSync, readdirSync, statSync } from "fs"
3
+ import { join } from "path"
4
+ import { execFileSync } from "child_process"
5
+ import { platform } from "os"
6
+ import { debugLog } from "./atw-context.js"
7
+
8
+ const PYTHON_CMD = platform() === "win32" ? "python" : "python3"
9
+
10
+ const FIRST_REPLY_NOTICE = `<first-reply-notice>
11
+ On the first visible assistant reply in this session, briefly acknowledge that ATW SessionStart context loaded.
12
+ Choose the acknowledgment language in this order:
13
+ 1. Use the language of the user's current request (the user message that triggered this reply).
14
+ 2. If that request has no clear natural language, use an explicitly established project communication language.
15
+ 3. If neither provides a language, output the language-neutral fallback exactly: \`ATW SessionStart ✓\`.
16
+ Continue directly with the user's request after the acknowledgment.
17
+ The acknowledgment must not alter the language used for the remainder of the response.
18
+ This notice is one-shot: do not repeat it after the first visible assistant reply in this session.
19
+ </first-reply-notice>`
20
+
21
+ function getTaskStatus(ctx, platformInput = null) {
22
+ const active = ctx.getActiveTask(platformInput)
23
+ const taskRef = active.taskPath
24
+ if (!taskRef) {
25
+ return (
26
+ "Status: NO ACTIVE TASK\n" +
27
+ "Next-Action: Classify the current turn before creating any ATW task. " +
28
+ "Simple conversation / small task asks only whether this turn should create an ATW task. " +
29
+ "Complex task asks whether task creation and planning are allowed."
30
+ )
31
+ }
32
+
33
+ const taskDir = ctx.resolveTaskDir(taskRef)
34
+
35
+ if (active.stale || !taskDir || !existsSync(taskDir)) {
36
+ return `Status: STALE POINTER\nTask: ${taskRef}\nNext-Action: Task directory not found. Run: python3 ./.atw/scripts/task.py finish`
37
+ }
38
+
39
+ let taskData = {}
40
+ const taskJsonPath = join(taskDir, "task.json")
41
+ if (existsSync(taskJsonPath)) {
42
+ try {
43
+ taskData = JSON.parse(readFileSync(taskJsonPath, "utf-8"))
44
+ } catch {
45
+ // Ignore parse errors
46
+ }
47
+ }
48
+
49
+ const taskTitle = taskData.title || taskRef
50
+ const taskStatus = taskData.status || "unknown"
51
+
52
+ if (taskStatus === "completed") {
53
+ return `Status: COMPLETED\nTask: ${taskTitle}\nNext-Action: The archive was interrupted — re-run \`task.py archive <task>\` to finish it. If the working tree is dirty, commit or set the task back to \`implement\` first; there is no wrap-up commit step.`
54
+ }
55
+
56
+ const artifactNames = ["prd.md", "implement.jsonl", "check.jsonl"]
57
+ const present = artifactNames.filter(name => existsSync(join(taskDir, name)))
58
+ if (existsSync(join(taskDir, "research"))) present.push("research/")
59
+ const presentLine = present.length > 0 ? present.join(", ") : "(none)"
60
+
61
+ return (
62
+ `Status: ${String(taskStatus).toUpperCase()}\nTask: ${taskTitle}\n` +
63
+ `Present: ${presentLine}\n` +
64
+ "Next-Action: Follow the matching per-turn workflow-state. " +
65
+ "Implementation/check context order is jsonl entries -> `prd.md`."
66
+ )
67
+ }
68
+
69
+ function loadAtwConfig(directory, contextKey = null) {
70
+ const scriptPath = join(directory, ".atw", "scripts", "get_context.py")
71
+ if (!existsSync(scriptPath)) {
72
+ return { isMonorepo: false, packages: {}, specScope: null, activeTaskPackage: null, defaultPackage: null }
73
+ }
74
+ try {
75
+ const output = execFileSync(PYTHON_CMD, [scriptPath, "--mode", "packages", "--json"], {
76
+ cwd: directory,
77
+ timeout: 5000,
78
+ encoding: "utf-8",
79
+ stdio: ["pipe", "pipe", "pipe"],
80
+ env: {
81
+ ...process.env,
82
+ ...(contextKey ? { ATW_CONTEXT_ID: contextKey } : {}),
83
+ },
84
+ })
85
+ const data = JSON.parse(output)
86
+ if (data.mode !== "monorepo") {
87
+ return { isMonorepo: false, packages: {}, specScope: null, activeTaskPackage: null, defaultPackage: null }
88
+ }
89
+ const pkgDict = {}
90
+ for (const pkg of (data.packages || [])) {
91
+ pkgDict[pkg.name] = pkg
92
+ }
93
+ return {
94
+ isMonorepo: true,
95
+ packages: pkgDict,
96
+ specScope: data.specScope || null,
97
+ activeTaskPackage: data.activeTaskPackage || null,
98
+ defaultPackage: data.defaultPackage || null,
99
+ }
100
+ } catch (e) {
101
+ debugLog("session", "loadAtwConfig error:", e.message)
102
+ return { isMonorepo: false, packages: {}, specScope: null, activeTaskPackage: null, defaultPackage: null }
103
+ }
104
+ }
105
+
106
+ function checkLegacySpec(directory, config) {
107
+ if (!config.isMonorepo || Object.keys(config.packages).length === 0) {
108
+ return null
109
+ }
110
+
111
+ const specDir = join(directory, ".atw", "spec")
112
+ if (!existsSync(specDir)) return null
113
+
114
+ let hasLegacy = false
115
+ for (const name of ["backend", "frontend"]) {
116
+ if (existsSync(join(specDir, name, "index.md"))) {
117
+ hasLegacy = true
118
+ break
119
+ }
120
+ }
121
+ if (!hasLegacy) return null
122
+
123
+ const pkgNames = Object.keys(config.packages).sort()
124
+ const missing = pkgNames.filter(name => !existsSync(join(specDir, name)))
125
+
126
+ if (missing.length === 0) return null
127
+
128
+ if (missing.length === pkgNames.length) {
129
+ return (
130
+ `[!] Legacy spec structure detected: found \`spec/backend/\` or \`spec/frontend/\` ` +
131
+ `but no package-scoped \`spec/<package>/\` directories.\n` +
132
+ `Monorepo packages: ${pkgNames.join(", ")}\n` +
133
+ `Please reorganize: \`spec/backend/\` -> \`spec/<package>/backend/\``
134
+ )
135
+ }
136
+ return (
137
+ `[!] Partial spec migration detected: packages ${missing.join(", ")} ` +
138
+ `still missing \`spec/<pkg>/\` directory.\n` +
139
+ `Please complete migration for all packages.`
140
+ )
141
+ }
142
+
143
+ function resolveSpecScope(config) {
144
+ if (!config.isMonorepo || Object.keys(config.packages).length === 0) {
145
+ return null
146
+ }
147
+
148
+ const { specScope, activeTaskPackage, defaultPackage, packages } = config
149
+ if (specScope == null) return null
150
+
151
+ if (specScope === "active_task") {
152
+ if (activeTaskPackage && activeTaskPackage in packages) return new Set([activeTaskPackage])
153
+ if (defaultPackage && defaultPackage in packages) return new Set([defaultPackage])
154
+ return null
155
+ }
156
+
157
+ if (Array.isArray(specScope)) {
158
+ const valid = new Set()
159
+ for (const entry of specScope) {
160
+ if (entry in packages) {
161
+ valid.add(entry)
162
+ }
163
+ }
164
+ if (valid.size > 0) return valid
165
+ if (activeTaskPackage && activeTaskPackage in packages) return new Set([activeTaskPackage])
166
+ if (defaultPackage && defaultPackage in packages) return new Set([defaultPackage])
167
+ return null
168
+ }
169
+
170
+ return null
171
+ }
172
+
173
+ function collectSpecIndexPaths(directory, allowedPkgs) {
174
+ const specDir = join(directory, ".atw", "spec")
175
+ const paths = []
176
+
177
+ const guidesIndex = join(specDir, "guides", "index.md")
178
+ if (existsSync(guidesIndex)) {
179
+ paths.push(".atw/spec/guides/index.md")
180
+ }
181
+
182
+ if (!existsSync(specDir)) return paths
183
+
184
+ try {
185
+ const subs = readdirSync(specDir).filter(name => {
186
+ if (name.startsWith(".") || name === "guides") return false
187
+ try {
188
+ return statSync(join(specDir, name)).isDirectory()
189
+ } catch {
190
+ return false
191
+ }
192
+ }).sort()
193
+
194
+ for (const sub of subs) {
195
+ const indexFile = join(specDir, sub, "index.md")
196
+ if (existsSync(indexFile)) {
197
+ paths.push(`.atw/spec/${sub}/index.md`)
198
+ } else {
199
+ if (allowedPkgs !== null && !allowedPkgs.has(sub)) continue
200
+ try {
201
+ const nested = readdirSync(join(specDir, sub)).filter(name => {
202
+ try {
203
+ return statSync(join(specDir, sub, name)).isDirectory()
204
+ } catch {
205
+ return false
206
+ }
207
+ }).sort()
208
+ for (const layer of nested) {
209
+ const nestedIndex = join(specDir, sub, layer, "index.md")
210
+ if (existsSync(nestedIndex)) {
211
+ paths.push(`.atw/spec/${sub}/${layer}/index.md`)
212
+ }
213
+ }
214
+ } catch {
215
+ // Ignore directory read errors
216
+ }
217
+ }
218
+ }
219
+ } catch {
220
+ // Ignore spec directory read errors
221
+ }
222
+
223
+ return paths
224
+ }
225
+
226
+ function readDeveloper(directory) {
227
+ try {
228
+ const content = readFileSync(join(directory, ".atw", ".developer"), "utf-8")
229
+ for (const line of content.split(/\r?\n/)) {
230
+ if (line.startsWith("name=")) return line.slice("name=".length).trim()
231
+ }
232
+ } catch {
233
+ // Ignore missing developer file
234
+ }
235
+ return "(not initialized)"
236
+ }
237
+
238
+ function runGit(directory, args) {
239
+ try {
240
+ return execFileSync("git", args, {
241
+ cwd: directory,
242
+ timeout: 3000,
243
+ encoding: "utf-8",
244
+ stdio: ["pipe", "pipe", "pipe"],
245
+ }).trim()
246
+ } catch {
247
+ return ""
248
+ }
249
+ }
250
+
251
+ function buildCompactCurrentState(ctx, platformInput, specIndexPaths) {
252
+ const directory = ctx.directory
253
+ const lines = []
254
+ lines.push(`Developer: ${readDeveloper(directory)}`)
255
+
256
+ const branch = runGit(directory, ["branch", "--show-current"]) || "(detached)"
257
+ const dirtyCount = runGit(directory, ["status", "--porcelain"])
258
+ .split(/\r?\n/)
259
+ .filter(line => line.trim()).length
260
+ lines.push(`Git: branch ${branch}; ${dirtyCount === 0 ? "clean" : `dirty ${dirtyCount} paths`}.`)
261
+
262
+ const active = ctx.getActiveTask(platformInput)
263
+ if (active.taskPath) {
264
+ const taskDir = ctx.resolveTaskDir(active.taskPath)
265
+ let status = "unknown"
266
+ if (taskDir) {
267
+ try {
268
+ const data = JSON.parse(readFileSync(join(taskDir, "task.json"), "utf-8"))
269
+ status = data.status || "unknown"
270
+ } catch {
271
+ // Ignore parse errors
272
+ }
273
+ }
274
+ lines.push(`Current task: ${active.taskPath}; status=${status}.`)
275
+ } else {
276
+ lines.push("Current task: none.")
277
+ }
278
+
279
+ const tasksDir = join(directory, ".atw", "tasks")
280
+ if (existsSync(tasksDir)) {
281
+ try {
282
+ const activeTasks = readdirSync(tasksDir, { withFileTypes: true })
283
+ .filter(entry => entry.isDirectory() && entry.name !== "archive" && existsSync(join(tasksDir, entry.name, "task.json")))
284
+ lines.push(`Active tasks: ${activeTasks.length} total. Use \`python3 ./.atw/scripts/task.py list --mine\` only if needed.`)
285
+ } catch {
286
+ // Ignore task list errors
287
+ }
288
+ }
289
+
290
+ const developer = readDeveloper(directory)
291
+ const workspaceDir = join(directory, ".atw", "workspace", developer)
292
+ if (developer !== "(not initialized)" && existsSync(workspaceDir)) {
293
+ try {
294
+ const journals = readdirSync(workspaceDir)
295
+ .filter(name => /^journal-\d+\.md$/.test(name))
296
+ .sort((a, b) => Number(a.match(/\d+/)?.[0] || 0) - Number(b.match(/\d+/)?.[0] || 0))
297
+ const journal = journals[journals.length - 1]
298
+ if (journal) {
299
+ const journalPath = join(workspaceDir, journal)
300
+ const lineCount = readFileSync(journalPath, "utf-8").split(/\r?\n/).length
301
+ lines.push(`Journal: .atw/workspace/${developer}/${journal}, ${lineCount} / 2000 lines.`)
302
+ }
303
+ } catch {
304
+ // Ignore journal errors
305
+ }
306
+ }
307
+
308
+ if (specIndexPaths.length > 0) {
309
+ lines.push(`Spec indexes: ${specIndexPaths.length} available.`)
310
+ }
311
+
312
+ return lines.join("\n")
313
+ }
314
+
315
+ export function buildSessionContext(ctx, platformInput = null) {
316
+ const directory = ctx.directory
317
+ const contextKey = typeof ctx.getContextKey === "function"
318
+ ? ctx.getContextKey(platformInput)
319
+ : null
320
+
321
+ const config = loadAtwConfig(directory, contextKey)
322
+ const allowedPkgs = resolveSpecScope(config)
323
+ const paths = collectSpecIndexPaths(directory, allowedPkgs)
324
+
325
+ const parts = []
326
+
327
+ parts.push(`<session-context>
328
+ ATW compact SessionStart context. Use it to orient the session; load details on demand.
329
+ </session-context>`)
330
+ parts.push(FIRST_REPLY_NOTICE)
331
+
332
+ const legacyWarning = checkLegacySpec(directory, config)
333
+ if (legacyWarning) {
334
+ parts.push(`<migration-warning>\n${legacyWarning}\n</migration-warning>`)
335
+ }
336
+
337
+ parts.push("<current-state>")
338
+ parts.push(buildCompactCurrentState(ctx, platformInput, paths))
339
+ parts.push("</current-state>")
340
+
341
+ const workflowContent = ctx.readProjectFile(".atw/workflow.md")
342
+ if (workflowContent) {
343
+ const allLines = workflowContent.split("\n")
344
+ const overviewLines = [
345
+ "# Development Workflow - Session Summary",
346
+ "Full guide: .atw/workflow.md. Step detail: `python3 ./.atw/scripts/get_context.py --mode phase --step <X.Y>`.",
347
+ "",
348
+ ]
349
+
350
+ let rangeStart = -1
351
+ let rangeEnd = allLines.length
352
+ for (let i = 0; i < allLines.length; i++) {
353
+ const stripped = allLines[i].trim()
354
+ if (rangeStart === -1 && stripped === "## Phase Index") {
355
+ rangeStart = i
356
+ } else if (rangeStart !== -1 && stripped === "## Phase 1: Plan") {
357
+ rangeEnd = i
358
+ break
359
+ }
360
+ }
361
+ if (rangeStart !== -1) {
362
+ const strippedStateBlocks = allLines
363
+ .slice(rangeStart, rangeEnd)
364
+ .join("\n")
365
+ .replace(/\[workflow-state:([A-Za-z0-9_-]+)\]\s*\n[\s\S]*?\n\s*\[\/workflow-state:\1\]\n?/g, "")
366
+ .replace(/<!--[\s\S]*?-->/g, "")
367
+ .replace(/^\[(?!\/?workflow-state:)\/?[^\]\n]+\]\s*\n?/gm, "")
368
+ .replace(/\n{3,}/g, "\n\n")
369
+ overviewLines.push(strippedStateBlocks.trimEnd())
370
+ }
371
+
372
+ parts.push("<atw-workflow>")
373
+ parts.push(overviewLines.join("\n").trimEnd())
374
+ parts.push("</atw-workflow>")
375
+ }
376
+
377
+ parts.push("<guidelines>")
378
+ parts.push(
379
+ "Task context order for implementation/check: jsonl entries -> `prd.md`.\n"
380
+ )
381
+
382
+ if (paths.length > 0) {
383
+ parts.push("## Available indexes (read on demand)")
384
+ for (const p of paths) {
385
+ parts.push(`- ${p}`)
386
+ }
387
+ parts.push("")
388
+ }
389
+
390
+ parts.push(
391
+ "Discover more via: " +
392
+ "`python3 ./.atw/scripts/get_context.py --mode packages`"
393
+ )
394
+ parts.push("</guidelines>")
395
+
396
+ const taskStatus = getTaskStatus(ctx, platformInput)
397
+ parts.push(`<task-status>\n${taskStatus}\n</task-status>`)
398
+
399
+ parts.push(`<ready>
400
+ Context loaded. Follow <task-status>. Load workflow/spec/task details only when needed.
401
+ </ready>`)
402
+
403
+ return parts.join("\n\n")
404
+ }
405
+
406
+ function getAtwMetadata(metadata) {
407
+ if (!metadata || typeof metadata !== "object") {
408
+ return {}
409
+ }
410
+
411
+ const atw = metadata.atw
412
+ if (!atw || typeof atw !== "object") {
413
+ return {}
414
+ }
415
+
416
+ return atw
417
+ }
418
+
419
+ function markPartAsSessionStart(part) {
420
+ const metadata = part.metadata && typeof part.metadata === "object"
421
+ ? part.metadata
422
+ : {}
423
+ part.metadata = {
424
+ ...metadata,
425
+ atw: {
426
+ ...getAtwMetadata(metadata),
427
+ sessionStart: true,
428
+ },
429
+ }
430
+ }
431
+
432
+ function hasSessionStartMarker(part) {
433
+ if (!part || part.type !== "text" || typeof part.text !== "string") {
434
+ return false
435
+ }
436
+
437
+ return getAtwMetadata(part.metadata).sessionStart === true
438
+ }
439
+
440
+ export function hasInjectedAtwContext(messages) {
441
+ if (!Array.isArray(messages)) {
442
+ return false
443
+ }
444
+
445
+ return messages.some(message => {
446
+ if (!message?.info || message.info.role !== "user" || !Array.isArray(message.parts)) {
447
+ return false
448
+ }
449
+
450
+ return message.parts.some(hasSessionStartMarker)
451
+ })
452
+ }
453
+
454
+ export async function hasPersistedInjectedContext(client, directory, sessionID) {
455
+ try {
456
+ const response = await client.session.messages({
457
+ path: { id: sessionID },
458
+ query: { directory },
459
+ throwOnError: true,
460
+ })
461
+ return hasInjectedAtwContext(response.data || [])
462
+ } catch (error) {
463
+ debugLog(
464
+ "session",
465
+ "Failed to read session history for dedupe:",
466
+ error instanceof Error ? error.message : String(error),
467
+ )
468
+ return false
469
+ }
470
+ }
471
+
472
+ export function markContextInjected(part) {
473
+ markPartAsSessionStart(part)
474
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "type": "module",
3
+ "dependencies": {
4
+ "@opencode-ai/plugin": "^1.14.39"
5
+ }
6
+ }