@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,372 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Task JSONL context management.
4
+
5
+ Provides:
6
+ cmd_add_context - Add entry to JSONL context file
7
+ cmd_validate - Validate JSONL context files
8
+ cmd_list_context - List JSONL context entries
9
+
10
+ Note:
11
+ ``cmd_init_context`` was removed in v0.5.0-beta.12. JSONL context files
12
+ are now seeded at ``task.py create`` time with a self-describing
13
+ ``_example`` line; the AI agent curates real entries during planning when
14
+ the task needs sub-agent/spec context. See ``.trellis/workflow.md`` for the
15
+ current planning artifact contract.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import argparse
21
+ import json
22
+ from pathlib import Path
23
+
24
+ from .config import get_context_injection_limits
25
+ from .git import branch_exists_locally
26
+ from .io import read_json
27
+ from .log import Colors, colored
28
+ from .paths import DIR_ARCHIVE, DIR_TASKS, DIR_WORKFLOW, FILE_TASK_JSON, get_repo_root
29
+ from .task_utils import resolve_task_dir
30
+
31
+ # Extensions that look like code rather than spec/research docs. Entries with
32
+ # one of these extensions outside .trellis/spec/, docs/docs-site, or the
33
+ # task's own directory get a hygiene warning in `task.py validate` — the
34
+ # reader is a sub-agent, not a human, so code paths belong in the diff the
35
+ # agent reads itself, not in implement.jsonl / check.jsonl.
36
+ _CODE_FILE_EXTENSIONS = {
37
+ ".ts",
38
+ ".tsx",
39
+ ".js",
40
+ ".jsx",
41
+ ".mjs",
42
+ ".cjs",
43
+ ".py",
44
+ ".go",
45
+ ".rs",
46
+ ".java",
47
+ ".rb",
48
+ ".c",
49
+ ".cc",
50
+ ".cpp",
51
+ ".h",
52
+ }
53
+
54
+
55
+ # =============================================================================
56
+ # Command: add-context
57
+ # =============================================================================
58
+
59
+ def cmd_add_context(args: argparse.Namespace) -> int:
60
+ """Add entry to JSONL context file."""
61
+ repo_root = get_repo_root()
62
+ target_dir = resolve_task_dir(args.dir, repo_root)
63
+
64
+ jsonl_name = args.file
65
+ path = args.path
66
+ reason = args.reason or "Added manually"
67
+
68
+ if not target_dir or not target_dir.is_dir():
69
+ print(colored(f"Error: Directory not found: {target_dir}", Colors.RED))
70
+ return 1
71
+
72
+ # Support shorthand
73
+ if not jsonl_name.endswith(".jsonl"):
74
+ jsonl_name = f"{jsonl_name}.jsonl"
75
+
76
+ jsonl_file = target_dir / jsonl_name
77
+ full_path = repo_root / path
78
+
79
+ entry_type = "file"
80
+ if full_path.is_dir():
81
+ entry_type = "directory"
82
+ if not path.endswith("/"):
83
+ path = f"{path}/"
84
+ elif not full_path.is_file():
85
+ print(colored(f"Error: Path not found: {path}", Colors.RED))
86
+ return 1
87
+
88
+ # Check if already exists
89
+ if jsonl_file.is_file():
90
+ content = jsonl_file.read_text(encoding="utf-8")
91
+ if f'"{path}"' in content:
92
+ print(colored(f"Warning: Entry already exists for {path}", Colors.YELLOW))
93
+ return 0
94
+
95
+ # Add entry
96
+ entry: dict
97
+ if entry_type == "directory":
98
+ entry = {"file": path, "type": "directory", "reason": reason}
99
+ else:
100
+ entry = {"file": path, "reason": reason}
101
+
102
+ with jsonl_file.open("a", encoding="utf-8") as f:
103
+ f.write(json.dumps(entry, ensure_ascii=False) + "\n")
104
+
105
+ print(colored(f"Added {entry_type}: {path}", Colors.GREEN))
106
+ return 0
107
+
108
+
109
+ # =============================================================================
110
+ # Command: validate
111
+ # =============================================================================
112
+
113
+ def cmd_validate(args: argparse.Namespace) -> int:
114
+ """Validate JSONL context files."""
115
+ repo_root = get_repo_root()
116
+ target_dir = resolve_task_dir(args.dir, repo_root)
117
+
118
+ if not target_dir or not target_dir.is_dir():
119
+ print(colored("Error: task directory required", Colors.RED))
120
+ return 1
121
+
122
+ print(colored("=== Validating Context Files ===", Colors.BLUE))
123
+ print(f"Target dir: {target_dir}")
124
+ print()
125
+
126
+ # Warn (don't fail validation) when the recorded branch is stale — it
127
+ # was likely already merged and deleted (#399 item 2).
128
+ task_json_path = target_dir / FILE_TASK_JSON
129
+ if task_json_path.is_file():
130
+ task_data = read_json(task_json_path)
131
+ stored_branch = task_data.get("branch") if task_data else None
132
+ if stored_branch and not branch_exists_locally(stored_branch, repo_root):
133
+ print(
134
+ colored(
135
+ f"Warning: recorded branch '{stored_branch}' no longer exists locally "
136
+ "(likely merged and deleted).",
137
+ Colors.YELLOW,
138
+ )
139
+ )
140
+ print()
141
+
142
+ total_errors = 0
143
+ for jsonl_name in ["implement.jsonl", "check.jsonl"]:
144
+ jsonl_file = target_dir / jsonl_name
145
+ errors = _validate_jsonl(jsonl_file, repo_root, target_dir)
146
+ total_errors += errors
147
+
148
+ print()
149
+ if total_errors == 0:
150
+ print(colored("✓ All validations passed", Colors.GREEN))
151
+ return 0
152
+ else:
153
+ print(colored(f"✗ Validation failed ({total_errors} errors)", Colors.RED))
154
+ return 1
155
+
156
+
157
+ def _is_exempt_from_code_file_warning(file_path: str, task_rel: str) -> bool:
158
+ """Whether a jsonl entry path is exempt from the code-file hygiene warning.
159
+
160
+ Exempt: spec docs (``.trellis/spec/``), documentation (``docs``,
161
+ ``docs-site``), and the task's own directory (execution plans, generated
162
+ artifacts, etc. legitimately live there).
163
+ """
164
+ posix_path = file_path.replace("\\", "/").lstrip("/")
165
+ exempt_prefixes = (".trellis/spec/", "docs/", "docs-site/")
166
+ if posix_path.startswith(exempt_prefixes):
167
+ return True
168
+ if task_rel and (posix_path == task_rel or posix_path.startswith(f"{task_rel}/")):
169
+ return True
170
+ return False
171
+
172
+
173
+ def _resolve_context_entry_path(
174
+ file_path: str, repo_root: Path, task_dir: Path | None
175
+ ) -> Path | None:
176
+ """Resolve a JSONL entry, binding archived self-references to the archive copy.
177
+
178
+ Exact historical self-references are remapped only for archived tasks.
179
+ ``None`` means the remapped path traversed or resolved outside that archive.
180
+ """
181
+ repo_path = repo_root / file_path
182
+ if task_dir is None:
183
+ return repo_path
184
+
185
+ try:
186
+ task_parts = task_dir.resolve().relative_to(repo_root.resolve()).parts
187
+ except ValueError:
188
+ return repo_path
189
+
190
+ archive_prefix = (DIR_WORKFLOW, DIR_TASKS, DIR_ARCHIVE)
191
+ if len(task_parts) != 5 or task_parts[:3] != archive_prefix:
192
+ return repo_path
193
+
194
+ year_month = task_parts[3]
195
+ if (
196
+ len(year_month) != 7
197
+ or year_month[4] != "-"
198
+ or not year_month[:4].isdigit()
199
+ or not year_month[5:].isdigit()
200
+ ):
201
+ return repo_path
202
+
203
+ historical_root = f"{DIR_WORKFLOW}/{DIR_TASKS}/{task_dir.name}"
204
+ posix_path = file_path.replace("\\", "/")
205
+ if posix_path == historical_root:
206
+ relative_parts: tuple[str, ...] = ()
207
+ elif posix_path.startswith(f"{historical_root}/"):
208
+ relative_path = posix_path[len(historical_root) + 1 :]
209
+ if relative_path.endswith("/"):
210
+ relative_path = relative_path[:-1]
211
+ relative_parts = tuple(relative_path.split("/")) if relative_path else ()
212
+ if any(part in ("", ".", "..") for part in relative_parts):
213
+ return None
214
+ else:
215
+ return repo_path
216
+
217
+ try:
218
+ archive_root = task_dir.resolve()
219
+ resolved_path = task_dir.joinpath(*relative_parts).resolve()
220
+ resolved_path.relative_to(archive_root)
221
+ except (OSError, RuntimeError, ValueError):
222
+ return None
223
+ return resolved_path
224
+
225
+
226
+ def _validate_jsonl(jsonl_file: Path, repo_root: Path, task_dir: Path | None = None) -> int:
227
+ """Validate a single JSONL file.
228
+
229
+ Seed rows (no ``file`` field — typically ``{"_example": "..."}``) are
230
+ skipped silently; they are self-describing comments, not real entries.
231
+
232
+ Beyond hard errors (missing file/dir, invalid JSON), this also prints
233
+ non-blocking hygiene warnings (never counted in ``errors``, never change
234
+ the exit code): entries that look like code files rather than
235
+ spec/research docs, and entries whose file size exceeds the configured
236
+ sub-agent context injection cap (``context_injection.max_file_bytes``).
237
+ """
238
+ file_name = jsonl_file.name
239
+ errors = 0
240
+
241
+ if not jsonl_file.is_file():
242
+ print(f" {colored(f'{file_name}: not found (skipped)', Colors.YELLOW)}")
243
+ return 0
244
+
245
+ task_rel = ""
246
+ if task_dir is not None:
247
+ try:
248
+ task_rel = task_dir.resolve().relative_to(repo_root.resolve()).as_posix()
249
+ except ValueError:
250
+ task_rel = ""
251
+
252
+ max_file_bytes = get_context_injection_limits(repo_root).get("max_file_bytes", 0)
253
+
254
+ line_num = 0
255
+ real_entries = 0
256
+ for line in jsonl_file.read_text(encoding="utf-8").splitlines():
257
+ line_num += 1
258
+ if not line.strip():
259
+ continue
260
+
261
+ try:
262
+ data = json.loads(line)
263
+ except json.JSONDecodeError:
264
+ print(f" {colored(f'{file_name}:{line_num}: Invalid JSON', Colors.RED)}")
265
+ errors += 1
266
+ continue
267
+
268
+ file_path = data.get("file")
269
+ entry_type = data.get("type", "file")
270
+
271
+ if not file_path:
272
+ # Seed / comment row — skip silently
273
+ continue
274
+
275
+ real_entries += 1
276
+ full_path = _resolve_context_entry_path(file_path, repo_root, task_dir)
277
+ if entry_type == "directory":
278
+ if full_path is None or not full_path.is_dir():
279
+ print(f" {colored(f'{file_name}:{line_num}: Directory not found: {file_path}', Colors.RED)}")
280
+ errors += 1
281
+ continue
282
+
283
+ if full_path is None or not full_path.is_file():
284
+ print(f" {colored(f'{file_name}:{line_num}: File not found: {file_path}', Colors.RED)}")
285
+ errors += 1
286
+ continue
287
+
288
+ extension = Path(file_path).suffix.lower()
289
+ if extension in _CODE_FILE_EXTENSIONS and not _is_exempt_from_code_file_warning(
290
+ file_path, task_rel
291
+ ):
292
+ warning_message = (
293
+ f"{file_name}:{line_num}: Warning: {file_path} looks like a code file — "
294
+ "implement/check.jsonl should reference spec/research docs; "
295
+ "agents read code themselves"
296
+ )
297
+ print(f" {colored(warning_message, Colors.YELLOW)}")
298
+
299
+ if max_file_bytes:
300
+ size = full_path.stat().st_size
301
+ if size > max_file_bytes:
302
+ warning_message = (
303
+ f"{file_name}:{line_num}: Warning: {file_path} is {size} bytes, "
304
+ f"exceeds context_injection.max_file_bytes ({max_file_bytes}); "
305
+ "injection will truncate it"
306
+ )
307
+ print(f" {colored(warning_message, Colors.YELLOW)}")
308
+
309
+ if errors == 0:
310
+ print(f" {colored(f'{file_name}: ✓ ({real_entries} entries)', Colors.GREEN)}")
311
+ else:
312
+ print(f" {colored(f'{file_name}: ✗ ({errors} errors)', Colors.RED)}")
313
+
314
+ return errors
315
+
316
+
317
+ # =============================================================================
318
+ # Command: list-context
319
+ # =============================================================================
320
+
321
+ def cmd_list_context(args: argparse.Namespace) -> int:
322
+ """List JSONL context entries."""
323
+ repo_root = get_repo_root()
324
+ target_dir = resolve_task_dir(args.dir, repo_root)
325
+
326
+ if not target_dir or not target_dir.is_dir():
327
+ print(colored("Error: task directory required", Colors.RED))
328
+ return 1
329
+
330
+ print(colored("=== Context Files ===", Colors.BLUE))
331
+ print()
332
+
333
+ for jsonl_name in ["implement.jsonl", "check.jsonl"]:
334
+ jsonl_file = target_dir / jsonl_name
335
+ if not jsonl_file.is_file():
336
+ continue
337
+
338
+ print(colored(f"[{jsonl_name}]", Colors.CYAN))
339
+
340
+ count = 0
341
+ seed_only = True
342
+ for line in jsonl_file.read_text(encoding="utf-8").splitlines():
343
+ if not line.strip():
344
+ continue
345
+
346
+ try:
347
+ data = json.loads(line)
348
+ except json.JSONDecodeError:
349
+ continue
350
+
351
+ file_path = data.get("file")
352
+ if not file_path:
353
+ # Seed / comment row — don't count as a real entry
354
+ continue
355
+ seed_only = False
356
+
357
+ count += 1
358
+ entry_type = data.get("type", "file")
359
+ reason = data.get("reason", "-")
360
+
361
+ if entry_type == "directory":
362
+ print(f" {colored(f'{count}.', Colors.GREEN)} [DIR] {file_path}")
363
+ else:
364
+ print(f" {colored(f'{count}.', Colors.GREEN)} {file_path}")
365
+ print(f" {colored('→', Colors.YELLOW)} {reason}")
366
+
367
+ if seed_only:
368
+ print(f" {colored('(no curated entries yet — only seed row)', Colors.YELLOW)}")
369
+
370
+ print()
371
+
372
+ return 0
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Task queue utility functions.
4
+
5
+ Provides:
6
+ list_tasks_by_status - List tasks by status
7
+ list_pending_tasks - List tasks with pending status
8
+ list_tasks_by_assignee - List tasks by assignee
9
+ list_my_tasks - List tasks assigned to current developer
10
+ get_task_stats - Get P0/P1/P2/P3 counts
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from pathlib import Path
16
+
17
+ from .paths import (
18
+ get_repo_root,
19
+ get_developer,
20
+ get_tasks_dir,
21
+ )
22
+ from .tasks import iter_active_tasks
23
+
24
+
25
+ # =============================================================================
26
+ # Internal helper
27
+ # =============================================================================
28
+
29
+ def _task_to_dict(t) -> dict:
30
+ """Convert TaskInfo to the dict format callers expect."""
31
+ return {
32
+ "priority": t.priority,
33
+ "id": t.raw.get("id", ""),
34
+ "title": t.title,
35
+ "status": t.status,
36
+ "assignee": t.assignee or "-",
37
+ "dir": t.dir_name,
38
+ "children": list(t.children),
39
+ "parent": t.parent,
40
+ }
41
+
42
+
43
+ # =============================================================================
44
+ # Public Functions
45
+ # =============================================================================
46
+
47
+ def list_tasks_by_status(
48
+ filter_status: str | None = None,
49
+ repo_root: Path | None = None
50
+ ) -> list[dict]:
51
+ """List tasks by status.
52
+
53
+ Args:
54
+ filter_status: Optional status filter.
55
+ repo_root: Repository root path. Defaults to auto-detected.
56
+
57
+ Returns:
58
+ List of task info dicts with keys: priority, id, title, status, assignee.
59
+ """
60
+ if repo_root is None:
61
+ repo_root = get_repo_root()
62
+
63
+ tasks_dir = get_tasks_dir(repo_root)
64
+ results = []
65
+
66
+ for t in iter_active_tasks(tasks_dir):
67
+ if filter_status and t.status != filter_status:
68
+ continue
69
+ results.append(_task_to_dict(t))
70
+
71
+ return results
72
+
73
+
74
+ def list_pending_tasks(repo_root: Path | None = None) -> list[dict]:
75
+ """List pending tasks.
76
+
77
+ Args:
78
+ repo_root: Repository root path. Defaults to auto-detected.
79
+
80
+ Returns:
81
+ List of task info dicts.
82
+ """
83
+ return list_tasks_by_status("planning", repo_root)
84
+
85
+
86
+ def list_tasks_by_assignee(
87
+ assignee: str,
88
+ filter_status: str | None = None,
89
+ repo_root: Path | None = None
90
+ ) -> list[dict]:
91
+ """List tasks assigned to a specific developer.
92
+
93
+ Args:
94
+ assignee: Developer name.
95
+ filter_status: Optional status filter.
96
+ repo_root: Repository root path. Defaults to auto-detected.
97
+
98
+ Returns:
99
+ List of task info dicts.
100
+ """
101
+ if repo_root is None:
102
+ repo_root = get_repo_root()
103
+
104
+ tasks_dir = get_tasks_dir(repo_root)
105
+ results = []
106
+
107
+ for t in iter_active_tasks(tasks_dir):
108
+ if (t.assignee or "-") != assignee:
109
+ continue
110
+ if filter_status and t.status != filter_status:
111
+ continue
112
+ results.append(_task_to_dict(t))
113
+
114
+ return results
115
+
116
+
117
+ def list_my_tasks(
118
+ filter_status: str | None = None,
119
+ repo_root: Path | None = None
120
+ ) -> list[dict]:
121
+ """List tasks assigned to current developer.
122
+
123
+ Args:
124
+ filter_status: Optional status filter.
125
+ repo_root: Repository root path. Defaults to auto-detected.
126
+
127
+ Returns:
128
+ List of task info dicts.
129
+
130
+ Raises:
131
+ ValueError: If developer not set.
132
+ """
133
+ if repo_root is None:
134
+ repo_root = get_repo_root()
135
+
136
+ developer = get_developer(repo_root)
137
+ if not developer:
138
+ raise ValueError("Developer not set")
139
+
140
+ return list_tasks_by_assignee(developer, filter_status, repo_root)
141
+
142
+
143
+ def get_task_stats(repo_root: Path | None = None) -> dict[str, int]:
144
+ """Get task statistics.
145
+
146
+ Args:
147
+ repo_root: Repository root path. Defaults to auto-detected.
148
+
149
+ Returns:
150
+ Dict with keys: P0, P1, P2, P3, Total.
151
+ """
152
+ if repo_root is None:
153
+ repo_root = get_repo_root()
154
+
155
+ tasks_dir = get_tasks_dir(repo_root)
156
+ stats = {"P0": 0, "P1": 0, "P2": 0, "P3": 0, "Total": 0}
157
+
158
+ for t in iter_active_tasks(tasks_dir):
159
+ if t.priority in stats:
160
+ stats[t.priority] += 1
161
+ stats["Total"] += 1
162
+
163
+ return stats
164
+
165
+
166
+ def format_task_stats(stats: dict[str, int]) -> str:
167
+ """Format task stats as string.
168
+
169
+ Args:
170
+ stats: Stats dict from get_task_stats.
171
+
172
+ Returns:
173
+ Formatted string like "P0:0 P1:1 P2:2 P3:0 Total:3".
174
+ """
175
+ return f"P0:{stats['P0']} P1:{stats['P1']} P2:{stats['P2']} P3:{stats['P3']} Total:{stats['Total']}"
176
+
177
+
178
+ # =============================================================================
179
+ # Main Entry (for testing)
180
+ # =============================================================================
181
+
182
+ if __name__ == "__main__":
183
+ stats = get_task_stats()
184
+ print(format_task_stats(stats))
185
+ print()
186
+ print("Pending tasks:")
187
+ for task in list_pending_tasks():
188
+ print(f" {task['priority']}|{task['id']}|{task['title']}|{task['status']}|{task['assignee']}")