@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.1

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 (394) hide show
  1. package/dist/cli/index.js +0 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/init.d.ts +0 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +2 -4
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/update.d.ts +5 -0
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +83 -22
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/configurators/antigravity.d.ts +3 -4
  12. package/dist/configurators/antigravity.d.ts.map +1 -1
  13. package/dist/configurators/antigravity.js +17 -10
  14. package/dist/configurators/antigravity.js.map +1 -1
  15. package/dist/configurators/claude.d.ts +5 -28
  16. package/dist/configurators/claude.d.ts.map +1 -1
  17. package/dist/configurators/claude.js +30 -51
  18. package/dist/configurators/claude.js.map +1 -1
  19. package/dist/configurators/codebuddy.d.ts +6 -7
  20. package/dist/configurators/codebuddy.d.ts.map +1 -1
  21. package/dist/configurators/codebuddy.js +23 -51
  22. package/dist/configurators/codebuddy.js.map +1 -1
  23. package/dist/configurators/codex.d.ts +3 -6
  24. package/dist/configurators/codex.d.ts.map +1 -1
  25. package/dist/configurators/codex.js +29 -12
  26. package/dist/configurators/codex.js.map +1 -1
  27. package/dist/configurators/copilot.d.ts +6 -5
  28. package/dist/configurators/copilot.d.ts.map +1 -1
  29. package/dist/configurators/copilot.js +42 -13
  30. package/dist/configurators/copilot.js.map +1 -1
  31. package/dist/configurators/cursor.d.ts +6 -1
  32. package/dist/configurators/cursor.d.ts.map +1 -1
  33. package/dist/configurators/cursor.js +22 -45
  34. package/dist/configurators/cursor.js.map +1 -1
  35. package/dist/configurators/droid.d.ts +6 -1
  36. package/dist/configurators/droid.d.ts.map +1 -1
  37. package/dist/configurators/droid.js +23 -41
  38. package/dist/configurators/droid.js.map +1 -1
  39. package/dist/configurators/gemini.d.ts +8 -4
  40. package/dist/configurators/gemini.d.ts.map +1 -1
  41. package/dist/configurators/gemini.js +28 -47
  42. package/dist/configurators/gemini.js.map +1 -1
  43. package/dist/configurators/index.d.ts +1 -1
  44. package/dist/configurators/index.d.ts.map +1 -1
  45. package/dist/configurators/index.js +142 -98
  46. package/dist/configurators/index.js.map +1 -1
  47. package/dist/configurators/kilo.d.ts +3 -4
  48. package/dist/configurators/kilo.d.ts.map +1 -1
  49. package/dist/configurators/kilo.js +19 -46
  50. package/dist/configurators/kilo.js.map +1 -1
  51. package/dist/configurators/kiro.d.ts +4 -4
  52. package/dist/configurators/kiro.d.ts.map +1 -1
  53. package/dist/configurators/kiro.js +18 -14
  54. package/dist/configurators/kiro.js.map +1 -1
  55. package/dist/configurators/opencode.d.ts +3 -28
  56. package/dist/configurators/opencode.d.ts.map +1 -1
  57. package/dist/configurators/opencode.js +23 -48
  58. package/dist/configurators/opencode.js.map +1 -1
  59. package/dist/configurators/qoder.d.ts +6 -4
  60. package/dist/configurators/qoder.d.ts.map +1 -1
  61. package/dist/configurators/qoder.js +20 -47
  62. package/dist/configurators/qoder.js.map +1 -1
  63. package/dist/configurators/shared.d.ts +66 -3
  64. package/dist/configurators/shared.d.ts.map +1 -1
  65. package/dist/configurators/shared.js +251 -3
  66. package/dist/configurators/shared.js.map +1 -1
  67. package/dist/configurators/windsurf.d.ts +3 -4
  68. package/dist/configurators/windsurf.d.ts.map +1 -1
  69. package/dist/configurators/windsurf.js +17 -10
  70. package/dist/configurators/windsurf.js.map +1 -1
  71. package/dist/configurators/workflow.d.ts +0 -3
  72. package/dist/configurators/workflow.d.ts.map +1 -1
  73. package/dist/configurators/workflow.js +1 -7
  74. package/dist/configurators/workflow.js.map +1 -1
  75. package/dist/migrations/manifests/0.4.0.json +1 -1
  76. package/dist/migrations/manifests/0.5.0-beta.0.json +1644 -0
  77. package/dist/templates/claude/agents/check.md +2 -29
  78. package/dist/templates/claude/agents/research.md +70 -52
  79. package/dist/templates/claude/index.d.ts +5 -37
  80. package/dist/templates/claude/index.d.ts.map +1 -1
  81. package/dist/templates/claude/index.js +3 -42
  82. package/dist/templates/claude/index.js.map +1 -1
  83. package/dist/templates/claude/settings.json +3 -4
  84. package/dist/templates/{iflow → codebuddy}/agents/check.md +3 -30
  85. package/dist/templates/{iflow → codebuddy}/agents/implement.md +1 -1
  86. package/dist/templates/codebuddy/agents/research.md +138 -0
  87. package/dist/templates/codebuddy/index.d.ts +6 -16
  88. package/dist/templates/codebuddy/index.d.ts.map +1 -1
  89. package/dist/templates/codebuddy/index.js +6 -36
  90. package/dist/templates/codebuddy/index.js.map +1 -1
  91. package/dist/templates/codebuddy/settings.json +59 -0
  92. package/dist/templates/codex/agents/research.toml +50 -16
  93. package/dist/templates/codex/config.toml +10 -0
  94. package/dist/templates/codex/hooks/session-start.py +65 -29
  95. package/dist/templates/codex/hooks.json +11 -0
  96. package/dist/templates/codex/index.d.ts +0 -1
  97. package/dist/templates/codex/index.d.ts.map +1 -1
  98. package/dist/templates/codex/index.js +1 -8
  99. package/dist/templates/codex/index.js.map +1 -1
  100. package/dist/templates/common/commands/continue.md +51 -0
  101. package/dist/templates/common/commands/finish-work.md +32 -0
  102. package/dist/templates/common/commands/start.md +56 -0
  103. package/dist/templates/common/index.d.ts +28 -0
  104. package/dist/templates/common/index.d.ts.map +1 -0
  105. package/dist/templates/common/index.js +55 -0
  106. package/dist/templates/common/index.js.map +1 -0
  107. package/dist/templates/{codebuddy/commands/trellis → common/skills}/brainstorm.md +4 -4
  108. package/dist/templates/{opencode/commands/trellis → common/skills}/break-loop.md +4 -4
  109. package/dist/templates/common/skills/check.md +87 -0
  110. package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
  111. package/dist/templates/copilot/hooks/session-start.py +65 -29
  112. package/dist/templates/copilot/hooks.json +8 -0
  113. package/dist/templates/cursor/agents/check.md +95 -0
  114. package/dist/templates/cursor/agents/implement.md +95 -0
  115. package/dist/templates/cursor/agents/research.md +138 -0
  116. package/dist/templates/cursor/hooks.json +24 -0
  117. package/dist/templates/cursor/index.d.ts +6 -17
  118. package/dist/templates/cursor/index.d.ts.map +1 -1
  119. package/dist/templates/cursor/index.js +6 -37
  120. package/dist/templates/cursor/index.js.map +1 -1
  121. package/dist/templates/droid/droids/check.md +95 -0
  122. package/dist/templates/droid/droids/implement.md +95 -0
  123. package/dist/templates/droid/droids/research.md +138 -0
  124. package/dist/templates/droid/index.d.ts +7 -19
  125. package/dist/templates/droid/index.d.ts.map +1 -1
  126. package/dist/templates/droid/index.js +7 -39
  127. package/dist/templates/droid/index.js.map +1 -1
  128. package/dist/templates/droid/settings.json +59 -0
  129. package/dist/templates/extract.d.ts +7 -193
  130. package/dist/templates/extract.d.ts.map +1 -1
  131. package/dist/templates/extract.js +7 -310
  132. package/dist/templates/extract.js.map +1 -1
  133. package/dist/templates/gemini/agents/check.md +95 -0
  134. package/dist/templates/gemini/agents/implement.md +95 -0
  135. package/dist/templates/gemini/agents/research.md +138 -0
  136. package/dist/templates/gemini/index.d.ts +6 -14
  137. package/dist/templates/gemini/index.d.ts.map +1 -1
  138. package/dist/templates/gemini/index.js +6 -37
  139. package/dist/templates/gemini/index.js.map +1 -1
  140. package/dist/templates/gemini/settings.json +28 -0
  141. package/dist/templates/kiro/agents/check.json +13 -0
  142. package/dist/templates/kiro/agents/implement.json +13 -0
  143. package/dist/templates/kiro/agents/research.json +21 -0
  144. package/dist/templates/kiro/index.d.ts +11 -11
  145. package/dist/templates/kiro/index.d.ts.map +1 -1
  146. package/dist/templates/kiro/index.js +11 -33
  147. package/dist/templates/kiro/index.js.map +1 -1
  148. package/dist/templates/opencode/agents/check.md +3 -30
  149. package/dist/templates/opencode/agents/implement.md +1 -1
  150. package/dist/templates/opencode/agents/research.md +1 -2
  151. package/dist/templates/opencode/plugins/inject-subagent-context.js +9 -183
  152. package/dist/templates/opencode/plugins/inject-workflow-state.js +160 -0
  153. package/dist/templates/opencode/plugins/session-start.js +71 -32
  154. package/dist/templates/qoder/agents/check.md +95 -0
  155. package/dist/templates/qoder/agents/implement.md +95 -0
  156. package/dist/templates/qoder/agents/research.md +138 -0
  157. package/dist/templates/qoder/index.d.ts +7 -10
  158. package/dist/templates/qoder/index.d.ts.map +1 -1
  159. package/dist/templates/qoder/index.js +7 -32
  160. package/dist/templates/qoder/index.js.map +1 -1
  161. package/dist/templates/qoder/settings.json +47 -0
  162. package/dist/templates/shared-hooks/index.d.ts +19 -0
  163. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  164. package/dist/templates/shared-hooks/index.js +30 -0
  165. package/dist/templates/shared-hooks/index.js.map +1 -0
  166. package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +74 -263
  167. package/dist/templates/shared-hooks/inject-workflow-state.py +231 -0
  168. package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +162 -55
  169. package/dist/templates/template-utils.d.ts +26 -0
  170. package/dist/templates/template-utils.d.ts.map +1 -0
  171. package/dist/templates/template-utils.js +60 -0
  172. package/dist/templates/template-utils.js.map +1 -0
  173. package/dist/templates/trellis/index.d.ts +1 -14
  174. package/dist/templates/trellis/index.d.ts.map +1 -1
  175. package/dist/templates/trellis/index.js +2 -27
  176. package/dist/templates/trellis/index.js.map +1 -1
  177. package/dist/templates/trellis/scripts/common/cli_adapter.py +2 -2
  178. package/dist/templates/trellis/scripts/common/config.py +126 -1
  179. package/dist/templates/trellis/scripts/common/git_context.py +25 -2
  180. package/dist/templates/trellis/scripts/common/task_context.py +3 -23
  181. package/dist/templates/trellis/scripts/common/task_store.py +0 -12
  182. package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
  183. package/dist/templates/trellis/scripts/task.py +6 -35
  184. package/dist/templates/trellis/workflow.md +274 -297
  185. package/dist/types/ai-tools.d.ts +21 -3
  186. package/dist/types/ai-tools.d.ts.map +1 -1
  187. package/dist/types/ai-tools.js +106 -15
  188. package/dist/types/ai-tools.js.map +1 -1
  189. package/dist/types/migration.d.ts +8 -1
  190. package/dist/types/migration.d.ts.map +1 -1
  191. package/package.json +3 -2
  192. package/dist/configurators/iflow.d.ts +0 -33
  193. package/dist/configurators/iflow.d.ts.map +0 -1
  194. package/dist/configurators/iflow.js +0 -99
  195. package/dist/configurators/iflow.js.map +0 -1
  196. package/dist/templates/antigravity/index.d.ts +0 -12
  197. package/dist/templates/antigravity/index.d.ts.map +0 -1
  198. package/dist/templates/antigravity/index.js +0 -29
  199. package/dist/templates/antigravity/index.js.map +0 -1
  200. package/dist/templates/claude/agents/debug.md +0 -106
  201. package/dist/templates/claude/agents/dispatch.md +0 -213
  202. package/dist/templates/claude/agents/plan.md +0 -396
  203. package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
  204. package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
  205. package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
  206. package/dist/templates/claude/commands/trellis/check.md +0 -25
  207. package/dist/templates/claude/commands/trellis/create-command.md +0 -154
  208. package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
  209. package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
  210. package/dist/templates/claude/commands/trellis/onboard.md +0 -358
  211. package/dist/templates/claude/commands/trellis/parallel.md +0 -192
  212. package/dist/templates/claude/commands/trellis/record-session.md +0 -62
  213. package/dist/templates/claude/commands/trellis/start.md +0 -393
  214. package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
  215. package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
  216. package/dist/templates/claude/hooks/ralph-loop.py +0 -396
  217. package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
  218. package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
  219. package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
  220. package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
  221. package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
  222. package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
  223. package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
  224. package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
  225. package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
  226. package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
  227. package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
  228. package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
  229. package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
  230. package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
  231. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
  232. package/dist/templates/cursor/commands/trellis-check.md +0 -25
  233. package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
  234. package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
  235. package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
  236. package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
  237. package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
  238. package/dist/templates/cursor/commands/trellis-start.md +0 -373
  239. package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
  240. package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
  241. package/dist/templates/droid/commands/trellis/brainstorm.md +0 -491
  242. package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
  243. package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
  244. package/dist/templates/droid/commands/trellis/check.md +0 -29
  245. package/dist/templates/droid/commands/trellis/create-command.md +0 -158
  246. package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
  247. package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
  248. package/dist/templates/droid/commands/trellis/onboard.md +0 -362
  249. package/dist/templates/droid/commands/trellis/record-session.md +0 -66
  250. package/dist/templates/droid/commands/trellis/start.md +0 -377
  251. package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
  252. package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
  253. package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
  254. package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
  255. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
  256. package/dist/templates/gemini/commands/trellis/check.toml +0 -29
  257. package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
  258. package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
  259. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
  260. package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
  261. package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
  262. package/dist/templates/gemini/commands/trellis/start.toml +0 -354
  263. package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
  264. package/dist/templates/iflow/agents/debug.md +0 -106
  265. package/dist/templates/iflow/agents/dispatch.md +0 -213
  266. package/dist/templates/iflow/agents/plan.md +0 -396
  267. package/dist/templates/iflow/agents/research.md +0 -120
  268. package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
  269. package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
  270. package/dist/templates/iflow/commands/trellis/break-loop.md +0 -125
  271. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
  272. package/dist/templates/iflow/commands/trellis/check.md +0 -25
  273. package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
  274. package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
  275. package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
  276. package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
  277. package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
  278. package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
  279. package/dist/templates/iflow/commands/trellis/start.md +0 -393
  280. package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
  281. package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
  282. package/dist/templates/iflow/hooks/session-start.py +0 -403
  283. package/dist/templates/iflow/index.d.ts +0 -54
  284. package/dist/templates/iflow/index.d.ts.map +0 -1
  285. package/dist/templates/iflow/index.js +0 -85
  286. package/dist/templates/iflow/index.js.map +0 -1
  287. package/dist/templates/iflow/settings.json +0 -60
  288. package/dist/templates/kilo/index.d.ts +0 -16
  289. package/dist/templates/kilo/index.d.ts.map +0 -1
  290. package/dist/templates/kilo/index.js +0 -39
  291. package/dist/templates/kilo/index.js.map +0 -1
  292. package/dist/templates/kilo/workflows/before-dev.md +0 -29
  293. package/dist/templates/kilo/workflows/brainstorm.md +0 -487
  294. package/dist/templates/kilo/workflows/break-loop.md +0 -125
  295. package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
  296. package/dist/templates/kilo/workflows/check.md +0 -25
  297. package/dist/templates/kilo/workflows/create-command.md +0 -152
  298. package/dist/templates/kilo/workflows/finish-work.md +0 -129
  299. package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
  300. package/dist/templates/kilo/workflows/onboard.md +0 -358
  301. package/dist/templates/kilo/workflows/parallel.md +0 -193
  302. package/dist/templates/kilo/workflows/record-session.md +0 -62
  303. package/dist/templates/kilo/workflows/start.md +0 -387
  304. package/dist/templates/kilo/workflows/update-spec.md +0 -285
  305. package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
  306. package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
  307. package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
  308. package/dist/templates/kiro/skills/check/SKILL.md +0 -30
  309. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
  310. package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
  311. package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
  312. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
  313. package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
  314. package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
  315. package/dist/templates/kiro/skills/start/SKILL.md +0 -351
  316. package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
  317. package/dist/templates/opencode/agents/debug.md +0 -129
  318. package/dist/templates/opencode/agents/dispatch.md +0 -223
  319. package/dist/templates/opencode/agents/trellis-plan.md +0 -427
  320. package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
  321. package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
  322. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
  323. package/dist/templates/opencode/commands/trellis/check.md +0 -25
  324. package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
  325. package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
  326. package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
  327. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  328. package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
  329. package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
  330. package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
  331. package/dist/templates/opencode/commands/trellis/start.md +0 -351
  332. package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
  333. package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
  334. package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
  335. package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
  336. package/dist/templates/qoder/skills/check/SKILL.md +0 -30
  337. package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
  338. package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
  339. package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
  340. package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
  341. package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
  342. package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
  343. package/dist/templates/qoder/skills/start/SKILL.md +0 -388
  344. package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
  345. package/dist/templates/trellis/scripts/common/phase.py +0 -254
  346. package/dist/templates/trellis/scripts/common/registry.py +0 -335
  347. package/dist/templates/trellis/scripts/common/worktree.py +0 -305
  348. package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
  349. package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
  350. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
  351. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
  352. package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
  353. package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
  354. package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
  355. package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
  356. package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
  357. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
  358. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
  359. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
  360. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
  361. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
  362. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
  363. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
  364. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
  365. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
  366. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
  367. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
  368. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
  369. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
  370. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
  371. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
  372. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
  373. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
  374. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
  375. package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
  376. package/dist/templates/trellis/worktree.yaml +0 -47
  377. package/dist/templates/windsurf/index.d.ts +0 -21
  378. package/dist/templates/windsurf/index.d.ts.map +0 -1
  379. package/dist/templates/windsurf/index.js +0 -44
  380. package/dist/templates/windsurf/index.js.map +0 -1
  381. package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
  382. package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
  383. package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
  384. package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
  385. package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
  386. package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
  387. package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
  388. package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
  389. package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
  390. package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
  391. package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
  392. package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
  393. /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
  394. /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
