@blulotus/trellis 0.7.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 (821) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +149 -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 +276 -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 +93 -0
  13. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  14. package/dist/commands/channel/adapters/codex.js +573 -0
  15. package/dist/commands/channel/adapters/codex.js.map +1 -0
  16. package/dist/commands/channel/adapters/index.d.ts +86 -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 +158 -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 +311 -0
  31. package/dist/commands/channel/context-loader.js.map +1 -0
  32. package/dist/commands/channel/context-trust.d.ts +31 -0
  33. package/dist/commands/channel/context-trust.d.ts.map +1 -0
  34. package/dist/commands/channel/context-trust.js +139 -0
  35. package/dist/commands/channel/context-trust.js.map +1 -0
  36. package/dist/commands/channel/context.d.ts +16 -0
  37. package/dist/commands/channel/context.d.ts.map +1 -0
  38. package/dist/commands/channel/context.js +83 -0
  39. package/dist/commands/channel/context.js.map +1 -0
  40. package/dist/commands/channel/create.d.ts +27 -0
  41. package/dist/commands/channel/create.d.ts.map +1 -0
  42. package/dist/commands/channel/create.js +39 -0
  43. package/dist/commands/channel/create.js.map +1 -0
  44. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  45. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  46. package/dist/commands/channel/dev-parse-trace.js +70 -0
  47. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  48. package/dist/commands/channel/guard.d.ts +150 -0
  49. package/dist/commands/channel/guard.d.ts.map +1 -0
  50. package/dist/commands/channel/guard.js +479 -0
  51. package/dist/commands/channel/guard.js.map +1 -0
  52. package/dist/commands/channel/index.d.ts +3 -0
  53. package/dist/commands/channel/index.d.ts.map +1 -0
  54. package/dist/commands/channel/index.js +535 -0
  55. package/dist/commands/channel/index.js.map +1 -0
  56. package/dist/commands/channel/interrupt.d.ts +10 -0
  57. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  58. package/dist/commands/channel/interrupt.js +22 -0
  59. package/dist/commands/channel/interrupt.js.map +1 -0
  60. package/dist/commands/channel/kill.d.ts +7 -0
  61. package/dist/commands/channel/kill.d.ts.map +1 -0
  62. package/dist/commands/channel/kill.js +121 -0
  63. package/dist/commands/channel/kill.js.map +1 -0
  64. package/dist/commands/channel/list.d.ts +17 -0
  65. package/dist/commands/channel/list.d.ts.map +1 -0
  66. package/dist/commands/channel/list.js +233 -0
  67. package/dist/commands/channel/list.js.map +1 -0
  68. package/dist/commands/channel/messages.d.ts +15 -0
  69. package/dist/commands/channel/messages.d.ts.map +1 -0
  70. package/dist/commands/channel/messages.js +245 -0
  71. package/dist/commands/channel/messages.js.map +1 -0
  72. package/dist/commands/channel/rm.d.ts +27 -0
  73. package/dist/commands/channel/rm.d.ts.map +1 -0
  74. package/dist/commands/channel/rm.js +216 -0
  75. package/dist/commands/channel/rm.js.map +1 -0
  76. package/dist/commands/channel/run.d.ts +30 -0
  77. package/dist/commands/channel/run.d.ts.map +1 -0
  78. package/dist/commands/channel/run.js +130 -0
  79. package/dist/commands/channel/run.js.map +1 -0
  80. package/dist/commands/channel/send.d.ts +11 -0
  81. package/dist/commands/channel/send.d.ts.map +1 -0
  82. package/dist/commands/channel/send.js +24 -0
  83. package/dist/commands/channel/send.js.map +1 -0
  84. package/dist/commands/channel/spawn.d.ts +43 -0
  85. package/dist/commands/channel/spawn.d.ts.map +1 -0
  86. package/dist/commands/channel/spawn.js +247 -0
  87. package/dist/commands/channel/spawn.js.map +1 -0
  88. package/dist/commands/channel/store/events.d.ts +39 -0
  89. package/dist/commands/channel/store/events.d.ts.map +1 -0
  90. package/dist/commands/channel/store/events.js +87 -0
  91. package/dist/commands/channel/store/events.js.map +1 -0
  92. package/dist/commands/channel/store/filter.d.ts +3 -0
  93. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  94. package/dist/commands/channel/store/filter.js +2 -0
  95. package/dist/commands/channel/store/filter.js.map +1 -0
  96. package/dist/commands/channel/store/lock.d.ts +23 -0
  97. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  98. package/dist/commands/channel/store/lock.js +99 -0
  99. package/dist/commands/channel/store/lock.js.map +1 -0
  100. package/dist/commands/channel/store/paths.d.ts +77 -0
  101. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  102. package/dist/commands/channel/store/paths.js +272 -0
  103. package/dist/commands/channel/store/paths.js.map +1 -0
  104. package/dist/commands/channel/store/schema.d.ts +27 -0
  105. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  106. package/dist/commands/channel/store/schema.js +34 -0
  107. package/dist/commands/channel/store/schema.js.map +1 -0
  108. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  109. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  110. package/dist/commands/channel/store/thread-state.js +16 -0
  111. package/dist/commands/channel/store/thread-state.js.map +1 -0
  112. package/dist/commands/channel/store/watch.d.ts +19 -0
  113. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  114. package/dist/commands/channel/store/watch.js +146 -0
  115. package/dist/commands/channel/store/watch.js.map +1 -0
  116. package/dist/commands/channel/supervisor/idle.d.ts +45 -0
  117. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  118. package/dist/commands/channel/supervisor/idle.js +70 -0
  119. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  120. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  121. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  122. package/dist/commands/channel/supervisor/inbox.js +160 -0
  123. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  124. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  125. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  126. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  127. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  128. package/dist/commands/channel/supervisor/stdout.d.ts +53 -0
  129. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  130. package/dist/commands/channel/supervisor/stdout.js +168 -0
  131. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  132. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  133. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  134. package/dist/commands/channel/supervisor/turns.js +45 -0
  135. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  136. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  137. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  138. package/dist/commands/channel/supervisor/warning.js +77 -0
  139. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  140. package/dist/commands/channel/supervisor.d.ts +75 -0
  141. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  142. package/dist/commands/channel/supervisor.js +397 -0
  143. package/dist/commands/channel/supervisor.js.map +1 -0
  144. package/dist/commands/channel/text-body.d.ts +13 -0
  145. package/dist/commands/channel/text-body.d.ts.map +1 -0
  146. package/dist/commands/channel/text-body.js +47 -0
  147. package/dist/commands/channel/text-body.js.map +1 -0
  148. package/dist/commands/channel/threads.d.ts +39 -0
  149. package/dist/commands/channel/threads.d.ts.map +1 -0
  150. package/dist/commands/channel/threads.js +106 -0
  151. package/dist/commands/channel/threads.js.map +1 -0
  152. package/dist/commands/channel/title.d.ts +12 -0
  153. package/dist/commands/channel/title.d.ts.map +1 -0
  154. package/dist/commands/channel/title.js +24 -0
  155. package/dist/commands/channel/title.js.map +1 -0
  156. package/dist/commands/channel/wait.d.ts +17 -0
  157. package/dist/commands/channel/wait.d.ts.map +1 -0
  158. package/dist/commands/channel/wait.js +75 -0
  159. package/dist/commands/channel/wait.js.map +1 -0
  160. package/dist/commands/init.d.ts +71 -0
  161. package/dist/commands/init.d.ts.map +1 -0
  162. package/dist/commands/init.js +1603 -0
  163. package/dist/commands/init.js.map +1 -0
  164. package/dist/commands/mem.d.ts +30 -0
  165. package/dist/commands/mem.d.ts.map +1 -0
  166. package/dist/commands/mem.js +447 -0
  167. package/dist/commands/mem.js.map +1 -0
  168. package/dist/commands/uninstall.d.ts +36 -0
  169. package/dist/commands/uninstall.d.ts.map +1 -0
  170. package/dist/commands/uninstall.js +410 -0
  171. package/dist/commands/uninstall.js.map +1 -0
  172. package/dist/commands/update.d.ts +111 -0
  173. package/dist/commands/update.d.ts.map +1 -0
  174. package/dist/commands/update.js +2152 -0
  175. package/dist/commands/update.js.map +1 -0
  176. package/dist/commands/upgrade.d.ts +28 -0
  177. package/dist/commands/upgrade.d.ts.map +1 -0
  178. package/dist/commands/upgrade.js +84 -0
  179. package/dist/commands/upgrade.js.map +1 -0
  180. package/dist/commands/workflow.d.ts +52 -0
  181. package/dist/commands/workflow.d.ts.map +1 -0
  182. package/dist/commands/workflow.js +454 -0
  183. package/dist/commands/workflow.js.map +1 -0
  184. package/dist/configurators/antigravity.d.ts +7 -0
  185. package/dist/configurators/antigravity.d.ts.map +1 -0
  186. package/dist/configurators/antigravity.js +11 -0
  187. package/dist/configurators/antigravity.js.map +1 -0
  188. package/dist/configurators/claude.d.ts +23 -0
  189. package/dist/configurators/claude.d.ts.map +1 -0
  190. package/dist/configurators/claude.js +123 -0
  191. package/dist/configurators/claude.js.map +1 -0
  192. package/dist/configurators/codebuddy.d.ts +10 -0
  193. package/dist/configurators/codebuddy.d.ts.map +1 -0
  194. package/dist/configurators/codebuddy.js +24 -0
  195. package/dist/configurators/codebuddy.js.map +1 -0
  196. package/dist/configurators/codex.d.ts +57 -0
  197. package/dist/configurators/codex.d.ts.map +1 -0
  198. package/dist/configurators/codex.js +170 -0
  199. package/dist/configurators/codex.js.map +1 -0
  200. package/dist/configurators/copilot.d.ts +14 -0
  201. package/dist/configurators/copilot.d.ts.map +1 -0
  202. package/dist/configurators/copilot.js +46 -0
  203. package/dist/configurators/copilot.js.map +1 -0
  204. package/dist/configurators/cursor.d.ts +10 -0
  205. package/dist/configurators/cursor.d.ts.map +1 -0
  206. package/dist/configurators/cursor.js +23 -0
  207. package/dist/configurators/cursor.js.map +1 -0
  208. package/dist/configurators/devin.d.ts +8 -0
  209. package/dist/configurators/devin.d.ts.map +1 -0
  210. package/dist/configurators/devin.js +12 -0
  211. package/dist/configurators/devin.js.map +1 -0
  212. package/dist/configurators/droid.d.ts +10 -0
  213. package/dist/configurators/droid.d.ts.map +1 -0
  214. package/dist/configurators/droid.js +24 -0
  215. package/dist/configurators/droid.js.map +1 -0
  216. package/dist/configurators/dsh.d.ts +26 -0
  217. package/dist/configurators/dsh.d.ts.map +1 -0
  218. package/dist/configurators/dsh.js +76 -0
  219. package/dist/configurators/dsh.js.map +1 -0
  220. package/dist/configurators/gemini.d.ts +18 -0
  221. package/dist/configurators/gemini.d.ts.map +1 -0
  222. package/dist/configurators/gemini.js +39 -0
  223. package/dist/configurators/gemini.js.map +1 -0
  224. package/dist/configurators/grok.d.ts +17 -0
  225. package/dist/configurators/grok.d.ts.map +1 -0
  226. package/dist/configurators/grok.js +38 -0
  227. package/dist/configurators/grok.js.map +1 -0
  228. package/dist/configurators/index.d.ts +68 -0
  229. package/dist/configurators/index.d.ts.map +1 -0
  230. package/dist/configurators/index.js +191 -0
  231. package/dist/configurators/index.js.map +1 -0
  232. package/dist/configurators/kilo.d.ts +7 -0
  233. package/dist/configurators/kilo.d.ts.map +1 -0
  234. package/dist/configurators/kilo.js +11 -0
  235. package/dist/configurators/kilo.js.map +1 -0
  236. package/dist/configurators/kimi.d.ts +26 -0
  237. package/dist/configurators/kimi.d.ts.map +1 -0
  238. package/dist/configurators/kimi.js +74 -0
  239. package/dist/configurators/kimi.js.map +1 -0
  240. package/dist/configurators/kiro.d.ts +11 -0
  241. package/dist/configurators/kiro.d.ts.map +1 -0
  242. package/dist/configurators/kiro.js +30 -0
  243. package/dist/configurators/kiro.js.map +1 -0
  244. package/dist/configurators/omp.d.ts +6 -0
  245. package/dist/configurators/omp.d.ts.map +1 -0
  246. package/dist/configurators/omp.js +28 -0
  247. package/dist/configurators/omp.js.map +1 -0
  248. package/dist/configurators/opencode.d.ts +5 -0
  249. package/dist/configurators/opencode.d.ts.map +1 -0
  250. package/dist/configurators/opencode.js +84 -0
  251. package/dist/configurators/opencode.js.map +1 -0
  252. package/dist/configurators/pi.d.ts +5 -0
  253. package/dist/configurators/pi.d.ts.map +1 -0
  254. package/dist/configurators/pi.js +39 -0
  255. package/dist/configurators/pi.js.map +1 -0
  256. package/dist/configurators/qoder.d.ts +12 -0
  257. package/dist/configurators/qoder.d.ts.map +1 -0
  258. package/dist/configurators/qoder.js +30 -0
  259. package/dist/configurators/qoder.js.map +1 -0
  260. package/dist/configurators/reasonix.d.ts +17 -0
  261. package/dist/configurators/reasonix.d.ts.map +1 -0
  262. package/dist/configurators/reasonix.js +37 -0
  263. package/dist/configurators/reasonix.js.map +1 -0
  264. package/dist/configurators/shared.d.ts +187 -0
  265. package/dist/configurators/shared.d.ts.map +1 -0
  266. package/dist/configurators/shared.js +590 -0
  267. package/dist/configurators/shared.js.map +1 -0
  268. package/dist/configurators/snow.d.ts +25 -0
  269. package/dist/configurators/snow.d.ts.map +1 -0
  270. package/dist/configurators/snow.js +69 -0
  271. package/dist/configurators/snow.js.map +1 -0
  272. package/dist/configurators/trae.d.ts +16 -0
  273. package/dist/configurators/trae.d.ts.map +1 -0
  274. package/dist/configurators/trae.js +34 -0
  275. package/dist/configurators/trae.js.map +1 -0
  276. package/dist/configurators/workflow.d.ts +51 -0
  277. package/dist/configurators/workflow.d.ts.map +1 -0
  278. package/dist/configurators/workflow.js +210 -0
  279. package/dist/configurators/workflow.js.map +1 -0
  280. package/dist/configurators/zcode.d.ts +23 -0
  281. package/dist/configurators/zcode.d.ts.map +1 -0
  282. package/dist/configurators/zcode.js +63 -0
  283. package/dist/configurators/zcode.js.map +1 -0
  284. package/dist/constants/paths.d.ts +74 -0
  285. package/dist/constants/paths.d.ts.map +1 -0
  286. package/dist/constants/paths.js +83 -0
  287. package/dist/constants/paths.js.map +1 -0
  288. package/dist/constants/version.d.ts +9 -0
  289. package/dist/constants/version.d.ts.map +1 -0
  290. package/dist/constants/version.js +15 -0
  291. package/dist/constants/version.js.map +1 -0
  292. package/dist/index.d.ts +9 -0
  293. package/dist/index.d.ts.map +1 -0
  294. package/dist/index.js +9 -0
  295. package/dist/index.js.map +1 -0
  296. package/dist/migrations/index.d.ts +62 -0
  297. package/dist/migrations/index.d.ts.map +1 -0
  298. package/dist/migrations/index.js +187 -0
  299. package/dist/migrations/index.js.map +1 -0
  300. package/dist/migrations/manifests/0.1.9.json +30 -0
  301. package/dist/migrations/manifests/0.2.0.json +49 -0
  302. package/dist/migrations/manifests/0.2.12.json +9 -0
  303. package/dist/migrations/manifests/0.2.13.json +9 -0
  304. package/dist/migrations/manifests/0.2.14.json +175 -0
  305. package/dist/migrations/manifests/0.2.15.json +33 -0
  306. package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
  307. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  308. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  309. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  310. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  311. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  312. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  313. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  314. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  315. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  316. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  317. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  318. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  319. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  320. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  321. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  322. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  323. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  324. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  325. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  326. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  327. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  328. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  329. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  330. package/dist/migrations/manifests/0.3.0.json +11 -0
  331. package/dist/migrations/manifests/0.3.1.json +9 -0
  332. package/dist/migrations/manifests/0.3.10.json +9 -0
  333. package/dist/migrations/manifests/0.3.2.json +9 -0
  334. package/dist/migrations/manifests/0.3.3.json +9 -0
  335. package/dist/migrations/manifests/0.3.4.json +21 -0
  336. package/dist/migrations/manifests/0.3.5.json +9 -0
  337. package/dist/migrations/manifests/0.3.6.json +9 -0
  338. package/dist/migrations/manifests/0.3.7.json +9 -0
  339. package/dist/migrations/manifests/0.3.8.json +9 -0
  340. package/dist/migrations/manifests/0.3.9.json +9 -0
  341. package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
  342. package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
  343. package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
  344. package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
  345. package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
  346. package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
  347. package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
  348. package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
  349. package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
  350. package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
  351. package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
  352. package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
  353. package/dist/migrations/manifests/0.4.0.json +9 -0
  354. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  355. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  356. package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
  357. package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
  358. package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
  359. package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
  360. package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
  361. package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
  362. package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
  363. package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
  364. package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
  365. package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
  366. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  367. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  368. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  369. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  370. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  371. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  372. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  373. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  374. package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
  375. package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
  376. package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
  377. package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
  378. package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
  379. package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
  380. package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
  381. package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
  382. package/dist/migrations/manifests/0.5.0.json +9 -0
  383. package/dist/migrations/manifests/0.5.1.json +9 -0
  384. package/dist/migrations/manifests/0.5.10.json +9 -0
  385. package/dist/migrations/manifests/0.5.11.json +16 -0
  386. package/dist/migrations/manifests/0.5.12.json +9 -0
  387. package/dist/migrations/manifests/0.5.13.json +9 -0
  388. package/dist/migrations/manifests/0.5.14.json +9 -0
  389. package/dist/migrations/manifests/0.5.15.json +9 -0
  390. package/dist/migrations/manifests/0.5.16.json +9 -0
  391. package/dist/migrations/manifests/0.5.17.json +9 -0
  392. package/dist/migrations/manifests/0.5.18.json +9 -0
  393. package/dist/migrations/manifests/0.5.19.json +9 -0
  394. package/dist/migrations/manifests/0.5.2.json +9 -0
  395. package/dist/migrations/manifests/0.5.3.json +9 -0
  396. package/dist/migrations/manifests/0.5.4.json +9 -0
  397. package/dist/migrations/manifests/0.5.5.json +9 -0
  398. package/dist/migrations/manifests/0.5.6.json +9 -0
  399. package/dist/migrations/manifests/0.5.7.json +16 -0
  400. package/dist/migrations/manifests/0.5.8.json +9 -0
  401. package/dist/migrations/manifests/0.5.9.json +9 -0
  402. package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
  403. package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
  404. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  405. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  406. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  407. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  408. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  409. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  410. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  411. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  412. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  413. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  414. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  415. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  416. package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
  417. package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
  418. package/dist/migrations/manifests/0.6.0-beta.23.json +88 -0
  419. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  420. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  421. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  422. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  423. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  424. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  425. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  426. package/dist/migrations/manifests/0.6.0-rc.0.json +9 -0
  427. package/dist/migrations/manifests/0.6.0.json +1 -0
  428. package/dist/migrations/manifests/0.6.1.json +9 -0
  429. package/dist/migrations/manifests/0.6.10.json +9 -0
  430. package/dist/migrations/manifests/0.6.11.json +9 -0
  431. package/dist/migrations/manifests/0.6.12.json +9 -0
  432. package/dist/migrations/manifests/0.6.13.json +9 -0
  433. package/dist/migrations/manifests/0.6.14.json +9 -0
  434. package/dist/migrations/manifests/0.6.2.json +9 -0
  435. package/dist/migrations/manifests/0.6.3.json +24 -0
  436. package/dist/migrations/manifests/0.6.4.json +9 -0
  437. package/dist/migrations/manifests/0.6.5.json +9 -0
  438. package/dist/migrations/manifests/0.6.6.json +17 -0
  439. package/dist/migrations/manifests/0.6.7.json +9 -0
  440. package/dist/migrations/manifests/0.6.8.json +17 -0
  441. package/dist/migrations/manifests/0.6.9.json +9 -0
  442. package/dist/migrations/manifests/0.7.0-beta.0.json +9 -0
  443. package/dist/migrations/manifests/0.7.0-beta.1.json +9 -0
  444. package/dist/migrations/manifests/0.7.0-beta.2.json +9 -0
  445. package/dist/migrations/manifests/0.7.0-beta.3.json +9 -0
  446. package/dist/templates/claude/agents/trellis-check.md +115 -0
  447. package/dist/templates/claude/agents/trellis-implement.md +115 -0
  448. package/dist/templates/claude/agents/trellis-research.md +137 -0
  449. package/dist/templates/claude/hooks/statusline.py +332 -0
  450. package/dist/templates/claude/index.d.ts +31 -0
  451. package/dist/templates/claude/index.d.ts.map +1 -0
  452. package/dist/templates/claude/index.js +57 -0
  453. package/dist/templates/claude/index.js.map +1 -0
  454. package/dist/templates/claude/settings.json +95 -0
  455. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  456. package/dist/templates/codebuddy/agents/trellis-implement.md +115 -0
  457. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  458. package/dist/templates/codebuddy/index.d.ts +15 -0
  459. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  460. package/dist/templates/codebuddy/index.js +15 -0
  461. package/dist/templates/codebuddy/index.js.map +1 -0
  462. package/dist/templates/codebuddy/settings.json +69 -0
  463. package/dist/templates/codex/agents/trellis-check.toml +56 -0
  464. package/dist/templates/codex/agents/trellis-implement.toml +37 -0
  465. package/dist/templates/codex/agents/trellis-research.toml +78 -0
  466. package/dist/templates/codex/config.toml +39 -0
  467. package/dist/templates/codex/hooks/session-start.py +568 -0
  468. package/dist/templates/codex/hooks.json +52 -0
  469. package/dist/templates/codex/index.d.ts +35 -0
  470. package/dist/templates/codex/index.d.ts.map +1 -0
  471. package/dist/templates/codex/index.js +67 -0
  472. package/dist/templates/codex/index.js.map +1 -0
  473. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +67 -0
  474. package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +480 -0
  475. package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +233 -0
  476. package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +226 -0
  477. package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +276 -0
  478. package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +128 -0
  479. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +85 -0
  480. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  481. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +56 -0
  482. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  483. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  484. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +123 -0
  485. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  486. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
  487. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +65 -0
  488. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  489. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +159 -0
  490. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  491. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  492. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +69 -0
  493. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  494. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  495. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +130 -0
  496. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  497. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  498. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +84 -0
  499. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +73 -0
  500. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
  501. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +113 -0
  502. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +87 -0
  503. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
  504. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +65 -0
  505. package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
  506. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  507. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  508. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  509. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  510. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  511. package/dist/templates/common/commands/continue.md +56 -0
  512. package/dist/templates/common/commands/finish-work.md +66 -0
  513. package/dist/templates/common/commands/start.md +59 -0
  514. package/dist/templates/common/index.d.ts +48 -0
  515. package/dist/templates/common/index.d.ts.map +1 -0
  516. package/dist/templates/common/index.js +104 -0
  517. package/dist/templates/common/index.js.map +1 -0
  518. package/dist/templates/common/skills/before-dev.md +46 -0
  519. package/dist/templates/common/skills/brainstorm.md +212 -0
  520. package/dist/templates/common/skills/break-loop.md +184 -0
  521. package/dist/templates/common/skills/check.md +106 -0
  522. package/dist/templates/common/skills/tdd.md +142 -0
  523. package/dist/templates/common/skills/update-spec.md +351 -0
  524. package/dist/templates/copilot/copilot-instructions.md +11 -0
  525. package/dist/templates/copilot/hooks/session-start.py +564 -0
  526. package/dist/templates/copilot/hooks.json +19 -0
  527. package/dist/templates/copilot/index.d.ts +28 -0
  528. package/dist/templates/copilot/index.d.ts.map +1 -0
  529. package/dist/templates/copilot/index.js +61 -0
  530. package/dist/templates/copilot/index.js.map +1 -0
  531. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  532. package/dist/templates/copilot/prompts/brainstorm.prompt.md +173 -0
  533. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  534. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +170 -0
  535. package/dist/templates/copilot/prompts/check.prompt.md +110 -0
  536. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  537. package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
  538. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  539. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  540. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  541. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  542. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  543. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  544. package/dist/templates/cursor/agents/trellis-check.md +114 -0
  545. package/dist/templates/cursor/agents/trellis-implement.md +114 -0
  546. package/dist/templates/cursor/agents/trellis-research.md +136 -0
  547. package/dist/templates/cursor/hooks.json +24 -0
  548. package/dist/templates/cursor/index.d.ts +13 -0
  549. package/dist/templates/cursor/index.d.ts.map +1 -0
  550. package/dist/templates/cursor/index.js +13 -0
  551. package/dist/templates/cursor/index.js.map +1 -0
  552. package/dist/templates/droid/droids/trellis-check.md +107 -0
  553. package/dist/templates/droid/droids/trellis-implement.md +107 -0
  554. package/dist/templates/droid/droids/trellis-research.md +137 -0
  555. package/dist/templates/droid/index.d.ts +15 -0
  556. package/dist/templates/droid/index.d.ts.map +1 -0
  557. package/dist/templates/droid/index.js +15 -0
  558. package/dist/templates/droid/index.js.map +1 -0
  559. package/dist/templates/droid/settings.json +69 -0
  560. package/dist/templates/dsh/DSH.md +80 -0
  561. package/dist/templates/dsh/agents/trellis-check.md +99 -0
  562. package/dist/templates/dsh/agents/trellis-implement.md +106 -0
  563. package/dist/templates/dsh/agents/trellis-research.md +134 -0
  564. package/dist/templates/dsh/index.d.ts +22 -0
  565. package/dist/templates/dsh/index.d.ts.map +1 -0
  566. package/dist/templates/dsh/index.js +27 -0
  567. package/dist/templates/dsh/index.js.map +1 -0
  568. package/dist/templates/extract.d.ts +40 -0
  569. package/dist/templates/extract.d.ts.map +1 -0
  570. package/dist/templates/extract.js +106 -0
  571. package/dist/templates/extract.js.map +1 -0
  572. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  573. package/dist/templates/gemini/agents/trellis-implement.md +107 -0
  574. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  575. package/dist/templates/gemini/index.d.ts +13 -0
  576. package/dist/templates/gemini/index.d.ts.map +1 -0
  577. package/dist/templates/gemini/index.js +13 -0
  578. package/dist/templates/gemini/index.js.map +1 -0
  579. package/dist/templates/gemini/settings.json +40 -0
  580. package/dist/templates/grok/agents/trellis-check.md +106 -0
  581. package/dist/templates/grok/agents/trellis-implement.md +121 -0
  582. package/dist/templates/grok/agents/trellis-research.md +146 -0
  583. package/dist/templates/grok/index.d.ts +16 -0
  584. package/dist/templates/grok/index.d.ts.map +1 -0
  585. package/dist/templates/grok/index.js +19 -0
  586. package/dist/templates/grok/index.js.map +1 -0
  587. package/dist/templates/kimi/agents/trellis-check.md +104 -0
  588. package/dist/templates/kimi/agents/trellis-implement.md +120 -0
  589. package/dist/templates/kimi/agents/trellis-research.md +144 -0
  590. package/dist/templates/kimi/index.d.ts +20 -0
  591. package/dist/templates/kimi/index.d.ts.map +1 -0
  592. package/dist/templates/kimi/index.js +23 -0
  593. package/dist/templates/kimi/index.js.map +1 -0
  594. package/dist/templates/kiro/agents/trellis-check.json +26 -0
  595. package/dist/templates/kiro/agents/trellis-implement.json +26 -0
  596. package/dist/templates/kiro/agents/trellis-research.json +30 -0
  597. package/dist/templates/kiro/agents/trellis.json +34 -0
  598. package/dist/templates/kiro/hooks/trellis-workflow-state.kiro.hook +14 -0
  599. package/dist/templates/kiro/index.d.ts +32 -0
  600. package/dist/templates/kiro/index.d.ts.map +1 -0
  601. package/dist/templates/kiro/index.js +28 -0
  602. package/dist/templates/kiro/index.js.map +1 -0
  603. package/dist/templates/markdown/agents.md +21 -0
  604. package/dist/templates/markdown/gitignore.txt +15 -0
  605. package/dist/templates/markdown/index.d.ts +27 -0
  606. package/dist/templates/markdown/index.d.ts.map +1 -0
  607. package/dist/templates/markdown/index.js +52 -0
  608. package/dist/templates/markdown/index.js.map +1 -0
  609. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  610. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  611. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  612. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  613. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  614. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  615. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  616. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  617. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  618. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  619. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  620. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  621. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  622. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  623. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +327 -0
  624. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -0
  625. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  626. package/dist/templates/markdown/workspace-index.md +125 -0
  627. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  628. package/dist/templates/omp/agents/trellis-check.md +41 -0
  629. package/dist/templates/omp/agents/trellis-implement.md +55 -0
  630. package/dist/templates/omp/agents/trellis-research.md +30 -0
  631. package/dist/templates/omp/extensions/trellis/index.ts.txt +592 -0
  632. package/dist/templates/omp/index.d.ts +4 -0
  633. package/dist/templates/omp/index.d.ts.map +1 -0
  634. package/dist/templates/omp/index.js +9 -0
  635. package/dist/templates/omp/index.js.map +1 -0
  636. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  637. package/dist/templates/opencode/agents/trellis-implement.md +123 -0
  638. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  639. package/dist/templates/opencode/lib/context-visibility.js +86 -0
  640. package/dist/templates/opencode/lib/session-utils.js +526 -0
  641. package/dist/templates/opencode/lib/trellis-context.js +627 -0
  642. package/dist/templates/opencode/package.json +5 -0
  643. package/dist/templates/opencode/plugins/inject-spec-context.js +121 -0
  644. package/dist/templates/opencode/plugins/inject-subagent-context.js +569 -0
  645. package/dist/templates/opencode/plugins/inject-workflow-state.js +340 -0
  646. package/dist/templates/opencode/plugins/session-start.js +74 -0
  647. package/dist/templates/pi/agents/trellis-check.md +37 -0
  648. package/dist/templates/pi/agents/trellis-implement.md +52 -0
  649. package/dist/templates/pi/agents/trellis-research.md +25 -0
  650. package/dist/templates/pi/extensions/trellis/index.ts.txt +2033 -0
  651. package/dist/templates/pi/index.d.ts +5 -0
  652. package/dist/templates/pi/index.d.ts.map +1 -0
  653. package/dist/templates/pi/index.js +12 -0
  654. package/dist/templates/pi/index.js.map +1 -0
  655. package/dist/templates/pi/settings.json +9 -0
  656. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  657. package/dist/templates/qoder/agents/trellis-implement.md +108 -0
  658. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  659. package/dist/templates/qoder/index.d.ts +15 -0
  660. package/dist/templates/qoder/index.d.ts.map +1 -0
  661. package/dist/templates/qoder/index.js +15 -0
  662. package/dist/templates/qoder/index.js.map +1 -0
  663. package/dist/templates/qoder/settings.json +59 -0
  664. package/dist/templates/reasonix/agents/trellis-check.md +36 -0
  665. package/dist/templates/reasonix/agents/trellis-implement.md +51 -0
  666. package/dist/templates/reasonix/index.d.ts +13 -0
  667. package/dist/templates/reasonix/index.d.ts.map +1 -0
  668. package/dist/templates/reasonix/index.js +16 -0
  669. package/dist/templates/reasonix/index.js.map +1 -0
  670. package/dist/templates/shared-hooks/index.d.ts +83 -0
  671. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  672. package/dist/templates/shared-hooks/index.js +152 -0
  673. package/dist/templates/shared-hooks/index.js.map +1 -0
  674. package/dist/templates/shared-hooks/inject-shell-session-context.py +292 -0
  675. package/dist/templates/shared-hooks/inject-spec-context.py +844 -0
  676. package/dist/templates/shared-hooks/inject-subagent-context.py +1175 -0
  677. package/dist/templates/shared-hooks/inject-workflow-state.py +501 -0
  678. package/dist/templates/shared-hooks/session-start.py +969 -0
  679. package/dist/templates/snow/SNOW.md +86 -0
  680. package/dist/templates/snow/agents/trellis-check.md +136 -0
  681. package/dist/templates/snow/agents/trellis-implement.md +158 -0
  682. package/dist/templates/snow/agents/trellis-research.md +114 -0
  683. package/dist/templates/snow/hooks/beforeSubAgentStart.json +15 -0
  684. package/dist/templates/snow/hooks/onSessionStart.json +15 -0
  685. package/dist/templates/snow/hooks/onUserMessage.json +15 -0
  686. package/dist/templates/snow/hooks/write-trellis-context.py +644 -0
  687. package/dist/templates/snow/index.d.ts +26 -0
  688. package/dist/templates/snow/index.d.ts.map +1 -0
  689. package/dist/templates/snow/index.js +36 -0
  690. package/dist/templates/snow/index.js.map +1 -0
  691. package/dist/templates/template-utils.d.ts +26 -0
  692. package/dist/templates/template-utils.d.ts.map +1 -0
  693. package/dist/templates/template-utils.js +64 -0
  694. package/dist/templates/template-utils.js.map +1 -0
  695. package/dist/templates/trae/agents/trellis-check.md +108 -0
  696. package/dist/templates/trae/agents/trellis-implement.md +108 -0
  697. package/dist/templates/trae/agents/trellis-research.md +137 -0
  698. package/dist/templates/trae/hooks.json +39 -0
  699. package/dist/templates/trae/index.d.ts +15 -0
  700. package/dist/templates/trae/index.d.ts.map +1 -0
  701. package/dist/templates/trae/index.js +15 -0
  702. package/dist/templates/trae/index.js.map +1 -0
  703. package/dist/templates/trellis/agents/check.md +70 -0
  704. package/dist/templates/trellis/agents/implement.md +81 -0
  705. package/dist/templates/trellis/config.yaml +205 -0
  706. package/dist/templates/trellis/gitattributes.txt +9 -0
  707. package/dist/templates/trellis/gitignore.txt +32 -0
  708. package/dist/templates/trellis/index.d.ts +70 -0
  709. package/dist/templates/trellis/index.d.ts.map +1 -0
  710. package/dist/templates/trellis/index.js +127 -0
  711. package/dist/templates/trellis/index.js.map +1 -0
  712. package/dist/templates/trellis/scripts/__init__.py +5 -0
  713. package/dist/templates/trellis/scripts/add_session.py +681 -0
  714. package/dist/templates/trellis/scripts/common/__init__.py +92 -0
  715. package/dist/templates/trellis/scripts/common/active_task.py +787 -0
  716. package/dist/templates/trellis/scripts/common/cli_adapter.py +982 -0
  717. package/dist/templates/trellis/scripts/common/config.py +587 -0
  718. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  719. package/dist/templates/trellis/scripts/common/git.py +74 -0
  720. package/dist/templates/trellis/scripts/common/git_context.py +138 -0
  721. package/dist/templates/trellis/scripts/common/io.py +61 -0
  722. package/dist/templates/trellis/scripts/common/log.py +45 -0
  723. package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
  724. package/dist/templates/trellis/scripts/common/paths.py +508 -0
  725. package/dist/templates/trellis/scripts/common/safe_commit.py +315 -0
  726. package/dist/templates/trellis/scripts/common/session_context.py +892 -0
  727. package/dist/templates/trellis/scripts/common/spec_inject.py +439 -0
  728. package/dist/templates/trellis/scripts/common/spec_match.py +395 -0
  729. package/dist/templates/trellis/scripts/common/task_context.py +372 -0
  730. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  731. package/dist/templates/trellis/scripts/common/task_store.py +1016 -0
  732. package/dist/templates/trellis/scripts/common/task_utils.py +309 -0
  733. package/dist/templates/trellis/scripts/common/tasks.py +112 -0
  734. package/dist/templates/trellis/scripts/common/trellis_config.py +132 -0
  735. package/dist/templates/trellis/scripts/common/types.py +110 -0
  736. package/dist/templates/trellis/scripts/common/workflow_phase.py +243 -0
  737. package/dist/templates/trellis/scripts/common/workflow_selection.py +177 -0
  738. package/dist/templates/trellis/scripts/get_context.py +16 -0
  739. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  740. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  741. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  742. package/dist/templates/trellis/scripts/task.py +694 -0
  743. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  744. package/dist/templates/trellis/workflow.md +777 -0
  745. package/dist/templates/zcode/agents/trellis-check.md +110 -0
  746. package/dist/templates/zcode/agents/trellis-implement.md +116 -0
  747. package/dist/templates/zcode/agents/trellis-research.md +133 -0
  748. package/dist/templates/zcode/config.json +52 -0
  749. package/dist/templates/zcode/index.d.ts +25 -0
  750. package/dist/templates/zcode/index.d.ts.map +1 -0
  751. package/dist/templates/zcode/index.js +29 -0
  752. package/dist/templates/zcode/index.js.map +1 -0
  753. package/dist/types/ai-tools.d.ts +95 -0
  754. package/dist/types/ai-tools.d.ts.map +1 -0
  755. package/dist/types/ai-tools.js +509 -0
  756. package/dist/types/ai-tools.js.map +1 -0
  757. package/dist/types/migration.d.ts +125 -0
  758. package/dist/types/migration.d.ts.map +1 -0
  759. package/dist/types/migration.js +8 -0
  760. package/dist/types/migration.js.map +1 -0
  761. package/dist/utils/agent-refs.d.ts +31 -0
  762. package/dist/utils/agent-refs.d.ts.map +1 -0
  763. package/dist/utils/agent-refs.js +63 -0
  764. package/dist/utils/agent-refs.js.map +1 -0
  765. package/dist/utils/atomic-write.d.ts +12 -0
  766. package/dist/utils/atomic-write.d.ts.map +1 -0
  767. package/dist/utils/atomic-write.js +30 -0
  768. package/dist/utils/atomic-write.js.map +1 -0
  769. package/dist/utils/compare-versions.d.ts +12 -0
  770. package/dist/utils/compare-versions.d.ts.map +1 -0
  771. package/dist/utils/compare-versions.js +86 -0
  772. package/dist/utils/compare-versions.js.map +1 -0
  773. package/dist/utils/cwd-guard.d.ts +38 -0
  774. package/dist/utils/cwd-guard.d.ts.map +1 -0
  775. package/dist/utils/cwd-guard.js +62 -0
  776. package/dist/utils/cwd-guard.js.map +1 -0
  777. package/dist/utils/file-writer.d.ts +36 -0
  778. package/dist/utils/file-writer.d.ts.map +1 -0
  779. package/dist/utils/file-writer.js +204 -0
  780. package/dist/utils/file-writer.js.map +1 -0
  781. package/dist/utils/manifest-prune.d.ts +61 -0
  782. package/dist/utils/manifest-prune.d.ts.map +1 -0
  783. package/dist/utils/manifest-prune.js +136 -0
  784. package/dist/utils/manifest-prune.js.map +1 -0
  785. package/dist/utils/posix.d.ts +13 -0
  786. package/dist/utils/posix.d.ts.map +1 -0
  787. package/dist/utils/posix.js +15 -0
  788. package/dist/utils/posix.js.map +1 -0
  789. package/dist/utils/project-detector.d.ts +46 -0
  790. package/dist/utils/project-detector.d.ts.map +1 -0
  791. package/dist/utils/project-detector.js +666 -0
  792. package/dist/utils/project-detector.js.map +1 -0
  793. package/dist/utils/proxy.d.ts +25 -0
  794. package/dist/utils/proxy.d.ts.map +1 -0
  795. package/dist/utils/proxy.js +60 -0
  796. package/dist/utils/proxy.js.map +1 -0
  797. package/dist/utils/registry-config.d.ts +7 -0
  798. package/dist/utils/registry-config.d.ts.map +1 -0
  799. package/dist/utils/registry-config.js +172 -0
  800. package/dist/utils/registry-config.js.map +1 -0
  801. package/dist/utils/task-json.d.ts +13 -0
  802. package/dist/utils/task-json.d.ts.map +1 -0
  803. package/dist/utils/task-json.js +12 -0
  804. package/dist/utils/task-json.js.map +1 -0
  805. package/dist/utils/template-fetcher.d.ts +161 -0
  806. package/dist/utils/template-fetcher.d.ts.map +1 -0
  807. package/dist/utils/template-fetcher.js +994 -0
  808. package/dist/utils/template-fetcher.js.map +1 -0
  809. package/dist/utils/template-hash.d.ts +123 -0
  810. package/dist/utils/template-hash.d.ts.map +1 -0
  811. package/dist/utils/template-hash.js +335 -0
  812. package/dist/utils/template-hash.js.map +1 -0
  813. package/dist/utils/uninstall-scrubbers.d.ts +67 -0
  814. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  815. package/dist/utils/uninstall-scrubbers.js +361 -0
  816. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  817. package/dist/utils/workflow-resolver.d.ts +86 -0
  818. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  819. package/dist/utils/workflow-resolver.js +265 -0
  820. package/dist/utils/workflow-resolver.js.map +1 -0
  821. package/package.json +89 -0
