@pennixrv/trellis 0.6.17

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 (831) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +168 -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 +299 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/ablate.d.ts +14 -0
  9. package/dist/commands/ablate.d.ts.map +1 -0
  10. package/dist/commands/ablate.js +307 -0
  11. package/dist/commands/ablate.js.map +1 -0
  12. package/dist/commands/channel/adapters/claude.d.ts +53 -0
  13. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  14. package/dist/commands/channel/adapters/claude.js +225 -0
  15. package/dist/commands/channel/adapters/claude.js.map +1 -0
  16. package/dist/commands/channel/adapters/codex.d.ts +93 -0
  17. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  18. package/dist/commands/channel/adapters/codex.js +573 -0
  19. package/dist/commands/channel/adapters/codex.js.map +1 -0
  20. package/dist/commands/channel/adapters/index.d.ts +94 -0
  21. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  22. package/dist/commands/channel/adapters/index.js +116 -0
  23. package/dist/commands/channel/adapters/index.js.map +1 -0
  24. package/dist/commands/channel/adapters/types.d.ts +33 -0
  25. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  26. package/dist/commands/channel/adapters/types.js +2 -0
  27. package/dist/commands/channel/adapters/types.js.map +1 -0
  28. package/dist/commands/channel/agent-loader.d.ts +32 -0
  29. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  30. package/dist/commands/channel/agent-loader.js +158 -0
  31. package/dist/commands/channel/agent-loader.js.map +1 -0
  32. package/dist/commands/channel/context-loader.d.ts +26 -0
  33. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  34. package/dist/commands/channel/context-loader.js +311 -0
  35. package/dist/commands/channel/context-loader.js.map +1 -0
  36. package/dist/commands/channel/context-trust.d.ts +31 -0
  37. package/dist/commands/channel/context-trust.d.ts.map +1 -0
  38. package/dist/commands/channel/context-trust.js +139 -0
  39. package/dist/commands/channel/context-trust.js.map +1 -0
  40. package/dist/commands/channel/context.d.ts +16 -0
  41. package/dist/commands/channel/context.d.ts.map +1 -0
  42. package/dist/commands/channel/context.js +83 -0
  43. package/dist/commands/channel/context.js.map +1 -0
  44. package/dist/commands/channel/create.d.ts +27 -0
  45. package/dist/commands/channel/create.d.ts.map +1 -0
  46. package/dist/commands/channel/create.js +39 -0
  47. package/dist/commands/channel/create.js.map +1 -0
  48. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  49. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  50. package/dist/commands/channel/dev-parse-trace.js +70 -0
  51. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  52. package/dist/commands/channel/guard.d.ts +150 -0
  53. package/dist/commands/channel/guard.d.ts.map +1 -0
  54. package/dist/commands/channel/guard.js +479 -0
  55. package/dist/commands/channel/guard.js.map +1 -0
  56. package/dist/commands/channel/index.d.ts +3 -0
  57. package/dist/commands/channel/index.d.ts.map +1 -0
  58. package/dist/commands/channel/index.js +535 -0
  59. package/dist/commands/channel/index.js.map +1 -0
  60. package/dist/commands/channel/interrupt.d.ts +10 -0
  61. package/dist/commands/channel/interrupt.d.ts.map +1 -0
  62. package/dist/commands/channel/interrupt.js +22 -0
  63. package/dist/commands/channel/interrupt.js.map +1 -0
  64. package/dist/commands/channel/kill.d.ts +7 -0
  65. package/dist/commands/channel/kill.d.ts.map +1 -0
  66. package/dist/commands/channel/kill.js +130 -0
  67. package/dist/commands/channel/kill.js.map +1 -0
  68. package/dist/commands/channel/list.d.ts +17 -0
  69. package/dist/commands/channel/list.d.ts.map +1 -0
  70. package/dist/commands/channel/list.js +233 -0
  71. package/dist/commands/channel/list.js.map +1 -0
  72. package/dist/commands/channel/messages.d.ts +15 -0
  73. package/dist/commands/channel/messages.d.ts.map +1 -0
  74. package/dist/commands/channel/messages.js +245 -0
  75. package/dist/commands/channel/messages.js.map +1 -0
  76. package/dist/commands/channel/rm.d.ts +27 -0
  77. package/dist/commands/channel/rm.d.ts.map +1 -0
  78. package/dist/commands/channel/rm.js +216 -0
  79. package/dist/commands/channel/rm.js.map +1 -0
  80. package/dist/commands/channel/run.d.ts +30 -0
  81. package/dist/commands/channel/run.d.ts.map +1 -0
  82. package/dist/commands/channel/run.js +134 -0
  83. package/dist/commands/channel/run.js.map +1 -0
  84. package/dist/commands/channel/send.d.ts +11 -0
  85. package/dist/commands/channel/send.d.ts.map +1 -0
  86. package/dist/commands/channel/send.js +24 -0
  87. package/dist/commands/channel/send.js.map +1 -0
  88. package/dist/commands/channel/spawn.d.ts +43 -0
  89. package/dist/commands/channel/spawn.d.ts.map +1 -0
  90. package/dist/commands/channel/spawn.js +247 -0
  91. package/dist/commands/channel/spawn.js.map +1 -0
  92. package/dist/commands/channel/store/events.d.ts +22 -0
  93. package/dist/commands/channel/store/events.d.ts.map +1 -0
  94. package/dist/commands/channel/store/events.js +43 -0
  95. package/dist/commands/channel/store/events.js.map +1 -0
  96. package/dist/commands/channel/store/filter.d.ts +3 -0
  97. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  98. package/dist/commands/channel/store/filter.js +2 -0
  99. package/dist/commands/channel/store/filter.js.map +1 -0
  100. package/dist/commands/channel/store/lock.d.ts +23 -0
  101. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  102. package/dist/commands/channel/store/lock.js +99 -0
  103. package/dist/commands/channel/store/lock.js.map +1 -0
  104. package/dist/commands/channel/store/paths.d.ts +77 -0
  105. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  106. package/dist/commands/channel/store/paths.js +272 -0
  107. package/dist/commands/channel/store/paths.js.map +1 -0
  108. package/dist/commands/channel/store/schema.d.ts +27 -0
  109. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  110. package/dist/commands/channel/store/schema.js +34 -0
  111. package/dist/commands/channel/store/schema.js.map +1 -0
  112. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  113. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  114. package/dist/commands/channel/store/thread-state.js +16 -0
  115. package/dist/commands/channel/store/thread-state.js.map +1 -0
  116. package/dist/commands/channel/store/watch.d.ts +19 -0
  117. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  118. package/dist/commands/channel/store/watch.js +153 -0
  119. package/dist/commands/channel/store/watch.js.map +1 -0
  120. package/dist/commands/channel/supervisor/idle.d.ts +45 -0
  121. package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
  122. package/dist/commands/channel/supervisor/idle.js +70 -0
  123. package/dist/commands/channel/supervisor/idle.js.map +1 -0
  124. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  125. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  126. package/dist/commands/channel/supervisor/inbox.js +160 -0
  127. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  128. package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
  129. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  130. package/dist/commands/channel/supervisor/shutdown.js +146 -0
  131. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  132. package/dist/commands/channel/supervisor/stdout.d.ts +71 -0
  133. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  134. package/dist/commands/channel/supervisor/stdout.js +229 -0
  135. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  136. package/dist/commands/channel/supervisor/turns.d.ts +31 -0
  137. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  138. package/dist/commands/channel/supervisor/turns.js +45 -0
  139. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  140. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  141. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  142. package/dist/commands/channel/supervisor/warning.js +77 -0
  143. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  144. package/dist/commands/channel/supervisor.d.ts +91 -0
  145. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  146. package/dist/commands/channel/supervisor.js +463 -0
  147. package/dist/commands/channel/supervisor.js.map +1 -0
  148. package/dist/commands/channel/text-body.d.ts +13 -0
  149. package/dist/commands/channel/text-body.d.ts.map +1 -0
  150. package/dist/commands/channel/text-body.js +47 -0
  151. package/dist/commands/channel/text-body.js.map +1 -0
  152. package/dist/commands/channel/threads.d.ts +39 -0
  153. package/dist/commands/channel/threads.d.ts.map +1 -0
  154. package/dist/commands/channel/threads.js +106 -0
  155. package/dist/commands/channel/threads.js.map +1 -0
  156. package/dist/commands/channel/title.d.ts +12 -0
  157. package/dist/commands/channel/title.d.ts.map +1 -0
  158. package/dist/commands/channel/title.js +24 -0
  159. package/dist/commands/channel/title.js.map +1 -0
  160. package/dist/commands/channel/wait.d.ts +17 -0
  161. package/dist/commands/channel/wait.d.ts.map +1 -0
  162. package/dist/commands/channel/wait.js +81 -0
  163. package/dist/commands/channel/wait.js.map +1 -0
  164. package/dist/commands/init.d.ts +71 -0
  165. package/dist/commands/init.d.ts.map +1 -0
  166. package/dist/commands/init.js +1603 -0
  167. package/dist/commands/init.js.map +1 -0
  168. package/dist/commands/mem.d.ts +30 -0
  169. package/dist/commands/mem.d.ts.map +1 -0
  170. package/dist/commands/mem.js +423 -0
  171. package/dist/commands/mem.js.map +1 -0
  172. package/dist/commands/uninstall.d.ts +36 -0
  173. package/dist/commands/uninstall.d.ts.map +1 -0
  174. package/dist/commands/uninstall.js +205 -0
  175. package/dist/commands/uninstall.js.map +1 -0
  176. package/dist/commands/update.d.ts +104 -0
  177. package/dist/commands/update.d.ts.map +1 -0
  178. package/dist/commands/update.js +2163 -0
  179. package/dist/commands/update.js.map +1 -0
  180. package/dist/commands/upgrade.d.ts +28 -0
  181. package/dist/commands/upgrade.d.ts.map +1 -0
  182. package/dist/commands/upgrade.js +84 -0
  183. package/dist/commands/upgrade.js.map +1 -0
  184. package/dist/commands/workflow.d.ts +35 -0
  185. package/dist/commands/workflow.d.ts.map +1 -0
  186. package/dist/commands/workflow.js +232 -0
  187. package/dist/commands/workflow.js.map +1 -0
  188. package/dist/configurators/antigravity.d.ts +7 -0
  189. package/dist/configurators/antigravity.d.ts.map +1 -0
  190. package/dist/configurators/antigravity.js +11 -0
  191. package/dist/configurators/antigravity.js.map +1 -0
  192. package/dist/configurators/claude.d.ts +23 -0
  193. package/dist/configurators/claude.d.ts.map +1 -0
  194. package/dist/configurators/claude.js +123 -0
  195. package/dist/configurators/claude.js.map +1 -0
  196. package/dist/configurators/codebuddy.d.ts +10 -0
  197. package/dist/configurators/codebuddy.d.ts.map +1 -0
  198. package/dist/configurators/codebuddy.js +24 -0
  199. package/dist/configurators/codebuddy.js.map +1 -0
  200. package/dist/configurators/codex.d.ts +57 -0
  201. package/dist/configurators/codex.d.ts.map +1 -0
  202. package/dist/configurators/codex.js +170 -0
  203. package/dist/configurators/codex.js.map +1 -0
  204. package/dist/configurators/copilot.d.ts +14 -0
  205. package/dist/configurators/copilot.d.ts.map +1 -0
  206. package/dist/configurators/copilot.js +46 -0
  207. package/dist/configurators/copilot.js.map +1 -0
  208. package/dist/configurators/cursor.d.ts +10 -0
  209. package/dist/configurators/cursor.d.ts.map +1 -0
  210. package/dist/configurators/cursor.js +23 -0
  211. package/dist/configurators/cursor.js.map +1 -0
  212. package/dist/configurators/devin.d.ts +8 -0
  213. package/dist/configurators/devin.d.ts.map +1 -0
  214. package/dist/configurators/devin.js +12 -0
  215. package/dist/configurators/devin.js.map +1 -0
  216. package/dist/configurators/droid.d.ts +10 -0
  217. package/dist/configurators/droid.d.ts.map +1 -0
  218. package/dist/configurators/droid.js +24 -0
  219. package/dist/configurators/droid.js.map +1 -0
  220. package/dist/configurators/dsh.d.ts +29 -0
  221. package/dist/configurators/dsh.d.ts.map +1 -0
  222. package/dist/configurators/dsh.js +64 -0
  223. package/dist/configurators/dsh.js.map +1 -0
  224. package/dist/configurators/gemini.d.ts +18 -0
  225. package/dist/configurators/gemini.d.ts.map +1 -0
  226. package/dist/configurators/gemini.js +39 -0
  227. package/dist/configurators/gemini.js.map +1 -0
  228. package/dist/configurators/grok.d.ts +17 -0
  229. package/dist/configurators/grok.d.ts.map +1 -0
  230. package/dist/configurators/grok.js +38 -0
  231. package/dist/configurators/grok.js.map +1 -0
  232. package/dist/configurators/index.d.ts +68 -0
  233. package/dist/configurators/index.d.ts.map +1 -0
  234. package/dist/configurators/index.js +191 -0
  235. package/dist/configurators/index.js.map +1 -0
  236. package/dist/configurators/kilo.d.ts +7 -0
  237. package/dist/configurators/kilo.d.ts.map +1 -0
  238. package/dist/configurators/kilo.js +11 -0
  239. package/dist/configurators/kilo.js.map +1 -0
  240. package/dist/configurators/kimi.d.ts +26 -0
  241. package/dist/configurators/kimi.d.ts.map +1 -0
  242. package/dist/configurators/kimi.js +74 -0
  243. package/dist/configurators/kimi.js.map +1 -0
  244. package/dist/configurators/kiro.d.ts +11 -0
  245. package/dist/configurators/kiro.d.ts.map +1 -0
  246. package/dist/configurators/kiro.js +30 -0
  247. package/dist/configurators/kiro.js.map +1 -0
  248. package/dist/configurators/omp.d.ts +6 -0
  249. package/dist/configurators/omp.d.ts.map +1 -0
  250. package/dist/configurators/omp.js +28 -0
  251. package/dist/configurators/omp.js.map +1 -0
  252. package/dist/configurators/opencode.d.ts +5 -0
  253. package/dist/configurators/opencode.d.ts.map +1 -0
  254. package/dist/configurators/opencode.js +80 -0
  255. package/dist/configurators/opencode.js.map +1 -0
  256. package/dist/configurators/pi.d.ts +5 -0
  257. package/dist/configurators/pi.d.ts.map +1 -0
  258. package/dist/configurators/pi.js +39 -0
  259. package/dist/configurators/pi.js.map +1 -0
  260. package/dist/configurators/qoder.d.ts +12 -0
  261. package/dist/configurators/qoder.d.ts.map +1 -0
  262. package/dist/configurators/qoder.js +30 -0
  263. package/dist/configurators/qoder.js.map +1 -0
  264. package/dist/configurators/reasonix.d.ts +17 -0
  265. package/dist/configurators/reasonix.d.ts.map +1 -0
  266. package/dist/configurators/reasonix.js +37 -0
  267. package/dist/configurators/reasonix.js.map +1 -0
  268. package/dist/configurators/shared.d.ts +187 -0
  269. package/dist/configurators/shared.d.ts.map +1 -0
  270. package/dist/configurators/shared.js +589 -0
  271. package/dist/configurators/shared.js.map +1 -0
  272. package/dist/configurators/snow.d.ts +25 -0
  273. package/dist/configurators/snow.d.ts.map +1 -0
  274. package/dist/configurators/snow.js +69 -0
  275. package/dist/configurators/snow.js.map +1 -0
  276. package/dist/configurators/trae.d.ts +16 -0
  277. package/dist/configurators/trae.d.ts.map +1 -0
  278. package/dist/configurators/trae.js +34 -0
  279. package/dist/configurators/trae.js.map +1 -0
  280. package/dist/configurators/workflow.d.ts +51 -0
  281. package/dist/configurators/workflow.d.ts.map +1 -0
  282. package/dist/configurators/workflow.js +210 -0
  283. package/dist/configurators/workflow.js.map +1 -0
  284. package/dist/configurators/zcode.d.ts +25 -0
  285. package/dist/configurators/zcode.d.ts.map +1 -0
  286. package/dist/configurators/zcode.js +67 -0
  287. package/dist/configurators/zcode.js.map +1 -0
  288. package/dist/constants/paths.d.ts +74 -0
  289. package/dist/constants/paths.d.ts.map +1 -0
  290. package/dist/constants/paths.js +83 -0
  291. package/dist/constants/paths.js.map +1 -0
  292. package/dist/constants/version.d.ts +9 -0
  293. package/dist/constants/version.d.ts.map +1 -0
  294. package/dist/constants/version.js +15 -0
  295. package/dist/constants/version.js.map +1 -0
  296. package/dist/index.d.ts +9 -0
  297. package/dist/index.d.ts.map +1 -0
  298. package/dist/index.js +9 -0
  299. package/dist/index.js.map +1 -0
  300. package/dist/migrations/index.d.ts +62 -0
  301. package/dist/migrations/index.d.ts.map +1 -0
  302. package/dist/migrations/index.js +187 -0
  303. package/dist/migrations/index.js.map +1 -0
  304. package/dist/migrations/manifests/0.1.9.json +30 -0
  305. package/dist/migrations/manifests/0.2.0.json +49 -0
  306. package/dist/migrations/manifests/0.2.12.json +9 -0
  307. package/dist/migrations/manifests/0.2.13.json +9 -0
  308. package/dist/migrations/manifests/0.2.14.json +175 -0
  309. package/dist/migrations/manifests/0.2.15.json +33 -0
  310. package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
  311. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  312. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  313. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  314. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  315. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  316. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  317. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  318. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  319. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  320. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  321. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  322. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  323. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  324. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  325. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  326. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  327. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  328. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  329. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  330. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  331. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  332. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  333. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  334. package/dist/migrations/manifests/0.3.0.json +11 -0
  335. package/dist/migrations/manifests/0.3.1.json +9 -0
  336. package/dist/migrations/manifests/0.3.10.json +9 -0
  337. package/dist/migrations/manifests/0.3.2.json +9 -0
  338. package/dist/migrations/manifests/0.3.3.json +9 -0
  339. package/dist/migrations/manifests/0.3.4.json +21 -0
  340. package/dist/migrations/manifests/0.3.5.json +9 -0
  341. package/dist/migrations/manifests/0.3.6.json +9 -0
  342. package/dist/migrations/manifests/0.3.7.json +9 -0
  343. package/dist/migrations/manifests/0.3.8.json +9 -0
  344. package/dist/migrations/manifests/0.3.9.json +9 -0
  345. package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
  346. package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
  347. package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
  348. package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
  349. package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
  350. package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
  351. package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
  352. package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
  353. package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
  354. package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
  355. package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
  356. package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
  357. package/dist/migrations/manifests/0.4.0.json +9 -0
  358. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  359. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  360. package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
  361. package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
  362. package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
  363. package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
  364. package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
  365. package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
  366. package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
  367. package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
  368. package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
  369. package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
  370. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  371. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  372. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  373. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  374. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  375. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  376. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  377. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  378. package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
  379. package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
  380. package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
  381. package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
  382. package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
  383. package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
  384. package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
  385. package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
  386. package/dist/migrations/manifests/0.5.0.json +9 -0
  387. package/dist/migrations/manifests/0.5.1.json +9 -0
  388. package/dist/migrations/manifests/0.5.10.json +9 -0
  389. package/dist/migrations/manifests/0.5.11.json +16 -0
  390. package/dist/migrations/manifests/0.5.12.json +9 -0
  391. package/dist/migrations/manifests/0.5.13.json +9 -0
  392. package/dist/migrations/manifests/0.5.14.json +9 -0
  393. package/dist/migrations/manifests/0.5.15.json +9 -0
  394. package/dist/migrations/manifests/0.5.16.json +9 -0
  395. package/dist/migrations/manifests/0.5.17.json +9 -0
  396. package/dist/migrations/manifests/0.5.18.json +9 -0
  397. package/dist/migrations/manifests/0.5.19.json +9 -0
  398. package/dist/migrations/manifests/0.5.2.json +9 -0
  399. package/dist/migrations/manifests/0.5.3.json +9 -0
  400. package/dist/migrations/manifests/0.5.4.json +9 -0
  401. package/dist/migrations/manifests/0.5.5.json +9 -0
  402. package/dist/migrations/manifests/0.5.6.json +9 -0
  403. package/dist/migrations/manifests/0.5.7.json +16 -0
  404. package/dist/migrations/manifests/0.5.8.json +9 -0
  405. package/dist/migrations/manifests/0.5.9.json +9 -0
  406. package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
  407. package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
  408. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  409. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  410. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  411. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  412. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  413. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  414. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  415. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  416. package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
  417. package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
  418. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  419. package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
  420. package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
  421. package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
  422. package/dist/migrations/manifests/0.6.0-beta.23.json +88 -0
  423. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  424. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  425. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  426. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  427. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  428. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  429. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  430. package/dist/migrations/manifests/0.6.0-rc.0.json +9 -0
  431. package/dist/migrations/manifests/0.6.0.json +1 -0
  432. package/dist/migrations/manifests/0.6.1.json +9 -0
  433. package/dist/migrations/manifests/0.6.10.json +9 -0
  434. package/dist/migrations/manifests/0.6.11.json +9 -0
  435. package/dist/migrations/manifests/0.6.12.json +9 -0
  436. package/dist/migrations/manifests/0.6.13.json +9 -0
  437. package/dist/migrations/manifests/0.6.14.json +9 -0
  438. package/dist/migrations/manifests/0.6.15.json +9 -0
  439. package/dist/migrations/manifests/0.6.16.json +9 -0
  440. package/dist/migrations/manifests/0.6.17.json +9 -0
  441. package/dist/migrations/manifests/0.6.2.json +9 -0
  442. package/dist/migrations/manifests/0.6.3.json +24 -0
  443. package/dist/migrations/manifests/0.6.4.json +9 -0
  444. package/dist/migrations/manifests/0.6.5.json +9 -0
  445. package/dist/migrations/manifests/0.6.6.json +17 -0
  446. package/dist/migrations/manifests/0.6.7.json +9 -0
  447. package/dist/migrations/manifests/0.6.8.json +17 -0
  448. package/dist/migrations/manifests/0.6.9.json +9 -0
  449. package/dist/migrations/manifests/0.7.0-beta.0.json +9 -0
  450. package/dist/migrations/manifests/0.7.0-beta.1.json +9 -0
  451. package/dist/migrations/manifests/0.7.0-beta.2.json +9 -0
  452. package/dist/migrations/manifests/0.7.0-beta.3.json +9 -0
  453. package/dist/templates/claude/agents/trellis-check.md +115 -0
  454. package/dist/templates/claude/agents/trellis-implement.md +110 -0
  455. package/dist/templates/claude/agents/trellis-research.md +137 -0
  456. package/dist/templates/claude/hooks/statusline.py +332 -0
  457. package/dist/templates/claude/index.d.ts +31 -0
  458. package/dist/templates/claude/index.d.ts.map +1 -0
  459. package/dist/templates/claude/index.js +57 -0
  460. package/dist/templates/claude/index.js.map +1 -0
  461. package/dist/templates/claude/settings.json +73 -0
  462. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  463. package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
  464. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  465. package/dist/templates/codebuddy/index.d.ts +15 -0
  466. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  467. package/dist/templates/codebuddy/index.js +15 -0
  468. package/dist/templates/codebuddy/index.js.map +1 -0
  469. package/dist/templates/codebuddy/settings.json +69 -0
  470. package/dist/templates/codex/agents/trellis-check.toml +56 -0
  471. package/dist/templates/codex/agents/trellis-implement.toml +37 -0
  472. package/dist/templates/codex/agents/trellis-research.toml +78 -0
  473. package/dist/templates/codex/config.toml +39 -0
  474. package/dist/templates/codex/hooks/session-start.py +552 -0
  475. package/dist/templates/codex/hooks.json +27 -0
  476. package/dist/templates/codex/index.d.ts +35 -0
  477. package/dist/templates/codex/index.d.ts.map +1 -0
  478. package/dist/templates/codex/index.js +67 -0
  479. package/dist/templates/codex/index.js.map +1 -0
  480. package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +67 -0
  481. package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +480 -0
  482. package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +233 -0
  483. package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +226 -0
  484. package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +276 -0
  485. package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +128 -0
  486. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +85 -0
  487. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  488. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +56 -0
  489. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  490. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  491. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +123 -0
  492. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  493. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
  494. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +65 -0
  495. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  496. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/bundled-skills.md +159 -0
  497. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  498. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  499. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/multi-agent-channel.md +69 -0
  500. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  501. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  502. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +130 -0
  503. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  504. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  505. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +83 -0
  506. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +72 -0
  507. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
  508. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +112 -0
  509. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +86 -0
  510. package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
  511. package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +65 -0
  512. package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
  513. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
  514. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
  515. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
  516. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
  517. package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -0
  518. package/dist/templates/common/commands/continue.md +56 -0
  519. package/dist/templates/common/commands/finish-work.md +66 -0
  520. package/dist/templates/common/commands/start.md +59 -0
  521. package/dist/templates/common/index.d.ts +48 -0
  522. package/dist/templates/common/index.d.ts.map +1 -0
  523. package/dist/templates/common/index.js +104 -0
  524. package/dist/templates/common/index.js.map +1 -0
  525. package/dist/templates/common/skills/before-dev.md +46 -0
  526. package/dist/templates/common/skills/brainstorm.md +195 -0
  527. package/dist/templates/common/skills/break-loop.md +184 -0
  528. package/dist/templates/common/skills/check.md +106 -0
  529. package/dist/templates/common/skills/update-spec.md +351 -0
  530. package/dist/templates/copilot/copilot-instructions.md +11 -0
  531. package/dist/templates/copilot/hooks/session-start.py +548 -0
  532. package/dist/templates/copilot/hooks.json +19 -0
  533. package/dist/templates/copilot/index.d.ts +28 -0
  534. package/dist/templates/copilot/index.d.ts.map +1 -0
  535. package/dist/templates/copilot/index.js +61 -0
  536. package/dist/templates/copilot/index.js.map +1 -0
  537. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  538. package/dist/templates/copilot/prompts/brainstorm.prompt.md +156 -0
  539. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  540. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +170 -0
  541. package/dist/templates/copilot/prompts/check.prompt.md +110 -0
  542. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  543. package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
  544. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  545. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  546. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  547. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  548. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  549. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  550. package/dist/templates/cursor/agents/trellis-check.md +114 -0
  551. package/dist/templates/cursor/agents/trellis-implement.md +109 -0
  552. package/dist/templates/cursor/agents/trellis-research.md +136 -0
  553. package/dist/templates/cursor/hooks.json +24 -0
  554. package/dist/templates/cursor/index.d.ts +13 -0
  555. package/dist/templates/cursor/index.d.ts.map +1 -0
  556. package/dist/templates/cursor/index.js +13 -0
  557. package/dist/templates/cursor/index.js.map +1 -0
  558. package/dist/templates/droid/droids/trellis-check.md +107 -0
  559. package/dist/templates/droid/droids/trellis-implement.md +102 -0
  560. package/dist/templates/droid/droids/trellis-research.md +137 -0
  561. package/dist/templates/droid/index.d.ts +15 -0
  562. package/dist/templates/droid/index.d.ts.map +1 -0
  563. package/dist/templates/droid/index.js +15 -0
  564. package/dist/templates/droid/index.js.map +1 -0
  565. package/dist/templates/droid/settings.json +69 -0
  566. package/dist/templates/dsh/DSH.md +56 -0
  567. package/dist/templates/dsh/index.d.ts +21 -0
  568. package/dist/templates/dsh/index.d.ts.map +1 -0
  569. package/dist/templates/dsh/index.js +25 -0
  570. package/dist/templates/dsh/index.js.map +1 -0
  571. package/dist/templates/extract.d.ts +40 -0
  572. package/dist/templates/extract.d.ts.map +1 -0
  573. package/dist/templates/extract.js +106 -0
  574. package/dist/templates/extract.js.map +1 -0
  575. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  576. package/dist/templates/gemini/agents/trellis-implement.md +102 -0
  577. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  578. package/dist/templates/gemini/index.d.ts +13 -0
  579. package/dist/templates/gemini/index.d.ts.map +1 -0
  580. package/dist/templates/gemini/index.js +13 -0
  581. package/dist/templates/gemini/index.js.map +1 -0
  582. package/dist/templates/gemini/settings.json +40 -0
  583. package/dist/templates/grok/agents/trellis-check.md +105 -0
  584. package/dist/templates/grok/agents/trellis-implement.md +116 -0
  585. package/dist/templates/grok/agents/trellis-research.md +146 -0
  586. package/dist/templates/grok/index.d.ts +16 -0
  587. package/dist/templates/grok/index.d.ts.map +1 -0
  588. package/dist/templates/grok/index.js +19 -0
  589. package/dist/templates/grok/index.js.map +1 -0
  590. package/dist/templates/kimi/agents/trellis-check.md +103 -0
  591. package/dist/templates/kimi/agents/trellis-implement.md +115 -0
  592. package/dist/templates/kimi/agents/trellis-research.md +144 -0
  593. package/dist/templates/kimi/index.d.ts +20 -0
  594. package/dist/templates/kimi/index.d.ts.map +1 -0
  595. package/dist/templates/kimi/index.js +23 -0
  596. package/dist/templates/kimi/index.js.map +1 -0
  597. package/dist/templates/kiro/agents/trellis-check.json +26 -0
  598. package/dist/templates/kiro/agents/trellis-implement.json +26 -0
  599. package/dist/templates/kiro/agents/trellis-research.json +30 -0
  600. package/dist/templates/kiro/agents/trellis.json +34 -0
  601. package/dist/templates/kiro/hooks/trellis-workflow-state.kiro.hook +14 -0
  602. package/dist/templates/kiro/index.d.ts +32 -0
  603. package/dist/templates/kiro/index.d.ts.map +1 -0
  604. package/dist/templates/kiro/index.js +28 -0
  605. package/dist/templates/kiro/index.js.map +1 -0
  606. package/dist/templates/markdown/agents.md +21 -0
  607. package/dist/templates/markdown/gitignore.txt +15 -0
  608. package/dist/templates/markdown/index.d.ts +27 -0
  609. package/dist/templates/markdown/index.d.ts.map +1 -0
  610. package/dist/templates/markdown/index.js +52 -0
  611. package/dist/templates/markdown/index.js.map +1 -0
  612. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  613. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  614. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  615. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  616. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  617. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  618. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  619. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  620. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  621. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  622. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  623. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  624. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  625. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  626. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +327 -0
  627. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -0
  628. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  629. package/dist/templates/markdown/workspace-index.md +125 -0
  630. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  631. package/dist/templates/omp/agents/trellis-check.md +41 -0
  632. package/dist/templates/omp/agents/trellis-implement.md +45 -0
  633. package/dist/templates/omp/agents/trellis-research.md +30 -0
  634. package/dist/templates/omp/extensions/trellis/index.ts.txt +1105 -0
  635. package/dist/templates/omp/index.d.ts +4 -0
  636. package/dist/templates/omp/index.d.ts.map +1 -0
  637. package/dist/templates/omp/index.js +9 -0
  638. package/dist/templates/omp/index.js.map +1 -0
  639. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  640. package/dist/templates/opencode/agents/trellis-implement.md +118 -0
  641. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  642. package/dist/templates/opencode/lib/context-visibility.js +148 -0
  643. package/dist/templates/opencode/lib/session-utils.js +527 -0
  644. package/dist/templates/opencode/lib/trellis-context.js +627 -0
  645. package/dist/templates/opencode/package.json +5 -0
  646. package/dist/templates/opencode/plugins/inject-subagent-context.js +569 -0
  647. package/dist/templates/opencode/plugins/inject-workflow-state.js +240 -0
  648. package/dist/templates/opencode/plugins/session-start.js +65 -0
  649. package/dist/templates/pi/agents/trellis-check.md +37 -0
  650. package/dist/templates/pi/agents/trellis-implement.md +42 -0
  651. package/dist/templates/pi/agents/trellis-research.md +25 -0
  652. package/dist/templates/pi/extensions/trellis/index.ts.txt +2027 -0
  653. package/dist/templates/pi/index.d.ts +5 -0
  654. package/dist/templates/pi/index.d.ts.map +1 -0
  655. package/dist/templates/pi/index.js +12 -0
  656. package/dist/templates/pi/index.js.map +1 -0
  657. package/dist/templates/pi/settings.json +9 -0
  658. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  659. package/dist/templates/qoder/agents/trellis-implement.md +103 -0
  660. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  661. package/dist/templates/qoder/index.d.ts +15 -0
  662. package/dist/templates/qoder/index.d.ts.map +1 -0
  663. package/dist/templates/qoder/index.js +15 -0
  664. package/dist/templates/qoder/index.js.map +1 -0
  665. package/dist/templates/qoder/settings.json +59 -0
  666. package/dist/templates/reasonix/agents/trellis-check.md +36 -0
  667. package/dist/templates/reasonix/agents/trellis-implement.md +41 -0
  668. package/dist/templates/reasonix/index.d.ts +13 -0
  669. package/dist/templates/reasonix/index.d.ts.map +1 -0
  670. package/dist/templates/reasonix/index.js +16 -0
  671. package/dist/templates/reasonix/index.js.map +1 -0
  672. package/dist/templates/shared-hooks/index.d.ts +77 -0
  673. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  674. package/dist/templates/shared-hooks/index.js +140 -0
  675. package/dist/templates/shared-hooks/index.js.map +1 -0
  676. package/dist/templates/shared-hooks/inject-shell-session-context.py +292 -0
  677. package/dist/templates/shared-hooks/inject-subagent-context.py +1212 -0
  678. package/dist/templates/shared-hooks/inject-workflow-state.py +488 -0
  679. package/dist/templates/shared-hooks/session-start.py +949 -0
  680. package/dist/templates/snow/SNOW.md +86 -0
  681. package/dist/templates/snow/agents/trellis-check.md +135 -0
  682. package/dist/templates/snow/agents/trellis-implement.md +153 -0
  683. package/dist/templates/snow/agents/trellis-research.md +114 -0
  684. package/dist/templates/snow/hooks/beforeSubAgentStart.json +15 -0
  685. package/dist/templates/snow/hooks/onSessionStart.json +15 -0
  686. package/dist/templates/snow/hooks/onUserMessage.json +15 -0
  687. package/dist/templates/snow/hooks/write-trellis-context.py +644 -0
  688. package/dist/templates/snow/index.d.ts +26 -0
  689. package/dist/templates/snow/index.d.ts.map +1 -0
  690. package/dist/templates/snow/index.js +36 -0
  691. package/dist/templates/snow/index.js.map +1 -0
  692. package/dist/templates/template-utils.d.ts +26 -0
  693. package/dist/templates/template-utils.d.ts.map +1 -0
  694. package/dist/templates/template-utils.js +64 -0
  695. package/dist/templates/template-utils.js.map +1 -0
  696. package/dist/templates/trae/agents/trellis-check.md +108 -0
  697. package/dist/templates/trae/agents/trellis-implement.md +103 -0
  698. package/dist/templates/trae/agents/trellis-research.md +137 -0
  699. package/dist/templates/trae/hooks.json +39 -0
  700. package/dist/templates/trae/index.d.ts +15 -0
  701. package/dist/templates/trae/index.d.ts.map +1 -0
  702. package/dist/templates/trae/index.js +15 -0
  703. package/dist/templates/trae/index.js.map +1 -0
  704. package/dist/templates/trellis/agents/check.md +70 -0
  705. package/dist/templates/trellis/agents/implement.md +71 -0
  706. package/dist/templates/trellis/config.yaml +158 -0
  707. package/dist/templates/trellis/gitattributes.txt +9 -0
  708. package/dist/templates/trellis/gitignore.txt +32 -0
  709. package/dist/templates/trellis/index.d.ts +67 -0
  710. package/dist/templates/trellis/index.d.ts.map +1 -0
  711. package/dist/templates/trellis/index.js +121 -0
  712. package/dist/templates/trellis/index.js.map +1 -0
  713. package/dist/templates/trellis/scripts/__init__.py +5 -0
  714. package/dist/templates/trellis/scripts/add_session.py +1545 -0
  715. package/dist/templates/trellis/scripts/common/__init__.py +94 -0
  716. package/dist/templates/trellis/scripts/common/active_task.py +857 -0
  717. package/dist/templates/trellis/scripts/common/cli_adapter.py +950 -0
  718. package/dist/templates/trellis/scripts/common/config.py +482 -0
  719. package/dist/templates/trellis/scripts/common/developer.py +192 -0
  720. package/dist/templates/trellis/scripts/common/git.py +203 -0
  721. package/dist/templates/trellis/scripts/common/git_context.py +106 -0
  722. package/dist/templates/trellis/scripts/common/io.py +160 -0
  723. package/dist/templates/trellis/scripts/common/log.py +45 -0
  724. package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
  725. package/dist/templates/trellis/scripts/common/paths.py +543 -0
  726. package/dist/templates/trellis/scripts/common/safe_commit.py +322 -0
  727. package/dist/templates/trellis/scripts/common/session_context.py +892 -0
  728. package/dist/templates/trellis/scripts/common/task_context.py +470 -0
  729. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  730. package/dist/templates/trellis/scripts/common/task_store.py +1874 -0
  731. package/dist/templates/trellis/scripts/common/task_utils.py +498 -0
  732. package/dist/templates/trellis/scripts/common/tasks.py +122 -0
  733. package/dist/templates/trellis/scripts/common/trellis_config.py +239 -0
  734. package/dist/templates/trellis/scripts/common/types.py +110 -0
  735. package/dist/templates/trellis/scripts/common/workflow_phase.py +242 -0
  736. package/dist/templates/trellis/scripts/get_context.py +16 -0
  737. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  738. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  739. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  740. package/dist/templates/trellis/scripts/task.py +801 -0
  741. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  742. package/dist/templates/trellis/workflow.md +721 -0
  743. package/dist/templates/zcode/agents/trellis-check.md +109 -0
  744. package/dist/templates/zcode/agents/trellis-implement.md +111 -0
  745. package/dist/templates/zcode/agents/trellis-research.md +133 -0
  746. package/dist/templates/zcode/config.json +52 -0
  747. package/dist/templates/zcode/index.d.ts +25 -0
  748. package/dist/templates/zcode/index.d.ts.map +1 -0
  749. package/dist/templates/zcode/index.js +29 -0
  750. package/dist/templates/zcode/index.js.map +1 -0
  751. package/dist/types/ai-tools.d.ts +105 -0
  752. package/dist/types/ai-tools.d.ts.map +1 -0
  753. package/dist/types/ai-tools.js +502 -0
  754. package/dist/types/ai-tools.js.map +1 -0
  755. package/dist/types/migration.d.ts +125 -0
  756. package/dist/types/migration.d.ts.map +1 -0
  757. package/dist/types/migration.js +8 -0
  758. package/dist/types/migration.js.map +1 -0
  759. package/dist/utils/ablation-store.d.ts +123 -0
  760. package/dist/utils/ablation-store.d.ts.map +1 -0
  761. package/dist/utils/ablation-store.js +749 -0
  762. package/dist/utils/ablation-store.js.map +1 -0
  763. package/dist/utils/agent-refs.d.ts +31 -0
  764. package/dist/utils/agent-refs.d.ts.map +1 -0
  765. package/dist/utils/agent-refs.js +63 -0
  766. package/dist/utils/agent-refs.js.map +1 -0
  767. package/dist/utils/atomic-write.d.ts +12 -0
  768. package/dist/utils/atomic-write.d.ts.map +1 -0
  769. package/dist/utils/atomic-write.js +30 -0
  770. package/dist/utils/atomic-write.js.map +1 -0
  771. package/dist/utils/compare-versions.d.ts +12 -0
  772. package/dist/utils/compare-versions.d.ts.map +1 -0
  773. package/dist/utils/compare-versions.js +86 -0
  774. package/dist/utils/compare-versions.js.map +1 -0
  775. package/dist/utils/cwd-guard.d.ts +38 -0
  776. package/dist/utils/cwd-guard.d.ts.map +1 -0
  777. package/dist/utils/cwd-guard.js +62 -0
  778. package/dist/utils/cwd-guard.js.map +1 -0
  779. package/dist/utils/file-writer.d.ts +36 -0
  780. package/dist/utils/file-writer.d.ts.map +1 -0
  781. package/dist/utils/file-writer.js +204 -0
  782. package/dist/utils/file-writer.js.map +1 -0
  783. package/dist/utils/managed-paths.d.ts +5 -0
  784. package/dist/utils/managed-paths.d.ts.map +1 -0
  785. package/dist/utils/managed-paths.js +51 -0
  786. package/dist/utils/managed-paths.js.map +1 -0
  787. package/dist/utils/managed-removal.d.ts +74 -0
  788. package/dist/utils/managed-removal.d.ts.map +1 -0
  789. package/dist/utils/managed-removal.js +270 -0
  790. package/dist/utils/managed-removal.js.map +1 -0
  791. package/dist/utils/manifest-prune.d.ts +61 -0
  792. package/dist/utils/manifest-prune.d.ts.map +1 -0
  793. package/dist/utils/manifest-prune.js +135 -0
  794. package/dist/utils/manifest-prune.js.map +1 -0
  795. package/dist/utils/posix.d.ts +13 -0
  796. package/dist/utils/posix.d.ts.map +1 -0
  797. package/dist/utils/posix.js +15 -0
  798. package/dist/utils/posix.js.map +1 -0
  799. package/dist/utils/project-detector.d.ts +46 -0
  800. package/dist/utils/project-detector.d.ts.map +1 -0
  801. package/dist/utils/project-detector.js +666 -0
  802. package/dist/utils/project-detector.js.map +1 -0
  803. package/dist/utils/proxy.d.ts +25 -0
  804. package/dist/utils/proxy.d.ts.map +1 -0
  805. package/dist/utils/proxy.js +60 -0
  806. package/dist/utils/proxy.js.map +1 -0
  807. package/dist/utils/registry-config.d.ts +7 -0
  808. package/dist/utils/registry-config.d.ts.map +1 -0
  809. package/dist/utils/registry-config.js +172 -0
  810. package/dist/utils/registry-config.js.map +1 -0
  811. package/dist/utils/task-json.d.ts +13 -0
  812. package/dist/utils/task-json.d.ts.map +1 -0
  813. package/dist/utils/task-json.js +12 -0
  814. package/dist/utils/task-json.js.map +1 -0
  815. package/dist/utils/template-fetcher.d.ts +161 -0
  816. package/dist/utils/template-fetcher.d.ts.map +1 -0
  817. package/dist/utils/template-fetcher.js +994 -0
  818. package/dist/utils/template-fetcher.js.map +1 -0
  819. package/dist/utils/template-hash.d.ts +127 -0
  820. package/dist/utils/template-hash.d.ts.map +1 -0
  821. package/dist/utils/template-hash.js +335 -0
  822. package/dist/utils/template-hash.js.map +1 -0
  823. package/dist/utils/uninstall-scrubbers.d.ts +66 -0
  824. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  825. package/dist/utils/uninstall-scrubbers.js +417 -0
  826. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  827. package/dist/utils/workflow-resolver.d.ts +86 -0
  828. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  829. package/dist/utils/workflow-resolver.js +265 -0
  830. package/dist/utils/workflow-resolver.js.map +1 -0
  831. package/package.json +89 -0
