@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,207 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # Multi-Agent Pipeline: Plan Agent Launcher
4
+ # =============================================================================
5
+ # Usage: ./plan.sh --name <task-name> --type <dev-type> --requirement "<requirement>"
6
+ #
7
+ # This script:
8
+ # 1. Creates task directory
9
+ # 2. Starts Plan Agent in background
10
+ # 3. Plan Agent produces fully configured task directory
11
+ #
12
+ # After completion, use start.sh to launch the Dispatch Agent.
13
+ #
14
+ # Prerequisites:
15
+ # - .claude/agents/plan.md must exist
16
+ # - Developer must be initialized
17
+ # =============================================================================
18
+
19
+ set -e
20
+
21
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
22
+ source "$SCRIPT_DIR/../common/paths.sh"
23
+ source "$SCRIPT_DIR/../common/developer.sh"
24
+
25
+ # Colors
26
+ RED='\033[0;31m'
27
+ GREEN='\033[0;32m'
28
+ YELLOW='\033[1;33m'
29
+ BLUE='\033[0;34m'
30
+ NC='\033[0m'
31
+
32
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
33
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
34
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
35
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
36
+
37
+ # =============================================================================
38
+ # Constants
39
+ # =============================================================================
40
+ PROJECT_ROOT=$(get_repo_root)
41
+ PLAN_MD_PATH=".claude/agents/plan.md"
42
+
43
+ # =============================================================================
44
+ # Parse Arguments
45
+ # =============================================================================
46
+ TASK_NAME=""
47
+ DEV_TYPE=""
48
+ REQUIREMENT=""
49
+
50
+ show_usage() {
51
+ cat << EOF
52
+ Usage: $0 --name <task-name> --type <dev-type> --requirement "<requirement>"
53
+
54
+ Arguments:
55
+ --name, -n Task name (e.g., user-auth, add-rate-limiting)
56
+ --type, -t Development type: backend | frontend | fullstack
57
+ --requirement, -r Requirement description (quote if contains spaces)
58
+
59
+ Examples:
60
+ $0 --name user-auth --type backend --requirement "Add JWT-based user authentication"
61
+ $0 -n rate-limit -t backend -r "Add rate limiting to API endpoints"
62
+
63
+ The Plan Agent runs in background. Monitor with:
64
+ tail -f <task-dir>/.plan-log
65
+ EOF
66
+ }
67
+
68
+ while [[ $# -gt 0 ]]; do
69
+ case $1 in
70
+ --name|-n)
71
+ TASK_NAME="$2"
72
+ shift 2
73
+ ;;
74
+ --type|-t)
75
+ DEV_TYPE="$2"
76
+ shift 2
77
+ ;;
78
+ --requirement|-r)
79
+ REQUIREMENT="$2"
80
+ shift 2
81
+ ;;
82
+ --help|-h)
83
+ show_usage
84
+ exit 0
85
+ ;;
86
+ *)
87
+ log_error "Unknown argument: $1"
88
+ show_usage
89
+ exit 1
90
+ ;;
91
+ esac
92
+ done
93
+
94
+ # =============================================================================
95
+ # Validation
96
+ # =============================================================================
97
+ if [ -z "$TASK_NAME" ]; then
98
+ log_error "Task name is required (--name)"
99
+ show_usage
100
+ exit 1
101
+ fi
102
+
103
+ if [ -z "$DEV_TYPE" ]; then
104
+ log_error "Development type is required (--type)"
105
+ show_usage
106
+ exit 1
107
+ fi
108
+
109
+ if [[ ! "$DEV_TYPE" =~ ^(backend|frontend|fullstack)$ ]]; then
110
+ log_error "Invalid dev type: $DEV_TYPE (must be: backend, frontend, fullstack)"
111
+ exit 1
112
+ fi
113
+
114
+ if [ -z "$REQUIREMENT" ]; then
115
+ log_error "Requirement is required (--requirement)"
116
+ show_usage
117
+ exit 1
118
+ fi
119
+
120
+ PLAN_MD="${PROJECT_ROOT}/${PLAN_MD_PATH}"
121
+ if [ ! -f "$PLAN_MD" ]; then
122
+ log_error "plan.md not found at ${PLAN_MD}"
123
+ exit 1
124
+ fi
125
+
126
+ ensure_developer "$PROJECT_ROOT"
127
+
128
+ # =============================================================================
129
+ # Step 1: Create Task Directory
130
+ # =============================================================================
131
+ echo ""
132
+ echo -e "${BLUE}=== Multi-Agent Pipeline: Plan ===${NC}"
133
+ log_info "Task: ${TASK_NAME}"
134
+ log_info "Type: ${DEV_TYPE}"
135
+ log_info "Requirement: ${REQUIREMENT}"
136
+ echo ""
137
+
138
+ log_info "Step 1: Creating task directory..."
139
+
140
+ # Create task (use requirement as title, task name as slug)
141
+ TASK_DIR=$("$SCRIPT_DIR/../task.sh" create "$REQUIREMENT" --slug "$TASK_NAME")
142
+ TASK_DIR_ABS="${PROJECT_ROOT}/${TASK_DIR}"
143
+
144
+ log_success "Task directory: ${TASK_DIR}"
145
+
146
+ # =============================================================================
147
+ # Step 2: Prepare and Start Plan Agent
148
+ # =============================================================================
149
+ log_info "Step 2: Starting Plan Agent in background..."
150
+
151
+ LOG_FILE="${TASK_DIR_ABS}/.plan-log"
152
+ touch "$LOG_FILE"
153
+
154
+ # Create a temporary runner script (will be deleted after agent starts)
155
+ RUNNER_SCRIPT=$(mktemp)
156
+ cat > "$RUNNER_SCRIPT" << RUNNER_EOF
157
+ #!/bin/bash
158
+ cd "${PROJECT_ROOT}"
159
+
160
+ export PLAN_TASK_NAME="${TASK_NAME}"
161
+ export PLAN_DEV_TYPE="${DEV_TYPE}"
162
+ export PLAN_TASK_DIR="${TASK_DIR}"
163
+ export PLAN_REQUIREMENT="${REQUIREMENT}"
164
+
165
+ export https_proxy="\${AGENT_HTTPS_PROXY:-}"
166
+ export http_proxy="\${AGENT_HTTP_PROXY:-}"
167
+ export all_proxy="\${AGENT_ALL_PROXY:-}"
168
+ export CLAUDE_NON_INTERACTIVE=1
169
+
170
+ # Use --agent flag to load plan agent directly
171
+ claude -p --agent plan --dangerously-skip-permissions --output-format stream-json --verbose "Start planning for task: ${TASK_NAME}"
172
+
173
+ # Self-delete the runner script
174
+ rm -f "\$0"
175
+ RUNNER_EOF
176
+ chmod +x "$RUNNER_SCRIPT"
177
+
178
+ # Start agent in background
179
+ AGENT_HTTPS_PROXY="${https_proxy:-}" \
180
+ AGENT_HTTP_PROXY="${http_proxy:-}" \
181
+ AGENT_ALL_PROXY="${all_proxy:-}" \
182
+ nohup "$RUNNER_SCRIPT" > "$LOG_FILE" 2>&1 &
183
+ AGENT_PID=$!
184
+
185
+ log_success "Plan Agent started (PID: ${AGENT_PID})"
186
+
187
+ # =============================================================================
188
+ # Summary
189
+ # =============================================================================
190
+ echo ""
191
+ echo -e "${GREEN}=== Plan Agent Running ===${NC}"
192
+ echo ""
193
+ echo " Task: $TASK_NAME"
194
+ echo " Type: $DEV_TYPE"
195
+ echo " Dir: $TASK_DIR"
196
+ echo " Log: $LOG_FILE"
197
+ echo " PID: $AGENT_PID"
198
+ echo ""
199
+ echo -e "${YELLOW}To monitor:${NC}"
200
+ echo " tail -f $LOG_FILE"
201
+ echo ""
202
+ echo -e "${YELLOW}To check status:${NC}"
203
+ echo " ps -p $AGENT_PID"
204
+ echo " ls -la $TASK_DIR"
205
+ echo ""
206
+ echo -e "${YELLOW}After completion, run:${NC}"
207
+ echo " ./.trellis/scripts/multi-agent/start.sh $TASK_DIR"
@@ -0,0 +1,317 @@
1
+ #!/bin/bash
2
+ # =============================================================================
3
+ # Multi-Agent Pipeline: Start Worktree Agent
4
+ # =============================================================================
5
+ # Usage: ./start.sh <task-dir>
6
+ # Example: ./start.sh .trellis/tasks/01-21-my-task
7
+ #
8
+ # This script:
9
+ # 1. Creates worktree (if not exists) with dependency install
10
+ # 2. Copies environment files (from worktree.yaml config)
11
+ # 3. Sets .current-task in worktree
12
+ # 4. Starts claude agent in background
13
+ # 5. Registers agent to registry.json
14
+ #
15
+ # Prerequisites:
16
+ # - task.json must exist with 'branch' field
17
+ # - .claude/agents/dispatch.md must exist
18
+ #
19
+ # Configuration: .trellis/worktree.yaml
20
+ # =============================================================================
21
+
22
+ set -e
23
+
24
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
25
+ source "$SCRIPT_DIR/../common/paths.sh"
26
+ source "$SCRIPT_DIR/../common/worktree.sh"
27
+ source "$SCRIPT_DIR/../common/developer.sh"
28
+ source "$SCRIPT_DIR/../common/registry.sh"
29
+
30
+ # Colors
31
+ RED='\033[0;31m'
32
+ GREEN='\033[0;32m'
33
+ YELLOW='\033[1;33m'
34
+ BLUE='\033[0;34m'
35
+ NC='\033[0m'
36
+
37
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
38
+ log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
39
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
40
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
41
+
42
+ # =============================================================================
43
+ # Constants
44
+ # =============================================================================
45
+ PROJECT_ROOT=$(get_repo_root)
46
+ DISPATCH_MD_PATH=".claude/agents/dispatch.md"
47
+
48
+ # =============================================================================
49
+ # Parse Arguments
50
+ # =============================================================================
51
+ TASK_DIR=$1
52
+ if [ -z "$TASK_DIR" ]; then
53
+ log_error "Task directory required"
54
+ echo "Usage: $0 <task-dir>"
55
+ echo "Example: $0 .trellis/tasks/01-21-my-task"
56
+ exit 1
57
+ fi
58
+
59
+ # Normalize paths
60
+ if [[ "$TASK_DIR" = /* ]]; then
61
+ TASK_DIR_RELATIVE="${TASK_DIR#$PROJECT_ROOT/}"
62
+ TASK_DIR_ABS="$TASK_DIR"
63
+ else
64
+ TASK_DIR_RELATIVE="$TASK_DIR"
65
+ TASK_DIR_ABS="${PROJECT_ROOT}/${TASK_DIR}"
66
+ fi
67
+
68
+ TASK_JSON="${TASK_DIR_ABS}/$FILE_TASK_JSON"
69
+
70
+ # =============================================================================
71
+ # Validation
72
+ # =============================================================================
73
+ if [ ! -f "$TASK_JSON" ]; then
74
+ log_error "task.json not found at ${TASK_JSON}"
75
+ exit 1
76
+ fi
77
+
78
+ DISPATCH_MD="${PROJECT_ROOT}/${DISPATCH_MD_PATH}"
79
+ if [ ! -f "$DISPATCH_MD" ]; then
80
+ log_error "dispatch.md not found at ${DISPATCH_MD}"
81
+ exit 1
82
+ fi
83
+
84
+ CONFIG_FILE=$(get_worktree_config "$PROJECT_ROOT")
85
+ if [ ! -f "$CONFIG_FILE" ]; then
86
+ log_error "worktree.yaml not found at ${CONFIG_FILE}"
87
+ exit 1
88
+ fi
89
+
90
+ # =============================================================================
91
+ # Read Task Config
92
+ # =============================================================================
93
+ echo ""
94
+ echo -e "${BLUE}=== Multi-Agent Pipeline: Start ===${NC}"
95
+ log_info "Task: ${TASK_DIR_ABS}"
96
+
97
+ BRANCH=$(jq -r '.branch' "$TASK_JSON")
98
+ TASK_NAME=$(jq -r '.name' "$TASK_JSON")
99
+ TASK_STATUS=$(jq -r '.status' "$TASK_JSON")
100
+ WORKTREE_PATH=$(jq -r '.worktree_path // empty' "$TASK_JSON")
101
+ CONFIGURED_BASE_BRANCH=$(jq -r '.base_branch // empty' "$TASK_JSON")
102
+
103
+ # Check if task was rejected
104
+ if [ "$TASK_STATUS" = "rejected" ]; then
105
+ log_error "Task was rejected by Plan Agent"
106
+ if [ -f "${TASK_DIR_ABS}/REJECTED.md" ]; then
107
+ echo ""
108
+ echo -e "${YELLOW}Rejection reason:${NC}"
109
+ cat "${TASK_DIR_ABS}/REJECTED.md"
110
+ fi
111
+ echo ""
112
+ log_info "To retry, delete this directory and run plan.sh again with revised requirements"
113
+ exit 1
114
+ fi
115
+
116
+ # Check if prd.md exists (plan completed successfully)
117
+ if [ ! -f "${TASK_DIR_ABS}/prd.md" ]; then
118
+ log_error "prd.md not found - Plan Agent may not have completed"
119
+ log_info "Check plan log: ${TASK_DIR_ABS}/.plan-log"
120
+ exit 1
121
+ fi
122
+
123
+ if [ -z "$BRANCH" ] || [ "$BRANCH" = "null" ]; then
124
+ log_error "branch field not set in task.json"
125
+ log_info "Please set branch field first, e.g.:"
126
+ log_info " jq '.branch = \"task/my-task\"' task.json > tmp && mv tmp task.json"
127
+ exit 1
128
+ fi
129
+
130
+ log_info "Branch: ${BRANCH}"
131
+ log_info "Name: ${TASK_NAME}"
132
+
133
+ # =============================================================================
134
+ # Step 1: Create Worktree (if not exists)
135
+ # =============================================================================
136
+ if [ -z "$WORKTREE_PATH" ] || [ ! -d "$WORKTREE_PATH" ]; then
137
+ log_info "Step 1: Creating worktree..."
138
+
139
+ # Determine base_branch (PR target)
140
+ # Priority: 1) task.json configured value, 2) current branch
141
+ if [ -n "$CONFIGURED_BASE_BRANCH" ]; then
142
+ BASE_BRANCH="$CONFIGURED_BASE_BRANCH"
143
+ log_info "Base branch (from task.json): ${BASE_BRANCH}"
144
+ else
145
+ BASE_BRANCH=$(git -C "$PROJECT_ROOT" branch --show-current)
146
+ log_info "Base branch (current branch): ${BASE_BRANCH}"
147
+ fi
148
+
149
+ # Calculate worktree path
150
+ WORKTREE_BASE=$(get_worktree_base_dir "$PROJECT_ROOT")
151
+ mkdir -p "$WORKTREE_BASE"
152
+ WORKTREE_BASE="$(cd "$WORKTREE_BASE" && pwd)"
153
+ WORKTREE_PATH="${WORKTREE_BASE}/${BRANCH}"
154
+
155
+ # Create parent directory
156
+ mkdir -p "$(dirname "$WORKTREE_PATH")"
157
+ cd "$PROJECT_ROOT"
158
+
159
+ # Create branch if not exists
160
+ if git show-ref --verify --quiet "refs/heads/${BRANCH}"; then
161
+ log_info "Branch exists, checking out..."
162
+ git worktree add "$WORKTREE_PATH" "$BRANCH"
163
+ else
164
+ log_info "Creating new branch: $BRANCH"
165
+ git worktree add -b "$BRANCH" "$WORKTREE_PATH"
166
+ fi
167
+
168
+ log_success "Worktree created: ${WORKTREE_PATH}"
169
+
170
+ # Update task.json with worktree_path and base_branch
171
+ jq --arg path "$WORKTREE_PATH" --arg base "$BASE_BRANCH" \
172
+ '.worktree_path = $path | .base_branch = $base' "$TASK_JSON" > "${TASK_JSON}.tmp"
173
+ mv "${TASK_JSON}.tmp" "$TASK_JSON"
174
+
175
+ # ----- Copy environment files -----
176
+ log_info "Copying environment files..."
177
+ cd "$WORKTREE_PATH"
178
+
179
+ COPY_LIST=$(get_worktree_copy_files "$PROJECT_ROOT")
180
+ COPY_COUNT=0
181
+
182
+ while IFS= read -r item; do
183
+ [ -z "$item" ] && continue
184
+
185
+ SOURCE="${PROJECT_ROOT}/${item}"
186
+ TARGET="${WORKTREE_PATH}/${item}"
187
+
188
+ if [ -f "$SOURCE" ]; then
189
+ mkdir -p "$(dirname "$TARGET")"
190
+ cp "$SOURCE" "$TARGET"
191
+ ((COPY_COUNT++))
192
+ fi
193
+ done <<< "$COPY_LIST"
194
+
195
+ if [ $COPY_COUNT -gt 0 ]; then
196
+ log_success "Copied $COPY_COUNT file(s)"
197
+ fi
198
+
199
+ # ----- Copy task directory (may not be committed yet) -----
200
+ log_info "Copying task directory..."
201
+ TASK_TARGET_DIR="${WORKTREE_PATH}/${TASK_DIR_RELATIVE}"
202
+ mkdir -p "$(dirname "$TASK_TARGET_DIR")"
203
+ cp -r "$TASK_DIR_ABS" "$(dirname "$TASK_TARGET_DIR")/"
204
+ log_success "Task directory copied to worktree"
205
+
206
+ # ----- Run post_create hooks -----
207
+ log_info "Running post_create hooks..."
208
+
209
+ POST_CREATE=$(get_worktree_post_create_hooks "$PROJECT_ROOT")
210
+ HOOK_COUNT=0
211
+
212
+ while IFS= read -r cmd; do
213
+ [ -z "$cmd" ] && continue
214
+
215
+ log_info " Running: $cmd"
216
+ if eval "$cmd"; then
217
+ ((HOOK_COUNT++))
218
+ else
219
+ log_error "Hook failed: $cmd"
220
+ exit 1
221
+ fi
222
+ done <<< "$POST_CREATE"
223
+
224
+ if [ $HOOK_COUNT -gt 0 ]; then
225
+ log_success "Ran $HOOK_COUNT hook(s)"
226
+ fi
227
+
228
+ else
229
+ log_info "Step 1: Using existing worktree: ${WORKTREE_PATH}"
230
+ fi
231
+
232
+ # =============================================================================
233
+ # Step 2: Set .current-task in Worktree
234
+ # =============================================================================
235
+ log_info "Step 2: Setting current task in worktree..."
236
+
237
+ mkdir -p "${WORKTREE_PATH}/$DIR_WORKFLOW"
238
+ echo "$TASK_DIR_RELATIVE" > "${WORKTREE_PATH}/$DIR_WORKFLOW/$FILE_CURRENT_TASK"
239
+ log_success "Current task set: ${TASK_DIR_RELATIVE}"
240
+
241
+ # =============================================================================
242
+ # Step 3: Prepare and Start Claude Agent
243
+ # =============================================================================
244
+ log_info "Step 3: Starting Claude agent..."
245
+
246
+ # Update task status
247
+ jq '.status = "in_progress"' "$TASK_JSON" > "${TASK_JSON}.tmp"
248
+ mv "${TASK_JSON}.tmp" "$TASK_JSON"
249
+
250
+ cd "$WORKTREE_PATH"
251
+
252
+ LOG_FILE="${WORKTREE_PATH}/.agent-log"
253
+ RUNNER_SCRIPT="${WORKTREE_PATH}/.agent-runner.sh"
254
+ SESSION_ID_FILE="${WORKTREE_PATH}/.session-id"
255
+
256
+ touch "$LOG_FILE"
257
+
258
+ # Generate session ID for resume support
259
+ SESSION_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
260
+ echo "$SESSION_ID" > "$SESSION_ID_FILE"
261
+ log_info "Session ID: ${SESSION_ID}"
262
+
263
+ # Create runner script (uses --agent flag to load dispatch agent directly)
264
+ cat > "$RUNNER_SCRIPT" << RUNNER_EOF
265
+ #!/bin/bash
266
+ cd "\$(dirname "\$0")"
267
+ export https_proxy="\${AGENT_HTTPS_PROXY:-}"
268
+ export http_proxy="\${AGENT_HTTP_PROXY:-}"
269
+ export all_proxy="\${AGENT_ALL_PROXY:-}"
270
+ export CLAUDE_NON_INTERACTIVE=1
271
+
272
+ claude -p --agent dispatch --session-id "${SESSION_ID}" --dangerously-skip-permissions --output-format stream-json --verbose "Start the pipeline"
273
+ RUNNER_EOF
274
+ chmod +x "$RUNNER_SCRIPT"
275
+
276
+ # Start agent in background
277
+ AGENT_HTTPS_PROXY="${https_proxy:-}" \
278
+ AGENT_HTTP_PROXY="${http_proxy:-}" \
279
+ AGENT_ALL_PROXY="${all_proxy:-}" \
280
+ nohup "$RUNNER_SCRIPT" > "$LOG_FILE" 2>&1 &
281
+ AGENT_PID=$!
282
+
283
+ log_success "Agent started with PID: ${AGENT_PID}"
284
+
285
+ # =============================================================================
286
+ # Step 4: Register to Registry (in main repo, not worktree)
287
+ # =============================================================================
288
+ log_info "Step 4: Registering agent to registry..."
289
+
290
+ # Generate agent ID
291
+ TASK_ID=$(jq -r '.id // empty' "$TASK_JSON")
292
+ if [ -z "$TASK_ID" ]; then
293
+ TASK_ID=$(echo "$BRANCH" | sed 's/\//-/g')
294
+ fi
295
+
296
+ # Use common registry function
297
+ registry_add_agent "$TASK_ID" "$WORKTREE_PATH" "$AGENT_PID" "$TASK_DIR_RELATIVE" "$PROJECT_ROOT"
298
+
299
+ log_success "Agent registered: ${TASK_ID}"
300
+
301
+ # =============================================================================
302
+ # Summary
303
+ # =============================================================================
304
+ echo ""
305
+ echo -e "${GREEN}=== Agent Started ===${NC}"
306
+ echo ""
307
+ echo " ID: $TASK_ID"
308
+ echo " PID: $AGENT_PID"
309
+ echo " Session: $SESSION_ID"
310
+ echo " Worktree: $WORKTREE_PATH"
311
+ echo " Task: $TASK_DIR_RELATIVE"
312
+ echo " Log: $LOG_FILE"
313
+ echo " Registry: $(registry_get_file "$PROJECT_ROOT")"
314
+ echo ""
315
+ echo -e "${YELLOW}To monitor:${NC} tail -f $LOG_FILE"
316
+ echo -e "${YELLOW}To stop:${NC} kill $AGENT_PID"
317
+ echo -e "${YELLOW}To resume:${NC} cd $WORKTREE_PATH && claude --resume $SESSION_ID"