@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
@@ -22,7 +22,7 @@ You are the Check Agent in the Trellis workflow.
22
22
  Otherwise, load context yourself:
23
23
 
24
24
  1. Read `.trellis/.current-task` → get task directory (e.g., `.trellis/tasks/xxx`)
25
- 2. Read `{task_dir}/check.jsonl` (or `spec.jsonl` as fallback)
25
+ 2. Read `{task_dir}/check.jsonl`
26
26
  3. For each entry in JSONL:
27
27
  - If `path` is a file → Read it
28
28
  - If `path` is a directory → Read all `.md` files in it
@@ -89,32 +89,6 @@ If failed, fix issues and re-run.
89
89
 
90
90
  ---
91
91
 
92
- ## Completion Markers (Ralph Loop)
93
-
94
- **CRITICAL**: You are in a loop controlled by the Ralph Loop system.
95
- The loop will NOT stop until you output ALL required completion markers.
96
-
97
- Completion markers are generated from `check.jsonl` in the task directory.
98
- Each entry's `reason` field becomes a marker: `{REASON}_FINISH`
99
-
100
- For example, if check.jsonl contains:
101
- ```json
102
- {"file": "...", "reason": "TypeCheck"}
103
- {"file": "...", "reason": "Lint"}
104
- {"file": "...", "reason": "CodeReview"}
105
- ```
106
-
107
- You MUST output these markers when each check passes:
108
- - `TYPECHECK_FINISH` - After typecheck passes
109
- - `LINT_FINISH` - After lint passes
110
- - `CODEREVIEW_FINISH` - After code review passes
111
-
112
- If check.jsonl doesn't exist or has no reasons, output: `ALL_CHECKS_FINISH`
113
-
114
- **The loop will block you from stopping until all markers are present in your output.**
115
-
116
- ---
117
-
118
92
  ## Report Format
119
93
 
120
94
  ```markdown
@@ -136,11 +110,10 @@ If check.jsonl doesn't exist or has no reasons, output: `ALL_CHECKS_FINISH`
136
110
 
137
111
  ### Verification Results
138
112
 
139
- - TypeCheck: Passed TYPECHECK_FINISH
140
- - Lint: Passed LINT_FINISH
113
+ - TypeCheck: Passed
114
+ - Lint: Passed
141
115
 
142
116
  ### Summary
143
117
 
144
118
  Checked X files, found Y issues, all fixed.
145
- ALL_CHECKS_FINISH
146
119
  ```
@@ -22,7 +22,7 @@ You are the Implement Agent in the Trellis workflow.
22
22
  Otherwise, load context yourself:
23
23
 
24
24
  1. Read `.trellis/.current-task` → get task directory (e.g., `.trellis/tasks/xxx`)
25
- 2. Read `{task_dir}/implement.jsonl` (or `spec.jsonl` as fallback)
25
+ 2. Read `{task_dir}/implement.jsonl`
26
26
  3. For each entry in JSONL:
27
27
  - If `path` is a file → Read it
28
28
  - If `path` is a directory → Read all `.md` files in it
@@ -23,8 +23,7 @@ You are the Research Agent in the Trellis workflow.
23
23
  Otherwise, if task-specific research is needed:
24
24
 
25
25
  1. Read `.trellis/.current-task` → get task directory (if exists)
26
- 2. Read `{task_dir}/research.jsonl` if exists
27
- 3. For each entry in JSONL:
26
+ 2. For each entry in JSONL (if task dir exists):
28
27
  - If `path` is a file → Read it
29
28
  - If `path` is a directory → Read all `.md` files in it
30
29
 
@@ -5,60 +5,13 @@
5
5
  * Uses OpenCode's tool.execute.before hook.
6
6
  */
7
7
 
8
- import { existsSync, writeFileSync, readdirSync } from "fs"
8
+ import { existsSync, readdirSync } from "fs"
9
9
  import { join } from "path"
10
10
  import { TrellisContext, debugLog } from "../lib/trellis-context.js"
11
11
 
12
12
  // Supported subagent types
