@jahanxu/trellis 0.4.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 (422) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +212 -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 +97 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/init.d.ts +21 -0
  9. package/dist/commands/init.d.ts.map +1 -0
  10. package/dist/commands/init.js +527 -0
  11. package/dist/commands/init.js.map +1 -0
  12. package/dist/commands/update.d.ts +27 -0
  13. package/dist/commands/update.d.ts.map +1 -0
  14. package/dist/commands/update.js +1289 -0
  15. package/dist/commands/update.js.map +1 -0
  16. package/dist/configurators/antigravity.d.ts +8 -0
  17. package/dist/configurators/antigravity.d.ts.map +1 -0
  18. package/dist/configurators/antigravity.js +18 -0
  19. package/dist/configurators/antigravity.js.map +1 -0
  20. package/dist/configurators/claude.d.ts +32 -0
  21. package/dist/configurators/claude.d.ts.map +1 -0
  22. package/dist/configurators/claude.js +98 -0
  23. package/dist/configurators/claude.js.map +1 -0
  24. package/dist/configurators/codex.d.ts +8 -0
  25. package/dist/configurators/codex.d.ts.map +1 -0
  26. package/dist/configurators/codex.js +20 -0
  27. package/dist/configurators/codex.js.map +1 -0
  28. package/dist/configurators/cursor.d.ts +5 -0
  29. package/dist/configurators/cursor.d.ts.map +1 -0
  30. package/dist/configurators/cursor.js +52 -0
  31. package/dist/configurators/cursor.js.map +1 -0
  32. package/dist/configurators/gemini.d.ts +8 -0
  33. package/dist/configurators/gemini.d.ts.map +1 -0
  34. package/dist/configurators/gemini.js +52 -0
  35. package/dist/configurators/gemini.js.map +1 -0
  36. package/dist/configurators/iflow.d.ts +33 -0
  37. package/dist/configurators/iflow.d.ts.map +1 -0
  38. package/dist/configurators/iflow.js +99 -0
  39. package/dist/configurators/iflow.js.map +1 -0
  40. package/dist/configurators/index.d.ts +55 -0
  41. package/dist/configurators/index.d.ts.map +1 -0
  42. package/dist/configurators/index.js +220 -0
  43. package/dist/configurators/index.js.map +1 -0
  44. package/dist/configurators/kilo.d.ts +8 -0
  45. package/dist/configurators/kilo.d.ts.map +1 -0
  46. package/dist/configurators/kilo.js +51 -0
  47. package/dist/configurators/kilo.js.map +1 -0
  48. package/dist/configurators/kiro.d.ts +8 -0
  49. package/dist/configurators/kiro.d.ts.map +1 -0
  50. package/dist/configurators/kiro.js +20 -0
  51. package/dist/configurators/kiro.js.map +1 -0
  52. package/dist/configurators/opencode.d.ts +32 -0
  53. package/dist/configurators/opencode.d.ts.map +1 -0
  54. package/dist/configurators/opencode.js +92 -0
  55. package/dist/configurators/opencode.js.map +1 -0
  56. package/dist/configurators/shared.d.ts +12 -0
  57. package/dist/configurators/shared.d.ts.map +1 -0
  58. package/dist/configurators/shared.js +21 -0
  59. package/dist/configurators/shared.js.map +1 -0
  60. package/dist/configurators/workflow.d.ts +28 -0
  61. package/dist/configurators/workflow.d.ts.map +1 -0
  62. package/dist/configurators/workflow.js +134 -0
  63. package/dist/configurators/workflow.js.map +1 -0
  64. package/dist/constants/paths.d.ts +68 -0
  65. package/dist/constants/paths.d.ts.map +1 -0
  66. package/dist/constants/paths.js +77 -0
  67. package/dist/constants/paths.js.map +1 -0
  68. package/dist/constants/version.d.ts +9 -0
  69. package/dist/constants/version.d.ts.map +1 -0
  70. package/dist/constants/version.js +15 -0
  71. package/dist/constants/version.js.map +1 -0
  72. package/dist/index.d.ts +9 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +9 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/migrations/index.d.ts +54 -0
  77. package/dist/migrations/index.d.ts.map +1 -0
  78. package/dist/migrations/index.js +160 -0
  79. package/dist/migrations/index.js.map +1 -0
  80. package/dist/migrations/manifests/0.1.9.json +30 -0
  81. package/dist/migrations/manifests/0.2.0.json +49 -0
  82. package/dist/migrations/manifests/0.2.12.json +9 -0
  83. package/dist/migrations/manifests/0.2.13.json +9 -0
  84. package/dist/migrations/manifests/0.2.14.json +175 -0
  85. package/dist/migrations/manifests/0.2.15.json +33 -0
  86. package/dist/migrations/manifests/0.3.0-beta.0.json +278 -0
  87. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  88. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  89. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  90. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  91. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  92. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  93. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  94. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  95. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  96. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  97. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  98. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  99. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  100. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  101. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  102. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  103. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  104. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  105. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  106. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  107. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  108. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  109. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  110. package/dist/migrations/manifests/0.3.0.json +11 -0
  111. package/dist/templates/antigravity/index.d.ts +12 -0
  112. package/dist/templates/antigravity/index.d.ts.map +1 -0
  113. package/dist/templates/antigravity/index.js +29 -0
  114. package/dist/templates/antigravity/index.js.map +1 -0
  115. package/dist/templates/claude/agents/check.md +122 -0
  116. package/dist/templates/claude/agents/debug.md +106 -0
  117. package/dist/templates/claude/agents/dispatch.md +214 -0
  118. package/dist/templates/claude/agents/implement.md +96 -0
  119. package/dist/templates/claude/agents/plan.md +396 -0
  120. package/dist/templates/claude/agents/research.md +120 -0
  121. package/dist/templates/claude/commands/trellis/before-backend-dev.md +13 -0
  122. package/dist/templates/claude/commands/trellis/before-frontend-dev.md +13 -0
  123. package/dist/templates/claude/commands/trellis/before-role-work.md +364 -0
  124. package/dist/templates/claude/commands/trellis/brainstorm.md +474 -0
  125. package/dist/templates/claude/commands/trellis/break-loop.md +125 -0
  126. package/dist/templates/claude/commands/trellis/check-backend.md +13 -0
  127. package/dist/templates/claude/commands/trellis/check-cross-layer.md +153 -0
  128. package/dist/templates/claude/commands/trellis/check-frontend.md +13 -0
  129. package/dist/templates/claude/commands/trellis/create-command.md +154 -0
  130. package/dist/templates/claude/commands/trellis/finish-work.md +153 -0
  131. package/dist/templates/claude/commands/trellis/handoff.md +445 -0
  132. package/dist/templates/claude/commands/trellis/integrate-skill.md +219 -0
  133. package/dist/templates/claude/commands/trellis/onboard.md +358 -0
  134. package/dist/templates/claude/commands/trellis/parallel.md +193 -0
  135. package/dist/templates/claude/commands/trellis/pick-task.md +515 -0
  136. package/dist/templates/claude/commands/trellis/record-session.md +62 -0
  137. package/dist/templates/claude/commands/trellis/start.md +373 -0
  138. package/dist/templates/claude/commands/trellis/update-spec.md +354 -0
  139. package/dist/templates/claude/hooks/inject-subagent-context.py +873 -0
  140. package/dist/templates/claude/hooks/ralph-loop.py +388 -0
  141. package/dist/templates/claude/hooks/session-start.py +200 -0
  142. package/dist/templates/claude/index.d.ts +54 -0
  143. package/dist/templates/claude/index.d.ts.map +1 -0
  144. package/dist/templates/claude/index.js +85 -0
  145. package/dist/templates/claude/index.js.map +1 -0
  146. package/dist/templates/claude/settings.json +41 -0
  147. package/dist/templates/codex/index.d.ts +18 -0
  148. package/dist/templates/codex/index.d.ts.map +1 -0
  149. package/dist/templates/codex/index.js +40 -0
  150. package/dist/templates/codex/index.js.map +1 -0
  151. package/dist/templates/codex/skills/before-backend-dev/SKILL.md +18 -0
  152. package/dist/templates/codex/skills/before-frontend-dev/SKILL.md +18 -0
  153. package/dist/templates/codex/skills/brainstorm/SKILL.md +479 -0
  154. package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
  155. package/dist/templates/codex/skills/check-backend/SKILL.md +18 -0
  156. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
  157. package/dist/templates/codex/skills/check-frontend/SKILL.md +18 -0
  158. package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
  159. package/dist/templates/codex/skills/finish-work/SKILL.md +148 -0
  160. package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
  161. package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
  162. package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
  163. package/dist/templates/codex/skills/start/SKILL.md +330 -0
  164. package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
  165. package/dist/templates/cursor/commands/trellis-before-backend-dev.md +13 -0
  166. package/dist/templates/cursor/commands/trellis-before-frontend-dev.md +13 -0
  167. package/dist/templates/cursor/commands/trellis-brainstorm.md +474 -0
  168. package/dist/templates/cursor/commands/trellis-break-loop.md +107 -0
  169. package/dist/templates/cursor/commands/trellis-check-backend.md +13 -0
  170. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +153 -0
  171. package/dist/templates/cursor/commands/trellis-check-frontend.md +13 -0
  172. package/dist/templates/cursor/commands/trellis-create-command.md +154 -0
  173. package/dist/templates/cursor/commands/trellis-finish-work.md +143 -0
  174. package/dist/templates/cursor/commands/trellis-integrate-skill.md +219 -0
  175. package/dist/templates/cursor/commands/trellis-onboard.md +358 -0
  176. package/dist/templates/cursor/commands/trellis-record-session.md +62 -0
  177. package/dist/templates/cursor/commands/trellis-start.md +366 -0
  178. package/dist/templates/cursor/commands/trellis-update-spec.md +354 -0
  179. package/dist/templates/cursor/index.d.ts +24 -0
  180. package/dist/templates/cursor/index.d.ts.map +1 -0
  181. package/dist/templates/cursor/index.js +44 -0
  182. package/dist/templates/cursor/index.js.map +1 -0
  183. package/dist/templates/extract.d.ts +166 -0
  184. package/dist/templates/extract.d.ts.map +1 -0
  185. package/dist/templates/extract.js +296 -0
  186. package/dist/templates/extract.js.map +1 -0
  187. package/dist/templates/gemini/commands/trellis/before-backend-dev.toml +17 -0
  188. package/dist/templates/gemini/commands/trellis/before-frontend-dev.toml +17 -0
  189. package/dist/templates/gemini/commands/trellis/brainstorm.toml +420 -0
  190. package/dist/templates/gemini/commands/trellis/break-loop.toml +129 -0
  191. package/dist/templates/gemini/commands/trellis/check-backend.toml +17 -0
  192. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +147 -0
  193. package/dist/templates/gemini/commands/trellis/check-frontend.toml +17 -0
  194. package/dist/templates/gemini/commands/trellis/create-command.toml +119 -0
  195. package/dist/templates/gemini/commands/trellis/finish-work.toml +133 -0
  196. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +104 -0
  197. package/dist/templates/gemini/commands/trellis/onboard.toml +111 -0
  198. package/dist/templates/gemini/commands/trellis/record-session.toml +66 -0
  199. package/dist/templates/gemini/commands/trellis/start.toml +292 -0
  200. package/dist/templates/gemini/commands/trellis/update-spec.toml +132 -0
  201. package/dist/templates/gemini/index.d.ts +21 -0
  202. package/dist/templates/gemini/index.d.ts.map +1 -0
  203. package/dist/templates/gemini/index.js +44 -0
  204. package/dist/templates/gemini/index.js.map +1 -0
  205. package/dist/templates/iflow/agents/check.md +122 -0
  206. package/dist/templates/iflow/agents/debug.md +106 -0
  207. package/dist/templates/iflow/agents/dispatch.md +214 -0
  208. package/dist/templates/iflow/agents/implement.md +96 -0
  209. package/dist/templates/iflow/agents/plan.md +396 -0
  210. package/dist/templates/iflow/agents/research.md +120 -0
  211. package/dist/templates/iflow/commands/trellis/before-backend-dev.md +13 -0
  212. package/dist/templates/iflow/commands/trellis/before-frontend-dev.md +13 -0
  213. package/dist/templates/iflow/commands/trellis/brainstorm.md +474 -0
  214. package/dist/templates/iflow/commands/trellis/break-loop.md +125 -0
  215. package/dist/templates/iflow/commands/trellis/check-backend.md +13 -0
  216. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +153 -0
  217. package/dist/templates/iflow/commands/trellis/check-frontend.md +13 -0
  218. package/dist/templates/iflow/commands/trellis/create-command.md +152 -0
  219. package/dist/templates/iflow/commands/trellis/finish-work.md +153 -0
  220. package/dist/templates/iflow/commands/trellis/integrate-skill.md +219 -0
  221. package/dist/templates/iflow/commands/trellis/onboard.md +358 -0
  222. package/dist/templates/iflow/commands/trellis/parallel.md +193 -0
  223. package/dist/templates/iflow/commands/trellis/record-session.md +62 -0
  224. package/dist/templates/iflow/commands/trellis/start.md +373 -0
  225. package/dist/templates/iflow/commands/trellis/update-spec.md +354 -0
  226. package/dist/templates/iflow/hooks/inject-subagent-context.py +788 -0
  227. package/dist/templates/iflow/hooks/ralph-loop.py +388 -0
  228. package/dist/templates/iflow/hooks/session-start.py +143 -0
  229. package/dist/templates/iflow/index.d.ts +54 -0
  230. package/dist/templates/iflow/index.d.ts.map +1 -0
  231. package/dist/templates/iflow/index.js +85 -0
  232. package/dist/templates/iflow/index.js.map +1 -0
  233. package/dist/templates/iflow/settings.json +40 -0
  234. package/dist/templates/kilo/commands/trellis/before-backend-dev.md +13 -0
  235. package/dist/templates/kilo/commands/trellis/before-frontend-dev.md +13 -0
  236. package/dist/templates/kilo/commands/trellis/brainstorm.md +474 -0
  237. package/dist/templates/kilo/commands/trellis/break-loop.md +125 -0
  238. package/dist/templates/kilo/commands/trellis/check-backend.md +13 -0
  239. package/dist/templates/kilo/commands/trellis/check-cross-layer.md +153 -0
  240. package/dist/templates/kilo/commands/trellis/check-frontend.md +13 -0
  241. package/dist/templates/kilo/commands/trellis/create-command.md +152 -0
  242. package/dist/templates/kilo/commands/trellis/finish-work.md +129 -0
  243. package/dist/templates/kilo/commands/trellis/integrate-skill.md +219 -0
  244. package/dist/templates/kilo/commands/trellis/onboard.md +358 -0
  245. package/dist/templates/kilo/commands/trellis/parallel.md +194 -0
  246. package/dist/templates/kilo/commands/trellis/record-session.md +62 -0
  247. package/dist/templates/kilo/commands/trellis/start.md +321 -0
  248. package/dist/templates/kilo/commands/trellis/update-spec.md +285 -0
  249. package/dist/templates/kilo/index.d.ts +16 -0
  250. package/dist/templates/kilo/index.d.ts.map +1 -0
  251. package/dist/templates/kilo/index.js +39 -0
  252. package/dist/templates/kilo/index.js.map +1 -0
  253. package/dist/templates/kiro/index.d.ts +18 -0
  254. package/dist/templates/kiro/index.d.ts.map +1 -0
  255. package/dist/templates/kiro/index.js +40 -0
  256. package/dist/templates/kiro/index.js.map +1 -0
  257. package/dist/templates/kiro/skills/before-backend-dev/SKILL.md +18 -0
  258. package/dist/templates/kiro/skills/before-frontend-dev/SKILL.md +18 -0
  259. package/dist/templates/kiro/skills/brainstorm/SKILL.md +479 -0
  260. package/dist/templates/kiro/skills/break-loop/SKILL.md +130 -0
  261. package/dist/templates/kiro/skills/check-backend/SKILL.md +18 -0
  262. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +158 -0
  263. package/dist/templates/kiro/skills/check-frontend/SKILL.md +18 -0
  264. package/dist/templates/kiro/skills/create-command/SKILL.md +101 -0
  265. package/dist/templates/kiro/skills/finish-work/SKILL.md +148 -0
  266. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +221 -0
  267. package/dist/templates/kiro/skills/onboard/SKILL.md +363 -0
  268. package/dist/templates/kiro/skills/record-session/SKILL.md +67 -0
  269. package/dist/templates/kiro/skills/start/SKILL.md +330 -0
  270. package/dist/templates/kiro/skills/update-spec/SKILL.md +335 -0
  271. package/dist/templates/markdown/agents.md +18 -0
  272. package/dist/templates/markdown/gitignore.txt +12 -0
  273. package/dist/templates/markdown/index.d.ts +27 -0
  274. package/dist/templates/markdown/index.d.ts.map +1 -0
  275. package/dist/templates/markdown/index.js +52 -0
  276. package/dist/templates/markdown/index.js.map +1 -0
  277. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  278. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  279. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  280. package/dist/templates/markdown/spec/backend/index.md +40 -0
  281. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  282. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  283. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  284. package/dist/templates/markdown/spec/backend/script-conventions.md +467 -0
  285. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  286. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  287. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  288. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  289. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  290. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  291. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  292. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +118 -0
  293. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +92 -0
  294. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +94 -0
  295. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +394 -0
  296. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +319 -0
  297. package/dist/templates/markdown/spec/guides/index.md.txt +79 -0
  298. package/dist/templates/markdown/workspace-index.md +123 -0
  299. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  300. package/dist/templates/opencode/agents/check.md +146 -0
  301. package/dist/templates/opencode/agents/debug.md +129 -0
  302. package/dist/templates/opencode/agents/dispatch.md +223 -0
  303. package/dist/templates/opencode/agents/implement.md +120 -0
  304. package/dist/templates/opencode/agents/research.md +147 -0
  305. package/dist/templates/opencode/agents/trellis-plan.md +427 -0
  306. package/dist/templates/opencode/commands/trellis/before-backend-dev.md +13 -0
  307. package/dist/templates/opencode/commands/trellis/before-frontend-dev.md +13 -0
  308. package/dist/templates/opencode/commands/trellis/brainstorm.md +474 -0
  309. package/dist/templates/opencode/commands/trellis/break-loop.md +125 -0
  310. package/dist/templates/opencode/commands/trellis/check-backend.md +13 -0
  311. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +153 -0
  312. package/dist/templates/opencode/commands/trellis/check-frontend.md +13 -0
  313. package/dist/templates/opencode/commands/trellis/create-command.md +154 -0
  314. package/dist/templates/opencode/commands/trellis/finish-work.md +144 -0
  315. package/dist/templates/opencode/commands/trellis/integrate-skill.md +219 -0
  316. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  317. package/dist/templates/opencode/commands/trellis/onboard.md +358 -0
  318. package/dist/templates/opencode/commands/trellis/parallel.md +194 -0
  319. package/dist/templates/opencode/commands/trellis/record-session.md +62 -0
  320. package/dist/templates/opencode/commands/trellis/start.md +338 -0
  321. package/dist/templates/opencode/commands/trellis/update-spec.md +354 -0
  322. package/dist/templates/opencode/lib/trellis-context.js +436 -0
  323. package/dist/templates/opencode/package.json +5 -0
  324. package/dist/templates/opencode/plugin/inject-subagent-context.js +538 -0
  325. package/dist/templates/opencode/plugin/session-start.js +192 -0
  326. package/dist/templates/trellis/VERSION +1 -0
  327. package/dist/templates/trellis/deliverables/README.md +51 -0
  328. package/dist/templates/trellis/gitignore.txt +29 -0
  329. package/dist/templates/trellis/index.d.ts +49 -0
  330. package/dist/templates/trellis/index.d.ts.map +1 -0
  331. package/dist/templates/trellis/index.js +92 -0
  332. package/dist/templates/trellis/index.js.map +1 -0
  333. package/dist/templates/trellis/paths.README.md +277 -0
  334. package/dist/templates/trellis/paths.yaml +41 -0
  335. package/dist/templates/trellis/pool/implementations.json +5 -0
  336. package/dist/templates/trellis/pool/prototypes.json +5 -0
  337. package/dist/templates/trellis/pool/requirements.json +5 -0
  338. package/dist/templates/trellis/scripts/__init__.py +5 -0
  339. package/dist/templates/trellis/scripts/add_session.py +391 -0
  340. package/dist/templates/trellis/scripts/common/__init__.py +80 -0
  341. package/dist/templates/trellis/scripts/common/cli_adapter.py +522 -0
  342. package/dist/templates/trellis/scripts/common/developer.py +189 -0
  343. package/dist/templates/trellis/scripts/common/git_context.py +383 -0
  344. package/dist/templates/trellis/scripts/common/paths.py +346 -0
  345. package/dist/templates/trellis/scripts/common/phase.py +253 -0
  346. package/dist/templates/trellis/scripts/common/project_paths.py +189 -0
  347. package/dist/templates/trellis/scripts/common/registry.py +365 -0
  348. package/dist/templates/trellis/scripts/common/task_queue.py +255 -0
  349. package/dist/templates/trellis/scripts/common/task_utils.py +177 -0
  350. package/dist/templates/trellis/scripts/common/worktree.py +218 -0
  351. package/dist/templates/trellis/scripts/create_bootstrap.py +290 -0
  352. package/dist/templates/trellis/scripts/get_context.py +16 -0
  353. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  354. package/dist/templates/trellis/scripts/handoff_generator.py +380 -0
  355. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  356. package/dist/templates/trellis/scripts/multi_agent/__init__.py +5 -0
  357. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +403 -0
  358. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +329 -0
  359. package/dist/templates/trellis/scripts/multi_agent/plan.py +233 -0
  360. package/dist/templates/trellis/scripts/multi_agent/start.py +461 -0
  361. package/dist/templates/trellis/scripts/multi_agent/status.py +817 -0
  362. package/dist/templates/trellis/scripts/pool.py +373 -0
  363. package/dist/templates/trellis/scripts/task.py +1162 -0
  364. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +384 -0
  365. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +129 -0
  366. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +263 -0
  367. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +208 -0
  368. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +150 -0
  369. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +247 -0
  370. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +142 -0
  371. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +151 -0
  372. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +128 -0
  373. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +299 -0
  374. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +7 -0
  375. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +15 -0
  376. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +34 -0
  377. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
  378. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
  379. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +207 -0
  380. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +317 -0
  381. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +828 -0
  382. package/dist/templates/trellis/scripts-shell-archive/task.sh +1204 -0
  383. package/dist/templates/trellis/spec/roles/designer/index.md +243 -0
  384. package/dist/templates/trellis/spec/roles/designer/mock-data-standards.md +481 -0
  385. package/dist/templates/trellis/spec/roles/designer/prototype-guidelines.md +429 -0
  386. package/dist/templates/trellis/spec/roles/frontend-impl/api-integration.md +565 -0
  387. package/dist/templates/trellis/spec/roles/frontend-impl/index.md +321 -0
  388. package/dist/templates/trellis/spec/roles/frontend-impl/state-management.md +599 -0
  389. package/dist/templates/trellis/spec/roles/pm/index.md +112 -0
  390. package/dist/templates/trellis/spec/roles/pm/prd-template.md +124 -0
  391. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  392. package/dist/templates/trellis/workflow.md +416 -0
  393. package/dist/templates/trellis/worktree.yaml +47 -0
  394. package/dist/types/ai-tools.d.ts +56 -0
  395. package/dist/types/ai-tools.d.ts.map +1 -0
  396. package/dist/types/ai-tools.js +103 -0
  397. package/dist/types/ai-tools.js.map +1 -0
  398. package/dist/types/migration.d.ts +86 -0
  399. package/dist/types/migration.d.ts.map +1 -0
  400. package/dist/types/migration.js +8 -0
  401. package/dist/types/migration.js.map +1 -0
  402. package/dist/utils/compare-versions.d.ts +12 -0
  403. package/dist/utils/compare-versions.d.ts.map +1 -0
  404. package/dist/utils/compare-versions.js +76 -0
  405. package/dist/utils/compare-versions.js.map +1 -0
  406. package/dist/utils/file-writer.d.ts +23 -0
  407. package/dist/utils/file-writer.d.ts.map +1 -0
  408. package/dist/utils/file-writer.js +140 -0
  409. package/dist/utils/file-writer.js.map +1 -0
  410. package/dist/utils/project-detector.d.ts +16 -0
  411. package/dist/utils/project-detector.d.ts.map +1 -0
  412. package/dist/utils/project-detector.js +186 -0
  413. package/dist/utils/project-detector.js.map +1 -0
  414. package/dist/utils/template-fetcher.d.ts +51 -0
  415. package/dist/utils/template-fetcher.d.ts.map +1 -0
  416. package/dist/utils/template-fetcher.js +174 -0
  417. package/dist/utils/template-fetcher.js.map +1 -0
  418. package/dist/utils/template-hash.d.ts +78 -0
  419. package/dist/utils/template-hash.d.ts.map +1 -0
  420. package/dist/utils/template-hash.js +233 -0
  421. package/dist/utils/template-hash.js.map +1 -0
  422. package/package.json +87 -0