@@ -0,0 +1,950 @@
1
+ """
2
+ CLI Adapter for Multi-Platform Support.
3
+
4
+ Abstracts differences between Claude Code, OpenCode, Cursor, iFlow, Codex, Kilo, Kiro Code, Gemini CLI, Antigravity, Devin, Qoder, CodeBuddy, GitHub Copilot, Factory Droid, and Pi Agent interfaces.
5
+
6
+ Supported platforms:
7
+ - claude: Claude Code (default)
8
+ - opencode: OpenCode
9
+ - cursor: Cursor IDE
10
+ - iflow: iFlow CLI
11
+ - codex: Codex CLI (skills-based)
12
+ - kilo: Kilo CLI
13
+ - kiro: Kiro Code (skills-based)
14
+ - gemini: Gemini CLI
15
+ - antigravity: Antigravity (workflow-based)
16
+ - devin: Devin (formerly Windsurf; workflow-based)
17
+ - qoder: Qoder
18
+ - codebuddy: CodeBuddy
19
+ - copilot: GitHub Copilot (VS Code)
20
+ - droid: Factory Droid (commands-based)
21
+ - pi: Pi Agent (extension-backed)
22
+ - trae: Trae IDE (IDE-only, hooks-based)
23
+ - omp: Oh My Pi
24
+ - grok: Grok Build (pull-based skills/agents; no hook context injection)
25
+ - kimi: Kimi Code (pull-based skills; commands delivered as skills; no hook context injection)
26
+
27
+ Usage:
28
+ from common.cli_adapter import CLIAdapter
29
+
30
+ adapter = CLIAdapter("opencode")
31
+ cmd = adapter.build_run_command(
32
+ agent="dispatch",
33
+ session_id="abc123",
34
+ prompt="Start the pipeline"
35
+ )
36
+ """
37
+
38
+ from __future__ import annotations
39
+
40
+ from dataclasses import dataclass
41
+ from pathlib import Path
42
+ from typing import ClassVar, Literal
43
+
44
+ Platform = Literal[
45
+ "claude",
46
+ "opencode",
47
+ "cursor",
48
+ "iflow",
49
+ "codex",
50
+ "kilo",
51
+ "kiro",
52
+ "gemini",
53
+ "antigravity",
54
+ "devin",
55
+ "qoder",
56
+ "codebuddy",
57
+ "copilot",
58
+ "droid",
59
+ "pi",
60
+ "trae",
61
+ "omp",
62
+ "grok",
63
+ "kimi",
64
+ ]
65
+
66
+
67
+ @dataclass
68
+ class CLIAdapter:
69
+ """Adapter for different AI coding CLI tools."""
70
+
71
+ platform: Platform
72
+
73
+ # =========================================================================
74
+ # Agent Name Mapping
75
+ # =========================================================================
76
+
77
+ # OpenCode has built-in agents that cannot be overridden
78
+ # See: https://github.com/sst/opencode/issues/4271
79
+ # Note: Class-level constant, not a dataclass field
80
+ _AGENT_NAME_MAP: ClassVar[dict[Platform, dict[str, str]]] = {
81
+ "claude": {}, # No mapping needed
82
+ "opencode": {
83
+ "plan": "trellis-plan", # 'plan' is built-in in OpenCode
84
+ },
85
+ }
86
+
87
+ def get_agent_name(self, agent: str) -> str:
88
+ """Get platform-specific agent name.
89
+
90
+ Args:
91
+ agent: Original agent name (e.g., 'plan', 'dispatch')
92
+
93
+ Returns:
94
+ Platform-specific agent name (e.g., 'trellis-plan' for OpenCode)
95
+ """
96
+ mapping = self._AGENT_NAME_MAP.get(self.platform, {})
97
+ return mapping.get(agent, agent)
98
+
99
+ # =========================================================================
100
+ # Agent Path
101
+ # =========================================================================
102
+
103
+ @property
104
+ def config_dir_name(self) -> str:
105
+ """Get platform-specific config directory name.
106
+
107
+ Returns:
108
+ Directory name ('.claude', '.opencode', '.cursor', '.iflow', '.codex', '.kilocode', '.kiro', '.gemini', '.agent', '.devin', '.qoder', '.codebuddy', '.github/copilot', '.factory', '.pi', or '.trae')
109
+ """
110
+ if self.platform == "opencode":
111
+ return ".opencode"
112
+ elif self.platform == "cursor":
113
+ return ".cursor"
114
+ elif self.platform == "iflow":
115
+ return ".iflow"
116
+ elif self.platform == "codex":
117
+ return ".codex"
118
+ elif self.platform == "kilo":
119
+ return ".kilocode"
120
+ elif self.platform == "kiro":
121
+ return ".kiro"
122
+ elif self.platform == "gemini":
123
+ return ".gemini"
124
+ elif self.platform == "antigravity":
125
+ return ".agent"
126
+ elif self.platform == "devin":
127
+ return ".devin"
128
+ elif self.platform == "qoder":
129
+ return ".qoder"
130
+ elif self.platform == "codebuddy":
131
+ return ".codebuddy"
132
+ elif self.platform == "copilot":
133
+ return ".github/copilot"
134
+ elif self.platform == "droid":
135
+ return ".factory"
136
+ elif self.platform == "pi":
137
+ return ".pi"
138
+ elif self.platform == "trae":
139
+ return ".trae"
140
+ elif self.platform == "omp":
141
+ return ".omp"
142
+ elif self.platform == "grok":
143
+ return ".grok"
144
+ elif self.platform == "kimi":
145
+ return ".kimi-code"
146
+ else:
147
+ return ".claude"
148
+
149
+ def get_config_dir(self, project_root: Path) -> Path:
150
+ """Get platform-specific config directory.
151
+
152
+ Args:
153
+ project_root: Project root directory
154
+
155
+ Returns:
156
+ Path to config directory (.claude, .opencode, .cursor, .iflow, .codex, .kilocode, .kiro, .gemini, .agent, .devin, .qoder, .codebuddy, .github/copilot, .factory, .pi, or .trae)
157
+ """
158
+ return project_root / self.config_dir_name
159
+
160
+ def get_agent_path(self, agent: str, project_root: Path) -> Path:
161
+ """Get path to agent definition file.
162
+
163
+ Args:
164
+ agent: Agent name (original, before mapping)
165
+ project_root: Project root directory
166
+
167
+ Returns:
168
+ Path to agent definition file (.md for most platforms, .toml for Codex)
169
+ """
170
+ mapped_name = self.get_agent_name(agent)
171
+ if self.platform == "codex":
172
+ return self.get_config_dir(project_root) / "agents" / f"{mapped_name}.toml"
173
+ return self.get_config_dir(project_root) / "agents" / f"{mapped_name}.md"
174
+
175
+ def get_commands_path(self, project_root: Path, *parts: str) -> Path:
176
+ """Get path to commands directory or specific command file.
177
+
178
+ Args:
179
+ project_root: Project root directory
180
+ *parts: Additional path parts (e.g., 'trellis', 'finish-work.md')
181
+
182
+ Returns:
183
+ Path to commands directory or file
184
+
185
+ Note:
186
+ Cursor uses prefix naming: .cursor/commands/trellis-<name>.md
187
+ Antigravity uses workflow directory: .agent/workflows/<name>.md
188
+ Devin uses workflow directory: .devin/workflows/trellis-<name>.md
189
+ Copilot uses prompt files: .github/prompts/<name>.prompt.md
190
+ Pi uses prompt templates: .pi/prompts/trellis-<name>.md
191
+ Claude/OpenCode use subdirectory: .claude/commands/trellis/<name>.md
192
+ """
193
+ if self.platform == "pi":
194
+ prompts_dir = self.get_config_dir(project_root) / "prompts"
195
+ if not parts:
196
+ return prompts_dir
197
+ if len(parts) >= 2 and parts[0] == "trellis":
198
+ filename = parts[-1]
199
+ if filename.endswith(".md"):
200
+ filename = filename[:-3]
201
+ return prompts_dir / f"trellis-{filename}.md"
202
+ return prompts_dir / Path(*parts)
203
+ # OMP and Grok: flat slash commands under .{platform}/commands/trellis-<name>.md
204
+ if self.platform in ("omp", "grok"):
205
+ commands_dir = self.get_config_dir(project_root) / "commands"
206
+ if not parts:
207
+ return commands_dir
208
+ if len(parts) >= 2 and parts[0] == "trellis":
209
+ filename = parts[-1]
210
+ if filename.endswith(".md"):
211
+ filename = filename[:-3]
212
+ return commands_dir / f"trellis-{filename}.md"
213
+ return commands_dir / Path(*parts)
214
+
215
+ # Kimi: commands are skills under .kimi-code/skills/trellis-<name>/SKILL.md
216
+ if self.platform == "kimi":
217
+ skills_dir = self.get_config_dir(project_root) / "skills"
218
+ if not parts:
219
+ return skills_dir
220
+ if len(parts) >= 2 and parts[0] == "trellis":
221
+ filename = parts[-1]
222
+ if filename.endswith(".md"):
223
+ filename = filename[:-3]
224
+ return skills_dir / f"trellis-{filename}" / "SKILL.md"
225
+ return skills_dir / Path(*parts)
226
+
227
+ if self.platform == "devin":
228
+ workflow_dir = self.get_config_dir(project_root) / "workflows"
229
+ if not parts:
230
+ return workflow_dir
231
+ if len(parts) >= 2 and parts[0] == "trellis":
232
+ filename = parts[-1]
233
+ return workflow_dir / f"trellis-{filename}"
234
+ return workflow_dir / Path(*parts)
235
+
236
+ if self.platform in ("antigravity", "kilo"):
237
+ workflow_dir = self.get_config_dir(project_root) / "workflows"
238
+ if not parts:
239
+ return workflow_dir
240
+ if len(parts) >= 2 and parts[0] == "trellis":
241
+ filename = parts[-1]
242
+ return workflow_dir / filename
243
+ return workflow_dir / Path(*parts)
244
+
245
+ if self.platform == "copilot":
246
+ prompts_dir = project_root / ".github" / "prompts"
247
+ if not parts:
248
+ return prompts_dir
249
+ if len(parts) >= 2 and parts[0] == "trellis":
250
+ filename = parts[-1]
251
+ if filename.endswith(".md"):
252
+ filename = filename[:-3]
253
+ return prompts_dir / f"{filename}.prompt.md"
254
+ return prompts_dir / Path(*parts)
255
+
256
+ if not parts:
257
+ return self.get_config_dir(project_root) / "commands"
258
+
259
+ # Cursor uses prefix naming instead of subdirectory
260
+ if self.platform == "cursor" and len(parts) >= 2 and parts[0] == "trellis":
261
+ # Convert trellis/<name>.md to trellis-<name>.md
262
+ filename = parts[-1]
263
+ return (
264
+ self.get_config_dir(project_root) / "commands" / f"trellis-{filename}"
265
+ )
266
+
267
+ return self.get_config_dir(project_root) / "commands" / Path(*parts)
268
+
269
+ def get_trellis_command_path(self, name: str) -> str:
270
+ """Get relative path to a trellis command file.
271
+
272
+ Args:
273
+ name: Command name without extension (e.g., 'finish-work', 'check')
274
+
275
+ Returns:
276
+ Relative path string for use in JSONL entries
277
+
278
+ Note:
279
+ Cursor: .cursor/commands/trellis-<name>.md
280
+ Codex: .agents/skills/trellis-<name>/SKILL.md
281
+ Kiro: .kiro/skills/trellis-<name>/SKILL.md
282
+ Gemini: .gemini/commands/trellis/<name>.toml
283
+ Antigravity: .agent/workflows/<name>.md
284
+ Devin: .devin/workflows/trellis-<name>.md
285
+ Pi: .pi/prompts/trellis-<name>.md
286
+ Others: .{platform}/commands/trellis/<name>.md
287
+ """
288
+ if self.platform == "cursor":
289
+ return f".cursor/commands/trellis-{name}.md"
290
+ elif self.platform == "codex":
291
+ # 0.5.0-beta.0 renamed all skill dirs to add the `trellis-` prefix
292
+ # (see that release's manifest for the 60+ rename entries).
293
+ return f".agents/skills/trellis-{name}/SKILL.md"
294
+ elif self.platform == "kiro":
295
+ return f".kiro/skills/trellis-{name}/SKILL.md"
296
+ elif self.platform == "gemini":
297
+ return f".gemini/commands/trellis/{name}.toml"
298
+ elif self.platform == "antigravity":
299
+ return f".agent/workflows/{name}.md"
300
+ elif self.platform == "devin":
301
+ return f".devin/workflows/trellis-{name}.md"
302
+ elif self.platform == "kilo":
303
+ return f".kilocode/workflows/{name}.md"
304
+ elif self.platform == "copilot":
305
+ return f".github/prompts/{name}.prompt.md"
306
+ elif self.platform == "droid":
307
+ return f".factory/commands/trellis/{name}.md"
308
+ elif self.platform == "pi":
309
+ return f".pi/prompts/trellis-{name}.md"
310
+ elif self.platform in ("omp", "grok"):
311
+ return f"{self.config_dir_name}/commands/trellis-{name}.md"
312
+ elif self.platform == "kimi":
313
+ return f".kimi-code/skills/trellis-{name}/SKILL.md"
314
+ else:
315
+ return f"{self.config_dir_name}/commands/trellis/{name}.md"
316
+
317
+ # =========================================================================
318
+ # Environment Variables
319
+ # =========================================================================
320
+
321
+ def get_non_interactive_env(self) -> dict[str, str]:
322
+ """Get environment variables for non-interactive mode.
323
+
324
+ Returns:
325
+ Dict of environment variables to set
326
+ """
327
+ if self.platform == "opencode":
328
+ return {"OPENCODE_NON_INTERACTIVE": "1"}
329
+ elif self.platform == "iflow":
330
+ return {"IFLOW_NON_INTERACTIVE": "1"}
331
+ elif self.platform == "codex":
332
+ return {"CODEX_NON_INTERACTIVE": "1"}
333
+ elif self.platform == "kiro":
334
+ return {"KIRO_NON_INTERACTIVE": "1"}
335
+ elif self.platform == "gemini":
336
+ return {} # Gemini CLI doesn't have a non-interactive env var
337
+ elif self.platform == "antigravity":
338
+ return {}
339
+ elif self.platform == "devin":
340
+ return {}
341
+ elif self.platform == "qoder":
342
+ return {}
343
+ elif self.platform == "codebuddy":
344
+ return {}
345
+ elif self.platform == "copilot":
346
+ return {}
347
+ elif self.platform == "droid":
348
+ return {}
349
+ elif self.platform == "pi":
350
+ return {}
351
+ elif self.platform == "trae":
352
+ return {}
353
+ elif self.platform == "omp":
354
+ return {}
355
+ elif self.platform == "grok":
356
+ return {}
357
+ elif self.platform == "kimi":
358
+ return {}
359
+ else:
360
+ return {"CLAUDE_NON_INTERACTIVE": "1"}
361
+
362
+ # =========================================================================
363
+ # CLI Command Building
364
+ # =========================================================================
365
+
366
+ def build_run_command(
367
+ self,
368
+ agent: str,
369
+ prompt: str,
370
+ session_id: str | None = None,
371
+ skip_permissions: bool = True,
372
+ verbose: bool = True,
373
+ json_output: bool = True,
374
+ ) -> list[str]:
375
+ """Build CLI command for running an agent.
376
+
377
+ Args:
378
+ agent: Agent name (will be mapped if needed)
379
+ prompt: Prompt to send to the agent
380
+ session_id: Optional session ID (Claude Code only for creation)
381
+ skip_permissions: Whether to skip permission prompts
382
+ verbose: Whether to enable verbose output
383
+ json_output: Whether to use JSON output format
384
+
385
+ Returns:
386
+ List of command arguments
387
+ """
388
+ mapped_agent = self.get_agent_name(agent)
389
+
390
+ if self.platform == "opencode":
391
+ cmd = ["opencode", "run"]
392
+ cmd.extend(["--agent", mapped_agent])
393
+
394
+ # Note: OpenCode 'run' mode is non-interactive by default
395
+ # No equivalent to Claude Code's --dangerously-skip-permissions
396
+ # See: https://github.com/anomalyco/opencode/issues/9070
397
+
398
+ if json_output:
399
+ cmd.extend(["--format", "json"])
400
+
401
+ if verbose:
402
+ cmd.extend(["--log-level", "DEBUG", "--print-logs"])
403
+
404
+ # Note: OpenCode doesn't support --session-id on creation
405
+ # Session ID must be extracted from logs after startup
406
+
407
+ cmd.append(prompt)
408
+
409
+ elif self.platform == "iflow":
410
+ cmd = ["iflow", "-y", "-p"]
411
+ cmd.append(f"${mapped_agent} {prompt}")
412
+ elif self.platform == "codex":
413
+ cmd = ["codex", "exec"]
414
+ cmd.append(prompt)
415
+ elif self.platform == "kiro":
416
+ cmd = ["kiro", "run", prompt]
417
+ elif self.platform == "gemini":
418
+ cmd = ["gemini"]
419
+ cmd.append(prompt)
420
+ elif self.platform == "antigravity":
421
+ raise ValueError(
422
+ "Antigravity workflows are UI slash commands; CLI agent run is not supported."
423
+ )
424
+ elif self.platform == "devin":
425
+ raise ValueError(
426
+ "Devin workflows are UI slash commands; CLI agent run is not supported."
427
+ )
428
+ elif self.platform == "qoder":
429
+ cmd = ["qodercli", "-p", prompt]
430
+ elif self.platform == "codebuddy":
431
+ raise ValueError(
432
+ "CodeBuddy does not support non-interactive mode (no CLI agent)"
433
+ )
434
+ elif self.platform == "copilot":
435
+ raise ValueError(
436
+ "GitHub Copilot is IDE-only; CLI agent run is not supported."
437
+ )
438
+ elif self.platform == "droid":
439
+ raise ValueError(
440
+ "Factory Droid CLI agent run is not yet supported."
441
+ )
442
+ elif self.platform == "pi":
443
+ cmd = ["pi", "-p", prompt]
444
+ elif self.platform == "trae":
445
+ raise ValueError(
446
+ "Trae is IDE-only; CLI agent run is not supported."
447
+ )
448
+ elif self.platform == "omp":
449
+ raise ValueError(
450
+ "OMP uses native task tool for agent runs; CLI agent run is not supported."
451
+ )
452
+ elif self.platform == "grok":
453
+ # Headless single-prompt; sub-agents use in-process spawn_subagent.
454
+ cmd = ["grok", "-p", prompt, "--yolo"]
455
+ elif self.platform == "kimi":
456
+ # Headless single-prompt with auto-approval; sub-agents are the
457
+ # built-in coder/explore/plan agents dispatched in-session.
458
+ cmd = ["kimi", "-p", prompt, "--yolo"]
459
+
460
+ else: # claude
461
+ cmd = ["claude", "-p"]
462
+ cmd.extend(["--agent", mapped_agent])
463
+
464
+ if session_id:
465
+ cmd.extend(["--session-id", session_id])
466
+
467
+ if skip_permissions:
468
+ cmd.append("--dangerously-skip-permissions")
469
+
470
+ if json_output:
471
+ cmd.extend(["--output-format", "stream-json"])
472
+
473
+ if verbose:
474
+ cmd.append("--verbose")
475
+
476
+ cmd.append(prompt)
477
+
478
+ return cmd
479
+
480
+ def build_resume_command(self, session_id: str) -> list[str]:
481
+ """Build CLI command for resuming a session.
482
+
483
+ Args:
484
+ session_id: Session ID to resume (ignored for iFlow)
485
+
486
+ Returns:
487
+ List of command arguments
488
+ """
489
+ if self.platform == "opencode":
490
+ return ["opencode", "run", "--session", session_id]
491
+ elif self.platform == "iflow":
492
+ # iFlow uses -c to continue most recent conversation
493
+ # session_id is ignored as iFlow doesn't support session IDs
494
+ return ["iflow", "-c"]
495
+ elif self.platform == "codex":
496
+ return ["codex", "resume", session_id]
497
+ elif self.platform == "kiro":
498
+ return ["kiro", "resume", session_id]
499
+ elif self.platform == "gemini":
500
+ return ["gemini", "--resume", session_id]
501
+ elif self.platform == "antigravity":
502
+ raise ValueError(
503
+ "Antigravity workflows are UI slash commands; CLI resume is not supported."
504
+ )
505
+ elif self.platform == "devin":
506
+ raise ValueError(
507
+ "Devin workflows are UI slash commands; CLI resume is not supported."
508
+ )
509
+ elif self.platform == "qoder":
510
+ return ["qodercli", "--resume", session_id]
511
+ elif self.platform == "codebuddy":
512
+ raise ValueError(
513
+ "CodeBuddy does not support non-interactive mode (no CLI agent)"
514
+ )
515
+ elif self.platform == "copilot":
516
+ raise ValueError(
517
+ "GitHub Copilot is IDE-only; CLI resume is not supported."
518
+ )
519
+ elif self.platform == "droid":
520
+ raise ValueError(
521
+ "Factory Droid CLI resume is not yet supported."
522
+ )
523
+ elif self.platform == "pi":
524
+ return ["pi", "-c", session_id]
525
+ elif self.platform == "trae":
526
+ raise ValueError(
527
+ "Trae is IDE-only; CLI resume is not supported."
528
+ )
529
+ elif self.platform == "omp":
530
+ raise ValueError(
531
+ "OMP uses native task tool for agent runs; CLI resume is not supported."
532
+ )
533
+ elif self.platform == "grok":
534
+ return ["grok", "-c"]
535
+ elif self.platform == "kimi":
536
+ return ["kimi", "--session", session_id]
537
+ else:
538
+ return ["claude", "--resume", session_id]
539
+
540
+ def get_resume_command_str(self, session_id: str, cwd: str | None = None) -> str:
541
+ """Get human-readable resume command string.
542
+
543
+ Args:
544
+ session_id: Session ID to resume
545
+ cwd: Optional working directory to cd into
546
+
547
+ Returns:
548
+ Command string for display
549
+ """
550
+ cmd = self.build_resume_command(session_id)
551
+ cmd_str = " ".join(cmd)
552
+
553
+ if cwd:
554
+ return f"cd {cwd} && {cmd_str}"
555
+ return cmd_str
556
+
557
+ # =========================================================================
558
+ # Platform Detection Helpers
559
+ # =========================================================================
560
+
561
+ @property
562
+ def is_opencode(self) -> bool:
563
+ """Check if platform is OpenCode."""
564
+ return self.platform == "opencode"
565
+
566
+ @property
567
+ def is_claude(self) -> bool:
568
+ """Check if platform is Claude Code."""
569
+ return self.platform == "claude"
570
+
571
+ @property
572
+ def is_cursor(self) -> bool:
573
+ """Check if platform is Cursor."""
574
+ return self.platform == "cursor"
575
+
576
+ @property
577
+ def is_iflow(self) -> bool:
578
+ """Check if platform is iFlow CLI."""
579
+ return self.platform == "iflow"
580
+
581
+ @property
582
+ def cli_name(self) -> str:
583
+ """Get CLI executable name.
584
+
585
+ Note: Cursor doesn't have a CLI tool, returns None-like value.
586
+ """
587
+ if self.is_opencode:
588
+ return "opencode"
589
+ elif self.is_cursor:
590
+ return "cursor" # Note: Cursor is IDE-only, no CLI
591
+ elif self.platform == "iflow":
592
+ return "iflow"
593
+ elif self.platform == "kiro":
594
+ return "kiro"
595
+ elif self.platform == "gemini":
596
+ return "gemini"
597
+ elif self.platform == "antigravity":
598
+ return "agy"
599
+ elif self.platform == "devin":
600
+ return "devin"
601
+ elif self.platform == "qoder":
602
+ return "qodercli"
603
+ elif self.platform == "codebuddy":
604
+ return "codebuddy"
605
+ elif self.platform == "copilot":
606
+ return "copilot"
607
+ elif self.platform == "droid":
608
+ return "droid"
609
+ elif self.platform == "pi":
610
+ return "pi"
611
+ elif self.platform == "trae":
612
+ return "trae"
613
+ elif self.platform == "omp":
614
+ return "omp"
615
+ elif self.platform == "grok":
616
+ return "grok"
617
+ elif self.platform == "kimi":
618
+ return "kimi"
619
+ else:
620
+ return "claude"
621
+
622
+ @property
623
+ def supports_cli_agents(self) -> bool:
624
+ """Check if platform supports running agents via CLI.
625
+
626
+ Claude Code, OpenCode, iFlow, and Codex support CLI agent execution.
627
+ Cursor is IDE-only and doesn't support CLI agents.
628
+ """
629
+ return self.platform in (
630
+ "claude",
631
+ "opencode",
632
+ "iflow",
633
+ "codex",
634
+ "pi",
635
+ "grok",
636
+ "kimi",
637
+ )
638
+
639
+ @property
640
+ def requires_agent_definition_file(self) -> bool:
641
+ """Check if platform requires an agent definition file (.md/.toml) to run.
642
+
643
+ Claude Code, OpenCode, iFlow: require agent .md files (--agent flag).
644
+ Codex: auto-discovers agents from .codex/agents/*.toml, no --agent flag.
645
+ """
646
+ return self.platform in ("claude", "opencode", "iflow")
647
+
648
+ # =========================================================================
649
+ # Session ID Handling
650
+ # =========================================================================
651
+
652
+ @property
653
+ def supports_session_id_on_create(self) -> bool:
654
+ """Check if platform supports specifying session ID on creation.
655
+
656
+ Claude Code: Yes (--session-id)
657
+ OpenCode: No (auto-generated, extract from logs)
658
+ iFlow: No (no session ID support)
659
+ """
660
+ return self.platform == "claude"
661
+
662
+ def extract_session_id_from_log(self, log_content: str) -> str | None:
663
+ """Extract session ID from log output (OpenCode only).
664
+
665
+ OpenCode generates session IDs in format: ses_xxx
666
+
667
+ Args:
668
+ log_content: Log file content
669
+
670
+ Returns:
671
+ Session ID if found, None otherwise
672
+ """
673
+ import re
674
+
675
+ # OpenCode session ID pattern
676
+ match = re.search(r"ses_[a-zA-Z0-9]+", log_content)
677
+ if match:
678
+ return match.group(0)
679
+ return None
680
+
681
+
682
+ # =============================================================================
683
+ # Factory Function
684
+ # =============================================================================
685
+
686
+
687
+ def get_cli_adapter(platform: str = "claude") -> CLIAdapter:
688
+ """Get CLI adapter for the specified platform.
689
+
690
+ Args:
691
+ platform: Platform name ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'devin', 'qoder', 'codebuddy', 'copilot', 'droid', 'pi', or 'trae')
692
+
693
+ Returns:
694
+ CLIAdapter instance
695
+
696
+ Raises:
697
+ ValueError: If platform is not supported
698
+
699
+ Note:
700
+ 'windsurf' is accepted as a deprecated alias for 'devin' (Windsurf was
701
+ renamed to Devin) and normalized before validation.
702
+ """
703
+ # Deprecated alias: Windsurf was renamed to Devin.
704
+ if platform == "windsurf":
705
+ platform = "devin"
706
+ if platform not in (
707
+ "claude",
708
+ "opencode",
709
+ "cursor",
710
+ "iflow",
711
+ "codex",
712
+ "kilo",
713
+ "kiro",
714
+ "gemini",
715
+ "antigravity",
716
+ "devin",
717
+ "qoder",
718
+ "codebuddy",
719
+ "copilot",
720
+ "droid",
721
+ "pi",
722
+ "trae",
723
+ "omp",
724
+ "grok",
725
+ "kimi",
726
+ ):
727
+ raise ValueError(
728
+ f"Unsupported platform: {platform} (must be 'claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'devin', 'qoder', 'codebuddy', 'copilot', 'droid', 'pi', 'trae', 'omp', 'grok', or 'kimi')"
729
+ )
730
+
731
+ return CLIAdapter(platform=platform) # type: ignore
732
+
733
+
734
+ _ALL_PLATFORM_CONFIG_DIRS = (
735
+ ".claude",
736
+ ".cursor",
737
+ ".iflow",
738
+ ".opencode",
739
+ ".codex",
740
+ ".kilocode",
741
+ ".kiro",
742
+ ".gemini",
743
+ ".agent",
744
+ ".devin",
745
+ ".windsurf", # deprecated: pre-rename Devin config dir (still a platform signal)
746
+ ".qoder",
747
+ ".codebuddy",
748
+ ".github/copilot",
749
+ ".factory",
750
+ ".pi",
751
+ ".trae",
752
+ ".omp",
753
+ ".grok",
754
+ ".kimi-code",
755
+ )
756
+ """Platform-specific config directory names used by detect_platform exclusion
757
+ checks. `.agents/skills/` is NOT listed here: it is a shared cross-platform
758
+ layer (written by Codex, also consumed by Amp/Cline/Warp/etc. via the
759
+ agentskills.io standard), not a single-platform signal. Its presence must not
760
+ block detection of Kiro, Antigravity, Devin, or other platforms."""
761
+
762
+
763
+ def _has_other_platform_dir(project_root: Path, exclude: set[str]) -> bool:
764
+ """Check if any platform config dir exists besides those in *exclude*."""
765
+ return any(
766
+ (project_root / d).is_dir()
767
+ for d in _ALL_PLATFORM_CONFIG_DIRS
768
+ if d not in exclude
769
+ )
770
+
771
+
772
+ def detect_platform(project_root: Path) -> Platform:
773
+ """Auto-detect platform based on existing config directories.
774
+
775
+ Detection order:
776
+ 1. TRELLIS_PLATFORM environment variable (if set)
777
+ 2. .opencode directory exists → opencode
778
+ 3. .iflow directory exists → iflow
779
+ 4. .cursor directory exists (without .claude) → cursor
780
+ 5. .gemini directory exists → gemini
781
+ 6. .codex exists and no other platform dirs → codex
782
+ 7. .kilocode directory exists → kilo
783
+ 8. .kiro/skills exists and no other platform dirs → kiro
784
+ 9. .agent/workflows exists and no other platform dirs → antigravity
785
+ 10. .devin/workflows (or legacy .windsurf/workflows) exists and no other platform dirs → devin
786
+ 11. .codebuddy directory exists → codebuddy
787
+ 12. .qoder directory exists → qoder
788
+ 13. .github/copilot directory exists → copilot
789
+ 14. .factory directory exists → droid
790
+ 15. .pi directory exists → pi
791
+ 16. .trae directory exists → trae
792
+ 17. Default → claude
793
+
794
+ Args:
795
+ project_root: Project root directory
796
+
797
+ Returns:
798
+ Detected platform ('claude', 'opencode', 'cursor', 'iflow', 'codex', 'kilo', 'kiro', 'gemini', 'antigravity', 'devin', 'qoder', 'codebuddy', 'copilot', 'droid', 'pi', 'trae', or default 'claude')
799
+ """
800
+ import os
801
+
802
+ # Check environment variable first
803
+ env_platform = os.environ.get("TRELLIS_PLATFORM", "").lower()
804
+ # Deprecated alias: Windsurf was renamed to Devin.
805
+ if env_platform == "windsurf":
806
+ env_platform = "devin"
807
+ if env_platform in (
808
+ "claude",
809
+ "opencode",
810
+ "cursor",
811
+ "iflow",
812
+ "codex",
813
+ "kilo",
814
+ "kiro",
815
+ "gemini",
816
+ "antigravity",
817
+ "devin",
818
+ "qoder",
819
+ "codebuddy",
820
+ "copilot",
821
+ "droid",
822
+ "pi",
823
+ "trae",
824
+ "omp",
825
+ "grok",
826
+ "kimi",
827
+ ):
828
+ return env_platform # type: ignore
829
+
830
+ # Check for .opencode directory (OpenCode-specific)
831
+ if (project_root / ".opencode").is_dir():
832
+ return "opencode"
833
+
834
+ # Check for .iflow directory (iFlow-specific)
835
+ if (project_root / ".iflow").is_dir():
836
+ return "iflow"
837
+
838
+ # Check for .cursor directory (Cursor-specific)
839
+ # Only detect as cursor if .claude doesn't exist (to avoid confusion)
840
+ if (project_root / ".cursor").is_dir() and not (project_root / ".claude").is_dir():
841
+ return "cursor"
842
+
843
+ # Check for .gemini directory (Gemini CLI-specific)
844
+ if (project_root / ".gemini").is_dir():
845
+ return "gemini"
846
+
847
+ # Check for .codex directory (Codex-specific)
848
+ # .agents/skills/ alone does NOT trigger codex detection (it's a shared standard)
849
+ if (project_root / ".codex").is_dir() and not _has_other_platform_dir(
850
+ project_root, {".codex", ".agents"}
851
+ ):
852
+ return "codex"
853
+
854
+ # Check for .kilocode directory (Kilo-specific)
855
+ if (project_root / ".kilocode").is_dir():
856
+ return "kilo"
857
+
858
+ # Check for Kiro skills directory only when no other platform config exists
859
+ if (project_root / ".kiro" / "skills").is_dir() and not _has_other_platform_dir(
860
+ project_root, {".kiro"}
861
+ ):
862
+ return "kiro"
863
+
864
+ # Check for Antigravity workflow directory only when no other platform config exists
865
+ if (
866
+ project_root / ".agent" / "workflows"
867
+ ).is_dir() and not _has_other_platform_dir(
868
+ project_root, {".agent", ".gemini"}
869
+ ):
870
+ return "antigravity"
871
+
872
+ # Check for Devin workflow directory only when no other platform config
873
+ # exists. `.windsurf/workflows` is the legacy pre-rename path (still detected
874
+ # as devin for back-compat until users migrate via `trellis update --migrate`).
875
+ if (
876
+ (project_root / ".devin" / "workflows").is_dir()
877
+ or (project_root / ".windsurf" / "workflows").is_dir()
878
+ ) and not _has_other_platform_dir(
879
+ project_root, {".devin", ".windsurf"}
880
+ ):
881
+ return "devin"
882
+
883
+ # Check for .codebuddy directory (CodeBuddy-specific)
884
+ if (project_root / ".codebuddy").is_dir():
885
+ return "codebuddy"
886
+
887
+ # Check for .qoder directory (Qoder-specific)
888
+ if (project_root / ".qoder").is_dir():
889
+ return "qoder"
890
+
891
+ # Check for .github/copilot directory (GitHub Copilot-specific)
892
+ if (project_root / ".github" / "copilot").is_dir():
893
+ return "copilot"
894
+
895
+ # Check for .factory directory (Factory Droid-specific)
896
+ if (project_root / ".factory").is_dir():
897
+ return "droid"
898
+
899
+ # Check for .pi directory (Pi Agent-specific)
900
+ if (project_root / ".pi").is_dir():
901
+ return "pi"
902
+
903
+ # Check for .trae directory (Trae IDE-specific)
904
+ if (project_root / ".trae").is_dir():
905
+ return "trae"
906
+
907
+ # Check for .omp directory (OMP-specific)
908
+ if (project_root / ".omp").is_dir():
909
+ return "omp"
910
+
911
+ # Check for .grok directory (Grok Build-specific)
912
+ if (project_root / ".grok").is_dir():
913
+ return "grok"
914
+
915
+ # Check for .kimi-code directory (Kimi Code-specific)
916
+ if (project_root / ".kimi-code").is_dir():
917
+ return "kimi"
918
+
919
+ # Fallback: checkout only has the Codex shared-skills layer
920
+ # (.agents/skills/trellis-* dirs) and no explicit platform config dir.
921
+ # Happens on fresh clones where .codex/ is gitignored/absent but the
922
+ # shared skills were committed to git. Must guard against the case
923
+ # where .claude/ or any other platform dir also exists — .agents/skills/
924
+ # can legitimately coexist with any platform as a shared consumption
925
+ # layer for Amp/Cline/Warp/etc.
926
+ agents_skills = project_root / ".agents" / "skills"
927
+ if agents_skills.is_dir() and not _has_other_platform_dir(
928
+ project_root, set()
929
+ ):
930
+ try:
931
+ for entry in agents_skills.iterdir():
932
+ if entry.is_dir() and entry.name.startswith("trellis-"):
933
+ return "codex"
934
+ except OSError:
935
+ pass
936
+
937
+ return "claude"
938
+
939
+
940
+ def get_cli_adapter_auto(project_root: Path) -> CLIAdapter:
941
+ """Get CLI adapter with auto-detected platform.
942
+
943
+ Args:
944
+ project_root: Project root directory
945
+
946
+ Returns:
947
+ CLIAdapter instance for detected platform
948
+ """
949
+ platform = detect_platform(project_root)
950
+ return CLIAdapter(platform=platform)