13
- const AGENTS_ALL = ["implement", "check", "debug", "research"]
14
- const AGENTS_REQUIRE_TASK = ["implement", "check", "debug"]
15
- // Agents that don't update phase (can be called at any time)
16
- const AGENTS_NO_PHASE_UPDATE = ["debug", "research"]
17
-
18
- /**
19
- * Update current_phase in task.json based on subagent_type
20
- */
21
- function updateCurrentPhase(ctx, taskDir, subagentType) {
22
- if (AGENTS_NO_PHASE_UPDATE.includes(subagentType)) {
23
- return
24
- }
25
-
26
- const taskJsonPath = join(ctx.directory, taskDir, "task.json")
27
- const content = ctx.readFile(taskJsonPath)
28
- if (!content) return
29
-
30
- try {
31
- const taskData = JSON.parse(content)
32
- const currentPhase = taskData.current_phase || 0
33
- const nextActions = taskData.next_action || []
34
-
35
- const actionToAgent = {
36
- "implement": "implement",
37
- "check": "check",
38
- "finish": "check"
39
- }
40
-
41
- let newPhase = null
42
- for (const action of nextActions) {
43
- const phaseNum = action.phase || 0
44
- const actionName = action.action || ""
45
- const expectedAgent = actionToAgent[actionName]
46
-
47
- if (phaseNum > currentPhase && expectedAgent === subagentType) {
48
- newPhase = phaseNum
49
- break
50
- }
51
- }
52
-
53
- if (newPhase !== null) {
54
- taskData.current_phase = newPhase
55
- writeFileSync(taskJsonPath, JSON.stringify(taskData, null, 2))
56
- debugLog("inject", "Updated current_phase to:", newPhase)
57
- }
58
- } catch (e) {
59
- debugLog("inject", "Error updating phase:", e.message)
60
- }
61
- }
13
+ const AGENTS_ALL = ["implement", "check", "research"]
14
+ const AGENTS_REQUIRE_TASK = ["implement", "check"]
62
15
 
63
16
  /**
64
17
  * Get context for implement agent
@@ -66,14 +19,8 @@ function updateCurrentPhase(ctx, taskDir, subagentType) {
66
19
  function getImplementContext(ctx, taskDir) {
67
20
  const parts = []
68
21
 
69
- let jsonlPath = join(ctx.directory, taskDir, "implement.jsonl")
70
- let entries = ctx.readJsonlWithFiles(jsonlPath)
71
-
72
- if (entries.length === 0) {
73
- jsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
74
- entries = ctx.readJsonlWithFiles(jsonlPath)
75
- }
76
-
22
+ const jsonlPath = join(ctx.directory, taskDir, "implement.jsonl")
23
+ const entries = ctx.readJsonlWithFiles(jsonlPath)
77
24
  if (entries.length > 0) {
78
25
  parts.push(ctx.buildContextFromEntries(entries))
79
26
  }
@@ -99,32 +46,13 @@ function getCheckContext(ctx, taskDir) {
99
46
 
100
47
  const jsonlPath = join(ctx.directory, taskDir, "check.jsonl")
101
48
  const entries = ctx.readJsonlWithFiles(jsonlPath)
102
-
103
49
  if (entries.length > 0) {
104
50
  parts.push(ctx.buildContextFromEntries(entries))
105
- } else {
106
- const checkFiles = [
107
- [".opencode/commands/trellis/finish-work.md", "Finish work checklist"],
108
- [".opencode/commands/trellis/check-cross-layer.md", "Cross-layer check spec"],
109
- [".opencode/commands/trellis/check.md", "Check spec"],
110
- ]
111
- for (const [f, description] of checkFiles) {
112
- const content = ctx.readProjectFile(f)
113
- if (content) {
114
- parts.push(`=== ${f} (${description}) ===\n${content}`)
115
- }
116
- }
117
-
118
- const specJsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
119
- const specEntries = ctx.readJsonlWithFiles(specJsonlPath)
120
- for (const entry of specEntries) {
121
- parts.push(`=== ${entry.path} (Dev spec) ===\n${entry.content}`)
122
- }
123
51
  }
124
52
 
125
53
  const prd = ctx.readProjectFile(join(taskDir, "prd.md"))
126
54
  if (prd) {
127
- parts.push(`=== ${taskDir}/prd.md (Requirements - for understanding intent) ===\n${prd}`)
55
+ parts.push(`=== ${taskDir}/prd.md (Requirements) ===\n${prd}`)
128
56
  }
129
57
 
130
58
  return parts.join("\n\n")
@@ -134,75 +62,15 @@ function getCheckContext(ctx, taskDir) {
134
62
  * Get context for finish phase (final check before PR)
135
63
  */
