@baoanaz/cviauto 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (740) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +46 -0
  3. package/bin/trellis.js +3 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +209 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/channel/adapters/claude.d.ts +29 -0
  9. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  10. package/dist/commands/channel/adapters/claude.js +203 -0
  11. package/dist/commands/channel/adapters/claude.js.map +1 -0
  12. package/dist/commands/channel/adapters/codex.d.ts +85 -0
  13. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  14. package/dist/commands/channel/adapters/codex.js +505 -0
  15. package/dist/commands/channel/adapters/codex.js.map +1 -0
  16. package/dist/commands/channel/adapters/index.d.ts +84 -0
  17. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  18. package/dist/commands/channel/adapters/index.js +115 -0
  19. package/dist/commands/channel/adapters/index.js.map +1 -0
  20. package/dist/commands/channel/adapters/types.d.ts +33 -0
  21. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  22. package/dist/commands/channel/adapters/types.js +2 -0
  23. package/dist/commands/channel/adapters/types.js.map +1 -0
  24. package/dist/commands/channel/agent-loader.d.ts +32 -0
  25. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  26. package/dist/commands/channel/agent-loader.js +154 -0
  27. package/dist/commands/channel/agent-loader.js.map +1 -0
  28. package/dist/commands/channel/context-loader.d.ts +26 -0
  29. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  30. package/dist/commands/channel/context-loader.js +290 -0
  31. package/dist/commands/channel/context-loader.js.map +1 -0
  32. package/dist/commands/channel/context.d.ts +16 -0
  33. package/dist/commands/channel/context.d.ts.map +1 -0
  34. package/dist/commands/channel/context.js +83 -0
  35. package/dist/commands/channel/context.js.map +1 -0
  36. package/dist/commands/channel/create.d.ts +27 -0
  37. package/dist/commands/channel/create.d.ts.map +1 -0
  38. package/dist/commands/channel/create.js +39 -0
  39. package/dist/commands/channel/create.js.map +1 -0
  40. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  41. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  42. package/dist/commands/channel/dev-parse-trace.js +70 -0
  43. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  44. package/dist/commands/channel/guard.d.ts +150 -0
  45. package/dist/commands/channel/guard.d.ts.map +1 -0
  46. package/dist/commands/channel/guard.js +474 -0
  47. package/dist/commands/channel/guard.js.map +1 -0
  48. package/dist/commands/channel/index.d.ts +3 -0
  49. package/dist/commands/channel/index.d.ts.map +1 -0
  50. package/dist/commands/channel/index.js +531 -0
  51. package/dist/commands/channel/index.js.map +1 -0
  52. package/dist/commands/channel/interrupt.d.ts +10 -0
  53. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  54. package/dist/commands/channel/interrupt.js +22 -0
  55. package/dist/commands/channel/interrupt.js.map +1 -0
  56. package/dist/commands/channel/kill.d.ts +7 -0
  57. package/dist/commands/channel/kill.d.ts.map +1 -0
  58. package/dist/commands/channel/kill.js +121 -0
  59. package/dist/commands/channel/kill.js.map +1 -0
  60. package/dist/commands/channel/list.d.ts +17 -0
  61. package/dist/commands/channel/list.d.ts.map +1 -0
  62. package/dist/commands/channel/list.js +233 -0
  63. package/dist/commands/channel/list.js.map +1 -0
  64. package/dist/commands/channel/messages.d.ts +15 -0
  65. package/dist/commands/channel/messages.d.ts.map +1 -0
  66. package/dist/commands/channel/messages.js +245 -0
  67. package/dist/commands/channel/messages.js.map +1 -0
  68. package/dist/commands/channel/rm.d.ts +27 -0
  69. package/dist/commands/channel/rm.d.ts.map +1 -0
  70. package/dist/commands/channel/rm.js +216 -0
  71. package/dist/commands/channel/rm.js.map +1 -0
  72. package/dist/commands/channel/run.d.ts +30 -0
  73. package/dist/commands/channel/run.d.ts.map +1 -0
  74. package/dist/commands/channel/run.js +130 -0
  75. package/dist/commands/channel/run.js.map +1 -0
  76. package/dist/commands/channel/send.d.ts +11 -0
  77. package/dist/commands/channel/send.d.ts.map +1 -0
  78. package/dist/commands/channel/send.js +24 -0
  79. package/dist/commands/channel/send.js.map +1 -0
  80. package/dist/commands/channel/spawn.d.ts +40 -0
  81. package/dist/commands/channel/spawn.d.ts.map +1 -0
  82. package/dist/commands/channel/spawn.js +244 -0
  83. package/dist/commands/channel/spawn.js.map +1 -0
  84. package/dist/commands/channel/store/events.d.ts +39 -0
  85. package/dist/commands/channel/store/events.d.ts.map +1 -0
  86. package/dist/commands/channel/store/events.js +87 -0
  87. package/dist/commands/channel/store/events.js.map +1 -0
  88. package/dist/commands/channel/store/filter.d.ts +3 -0
  89. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  90. package/dist/commands/channel/store/filter.js +2 -0
  91. package/dist/commands/channel/store/filter.js.map +1 -0
  92. package/dist/commands/channel/store/lock.d.ts +23 -0
  93. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  94. package/dist/commands/channel/store/lock.js +99 -0
  95. package/dist/commands/channel/store/lock.js.map +1 -0
  96. package/dist/commands/channel/store/paths.d.ts +63 -0
  97. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  98. package/dist/commands/channel/store/paths.js +246 -0
  99. package/dist/commands/channel/store/paths.js.map +1 -0
  100. package/dist/commands/channel/store/schema.d.ts +27 -0
  101. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  102. package/dist/commands/channel/store/schema.js +34 -0
  103. package/dist/commands/channel/store/schema.js.map +1 -0
  104. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  105. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  106. package/dist/commands/channel/store/thread-state.js +16 -0
  107. package/dist/commands/channel/store/thread-state.js.map +1 -0
  108. package/dist/commands/channel/store/watch.d.ts +19 -0
  109. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  110. package/dist/commands/channel/store/watch.js +146 -0
  111. package/dist/commands/channel/store/watch.js.map +1 -0
  112. package/dist/commands/channel/supervisor/idle.d.ts +46 -0
  113. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  114. package/dist/commands/channel/supervisor/idle.js +72 -0
  115. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  116. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  117. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  118. package/dist/commands/channel/supervisor/inbox.js +160 -0
  119. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  120. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  121. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  122. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  123. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  124. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  125. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  126. package/dist/commands/channel/supervisor/stdout.js +121 -0
  127. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  128. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  129. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  130. package/dist/commands/channel/supervisor/turns.js +45 -0
  131. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  132. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  133. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  134. package/dist/commands/channel/supervisor/warning.js +77 -0
  135. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  136. package/dist/commands/channel/supervisor.d.ts +59 -0
  137. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  138. package/dist/commands/channel/supervisor.js +376 -0
  139. package/dist/commands/channel/supervisor.js.map +1 -0
  140. package/dist/commands/channel/text-body.d.ts +13 -0
  141. package/dist/commands/channel/text-body.d.ts.map +1 -0
  142. package/dist/commands/channel/text-body.js +47 -0
  143. package/dist/commands/channel/text-body.js.map +1 -0
  144. package/dist/commands/channel/threads.d.ts +39 -0
  145. package/dist/commands/channel/threads.d.ts.map +1 -0
  146. package/dist/commands/channel/threads.js +106 -0
  147. package/dist/commands/channel/threads.js.map +1 -0
  148. package/dist/commands/channel/title.d.ts +12 -0
  149. package/dist/commands/channel/title.d.ts.map +1 -0
  150. package/dist/commands/channel/title.js +24 -0
  151. package/dist/commands/channel/title.js.map +1 -0
  152. package/dist/commands/channel/wait.d.ts +17 -0
  153. package/dist/commands/channel/wait.d.ts.map +1 -0
  154. package/dist/commands/channel/wait.js +75 -0
  155. package/dist/commands/channel/wait.js.map +1 -0
  156. package/dist/commands/init.d.ts +66 -0
  157. package/dist/commands/init.d.ts.map +1 -0
  158. package/dist/commands/init.js +1704 -0
  159. package/dist/commands/init.js.map +1 -0
  160. package/dist/commands/mem.d.ts +30 -0
  161. package/dist/commands/mem.d.ts.map +1 -0
  162. package/dist/commands/mem.js +424 -0
  163. package/dist/commands/mem.js.map +1 -0
  164. package/dist/commands/uninstall.d.ts +27 -0
  165. package/dist/commands/uninstall.d.ts.map +1 -0
  166. package/dist/commands/uninstall.js +340 -0
  167. package/dist/commands/uninstall.js.map +1 -0
  168. package/dist/commands/update.d.ts +72 -0
  169. package/dist/commands/update.d.ts.map +1 -0
  170. package/dist/commands/update.js +2023 -0
  171. package/dist/commands/update.js.map +1 -0
  172. package/dist/commands/upgrade.d.ts +28 -0
  173. package/dist/commands/upgrade.d.ts.map +1 -0
  174. package/dist/commands/upgrade.js +88 -0
  175. package/dist/commands/upgrade.js.map +1 -0
  176. package/dist/commands/workflow.d.ts +35 -0
  177. package/dist/commands/workflow.d.ts.map +1 -0
  178. package/dist/commands/workflow.js +232 -0
  179. package/dist/commands/workflow.js.map +1 -0
  180. package/dist/configurators/antigravity.d.ts +7 -0
  181. package/dist/configurators/antigravity.d.ts.map +1 -0
  182. package/dist/configurators/antigravity.js +19 -0
  183. package/dist/configurators/antigravity.js.map +1 -0
  184. package/dist/configurators/claude.d.ts +12 -0
  185. package/dist/configurators/claude.d.ts.map +1 -0
  186. package/dist/configurators/claude.js +107 -0
  187. package/dist/configurators/claude.js.map +1 -0
  188. package/dist/configurators/codebuddy.d.ts +10 -0
  189. package/dist/configurators/codebuddy.d.ts.map +1 -0
  190. package/dist/configurators/codebuddy.js +30 -0
  191. package/dist/configurators/codebuddy.js.map +1 -0
  192. package/dist/configurators/codex.d.ts +8 -0
  193. package/dist/configurators/codex.d.ts.map +1 -0
  194. package/dist/configurators/codex.js +73 -0
  195. package/dist/configurators/codex.js.map +1 -0
  196. package/dist/configurators/copilot.d.ts +10 -0
  197. package/dist/configurators/copilot.d.ts.map +1 -0
  198. package/dist/configurators/copilot.js +51 -0
  199. package/dist/configurators/copilot.js.map +1 -0
  200. package/dist/configurators/cursor.d.ts +10 -0
  201. package/dist/configurators/cursor.d.ts.map +1 -0
  202. package/dist/configurators/cursor.js +29 -0
  203. package/dist/configurators/cursor.js.map +1 -0
  204. package/dist/configurators/devin.d.ts +7 -0
  205. package/dist/configurators/devin.d.ts.map +1 -0
  206. package/dist/configurators/devin.js +19 -0
  207. package/dist/configurators/devin.js.map +1 -0
  208. package/dist/configurators/droid.d.ts +10 -0
  209. package/dist/configurators/droid.d.ts.map +1 -0
  210. package/dist/configurators/droid.js +30 -0
  211. package/dist/configurators/droid.js.map +1 -0
  212. package/dist/configurators/gemini.d.ts +16 -0
  213. package/dist/configurators/gemini.d.ts.map +1 -0
  214. package/dist/configurators/gemini.js +38 -0
  215. package/dist/configurators/gemini.js.map +1 -0
  216. package/dist/configurators/index.d.ts +86 -0
  217. package/dist/configurators/index.d.ts.map +1 -0
  218. package/dist/configurators/index.js +430 -0
  219. package/dist/configurators/index.js.map +1 -0
  220. package/dist/configurators/kilo.d.ts +7 -0
  221. package/dist/configurators/kilo.d.ts.map +1 -0
  222. package/dist/configurators/kilo.js +19 -0
  223. package/dist/configurators/kilo.js.map +1 -0
  224. package/dist/configurators/kiro.d.ts +10 -0
  225. package/dist/configurators/kiro.d.ts.map +1 -0
  226. package/dist/configurators/kiro.js +33 -0
  227. package/dist/configurators/kiro.js.map +1 -0
  228. package/dist/configurators/opencode.d.ts +14 -0
  229. package/dist/configurators/opencode.d.ts.map +1 -0
  230. package/dist/configurators/opencode.js +102 -0
  231. package/dist/configurators/opencode.js.map +1 -0
  232. package/dist/configurators/pi.d.ts +3 -0
  233. package/dist/configurators/pi.d.ts.map +1 -0
  234. package/dist/configurators/pi.js +55 -0
  235. package/dist/configurators/pi.js.map +1 -0
  236. package/dist/configurators/qoder.d.ts +11 -0
  237. package/dist/configurators/qoder.d.ts.map +1 -0
  238. package/dist/configurators/qoder.js +31 -0
  239. package/dist/configurators/qoder.js.map +1 -0
  240. package/dist/configurators/reasonix.d.ts +23 -0
  241. package/dist/configurators/reasonix.d.ts.map +1 -0
  242. package/dist/configurators/reasonix.js +60 -0
  243. package/dist/configurators/reasonix.js.map +1 -0
  244. package/dist/configurators/shared.d.ts +172 -0
  245. package/dist/configurators/shared.d.ts.map +1 -0
  246. package/dist/configurators/shared.js +530 -0
  247. package/dist/configurators/shared.js.map +1 -0
  248. package/dist/configurators/trae.d.ts +17 -0
  249. package/dist/configurators/trae.d.ts.map +1 -0
  250. package/dist/configurators/trae.js +42 -0
  251. package/dist/configurators/trae.js.map +1 -0
  252. package/dist/configurators/workflow.d.ts +37 -0
  253. package/dist/configurators/workflow.d.ts.map +1 -0
  254. package/dist/configurators/workflow.js +177 -0
  255. package/dist/configurators/workflow.js.map +1 -0
  256. package/dist/configurators/zcode.d.ts +19 -0
  257. package/dist/configurators/zcode.d.ts.map +1 -0
  258. package/dist/configurators/zcode.js +54 -0
  259. package/dist/configurators/zcode.js.map +1 -0
  260. package/dist/constants/paths.d.ts +74 -0
  261. package/dist/constants/paths.d.ts.map +1 -0
  262. package/dist/constants/paths.js +83 -0
  263. package/dist/constants/paths.js.map +1 -0
  264. package/dist/constants/version.d.ts +9 -0
  265. package/dist/constants/version.d.ts.map +1 -0
  266. package/dist/constants/version.js +15 -0
  267. package/dist/constants/version.js.map +1 -0
  268. package/dist/index.d.ts +9 -0
  269. package/dist/index.d.ts.map +1 -0
  270. package/dist/index.js +9 -0
  271. package/dist/index.js.map +1 -0
  272. package/dist/migrations/index.d.ts +62 -0
  273. package/dist/migrations/index.d.ts.map +1 -0
  274. package/dist/migrations/index.js +187 -0
  275. package/dist/migrations/index.js.map +1 -0
  276. package/dist/migrations/manifests/0.1.9.json +30 -0
  277. package/dist/migrations/manifests/0.2.0.json +49 -0
  278. package/dist/migrations/manifests/0.2.12.json +9 -0
  279. package/dist/migrations/manifests/0.2.13.json +9 -0
  280. package/dist/migrations/manifests/0.2.14.json +175 -0
  281. package/dist/migrations/manifests/0.2.15.json +33 -0
  282. package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
  283. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  284. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  285. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  286. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  287. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  288. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  289. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  290. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  291. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  292. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  293. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  294. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  295. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  296. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  297. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  298. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  299. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  300. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  301. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  302. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  303. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  304. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  305. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  306. package/dist/migrations/manifests/0.3.0.json +11 -0
  307. package/dist/migrations/manifests/0.3.1.json +9 -0
  308. package/dist/migrations/manifests/0.3.10.json +9 -0
  309. package/dist/migrations/manifests/0.3.2.json +9 -0
  310. package/dist/migrations/manifests/0.3.3.json +9 -0
  311. package/dist/migrations/manifests/0.3.4.json +21 -0
  312. package/dist/migrations/manifests/0.3.5.json +9 -0
  313. package/dist/migrations/manifests/0.3.6.json +9 -0
  314. package/dist/migrations/manifests/0.3.7.json +9 -0
  315. package/dist/migrations/manifests/0.3.8.json +9 -0
  316. package/dist/migrations/manifests/0.3.9.json +9 -0
  317. package/dist/migrations/manifests/0.4.0-beta.1.json +300 -0
  318. package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
  319. package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
  320. package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
  321. package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
  322. package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
  323. package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
  324. package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
  325. package/dist/migrations/manifests/0.4.0-beta.8.json +42 -0
  326. package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
  327. package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
  328. package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
  329. package/dist/migrations/manifests/0.4.0.json +9 -0
  330. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  331. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  332. package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
  333. package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
  334. package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
  335. package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
  336. package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
  337. package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
  338. package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
  339. package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
  340. package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
  341. package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
  342. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  343. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  344. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  345. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  346. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  347. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  348. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  349. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  350. package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
  351. package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
  352. package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
  353. package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
  354. package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
  355. package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
  356. package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
  357. package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
  358. package/dist/migrations/manifests/0.5.0.json +9 -0
  359. package/dist/migrations/manifests/0.5.1.json +9 -0
  360. package/dist/migrations/manifests/0.5.10.json +9 -0
  361. package/dist/migrations/manifests/0.5.11.json +16 -0
  362. package/dist/migrations/manifests/0.5.12.json +9 -0
  363. package/dist/migrations/manifests/0.5.13.json +9 -0
  364. package/dist/migrations/manifests/0.5.14.json +9 -0
  365. package/dist/migrations/manifests/0.5.15.json +9 -0
  366. package/dist/migrations/manifests/0.5.16.json +9 -0
  367. package/dist/migrations/manifests/0.5.17.json +9 -0
  368. package/dist/migrations/manifests/0.5.18.json +9 -0
  369. package/dist/migrations/manifests/0.5.19.json +9 -0
  370. package/dist/migrations/manifests/0.5.2.json +9 -0
  371. package/dist/migrations/manifests/0.5.3.json +9 -0
  372. package/dist/migrations/manifests/0.5.4.json +9 -0
  373. package/dist/migrations/manifests/0.5.5.json +9 -0
  374. package/dist/migrations/manifests/0.5.6.json +9 -0
  375. package/dist/migrations/manifests/0.5.7.json +16 -0
  376. package/dist/migrations/manifests/0.5.8.json +9 -0
  377. package/dist/migrations/manifests/0.5.9.json +9 -0
  378. package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
  379. package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
  380. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  381. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  382. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  383. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  384. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  385. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  386. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  387. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  388. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  389. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  390. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  391. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  392. package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
  393. package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
  394. package/dist/migrations/manifests/0.6.0-beta.23.json +88 -0
  395. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  396. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  397. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  398. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  399. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  400. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  401. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  402. package/dist/migrations/manifests/0.6.0-rc.0.json +9 -0
  403. package/dist/migrations/manifests/0.6.0.json +9 -0
  404. package/dist/migrations/manifests/0.6.1.json +9 -0
  405. package/dist/migrations/manifests/0.6.2.json +9 -0
  406. package/dist/migrations/manifests/0.6.3.json +24 -0
  407. package/dist/migrations/manifests/0.6.4.json +9 -0
  408. package/dist/migrations/manifests/0.6.5.json +9 -0
  409. package/dist/templates/claude/agents/trellis-check.md +115 -0
  410. package/dist/templates/claude/agents/trellis-implement.md +110 -0
  411. package/dist/templates/claude/agents/trellis-research.md +137 -0
  412. package/dist/templates/claude/hooks/statusline.py +324 -0
  413. package/dist/templates/claude/index.d.ts +31 -0
  414. package/dist/templates/claude/index.d.ts.map +1 -0
  415. package/dist/templates/claude/index.js +58 -0
  416. package/dist/templates/claude/index.js.map +1 -0
  417. package/dist/templates/claude/settings.json +73 -0
  418. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  419. package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
  420. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  421. package/dist/templates/codebuddy/index.d.ts +15 -0
  422. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  423. package/dist/templates/codebuddy/index.js +15 -0
  424. package/dist/templates/codebuddy/index.js.map +1 -0
  425. package/dist/templates/codebuddy/settings.json +59 -0
  426. package/dist/templates/codex/agents/trellis-check.toml +59 -0
  427. package/dist/templates/codex/agents/trellis-implement.toml +40 -0
  428. package/dist/templates/codex/agents/trellis-research.toml +73 -0
  429. package/dist/templates/codex/config.toml +28 -0
  430. package/dist/templates/codex/hooks/session-start.py +545 -0
  431. package/dist/templates/codex/hooks.json +15 -0
  432. package/dist/templates/codex/index.d.ts +39 -0
  433. package/dist/templates/codex/index.d.ts.map +1 -0
  434. package/dist/templates/codex/index.js +86 -0
  435. package/dist/templates/codex/index.js.map +1 -0
  436. package/dist/templates/codex/skills/before-dev/SKILL.md +40 -0
  437. package/dist/templates/codex/skills/brainstorm/SKILL.md +130 -0
  438. package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
  439. package/dist/templates/codex/skills/check/SKILL.md +98 -0
  440. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
  441. package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
  442. package/dist/templates/codex/skills/finish-work/SKILL.md +98 -0
  443. package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
  444. package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
  445. package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
  446. package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
  447. package/dist/templates/codex/skills/start/SKILL.md +64 -0
  448. package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
  449. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +67 -0
  450. package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +480 -0
  451. package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +233 -0
  452. package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +226 -0
  453. package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +276 -0
  454. package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +128 -0
  455. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +85 -0
  456. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  457. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +56 -0
  458. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  459. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  460. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +123 -0
  461. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  462. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
  463. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +66 -0
  464. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  465. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +146 -0
  466. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  467. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  468. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +69 -0
  469. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  470. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  471. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +130 -0
  472. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  473. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  474. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +82 -0
  475. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +72 -0
  476. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
  477. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +88 -0
  478. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +85 -0
  479. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
  480. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +65 -0
  481. package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
  482. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  483. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  484. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  485. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  486. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  487. package/dist/templates/common/commands/continue.md +57 -0
  488. package/dist/templates/common/commands/finish-work.md +74 -0
  489. package/dist/templates/common/commands/start.md +59 -0
  490. package/dist/templates/common/index.d.ts +48 -0
  491. package/dist/templates/common/index.d.ts.map +1 -0
  492. package/dist/templates/common/index.js +104 -0
  493. package/dist/templates/common/index.js.map +1 -0
  494. package/dist/templates/common/skills/before-dev.md +35 -0
  495. package/dist/templates/common/skills/brainstorm.md +168 -0
  496. package/dist/templates/common/skills/break-loop.md +184 -0
  497. package/dist/templates/common/skills/check.md +93 -0
  498. package/dist/templates/common/skills/update-spec.md +351 -0
  499. package/dist/templates/copilot/hooks/session-start.py +547 -0
  500. package/dist/templates/copilot/hooks.json +19 -0
  501. package/dist/templates/copilot/index.d.ts +23 -0
  502. package/dist/templates/copilot/index.d.ts.map +1 -0
  503. package/dist/templates/copilot/index.js +54 -0
  504. package/dist/templates/copilot/index.js.map +1 -0
  505. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  506. package/dist/templates/copilot/prompts/brainstorm.prompt.md +129 -0
  507. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  508. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
  509. package/dist/templates/copilot/prompts/check.prompt.md +97 -0
  510. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  511. package/dist/templates/copilot/prompts/finish-work.prompt.md +107 -0
  512. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  513. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  514. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  515. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  516. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  517. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  518. package/dist/templates/cursor/agents/trellis-check.md +114 -0
  519. package/dist/templates/cursor/agents/trellis-implement.md +109 -0
  520. package/dist/templates/cursor/agents/trellis-research.md +136 -0
  521. package/dist/templates/cursor/hooks.json +24 -0
  522. package/dist/templates/cursor/index.d.ts +13 -0
  523. package/dist/templates/cursor/index.d.ts.map +1 -0
  524. package/dist/templates/cursor/index.js +13 -0
  525. package/dist/templates/cursor/index.js.map +1 -0
  526. package/dist/templates/droid/droids/trellis-check.md +107 -0
  527. package/dist/templates/droid/droids/trellis-implement.md +102 -0
  528. package/dist/templates/droid/droids/trellis-research.md +137 -0
  529. package/dist/templates/droid/index.d.ts +15 -0
  530. package/dist/templates/droid/index.d.ts.map +1 -0
  531. package/dist/templates/droid/index.js +15 -0
  532. package/dist/templates/droid/index.js.map +1 -0
  533. package/dist/templates/droid/settings.json +59 -0
  534. package/dist/templates/extract.d.ts +40 -0
  535. package/dist/templates/extract.d.ts.map +1 -0
  536. package/dist/templates/extract.js +106 -0
  537. package/dist/templates/extract.js.map +1 -0
  538. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  539. package/dist/templates/gemini/agents/trellis-implement.md +102 -0
  540. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  541. package/dist/templates/gemini/index.d.ts +13 -0
  542. package/dist/templates/gemini/index.d.ts.map +1 -0
  543. package/dist/templates/gemini/index.js +13 -0
  544. package/dist/templates/gemini/index.js.map +1 -0
  545. package/dist/templates/gemini/settings.json +28 -0
  546. package/dist/templates/kiro/agents/trellis-check.json +14 -0
  547. package/dist/templates/kiro/agents/trellis-implement.json +14 -0
  548. package/dist/templates/kiro/agents/trellis-research.json +22 -0
  549. package/dist/templates/kiro/agents/trellis.json +20 -0
  550. package/dist/templates/kiro/hooks/cviauto-workflow-state.kiro.hook +14 -0
  551. package/dist/templates/kiro/index.d.ts +32 -0
  552. package/dist/templates/kiro/index.d.ts.map +1 -0
  553. package/dist/templates/kiro/index.js +28 -0
  554. package/dist/templates/kiro/index.js.map +1 -0
  555. package/dist/templates/markdown/agents.md +21 -0
  556. package/dist/templates/markdown/gitignore.txt +15 -0
  557. package/dist/templates/markdown/index.d.ts +27 -0
  558. package/dist/templates/markdown/index.d.ts.map +1 -0
  559. package/dist/templates/markdown/index.js +52 -0
  560. package/dist/templates/markdown/index.js.map +1 -0
  561. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  562. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  563. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  564. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  565. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  566. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  567. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  568. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  569. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  570. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  571. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  572. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  573. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  574. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  575. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +327 -0
  576. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -0
  577. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  578. package/dist/templates/markdown/workspace-index.md +125 -0
  579. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  580. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  581. package/dist/templates/opencode/agents/trellis-implement.md +118 -0
  582. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  583. package/dist/templates/opencode/lib/cviauto-context.js +418 -0
  584. package/dist/templates/opencode/lib/session-utils.js +609 -0
  585. package/dist/templates/opencode/package.json +5 -0
  586. package/dist/templates/opencode/plugins/inject-subagent-context.js +570 -0
  587. package/dist/templates/opencode/plugins/inject-workflow-state.js +175 -0
  588. package/dist/templates/opencode/plugins/session-start.js +140 -0
  589. package/dist/templates/pi/agents/trellis-check.md +37 -0
  590. package/dist/templates/pi/agents/trellis-implement.md +42 -0
  591. package/dist/templates/pi/agents/trellis-research.md +25 -0
  592. package/dist/templates/pi/extensions/trellis/index.ts.txt +1680 -0
  593. package/dist/templates/pi/index.d.ts +5 -0
  594. package/dist/templates/pi/index.d.ts.map +1 -0
  595. package/dist/templates/pi/index.js +12 -0
  596. package/dist/templates/pi/index.js.map +1 -0
  597. package/dist/templates/pi/settings.json +6 -0
  598. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  599. package/dist/templates/qoder/agents/trellis-implement.md +103 -0
  600. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  601. package/dist/templates/qoder/index.d.ts +15 -0
  602. package/dist/templates/qoder/index.d.ts.map +1 -0
  603. package/dist/templates/qoder/index.js +15 -0
  604. package/dist/templates/qoder/index.js.map +1 -0
  605. package/dist/templates/qoder/settings.json +47 -0
  606. package/dist/templates/reasonix/agents/trellis-check.md +36 -0
  607. package/dist/templates/reasonix/agents/trellis-implement.md +41 -0
  608. package/dist/templates/reasonix/index.d.ts +13 -0
  609. package/dist/templates/reasonix/index.d.ts.map +1 -0
  610. package/dist/templates/reasonix/index.js +16 -0
  611. package/dist/templates/reasonix/index.js.map +1 -0
  612. package/dist/templates/shared-hooks/index.d.ts +58 -0
  613. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  614. package/dist/templates/shared-hooks/index.js +101 -0
  615. package/dist/templates/shared-hooks/index.js.map +1 -0
  616. package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
  617. package/dist/templates/shared-hooks/inject-subagent-context.py +786 -0
  618. package/dist/templates/shared-hooks/inject-workflow-state.py +408 -0
  619. package/dist/templates/shared-hooks/session-start.py +844 -0
  620. package/dist/templates/template-utils.d.ts +28 -0
  621. package/dist/templates/template-utils.d.ts.map +1 -0
  622. package/dist/templates/template-utils.js +95 -0
  623. package/dist/templates/template-utils.js.map +1 -0
  624. package/dist/templates/trae/agents/trellis-check.md +108 -0
  625. package/dist/templates/trae/agents/trellis-implement.md +103 -0
  626. package/dist/templates/trae/agents/trellis-research.md +137 -0
  627. package/dist/templates/trae/hooks.json +27 -0
  628. package/dist/templates/trae/index.d.ts +15 -0
  629. package/dist/templates/trae/index.d.ts.map +1 -0
  630. package/dist/templates/trae/index.js +15 -0
  631. package/dist/templates/trae/index.js.map +1 -0
  632. package/dist/templates/trellis/agents/check.md +70 -0
  633. package/dist/templates/trellis/agents/implement.md +71 -0
  634. package/dist/templates/trellis/config.yaml +110 -0
  635. package/dist/templates/trellis/gitignore.txt +40 -0
  636. package/dist/templates/trellis/index.d.ts +65 -0
  637. package/dist/templates/trellis/index.d.ts.map +1 -0
  638. package/dist/templates/trellis/index.js +119 -0
  639. package/dist/templates/trellis/index.js.map +1 -0
  640. package/dist/templates/trellis/scripts/__init__.py +5 -0
  641. package/dist/templates/trellis/scripts/add_session.py +567 -0
  642. package/dist/templates/trellis/scripts/common/__init__.py +92 -0
  643. package/dist/templates/trellis/scripts/common/active_task.py +628 -0
  644. package/dist/templates/trellis/scripts/common/cli_adapter.py +851 -0
  645. package/dist/templates/trellis/scripts/common/config.py +444 -0
  646. package/dist/templates/trellis/scripts/common/cviauto_config.py +131 -0
  647. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  648. package/dist/templates/trellis/scripts/common/git.py +31 -0
  649. package/dist/templates/trellis/scripts/common/git_context.py +106 -0
  650. package/dist/templates/trellis/scripts/common/io.py +37 -0
  651. package/dist/templates/trellis/scripts/common/log.py +45 -0
  652. package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
  653. package/dist/templates/trellis/scripts/common/paths.py +447 -0
  654. package/dist/templates/trellis/scripts/common/safe_commit.py +315 -0
  655. package/dist/templates/trellis/scripts/common/session_context.py +821 -0
  656. package/dist/templates/trellis/scripts/common/task_context.py +223 -0
  657. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  658. package/dist/templates/trellis/scripts/common/task_store.py +747 -0
  659. package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
  660. package/dist/templates/trellis/scripts/common/tasks.py +112 -0
  661. package/dist/templates/trellis/scripts/common/types.py +110 -0
  662. package/dist/templates/trellis/scripts/common/workflow_phase.py +212 -0
  663. package/dist/templates/trellis/scripts/get_context.py +16 -0
  664. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  665. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  666. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  667. package/dist/templates/trellis/scripts/task.py +500 -0
  668. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  669. package/dist/templates/trellis/workflow.md +697 -0
  670. package/dist/templates/zcode/agents/trellis-check.md +102 -0
  671. package/dist/templates/zcode/agents/trellis-implement.md +102 -0
  672. package/dist/templates/zcode/index.d.ts +15 -0
  673. package/dist/templates/zcode/index.d.ts.map +1 -0
  674. package/dist/templates/zcode/index.js +18 -0
  675. package/dist/templates/zcode/index.js.map +1 -0
  676. package/dist/types/ai-tools.d.ts +95 -0
  677. package/dist/types/ai-tools.d.ts.map +1 -0
  678. package/dist/types/ai-tools.js +330 -0
  679. package/dist/types/ai-tools.js.map +1 -0
  680. package/dist/types/migration.d.ts +125 -0
  681. package/dist/types/migration.d.ts.map +1 -0
  682. package/dist/types/migration.js +8 -0
  683. package/dist/types/migration.js.map +1 -0
  684. package/dist/utils/agent-refs.d.ts +31 -0
  685. package/dist/utils/agent-refs.d.ts.map +1 -0
  686. package/dist/utils/agent-refs.js +63 -0
  687. package/dist/utils/agent-refs.js.map +1 -0
  688. package/dist/utils/compare-versions.d.ts +12 -0
  689. package/dist/utils/compare-versions.d.ts.map +1 -0
  690. package/dist/utils/compare-versions.js +86 -0
  691. package/dist/utils/compare-versions.js.map +1 -0
  692. package/dist/utils/cwd-guard.d.ts +38 -0
  693. package/dist/utils/cwd-guard.d.ts.map +1 -0
  694. package/dist/utils/cwd-guard.js +62 -0
  695. package/dist/utils/cwd-guard.js.map +1 -0
  696. package/dist/utils/file-writer.d.ts +36 -0
  697. package/dist/utils/file-writer.d.ts.map +1 -0
  698. package/dist/utils/file-writer.js +203 -0
  699. package/dist/utils/file-writer.js.map +1 -0
  700. package/dist/utils/manifest-prune.d.ts +61 -0
  701. package/dist/utils/manifest-prune.d.ts.map +1 -0
  702. package/dist/utils/manifest-prune.js +137 -0
  703. package/dist/utils/manifest-prune.js.map +1 -0
  704. package/dist/utils/posix.d.ts +13 -0
  705. package/dist/utils/posix.d.ts.map +1 -0
  706. package/dist/utils/posix.js +15 -0
  707. package/dist/utils/posix.js.map +1 -0
  708. package/dist/utils/project-detector.d.ts +46 -0
  709. package/dist/utils/project-detector.d.ts.map +1 -0
  710. package/dist/utils/project-detector.js +666 -0
  711. package/dist/utils/project-detector.js.map +1 -0
  712. package/dist/utils/proxy.d.ts +25 -0
  713. package/dist/utils/proxy.d.ts.map +1 -0
  714. package/dist/utils/proxy.js +60 -0
  715. package/dist/utils/proxy.js.map +1 -0
  716. package/dist/utils/registry-config.d.ts +7 -0
  717. package/dist/utils/registry-config.d.ts.map +1 -0
  718. package/dist/utils/registry-config.js +171 -0
  719. package/dist/utils/registry-config.js.map +1 -0
  720. package/dist/utils/task-json.d.ts +13 -0
  721. package/dist/utils/task-json.d.ts.map +1 -0
  722. package/dist/utils/task-json.js +12 -0
  723. package/dist/utils/task-json.js.map +1 -0
  724. package/dist/utils/template-fetcher.d.ts +161 -0
  725. package/dist/utils/template-fetcher.d.ts.map +1 -0
  726. package/dist/utils/template-fetcher.js +956 -0
  727. package/dist/utils/template-fetcher.js.map +1 -0
  728. package/dist/utils/template-hash.d.ts +123 -0
  729. package/dist/utils/template-hash.d.ts.map +1 -0
  730. package/dist/utils/template-hash.js +334 -0
  731. package/dist/utils/template-hash.js.map +1 -0
  732. package/dist/utils/uninstall-scrubbers.d.ts +64 -0
  733. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  734. package/dist/utils/uninstall-scrubbers.js +367 -0
  735. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  736. package/dist/utils/workflow-resolver.d.ts +86 -0
  737. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  738. package/dist/utils/workflow-resolver.js +265 -0
  739. package/dist/utils/workflow-resolver.js.map +1 -0
  740. package/package.json +89 -0