@@ -0,0 +1,694 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Task Management Script.
5
+
6
+ Usage:
7
+ python3 task.py create "<title>" [--slug <name>] [--assignee <dev>] [--priority P0|P1|P2|P3] [--parent <dir>] [--package <pkg>] [--no-start]
8
+ python3 task.py add-context <dir> <file> <path> [reason] # Add jsonl entry
9
+ python3 task.py validate <dir> # Validate jsonl files
10
+ python3 task.py list-context <dir> # List jsonl entries
11
+ python3 task.py start <dir> # Set active task
12
+ python3 task.py current [--source] [--json] # Show active task
13
+ python3 task.py finish # Clear active task
14
+ python3 task.py workflow <id>|--clear # Set/clear per-task workflow selection
15
+ python3 task.py set-branch <dir> <branch> # Set git branch
16
+ python3 task.py set-base-branch <dir> <branch> # Set PR target branch
17
+ python3 task.py set-scope <dir> <scope> # Set scope for PR title
18
+ python3 task.py set-meta <dir> <key> <value> # Set a task metadata key
19
+ python3 task.py archive <task-dir> # Archive completed task
20
+ python3 task.py list # List active tasks
21
+ python3 task.py list-archive [month] # List archived tasks
22
+ python3 task.py add-subtask <parent-dir> <child-dir> # Link child to parent
23
+ python3 task.py remove-subtask <parent-dir> <child-dir> # Unlink child from parent
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import argparse
29
+ import json
30
+ import sys
31
+
32
+ from common.log import Colors, colored
33
+ from common.paths import (
34
+ DIR_WORKFLOW,
35
+ DIR_TASKS,
36
+ FILE_TASK_JSON,
37
+ get_repo_root,
38
+ get_developer,
39
+ get_tasks_dir,
40
+ get_current_task,
41
+ )
42
+ from common.active_task import (
43
+ clear_active_task,
44
+ resolve_active_task,
45
+ resolve_context_key,
46
+ set_active_task,
47
+ )
48
+ from common.io import read_json, write_json
49
+ from common.task_utils import resolve_task_dir, run_task_hooks
50
+ from common.tasks import iter_active_tasks, children_progress
51
+ from common.workflow_selection import WORKFLOW_ID_RE, workflow_md_for_task
52
+
53
+ # Import command handlers from split modules (also re-exports for plan.py compatibility)
54
+ from common.task_store import (
55
+ cmd_create,
56
+ cmd_archive,
57
+ cmd_set_branch,
58
+ cmd_set_base_branch,
59
+ cmd_set_scope,
60
+ cmd_set_meta,
61
+ cmd_add_subtask,
62
+ cmd_remove_subtask,
63
+ )
64
+ from common.task_context import (
65
+ cmd_add_context,
66
+ cmd_validate,
67
+ cmd_list_context,
68
+ )
69
+
70
+
71
+ # =============================================================================
72
+ # Command: start / finish
73
+ # =============================================================================
74
+
75
+ def cmd_start(args: argparse.Namespace) -> int:
76
+ """Set active task."""
77
+ repo_root = get_repo_root()
78
+ task_input = args.dir
79
+
80
+ if not task_input:
81
+ print(colored("Error: task directory or name required", Colors.RED))
82
+ return 1
83
+
84
+ # Resolve task directory (supports task name, relative path, or absolute path)
85
+ full_path = resolve_task_dir(task_input, repo_root)
86
+
87
+ if not full_path or not full_path.is_dir():
88
+ print(colored(f"Error: Task not found: {task_input}", Colors.RED))
89
+ print("Hint: Use task name (e.g., 'my-task') or full path (e.g., '.trellis/tasks/01-31-my-task')")
90
+ return 1
91
+
92
+ # Convert to relative path for storage. repo_root is resolved because
93
+ # full_path already is (resolve_task_dir only returns paths inside the
94
+ # resolved root), so an unresolved repo_root would mismatch under a
95
+ # symlink (e.g. /tmp on macOS) and reject a perfectly normal task.
96
+ try:
97
+ task_dir = full_path.relative_to(repo_root.resolve()).as_posix()
98
+ except ValueError:
99
+ # resolve_task_dir already refused everything outside the repo, so
100
+ # this is unreachable in practice. Refuse rather than fall back to
101
+ # str(full_path) — that fallback (a lexical relative_to() paired with
102
+ # an absolute-path fallback) is exactly the pattern that let a `..`
103
+ # ref escape into storage before this fix.
104
+ print(colored(f"Error: Task not found: {task_input}", Colors.RED))
105
+ print("Hint: Use task name (e.g., 'my-task') or full path (e.g., '.trellis/tasks/01-31-my-task')")
106
+ return 1
107
+
108
+ task_json_path = full_path / FILE_TASK_JSON
109
+
110
+ if not resolve_context_key():
111
+ # Degraded mode: no session identity available.
112
+ # Hook didn't inject TRELLIS_CONTEXT_ID (common on Windows + Claude Code,
113
+ # --continue resume path, fork distribution, hooks disabled, etc.). Skip
114
+ # per-session pointer write; AI continues based on conversation context.
115
+ print(colored(
116
+ "ℹ Session identity not available; active-task pointer not persisted "
117
+ "this session (degraded mode). AI continues based on conversation context.",
118
+ Colors.YELLOW,
119
+ ))
120
+ print(colored(
121
+ "Hint: run inside an AI IDE/session that exposes session identity, "
122
+ "or set TRELLIS_CONTEXT_ID before running task.py start.",
123
+ Colors.YELLOW,
124
+ ))
125
+
126
+ # Still flip task.json status: planning → in_progress so downstream phases proceed.
127
+ if task_json_path.is_file():
128
+ data = read_json(task_json_path)
129
+ if data and data.get("status") == "planning":
130
+ data["status"] = "in_progress"
131
+ if write_json(task_json_path, data):
132
+ print(colored("✓ Status: planning → in_progress (degraded)", Colors.GREEN))
133
+ run_task_hooks("after_start", task_json_path, repo_root)
134
+ return 0
135
+
136
+ active = set_active_task(task_dir, repo_root)
137
+ if active:
138
+ print(colored(f"✓ Current task set to: {task_dir}", Colors.GREEN))
139
+ print(f"Source: {active.source}")
140
+
141
+ if task_json_path.is_file():
142
+ data = read_json(task_json_path)
143
+ if data and data.get("status") == "planning":
144
+ data["status"] = "in_progress"
145
+ if write_json(task_json_path, data):
146
+ print(colored("✓ Status: planning → in_progress", Colors.GREEN))
147
+
148
+ print()
149
+ print(colored("The hook will now inject context from this task's jsonl files.", Colors.BLUE))
150
+
151
+ run_task_hooks("after_start", task_json_path, repo_root)
152
+ return 0
153
+ else:
154
+ print(colored("Error: Failed to set current task", Colors.RED))
155
+ return 1
156
+
157
+
158
+ def cmd_finish(args: argparse.Namespace) -> int:
159
+ """Clear active task."""
160
+ repo_root = get_repo_root()
161
+ active = clear_active_task(repo_root)
162
+ current = active.task_path
163
+
164
+ if not current:
165
+ print(colored("No current task set", Colors.YELLOW))
166
+ return 0
167
+
168
+ # Resolve task.json path before clearing
169
+ task_json_path = repo_root / current / FILE_TASK_JSON
170
+
171
+ print(colored(f"✓ Cleared current task (was: {current})", Colors.GREEN))
172
+ print(f"Source: {active.source}")
173
+
174
+ if task_json_path.is_file():
175
+ run_task_hooks("after_finish", task_json_path, repo_root)
176
+ return 0
177
+
178
+
179
+ def cmd_current(args: argparse.Namespace) -> int:
180
+ """Show active task."""
181
+ repo_root = get_repo_root()
182
+ active = resolve_active_task(repo_root)
183
+
184
+ if getattr(args, "json", False):
185
+ task_obj = None
186
+ if active.task_path:
187
+ data = read_json(repo_root / active.task_path / FILE_TASK_JSON) or {}
188
+ task_obj = {
189
+ "dir": active.task_path,
190
+ "id": data.get("id") or data.get("name"),
191
+ "title": data.get("title"),
192
+ "status": data.get("status"),
193
+ "parent": data.get("parent"),
194
+ "children": data.get("children", []),
195
+ "branch": data.get("branch"),
196
+ "base_branch": data.get("base_branch"),
197
+ }
198
+ print(json.dumps({
199
+ "current_task": task_obj,
200
+ "source": active.source,
201
+ "stale": active.stale,
202
+ }, ensure_ascii=False))
203
+ return 0 if active.task_path else 1
204
+
205
+ if args.source:
206
+ print(f"Current task: {active.task_path or '(none)'}")
207
+ print(f"Source: {active.source}")
208
+ if active.stale:
209
+ print("State: stale")
210
+ return 0 if active.task_path else 1
211
+
212
+ if active.task_path:
213
+ print(active.task_path)
214
+ return 0
215
+
216
+ return 1
217
+
218
+
219
+ # =============================================================================
220
+ # Command: workflow
221
+ # =============================================================================
222
+
223
+ def cmd_workflow(args: argparse.Namespace) -> int:
224
+ """Set or clear the workflow selection on the current session's active task."""
225
+ repo_root = get_repo_root()
226
+
227
+ if args.clear and args.id:
228
+ print(colored("Error: pass either <id> or --clear, not both", Colors.RED))
229
+ return 1
230
+ if not args.clear and not args.id:
231
+ print(colored("Error: workflow id required (or --clear)", Colors.RED))
232
+ print("Usage: python3 task.py workflow <id> | --clear")
233
+ return 1
234
+
235
+ active = resolve_active_task(repo_root)
236
+ if not active.task_path:
237
+ print(colored("Error: No current task set", Colors.RED))
238
+ print("Hint: run task.py start <dir> first")
239
+ return 1
240
+
241
+ task_dir = repo_root / active.task_path
242
+ task_json_path = task_dir / FILE_TASK_JSON
243
+ if not task_json_path.is_file():
244
+ print(colored(f"Error: task.json not found at {task_dir}", Colors.RED))
245
+ return 1
246
+
247
+ data = read_json(task_json_path)
248
+ if not data:
249
+ print(colored(f"Error: failed to read {task_json_path}", Colors.RED))
250
+ return 1
251
+
252
+ if args.clear:
253
+ if data.pop("workflow", None) is None:
254
+ print(colored("No workflow selection set on this task", Colors.YELLOW))
255
+ else:
256
+ if not write_json(task_json_path, data):
257
+ print(colored("Error: failed to update task.json", Colors.RED))
258
+ return 1
259
+ print(colored("✓ Workflow selection cleared", Colors.GREEN))
260
+ else:
261
+ workflow_id = args.id
262
+ if not WORKFLOW_ID_RE.match(workflow_id):
263
+ print(colored(
264
+ f"Error: invalid workflow id '{workflow_id}' (allowed: letters, digits, '-', '_')",
265
+ Colors.RED,
266
+ ))
267
+ return 1
268
+ data["workflow"] = workflow_id
269
+ if not write_json(task_json_path, data):
270
+ print(colored("Error: failed to update task.json", Colors.RED))
271
+ return 1
272
+ print(colored(f"✓ Workflow set to: {workflow_id}", Colors.GREEN))
273
+
274
+ # workflow_md_for_task warns on stderr itself when the selected variant
275
+ # file is missing (it can be saved later via `trellis workflow --save`).
276
+ effective = workflow_md_for_task(repo_root, task_dir)
277
+ try:
278
+ effective_display = effective.relative_to(repo_root).as_posix()
279
+ except ValueError:
280
+ effective_display = str(effective)
281
+ print(f"Effective workflow: {effective_display}")
282
+ return 0
283
+
284
+
285
+ # =============================================================================
286
+ # Command: list
287
+ # =============================================================================
288
+
289
+ def _display_status(t, all_statuses: dict) -> str:
290
+ """Return the status label to show for a task in `list` output.
291
+
292
+ A parent task's stored status stays "planning" until someone runs
293
+ `task.py start` on the parent directly, even while its children are
294
+ actively being worked — a misleading label for anyone scanning the
295
+ list (#399 item 3). Show "active" instead when at least one child is
296
+ past planning; the stored status.json value is left untouched.
297
+ """
298
+ if t.status == "planning" and t.children:
299
+ child_in_flight = any(
300
+ all_statuses.get(c) not in (None, "planning") for c in t.children
301
+ )
302
+ if child_in_flight:
303
+ return "active"
304
+ return t.status
305
+
306
+
307
+ def cmd_list(args: argparse.Namespace) -> int:
308
+ """List active tasks."""
309
+ repo_root = get_repo_root()
310
+ tasks_dir = get_tasks_dir(repo_root)
311
+ current_task = get_current_task(repo_root)
312
+ developer = get_developer(repo_root)
313
+ filter_mine = args.mine
314
+ filter_status = args.status
315
+ as_json = getattr(args, "json", False)
316
+
317
+ # Single pass: collect all tasks via shared iterator
318
+ all_tasks = {t.dir_name: t for t in iter_active_tasks(tasks_dir)}
319
+ all_statuses = {name: t.status for name, t in all_tasks.items()}
320
+
321
+ if as_json:
322
+ if filter_mine and not developer:
323
+ print(json.dumps({"error": "No developer set"}), file=sys.stderr)
324
+ return 1
325
+
326
+ items = []
327
+ for dir_name in sorted(all_tasks.keys()):
328
+ t = all_tasks[dir_name]
329
+ if filter_mine and (t.assignee or "-") != developer:
330
+ continue
331
+ if filter_status and t.status != filter_status:
332
+ continue
333
+ items.append({
334
+ "dir": f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}",
335
+ "id": t.raw.get("id") or dir_name,
336
+ "title": t.title,
337
+ "status": t.status,
338
+ "display_status": _display_status(t, all_statuses),
339
+ "priority": t.priority,
340
+ "assignee": t.assignee or None,
341
+ "parent": t.parent,
342
+ "children": list(t.children),
343
+ "package": t.package,
344
+ })
345
+ print(json.dumps({"tasks": items}, ensure_ascii=False))
346
+ return 0
347
+
348
+ if filter_mine:
349
+ if not developer:
350
+ print(colored("Error: No developer set. Run init_developer.py first", Colors.RED), file=sys.stderr)
351
+ return 1
352
+ print(colored(f"My tasks (assignee: {developer}):", Colors.BLUE))
353
+ else:
354
+ print(colored("All active tasks:", Colors.BLUE))
355
+ print()
356
+
357
+ # Display tasks hierarchically
358
+ count = 0
359
+
360
+ def _print_task(dir_name: str, indent: int = 0) -> None:
361
+ nonlocal count
362
+ t = all_tasks[dir_name]
363
+
364
+ # Apply --mine filter
365
+ if filter_mine and (t.assignee or "-") != developer:
366
+ return
367
+
368
+ # Apply --status filter
369
+ if filter_status and t.status != filter_status:
370
+ return
371
+
372
+ relative_path = f"{DIR_WORKFLOW}/{DIR_TASKS}/{dir_name}"
373
+ marker = ""
374
+ if relative_path == current_task:
375
+ marker = f" {colored('<- current', Colors.GREEN)}"
376
+
377
+ # Children progress
378
+ progress = children_progress(t.children, all_statuses)
379
+ status_label = _display_status(t, all_statuses)
380
+
381
+ # Package tag
382
+ pkg_tag = f" @{t.package}" if t.package else ""
383
+
384
+ prefix = " " * indent + " - "
385
+
386
+ if filter_mine:
387
+ print(f"{prefix}{dir_name}/ ({status_label}){pkg_tag}{progress}{marker}")
388
+ else:
389
+ print(f"{prefix}{dir_name}/ ({status_label}){pkg_tag}{progress} [{colored(t.assignee or '-', Colors.CYAN)}]{marker}")
390
+ count += 1
391
+
392
+ # Print children indented
393
+ for child_name in t.children:
394
+ if child_name in all_tasks:
395
+ _print_task(child_name, indent + 1)
396
+
397
+ # Display only top-level tasks: those without a parent, plus orphans
398
+ # whose recorded parent is not (or no longer) in the active set — a
399
+ # dangling parent ref must still render flat instead of disappearing.
400
+ for dir_name in sorted(all_tasks.keys()):
401
+ parent = all_tasks[dir_name].parent
402
+ if not parent or parent not in all_tasks:
403
+ _print_task(dir_name)
404
+
405
+ if count == 0:
406
+ if filter_mine:
407
+ print(" (no tasks assigned to you)")
408
+ else:
409
+ print(" (no active tasks)")
410
+
411
+ print()
412
+ print(f"Total: {count} task(s)")
413
+ return 0
414
+
415
+
416
+ # =============================================================================
417
+ # Command: list-archive
418
+ # =============================================================================
419
+
420
+ def cmd_list_archive(args: argparse.Namespace) -> int:
421
+ """List archived tasks."""
422
+ repo_root = get_repo_root()
423
+ tasks_dir = get_tasks_dir(repo_root)
424
+ archive_dir = tasks_dir / "archive"
425
+ month = args.month
426
+
427
+ print(colored("Archived tasks:", Colors.BLUE))
428
+ print()
429
+
430
+ if month:
431
+ month_dir = archive_dir / month
432
+ if month_dir.is_dir():
433
+ print(f"[{month}]")
434
+ for d in sorted(month_dir.iterdir()):
435
+ if d.is_dir():
436
+ print(f" - {d.name}/")
437
+ else:
438
+ print(f" No archives for {month}")
439
+ else:
440
+ if archive_dir.is_dir():
441
+ for month_dir in sorted(archive_dir.iterdir()):
442
+ if month_dir.is_dir():
443
+ month_name = month_dir.name
444
+ count = sum(1 for d in month_dir.iterdir() if d.is_dir())
445
+ print(f"[{month_name}] - {count} task(s)")
446
+
447
+ return 0
448
+
449
+
450
+ # =============================================================================
451
+ # Help
452
+ # =============================================================================
453
+
454
+ def show_usage() -> None:
455
+ """Show usage help."""
456
+ print("""Task Management Script
457
+
458
+ Usage:
459
+ python3 task.py create <title> Create new task directory
460
+ python3 task.py create <title> --package <pkg> Create task for a specific package
461
+ python3 task.py create <title> --parent <dir> Create task as child of parent
462
+ python3 task.py create <title> --no-start Create without making it active in this session
463
+ python3 task.py create <title> --workflow <id> Create task pinned to a workflow variant
464
+ python3 task.py add-context <dir> <jsonl> <path> [reason] Add entry to jsonl
465
+ python3 task.py validate <dir> Validate jsonl files
466
+ python3 task.py list-context <dir> List jsonl entries
467
+ python3 task.py start <dir> Set active task
468
+ python3 task.py current [--source] Show active task
469
+ python3 task.py finish Clear active task
470
+ python3 task.py workflow <id> Select workflow variant for active task
471
+ python3 task.py workflow --clear Clear selection (use default resolution)
472
+ python3 task.py set-branch <dir> <branch> Set git branch
473
+ python3 task.py set-base-branch <dir> <branch> Set PR target branch
474
+ python3 task.py set-scope <dir> <scope> Set scope for PR title
475
+ python3 task.py set-meta <dir> <key> <value> Set/overwrite a task metadata key
476
+ python3 task.py archive <task-dir> Archive completed task
477
+ python3 task.py add-subtask <parent> <child> Link child task to parent
478
+ python3 task.py remove-subtask <parent> <child> Unlink child from parent
479
+ python3 task.py list [--mine] [--status <status>] [--json] List tasks
480
+ python3 task.py list-archive [YYYY-MM] List archived tasks
481
+
482
+ Monorepo options:
483
+ --package <pkg> Package name (validated against config.yaml packages)
484
+
485
+ List options:
486
+ --mine, -m Show only tasks assigned to current developer
487
+ --status, -s <s> Filter by status (planning, in_progress, review, completed)
488
+ --json Output machine-readable JSON (also available on `current`)
489
+
490
+ Examples:
491
+ python3 task.py create "Add login feature" --slug add-login
492
+ python3 task.py create "Add login feature" --slug add-login --package cli
493
+ python3 task.py create "Add login feature" --meta linear=ENG-123 --meta epic=auth
494
+ python3 task.py create "Child task" --slug child --parent .trellis/tasks/01-21-parent
495
+ python3 task.py add-context <dir> implement .trellis/spec/cli/backend/auth.md "Auth guidelines"
496
+ python3 task.py set-branch <dir> task/add-login
497
+ python3 task.py start .trellis/tasks/01-21-add-login
498
+ python3 task.py current --source
499
+ python3 task.py finish
500
+ python3 task.py archive add-login
501
+ python3 task.py add-subtask parent-task child-task # Link existing tasks
502
+ python3 task.py remove-subtask parent-task child-task
503
+ python3 task.py list # List all active tasks
504
+ python3 task.py list --mine # List my tasks only
505
+ python3 task.py list --mine --status in_progress # List my in-progress tasks
506
+ """)
507
+
508
+
509
+ # =============================================================================
510
+ # Main Entry
511
+ # =============================================================================
512
+
513
+ def main() -> int:
514
+ """CLI entry point."""
515
+ # Deprecation guard: `init-context` was removed in v0.5.0-beta.12.
516
+ # Detect early so argparse doesn't mask the real reason with a generic
517
+ # "invalid choice" error.
518
+ if len(sys.argv) >= 2 and sys.argv[1] == "init-context":
519
+ print(
520
+ colored(
521
+ "Error: `task.py init-context` was removed in v0.5.0-beta.12.",
522
+ Colors.RED,
523
+ ),
524
+ file=sys.stderr,
525
+ )
526
+ print(
527
+ "implement.jsonl / check.jsonl are now seeded on `task.py create` for",
528
+ file=sys.stderr,
529
+ )
530
+ print(
531
+ "sub-agent-capable platforms and curated by the AI during planning when needed.",
532
+ file=sys.stderr,
533
+ )
534
+ print("See .trellis/workflow.md planning artifact guidance or run:", file=sys.stderr)
535
+ print(
536
+ " python3 ./.trellis/scripts/get_context.py --mode phase --step 1",
537
+ file=sys.stderr,
538
+ )
539
+ print(
540
+ "Use `task.py add-context <dir> implement|check <path> <reason>` to append entries.",
541
+ file=sys.stderr,
542
+ )
543
+ return 2
544
+
545
+ parser = argparse.ArgumentParser(
546
+ description="Task Management Script",
547
+ formatter_class=argparse.RawDescriptionHelpFormatter,
548
+ )
549
+ subparsers = parser.add_subparsers(dest="command", help="Commands")
550
+
551
+ # create
552
+ p_create = subparsers.add_parser("create", help="Create new task")
553
+ p_create.add_argument("title", help="Task title")
554
+ p_create.add_argument("--slug", "-s", help="Task slug without the MM-DD date prefix")
555
+ p_create.add_argument("--assignee", "-a", help="Assignee developer")
556
+ p_create.add_argument("--priority", "-p", default="P2", help="Priority (P0-P3)")
557
+ p_create.add_argument("--description", "-d", help="Task description")
558
+ p_create.add_argument("--parent", help="Parent task directory (establishes subtask link)")
559
+ p_create.add_argument("--package", help="Package name for monorepo projects")
560
+ p_create.add_argument(
561
+ "--base-branch",
562
+ help="PR target branch (overrides origin/HEAD detection and the checked-out-branch fallback)",
563
+ )
564
+ p_create.add_argument(
565
+ "--meta",
566
+ action="append",
567
+ help="Task metadata key=value (repeatable)",
568
+ )
569
+ p_create.add_argument(
570
+ "--no-start",
571
+ action="store_true",
572
+ help="Create the task without making it active in this session",
573
+ )
574
+ p_create.add_argument(
575
+ "--workflow",
576
+ help="Workflow variant id for this task (.trellis/workflows/<id>.md)",
577
+ )
578
+
579
+ # add-context
580
+ p_add = subparsers.add_parser("add-context", help="Add context entry")
581
+ p_add.add_argument("dir", help="Task directory")
582
+ p_add.add_argument("file", help="JSONL file (implement|check)")
583
+ p_add.add_argument("path", help="File path to add")
584
+ p_add.add_argument("reason", nargs="?", help="Reason for adding")
585
+
586
+ # validate
587
+ p_validate = subparsers.add_parser("validate", help="Validate context files")
588
+ p_validate.add_argument("dir", help="Task directory")
589
+
590
+ # list-context
591
+ p_listctx = subparsers.add_parser("list-context", help="List context entries")
592
+ p_listctx.add_argument("dir", help="Task directory")
593
+
594
+ # start
595
+ p_start = subparsers.add_parser("start", help="Set active task")
596
+ p_start.add_argument("dir", help="Task directory")
597
+
598
+ # current
599
+ p_current = subparsers.add_parser("current", help="Show active task")
600
+ p_current.add_argument("--source", action="store_true",
601
+ help="Show active task source")
602
+ p_current.add_argument("--json", action="store_true",
603
+ help="Output machine-readable JSON")
604
+
605
+ # finish
606
+ subparsers.add_parser("finish", help="Clear active task")
607
+
608
+ # workflow
609
+ p_workflow = subparsers.add_parser("workflow", help="Set/clear per-task workflow selection")
610
+ p_workflow.add_argument("id", nargs="?", help="Workflow id (.trellis/workflows/<id>.md)")
611
+ p_workflow.add_argument("--clear", action="store_true",
612
+ help="Remove the workflow selection (use default resolution)")
613
+
614
+ # set-branch
615
+ p_branch = subparsers.add_parser("set-branch", help="Set git branch")
616
+ p_branch.add_argument("dir", help="Task directory")
617
+ p_branch.add_argument("branch", help="Branch name")
618
+
619
+ # set-base-branch
620
+ p_base = subparsers.add_parser("set-base-branch", help="Set PR target branch")
621
+ p_base.add_argument("dir", help="Task directory")
622
+ p_base.add_argument("base_branch", help="Base branch name (PR target)")
623
+
624
+ # set-scope
625
+ p_scope = subparsers.add_parser("set-scope", help="Set scope")
626
+ p_scope.add_argument("dir", help="Task directory")
627
+ p_scope.add_argument("scope", help="Scope name")
628
+
629
+ # set-meta
630
+ p_setmeta = subparsers.add_parser("set-meta", help="Set/overwrite a task metadata key")
631
+ p_setmeta.add_argument("dir", help="Task directory")
632
+ p_setmeta.add_argument("key", help="Metadata key")
633
+ p_setmeta.add_argument("value", help="Metadata value")
634
+
635
+ # archive
636
+ p_archive = subparsers.add_parser("archive", help="Archive task")
637
+ p_archive.add_argument("name", help="Task directory or name")
638
+ p_archive.add_argument("--no-commit", action="store_true", help="Skip auto git commit after archive")
639
+
640
+ # list
641
+ p_list = subparsers.add_parser("list", help="List tasks")
642
+ p_list.add_argument("--mine", "-m", action="store_true", help="My tasks only")
643
+ p_list.add_argument("--status", "-s", help="Filter by status")
644
+ p_list.add_argument("--json", action="store_true", help="Output machine-readable JSON")
645
+
646
+ # add-subtask
647
+ p_addsub = subparsers.add_parser("add-subtask", help="Link child task to parent")
648
+ p_addsub.add_argument("parent_dir", help="Parent task directory")
649
+ p_addsub.add_argument("child_dir", help="Child task directory")
650
+
651
+ # remove-subtask
652
+ p_rmsub = subparsers.add_parser("remove-subtask", help="Unlink child task from parent")
653
+ p_rmsub.add_argument("parent_dir", help="Parent task directory")
654
+ p_rmsub.add_argument("child_dir", help="Child task directory")
655
+
656
+ # list-archive
657
+ p_listarch = subparsers.add_parser("list-archive", help="List archived tasks")
658
+ p_listarch.add_argument("month", nargs="?", help="Month (YYYY-MM)")
659
+
660
+ args = parser.parse_args()
661
+
662
+ if not args.command:
663
+ show_usage()
664
+ return 1
665
+
666
+ commands = {
667
+ "create": cmd_create,
668
+ "add-context": cmd_add_context,
669
+ "validate": cmd_validate,
670
+ "list-context": cmd_list_context,
671
+ "start": cmd_start,
672
+ "current": cmd_current,
673
+ "finish": cmd_finish,
674
+ "workflow": cmd_workflow,
675
+ "set-branch": cmd_set_branch,
676
+ "set-base-branch": cmd_set_base_branch,
677
+ "set-scope": cmd_set_scope,
678
+ "set-meta": cmd_set_meta,
679
+ "archive": cmd_archive,
680
+ "add-subtask": cmd_add_subtask,
681
+ "remove-subtask": cmd_remove_subtask,
682
+ "list": cmd_list,
683
+ "list-archive": cmd_list_archive,
684
+ }
685
+
686
+ if args.command in commands:
687
+ return commands[args.command](args)
688
+ else:
689
+ show_usage()
690
+ return 1
691
+
692
+
693
+ if __name__ == "__main__":
694
+ sys.exit(main())
File without changes