136
64
  function getFinishContext(ctx, taskDir) {
137
- const parts = []
138
-
139
- const jsonlPath = join(ctx.directory, taskDir, "finish.jsonl")
140
- const entries = ctx.readJsonlWithFiles(jsonlPath)
141
-
142
- if (entries.length > 0) {
143
- parts.push(ctx.buildContextFromEntries(entries))
144
- } else {
145
- const finishWork = ctx.readProjectFile(".opencode/commands/trellis/finish-work.md")
146
- if (finishWork) {
147
- parts.push(`=== .opencode/commands/trellis/finish-work.md (Finish checklist) ===\n${finishWork}`)
148
- }
149
- }
150
-
151
- const updateSpec = ctx.readProjectFile(".opencode/commands/trellis/update-spec.md")
152
- if (updateSpec) {
153
- parts.push(`=== .opencode/commands/trellis/update-spec.md (Spec update process) ===\n${updateSpec}`)
154
- }
155
-
156
- const prd = ctx.readProjectFile(join(taskDir, "prd.md"))
157
- if (prd) {
158
- parts.push(`=== ${taskDir}/prd.md (Requirements - verify all met) ===\n${prd}`)
159
- }
160
-
161
- return parts.join("\n\n")
65
+ // Finish reuses check context (same JSONL source)
66
+ return getCheckContext(ctx, taskDir)
162
67
  }
163
68
 
164
- /**
165
- * Get context for debug agent
166
- */
167
- function getDebugContext(ctx, taskDir) {
168
- const parts = []
169
-
170
- const jsonlPath = join(ctx.directory, taskDir, "debug.jsonl")
171
- const entries = ctx.readJsonlWithFiles(jsonlPath)
172
-
173
- if (entries.length > 0) {
174
- parts.push(ctx.buildContextFromEntries(entries))
175
- } else {
176
- const specJsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
177
- const specEntries = ctx.readJsonlWithFiles(specJsonlPath)
178
- for (const entry of specEntries) {
179
- parts.push(`=== ${entry.path} (Dev spec) ===\n${entry.content}`)
180
- }
181
-
182
- const checkFiles = [
183
- [".opencode/commands/trellis/check.md", "Check spec"],
184
- [".opencode/commands/trellis/check-cross-layer.md", "Cross-layer check spec"],
185
- ]
186
- for (const [f, description] of checkFiles) {
187
- const content = ctx.readProjectFile(f)
188
- if (content) {
189
- parts.push(`=== ${f} (${description}) ===\n${content}`)
190
- }
191
- }
192
- }
193
-
194
- const codex = ctx.readProjectFile(join(taskDir, "codex-review-output.txt"))
195
- if (codex) {
196
- parts.push(`=== ${taskDir}/codex-review-output.txt (Codex Review Results) ===\n${codex}`)
197
- }
198
-
199
- return parts.join("\n\n")
200
- }
201
69
 
202
70
  /**
203
71
  * Get context for research agent
204
72
  */
