@baoanaz/cviauto 0.6.5

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 (740) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +46 -0
  3. package/bin/trellis.js +3 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +209 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  9. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  10. package/dist/commands/channel/adapters/claude.js +203 -0
  11. package/dist/commands/channel/adapters/claude.js.map +1 -0
  12. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  13. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  14. package/dist/commands/channel/adapters/codex.js +505 -0
  15. package/dist/commands/channel/adapters/codex.js.map +1 -0
  16. package/dist/commands/channel/adapters/index.d.ts +84 -0
  17. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  18. package/dist/commands/channel/adapters/index.js +115 -0
  19. package/dist/commands/channel/adapters/index.js.map +1 -0
  20. package/dist/commands/channel/adapters/types.d.ts +33 -0
  21. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  22. package/dist/commands/channel/adapters/types.js +2 -0
  23. package/dist/commands/channel/adapters/types.js.map +1 -0
  24. package/dist/commands/channel/agent-loader.d.ts +32 -0
  25. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  26. package/dist/commands/channel/agent-loader.js +154 -0
  27. package/dist/commands/channel/agent-loader.js.map +1 -0
  28. package/dist/commands/channel/context-loader.d.ts +26 -0
  29. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  30. package/dist/commands/channel/context-loader.js +290 -0
  31. package/dist/commands/channel/context-loader.js.map +1 -0
  32. package/dist/commands/channel/context.d.ts +16 -0
  33. package/dist/commands/channel/context.d.ts.map +1 -0
  34. package/dist/commands/channel/context.js +83 -0
  35. package/dist/commands/channel/context.js.map +1 -0
  36. package/dist/commands/channel/create.d.ts +27 -0
  37. package/dist/commands/channel/create.d.ts.map +1 -0
  38. package/dist/commands/channel/create.js +39 -0
  39. package/dist/commands/channel/create.js.map +1 -0
  40. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  41. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  42. package/dist/commands/channel/dev-parse-trace.js +70 -0
  43. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  44. package/dist/commands/channel/guard.d.ts +150 -0
  45. package/dist/commands/channel/guard.d.ts.map +1 -0
  46. package/dist/commands/channel/guard.js +474 -0
  47. package/dist/commands/channel/guard.js.map +1 -0
  48. package/dist/commands/channel/index.d.ts +3 -0
  49. package/dist/commands/channel/index.d.ts.map +1 -0
  50. package/dist/commands/channel/index.js +531 -0
  51. package/dist/commands/channel/index.js.map +1 -0
  52. package/dist/commands/channel/interrupt.d.ts +10 -0
  53. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  54. package/dist/commands/channel/interrupt.js +22 -0
  55. package/dist/commands/channel/interrupt.js.map +1 -0
  56. package/dist/commands/channel/kill.d.ts +7 -0
  57. package/dist/commands/channel/kill.d.ts.map +1 -0
  58. package/dist/commands/channel/kill.js +121 -0
  59. package/dist/commands/channel/kill.js.map +1 -0
  60. package/dist/commands/channel/list.d.ts +17 -0
  61. package/dist/commands/channel/list.d.ts.map +1 -0
  62. package/dist/commands/channel/list.js +233 -0
  63. package/dist/commands/channel/list.js.map +1 -0
  64. package/dist/commands/channel/messages.d.ts +15 -0
  65. package/dist/commands/channel/messages.d.ts.map +1 -0
  66. package/dist/commands/channel/messages.js +245 -0
  67. package/dist/commands/channel/messages.js.map +1 -0
  68. package/dist/commands/channel/rm.d.ts +27 -0
  69. package/dist/commands/channel/rm.d.ts.map +1 -0
  70. package/dist/commands/channel/rm.js +216 -0
  71. package/dist/commands/channel/rm.js.map +1 -0
  72. package/dist/commands/channel/run.d.ts +30 -0
  73. package/dist/commands/channel/run.d.ts.map +1 -0
  74. package/dist/commands/channel/run.js +130 -0
  75. package/dist/commands/channel/run.js.map +1 -0
  76. package/dist/commands/channel/send.d.ts +11 -0
  77. package/dist/commands/channel/send.d.ts.map +1 -0
  78. package/dist/commands/channel/send.js +24 -0
  79. package/dist/commands/channel/send.js.map +1 -0
  80. package/dist/commands/channel/spawn.d.ts +40 -0
  81. package/dist/commands/channel/spawn.d.ts.map +1 -0
  82. package/dist/commands/channel/spawn.js +244 -0
  83. package/dist/commands/channel/spawn.js.map +1 -0
  84. package/dist/commands/channel/store/events.d.ts +39 -0
  85. package/dist/commands/channel/store/events.d.ts.map +1 -0
  86. package/dist/commands/channel/store/events.js +87 -0
  87. package/dist/commands/channel/store/events.js.map +1 -0
  88. package/dist/commands/channel/store/filter.d.ts +3 -0
  89. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  90. package/dist/commands/channel/store/filter.js +2 -0
  91. package/dist/commands/channel/store/filter.js.map +1 -0
  92. package/dist/commands/channel/store/lock.d.ts +23 -0
  93. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  94. package/dist/commands/channel/store/lock.js +99 -0
  95. package/dist/commands/channel/store/lock.js.map +1 -0
  96. package/dist/commands/channel/store/paths.d.ts +63 -0
  97. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  98. package/dist/commands/channel/store/paths.js +246 -0
  99. package/dist/commands/channel/store/paths.js.map +1 -0
  100. package/dist/commands/channel/store/schema.d.ts +27 -0
  101. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  102. package/dist/commands/channel/store/schema.js +34 -0
  103. package/dist/commands/channel/store/schema.js.map +1 -0
  104. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  105. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  106. package/dist/commands/channel/store/thread-state.js +16 -0
  107. package/dist/commands/channel/store/thread-state.js.map +1 -0
  108. package/dist/commands/channel/store/watch.d.ts +19 -0
  109. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  110. package/dist/commands/channel/store/watch.js +146 -0
  111. package/dist/commands/channel/store/watch.js.map +1 -0
  112. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  113. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  114. package/dist/commands/channel/supervisor/idle.js +72 -0
  115. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  116. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  117. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  118. package/dist/commands/channel/supervisor/inbox.js +160 -0
  119. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  120. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  121. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  122. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  123. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  124. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  125. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  126. package/dist/commands/channel/supervisor/stdout.js +121 -0
  127. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  128. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  129. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  130. package/dist/commands/channel/supervisor/turns.js +45 -0
  131. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  132. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  133. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  134. package/dist/commands/channel/supervisor/warning.js +77 -0
  135. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  136. package/dist/commands/channel/supervisor.d.ts +59 -0
  137. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  138. package/dist/commands/channel/supervisor.js +376 -0
  139. package/dist/commands/channel/supervisor.js.map +1 -0
  140. package/dist/commands/channel/text-body.d.ts +13 -0
  141. package/dist/commands/channel/text-body.d.ts.map +1 -0
  142. package/dist/commands/channel/text-body.js +47 -0
  143. package/dist/commands/channel/text-body.js.map +1 -0
  144. package/dist/commands/channel/threads.d.ts +39 -0
  145. package/dist/commands/channel/threads.d.ts.map +1 -0
  146. package/dist/commands/channel/threads.js +106 -0
  147. package/dist/commands/channel/threads.js.map +1 -0
  148. package/dist/commands/channel/title.d.ts +12 -0
  149. package/dist/commands/channel/title.d.ts.map +1 -0
  150. package/dist/commands/channel/title.js +24 -0
  151. package/dist/commands/channel/title.js.map +1 -0
  152. package/dist/commands/channel/wait.d.ts +17 -0
  153. package/dist/commands/channel/wait.d.ts.map +1 -0
  154. package/dist/commands/channel/wait.js +75 -0
  155. package/dist/commands/channel/wait.js.map +1 -0
  156. package/dist/commands/init.d.ts +66 -0
  157. package/dist/commands/init.d.ts.map +1 -0
  158. package/dist/commands/init.js +1704 -0
  159. package/dist/commands/init.js.map +1 -0
  160. package/dist/commands/mem.d.ts +30 -0
  161. package/dist/commands/mem.d.ts.map +1 -0
  162. package/dist/commands/mem.js +424 -0
  163. package/dist/commands/mem.js.map +1 -0
  164. package/dist/commands/uninstall.d.ts +27 -0
  165. package/dist/commands/uninstall.d.ts.map +1 -0
  166. package/dist/commands/uninstall.js +340 -0
  167. package/dist/commands/uninstall.js.map +1 -0
  168. package/dist/commands/update.d.ts +72 -0
  169. package/dist/commands/update.d.ts.map +1 -0
  170. package/dist/commands/update.js +2023 -0
  171. package/dist/commands/update.js.map +1 -0
  172. package/dist/commands/upgrade.d.ts +28 -0
  173. package/dist/commands/upgrade.d.ts.map +1 -0
  174. package/dist/commands/upgrade.js +88 -0
  175. package/dist/commands/upgrade.js.map +1 -0
  176. package/dist/commands/workflow.d.ts +35 -0
  177. package/dist/commands/workflow.d.ts.map +1 -0
  178. package/dist/commands/workflow.js +232 -0
  179. package/dist/commands/workflow.js.map +1 -0
  180. package/dist/configurators/antigravity.d.ts +7 -0
  181. package/dist/configurators/antigravity.d.ts.map +1 -0
  182. package/dist/configurators/antigravity.js +19 -0
  183. package/dist/configurators/antigravity.js.map +1 -0
  184. package/dist/configurators/claude.d.ts +12 -0
  185. package/dist/configurators/claude.d.ts.map +1 -0
  186. package/dist/configurators/claude.js +107 -0
  187. package/dist/configurators/claude.js.map +1 -0
  188. package/dist/configurators/codebuddy.d.ts +10 -0
  189. package/dist/configurators/codebuddy.d.ts.map +1 -0
  190. package/dist/configurators/codebuddy.js +30 -0
  191. package/dist/configurators/codebuddy.js.map +1 -0
  192. package/dist/configurators/codex.d.ts +8 -0
  193. package/dist/configurators/codex.d.ts.map +1 -0
  194. package/dist/configurators/codex.js +73 -0
  195. package/dist/configurators/codex.js.map +1 -0
  196. package/dist/configurators/copilot.d.ts +10 -0
  197. package/dist/configurators/copilot.d.ts.map +1 -0
  198. package/dist/configurators/copilot.js +51 -0
  199. package/dist/configurators/copilot.js.map +1 -0
  200. package/dist/configurators/cursor.d.ts +10 -0
  201. package/dist/configurators/cursor.d.ts.map +1 -0
  202. package/dist/configurators/cursor.js +29 -0
  203. package/dist/configurators/cursor.js.map +1 -0
  204. package/dist/configurators/devin.d.ts +7 -0
  205. package/dist/configurators/devin.d.ts.map +1 -0
  206. package/dist/configurators/devin.js +19 -0
  207. package/dist/configurators/devin.js.map +1 -0
  208. package/dist/configurators/droid.d.ts +10 -0
  209. package/dist/configurators/droid.d.ts.map +1 -0
  210. package/dist/configurators/droid.js +30 -0
  211. package/dist/configurators/droid.js.map +1 -0
  212. package/dist/configurators/gemini.d.ts +16 -0
  213. package/dist/configurators/gemini.d.ts.map +1 -0
  214. package/dist/configurators/gemini.js +38 -0
  215. package/dist/configurators/gemini.js.map +1 -0
  216. package/dist/configurators/index.d.ts +86 -0
  217. package/dist/configurators/index.d.ts.map +1 -0
  218. package/dist/configurators/index.js +430 -0
  219. package/dist/configurators/index.js.map +1 -0
  220. package/dist/configurators/kilo.d.ts +7 -0
  221. package/dist/configurators/kilo.d.ts.map +1 -0
  222. package/dist/configurators/kilo.js +19 -0
  223. package/dist/configurators/kilo.js.map +1 -0
  224. package/dist/configurators/kiro.d.ts +10 -0
  225. package/dist/configurators/kiro.d.ts.map +1 -0
  226. package/dist/configurators/kiro.js +33 -0
  227. package/dist/configurators/kiro.js.map +1 -0
  228. package/dist/configurators/opencode.d.ts +14 -0
  229. package/dist/configurators/opencode.d.ts.map +1 -0
  230. package/dist/configurators/opencode.js +102 -0
  231. package/dist/configurators/opencode.js.map +1 -0
  232. package/dist/configurators/pi.d.ts +3 -0
  233. package/dist/configurators/pi.d.ts.map +1 -0
  234. package/dist/configurators/pi.js +55 -0
  235. package/dist/configurators/pi.js.map +1 -0
  236. package/dist/configurators/qoder.d.ts +11 -0
  237. package/dist/configurators/qoder.d.ts.map +1 -0
  238. package/dist/configurators/qoder.js +31 -0
  239. package/dist/configurators/qoder.js.map +1 -0
  240. package/dist/configurators/reasonix.d.ts +23 -0
  241. package/dist/configurators/reasonix.d.ts.map +1 -0
  242. package/dist/configurators/reasonix.js +60 -0
  243. package/dist/configurators/reasonix.js.map +1 -0
  244. package/dist/configurators/shared.d.ts +172 -0
  245. package/dist/configurators/shared.d.ts.map +1 -0
  246. package/dist/configurators/shared.js +530 -0
  247. package/dist/configurators/shared.js.map +1 -0
  248. package/dist/configurators/trae.d.ts +17 -0
  249. package/dist/configurators/trae.d.ts.map +1 -0
  250. package/dist/configurators/trae.js +42 -0
  251. package/dist/configurators/trae.js.map +1 -0
  252. package/dist/configurators/workflow.d.ts +37 -0
  253. package/dist/configurators/workflow.d.ts.map +1 -0
  254. package/dist/configurators/workflow.js +177 -0
  255. package/dist/configurators/workflow.js.map +1 -0
  256. package/dist/configurators/zcode.d.ts +19 -0
  257. package/dist/configurators/zcode.d.ts.map +1 -0
  258. package/dist/configurators/zcode.js +54 -0
  259. package/dist/configurators/zcode.js.map +1 -0
  260. package/dist/constants/paths.d.ts +74 -0
  261. package/dist/constants/paths.d.ts.map +1 -0
  262. package/dist/constants/paths.js +83 -0
  263. package/dist/constants/paths.js.map +1 -0
  264. package/dist/constants/version.d.ts +9 -0
  265. package/dist/constants/version.d.ts.map +1 -0
  266. package/dist/constants/version.js +15 -0
  267. package/dist/constants/version.js.map +1 -0
  268. package/dist/index.d.ts +9 -0
  269. package/dist/index.d.ts.map +1 -0
  270. package/dist/index.js +9 -0
  271. package/dist/index.js.map +1 -0
  272. package/dist/migrations/index.d.ts +62 -0
  273. package/dist/migrations/index.d.ts.map +1 -0
  274. package/dist/migrations/index.js +187 -0
  275. package/dist/migrations/index.js.map +1 -0
  276. package/dist/migrations/manifests/0.1.9.json +30 -0
  277. package/dist/migrations/manifests/0.2.0.json +49 -0
  278. package/dist/migrations/manifests/0.2.12.json +9 -0
  279. package/dist/migrations/manifests/0.2.13.json +9 -0
  280. package/dist/migrations/manifests/0.2.14.json +175 -0
  281. package/dist/migrations/manifests/0.2.15.json +33 -0
  282. package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
  283. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  284. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  285. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  286. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  287. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  288. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  289. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  290. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  291. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  292. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  293. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  294. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  295. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  296. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  297. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  298. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  299. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  300. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  301. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  302. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  303. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  304. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  305. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  306. package/dist/migrations/manifests/0.3.0.json +11 -0
  307. package/dist/migrations/manifests/0.3.1.json +9 -0
  308. package/dist/migrations/manifests/0.3.10.json +9 -0
  309. package/dist/migrations/manifests/0.3.2.json +9 -0
  310. package/dist/migrations/manifests/0.3.3.json +9 -0
  311. package/dist/migrations/manifests/0.3.4.json +21 -0
  312. package/dist/migrations/manifests/0.3.5.json +9 -0
  313. package/dist/migrations/manifests/0.3.6.json +9 -0
  314. package/dist/migrations/manifests/0.3.7.json +9 -0
  315. package/dist/migrations/manifests/0.3.8.json +9 -0
  316. package/dist/migrations/manifests/0.3.9.json +9 -0
  317. package/dist/migrations/manifests/0.4.0-beta.1.json +300 -0
  318. package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
  319. package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
  320. package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
  321. package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
  322. package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
  323. package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
  324. package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
  325. package/dist/migrations/manifests/0.4.0-beta.8.json +42 -0
  326. package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
  327. package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
  328. package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
  329. package/dist/migrations/manifests/0.4.0.json +9 -0
  330. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  331. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  332. package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
  333. package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
  334. package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
  335. package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
  336. package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
  337. package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
  338. package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
  339. package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
  340. package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
  341. package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
  342. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  343. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  344. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  345. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  346. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  347. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  348. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  349. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  350. package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
  351. package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
  352. package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
  353. package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
  354. package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
  355. package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
  356. package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
  357. package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
  358. package/dist/migrations/manifests/0.5.0.json +9 -0
  359. package/dist/migrations/manifests/0.5.1.json +9 -0
  360. package/dist/migrations/manifests/0.5.10.json +9 -0
  361. package/dist/migrations/manifests/0.5.11.json +16 -0
  362. package/dist/migrations/manifests/0.5.12.json +9 -0
  363. package/dist/migrations/manifests/0.5.13.json +9 -0
  364. package/dist/migrations/manifests/0.5.14.json +9 -0
  365. package/dist/migrations/manifests/0.5.15.json +9 -0
  366. package/dist/migrations/manifests/0.5.16.json +9 -0
  367. package/dist/migrations/manifests/0.5.17.json +9 -0
  368. package/dist/migrations/manifests/0.5.18.json +9 -0
  369. package/dist/migrations/manifests/0.5.19.json +9 -0
  370. package/dist/migrations/manifests/0.5.2.json +9 -0
  371. package/dist/migrations/manifests/0.5.3.json +9 -0
  372. package/dist/migrations/manifests/0.5.4.json +9 -0
  373. package/dist/migrations/manifests/0.5.5.json +9 -0
  374. package/dist/migrations/manifests/0.5.6.json +9 -0
  375. package/dist/migrations/manifests/0.5.7.json +16 -0
  376. package/dist/migrations/manifests/0.5.8.json +9 -0
  377. package/dist/migrations/manifests/0.5.9.json +9 -0
  378. package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
  379. package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
  380. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  381. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  382. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  383. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  384. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  385. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  386. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  387. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  388. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  389. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  390. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  391. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  392. package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
  393. package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
  394. package/dist/migrations/manifests/0.6.0-beta.23.json +88 -0
  395. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  396. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  397. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  398. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  399. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  400. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  401. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  402. package/dist/migrations/manifests/0.6.0-rc.0.json +9 -0
  403. package/dist/migrations/manifests/0.6.0.json +9 -0
  404. package/dist/migrations/manifests/0.6.1.json +9 -0
  405. package/dist/migrations/manifests/0.6.2.json +9 -0
  406. package/dist/migrations/manifests/0.6.3.json +24 -0
  407. package/dist/migrations/manifests/0.6.4.json +9 -0
  408. package/dist/migrations/manifests/0.6.5.json +9 -0
  409. package/dist/templates/claude/agents/trellis-check.md +115 -0
  410. package/dist/templates/claude/agents/trellis-implement.md +110 -0
  411. package/dist/templates/claude/agents/trellis-research.md +137 -0
  412. package/dist/templates/claude/hooks/statusline.py +324 -0
  413. package/dist/templates/claude/index.d.ts +31 -0
  414. package/dist/templates/claude/index.d.ts.map +1 -0
  415. package/dist/templates/claude/index.js +58 -0
  416. package/dist/templates/claude/index.js.map +1 -0
  417. package/dist/templates/claude/settings.json +73 -0
  418. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  419. package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
  420. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  421. package/dist/templates/codebuddy/index.d.ts +15 -0
  422. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  423. package/dist/templates/codebuddy/index.js +15 -0
  424. package/dist/templates/codebuddy/index.js.map +1 -0
  425. package/dist/templates/codebuddy/settings.json +59 -0
  426. package/dist/templates/codex/agents/trellis-check.toml +59 -0
  427. package/dist/templates/codex/agents/trellis-implement.toml +40 -0
  428. package/dist/templates/codex/agents/trellis-research.toml +73 -0
  429. package/dist/templates/codex/config.toml +28 -0
  430. package/dist/templates/codex/hooks/session-start.py +545 -0
  431. package/dist/templates/codex/hooks.json +15 -0
  432. package/dist/templates/codex/index.d.ts +39 -0
  433. package/dist/templates/codex/index.d.ts.map +1 -0
  434. package/dist/templates/codex/index.js +86 -0
  435. package/dist/templates/codex/index.js.map +1 -0
  436. package/dist/templates/codex/skills/before-dev/SKILL.md +40 -0
  437. package/dist/templates/codex/skills/brainstorm/SKILL.md +130 -0
  438. package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
  439. package/dist/templates/codex/skills/check/SKILL.md +98 -0
  440. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
  441. package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
  442. package/dist/templates/codex/skills/finish-work/SKILL.md +98 -0
  443. package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
  444. package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
  445. package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
  446. package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
  447. package/dist/templates/codex/skills/start/SKILL.md +64 -0
  448. package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
  449. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +67 -0
  450. package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +480 -0
  451. package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +233 -0
  452. package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +226 -0
  453. package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +276 -0
  454. package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +128 -0
  455. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +85 -0
  456. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  457. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +56 -0
  458. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  459. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  460. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +123 -0
  461. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  462. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
  463. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +66 -0
  464. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  465. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +146 -0
  466. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  467. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  468. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +69 -0
  469. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  470. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  471. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +130 -0
  472. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  473. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  474. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +82 -0
  475. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +72 -0
  476. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
  477. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +88 -0
  478. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +85 -0
  479. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
  480. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +65 -0
  481. package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
  482. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  483. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  484. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  485. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  486. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  487. package/dist/templates/common/commands/continue.md +57 -0
  488. package/dist/templates/common/commands/finish-work.md +74 -0
  489. package/dist/templates/common/commands/start.md +59 -0
  490. package/dist/templates/common/index.d.ts +48 -0
  491. package/dist/templates/common/index.d.ts.map +1 -0
  492. package/dist/templates/common/index.js +104 -0
  493. package/dist/templates/common/index.js.map +1 -0
  494. package/dist/templates/common/skills/before-dev.md +35 -0
  495. package/dist/templates/common/skills/brainstorm.md +168 -0
  496. package/dist/templates/common/skills/break-loop.md +184 -0
  497. package/dist/templates/common/skills/check.md +93 -0
  498. package/dist/templates/common/skills/update-spec.md +351 -0
  499. package/dist/templates/copilot/hooks/session-start.py +547 -0
  500. package/dist/templates/copilot/hooks.json +19 -0
  501. package/dist/templates/copilot/index.d.ts +23 -0
  502. package/dist/templates/copilot/index.d.ts.map +1 -0
  503. package/dist/templates/copilot/index.js +54 -0
  504. package/dist/templates/copilot/index.js.map +1 -0
  505. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  506. package/dist/templates/copilot/prompts/brainstorm.prompt.md +129 -0
  507. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  508. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
  509. package/dist/templates/copilot/prompts/check.prompt.md +97 -0
  510. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  511. package/dist/templates/copilot/prompts/finish-work.prompt.md +107 -0
  512. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  513. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  514. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  515. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  516. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  517. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  518. package/dist/templates/cursor/agents/trellis-check.md +114 -0
  519. package/dist/templates/cursor/agents/trellis-implement.md +109 -0
  520. package/dist/templates/cursor/agents/trellis-research.md +136 -0
  521. package/dist/templates/cursor/hooks.json +24 -0
  522. package/dist/templates/cursor/index.d.ts +13 -0
  523. package/dist/templates/cursor/index.d.ts.map +1 -0
  524. package/dist/templates/cursor/index.js +13 -0
  525. package/dist/templates/cursor/index.js.map +1 -0
  526. package/dist/templates/droid/droids/trellis-check.md +107 -0
  527. package/dist/templates/droid/droids/trellis-implement.md +102 -0
  528. package/dist/templates/droid/droids/trellis-research.md +137 -0
  529. package/dist/templates/droid/index.d.ts +15 -0
  530. package/dist/templates/droid/index.d.ts.map +1 -0
  531. package/dist/templates/droid/index.js +15 -0
  532. package/dist/templates/droid/index.js.map +1 -0
  533. package/dist/templates/droid/settings.json +59 -0
  534. package/dist/templates/extract.d.ts +40 -0
  535. package/dist/templates/extract.d.ts.map +1 -0
  536. package/dist/templates/extract.js +106 -0
  537. package/dist/templates/extract.js.map +1 -0
  538. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  539. package/dist/templates/gemini/agents/trellis-implement.md +102 -0
  540. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  541. package/dist/templates/gemini/index.d.ts +13 -0
  542. package/dist/templates/gemini/index.d.ts.map +1 -0
  543. package/dist/templates/gemini/index.js +13 -0
  544. package/dist/templates/gemini/index.js.map +1 -0
  545. package/dist/templates/gemini/settings.json +28 -0
  546. package/dist/templates/kiro/agents/trellis-check.json +14 -0
  547. package/dist/templates/kiro/agents/trellis-implement.json +14 -0
  548. package/dist/templates/kiro/agents/trellis-research.json +22 -0
  549. package/dist/templates/kiro/agents/trellis.json +20 -0
  550. package/dist/templates/kiro/hooks/cviauto-workflow-state.kiro.hook +14 -0
  551. package/dist/templates/kiro/index.d.ts +32 -0
  552. package/dist/templates/kiro/index.d.ts.map +1 -0
  553. package/dist/templates/kiro/index.js +28 -0
  554. package/dist/templates/kiro/index.js.map +1 -0
  555. package/dist/templates/markdown/agents.md +21 -0
  556. package/dist/templates/markdown/gitignore.txt +15 -0
  557. package/dist/templates/markdown/index.d.ts +27 -0
  558. package/dist/templates/markdown/index.d.ts.map +1 -0
  559. package/dist/templates/markdown/index.js +52 -0
  560. package/dist/templates/markdown/index.js.map +1 -0
  561. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  562. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  563. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  564. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  565. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  566. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  567. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  568. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  569. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  570. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  571. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  572. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  573. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  574. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  575. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +327 -0
  576. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -0
  577. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  578. package/dist/templates/markdown/workspace-index.md +125 -0
  579. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  580. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  581. package/dist/templates/opencode/agents/trellis-implement.md +118 -0
  582. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  583. package/dist/templates/opencode/lib/cviauto-context.js +418 -0
  584. package/dist/templates/opencode/lib/session-utils.js +609 -0
  585. package/dist/templates/opencode/package.json +5 -0
  586. package/dist/templates/opencode/plugins/inject-subagent-context.js +570 -0
  587. package/dist/templates/opencode/plugins/inject-workflow-state.js +175 -0
  588. package/dist/templates/opencode/plugins/session-start.js +140 -0
  589. package/dist/templates/pi/agents/trellis-check.md +37 -0
  590. package/dist/templates/pi/agents/trellis-implement.md +42 -0
  591. package/dist/templates/pi/agents/trellis-research.md +25 -0
  592. package/dist/templates/pi/extensions/trellis/index.ts.txt +1680 -0
  593. package/dist/templates/pi/index.d.ts +5 -0
  594. package/dist/templates/pi/index.d.ts.map +1 -0
  595. package/dist/templates/pi/index.js +12 -0
  596. package/dist/templates/pi/index.js.map +1 -0
  597. package/dist/templates/pi/settings.json +6 -0
  598. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  599. package/dist/templates/qoder/agents/trellis-implement.md +103 -0
  600. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  601. package/dist/templates/qoder/index.d.ts +15 -0
  602. package/dist/templates/qoder/index.d.ts.map +1 -0
  603. package/dist/templates/qoder/index.js +15 -0
  604. package/dist/templates/qoder/index.js.map +1 -0
  605. package/dist/templates/qoder/settings.json +47 -0
  606. package/dist/templates/reasonix/agents/trellis-check.md +36 -0
  607. package/dist/templates/reasonix/agents/trellis-implement.md +41 -0
  608. package/dist/templates/reasonix/index.d.ts +13 -0
  609. package/dist/templates/reasonix/index.d.ts.map +1 -0
  610. package/dist/templates/reasonix/index.js +16 -0
  611. package/dist/templates/reasonix/index.js.map +1 -0
  612. package/dist/templates/shared-hooks/index.d.ts +58 -0
  613. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  614. package/dist/templates/shared-hooks/index.js +101 -0
  615. package/dist/templates/shared-hooks/index.js.map +1 -0
  616. package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
  617. package/dist/templates/shared-hooks/inject-subagent-context.py +786 -0
  618. package/dist/templates/shared-hooks/inject-workflow-state.py +408 -0
  619. package/dist/templates/shared-hooks/session-start.py +844 -0
  620. package/dist/templates/template-utils.d.ts +28 -0
  621. package/dist/templates/template-utils.d.ts.map +1 -0
  622. package/dist/templates/template-utils.js +95 -0
  623. package/dist/templates/template-utils.js.map +1 -0
  624. package/dist/templates/trae/agents/trellis-check.md +108 -0
  625. package/dist/templates/trae/agents/trellis-implement.md +103 -0
  626. package/dist/templates/trae/agents/trellis-research.md +137 -0
  627. package/dist/templates/trae/hooks.json +27 -0
  628. package/dist/templates/trae/index.d.ts +15 -0
  629. package/dist/templates/trae/index.d.ts.map +1 -0
  630. package/dist/templates/trae/index.js +15 -0
  631. package/dist/templates/trae/index.js.map +1 -0
  632. package/dist/templates/trellis/agents/check.md +70 -0
  633. package/dist/templates/trellis/agents/implement.md +71 -0
  634. package/dist/templates/trellis/config.yaml +110 -0
  635. package/dist/templates/trellis/gitignore.txt +40 -0
  636. package/dist/templates/trellis/index.d.ts +65 -0
  637. package/dist/templates/trellis/index.d.ts.map +1 -0
  638. package/dist/templates/trellis/index.js +119 -0
  639. package/dist/templates/trellis/index.js.map +1 -0
  640. package/dist/templates/trellis/scripts/__init__.py +5 -0
  641. package/dist/templates/trellis/scripts/add_session.py +567 -0
  642. package/dist/templates/trellis/scripts/common/__init__.py +92 -0
  643. package/dist/templates/trellis/scripts/common/active_task.py +628 -0
  644. package/dist/templates/trellis/scripts/common/cli_adapter.py +851 -0
  645. package/dist/templates/trellis/scripts/common/config.py +444 -0
  646. package/dist/templates/trellis/scripts/common/cviauto_config.py +131 -0
  647. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  648. package/dist/templates/trellis/scripts/common/git.py +31 -0
  649. package/dist/templates/trellis/scripts/common/git_context.py +106 -0
  650. package/dist/templates/trellis/scripts/common/io.py +37 -0
  651. package/dist/templates/trellis/scripts/common/log.py +45 -0
  652. package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
  653. package/dist/templates/trellis/scripts/common/paths.py +447 -0
  654. package/dist/templates/trellis/scripts/common/safe_commit.py +315 -0
  655. package/dist/templates/trellis/scripts/common/session_context.py +821 -0
  656. package/dist/templates/trellis/scripts/common/task_context.py +223 -0
  657. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  658. package/dist/templates/trellis/scripts/common/task_store.py +747 -0
  659. package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
  660. package/dist/templates/trellis/scripts/common/tasks.py +112 -0
  661. package/dist/templates/trellis/scripts/common/types.py +110 -0
  662. package/dist/templates/trellis/scripts/common/workflow_phase.py +212 -0
  663. package/dist/templates/trellis/scripts/get_context.py +16 -0
  664. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  665. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  666. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  667. package/dist/templates/trellis/scripts/task.py +500 -0
  668. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  669. package/dist/templates/trellis/workflow.md +697 -0
  670. package/dist/templates/zcode/agents/trellis-check.md +102 -0
  671. package/dist/templates/zcode/agents/trellis-implement.md +102 -0
  672. package/dist/templates/zcode/index.d.ts +15 -0
  673. package/dist/templates/zcode/index.d.ts.map +1 -0
  674. package/dist/templates/zcode/index.js +18 -0
  675. package/dist/templates/zcode/index.js.map +1 -0
  676. package/dist/types/ai-tools.d.ts +95 -0
  677. package/dist/types/ai-tools.d.ts.map +1 -0
  678. package/dist/types/ai-tools.js +330 -0
  679. package/dist/types/ai-tools.js.map +1 -0
  680. package/dist/types/migration.d.ts +125 -0
  681. package/dist/types/migration.d.ts.map +1 -0
  682. package/dist/types/migration.js +8 -0
  683. package/dist/types/migration.js.map +1 -0
  684. package/dist/utils/agent-refs.d.ts +31 -0
  685. package/dist/utils/agent-refs.d.ts.map +1 -0
  686. package/dist/utils/agent-refs.js +63 -0
  687. package/dist/utils/agent-refs.js.map +1 -0
  688. package/dist/utils/compare-versions.d.ts +12 -0
  689. package/dist/utils/compare-versions.d.ts.map +1 -0
  690. package/dist/utils/compare-versions.js +86 -0
  691. package/dist/utils/compare-versions.js.map +1 -0
  692. package/dist/utils/cwd-guard.d.ts +38 -0
  693. package/dist/utils/cwd-guard.d.ts.map +1 -0
  694. package/dist/utils/cwd-guard.js +62 -0
  695. package/dist/utils/cwd-guard.js.map +1 -0
  696. package/dist/utils/file-writer.d.ts +36 -0
  697. package/dist/utils/file-writer.d.ts.map +1 -0
  698. package/dist/utils/file-writer.js +203 -0
  699. package/dist/utils/file-writer.js.map +1 -0
  700. package/dist/utils/manifest-prune.d.ts +61 -0
  701. package/dist/utils/manifest-prune.d.ts.map +1 -0
  702. package/dist/utils/manifest-prune.js +137 -0
  703. package/dist/utils/manifest-prune.js.map +1 -0
  704. package/dist/utils/posix.d.ts +13 -0
  705. package/dist/utils/posix.d.ts.map +1 -0
  706. package/dist/utils/posix.js +15 -0
  707. package/dist/utils/posix.js.map +1 -0
  708. package/dist/utils/project-detector.d.ts +46 -0
  709. package/dist/utils/project-detector.d.ts.map +1 -0
  710. package/dist/utils/project-detector.js +666 -0
  711. package/dist/utils/project-detector.js.map +1 -0
  712. package/dist/utils/proxy.d.ts +25 -0
  713. package/dist/utils/proxy.d.ts.map +1 -0
  714. package/dist/utils/proxy.js +60 -0
  715. package/dist/utils/proxy.js.map +1 -0
  716. package/dist/utils/registry-config.d.ts +7 -0
  717. package/dist/utils/registry-config.d.ts.map +1 -0
  718. package/dist/utils/registry-config.js +171 -0
  719. package/dist/utils/registry-config.js.map +1 -0
  720. package/dist/utils/task-json.d.ts +13 -0
  721. package/dist/utils/task-json.d.ts.map +1 -0
  722. package/dist/utils/task-json.js +12 -0
  723. package/dist/utils/task-json.js.map +1 -0
  724. package/dist/utils/template-fetcher.d.ts +161 -0
  725. package/dist/utils/template-fetcher.d.ts.map +1 -0
  726. package/dist/utils/template-fetcher.js +956 -0
  727. package/dist/utils/template-fetcher.js.map +1 -0
  728. package/dist/utils/template-hash.d.ts +123 -0
  729. package/dist/utils/template-hash.d.ts.map +1 -0
  730. package/dist/utils/template-hash.js +334 -0
  731. package/dist/utils/template-hash.js.map +1 -0
  732. package/dist/utils/uninstall-scrubbers.d.ts +64 -0
  733. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  734. package/dist/utils/uninstall-scrubbers.js +367 -0
  735. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  736. package/dist/utils/workflow-resolver.d.ts +86 -0
  737. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  738. package/dist/utils/workflow-resolver.js +265 -0
  739. package/dist/utils/workflow-resolver.js.map +1 -0
  740. package/package.json +89 -0