@@ -0,0 +1,274 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Task utility functions.
4
+
5
+ Provides:
6
+ is_safe_task_path - Validate task path is safe to operate on
7
+ find_task_by_name - Find task directory by name
8
+ resolve_task_dir - Resolve task directory from name, relative, or absolute path
9
+ archive_task_dir - Archive task to monthly directory
10
+ run_task_hooks - Run lifecycle hooks for task events
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import shutil
16
+ import sys
17
+ from datetime import datetime
18
+ from pathlib import Path
19
+
20
+ from .paths import get_repo_root, get_tasks_dir
21
+
22
+
23
+ # =============================================================================
24
+ # Path Safety
25
+ # =============================================================================
26
+
27
+ def is_safe_task_path(task_path: str, repo_root: Path | None = None) -> bool:
28
+ """Check if a relative task path is safe to operate on.
29
+
30
+ Args:
31
+ task_path: Task path (relative to repo_root).
32
+ repo_root: Repository root path. Defaults to auto-detected.
33
+
34
+ Returns:
35
+ True if safe, False if dangerous.
36
+ """
37
+ if repo_root is None:
38
+ repo_root = get_repo_root()
39
+
40
+ normalized = task_path.replace("\\", "/")
41
+
42
+ # Check empty or null
43
+ if not normalized or normalized == "null":
44
+ print("Error: empty or null task path", file=sys.stderr)
45
+ return False
46
+
47
+ # Reject absolute paths
48
+ if Path(task_path).is_absolute():
49
+ print(f"Error: absolute path not allowed: {task_path}", file=sys.stderr)
50
+ return False
51
+
52
+ # Reject ".", "..", paths starting with "./" or "../", or containing ".."
53
+ if normalized in (".", "..") or normalized.startswith("./") or normalized.startswith("../") or ".." in normalized:
54
+ print(f"Error: path traversal not allowed: {task_path}", file=sys.stderr)
55
+ return False
56
+
57
+ # Final check: ensure resolved path is not the repo root
58
+ abs_path = repo_root / Path(normalized)
59
+ if abs_path.exists():
60
+ try:
61
+ resolved = abs_path.resolve()
62
+ root_resolved = repo_root.resolve()
63
+ if resolved == root_resolved:
64
+ print(f"Error: path resolves to repo root: {task_path}", file=sys.stderr)
65
+ return False
66
+ except (OSError, IOError):
67
+ pass
68
+
69
+ return True
70
+
71
+
72
+ # =============================================================================
73
+ # Task Lookup
74
+ # =============================================================================
75
+
76
+ def find_task_by_name(task_name: str, tasks_dir: Path) -> Path | None:
77
+ """Find task directory by name (exact or suffix match).
78
+
79
+ Args:
80
+ task_name: Task name to find.
81
+ tasks_dir: Tasks directory path.
82
+
83
+ Returns:
84
+ Absolute path to task directory, or None if not found.
85
+ """
86
+ if not task_name or not tasks_dir or not tasks_dir.is_dir():
87
+ return None
88
+
89
+ # Try exact match first
90
+ exact_match = tasks_dir / task_name
91
+ if exact_match.is_dir():
92
+ return exact_match
93
+
94
+ # Try suffix match (e.g., "my-task" matches "01-21-my-task")
95
+ for d in tasks_dir.iterdir():
96
+ if d.is_dir() and d.name.endswith(f"-{task_name}"):
97
+ return d
98
+
99
+ return None
100
+
101
+
102
+ # =============================================================================
103
+ # Archive Operations
104
+ # =============================================================================
105
+
106
+ def archive_task_dir(task_dir_abs: Path, repo_root: Path | None = None) -> Path | None:
107
+ """Archive a task directory to archive/{YYYY-MM}/.
108
+
109
+ Args:
110
+ task_dir_abs: Absolute path to task directory.
111
+ repo_root: Repository root path. Defaults to auto-detected.
112
+
113
+ Returns:
114
+ Path to archived directory, or None on error.
115
+ """
116
+ if not task_dir_abs.is_dir():
117
+ print(f"Error: task directory not found: {task_dir_abs}", file=sys.stderr)
118
+ return None
119
+
120
+ # Get tasks directory (parent of the task)
121
+ tasks_dir = task_dir_abs.parent
122
+ archive_dir = tasks_dir / "archive"
123
+ year_month = datetime.now().strftime("%Y-%m")
124
+ month_dir = archive_dir / year_month
125
+
126
+ # Create archive directory
127
+ try:
128
+ month_dir.mkdir(parents=True, exist_ok=True)
129
+ except (OSError, IOError) as e:
130
+ print(f"Error: Failed to create archive directory: {e}", file=sys.stderr)
131
+ return None
132
+
133
+ # Move task to archive
134
+ task_name = task_dir_abs.name
135
+ dest = month_dir / task_name
136
+
137
+ try:
138
+ shutil.move(str(task_dir_abs), str(dest))
139
+ except (OSError, IOError, shutil.Error) as e:
140
+ print(f"Error: Failed to move task to archive: {e}", file=sys.stderr)
141
+ return None
142
+
143
+ return dest
144
+
145
+
146
+ def archive_task_complete(
147
+ task_dir_abs: Path,
148
+ repo_root: Path | None = None
149
+ ) -> dict[str, str]:
150
+ """Complete archive workflow: archive directory.
151
+
152
+ Args:
153
+ task_dir_abs: Absolute path to task directory.
154
+ repo_root: Repository root path. Defaults to auto-detected.
155
+
156
+ Returns:
157
+ Dict with archive result info.
158
+ """
159
+ if not task_dir_abs.is_dir():
160
+ print(f"Error: task directory not found: {task_dir_abs}", file=sys.stderr)
161
+ return {}
162
+
163
+ archive_dest = archive_task_dir(task_dir_abs, repo_root)
164
+ if archive_dest:
165
+ return {"archived_to": str(archive_dest)}
166
+
167
+ return {}
168
+
169
+
170
+ # =============================================================================
171
+ # Task Directory Resolution
172
+ # =============================================================================
173
+
174
+ def resolve_task_dir(target_dir: str, repo_root: Path) -> Path:
175
+ """Resolve task directory to absolute path.
176
+
177
+ Supports:
178
+ - Absolute path: /path/to/task
179
+ - Relative path: .cviauto/tasks/01-31-my-task
180
+ - Task name: my-task (uses find_task_by_name for lookup)
181
+
182
+ Args:
183
+ target_dir: Task directory specification.
184
+ repo_root: Repository root path.
185
+
186
+ Returns:
187
+ Resolved absolute path.
188
+ """
189
+ if not target_dir:
190
+ return Path()
191
+
192
+ normalized = target_dir.replace("\\", "/")
193
+ while normalized.startswith("./"):
194
+ normalized = normalized[2:]
195
+
196
+ # Absolute path
197
+ if Path(target_dir).is_absolute():
198
+ return Path(target_dir)
199
+
200
+ # Relative path (contains path separator or starts with .cviauto)
201
+ if "/" in normalized or normalized.startswith(".cviauto"):
202
+ return repo_root / Path(normalized)
203
+
204
+ # Task name - try to find in tasks directory
205
+ tasks_dir = get_tasks_dir(repo_root)
206
+ found = find_task_by_name(target_dir, tasks_dir)
207
+ if found:
208
+ return found
209
+
210
+ # Fallback to treating as relative path
211
+ return repo_root / Path(normalized)
212
+
213
+
214
+ # =============================================================================
215
+ # Lifecycle Hooks
216
+ # =============================================================================
217
+
218
+ def run_task_hooks(event: str, task_json_path: Path, repo_root: Path) -> None:
219
+ """Run lifecycle hooks for a task event.
220
+
221
+ Args:
222
+ event: Event name (e.g. "after_create").
223
+ task_json_path: Absolute path to the task's task.json.
224
+ repo_root: Repository root for cwd and config lookup.
225
+ """
226
+ import os
227
+ import subprocess
228
+
229
+ from .config import get_hooks
230
+ from .log import Colors, colored
231
+
232
+ commands = get_hooks(event, repo_root)
233
+ if not commands:
234
+ return
235
+
236
+ env = {**os.environ, "TASK_JSON_PATH": str(task_json_path)}
237
+
238
+ for cmd in commands:
239
+ try:
240
+ result = subprocess.run(
241
+ cmd,
242
+ shell=True,
243
+ cwd=repo_root,
244
+ env=env,
245
+ capture_output=True,
246
+ text=True,
247
+ encoding="utf-8",
248
+ errors="replace",
249
+ )
250
+ if result.returncode != 0:
251
+ print(
252
+ colored(f"[WARN] Hook failed ({event}): {cmd}", Colors.YELLOW),
253
+ file=sys.stderr,
254
+ )
255
+ if result.stderr.strip():
256
+ print(f" {result.stderr.strip()}", file=sys.stderr)
257
+ except Exception as e:
258
+ print(
259
+ colored(f"[WARN] Hook error ({event}): {cmd} — {e}", Colors.YELLOW),
260
+ file=sys.stderr,
261
+ )
262
+
263
+
264
+ # =============================================================================
265
+ # Main Entry (for testing)
266
+ # =============================================================================
267
+
268
+ if __name__ == "__main__":
269
+ repo = get_repo_root()
270
+ tasks = get_tasks_dir(repo)
271
+
272
+ print(f"Tasks dir: {tasks}")
273
+ print(f"is_safe_task_path('.cviauto/tasks/test'): {is_safe_task_path('.cviauto/tasks/test', repo)}")
274
+ print(f"is_safe_task_path('../test'): {is_safe_task_path('../test', repo)}")
@@ -0,0 +1,112 @@
1
+ """
2
+ Task data access layer.
3
+
4
+ Single source of truth for loading and iterating task directories.
5
+ Replaces scattered task.json parsing across 9+ files.
6
+
7
+ Provides:
8
+ load_task — Load a single task by directory path
9
+ iter_active_tasks — Iterate all non-archived tasks (sorted)
10
+ get_all_statuses — Get {dir_name: status} map for children progress
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ from collections.abc import Iterator
16
+ from pathlib import Path
17
+
18
+ from .io import read_json
19
+ from .paths import FILE_TASK_JSON
20
+ from .types import TaskInfo
21
+
22
+
23
+ def load_task(task_dir: Path) -> TaskInfo | None:
24
+ """Load task from a directory containing task.json.
25
+
26
+ Args:
27
+ task_dir: Absolute path to the task directory.
28
+
29
+ Returns:
30
+ TaskInfo if task.json exists and is valid, None otherwise.
31
+ """
32
+ task_json = task_dir / FILE_TASK_JSON
33
+ if not task_json.is_file():
34
+ return None
35
+
36
+ data = read_json(task_json)
37
+ if not data:
38
+ return None
39
+
40
+ return TaskInfo(
41
+ dir_name=task_dir.name,
42
+ directory=task_dir,
43
+ title=data.get("title") or data.get("name") or "unknown",
44
+ status=data.get("status", "unknown"),
45
+ assignee=data.get("assignee", ""),
46
+ priority=data.get("priority", "P2"),
47
+ children=tuple(data.get("children", [])),
48
+ parent=data.get("parent"),
49
+ package=data.get("package"),
50
+ raw=data,
51
+ )
52
+
53
+
54
+ def iter_active_tasks(tasks_dir: Path) -> Iterator[TaskInfo]:
55
+ """Iterate all active (non-archived) tasks, sorted by directory name.
56
+
57
+ Skips the "archive" directory and directories without valid task.json.
58
+
59
+ Args:
60
+ tasks_dir: Path to the tasks directory.
61
+
62
+ Yields:
63
+ TaskInfo for each valid task.
64
+ """
65
+ if not tasks_dir.is_dir():
66
+ return
67
+
68
+ for d in sorted(tasks_dir.iterdir()):
69
+ if not d.is_dir() or d.name == "archive":
70
+ continue
71
+ info = load_task(d)
72
+ if info is not None:
73
+ yield info
74
+
75
+
76
+ def get_all_statuses(tasks_dir: Path) -> dict[str, str]:
77
+ """Get a {dir_name: status} mapping for all active tasks.
78
+
79
+ Useful for computing children progress without loading full TaskInfo.
80
+
81
+ Args:
82
+ tasks_dir: Path to the tasks directory.
83
+
84
+ Returns:
85
+ Dict mapping directory names to status strings.
86
+ """
87
+ return {t.dir_name: t.status for t in iter_active_tasks(tasks_dir)}
88
+
89
+
90
+ def children_progress(
91
+ children: tuple[str, ...] | list[str],
92
+ all_statuses: dict[str, str],
93
+ ) -> str:
94
+ """Format children progress string like " [2/3 done]".
95
+
96
+ Args:
97
+ children: List of child directory names.
98
+ all_statuses: Status map from get_all_statuses().
99
+
100
+ Returns:
101
+ Formatted string, or "" if no children.
102
+ """
103
+ if not children:
104
+ return ""
105
+ # A child missing from active statuses has been archived (cmd_archive
106
+ # sets status=completed before moving the dir). Count it as done so
107
+ # parent progress doesn't regress when children are archived.
108
+ done = sum(
109
+ 1 for c in children
110
+ if c not in all_statuses or all_statuses.get(c) in ("completed", "done")
111
+ )
112
+ return f" [{done}/{len(children)} done]"
@@ -0,0 +1,110 @@
1
+ """
2
+ Core type definitions for Trellis task data.
3
+
4
+ Provides:
5
+ TaskData — TypedDict for task.json shape (read-path type hints only)
6
+ TaskInfo — Frozen dataclass for loaded task (the public API type)
7
+ AgentRecord — TypedDict for registry.json agent entries
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from dataclasses import dataclass
13
+ from pathlib import Path
14
+ from typing import TypedDict
15
+
16
+
17
+ # =============================================================================
18
+ # task.json shape (TypedDict — used only for read-path type hints)
19
+ # =============================================================================
20
+
21
+ class TaskData(TypedDict, total=False):
22
+ """Shape of task.json on disk.
23
+
24
+ Used only for type annotations when reading task.json.
25
+ Writes must use the original dict to avoid losing unknown fields.
26
+ """
27
+
28
+ id: str
29
+ name: str
30
+ title: str
31
+ description: str
32
+ status: str
33
+ dev_type: str
34
+ scope: str | None
35
+ package: str | None
36
+ priority: str
37
+ creator: str
38
+ assignee: str
39
+ createdAt: str
40
+ completedAt: str | None
41
+ branch: str | None
42
+ base_branch: str | None
43
+ worktree_path: str | None
44
+ commit: str | None
45
+ pr_url: str | None
46
+ subtasks: list[str]
47
+ children: list[str]
48
+ parent: str | None
49
+ relatedFiles: list[str]
50
+ notes: str
51
+ meta: dict
52
+
53
+
54
+ # =============================================================================
55
+ # Loaded task object (frozen dataclass — the public API type)
56
+ # =============================================================================
57
+
58
+ @dataclass(frozen=True)
59
+ class TaskInfo:
60
+ """Immutable view of a loaded task.
61
+
62
+ Created by load_task() / iter_active_tasks().
63
+ Contains the commonly accessed fields; the original dict
64
+ is preserved in `raw` for write-back and uncommon field access.
65
+ """
66
+
67
+ dir_name: str
68
+ directory: Path
69
+ title: str
70
+ status: str
71
+ assignee: str
72
+ priority: str
73
+ children: tuple[str, ...]
74
+ parent: str | None
75
+ package: str | None
76
+ raw: dict # original dict — use for writes and uncommon fields
77
+
78
+ @property
79
+ def name(self) -> str:
80
+ """Task name (id or name field)."""
81
+ return self.raw.get("name") or self.raw.get("id") or self.dir_name
82
+
83
+ @property
84
+ def description(self) -> str:
85
+ return self.raw.get("description", "")
86
+
87
+ @property
88
+ def branch(self) -> str | None:
89
+ return self.raw.get("branch")
90
+
91
+ @property
92
+ def meta(self) -> dict:
93
+ return self.raw.get("meta", {})
94
+
95
+
96
+ # =============================================================================
97
+ # registry.json agent entry
98
+ # =============================================================================
99
+
100
+ class AgentRecord(TypedDict, total=False):
101
+ """Shape of an agent entry in registry.json."""
102
+
103
+ id: str
104
+ pid: int
105
+ task_dir: str
106
+ worktree_path: str
107
+ branch: str
108
+ platform: str
109
+ started_at: str
110
+ status: str
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Workflow Phase Extraction.
5
+
6
+ Extracts step-level content from .cviauto/workflow.md and optionally filters
7
+ platform-specific blocks.
8
+
9
+ Platform marker syntax in workflow.md:
10
+
11
+ [Claude Code, Cursor, ...]
12
+ agent-capable content
13
+ [/Claude Code, Cursor, ...]
14
+
15
+ Provides:
16
+ get_phase_index - Extract the Phase Index section (no --step)
17
+ get_step - Extract a single step (#### X.X) section
18
+ filter_platform - Strip platform blocks that don't include the given name
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import re
24
+
25
+ from .paths import DIR_WORKFLOW, get_repo_root
26
+
27
+
28
+ def _workflow_md_path():
29
+ return get_repo_root() / DIR_WORKFLOW / "workflow.md"
30
+
31
+ # Match a line that *is* a platform marker: "[A, B, C]" or "[/A, B, C]"
32
+ _MARKER_RE = re.compile(r"^\[(/?)([A-Za-z][^\[\]]*)\]\s*$")
33
+
34
+ # Step heading: "#### 1.0 Title" or "#### 1.0 ..."
35
+ _STEP_HEADING_RE = re.compile(r"^####\s+(\d+\.\d+)\b.*$")
36
+
37
+ # Phase Index starts here; Phase 1/2/3 step bodies follow; ends at Breadcrumbs.
38
+ _PHASE_INDEX_HEADING = "## Phase Index"
39
+
40
+
41
+ def _read_workflow() -> str:
42
+ path = _workflow_md_path()
43
+ if not path.exists():
44
+ raise FileNotFoundError(f"workflow.md not found: {path}")
45
+ return path.read_text(encoding="utf-8")
46
+
47
+
48
+ def _parse_marker(line: str) -> tuple[bool, list[str]] | None:
49
+ """Parse a platform marker line.
50
+
51
+ Returns:
52
+ (is_closing, [platform_names]) if line is a marker, else None.
53
+ """
54
+ m = _MARKER_RE.match(line)
55
+ if not m:
56
+ return None
57
+ is_closing = m.group(1) == "/"
58
+ names = [p.strip() for p in m.group(2).split(",") if p.strip()]
59
+ return is_closing, names
60
+
61
+
62
+ def get_phase_index() -> str:
63
+ """Return the compact Phase Index summary from workflow.md.
64
+
65
+ SessionStart and no-step phase context use this small summary as their
66
+ orientation payload. Detailed Phase 1/2/3 instructions are loaded with
67
+ ``get_step`` on demand. ``[workflow-state:STATUS]`` tag blocks are
68
+ consumed by the per-turn hook, so they're stripped from this output.
69
+ """
70
+ text = _read_workflow()
71
+ lines = text.splitlines()
72
+
73
+ start: int | None = None
74
+ end: int | None = None
75
+ for i, line in enumerate(lines):
76
+ stripped = line.strip()
77
+ if start is None and stripped == _PHASE_INDEX_HEADING:
78
+ start = i
79
+ continue
80
+ if start is not None and stripped == "## Phase 1: Plan":
81
+ end = i
82
+ break
83
+
84
+ if start is None:
85
+ return ""
86
+ if end is None:
87
+ end = len(lines)
88
+
89
+ section = "\n".join(lines[start:end]).rstrip()
90
+ # Strip [workflow-state:STATUS]...[/workflow-state:STATUS] blocks since
91
+ # they're injected separately by inject-workflow-state.py per-turn.
92
+ import re as _re
93
+ tag_re = _re.compile(
94
+ r"\[workflow-state:([A-Za-z0-9_-]+)\]\s*\n.*?\n\s*\[/workflow-state:\1\]\n?",
95
+ _re.DOTALL,
96
+ )
97
+ return tag_re.sub("", section).rstrip() + "\n"
98
+
99
+
100
+ def get_step(step_id: str) -> str:
101
+ """Return the `#### X.X` section matching step_id (header + body).
102
+
103
+ Body ends at the next `####` or `---` or `##` heading (whichever comes first).
104
+ """
105
+ text = _read_workflow()
106
+ lines = text.splitlines()
107
+
108
+ start: int | None = None
109
+ for i, line in enumerate(lines):
110
+ m = _STEP_HEADING_RE.match(line)
111
+ if m and m.group(1) == step_id:
112
+ start = i
113
+ break
114
+ if start is None:
115
+ return ""
116
+
117
+ end: int = len(lines)
118
+ for j in range(start + 1, len(lines)):
119
+ line = lines[j]
120
+ if line.startswith("#### "):
121
+ end = j
122
+ break
123
+ if line.startswith("## "):
124
+ end = j
125
+ break
126
+ # Horizontal rule at column 0
127
+ if line.strip() == "---":
128
+ end = j
129
+ break
130
+
131
+ return "\n".join(lines[start:end]).rstrip() + "\n"
132
+
133
+
134
+ def _platform_matches(platform: str, block_names: list[str]) -> bool:
135
+ """Case-insensitive fuzzy match: accept 'cursor', 'Cursor', 'claude-code', 'Claude Code'."""
136
+ needle = platform.lower().replace("-", "").replace("_", "").replace(" ", "")
137
+ for name in block_names:
138
+ hay = name.lower().replace("-", "").replace("_", "").replace(" ", "")
139
+ if needle == hay:
140
+ return True
141
+ return False
142
+
143
+
144
+ def resolve_effective_platform(platform: str, config: dict) -> str:
145
+ """Map ``codex`` to a dispatch-mode-namespaced virtual platform name.
146
+
147
+ When ``--platform codex`` is passed, return ``"codex-inline"`` (default)
148
+ or ``"codex-sub-agent"`` based on ``.cviauto/config.yaml`` ``codex.dispatch_mode``.
149
+ ``filter_platform`` then surfaces blocks whose marker lists include the
150
+ namespaced name (e.g. ``[codex-sub-agent, ...]`` or ``[codex-inline, Kilo,
151
+ Antigravity, Devin]``).
152
+
153
+ Default is ``inline`` because Codex sub-agents run with ``fork_turns="none"``
154
+ isolation and can't inherit the parent session's task context — inline
155
+ keeps the main agent in charge so context isn't lost. Invalid / missing
156
+ values also fall back to inline.
157
+
158
+ Other platforms are returned unchanged.
159
+ """
160
+ if platform == "codex":
161
+ mode = "inline"
162
+ codex_cfg = config.get("codex") if isinstance(config, dict) else None
163
+ if isinstance(codex_cfg, dict):
164
+ cfg_mode = codex_cfg.get("dispatch_mode")
165
+ if cfg_mode in ("inline", "sub-agent"):
166
+ mode = cfg_mode
167
+ return f"codex-{mode}"
168
+ return platform
169
+
170
+
171
+ def filter_platform(content: str, platform: str) -> str:
172
+ """Keep lines outside any `[...]` block + lines inside blocks that include platform.
173
+
174
+ Marker lines themselves are dropped from the output.
175
+ """
176
+ lines = content.splitlines()
177
+ out: list[str] = []
178
+
179
+ in_block = False
180
+ keep_block = False
181
+
182
+ for line in lines:
183
+ marker = _parse_marker(line)
184
+ if marker is not None:
185
+ is_closing, names = marker
186
+ if not is_closing:
187
+ in_block = True
188
+ keep_block = _platform_matches(platform, names)
189
+ else:
190
+ in_block = False
191
+ keep_block = False
192
+ continue # drop the marker line itself
193
+
194
+ if in_block:
195
+ if keep_block:
196
+ out.append(line)
197
+ continue
198
+ out.append(line)
199
+
200
+ # Collapse runs of 3+ blank lines that may arise from dropped markers
201
+ collapsed: list[str] = []
202
+ blank_run = 0
203
+ for line in out:
204
+ if line.strip() == "":
205
+ blank_run += 1
206
+ if blank_run <= 2:
207
+ collapsed.append(line)
208
+ else:
209
+ blank_run = 0
210
+ collapsed.append(line)
211
+
212
+ return "\n".join(collapsed).rstrip() + "\n"