@@ -0,0 +1,538 @@
1
+ /**
2
+ * Trellis Context Injection Plugin
3
+ *
4
+ * Injects context when Task tool is called with supported subagent types.
5
+ * Uses OpenCode's tool.execute.before hook.
6
+ *
7
+ * Compatibility:
8
+ * - If oh-my-opencode handles via .claude/hooks/, this plugin skips
9
+ * - Otherwise, this plugin handles injection
10
+ */
11
+
12
+ import { existsSync, writeFileSync } from "fs"
13
+ import { join } from "path"
14
+ import { TrellisContext, debugLog } from "../lib/trellis-context.js"
15
+
16
+ // Supported subagent types
17
+ const AGENTS_ALL = ["implement", "check", "debug", "research"]
18
+ const AGENTS_REQUIRE_TASK = ["implement", "check", "debug"]
19
+ // Agents that don't update phase (can be called at any time)
20
+ const AGENTS_NO_PHASE_UPDATE = ["debug", "research"]
21
+
22
+ /**
23
+ * Update current_phase in task.json based on subagent_type
24
+ */
25
+ function updateCurrentPhase(ctx, taskDir, subagentType) {
26
+ if (AGENTS_NO_PHASE_UPDATE.includes(subagentType)) {
27
+ return
28
+ }
29
+
30
+ const taskJsonPath = join(ctx.directory, taskDir, "task.json")
31
+ const content = ctx.readFile(taskJsonPath)
32
+ if (!content) return
33
+
34
+ try {
35
+ const taskData = JSON.parse(content)
36
+ const currentPhase = taskData.current_phase || 0
37
+ const nextActions = taskData.next_action || []
38
+
39
+ // Map action names to subagent types
40
+ const actionToAgent = {
41
+ "implement": "implement",
42
+ "check": "check",
43
+ "finish": "check" // finish uses check agent
44
+ }
45
+
46
+ // Find the next phase that matches this subagent_type
47
+ let newPhase = null
48
+ for (const action of nextActions) {
49
+ const phaseNum = action.phase || 0
50
+ const actionName = action.action || ""
51
+ const expectedAgent = actionToAgent[actionName]
52
+
53
+ // Only consider phases after current_phase
54
+ if (phaseNum > currentPhase && expectedAgent === subagentType) {
55
+ newPhase = phaseNum
56
+ break
57
+ }
58
+ }
59
+
60
+ if (newPhase !== null) {
61
+ taskData.current_phase = newPhase
62
+ writeFileSync(taskJsonPath, JSON.stringify(taskData, null, 2))
63
+ debugLog("inject", "Updated current_phase to:", newPhase)
64
+ }
65
+ } catch (e) {
66
+ debugLog("inject", "Error updating phase:", e.message)
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Get context for implement agent
72
+ */
73
+ function getImplementContext(ctx, taskDir) {
74
+ const parts = []
75
+
76
+ // 1. Read implement.jsonl (or fallback to spec.jsonl)
77
+ let jsonlPath = join(ctx.directory, taskDir, "implement.jsonl")
78
+ let entries = ctx.readJsonlWithFiles(jsonlPath)
79
+
80
+ if (entries.length === 0) {
81
+ // Fallback to spec.jsonl
82
+ jsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
83
+ entries = ctx.readJsonlWithFiles(jsonlPath)
84
+ }
85
+
86
+ if (entries.length > 0) {
87
+ parts.push(ctx.buildContextFromEntries(entries))
88
+ }
89
+
90
+ // 2. Requirements document
91
+ const prd = ctx.readProjectFile(join(taskDir, "prd.md"))
92
+ if (prd) {
93
+ parts.push(`=== ${taskDir}/prd.md (Requirements) ===\n${prd}`)
94
+ }
95
+
96
+ // 3. Technical design
97
+ const info = ctx.readProjectFile(join(taskDir, "info.md"))
98
+ if (info) {
99
+ parts.push(`=== ${taskDir}/info.md (Technical Design) ===\n${info}`)
100
+ }
101
+
102
+ return parts.join("\n\n")
103
+ }
104
+
105
+ /**
106
+ * Get context for check agent
107
+ */
108
+ function getCheckContext(ctx, taskDir) {
109
+ const parts = []
110
+
111
+ // 1. Read check.jsonl
112
+ const jsonlPath = join(ctx.directory, taskDir, "check.jsonl")
113
+ const entries = ctx.readJsonlWithFiles(jsonlPath)
114
+
115
+ if (entries.length > 0) {
116
+ parts.push(ctx.buildContextFromEntries(entries))
117
+ } else {
118
+ // Fallback: hardcoded check files + spec.jsonl
119
+ const checkFiles = [
120
+ [".opencode/commands/trellis/finish-work.md", "Finish work checklist"],
121
+ [".opencode/commands/trellis/check-cross-layer.md", "Cross-layer check spec"],
122
+ [".opencode/commands/trellis/check-backend.md", "Backend check spec"],
123
+ [".opencode/commands/trellis/check-frontend.md", "Frontend check spec"],
124
+ ]
125
+ for (const [f, description] of checkFiles) {
126
+ const content = ctx.readProjectFile(f)
127
+ if (content) {
128
+ parts.push(`=== ${f} (${description}) ===\n${content}`)
129
+ }
130
+ }
131
+
132
+ // Add spec.jsonl
133
+ const specJsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
134
+ const specEntries = ctx.readJsonlWithFiles(specJsonlPath)
135
+ for (const entry of specEntries) {
136
+ parts.push(`=== ${entry.path} (Dev spec) ===\n${entry.content}`)
137
+ }
138
+ }
139
+
140
+ // 2. Requirements document
141
+ const prd = ctx.readProjectFile(join(taskDir, "prd.md"))
142
+ if (prd) {
143
+ parts.push(`=== ${taskDir}/prd.md (Requirements - for understanding intent) ===\n${prd}`)
144
+ }
145
+
146
+ return parts.join("\n\n")
147
+ }
148
+
149
+ /**
150
+ * Get context for finish phase (final check before PR)
151
+ */
152
+ function getFinishContext(ctx, taskDir) {
153
+ const parts = []
154
+
155
+ // 1. Try finish.jsonl first
156
+ const jsonlPath = join(ctx.directory, taskDir, "finish.jsonl")
157
+ const entries = ctx.readJsonlWithFiles(jsonlPath)
158
+
159
+ if (entries.length > 0) {
160
+ parts.push(ctx.buildContextFromEntries(entries))
161
+ } else {
162
+ // Fallback: only finish-work.md (lightweight)
163
+ const finishWork = ctx.readProjectFile(".opencode/commands/trellis/finish-work.md")
164
+ if (finishWork) {
165
+ parts.push(`=== .opencode/commands/trellis/finish-work.md (Finish checklist) ===\n${finishWork}`)
166
+ }
167
+ }
168
+
169
+ // 2. Spec update process (for active spec sync)
170
+ const updateSpec = ctx.readProjectFile(".opencode/commands/trellis/update-spec.md")
171
+ if (updateSpec) {
172
+ parts.push(`=== .opencode/commands/trellis/update-spec.md (Spec update process) ===\n${updateSpec}`)
173
+ }
174
+
175
+ // 3. Requirements document (for verifying requirements are met)
176
+ const prd = ctx.readProjectFile(join(taskDir, "prd.md"))
177
+ if (prd) {
178
+ parts.push(`=== ${taskDir}/prd.md (Requirements - verify all met) ===\n${prd}`)
179
+ }
180
+
181
+ return parts.join("\n\n")
182
+ }
183
+
184
+ /**
185
+ * Get context for debug agent
186
+ */
187
+ function getDebugContext(ctx, taskDir) {
188
+ const parts = []
189
+
190
+ // 1. Read debug.jsonl (or fallback to spec.jsonl + check files)
191
+ const jsonlPath = join(ctx.directory, taskDir, "debug.jsonl")
192
+ const entries = ctx.readJsonlWithFiles(jsonlPath)
193
+
194
+ if (entries.length > 0) {
195
+ parts.push(ctx.buildContextFromEntries(entries))
196
+ } else {
197
+ // Fallback: use spec.jsonl + hardcoded check files
198
+ const specJsonlPath = join(ctx.directory, taskDir, "spec.jsonl")
199
+ const specEntries = ctx.readJsonlWithFiles(specJsonlPath)
200
+ for (const entry of specEntries) {
201
+ parts.push(`=== ${entry.path} (Dev spec) ===\n${entry.content}`)
202
+ }
203
+
204
+ const checkFiles = [
205
+ [".opencode/commands/trellis/check-backend.md", "Backend check spec"],
206
+ [".opencode/commands/trellis/check-frontend.md", "Frontend check spec"],
207
+ [".opencode/commands/trellis/check-cross-layer.md", "Cross-layer check spec"],
208
+ ]
209
+ for (const [f, description] of checkFiles) {
210
+ const content = ctx.readProjectFile(f)
211
+ if (content) {
212
+ parts.push(`=== ${f} (${description}) ===\n${content}`)
213
+ }
214
+ }
215
+ }
216
+
217
+ // 2. Codex review output (if exists)
218
+ const codex = ctx.readProjectFile(join(taskDir, "codex-review-output.txt"))
219
+ if (codex) {
220
+ parts.push(`=== ${taskDir}/codex-review-output.txt (Codex Review Results) ===\n${codex}`)
221
+ }
222
+
223
+ return parts.join("\n\n")
224
+ }
225
+
226
+ /**
227
+ * Get context for research agent
228
+ */
229
+ function getResearchContext(ctx, taskDir) {
230
+ const parts = []
231
+
232
+ parts.push(`## Project Spec Directory Structure
233
+
234
+ \`\`\`
235
+ .trellis/spec/
236
+ ├── shared/ # Cross-project common specs
237
+ ├── frontend/ # Frontend standards
238
+ ├── backend/ # Backend standards
239
+ └── guides/ # Thinking guides
240
+
241
+ .trellis/big-question/ # Known issues and pitfalls
242
+ \`\`\`
243
+
244
+ ## Search Tips
245
+
246
+ - Spec files: \`.trellis/spec/**/*.md\`
247
+ - Known issues: \`.trellis/big-question/\`
248
+ - Code search: Use Glob and Grep tools
249
+ - Tech solutions: Use mcp__exa__web_search_exa or mcp__exa__get_code_context_exa`)
250
+
251
+ if (taskDir) {
252
+ const jsonlPath = join(ctx.directory, taskDir, "research.jsonl")
253
+ const entries = ctx.readJsonlWithFiles(jsonlPath)
254
+ if (entries.length > 0) {
255
+ parts.push("\n## Additional Search Context\n")
256
+ parts.push(ctx.buildContextFromEntries(entries))
257
+ }
258
+ }
259
+
260
+ return parts.join("\n\n")
261
+ }
262
+
263
+ /**
264
+ * Build enhanced prompt with context
265
+ */
266
+ function buildPrompt(agentType, originalPrompt, context, isFinish = false) {
267
+ const templates = {
268
+ implement: `# Implement Agent Task
269
+
270
+ You are the Implement Agent in the Multi-Agent Pipeline.
271
+
272
+ ## Your Context
273
+
274
+ ${context}
275
+
276
+ ---
277
+
278
+ ## Your Task
279
+
280
+ ${originalPrompt}
281
+
282
+ ---
283
+
284
+ ## Workflow
285
+
286
+ 1. **Understand specs** - All dev specs are injected above
287
+ 2. **Understand requirements** - Read requirements and technical design
288
+ 3. **Implement feature** - Follow specs and design
289
+ 4. **Self-check** - Ensure code quality
290
+
291
+ ## Important Constraints
292
+
293
+ - Do NOT execute git commit
294
+ - Follow all dev specs injected above
295
+ - Report list of modified/created files when done`,
296
+
297
+ check: isFinish ? `# Finish Agent Task
298
+
299
+ You are performing the final check before creating a PR.
300
+
301
+ ## Your Context
302
+
303
+ ${context}
304
+
305
+ ---
306
+
307
+ ## Your Task
308
+
309
+ ${originalPrompt}
310
+
311
+ ---
312
+
313
+ ## Workflow
314
+
315
+ 1. **Review changes** - Run \`git diff --name-only\` to see all changed files
316
+ 2. **Verify requirements** - Check each requirement in prd.md is implemented
317
+ 3. **Spec sync** - Analyze whether changes introduce new patterns, contracts, or conventions
318
+ - If new pattern/convention found: read target spec file → update it → update index.md if needed
319
+ - If infra/cross-layer change: follow the 7-section mandatory template from update-spec.md
320
+ - If pure code fix with no new patterns: skip this step
321
+ 4. **Run final checks** - Execute lint and typecheck
322
+ 5. **Confirm ready** - Ensure code is ready for PR
323
+
324
+ ## Important Constraints
325
+
326
+ - You MAY update spec files when gaps are detected (use update-spec.md as guide)
327
+ - MUST read the target spec file BEFORE editing (avoid duplicating existing content)
328
+ - Do NOT update specs for trivial changes (typos, formatting, obvious fixes)
329
+ - If critical CODE issues found, report them clearly (fix specs, not code)
330
+ - Verify all acceptance criteria in prd.md are met` :
331
+ `# Check Agent Task
332
+
333
+ You are the Check Agent in the Multi-Agent Pipeline.
334
+
335
+ ## Your Context
336
+
337
+ ${context}
338
+
339
+ ---
340
+
341
+ ## Your Task
342
+
343
+ ${originalPrompt}
344
+
345
+ ---
346
+
347
+ ## Workflow
348
+
349
+ 1. **Get changes** - Run \`git diff --name-only\` and \`git diff\`
350
+ 2. **Check against specs** - Check item by item
351
+ 3. **Self-fix** - Fix issues directly, don't just report
352
+ 4. **Run verification** - Run lint and typecheck
353
+
354
+ ## Important Constraints
355
+
356
+ - Fix issues yourself, don't just report
357
+ - Must execute complete checklist`,
358
+
359
+ debug: `# Debug Agent Task
360
+
361
+ You are the Debug Agent in the Multi-Agent Pipeline.
362
+
363
+ ## Your Context
364
+
365
+ ${context}
366
+
367
+ ---
368
+
369
+ ## Your Task
370
+
371
+ ${originalPrompt}
372
+
373
+ ---
374
+
375
+ ## Workflow
376
+
377
+ 1. **Understand issues** - Analyze issues pointed out
378
+ 2. **Locate code** - Find positions that need fixing
379
+ 3. **Fix against specs** - Fix following dev specs
380
+ 4. **Verify fixes** - Run typecheck
381
+
382
+ ## Important Constraints
383
+
384
+ - Do NOT execute git commit
385
+ - Run typecheck after each fix`,
386
+
387
+ research: `# Research Agent Task
388
+
389
+ You are the Research Agent in the Multi-Agent Pipeline.
390
+
391
+ ## Core Principle
392
+
393
+ **You do one thing: find and explain information.**
394
+
395
+ ## Project Info
396
+
397
+ ${context}
398
+
399
+ ---
400
+
401
+ ## Your Task
402
+
403
+ ${originalPrompt}
404
+
405
+ ---
406
+
407
+ ## Workflow
408
+
409
+ 1. **Understand query** - Determine search type and scope
410
+ 2. **Plan search** - List search steps
411
+ 3. **Execute search** - Run multiple searches in parallel
412
+ 4. **Organize results** - Output structured report
413
+
414
+ ## Strict Boundaries
415
+
416
+ **Only allowed**: Describe what exists, where it is, how it works
417
+
418
+ **Forbidden**: Suggest improvements, criticize implementation, modify files`
419
+ }
420
+
421
+ return templates[agentType] || originalPrompt
422
+ }
423
+
424
+ export default async ({ directory }) => {
425
+ const ctx = new TrellisContext(directory)
426
+ debugLog("inject", "Plugin loaded, directory:", directory)
427
+
428
+ return {
429
+ // ==========================================================================
430
+ // ⚠️ KNOWN LIMITATION: OpenCode project-level plugins cannot intercept subagents
431
+ //
432
+ // This hook will NOT be triggered because:
433
+ // 1. Project-level plugins (.opencode/plugin/) don't support tool.execute.before
434
+ // 2. Only global plugins (npm packages) have full hook permissions
435
+ // 3. This is a known OpenCode architecture limitation (see Issue #5894)
436
+ //
437
+ // SOLUTION: Trellis + OpenCode users must install oh-my-opencode (omo)
438
+ // - omo is a global plugin with full hook permissions
439
+ // - omo reads .claude/settings.json and executes Python hooks
440
+ // - .claude/hooks/inject-subagent-context.py handles the actual injection
441
+ //
442
+ // References:
443
+ // - https://github.com/sst/opencode/issues/5894 (plugin hooks don't intercept subagent)
444
+ // - https://github.com/sst/opencode/issues/2588 (subagent inherit context)
445
+ // ==========================================================================
446
+ "tool.execute.before": async (input, output) => {
447
+ try {
448
+ debugLog("inject", "tool.execute.before called, tool:", input?.tool)
449
+
450
+ // Only handle Task tool
451
+ const toolName = input?.tool?.toLowerCase()
452
+ if (toolName !== "task") {
453
+ return
454
+ }
455
+
456
+ const args = output?.args || {}
457
+ const subagentType = args.subagent_type
458
+ const originalPrompt = args.prompt || ""
459
+
460
+ debugLog("inject", "Task tool called, subagent_type:", subagentType)
461
+
462
+ // Only handle supported agent types
463
+ if (!AGENTS_ALL.includes(subagentType)) {
464
+ debugLog("inject", "Skipping - unsupported subagent_type")
465
+ return
466
+ }
467
+
468
+ // Check if we should skip (omo will handle)
469
+ if (ctx.shouldSkipHook("inject-subagent-context")) {
470
+ debugLog("inject", "Skipping - omo will handle via .claude/hooks/")
471
+ return
472
+ }
473
+
474
+ // Read current task
475
+ const taskDir = ctx.getCurrentTask()
476
+
477
+ // Agents requiring task directory
478
+ if (AGENTS_REQUIRE_TASK.includes(subagentType)) {
479
+ if (!taskDir) {
480
+ debugLog("inject", "Skipping - no current task")
481
+ return
482
+ }
483
+ const taskDirFull = join(directory, taskDir)
484
+ if (!existsSync(taskDirFull)) {
485
+ debugLog("inject", "Skipping - task directory not found")
486
+ return
487
+ }
488
+
489
+ // Update current_phase in task.json
490
+ updateCurrentPhase(ctx, taskDir, subagentType)
491
+ }
492
+
493
+ // Check for [finish] marker
494
+ const isFinish = originalPrompt.toLowerCase().includes("[finish]")
495
+
496
+ // Get context based on agent type
497
+ let context = ""
498
+ switch (subagentType) {
499
+ case "implement":
500
+ context = getImplementContext(ctx, taskDir)
501
+ break
502
+ case "check":
503
+ // Use finish context for [finish] phase (lighter, focused on final verification)
504
+ // Use check context for regular check (full specs for self-fix loop)
505
+ context = isFinish
506
+ ? getFinishContext(ctx, taskDir)
507
+ : getCheckContext(ctx, taskDir)
508
+ break
509
+ case "debug":
510
+ context = getDebugContext(ctx, taskDir)
511
+ break
512
+ case "research":
513
+ context = getResearchContext(ctx, taskDir)
514
+ break
515
+ }
516
+
517
+ if (!context) {
518
+ debugLog("inject", "No context to inject")
519
+ return
520
+ }
521
+
522
+ // Build enhanced prompt
523
+ const newPrompt = buildPrompt(subagentType, originalPrompt, context, isFinish)
524
+
525
+ // Update the tool input
526
+ output.args = {
527
+ ...args,
528
+ prompt: newPrompt
529
+ }
530
+
531
+ debugLog("inject", "Injected context for", subagentType, "prompt length:", newPrompt.length)
532
+
533
+ } catch (error) {
534
+ debugLog("inject", "Error in tool.execute.before:", error.message, error.stack)
535
+ }
536
+ }
537
+ }
538
+ }