@@ -0,0 +1,747 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Task CRUD operations.
4
+
5
+ Provides:
6
+ ensure_tasks_dir - Ensure tasks directory exists
7
+ cmd_create - Create a new task
8
+ cmd_archive - Archive completed task
9
+ cmd_set_branch - Set git branch for task
10
+ cmd_set_base_branch - Set PR target branch
11
+ cmd_set_scope - Set scope for PR title
12
+ cmd_add_subtask - Link child task to parent
13
+ cmd_remove_subtask - Unlink child task from parent
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ import argparse
19
+ import json
20
+ import re
21
+ import sys
22
+ from datetime import datetime
23
+ from pathlib import Path
24
+
25
+ from .config import (
26
+ get_packages,
27
+ get_session_auto_commit,
28
+ is_monorepo,
29
+ resolve_package,
30
+ validate_package,
31
+ )
32
+ from .git import run_git
33
+ from .io import read_json, write_json
34
+ from .log import Colors, colored
35
+ from .paths import (
36
+ DIR_ARCHIVE,
37
+ DIR_TASKS,
38
+ DIR_WORKFLOW,
39
+ FILE_TASK_JSON,
40
+ generate_task_date_prefix,
41
+ get_developer,
42
+ get_repo_root,
43
+ get_tasks_dir,
44
+ )
45
+ from .safe_commit import (
46
+ print_gitignore_warning,
47
+ safe_archive_paths_to_add,
48
+ safe_git_add,
49
+ )
50
+ from .task_utils import (
51
+ archive_task_complete,
52
+ find_task_by_name,
53
+ resolve_task_dir,
54
+ run_task_hooks,
55
+ )
56
+
57
+
58
+ # =============================================================================
59
+ # Helper Functions
60
+ # =============================================================================
61
+
62
+ def _slugify(title: str) -> str:
63
+ """Convert title to slug (only works with ASCII)."""
64
+ result = title.lower()
65
+ result = re.sub(r"[^a-z0-9]", "-", result)
66
+ result = re.sub(r"-+", "-", result)
67
+ result = result.strip("-")
68
+ return result
69
+
70
+
71
+ def ensure_tasks_dir(repo_root: Path) -> Path:
72
+ """Ensure tasks directory exists."""
73
+ tasks_dir = get_tasks_dir(repo_root)
74
+ archive_dir = tasks_dir / "archive"
75
+
76
+ if not tasks_dir.exists():
77
+ tasks_dir.mkdir(parents=True)
78
+ print(colored(f"Created tasks directory: {tasks_dir}", Colors.GREEN), file=sys.stderr)
79
+
80
+ if not archive_dir.exists():
81
+ archive_dir.mkdir(parents=True)
82
+
83
+ return tasks_dir
84
+
85
+
86
+ def _find_archived_task_by_dir_name(tasks_dir: Path, dir_name: str) -> Path | None:
87
+ """Find an archived task directory with the exact active-task dir name."""
88
+ archive_dir = tasks_dir / DIR_ARCHIVE
89
+ if not archive_dir.is_dir():
90
+ return None
91
+
92
+ for month_dir in sorted(archive_dir.iterdir()):
93
+ if not month_dir.is_dir():
94
+ continue
95
+ candidate = month_dir / dir_name
96
+ if candidate.is_dir():
97
+ return candidate
98
+
99
+ return None
100
+
101
+
102
+ def _repo_relative_path(path: Path, repo_root: Path) -> str:
103
+ """Format a path relative to the repo root when possible."""
104
+ try:
105
+ return path.relative_to(repo_root).as_posix()
106
+ except ValueError:
107
+ return str(path)
108
+
109
+
110
+ # =============================================================================
111
+ # Sub-agent platform detection + JSONL seeding
112
+ # =============================================================================
113
+
114
+ # Config directories of platforms that consume implement.jsonl / check.jsonl.
115
+ # Keep in sync with src/types/ai-tools.ts AI_TOOLS entries — these are the
116
+ # platforms listed in workflow.md's "agent-capable" Skill Routing block
117
+ # (Class-1 hook-inject + Class-2 pull-based preludes). Kilo / Antigravity /
118
+ # Devin are NOT in this list: they do not consume JSONL.
119
+ _SUBAGENT_CONFIG_DIRS: tuple[str, ...] = (
120
+ ".claude",
121
+ ".cursor",
122
+ ".codex",
123
+ ".kiro",
124
+ ".gemini",
125
+ ".opencode",
126
+ ".qoder",
127
+ ".codebuddy",
128
+ ".factory", # Factory Droid
129
+ ".github/copilot",
130
+ ".pi", # Pi Agent
131
+ ".trae", # Trae IDE
132
+ )
133
+
134
+ _SEED_EXAMPLE = (
135
+ "Fill with {\"file\": \"<path>\", \"reason\": \"<why>\"}. "
136
+ "Put spec/research files only — no code paths. "
137
+ "Run `python3 .cviauto/scripts/get_context.py --mode packages` to list available specs. "
138
+ "Delete this line once real entries are added."
139
+ )
140
+
141
+
142
+ def _has_subagent_platform(repo_root: Path) -> bool:
143
+ """Return True if any sub-agent-capable platform is configured.
144
+
145
+ Detected by probing well-known config directories at the repo root. Used
146
+ only to decide whether ``task.py create`` should seed empty
147
+ ``implement.jsonl`` / ``check.jsonl`` files.
148
+ """
149
+ for config_dir in _SUBAGENT_CONFIG_DIRS:
150
+ if (repo_root / config_dir).is_dir():
151
+ return True
152
+ return False
153
+
154
+
155
+ def _write_seed_jsonl(path: Path) -> None:
156
+ """Write a one-line seed JSONL file with a self-describing ``_example``.
157
+
158
+ The seed row has no ``file`` field, so downstream consumers (hooks +
159
+ preludes) that iterate entries via ``item.get("file")`` naturally skip
160
+ it. The row exists purely as an in-file prompt for the AI curator.
161
+ """
162
+ seed = {"_example": _SEED_EXAMPLE}
163
+ path.write_text(json.dumps(seed, ensure_ascii=False) + "\n", encoding="utf-8")
164
+
165
+
166
+ def _default_prd_content(title: str, description: str | None = None) -> str:
167
+ """Return the default PRD skeleton created with every task."""
168
+ goal = (description or "").strip() or "TBD."
169
+ heading = title.strip() or "Untitled task"
170
+ return f"""# {heading}
171
+
172
+ ## Goal
173
+
174
+ {goal}
175
+
176
+ ## Requirements
177
+
178
+ - TBD
179
+
180
+ ## Acceptance Criteria
181
+
182
+ - [ ] TBD
183
+
184
+ ## Notes
185
+
186
+ - Keep `prd.md` focused on requirements, constraints, and acceptance criteria.
187
+ - Lightweight tasks can remain PRD-only.
188
+ - For complex tasks, add `design.md` for technical design and `implement.md` for execution planning before `task.py start`.
189
+ """
190
+
191
+
192
+ # =============================================================================
193
+ # Command: create
194
+ # =============================================================================
195
+
196
+ def cmd_create(args: argparse.Namespace) -> int:
197
+ """Create a new task."""
198
+ repo_root = get_repo_root()
199
+
200
+ if not args.title:
201
+ print(colored("Error: title is required", Colors.RED), file=sys.stderr)
202
+ return 1
203
+
204
+ # Validate --package (CLI source: fail-fast)
205
+ package: str | None = getattr(args, "package", None)
206
+ if not is_monorepo(repo_root):
207
+ # Single-repo: ignore --package, no package prefix
208
+ if package:
209
+ print(colored(f"Warning: --package ignored in single-repo project", Colors.YELLOW), file=sys.stderr)
210
+ package = None
211
+ elif package:
212
+ if not validate_package(package, repo_root):
213
+ packages = get_packages(repo_root)
214
+ available = ", ".join(sorted(packages.keys())) if packages else "(none)"
215
+ print(colored(f"Error: unknown package '{package}'. Available: {available}", Colors.RED), file=sys.stderr)
216
+ return 1
217
+ else:
218
+ # Inferred: default_package → None (no task.json yet for create)
219
+ package = resolve_package(repo_root=repo_root)
220
+
221
+ # Default assignee to current developer
222
+ assignee = args.assignee
223
+ if not assignee:
224
+ assignee = get_developer(repo_root)
225
+ if not assignee:
226
+ print(colored("Error: No developer set. Run init_developer.py first or use --assignee", Colors.RED), file=sys.stderr)
227
+ return 1
228
+
229
+ ensure_tasks_dir(repo_root)
230
+
231
+ # Get current developer as creator
232
+ creator = get_developer(repo_root) or assignee
233
+
234
+ # Generate slug if not provided
235
+ slug = args.slug or _slugify(args.title)
236
+ if not slug:
237
+ print(colored("Error: could not generate slug from title", Colors.RED), file=sys.stderr)
238
+ return 1
239
+
240
+ # Create task directory with MM-DD-slug format
241
+ tasks_dir = get_tasks_dir(repo_root)
242
+ date_prefix = generate_task_date_prefix()
243
+ dir_name = f"{date_prefix}-{slug}"
244
+ task_dir = tasks_dir / dir_name
245
+ task_json_path = task_dir / FILE_TASK_JSON
246
+
247
+ archived_task_dir = _find_archived_task_by_dir_name(tasks_dir, dir_name)
248
+ if archived_task_dir:
249
+ print(colored(f"Error: Task already archived: {dir_name}", Colors.RED), file=sys.stderr)
250
+ print(f"Archived at: {_repo_relative_path(archived_task_dir, repo_root)}", file=sys.stderr)
251
+ print("Use a new slug if you intend to create a new task.", file=sys.stderr)
252
+ return 1
253
+
254
+ if task_dir.exists():
255
+ print(colored(f"Warning: Task directory already exists: {dir_name}", Colors.YELLOW), file=sys.stderr)
256
+ else:
257
+ task_dir.mkdir(parents=True)
258
+
259
+ today = datetime.now().strftime("%Y-%m-%d")
260
+
261
+ # Record current branch as base_branch (PR target)
262
+ _, branch_out, _ = run_git(["branch", "--show-current"], cwd=repo_root)
263
+ current_branch = branch_out.strip() or "main"
264
+
265
+ task_data = {
266
+ "id": slug,
267
+ "name": slug,
268
+ "title": args.title,
269
+ "description": args.description or "",
270
+ "status": "planning",
271
+ "dev_type": None,
272
+ "scope": None,
273
+ "package": package,
274
+ "priority": args.priority,
275
+ "creator": creator,
276
+ "assignee": assignee,
277
+ "createdAt": today,
278
+ "completedAt": None,
279
+ "branch": None,
280
+ "base_branch": current_branch,
281
+ "worktree_path": None,
282
+ "commit": None,
283
+ "pr_url": None,
284
+ "subtasks": [],
285
+ "children": [],
286
+ "parent": None,
287
+ "relatedFiles": [],
288
+ "notes": "",
289
+ "meta": {},
290
+ }
291
+
292
+ write_json(task_json_path, task_data)
293
+
294
+ prd_path = task_dir / "prd.md"
295
+ if not prd_path.exists():
296
+ prd_path.write_text(
297
+ _default_prd_content(args.title, args.description),
298
+ encoding="utf-8",
299
+ )
300
+
301
+ # Seed implement.jsonl / check.jsonl for sub-agent-capable platforms.
302
+ # Agent curates real entries during planning when the task needs them.
303
+ # Agent-less platforms (Kilo / Antigravity / Devin) skip this — they
304
+ # load specs via the cviauto-before-dev skill instead of JSONL.
305
+ seeded_jsonl = False
306
+ if _has_subagent_platform(repo_root):
307
+ for jsonl_name in ("implement.jsonl", "check.jsonl"):
308
+ jsonl_path = task_dir / jsonl_name
309
+ if not jsonl_path.exists():
310
+ _write_seed_jsonl(jsonl_path)
311
+ seeded_jsonl = True
312
+
313
+ # Handle --parent: establish bidirectional link
314
+ if args.parent:
315
+ parent_dir = resolve_task_dir(args.parent, repo_root)
316
+ parent_json_path = parent_dir / FILE_TASK_JSON
317
+ if not parent_json_path.is_file():
318
+ print(colored(f"Warning: Parent task.json not found: {args.parent}", Colors.YELLOW), file=sys.stderr)
319
+ else:
320
+ parent_data = read_json(parent_json_path)
321
+ if parent_data:
322
+ # Add child to parent's children list
323
+ parent_children = parent_data.get("children", [])
324
+ if dir_name not in parent_children:
325
+ parent_children.append(dir_name)
326
+ parent_data["children"] = parent_children
327
+ write_json(parent_json_path, parent_data)
328
+
329
+ # Set parent in child's task.json
330
+ task_data["parent"] = parent_dir.name
331
+ write_json(task_json_path, task_data)
332
+
333
+ print(colored(f"Linked as child of: {parent_dir.name}", Colors.GREEN), file=sys.stderr)
334
+
335
+ # Auto-activate the new task so the per-turn breadcrumb fires planning
336
+ # state. Best-effort: gracefully degrade if no session identity (CLI run
337
+ # outside an AI session) — the task is still created, the user can run
338
+ # task.py start later. Pointer is session-scoped so this never affects
339
+ # other AI sessions.
340
+ try:
341
+ from .active_task import resolve_context_key, set_active_task
342
+ if resolve_context_key():
343
+ try:
344
+ rel_dir = task_dir.relative_to(repo_root).as_posix()
345
+ except ValueError:
346
+ rel_dir = str(task_dir)
347
+ set_active_task(rel_dir, repo_root)
348
+ except Exception:
349
+ pass
350
+
351
+ print(colored(f"Created task: {dir_name}", Colors.GREEN), file=sys.stderr)
352
+ print("", file=sys.stderr)
353
+ print(colored("Next steps:", Colors.BLUE), file=sys.stderr)
354
+ print(" - Fill prd.md with requirements and acceptance criteria", file=sys.stderr)
355
+ print(" - Lightweight task: PRD-only is valid", file=sys.stderr)
356
+ print(" - Complex task: add design.md and implement.md before task.py start", file=sys.stderr)
357
+ if seeded_jsonl:
358
+ print(
359
+ " - Curate implement.jsonl / check.jsonl as spec/research manifests when sub-agents need context",
360
+ file=sys.stderr,
361
+ )
362
+ print(" - Use /cviauto:continue or phase context to decide the next step", file=sys.stderr)
363
+ print("", file=sys.stderr)
364
+
365
+ # Output relative path for script chaining
366
+ print(f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}")
367
+
368
+ run_task_hooks("after_create", task_json_path, repo_root)
369
+ return 0
370
+
371
+
372
+ # =============================================================================
373
+ # Command: archive
374
+ # =============================================================================
375
+
376
+ def cmd_archive(args: argparse.Namespace) -> int:
377
+ """Archive completed task."""
378
+ repo_root = get_repo_root()
379
+ task_name = args.name
380
+
381
+ if not task_name:
382
+ print(colored("Error: Task name is required", Colors.RED), file=sys.stderr)
383
+ return 1
384
+
385
+ tasks_dir = get_tasks_dir(repo_root)
386
+
387
+ # Resolve task directory (supports task name, relative path, or absolute path)
388
+ task_dir = resolve_task_dir(task_name, repo_root)
389
+
390
+ if not task_dir or not task_dir.is_dir():
391
+ print(colored(f"Error: Task not found: {task_name}", Colors.RED), file=sys.stderr)
392
+ print("Active tasks:", file=sys.stderr)
393
+ # Import lazily to avoid circular dependency
394
+ from .tasks import iter_active_tasks
395
+ for t in iter_active_tasks(tasks_dir):
396
+ print(f" - {t.dir_name}/", file=sys.stderr)
397
+ return 1
398
+
399
+ dir_name = task_dir.name
400
+ task_json_path = task_dir / FILE_TASK_JSON
401
+
402
+ # Update status before archiving
403
+ today = datetime.now().strftime("%Y-%m-%d")
404
+ # Names of child task dirs whose task.json gets modified below; passed
405
+ # into safe_archive_paths_to_add so they're staged in this commit.
406
+ modified_children: list[str] = []
407
+ if task_json_path.is_file():
408
+ data = read_json(task_json_path)
409
+ if data:
410
+ data["status"] = "completed"
411
+ data["completedAt"] = today
412
+ write_json(task_json_path, data)
413
+
414
+ # Handle subtask relationships on archive.
415
+ # Keep this task in its parent's children list so progress
416
+ # counters (children_progress) stay consistent — children
417
+ # missing from the active set are treated as completed.
418
+ task_children = data.get("children", [])
419
+
420
+ # If this is a parent, clear parent field in all children
421
+ if task_children:
422
+ for child_name in task_children:
423
+ child_dir_path = find_task_by_name(child_name, tasks_dir)
424
+ if child_dir_path:
425
+ child_json = child_dir_path / FILE_TASK_JSON
426
+ if child_json.is_file():
427
+ child_data = read_json(child_json)
428
+ if child_data:
429
+ child_data["parent"] = None
430
+ write_json(child_json, child_data)
431
+ modified_children.append(child_dir_path.name)
432
+
433
+ # Clear any session that still points at this task before the path moves.
434
+ from .active_task import clear_task_from_sessions
435
+ clear_task_from_sessions(str(task_dir), repo_root)
436
+
437
+ # Archive
438
+ result = archive_task_complete(task_dir, repo_root)
439
+ if "archived_to" in result:
440
+ archive_dest = Path(result["archived_to"])
441
+ year_month = archive_dest.parent.name
442
+ print(colored(f"Archived: {dir_name} -> archive/{year_month}/", Colors.GREEN), file=sys.stderr)
443
+
444
+ # Try a bookkeeping commit only when explicitly enabled.
445
+ if not getattr(args, "no_commit", False):
446
+ if not _auto_commit_archive(dir_name, repo_root, modified_children):
447
+ print(
448
+ colored(
449
+ "Archive moved on disk, but git auto-commit did not complete. "
450
+ "Resolve `git status` before continuing.",
451
+ Colors.RED,
452
+ ),
453
+ file=sys.stderr,
454
+ )
455
+ return 1
456
+
457
+ # Return the archive path
458
+ print(f"{DIR_WORKFLOW}/{DIR_TASKS}/{DIR_ARCHIVE}/{year_month}/{dir_name}")
459
+
460
+ # Run hooks with the archived path
461
+ archived_json = archive_dest / FILE_TASK_JSON
462
+ run_task_hooks("after_archive", archived_json, repo_root)
463
+ return 0
464
+
465
+ return 1
466
+
467
+
468
+ def _auto_commit_archive(
469
+ task_name: str,
470
+ repo_root: Path,
471
+ modified_children: list[str] | None = None,
472
+ ) -> bool:
473
+ """Stage Trellis-owned task paths and commit after archive when enabled.
474
+
475
+ Scoped narrowly to the archived task's source + destination paths
476
+ plus any child task dirs whose ``task.json`` was edited (parent →
477
+ children relationship update). Dirty changes in OTHER active task
478
+ dirs are NOT bundled into the archive commit.
479
+
480
+ If ``.gitignore`` blocks the paths, we warn + skip — we do NOT
481
+ retry with ``git add -f``. The warning explicitly forbids
482
+ ``git add -f .cviauto/`` (which would fan out to caches/backups)
483
+ and points users at ``session_auto_commit: false``.
484
+
485
+ Honors ``session_auto_commit`` in ``.cviauto/config.yaml``: when
486
+ set to ``false``, this function returns immediately without
487
+ touching git (the archive directory move on disk is unaffected).
488
+ """
489
+ if not get_session_auto_commit(repo_root):
490
+ print(
491
+ "[OK] session_auto_commit: false — skipping git stage/commit.",
492
+ file=sys.stderr,
493
+ )
494
+ return True
495
+
496
+ source_rel = f"{DIR_WORKFLOW}/{DIR_TASKS}/{task_name}"
497
+ rc, tracked_out, _ = run_git(
498
+ ["ls-files", "--", source_rel],
499
+ cwd=repo_root,
500
+ )
501
+ source_was_tracked = rc == 0 and bool(tracked_out.strip())
502
+
503
+ paths = safe_archive_paths_to_add(
504
+ repo_root, task_name=task_name, modified_children=modified_children
505
+ )
506
+ if not paths:
507
+ print("[OK] No task changes to commit.", file=sys.stderr)
508
+ return True
509
+
510
+ success, _, err = safe_git_add(paths, repo_root)
511
+ if not success:
512
+ if err and "ignored by" in err.lower():
513
+ print_gitignore_warning(paths)
514
+ else:
515
+ print(
516
+ f"[WARN] git add failed: {err.strip() if err else 'unknown error'}",
517
+ file=sys.stderr,
518
+ )
519
+ return not source_was_tracked
520
+
521
+ # Belt-and-suspenders for the phantom-delete bug: `safe_git_add` uses
522
+ # `git add` (no -A) which only stages additions/modifications. The
523
+ # source task directory was moved away by `shutil.move`, so its files
524
+ # need an explicit `git rm --cached` to stage the deletions in this
525
+ # same commit — otherwise they sit as uncommitted "phantom deletes"
526
+ # against HEAD until something later picks them up.
527
+ #
528
+ # `--ignore-unmatch` makes this a no-op when the task was never tracked
529
+ # (e.g. archiving a task that lived only in working tree).
530
+ run_git(
531
+ ["rm", "-r", "--cached", "--ignore-unmatch", "--", source_rel],
532
+ cwd=repo_root,
533
+ )
534
+
535
+ rc, _, _ = run_git(
536
+ ["diff", "--cached", "--quiet", "--", *paths, source_rel],
537
+ cwd=repo_root,
538
+ )
539
+ if rc == 0:
540
+ print("[OK] No task changes to commit.", file=sys.stderr)
541
+ return True
542
+
543
+ commit_msg = f"chore(task): archive {task_name}"
544
+ rc, _, err = run_git(["commit", "-m", commit_msg], cwd=repo_root)
545
+ if rc == 0:
546
+ print(f"[OK] Auto-committed: {commit_msg}", file=sys.stderr)
547
+ return True
548
+ else:
549
+ print(f"[WARN] Auto-commit failed: {err.strip()}", file=sys.stderr)
550
+ return not source_was_tracked
551
+
552
+
553
+ # =============================================================================
554
+ # Command: add-subtask
555
+ # =============================================================================
556
+
557
+ def cmd_add_subtask(args: argparse.Namespace) -> int:
558
+ """Link a child task to a parent task."""
559
+ repo_root = get_repo_root()
560
+
561
+ parent_dir = resolve_task_dir(args.parent_dir, repo_root)
562
+ child_dir = resolve_task_dir(args.child_dir, repo_root)
563
+
564
+ parent_json_path = parent_dir / FILE_TASK_JSON
565
+ child_json_path = child_dir / FILE_TASK_JSON
566
+
567
+ if not parent_json_path.is_file():
568
+ print(colored(f"Error: Parent task.json not found: {args.parent_dir}", Colors.RED), file=sys.stderr)
569
+ return 1
570
+
571
+ if not child_json_path.is_file():
572
+ print(colored(f"Error: Child task.json not found: {args.child_dir}", Colors.RED), file=sys.stderr)
573
+ return 1
574
+
575
+ parent_data = read_json(parent_json_path)
576
+ child_data = read_json(child_json_path)
577
+
578
+ if not parent_data or not child_data:
579
+ print(colored("Error: Failed to read task.json", Colors.RED), file=sys.stderr)
580
+ return 1
581
+
582
+ # Check if child already has a parent
583
+ existing_parent = child_data.get("parent")
584
+ if existing_parent:
585
+ print(colored(f"Error: Child task already has a parent: {existing_parent}", Colors.RED), file=sys.stderr)
586
+ return 1
587
+
588
+ # Add child to parent's children list
589
+ parent_children = parent_data.get("children", [])
590
+ child_dir_name = child_dir.name
591
+ if child_dir_name not in parent_children:
592
+ parent_children.append(child_dir_name)
593
+ parent_data["children"] = parent_children
594
+
595
+ # Set parent in child's task.json
596
+ child_data["parent"] = parent_dir.name
597
+
598
+ # Write both
599
+ write_json(parent_json_path, parent_data)
600
+ write_json(child_json_path, child_data)
601
+
602
+ print(colored(f"Linked: {child_dir.name} -> {parent_dir.name}", Colors.GREEN), file=sys.stderr)
603
+ return 0
604
+
605
+
606
+ # =============================================================================
607
+ # Command: remove-subtask
608
+ # =============================================================================
609
+
610
+ def cmd_remove_subtask(args: argparse.Namespace) -> int:
611
+ """Unlink a child task from a parent task."""
612
+ repo_root = get_repo_root()
613
+
614
+ parent_dir = resolve_task_dir(args.parent_dir, repo_root)
615
+ child_dir = resolve_task_dir(args.child_dir, repo_root)
616
+
617
+ parent_json_path = parent_dir / FILE_TASK_JSON
618
+ child_json_path = child_dir / FILE_TASK_JSON
619
+
620
+ if not parent_json_path.is_file():
621
+ print(colored(f"Error: Parent task.json not found: {args.parent_dir}", Colors.RED), file=sys.stderr)
622
+ return 1
623
+
624
+ if not child_json_path.is_file():
625
+ print(colored(f"Error: Child task.json not found: {args.child_dir}", Colors.RED), file=sys.stderr)
626
+ return 1
627
+
628
+ parent_data = read_json(parent_json_path)
629
+ child_data = read_json(child_json_path)
630
+
631
+ if not parent_data or not child_data:
632
+ print(colored("Error: Failed to read task.json", Colors.RED), file=sys.stderr)
633
+ return 1
634
+
635
+ # Remove child from parent's children list
636
+ parent_children = parent_data.get("children", [])
637
+ child_dir_name = child_dir.name
638
+ if child_dir_name in parent_children:
639
+ parent_children.remove(child_dir_name)
640
+ parent_data["children"] = parent_children
641
+
642
+ # Clear parent in child's task.json
643
+ child_data["parent"] = None
644
+
645
+ # Write both
646
+ write_json(parent_json_path, parent_data)
647
+ write_json(child_json_path, child_data)
648
+
649
+ print(colored(f"Unlinked: {child_dir.name} from {parent_dir.name}", Colors.GREEN), file=sys.stderr)
650
+ return 0
651
+
652
+
653
+ # =============================================================================
654
+ # Command: set-branch
655
+ # =============================================================================
656
+
657
+ def cmd_set_branch(args: argparse.Namespace) -> int:
658
+ """Set git branch for task."""
659
+ repo_root = get_repo_root()
660
+ target_dir = resolve_task_dir(args.dir, repo_root)
661
+ branch = args.branch
662
+
663
+ if not branch:
664
+ print(colored("Error: Missing arguments", Colors.RED))
665
+ print("Usage: python3 task.py set-branch <task-dir> <branch-name>")
666
+ return 1
667
+
668
+ task_json = target_dir / FILE_TASK_JSON
669
+ if not task_json.is_file():
670
+ print(colored(f"Error: task.json not found at {target_dir}", Colors.RED))
671
+ return 1
672
+
673
+ data = read_json(task_json)
674
+ if not data:
675
+ return 1
676
+
677
+ data["branch"] = branch
678
+ write_json(task_json, data)
679
+
680
+ print(colored(f"✓ Branch set to: {branch}", Colors.GREEN))
681
+ return 0
682
+
683
+
684
+ # =============================================================================
685
+ # Command: set-base-branch
686
+ # =============================================================================
687
+
688
+ def cmd_set_base_branch(args: argparse.Namespace) -> int:
689
+ """Set the base branch (PR target) for task."""
690
+ repo_root = get_repo_root()
691
+ target_dir = resolve_task_dir(args.dir, repo_root)
692
+ base_branch = args.base_branch
693
+
694
+ if not base_branch:
695
+ print(colored("Error: Missing arguments", Colors.RED))
696
+ print("Usage: python3 task.py set-base-branch <task-dir> <base-branch>")
697
+ print("Example: python3 task.py set-base-branch <dir> develop")
698
+ print()
699
+ print("This sets the target branch for PR (the branch your feature will merge into).")
700
+ return 1
701
+
702
+ task_json = target_dir / FILE_TASK_JSON
703
+ if not task_json.is_file():
704
+ print(colored(f"Error: task.json not found at {target_dir}", Colors.RED))
705
+ return 1
706
+
707
+ data = read_json(task_json)
708
+ if not data:
709
+ return 1
710
+
711
+ data["base_branch"] = base_branch
712
+ write_json(task_json, data)
713
+
714
+ print(colored(f"✓ Base branch set to: {base_branch}", Colors.GREEN))
715
+ print(f" PR will target: {base_branch}")
716
+ return 0
717
+
718
+
719
+ # =============================================================================
720
+ # Command: set-scope
721
+ # =============================================================================
722
+
723
+ def cmd_set_scope(args: argparse.Namespace) -> int:
724
+ """Set scope for PR title."""
725
+ repo_root = get_repo_root()
726
+ target_dir = resolve_task_dir(args.dir, repo_root)
727
+ scope = args.scope
728
+
729
+ if not scope:
730
+ print(colored("Error: Missing arguments", Colors.RED))
731
+ print("Usage: python3 task.py set-scope <task-dir> <scope>")
732
+ return 1
733
+
734
+ task_json = target_dir / FILE_TASK_JSON
735
+ if not task_json.is_file():
736
+ print(colored(f"Error: task.json not found at {target_dir}", Colors.RED))
737
+ return 1
738
+
739
+ data = read_json(task_json)
740
+ if not data:
741
+ return 1
742
+
743
+ data["scope"] = scope
744
+ write_json(task_json, data)
745
+
746
+ print(colored(f"✓ Scope set to: {scope}", Colors.GREEN))
747
+ return 0