@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,786 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Multi-Platform Sub-Agent Context Injection Hook
5
+
6
+ Injects task-specific context when sub-agents (implement, check, research) are spawned.
7
+
8
+ Core Design Philosophy:
9
+ - Hook is responsible for injecting all context, subagent works autonomously with complete info
10
+ - Each agent has a dedicated jsonl file defining its context
11
+ - No resume needed, no segmentation, behavior controlled by code not prompt
12
+
13
+ Trigger: PreToolUse (before Task tool call)
14
+
15
+ Context Source: Trellis active task resolver points to task directory
16
+ - implement.jsonl - Implement agent dedicated context
17
+ - check.jsonl - Check agent dedicated context
18
+ - prd.md - Requirements document
19
+ - design.md - Technical design for complex tasks
20
+ - implement.md - Execution plan for complex tasks
21
+ - codex-review-output.txt - Code Review results
22
+ """
23
+ from __future__ import annotations
24
+
25
+ # IMPORTANT: Suppress all warnings FIRST
26
+ import warnings
27
+ warnings.filterwarnings("ignore")
28
+
29
+ import json
30
+ import os
31
+ import sys
32
+ from pathlib import Path
33
+ from typing import Any
34
+
35
+ # IMPORTANT: Force stdout to use UTF-8 on Windows
36
+ # This fixes UnicodeEncodeError when outputting non-ASCII characters
37
+ if sys.platform.startswith("win"):
38
+ import io as _io
39
+ if hasattr(sys.stdout, "reconfigure"):
40
+ sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr]
41
+ elif hasattr(sys.stdout, "detach"):
42
+ sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr]
43
+
44
+
45
+ # =============================================================================
46
+ # Path Constants (change here to rename directories)
47
+ # =============================================================================
48
+
49
+ DIR_WORKFLOW = ".cviauto"
50
+ DIR_SPEC = "spec"
51
+ FILE_TASK_JSON = "task.json"
52
+
53
+ # =============================================================================
54
+ # Subagent Constants (change here to rename subagent types)
55
+ # =============================================================================
56
+
57
+ AGENT_IMPLEMENT = "cviauto-implement"
58
+ AGENT_CHECK = "cviauto-check"
59
+ AGENT_RESEARCH = "cviauto-research"
60
+ LEGACY_AGENT_IMPLEMENT = "trellis-implement"
61
+ LEGACY_AGENT_CHECK = "trellis-check"
62
+ LEGACY_AGENT_RESEARCH = "trellis-research"
63
+
64
+ # Agents that require a task directory
65
+ AGENTS_REQUIRE_TASK = (
66
+ AGENT_IMPLEMENT,
67
+ AGENT_CHECK,
68
+ LEGACY_AGENT_IMPLEMENT,
69
+ LEGACY_AGENT_CHECK,
70
+ )
71
+ # All supported agents
72
+ AGENTS_ALL = (
73
+ AGENT_IMPLEMENT,
74
+ AGENT_CHECK,
75
+ AGENT_RESEARCH,
76
+ LEGACY_AGENT_IMPLEMENT,
77
+ LEGACY_AGENT_CHECK,
78
+ LEGACY_AGENT_RESEARCH,
79
+ )
80
+
81
+
82
+ def find_repo_root(start_path: str) -> str | None:
83
+ """
84
+ Find git repo root from start_path upwards
85
+
86
+ Returns:
87
+ Repo root path, or None if not found
88
+ """
89
+ current = Path(start_path).resolve()
90
+ while current != current.parent:
91
+ if (current / ".git").exists():
92
+ return str(current)
93
+ current = current.parent
94
+ return None
95
+
96
+
97
+ def _detect_platform(input_data: dict) -> str | None:
98
+ if isinstance(input_data.get("cursor_version"), str):
99
+ return "cursor"
100
+ env_map = {
101
+ "CLAUDE_PROJECT_DIR": "claude",
102
+ "CURSOR_PROJECT_DIR": "cursor",
103
+ "CODEBUDDY_PROJECT_DIR": "codebuddy",
104
+ "FACTORY_PROJECT_DIR": "droid",
105
+ "GEMINI_PROJECT_DIR": "gemini",
106
+ "QODER_PROJECT_DIR": "qoder",
107
+ "KIRO_PROJECT_DIR": "kiro",
108
+ "COPILOT_PROJECT_DIR": "copilot",
109
+ }
110
+ for env_name, platform in env_map.items():
111
+ if os.environ.get(env_name):
112
+ return platform
113
+ script_parts = set(Path(sys.argv[0]).parts)
114
+ if ".claude" in script_parts:
115
+ return "claude"
116
+ if ".cursor" in script_parts:
117
+ return "cursor"
118
+ if ".gemini" in script_parts:
119
+ return "gemini"
120
+ if ".qoder" in script_parts:
121
+ return "qoder"
122
+ if ".codebuddy" in script_parts:
123
+ return "codebuddy"
124
+ if ".factory" in script_parts:
125
+ return "droid"
126
+ if ".kiro" in script_parts:
127
+ return "kiro"
128
+ return None
129
+
130
+
131
+ def get_current_task(repo_root: str, input_data: dict) -> str | None:
132
+ """Resolve current task directory through the unified active task resolver."""
133
+ scripts_dir = Path(repo_root) / DIR_WORKFLOW / "scripts"
134
+ if str(scripts_dir) not in sys.path:
135
+ sys.path.insert(0, str(scripts_dir))
136
+ try:
137
+ from common.active_task import resolve_active_task # type: ignore[import-not-found]
138
+ except Exception:
139
+ return None
140
+
141
+ active = resolve_active_task(
142
+ Path(repo_root),
143
+ input_data,
144
+ platform=_detect_platform(input_data),
145
+ )
146
+ return active.task_path
147
+
148
+
149
+ def read_file_content(base_path: str, file_path: str) -> str | None:
150
+ """Read file content, return None if file doesn't exist"""
151
+ full_path = os.path.join(base_path, file_path)
152
+ if os.path.exists(full_path) and os.path.isfile(full_path):
153
+ try:
154
+ with open(full_path, "r", encoding="utf-8") as f:
155
+ return f.read()
156
+ except Exception:
157
+ return None
158
+ return None
159
+
160
+
161
+ def read_directory_contents(
162
+ base_path: str, dir_path: str, max_files: int = 20
163
+ ) -> list[tuple[str, str]]:
164
+ """
165
+ Read all .md files in a directory
166
+
167
+ Args:
168
+ base_path: Base path (usually repo_root)
169
+ dir_path: Directory relative path
170
+ max_files: Max files to read (prevent huge directories)
171
+
172
+ Returns:
173
+ [(file_path, content), ...]
174
+ """
175
+ full_path = os.path.join(base_path, dir_path)
176
+ if not os.path.exists(full_path) or not os.path.isdir(full_path):
177
+ return []
178
+
179
+ results = []
180
+ try:
181
+ # Only read .md files, sorted by filename
182
+ md_files = sorted(
183
+ [
184
+ f
185
+ for f in os.listdir(full_path)
186
+ if f.endswith(".md") and os.path.isfile(os.path.join(full_path, f))
187
+ ]
188
+ )
189
+
190
+ for filename in md_files[:max_files]:
191
+ file_full_path = os.path.join(full_path, filename)
192
+ relative_path = os.path.join(dir_path, filename)
193
+ try:
194
+ with open(file_full_path, "r", encoding="utf-8") as f:
195
+ content = f.read()
196
+ results.append((relative_path, content))
197
+ except Exception:
198
+ continue
199
+ except Exception:
200
+ pass
201
+
202
+ return results
203
+
204
+
205
+ def read_jsonl_entries(base_path: str, jsonl_path: str) -> list[tuple[str, str]]:
206
+ """
207
+ Read all file/directory contents referenced in jsonl file
208
+
209
+ Schema:
210
+ {"file": "path/to/file.md", "reason": "..."}
211
+ {"file": "path/to/dir/", "type": "directory", "reason": "..."}
212
+ {"_example": "..."} # seed row — skipped (no `file` field)
213
+
214
+ Rows without a ``file`` field (e.g. the self-describing seed line written
215
+ by ``task.py create`` before the agent has curated entries) are skipped
216
+ silently. If the resulting entry list is empty, a stderr warning is
217
+ emitted so the operator can debug missing context.
218
+
219
+ Returns:
220
+ [(path, content), ...]
221
+ """
222
+ full_path = os.path.join(base_path, jsonl_path)
223
+ if not os.path.exists(full_path):
224
+ print(
225
+ f"[inject-subagent-context] WARN: {jsonl_path} not found — "
226
+ f"sub-agent will receive only task artifacts",
227
+ file=sys.stderr,
228
+ )
229
+ return []
230
+
231
+ results = []
232
+ saw_real_entry = False
233
+ try:
234
+ with open(full_path, "r", encoding="utf-8") as f:
235
+ for line in f:
236
+ line = line.strip()
237
+ if not line:
238
+ continue
239
+ try:
240
+ item = json.loads(line)
241
+ file_path = item.get("file") or item.get("path")
242
+ entry_type = item.get("type", "file")
243
+
244
+ if not file_path:
245
+ # Seed / comment row — skip silently
246
+ continue
247
+
248
+ saw_real_entry = True
249
+ if entry_type == "directory":
250
+ # Read all .md files in directory
251
+ dir_contents = read_directory_contents(base_path, file_path)
252
+ results.extend(dir_contents)
253
+ else:
254
+ # Read single file
255
+ content = read_file_content(base_path, file_path)
256
+ if content:
257
+ results.append((file_path, content))
258
+ except json.JSONDecodeError:
259
+ continue
260
+ except Exception:
261
+ pass
262
+
263
+ if not saw_real_entry:
264
+ print(
265
+ f"[inject-subagent-context] WARN: {jsonl_path} has no curated "
266
+ f"entries (only seed / empty) — sub-agent will receive only "
267
+ f"task artifacts. See workflow.md planning artifact guidance.",
268
+ file=sys.stderr,
269
+ )
270
+
271
+ return results
272
+
273
+
274
+
275
+
276
+ def get_agent_context(repo_root: str, task_dir: str, agent_type: str) -> str:
277
+ """
278
+ Get context from {agent_type}.jsonl for the specified agent.
279
+ Only reads implement.jsonl or check.jsonl (the two JSONL files the task system creates).
280
+ """
281
+ context_parts = []
282
+
283
+ agent_jsonl = f"{task_dir}/{agent_type}.jsonl"
284
+ for file_path, content in read_jsonl_entries(repo_root, agent_jsonl):
285
+ context_parts.append(f"=== {file_path} ===\n{content}")
286
+
287
+ return "\n\n".join(context_parts)
288
+
289
+
290
+ def get_implement_context(repo_root: str, task_dir: str) -> str:
291
+ """
292
+ Complete context for Implement Agent
293
+
294
+ Read order:
295
+ 1. All files in implement.jsonl (spec/research manifests)
296
+ 2. prd.md (requirements)
297
+ 3. design.md if present (technical design)
298
+ 4. implement.md if present (execution plan)
299
+ """
300
+ context_parts = []
301
+
302
+ # 1. Read implement.jsonl
303
+ base_context = get_agent_context(repo_root, task_dir, "implement")
304
+ if base_context:
305
+ context_parts.append(base_context)
306
+
307
+ # 2. Requirements document
308
+ prd_content = read_file_content(repo_root, f"{task_dir}/prd.md")
309
+ if prd_content:
310
+ context_parts.append(f"=== {task_dir}/prd.md (Requirements) ===\n{prd_content}")
311
+
312
+ # 3. Technical design for complex tasks
313
+ design_content = read_file_content(repo_root, f"{task_dir}/design.md")
314
+ if design_content:
315
+ context_parts.append(
316
+ f"=== {task_dir}/design.md (Technical Design) ===\n{design_content}"
317
+ )
318
+
319
+ # 4. Execution plan for complex tasks
320
+ implement_plan_content = read_file_content(repo_root, f"{task_dir}/implement.md")
321
+ if implement_plan_content:
322
+ context_parts.append(
323
+ f"=== {task_dir}/implement.md (Execution Plan) ===\n{implement_plan_content}"
324
+ )
325
+
326
+ return "\n\n".join(context_parts)
327
+
328
+
329
+ def get_check_context(repo_root: str, task_dir: str) -> str:
330
+ """
331
+ Context for Check Agent: check.jsonl + task artifacts.
332
+ """
333
+ context_parts = []
334
+
335
+ for file_path, content in read_jsonl_entries(repo_root, f"{task_dir}/check.jsonl"):
336
+ context_parts.append(f"=== {file_path} ===\n{content}")
337
+
338
+ prd_content = read_file_content(repo_root, f"{task_dir}/prd.md")
339
+ if prd_content:
340
+ context_parts.append(f"=== {task_dir}/prd.md (Requirements) ===\n{prd_content}")
341
+
342
+ design_content = read_file_content(repo_root, f"{task_dir}/design.md")
343
+ if design_content:
344
+ context_parts.append(
345
+ f"=== {task_dir}/design.md (Technical Design) ===\n{design_content}"
346
+ )
347
+
348
+ implement_plan_content = read_file_content(repo_root, f"{task_dir}/implement.md")
349
+ if implement_plan_content:
350
+ context_parts.append(
351
+ f"=== {task_dir}/implement.md (Execution Plan) ===\n{implement_plan_content}"
352
+ )
353
+
354
+ return "\n\n".join(context_parts)
355
+
356
+
357
+ def get_finish_context(repo_root: str, task_dir: str) -> str:
358
+ """
359
+ Context for Finish phase: reuses check.jsonl + prd.md
360
+ (Finish is a final check, same context source.)
361
+ """
362
+ return get_check_context(repo_root, task_dir)
363
+
364
+
365
+
366
+ def build_implement_prompt(original_prompt: str, context: str) -> str:
367
+ """Build complete prompt for Implement"""
368
+ return f"""<!-- trellis-hook-injected -->
369
+ # Implement Agent Task
370
+
371
+ You are the Implement Agent in the Multi-Agent Pipeline.
372
+
373
+ ## Your Context
374
+
375
+ All the information you need has been prepared for you:
376
+
377
+ {context}
378
+
379
+ ---
380
+
381
+ ## Your Task
382
+
383
+ {original_prompt}
384
+
385
+ ---
386
+
387
+ ## Workflow
388
+
389
+ 1. **Understand specs** - All dev specs are injected above, understand them
390
+ 2. **Understand task artifacts** - Read requirements, technical design if present, and execution plan if present
391
+ 3. **Implement feature** - Implement following specs and task artifacts
392
+ 4. **Self-check** - Ensure code quality against check specs
393
+
394
+ ## Important Constraints
395
+
396
+ - Do NOT execute git commit, only code modifications
397
+ - Follow all dev specs injected above
398
+ - Report list of modified/created files when done"""
399
+
400
+
401
+ def build_check_prompt(original_prompt: str, context: str) -> str:
402
+ """Build complete prompt for Check"""
403
+ return f"""<!-- trellis-hook-injected -->
404
+ # Check Agent Task
405
+
406
+ You are the Check Agent in the Multi-Agent Pipeline (code and cross-layer checker).
407
+
408
+ ## Your Context
409
+
410
+ All check specs and dev specs you need:
411
+
412
+ {context}
413
+
414
+ ---
415
+
416
+ ## Your Task
417
+
418
+ {original_prompt}
419
+
420
+ ---
421
+
422
+ ## Workflow
423
+
424
+ 1. **Get changes** - Run `git diff --name-only` and `git diff` to get code changes
425
+ 2. **Check against specs** - Check item by item against specs above
426
+ 3. **Self-fix** - Fix issues directly, don't just report
427
+ 4. **Run verification** - Run project's lint and typecheck commands
428
+
429
+ ## Important Constraints
430
+
431
+ - Fix issues yourself, don't just report
432
+ - Must execute complete checklist in check specs
433
+ - Pay special attention to impact radius analysis (L1-L5)"""
434
+
435
+
436
+ def build_finish_prompt(original_prompt: str, context: str) -> str:
437
+ """Build complete prompt for Finish (final check before PR)"""
438
+ return f"""<!-- trellis-hook-injected -->
439
+ # Finish Agent Task
440
+
441
+ You are performing the final check before creating a PR.
442
+
443
+ ## Your Context
444
+
445
+ Finish checklist and requirements:
446
+
447
+ {context}
448
+
449
+ ---
450
+
451
+ ## Your Task
452
+
453
+ {original_prompt}
454
+
455
+ ---
456
+
457
+ ## Workflow
458
+
459
+ 1. **Review changes** - Run `git diff --name-only` to see all changed files
460
+ 2. **Verify task artifacts** - Check requirements in prd.md and, when present, design.md / implement.md
461
+ 3. **Spec sync** - Analyze whether changes introduce new patterns, contracts, or conventions
462
+ - If new pattern/convention found: read target spec file → update it → update index.md if needed
463
+ - If infra/cross-layer change: follow the 7-section mandatory template from update-spec.md
464
+ - If pure code fix with no new patterns: skip this step
465
+ 4. **Run final checks** - Execute lint and typecheck
466
+ 5. **Confirm ready** - Ensure code is ready for PR
467
+
468
+ ## Important Constraints
469
+
470
+ - You MAY update spec files when gaps are detected (use update-spec.md as guide)
471
+ - MUST read the target spec file BEFORE editing (avoid duplicating existing content)
472
+ - Do NOT update specs for trivial changes (typos, formatting, obvious fixes)
473
+ - If critical CODE issues found, report them clearly (fix specs, not code)
474
+ - Verify all acceptance criteria in prd.md are met
475
+ - Verify design.md and implement.md constraints when those files are present"""
476
+
477
+
478
+
479
+ def get_research_context(repo_root: str, task_dir: str | None) -> str:
480
+ """
481
+ Context for Research Agent — project structure overview for spec directories.
482
+
483
+ `task_dir` kept for signature parity with get_implement_context / get_check_context
484
+ so the dispatcher can call them uniformly.
485
+ """
486
+ _ = task_dir
487
+ context_parts = []
488
+
489
+ # 1. Project structure overview (dynamically discover spec directories)
490
+ spec_path = f"{DIR_WORKFLOW}/{DIR_SPEC}"
491
+ spec_root = Path(repo_root) / DIR_WORKFLOW / DIR_SPEC
492
+
493
+ # Build spec tree dynamically
494
+ tree_lines = [f"{spec_path}/"]
495
+ if spec_root.is_dir():
496
+ pkg_dirs = sorted(d for d in spec_root.iterdir() if d.is_dir())
497
+ for i, pkg_dir in enumerate(pkg_dirs):
498
+ is_last = i == len(pkg_dirs) - 1
499
+ prefix = "└── " if is_last else "├── "
500
+ layers = sorted(d.name for d in pkg_dir.iterdir() if d.is_dir())
501
+ layer_info = f" ({', '.join(layers)})" if layers else ""
502
+ tree_lines.append(f"{prefix}{pkg_dir.name}/{layer_info}")
503
+
504
+ spec_tree = "\n".join(tree_lines)
505
+
506
+ project_structure = f"""## Project Spec Directory Structure
507
+
508
+ ```
509
+ {spec_tree}
510
+ ```
511
+
512
+ To get structured package info, run: `python3 ./{DIR_WORKFLOW}/scripts/get_context.py --mode packages`
513
+
514
+ ## Search Tips
515
+
516
+ - Spec files: `{spec_path}/**/*.md`
517
+ - Code search: Use Glob and Grep tools
518
+ - Tech solutions: Use mcp__exa__web_search_exa or mcp__exa__get_code_context_exa"""
519
+
520
+ context_parts.append(project_structure)
521
+
522
+ return "\n\n".join(context_parts)
523
+
524
+
525
+ def build_research_prompt(original_prompt: str, context: str) -> str:
526
+ """Build complete prompt for Research"""
527
+ return f"""# Research Agent Task
528
+
529
+ You are the Research Agent in the Multi-Agent Pipeline (search researcher).
530
+
531
+ ## Core Principle
532
+
533
+ **You do one thing: find and explain information.**
534
+
535
+ You are a documenter, not a reviewer.
536
+
537
+ ## Project Info
538
+
539
+ {context}
540
+
541
+ ---
542
+
543
+ ## Your Task
544
+
545
+ {original_prompt}
546
+
547
+ ---
548
+
549
+ ## Workflow
550
+
551
+ 1. **Understand query** - Determine search type (internal/external) and scope
552
+ 2. **Plan search** - List search steps for complex queries
553
+ 3. **Execute search** - Execute multiple independent searches in parallel
554
+ 4. **Organize results** - Output structured report
555
+
556
+ ## Search Tools
557
+
558
+ | Tool | Purpose |
559
+ |------|---------|
560
+ | Glob | Search by filename pattern |
561
+ | Grep | Search by content |
562
+ | Read | Read file content |
563
+ | mcp__exa__web_search_exa | External web search |
564
+ | mcp__exa__get_code_context_exa | External code/doc search |
565
+
566
+ ## Strict Boundaries
567
+
568
+ **Only allowed**: Describe what exists, where it is, how it works
569
+
570
+ **Forbidden** (unless explicitly asked):
571
+ - Suggest improvements
572
+ - Criticize implementation
573
+ - Recommend refactoring
574
+ - Modify any files
575
+
576
+ ## Report Format
577
+
578
+ Provide structured search results including:
579
+ - List of files found (with paths)
580
+ - Code pattern analysis (if applicable)
581
+ - Related spec documents
582
+ - External references (if any)"""
583
+
584
+
585
+ def _string_value(value: Any) -> str:
586
+ if isinstance(value, str):
587
+ stripped = value.strip()
588
+ return stripped
589
+ return ""
590
+
591
+
592
+ def _extract_subagent_name(value: Any) -> str:
593
+ """Extract a sub-agent name from common platform encodings.
594
+
595
+ Cursor's native Task args encode custom sub-agents as a protobuf oneof,
596
+ which can appear in hook JSON as either ``{"custom": {"name": "..."}}``
597
+ or ``{"type": {"case": "custom", "value": {"name": "..."}}}``.
598
+ """
599
+ direct = _string_value(value)
600
+ if direct:
601
+ return direct
602
+
603
+ if not isinstance(value, dict):
604
+ return ""
605
+
606
+ for key in ("name", "subagent_type_name", "subagentTypeName"):
607
+ direct = _string_value(value.get(key))
608
+ if direct:
609
+ return direct
610
+
611
+ custom = value.get("custom")
612
+ if isinstance(custom, dict):
613
+ custom_name = _string_value(custom.get("name"))
614
+ if custom_name:
615
+ return custom_name
616
+
617
+ oneof = value.get("type")
618
+ if isinstance(oneof, dict):
619
+ case_name = _string_value(oneof.get("case"))
620
+ if case_name == "custom":
621
+ nested_value = oneof.get("value")
622
+ if isinstance(nested_value, dict):
623
+ custom_name = _string_value(nested_value.get("name"))
624
+ if custom_name:
625
+ return custom_name
626
+ if case_name:
627
+ return case_name
628
+
629
+ case_name = _string_value(value.get("case"))
630
+ if case_name == "custom":
631
+ nested_value = value.get("value")
632
+ if isinstance(nested_value, dict):
633
+ custom_name = _string_value(nested_value.get("name"))
634
+ if custom_name:
635
+ return custom_name
636
+ if case_name:
637
+ return case_name
638
+
639
+ for agent_name in AGENTS_ALL:
640
+ if agent_name in value:
641
+ return agent_name
642
+
643
+ return ""
644
+
645
+
646
+ def _extract_subagent_type(tool_input: dict) -> str:
647
+ for key in (
648
+ "subagent_type",
649
+ "subagentType",
650
+ "subagent_type_name",
651
+ "subagentTypeName",
652
+ "agent_type",
653
+ "agentType",
654
+ "name",
655
+ ):
656
+ agent_name = _extract_subagent_name(tool_input.get(key))
657
+ if agent_name:
658
+ return agent_name
659
+ return ""
660
+
661
+
662
+ def _parse_hook_input(input_data: dict) -> tuple[str, str, dict]:
663
+ """Parse hook input across different platform formats.
664
+
665
+ Returns (subagent_type, original_prompt, tool_input).
666
+ Handles:
667
+ - Claude Code / Qoder / CodeBuddy / Droid: tool_name=Task|Agent, tool_input.subagent_type
668
+ - Cursor: tool_name=Task|Subagent, tool_input.subagent_type
669
+ - Copilot CLI: toolName=task (camelCase key, lowercase value)
670
+ - Gemini CLI: tool_name IS the agent name (BeforeTool matcher already filtered)
671
+ - Kiro: agentSpawn hook, agent_name field at top level
672
+ """
673
+ tool_input = input_data.get("tool_input", {})
674
+
675
+ # Standard format: Task/Agent tool with subagent_type
676
+ tool_name = input_data.get("tool_name", "") or input_data.get("toolName", "")
677
+ if tool_name.lower() in ("task", "agent", "subagent"):
678
+ return (
679
+ _extract_subagent_type(tool_input),
680
+ tool_input.get("prompt", ""),
681
+ tool_input,
682
+ )
683
+
684
+ # Kiro: agentSpawn hook passes agent_name at top level
685
+ agent_name = input_data.get("agent_name", "")
686
+ if agent_name:
687
+ return agent_name, tool_input.get("prompt", input_data.get("prompt", "")), tool_input
688
+
689
+ # Gemini CLI: BeforeTool where tool_name IS the agent name
690
+ # (matcher already ensured it's one of our agents)
691
+ if tool_name in AGENTS_ALL:
692
+ return tool_name, tool_input.get("prompt", ""), tool_input
693
+
694
+ # Copilot CLI: toolName field (camelCase), value might be the agent name
695
+ tool_name_camel = input_data.get("toolName", "")
696
+ if tool_name_camel in AGENTS_ALL:
697
+ return tool_name_camel, input_data.get("toolArgs", ""), tool_input
698
+
699
+ return "", "", tool_input
700
+
701
+
702
+ def main():
703
+ if os.environ.get("TRELLIS_HOOKS") == "0" or os.environ.get("TRELLIS_DISABLE_HOOKS") == "1":
704
+ sys.exit(0)
705
+
706
+ try:
707
+ input_data = json.load(sys.stdin)
708
+ except json.JSONDecodeError:
709
+ sys.exit(0)
710
+
711
+ subagent_type, original_prompt, tool_input = _parse_hook_input(input_data)
712
+ cwd = input_data.get("cwd", os.getcwd())
713
+
714
+ # Only handle subagent types we care about
715
+ if subagent_type not in AGENTS_ALL:
716
+ sys.exit(0)
717
+
718
+ # Find repo root
719
+ repo_root = find_repo_root(cwd)
720
+ if not repo_root:
721
+ sys.exit(0)
722
+
723
+ # Get current task directory (research doesn't require it)
724
+ task_dir = get_current_task(repo_root, input_data)
725
+
726
+ # implement/check need task directory
727
+ if subagent_type in AGENTS_REQUIRE_TASK:
728
+ if not task_dir:
729
+ sys.exit(0)
730
+ # Check if task directory exists
731
+ task_dir_full = os.path.join(repo_root, task_dir)
732
+ if not os.path.exists(task_dir_full):
733
+ sys.exit(0)
734
+
735
+ # Check for [finish] marker in prompt (check agent with finish context)
736
+ is_finish_phase = "[finish]" in original_prompt.lower()
737
+
738
+ # Get context and build prompt based on subagent type
739
+ if subagent_type == AGENT_IMPLEMENT:
740
+ assert task_dir is not None # validated above
741
+ context = get_implement_context(repo_root, task_dir)
742
+ new_prompt = build_implement_prompt(original_prompt, context)
743
+ elif subagent_type == AGENT_CHECK:
744
+ assert task_dir is not None # validated above
745
+ if is_finish_phase:
746
+ # Finish phase: use finish context (lighter, focused on final verification)
747
+ context = get_finish_context(repo_root, task_dir)
748
+ new_prompt = build_finish_prompt(original_prompt, context)
749
+ else:
750
+ # Regular check phase: use check context (full specs for self-fix loop)
751
+ context = get_check_context(repo_root, task_dir)
752
+ new_prompt = build_check_prompt(original_prompt, context)
753
+ elif subagent_type == AGENT_RESEARCH:
754
+ # Research can work without task directory
755
+ context = get_research_context(repo_root, task_dir)
756
+ new_prompt = build_research_prompt(original_prompt, context)
757
+ else:
758
+ sys.exit(0)
759
+
760
+ if not context:
761
+ sys.exit(0)
762
+
763
+ # Return updated input — use a multi-format output that covers all platforms.
764
+ # Most platforms ignore unrecognized fields, so we include multiple formats.
765
+ # The platform picks whichever fields it understands.
766
+ updated = {**tool_input, "prompt": new_prompt}
767
+ output = {
768
+ # Claude Code / Qoder / CodeBuddy / Droid format
769
+ "hookSpecificOutput": {
770
+ "hookEventName": "PreToolUse",
771
+ "permissionDecision": "allow",
772
+ "updatedInput": updated,
773
+ },
774
+ # Cursor format
775
+ "permission": "allow",
776
+ "updated_input": updated,
777
+ # Gemini format
778
+ "updatedInput": updated,
779
+ }
780
+
781
+ print(json.dumps(output, ensure_ascii=False))
782
+ sys.exit(0)
783
+
784
+
785
+ if __name__ == "__main__":
786
+ main()