205
- function getResearchContext(ctx, taskDir) {
73
+ function getResearchContext(ctx) {
206
74
  const parts = []
207
75
 
208
76
  // Dynamic project structure (scan actual spec directory)
@@ -251,15 +119,6 @@ function getResearchContext(ctx, taskDir) {
251
119
  - Code search: Use Glob and Grep tools
252
120
  - Tech solutions: Use mcp__exa__web_search_exa or mcp__exa__get_code_context_exa`)
253
121
 
254
- if (taskDir) {
255
- const jsonlPath = join(ctx.directory, taskDir, "research.jsonl")
256
- const researchEntries = ctx.readJsonlWithFiles(jsonlPath)
257
- if (researchEntries.length > 0) {
258
- parts.push("\n## Additional Search Context\n")
259
- parts.push(ctx.buildContextFromEntries(researchEntries))
260
- }
261
- }
262
-
263
122
  return parts.join("\n\n")
264
123
  }
265
124
 
@@ -359,34 +218,6 @@ ${originalPrompt}
359
218
  - Fix issues yourself, don't just report
360
219
  - Must execute complete checklist`,
361
220
 
362
- debug: `# Debug Agent Task
363
-
364
- You are the Debug Agent in the Multi-Agent Pipeline.
365
-
366
- ## Your Context
367
-
368
- ${context}
369
-
370
- ---
371
-
372
- ## Your Task
373
-
374
- ${originalPrompt}
375
-
376
- ---
377
-
378
- ## Workflow
379
-
380
- 1. **Understand issues** - Analyze issues pointed out
381
- 2. **Locate code** - Find positions that need fixing
382
- 3. **Fix against specs** - Fix following dev specs
383
- 4. **Verify fixes** - Run typecheck
384
-
385
- ## Important Constraints
386
-
387
- - Do NOT execute git commit
388
- - Run typecheck after each fix`,
389
-
390
221
  research: `# Research Agent Task
391
222
 
392
223
  You are the Research Agent in the Multi-Agent Pipeline.
@@ -467,8 +298,6 @@ export default {
467
298
  debugLog("inject", "Skipping - task directory not found")
468
299
  return
469
300
  }
470
-
471
- updateCurrentPhase(ctx, taskDir, subagentType)
472
301
  }
473
302
 
474
303
  // Check for [finish] marker
@@ -485,9 +314,6 @@ export default {
485
314
  ? getFinishContext(ctx, taskDir)
486
315
  : getCheckContext(ctx, taskDir)
487
316
  break
488
- case "debug":
489
- context = getDebugContext(ctx, taskDir)
490
- break
491
317
  case "research":
492
318
  context = getResearchContext(ctx, taskDir)
493
319
  break
@@ -0,0 +1,160 @@
1
+ /* global process */
2
+ /**
3
+ * Trellis Workflow State Injection Plugin
4
+ *
5
+ * Per-turn UserPromptSubmit equivalent for OpenCode.
6
+ *
7
+ * On every chat.message, if a Trellis task is active, inject a short
8
+ * <workflow-state> breadcrumb reminding the main AI what task is active
9
+ * and its expected flow. Breadcrumb text is pulled from the project's
10
+ * workflow.md [workflow-state:STATUS] tag blocks (single source of
11
+ * truth for users who fork the Trellis workflow), with hardcoded
12
+ * fallbacks so the hook never breaks when workflow.md is missing or
13
+ * malformed.
14
+ *
15
+ * Unlike session-start, this plugin does NOT dedupe — breadcrumb
16
+ * should surface on every turn so long conversations don't drift.
17
+ *
18
+ * Silently skips when:
19
+ * - No .trellis/ directory
20
+ * - No active task (.trellis/.current-task missing or stale)
21
+ * - task.json malformed or missing status
22
+ */
23
+
24
+ import { existsSync, readFileSync } from "fs"
25
+ import { join } from "path"
26
+ import { TrellisContext, debugLog } from "../lib/trellis-context.js"
27
+
28
+ // Supports STATUS values with letters, digits, underscores, hyphens
29
+ // (so "in-review" / "blocked-by-team" work alongside "in_progress").
30
+ const TAG_RE = /\[workflow-state:([A-Za-z0-9_-]+)\]\s*\n([\s\S]*?)\n\s*\[\/workflow-state:\1\]/g
31
+
32
+ // Hardcoded defaults for built-in Trellis statuses. Used when workflow.md
33
+ // is missing, malformed, or lacks the tag for this status.
34
+ //
35
+ // `no_task` is a pseudo-status emitted when .current-task is missing — keeps
36
+ // the Next-Action reminder flowing per-turn even without an active task.
37
+ const FALLBACK_BREADCRUMBS = {
38
+ no_task:
39
+ "No active task. If the user describes multi-step work, load " +
40
+ "trellis-brainstorm skill to clarify requirements and create a task " +
41
+ "via `python3 ./.trellis/scripts/task.py create`. Simple one-off " +
42
+ "questions or trivial edits don't need a task — just answer directly.",
43
+ planning:
44
+ "Complete prd.md via trellis-brainstorm skill; then run task.py start.",
45
+ in_progress:
46
+ "Flow: implement → check → update-spec → finish\n" +
47
+ "Check conversation history + git status to determine current step; do NOT skip check.",
48
+ completed:
49
+ "User commits changes; then run task.py archive.",
50
+ }
51
+
52
+ /**
53
+ * Parse workflow.md for [workflow-state:STATUS] blocks.
54
+ * Returns {status: body}. Missing tags fall back to hardcoded defaults.
55
+ */
56
+ function loadBreadcrumbs(directory) {
57
+ const result = { ...FALLBACK_BREADCRUMBS }
58
+ const workflowPath = join(directory, ".trellis", "workflow.md")
59
+ if (!existsSync(workflowPath)) return result
60
+ let content
61
+ try {
62
+ content = readFileSync(workflowPath, "utf-8")
63
+ } catch {
64
+ return result
65
+ }
66
+ for (const match of content.matchAll(TAG_RE)) {
67
+ const status = match[1]
68
+ const body = match[2].trim()
69
+ if (body) result[status] = body
70
+ }
71
+ return result
72
+ }
73
+
74
+ /**
75
+ * Get (taskId, status) from active task, or null if no active task.
76
+ */
77
+ function getActiveTask(ctx) {
78
+ const taskRef = ctx.getCurrentTask()
79
+ if (!taskRef) return null
80
+ const taskDir = ctx.resolveTaskDir(taskRef)
81
+ if (!taskDir || !existsSync(taskDir)) return null
82
+ const taskJsonPath = join(taskDir, "task.json")
83
+ if (!existsSync(taskJsonPath)) return null
84
+ try {
85
+ const data = JSON.parse(readFileSync(taskJsonPath, "utf-8"))
86
+ const status = typeof data.status === "string" ? data.status : ""
87
+ if (!status) return null
88
+ const id = data.id || taskRef.split("/").pop()
89
+ return { id, status }
90
+ } catch {
91
+ return null
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Build the <workflow-state>...</workflow-state> block.
97
+ * - Known status (templates or fallback) → detailed body
98
+ * - Unknown status → generic "refer to workflow.md"
99
+ * - no_task pseudo-status (id === null) → header omits task info
100
+ */
101
+ function buildBreadcrumb(id, status, templates) {
102
+ let body = templates[status]
103
+ if (body === undefined) {
104
+ body = "Refer to workflow.md for current step."
105
+ }
106
+ const header = id === null ? `Status: ${status}` : `Task: ${id} (${status})`
107
+ return `<workflow-state>\n${header}\n${body}\n</workflow-state>`
108
+ }
109
+
110
+ export default {
111
+ id: "trellis.inject-workflow-state",
112
+ server: async ({ directory }) => {
113
+ const ctx = new TrellisContext(directory)
114
+ debugLog("workflow-state", "Plugin loaded, directory:", directory)
115
+
116
+ return {
117
+ // chat.message fires on every user message. Inject breadcrumb in-place
118
+ // so it persists in conversation history.
119
+ "chat.message": async (input, output) => {
120
+ try {
121
+ if (process.env.OPENCODE_NON_INTERACTIVE === "1") {
122
+ return
123
+ }
124
+ if (!ctx.isTrellisProject()) {
125
+ return
126
+ }
127
+ const templates = loadBreadcrumbs(directory)
128
+ const task = getActiveTask(ctx)
129
+ const breadcrumb = task
130
+ ? buildBreadcrumb(task.id, task.status, templates)
131
+ : buildBreadcrumb(null, "no_task", templates)
132
+
133
+ const parts = output?.parts || []
134
+ const textPartIndex = parts.findIndex(
135
+ p => p.type === "text" && p.text !== undefined,
136
+ )
137
+ if (textPartIndex !== -1) {
138
+ const originalText = parts[textPartIndex].text || ""
139
+ parts[textPartIndex].text = `${breadcrumb}\n\n${originalText}`
140
+ } else {
141
+ parts.unshift({ type: "text", text: breadcrumb })
142
+ }
143
+ debugLog(
144
+ "workflow-state",
145
+ "Injected breadcrumb for task",
146
+ task.id,
147
+ "status",
148
+ task.status,
149
+ )
150
+ } catch (error) {
151
+ debugLog(
152
+ "workflow-state",
153
+ "Error in chat.message:",
154
+ error instanceof Error ? error.message : String(error),
155
+ )
156
+ }
157
+ },
158
+ }
159
+ },
160
+ }
@@ -50,7 +50,7 @@ function getTaskStatus(ctx) {
50
50
  }
51
51
 
52
52
  let hasContext = false
53
- for (const jsonlName of ["implement.jsonl", "check.jsonl", "spec.jsonl"]) {
53
+ for (const jsonlName of ["implement.jsonl", "check.jsonl"]) {
54
54
  const jsonlPath = join(taskDir, jsonlName)
55
55
  if (existsSync(jsonlPath)) {
56
56
  try {
@@ -227,29 +227,74 @@ Read and follow all instructions below carefully.
227
227
  }
228
228
  }
229
229
 
230
- // 3. Workflow Guide (ToC only lazy-load the full file on demand)
230
+ // 3. Workflow Guide TOC + Phase Index + Phase 1/2/3 step details.
231
+ // Meta sections (Core Principles / Trellis System / Breadcrumbs) are NOT
232
+ // injected: Core Principles is short prose; Trellis System duplicates
233
+ // commands in step bodies; Breadcrumbs are consumed by UserPromptSubmit hook.
231
234
  const workflowContent = ctx.readProjectFile(".trellis/workflow.md")
232
235
  if (workflowContent) {
233
- const tocLines = [
236
+ const allLines = workflowContent.split("\n")
237
+ const overviewLines = [
234
238
  "# Development Workflow — Section Index",
235
239
  "Full guide: .trellis/workflow.md (read on demand)",
236
240
  "",
241
+ "## Table of Contents",
237
242
  ]
238
- for (const line of workflowContent.split("\n")) {
239
- if (line.startsWith("## ")) tocLines.push(line)
243
+ for (const line of allLines) {
244
+ if (line.startsWith("## ")) overviewLines.push(line)
240
245
  }
241
- tocLines.push("", "To read a section: use the Read tool on .trellis/workflow.md")
246
+ overviewLines.push("", "---", "")
247
+
248
+ // Extract range from "## Phase Index" up to (but excluding)
249
+ // "## Workflow State Breadcrumbs". Captures Phase Index + Phase 1/2/3.
250
+ let rangeStart = -1
251
+ let rangeEnd = allLines.length
252
+ for (let i = 0; i < allLines.length; i++) {
253
+ const stripped = allLines[i].trim()
254
+ if (rangeStart === -1 && stripped === "## Phase Index") {
255
+ rangeStart = i
256
+ } else if (rangeStart !== -1 && stripped === "## Workflow State Breadcrumbs") {
257
+ rangeEnd = i
258
+ break
259
+ }
260
+ }
261
+ if (rangeStart !== -1) {
262
+ overviewLines.push(...allLines.slice(rangeStart, rangeEnd))
263
+ }
264
+
242
265
  parts.push("<workflow>")
243
- parts.push(tocLines.join("\n"))
266
+ parts.push(overviewLines.join("\n").trimEnd())
244
267
  parts.push("</workflow>")
245
268
  }
246
269
 
247
- // 4. Guidelines Index (dynamic discovery, matching Claude's session-start.py)
270
+ // 4. Guidelines paths-only for most indexes; guides/ inlined (cross-package,
271
+ // broadly useful). Sub-agents get their specific specs via jsonl injection —
272
+ // main agent reads paths on demand when editing code directly.
248
273
  parts.push("<guidelines>")
249
- parts.push("**Note**: The guidelines below are index files — they list available guideline documents and their locations.")
250
- parts.push("During actual development, you MUST read the specific guideline files listed in each index's Pre-Development Checklist.\n")
274
+ parts.push(
275
+ "Project spec indexes are listed by path below. Each index contains a " +
276
+ "**Pre-Development Checklist** listing the specific guideline files to " +
277
+ "read before coding.\n\n" +
278
+ "- If you're spawning an implement/check sub-agent, context is injected " +
279
+ "automatically via `{task}/implement.jsonl` / `check.jsonl`. You do NOT " +
280
+ "need to read these indexes yourself.\n" +
281
+ "- If you're editing code directly in the main session, Read the relevant " +
282
+ "index(es) on-demand and follow their Pre-Dev Checklist.\n"
283
+ )
251
284
 
252
285
  const specDir = join(directory, ".trellis", "spec")
286
+
287
+ // guides/ inlined
288
+ const guidesIndex = join(specDir, "guides", "index.md")
289
+ if (existsSync(guidesIndex)) {
290
+ const content = ctx.readFile(guidesIndex)
291
+ if (content) {
292
+ parts.push(`## guides (inlined — cross-package thinking guides)\n${content}\n`)
293
+ }
294
+ }
295
+
296
+ // Other indexes — paths only
297
+ const paths = []
253
298
  if (existsSync(specDir)) {
254
299
  try {
255
300
  const subs = readdirSync(specDir).filter(name => {
@@ -262,27 +307,13 @@ Read and follow all instructions below carefully.
262
307
  }).sort()
263
308
 
264
309
  for (const sub of subs) {
265
- if (sub === "guides") {
266
- const indexFile = join(specDir, sub, "index.md")
267
- if (existsSync(indexFile)) {
268
- const content = ctx.readFile(indexFile)
269
- if (content) {
270
- parts.push(`## ${sub}\n${content}\n`)
271
- }
272
- }
273
- continue
274
- }
310
+ if (sub === "guides") continue // already inlined above
275
311
 
276
312
  const indexFile = join(specDir, sub, "index.md")
277
313
  if (existsSync(indexFile)) {
278
- const content = ctx.readFile(indexFile)
279
- if (content) {
280
- parts.push(`## ${sub}\n${content}\n`)
281
- }
314
+ paths.push(`.trellis/spec/${sub}/index.md`)
282
315
  } else {
283
- if (allowedPkgs !== null && !allowedPkgs.has(sub)) {
284
- continue
285
- }
316
+ if (allowedPkgs !== null && !allowedPkgs.has(sub)) continue
286
317
  try {
287
318
  const nested = readdirSync(join(specDir, sub)).filter(name => {
288
319
  try {
@@ -291,14 +322,10 @@ Read and follow all instructions below carefully.
291
322
  return false
292
323
  }
293
324
  }).sort()
294
-
295
325
  for (const layer of nested) {
296
326
  const nestedIndex = join(specDir, sub, layer, "index.md")
297
327
  if (existsSync(nestedIndex)) {
298
- const content = ctx.readFile(nestedIndex)
299
- if (content) {
300
- parts.push(`## ${sub}/${layer}\n${content}\n`)
301
- }
328
+ paths.push(`.trellis/spec/${sub}/${layer}/index.md`)
302
329
  }
303
330
  }
304
331
  } catch {
@@ -311,6 +338,18 @@ Read and follow all instructions below carefully.
311
338
  }
312
339
  }
313
340
 
341
+ if (paths.length > 0) {
342
+ parts.push("## Available spec indexes (read on demand)")
343
+ for (const p of paths) {
344
+ parts.push(`- ${p}`)
345
+ }
346
+ parts.push("")
347
+ }
348
+
349
+ parts.push(
350
+ "Discover more via: " +
351
+ "`python3 ./.trellis/scripts/get_context.py --mode packages`"
352
+ )
314
353
  parts.push("</guidelines>")
315
354
 
316
355
  // 6. Task status