@@ -1,395 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
- """
4
- Ralph Loop - SubagentStop Hook for Check Agent Loop Control
5
-
6
- Based on the Ralph Wiggum technique for autonomous agent loops.
7
- Uses completion promises to control when the check agent can stop.
8
-
9
- Mechanism:
10
- - Intercepts when check subagent tries to stop (SubagentStop event)
11
- - If verify commands configured in worktree.yaml, runs them to verify
12
- - Otherwise, reads check.jsonl to get dynamic completion markers ({reason}_FINISH)
13
- - Blocks stopping until verification passes or all markers found
14
- - Has max iterations as safety limit
15
-
16
- State file: .trellis/.ralph-state.json
17
- - Tracks current iteration count per session
18
- - Resets when task changes
19
- """
20
-
21
- # IMPORTANT: Suppress all warnings FIRST
22
- import warnings
23
- warnings.filterwarnings("ignore")
24
-
25
- import json
26
- import os
27
- import subprocess
28
- import sys
29
- from datetime import datetime
30
- from pathlib import Path
31
-
32
- # IMPORTANT: Force stdout to use UTF-8 on Windows
33
- # This fixes UnicodeEncodeError when outputting non-ASCII characters
34
- if sys.platform == "win32":
35
- import io as _io
36
- if hasattr(sys.stdout, "reconfigure"):
37
- sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr]
38
- elif hasattr(sys.stdout, "detach"):
39
- sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr]
40
-
41
- # =============================================================================
42
- # Configuration
43
- # =============================================================================
44
-
45
- MAX_ITERATIONS = 5 # Safety limit to prevent infinite loops
46
- STATE_TIMEOUT_MINUTES = 30 # Reset state if older than this
47
- STATE_FILE = ".trellis/.ralph-state.json"
48
- WORKTREE_YAML = ".trellis/worktree.yaml"
49
- DIR_WORKFLOW = ".trellis"
50
- FILE_CURRENT_TASK = ".current-task"
51
-
52
- # Only control loop for check agent
53
- TARGET_AGENT = "check"
54
-
55
-
56
- def find_repo_root(start_path: str) -> str | None:
57
- """Find git repo root from start_path upwards"""
58
- current = Path(start_path).resolve()
59
- while current != current.parent:
60
- if (current / ".git").exists():
61
- return str(current)
62
- current = current.parent
63
- return None
64
-
65
-
66
- def get_current_task(repo_root: str) -> str | None:
67
- """Read current task directory path"""
68
- current_task_file = os.path.join(repo_root, DIR_WORKFLOW, FILE_CURRENT_TASK)
69
- if not os.path.exists(current_task_file):
70
- return None
71
-
72
- try:
73
- with open(current_task_file, "r", encoding="utf-8") as f:
74
- content = f.read().strip()
75
- if not content:
76
- return None
77
- normalized = content.replace("\\", "/")
78
- while normalized.startswith("./"):
79
- normalized = normalized[2:]
80
- if normalized.startswith("tasks/"):
81
- normalized = f".trellis/{normalized}"
82
- return normalized
83
- except Exception:
84
- return None
85
-
86
-
87
- def get_verify_commands(repo_root: str) -> list[str]:
88
- """
89
- Read verify commands from worktree.yaml.
90
-
91
- Returns list of commands to run, or empty list if not configured.
92
- Uses simple YAML parsing without external dependencies.
93
- """
94
- yaml_path = os.path.join(repo_root, WORKTREE_YAML)
95
- if not os.path.exists(yaml_path):
96
- return []
97
-
98
- try:
99
- with open(yaml_path, "r", encoding="utf-8") as f:
100
- content = f.read()
101
-
102
- # Simple YAML parsing for verify section
103
- # Look for "verify:" followed by list items
104
- lines = content.split("\n")
105
- in_verify_section = False
106
- commands = []
107
-
108
- for line in lines:
109
- stripped = line.strip()
110
-
111
- # Check for section start
112
- if stripped.startswith("verify:"):
113
- in_verify_section = True
114
- continue
115
-
116
- # Check for new section (not indented, ends with :)
117
- if (
118
- not line.startswith(" ")
119
- and not line.startswith("\t")
120
- and stripped.endswith(":")
121
- and stripped != ""
122
- ):
123
- in_verify_section = False
124
- continue
125
-
126
- # If in verify section, look for list items
127
- if in_verify_section:
128
- # Skip comments and empty lines
129
- if stripped.startswith("#") or stripped == "":
130
- continue
131
- # Parse list item (- command)
132
- if stripped.startswith("- "):
133
- cmd = stripped[2:].strip()
134
- if cmd:
135
- commands.append(cmd)
136
-
137
- return commands
138
- except Exception:
139
- return []
140
-
141
-
142
- def run_verify_commands(repo_root: str, commands: list[str]) -> tuple[bool, str]:
143
- """
144
- Run verify commands and return (success, message).
145
-
146
- All commands must pass for success.
147
- """
148
- for cmd in commands:
149
- try:
150
- result = subprocess.run(
151
- cmd,
152
- shell=True,
153
- cwd=repo_root,
154
- capture_output=True,
155
- timeout=120, # 2 minute timeout per command
156
- )
157
- if result.returncode != 0:
158
- stderr = result.stderr.decode("utf-8", errors="replace")
159
- stdout = result.stdout.decode("utf-8", errors="replace")
160
- error_output = stderr or stdout
161
- # Truncate long output
162
- if len(error_output) > 500:
163
- error_output = error_output[:500] + "..."
164
- return False, f"Command failed: {cmd}\n{error_output}"
165
- except subprocess.TimeoutExpired:
166
- return False, f"Command timed out: {cmd}"
167
- except Exception as e:
168
- return False, f"Command error: {cmd} - {str(e)}"
169
-
170
- return True, "All verify commands passed"
171
-
172
-
173
- def get_completion_markers(repo_root: str, task_dir: str) -> list[str]:
174
- """
175
- Read check.jsonl and generate completion markers from reasons.
176
-
177
- Each entry's "reason" field becomes {REASON}_FINISH marker.
178
- Example: {"file": "...", "reason": "TypeCheck"} -> "TYPECHECK_FINISH"
179
- """
180
- check_jsonl_path = os.path.join(repo_root, task_dir, "check.jsonl")
181
- markers = []
182
-
183
- if not os.path.exists(check_jsonl_path):
184
- # Fallback: if no check.jsonl, use default marker
185
- return ["ALL_CHECKS_FINISH"]
186
-
187
- try:
188
- with open(check_jsonl_path, "r", encoding="utf-8") as f:
189
- for line in f:
190
- line = line.strip()
191
- if not line:
192
- continue
193
- try:
194
- item = json.loads(line)
195
- reason = item.get("reason", "")
196
- if reason:
197
- # Convert to uppercase and add _FINISH suffix
198
- marker = f"{reason.upper().replace(' ', '_')}_FINISH"
199
- if marker not in markers:
200
- markers.append(marker)
201
- except json.JSONDecodeError:
202
- continue
203
- except Exception:
204
- pass
205
-
206
- # If no markers found, use default
207
- if not markers:
208
- markers = ["ALL_CHECKS_FINISH"]
209
-
210
- return markers
211
-
212
-
213
- def load_state(repo_root: str) -> dict:
214
- """Load Ralph Loop state from file"""
215
- state_path = os.path.join(repo_root, STATE_FILE)
216
- if not os.path.exists(state_path):
217
- return {"task": None, "iteration": 0, "started_at": None}
218
-
219
- try:
220
- with open(state_path, "r", encoding="utf-8") as f:
221
- return json.load(f)
222
- except Exception:
223
- return {"task": None, "iteration": 0, "started_at": None}
224
-
225
-
226
- def save_state(repo_root: str, state: dict) -> None:
227
- """Save Ralph Loop state to file"""
228
- state_path = os.path.join(repo_root, STATE_FILE)
229
- try:
230
- # Ensure directory exists
231
- os.makedirs(os.path.dirname(state_path), exist_ok=True)
232
- with open(state_path, "w", encoding="utf-8") as f:
233
- json.dump(state, f, indent=2, ensure_ascii=False)
234
- except Exception:
235
- pass
236
-
237
-
238
- def check_completion(agent_output: str, markers: list[str]) -> tuple[bool, list[str]]:
239
- """
240
- Check if all completion markers are present in agent output.
241
-
242
- Returns:
243
- (all_complete, missing_markers)
244
- """
245
- missing = []
246
- for marker in markers:
247
- if marker not in agent_output:
248
- missing.append(marker)
249
-
250
- return len(missing) == 0, missing
251
-
252
-
253
- def main():
254
- try:
255
- input_data = json.load(sys.stdin)
256
- except json.JSONDecodeError:
257
- # If can't parse input, allow stop
258
- sys.exit(0)
259
-
260
- # Get event info
261
- hook_event = input_data.get("hook_event_name", "")
262
-
263
- # Only handle SubagentStop event
264
- if hook_event != "SubagentStop":
265
- sys.exit(0)
266
-
267
- # Get subagent info
268
- subagent_type = input_data.get("subagent_type", "")
269
- agent_output = input_data.get("agent_output", "")
270
- original_prompt = input_data.get("prompt", "")
271
- cwd = input_data.get("cwd", os.getcwd())
272
-
273
- # Only control check agent
274
- if subagent_type != TARGET_AGENT:
275
- sys.exit(0)
276
-
277
- # Skip Ralph Loop for finish phase (already verified in check phase)
278
- if "[finish]" in original_prompt.lower():
279
- sys.exit(0)
280
-
281
- # Find repo root
282
- repo_root = find_repo_root(cwd)
283
- if not repo_root:
284
- sys.exit(0)
285
-
286
- # Get current task
287
- task_dir = get_current_task(repo_root)
288
- if not task_dir:
289
- sys.exit(0)
290
-
291
- # Load state
292
- state = load_state(repo_root)
293
-
294
- # Reset state if task changed or state is too old
295
- should_reset = False
296
- if state.get("task") != task_dir:
297
- should_reset = True
298
- elif state.get("started_at"):
299
- try:
300
- started = datetime.fromisoformat(state["started_at"])
301
- if (datetime.now() - started).total_seconds() > STATE_TIMEOUT_MINUTES * 60:
302
- should_reset = True
303
- except (ValueError, TypeError):
304
- should_reset = True
305
-
306
- if should_reset:
307
- state = {
308
- "task": task_dir,
309
- "iteration": 0,
310
- "started_at": datetime.now().isoformat(),
311
- }
312
-
313
- # Increment iteration
314
- state["iteration"] = state.get("iteration", 0) + 1
315
- current_iteration = state["iteration"]
316
-
317
- # Save state
318
- save_state(repo_root, state)
319
-
320
- # Safety check: max iterations
321
- if current_iteration >= MAX_ITERATIONS:
322
- # Allow stop, reset state for next run
323
- state["iteration"] = 0
324
- save_state(repo_root, state)
325
- output = {
326
- "decision": "allow",
327
- "reason": f"Max iterations ({MAX_ITERATIONS}) reached. Stopping to prevent infinite loop.",
328
- }
329
- print(json.dumps(output, ensure_ascii=False))
330
- sys.exit(0)
331
-
332
- # Check if verify commands are configured
333
- verify_commands = get_verify_commands(repo_root)
334
-
335
- if verify_commands:
336
- # Use programmatic verification
337
- passed, message = run_verify_commands(repo_root, verify_commands)
338
-
339
- if passed:
340
- # All verify commands passed, allow stop
341
- state["iteration"] = 0
342
- save_state(repo_root, state)
343
- output = {
344
- "decision": "allow",
345
- "reason": "All verify commands passed. Check phase complete.",
346
- }
347
- print(json.dumps(output, ensure_ascii=False))
348
- sys.exit(0)
349
- else:
350
- # Verification failed, block stop
351
- output = {
352
- "decision": "block",
353
- "reason": f"Iteration {current_iteration}/{MAX_ITERATIONS}. Verification failed:\n{message}\n\nPlease fix the issues and try again.",
354
- }
355
- print(json.dumps(output, ensure_ascii=False))
356
- sys.exit(0)
357
- else:
358
- # No verify commands, fall back to completion markers
359
- markers = get_completion_markers(repo_root, task_dir)
360
- all_complete, missing = check_completion(agent_output, markers)
361
-
362
- if all_complete:
363
- # All checks complete, allow stop
364
- state["iteration"] = 0
365
- save_state(repo_root, state)
366
- output = {
367
- "decision": "allow",
368
- "reason": "All completion markers found. Check phase complete.",
369
- }
370
- print(json.dumps(output, ensure_ascii=False))
371
- sys.exit(0)
372
- else:
373
- # Missing markers, block stop and continue
374
- output = {
375
- "decision": "block",
376
- "reason": f"""Iteration {current_iteration}/{MAX_ITERATIONS}. Missing completion markers: {", ".join(missing)}.
377
-
378
- IMPORTANT: You must ACTUALLY run the checks, not just output the markers.
379
- - Did you run lint? What was the output?
380
- - Did you run typecheck? What was the output?
381
- - Did they actually pass with zero errors?
382
-
383
- Only output a marker (e.g., LINT_FINISH) AFTER:
384
- 1. You have executed the corresponding command
385
- 2. The command completed with zero errors
386
- 3. You have shown the command output in your response
387
-
388
- Do NOT output markers just to escape the loop. The loop exists to ensure quality.""",
389
- }
390
- print(json.dumps(output, ensure_ascii=False))
391
- sys.exit(0)
392
-
393
-
394
- if __name__ == "__main__":
395
- main()