@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.10

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 (427) hide show
  1. package/dist/cli/index.js +0 -1
  2. package/dist/cli/index.js.map +1 -1
  3. package/dist/commands/init.d.ts +10 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +382 -120
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/update.d.ts +5 -0
  8. package/dist/commands/update.d.ts.map +1 -1
  9. package/dist/commands/update.js +178 -61
  10. package/dist/commands/update.js.map +1 -1
  11. package/dist/configurators/antigravity.d.ts +3 -4
  12. package/dist/configurators/antigravity.d.ts.map +1 -1
  13. package/dist/configurators/antigravity.js +17 -10
  14. package/dist/configurators/antigravity.js.map +1 -1
  15. package/dist/configurators/claude.d.ts +5 -28
  16. package/dist/configurators/claude.d.ts.map +1 -1
  17. package/dist/configurators/claude.js +30 -51
  18. package/dist/configurators/claude.js.map +1 -1
  19. package/dist/configurators/codebuddy.d.ts +6 -7
  20. package/dist/configurators/codebuddy.d.ts.map +1 -1
  21. package/dist/configurators/codebuddy.js +23 -51
  22. package/dist/configurators/codebuddy.js.map +1 -1
  23. package/dist/configurators/codex.d.ts +3 -6
  24. package/dist/configurators/codex.d.ts.map +1 -1
  25. package/dist/configurators/codex.js +29 -12
  26. package/dist/configurators/codex.js.map +1 -1
  27. package/dist/configurators/copilot.d.ts +6 -5
  28. package/dist/configurators/copilot.d.ts.map +1 -1
  29. package/dist/configurators/copilot.js +42 -13
  30. package/dist/configurators/copilot.js.map +1 -1
  31. package/dist/configurators/cursor.d.ts +6 -1
  32. package/dist/configurators/cursor.d.ts.map +1 -1
  33. package/dist/configurators/cursor.js +22 -45
  34. package/dist/configurators/cursor.js.map +1 -1
  35. package/dist/configurators/droid.d.ts +6 -1
  36. package/dist/configurators/droid.d.ts.map +1 -1
  37. package/dist/configurators/droid.js +23 -41
  38. package/dist/configurators/droid.js.map +1 -1
  39. package/dist/configurators/gemini.d.ts +8 -4
  40. package/dist/configurators/gemini.d.ts.map +1 -1
  41. package/dist/configurators/gemini.js +28 -47
  42. package/dist/configurators/gemini.js.map +1 -1
  43. package/dist/configurators/index.d.ts +1 -1
  44. package/dist/configurators/index.d.ts.map +1 -1
  45. package/dist/configurators/index.js +146 -100
  46. package/dist/configurators/index.js.map +1 -1
  47. package/dist/configurators/kilo.d.ts +3 -4
  48. package/dist/configurators/kilo.d.ts.map +1 -1
  49. package/dist/configurators/kilo.js +19 -46
  50. package/dist/configurators/kilo.js.map +1 -1
  51. package/dist/configurators/kiro.d.ts +4 -4
  52. package/dist/configurators/kiro.d.ts.map +1 -1
  53. package/dist/configurators/kiro.js +18 -14
  54. package/dist/configurators/kiro.js.map +1 -1
  55. package/dist/configurators/opencode.d.ts +7 -25
  56. package/dist/configurators/opencode.d.ts.map +1 -1
  57. package/dist/configurators/opencode.js +57 -56
  58. package/dist/configurators/opencode.js.map +1 -1
  59. package/dist/configurators/qoder.d.ts +6 -3
  60. package/dist/configurators/qoder.d.ts.map +1 -1
  61. package/dist/configurators/qoder.js +27 -46
  62. package/dist/configurators/qoder.js.map +1 -1
  63. package/dist/configurators/shared.d.ts +68 -3
  64. package/dist/configurators/shared.d.ts.map +1 -1
  65. package/dist/configurators/shared.js +274 -3
  66. package/dist/configurators/shared.js.map +1 -1
  67. package/dist/configurators/windsurf.d.ts +3 -4
  68. package/dist/configurators/windsurf.d.ts.map +1 -1
  69. package/dist/configurators/windsurf.js +17 -10
  70. package/dist/configurators/windsurf.js.map +1 -1
  71. package/dist/configurators/workflow.d.ts +0 -3
  72. package/dist/configurators/workflow.d.ts.map +1 -1
  73. package/dist/configurators/workflow.js +1 -7
  74. package/dist/configurators/workflow.js.map +1 -1
  75. package/dist/migrations/manifests/0.4.0.json +1 -1
  76. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  77. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  78. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  79. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  80. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  81. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  82. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  83. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  84. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  85. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  86. package/dist/templates/claude/agents/{check.md → trellis-check.md} +3 -31
  87. package/dist/templates/claude/agents/{implement.md → trellis-implement.md} +1 -2
  88. package/dist/templates/claude/agents/trellis-research.md +137 -0
  89. package/dist/templates/claude/index.d.ts +5 -37
  90. package/dist/templates/claude/index.d.ts.map +1 -1
  91. package/dist/templates/claude/index.js +3 -42
  92. package/dist/templates/claude/index.js.map +1 -1
  93. package/dist/templates/claude/settings.json +6 -4
  94. package/dist/templates/{iflow/agents/check.md → codebuddy/agents/trellis-check.md} +3 -31
  95. package/dist/templates/{iflow/agents/implement.md → codebuddy/agents/trellis-implement.md} +1 -2
  96. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  97. package/dist/templates/codebuddy/index.d.ts +6 -16
  98. package/dist/templates/codebuddy/index.d.ts.map +1 -1
  99. package/dist/templates/codebuddy/index.js +6 -36
  100. package/dist/templates/codebuddy/index.js.map +1 -1
  101. package/dist/templates/codebuddy/settings.json +59 -0
  102. package/dist/templates/codex/agents/trellis-check.toml +38 -0
  103. package/dist/templates/codex/agents/{implement.toml → trellis-implement.toml} +1 -1
  104. package/dist/templates/codex/agents/trellis-research.toml +60 -0
  105. package/dist/templates/codex/config.toml +10 -0
  106. package/dist/templates/codex/hooks/session-start.py +65 -29
  107. package/dist/templates/codex/hooks.json +11 -0
  108. package/dist/templates/codex/index.d.ts +0 -1
  109. package/dist/templates/codex/index.d.ts.map +1 -1
  110. package/dist/templates/codex/index.js +1 -8
  111. package/dist/templates/codex/index.js.map +1 -1
  112. package/dist/templates/codex/skills/start/SKILL.md +1 -1
  113. package/dist/templates/common/commands/continue.md +51 -0
  114. package/dist/templates/common/commands/finish-work.md +32 -0
  115. package/dist/templates/common/commands/start.md +56 -0
  116. package/dist/templates/common/index.d.ts +28 -0
  117. package/dist/templates/common/index.d.ts.map +1 -0
  118. package/dist/templates/common/index.js +55 -0
  119. package/dist/templates/common/index.js.map +1 -0
  120. package/dist/templates/{droid/commands/trellis → common/skills}/brainstorm.md +51 -12
  121. package/dist/templates/{iflow/commands/trellis → common/skills}/break-loop.md +4 -4
  122. package/dist/templates/common/skills/check.md +87 -0
  123. package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
  124. package/dist/templates/copilot/hooks/session-start.py +65 -29
  125. package/dist/templates/copilot/hooks.json +8 -0
  126. package/dist/templates/copilot/prompts/start.prompt.md +13 -16
  127. package/dist/templates/cursor/agents/trellis-check.md +94 -0
  128. package/dist/templates/cursor/agents/trellis-implement.md +94 -0
  129. package/dist/templates/cursor/agents/trellis-research.md +137 -0
  130. package/dist/templates/cursor/hooks.json +24 -0
  131. package/dist/templates/cursor/index.d.ts +6 -17
  132. package/dist/templates/cursor/index.d.ts.map +1 -1
  133. package/dist/templates/cursor/index.js +6 -37
  134. package/dist/templates/cursor/index.js.map +1 -1
  135. package/dist/templates/droid/droids/trellis-check.md +94 -0
  136. package/dist/templates/droid/droids/trellis-implement.md +94 -0
  137. package/dist/templates/droid/droids/trellis-research.md +137 -0
  138. package/dist/templates/droid/index.d.ts +7 -19
  139. package/dist/templates/droid/index.d.ts.map +1 -1
  140. package/dist/templates/droid/index.js +7 -39
  141. package/dist/templates/droid/index.js.map +1 -1
  142. package/dist/templates/droid/settings.json +59 -0
  143. package/dist/templates/extract.d.ts +7 -193
  144. package/dist/templates/extract.d.ts.map +1 -1
  145. package/dist/templates/extract.js +7 -310
  146. package/dist/templates/extract.js.map +1 -1
  147. package/dist/templates/gemini/agents/trellis-check.md +94 -0
  148. package/dist/templates/gemini/agents/trellis-implement.md +94 -0
  149. package/dist/templates/gemini/agents/trellis-research.md +137 -0
  150. package/dist/templates/gemini/index.d.ts +6 -14
  151. package/dist/templates/gemini/index.d.ts.map +1 -1
  152. package/dist/templates/gemini/index.js +6 -37
  153. package/dist/templates/gemini/index.js.map +1 -1
  154. package/dist/templates/gemini/settings.json +28 -0
  155. package/dist/templates/kiro/agents/trellis-check.json +13 -0
  156. package/dist/templates/kiro/agents/trellis-implement.json +13 -0
  157. package/dist/templates/kiro/agents/trellis-research.json +21 -0
  158. package/dist/templates/kiro/index.d.ts +11 -11
  159. package/dist/templates/kiro/index.d.ts.map +1 -1
  160. package/dist/templates/kiro/index.js +11 -33
  161. package/dist/templates/kiro/index.js.map +1 -1
  162. package/dist/templates/opencode/agents/{check.md → trellis-check.md} +3 -30
  163. package/dist/templates/opencode/agents/{implement.md → trellis-implement.md} +1 -1
  164. package/dist/templates/opencode/agents/{research.md → trellis-research.md} +1 -2
  165. package/dist/templates/opencode/plugins/inject-subagent-context.js +18 -190
  166. package/dist/templates/opencode/plugins/inject-workflow-state.js +172 -0
  167. package/dist/templates/opencode/plugins/session-start.js +76 -39
  168. package/dist/templates/qoder/agents/trellis-check.md +94 -0
  169. package/dist/templates/qoder/agents/trellis-implement.md +94 -0
  170. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  171. package/dist/templates/qoder/index.d.ts +7 -10
  172. package/dist/templates/qoder/index.d.ts.map +1 -1
  173. package/dist/templates/qoder/index.js +7 -32
  174. package/dist/templates/qoder/index.js.map +1 -1
  175. package/dist/templates/qoder/settings.json +47 -0
  176. package/dist/templates/shared-hooks/index.d.ts +19 -0
  177. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  178. package/dist/templates/shared-hooks/index.js +30 -0
  179. package/dist/templates/shared-hooks/index.js.map +1 -0
  180. package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +77 -266
  181. package/dist/templates/shared-hooks/inject-workflow-state.py +244 -0
  182. package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +172 -55
  183. package/dist/templates/template-utils.d.ts +26 -0
  184. package/dist/templates/template-utils.d.ts.map +1 -0
  185. package/dist/templates/template-utils.js +60 -0
  186. package/dist/templates/template-utils.js.map +1 -0
  187. package/dist/templates/trellis/config.yaml +6 -0
  188. package/dist/templates/trellis/index.d.ts +1 -15
  189. package/dist/templates/trellis/index.d.ts.map +1 -1
  190. package/dist/templates/trellis/index.js +2 -29
  191. package/dist/templates/trellis/index.js.map +1 -1
  192. package/dist/templates/trellis/scripts/common/cli_adapter.py +31 -8
  193. package/dist/templates/trellis/scripts/common/config.py +126 -1
  194. package/dist/templates/trellis/scripts/common/git_context.py +25 -2
  195. package/dist/templates/trellis/scripts/common/task_context.py +23 -28
  196. package/dist/templates/trellis/scripts/common/task_store.py +0 -12
  197. package/dist/templates/trellis/scripts/common/types.py +0 -2
  198. package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
  199. package/dist/templates/trellis/scripts/task.py +13 -35
  200. package/dist/templates/trellis/workflow.md +283 -298
  201. package/dist/types/ai-tools.d.ts +30 -3
  202. package/dist/types/ai-tools.d.ts.map +1 -1
  203. package/dist/types/ai-tools.js +119 -15
  204. package/dist/types/ai-tools.js.map +1 -1
  205. package/dist/types/migration.d.ts +8 -1
  206. package/dist/types/migration.d.ts.map +1 -1
  207. package/dist/utils/project-detector.d.ts +2 -0
  208. package/dist/utils/project-detector.d.ts.map +1 -1
  209. package/dist/utils/project-detector.js +120 -11
  210. package/dist/utils/project-detector.js.map +1 -1
  211. package/dist/utils/task-json.d.ts +46 -0
  212. package/dist/utils/task-json.d.ts.map +1 -0
  213. package/dist/utils/task-json.js +49 -0
  214. package/dist/utils/task-json.js.map +1 -0
  215. package/package.json +3 -2
  216. package/dist/configurators/iflow.d.ts +0 -33
  217. package/dist/configurators/iflow.d.ts.map +0 -1
  218. package/dist/configurators/iflow.js +0 -99
  219. package/dist/configurators/iflow.js.map +0 -1
  220. package/dist/templates/antigravity/index.d.ts +0 -12
  221. package/dist/templates/antigravity/index.d.ts.map +0 -1
  222. package/dist/templates/antigravity/index.js +0 -29
  223. package/dist/templates/antigravity/index.js.map +0 -1
  224. package/dist/templates/claude/agents/debug.md +0 -106
  225. package/dist/templates/claude/agents/dispatch.md +0 -213
  226. package/dist/templates/claude/agents/plan.md +0 -396
  227. package/dist/templates/claude/agents/research.md +0 -120
  228. package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
  229. package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
  230. package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
  231. package/dist/templates/claude/commands/trellis/check.md +0 -25
  232. package/dist/templates/claude/commands/trellis/create-command.md +0 -154
  233. package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
  234. package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
  235. package/dist/templates/claude/commands/trellis/onboard.md +0 -358
  236. package/dist/templates/claude/commands/trellis/parallel.md +0 -192
  237. package/dist/templates/claude/commands/trellis/record-session.md +0 -62
  238. package/dist/templates/claude/commands/trellis/start.md +0 -393
  239. package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
  240. package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
  241. package/dist/templates/claude/hooks/ralph-loop.py +0 -396
  242. package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
  243. package/dist/templates/codebuddy/commands/trellis/brainstorm.md +0 -487
  244. package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
  245. package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
  246. package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
  247. package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
  248. package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
  249. package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
  250. package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
  251. package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
  252. package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
  253. package/dist/templates/codex/agents/check.toml +0 -23
  254. package/dist/templates/codex/agents/research.toml +0 -26
  255. package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
  256. package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
  257. package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
  258. package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
  259. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
  260. package/dist/templates/cursor/commands/trellis-check.md +0 -25
  261. package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
  262. package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
  263. package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
  264. package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
  265. package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
  266. package/dist/templates/cursor/commands/trellis-start.md +0 -373
  267. package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
  268. package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
  269. package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
  270. package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
  271. package/dist/templates/droid/commands/trellis/check.md +0 -29
  272. package/dist/templates/droid/commands/trellis/create-command.md +0 -158
  273. package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
  274. package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
  275. package/dist/templates/droid/commands/trellis/onboard.md +0 -362
  276. package/dist/templates/droid/commands/trellis/record-session.md +0 -66
  277. package/dist/templates/droid/commands/trellis/start.md +0 -377
  278. package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
  279. package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
  280. package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
  281. package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
  282. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
  283. package/dist/templates/gemini/commands/trellis/check.toml +0 -29
  284. package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
  285. package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
  286. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
  287. package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
  288. package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
  289. package/dist/templates/gemini/commands/trellis/start.toml +0 -354
  290. package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
  291. package/dist/templates/iflow/agents/debug.md +0 -106
  292. package/dist/templates/iflow/agents/dispatch.md +0 -213
  293. package/dist/templates/iflow/agents/plan.md +0 -396
  294. package/dist/templates/iflow/agents/research.md +0 -120
  295. package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
  296. package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
  297. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
  298. package/dist/templates/iflow/commands/trellis/check.md +0 -25
  299. package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
  300. package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
  301. package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
  302. package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
  303. package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
  304. package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
  305. package/dist/templates/iflow/commands/trellis/start.md +0 -393
  306. package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
  307. package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
  308. package/dist/templates/iflow/hooks/session-start.py +0 -403
  309. package/dist/templates/iflow/index.d.ts +0 -54
  310. package/dist/templates/iflow/index.d.ts.map +0 -1
  311. package/dist/templates/iflow/index.js +0 -85
  312. package/dist/templates/iflow/index.js.map +0 -1
  313. package/dist/templates/iflow/settings.json +0 -60
  314. package/dist/templates/kilo/index.d.ts +0 -16
  315. package/dist/templates/kilo/index.d.ts.map +0 -1
  316. package/dist/templates/kilo/index.js +0 -39
  317. package/dist/templates/kilo/index.js.map +0 -1
  318. package/dist/templates/kilo/workflows/before-dev.md +0 -29
  319. package/dist/templates/kilo/workflows/brainstorm.md +0 -487
  320. package/dist/templates/kilo/workflows/break-loop.md +0 -125
  321. package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
  322. package/dist/templates/kilo/workflows/check.md +0 -25
  323. package/dist/templates/kilo/workflows/create-command.md +0 -152
  324. package/dist/templates/kilo/workflows/finish-work.md +0 -129
  325. package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
  326. package/dist/templates/kilo/workflows/onboard.md +0 -358
  327. package/dist/templates/kilo/workflows/parallel.md +0 -193
  328. package/dist/templates/kilo/workflows/record-session.md +0 -62
  329. package/dist/templates/kilo/workflows/start.md +0 -387
  330. package/dist/templates/kilo/workflows/update-spec.md +0 -285
  331. package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
  332. package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
  333. package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
  334. package/dist/templates/kiro/skills/check/SKILL.md +0 -30
  335. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
  336. package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
  337. package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
  338. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
  339. package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
  340. package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
  341. package/dist/templates/kiro/skills/start/SKILL.md +0 -351
  342. package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
  343. package/dist/templates/markdown/spec/backend/directory-structure.md +0 -292
  344. package/dist/templates/markdown/spec/backend/index.md +0 -40
  345. package/dist/templates/markdown/spec/backend/script-conventions.md +0 -742
  346. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +0 -118
  347. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +0 -394
  348. package/dist/templates/opencode/agents/debug.md +0 -129
  349. package/dist/templates/opencode/agents/dispatch.md +0 -223
  350. package/dist/templates/opencode/agents/trellis-plan.md +0 -427
  351. package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
  352. package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
  353. package/dist/templates/opencode/commands/trellis/break-loop.md +0 -125
  354. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
  355. package/dist/templates/opencode/commands/trellis/check.md +0 -25
  356. package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
  357. package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
  358. package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
  359. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  360. package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
  361. package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
  362. package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
  363. package/dist/templates/opencode/commands/trellis/start.md +0 -351
  364. package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
  365. package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
  366. package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
  367. package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
  368. package/dist/templates/qoder/skills/check/SKILL.md +0 -30
  369. package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
  370. package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
  371. package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
  372. package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
  373. package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
  374. package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
  375. package/dist/templates/qoder/skills/start/SKILL.md +0 -388
  376. package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
  377. package/dist/templates/trellis/scripts/common/phase.py +0 -254
  378. package/dist/templates/trellis/scripts/common/registry.py +0 -335
  379. package/dist/templates/trellis/scripts/common/worktree.py +0 -305
  380. package/dist/templates/trellis/scripts/create_bootstrap.py +0 -298
  381. package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
  382. package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
  383. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
  384. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
  385. package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
  386. package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
  387. package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
  388. package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
  389. package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
  390. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
  391. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
  392. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
  393. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
  394. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
  395. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
  396. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
  397. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
  398. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
  399. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
  400. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
  401. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
  402. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
  403. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
  404. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
  405. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
  406. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
  407. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
  408. package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
  409. package/dist/templates/trellis/worktree.yaml +0 -47
  410. package/dist/templates/windsurf/index.d.ts +0 -21
  411. package/dist/templates/windsurf/index.d.ts.map +0 -1
  412. package/dist/templates/windsurf/index.js +0 -44
  413. package/dist/templates/windsurf/index.js.map +0 -1
  414. package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
  415. package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
  416. package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
  417. package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
  418. package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
  419. package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
  420. package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
  421. package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
  422. package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
  423. package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
  424. package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
  425. package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
  426. /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
  427. /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python3
2
2
  # -*- coding: utf-8 -*-
3
3
  """
4
- Multi-Agent Pipeline Context Injection Hook
4
+ Multi-Platform Sub-Agent Context Injection Hook
5
+
6
+ Injects task-specific context when sub-agents (implement, check, research) are spawned.
5
7
 
6
8
  Core Design Philosophy:
7
- - Dispatch becomes a pure dispatcher, only responsible for "calling subagents"
8
9
  - Hook is responsible for injecting all context, subagent works autonomously with complete info
9
10
  - Each agent has a dedicated jsonl file defining its context
10
11
  - No resume needed, no segmentation, behavior controlled by code not prompt
@@ -14,9 +15,6 @@ Trigger: PreToolUse (before Task tool call)
14
15
  Context Source: .trellis/.current-task points to task directory
15
16
  - implement.jsonl - Implement agent dedicated context
16
17
  - check.jsonl - Check agent dedicated context
17
- - debug.jsonl - Debug agent dedicated context
18
- - research.jsonl - Research agent dedicated context (optional, usually not needed)
19
- - cr.jsonl - Code review dedicated context
20
18
  - prd.md - Requirements document
21
19
  - info.md - Technical design
22
20
  - codex-review-output.txt - Code Review results
@@ -40,33 +38,28 @@ if sys.platform == "win32":
40
38
  elif hasattr(sys.stdout, "detach"):
41
39
  sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr]
42
40
 
41
+
43
42
  # =============================================================================
44
43
  # Path Constants (change here to rename directories)
45
44
  # =============================================================================
46
45
 
47
46
  DIR_WORKFLOW = ".trellis"
48
- DIR_WORKSPACE = "workspace"
49
- DIR_TASKS = "tasks"
50
47
  DIR_SPEC = "spec"
51
48
  FILE_CURRENT_TASK = ".current-task"
52
49
  FILE_TASK_JSON = "task.json"
53
50
 
54
- # Agents that don't update phase (can be called at any time)
55
- AGENTS_NO_PHASE_UPDATE = {"debug", "research"}
56
-
57
51
  # =============================================================================
58
52
  # Subagent Constants (change here to rename subagent types)
59
53
  # =============================================================================
60
54
 
61
- AGENT_IMPLEMENT = "implement"
62
- AGENT_CHECK = "check"
63
- AGENT_DEBUG = "debug"
64
- AGENT_RESEARCH = "research"
55
+ AGENT_IMPLEMENT = "trellis-implement"
56
+ AGENT_CHECK = "trellis-check"
57
+ AGENT_RESEARCH = "trellis-research"
65
58
 
66
59
  # Agents that require a task directory
67
- AGENTS_REQUIRE_TASK = (AGENT_IMPLEMENT, AGENT_CHECK, AGENT_DEBUG)
60
+ AGENTS_REQUIRE_TASK = (AGENT_IMPLEMENT, AGENT_CHECK)
68
61
  # All supported agents
69
- AGENTS_ALL = (AGENT_IMPLEMENT, AGENT_CHECK, AGENT_DEBUG, AGENT_RESEARCH)
62
+ AGENTS_ALL = (AGENT_IMPLEMENT, AGENT_CHECK, AGENT_RESEARCH)
70
63
 
71
64
 
72
65
  def find_repo_root(start_path: str) -> str | None:
@@ -111,63 +104,6 @@ def get_current_task(repo_root: str) -> str | None:
111
104
  return None
112
105
 
113
106
 
114
- def update_current_phase(repo_root: str, task_dir: str, subagent_type: str) -> None:
115
- """
116
- Update current_phase in task.json based on subagent_type.
117
-
118
- This ensures phase tracking is always accurate, regardless of whether
119
- dispatch agent remembers to update it.
120
-
121
- Logic:
122
- - Read next_action array from task.json
123
- - Find the next phase whose action matches subagent_type
124
- - Only move forward, never backward
125
- - Some agents (debug, research) don't update phase
126
- """
127
- if subagent_type in AGENTS_NO_PHASE_UPDATE:
128
- return
129
-
130
- task_json_path = os.path.join(repo_root, task_dir, FILE_TASK_JSON)
131
- if not os.path.exists(task_json_path):
132
- return
133
-
134
- try:
135
- with open(task_json_path, "r", encoding="utf-8") as f:
136
- task_data = json.load(f)
137
-
138
- current_phase = task_data.get("current_phase", 0)
139
- next_actions = task_data.get("next_action", [])
140
-
141
- # Map action names to subagent types
142
- # "implement" -> "implement", "check" -> "check", "finish" -> "check"
143
- action_to_agent = {
144
- "implement": "implement",
145
- "check": "check",
146
- "finish": "check", # finish uses check agent
147
- }
148
-
149
- # Find the next phase that matches this subagent_type
150
- new_phase = None
151
- for action in next_actions:
152
- phase_num = action.get("phase", 0)
153
- action_name = action.get("action", "")
154
- expected_agent = action_to_agent.get(action_name)
155
-
156
- # Only consider phases after current_phase
157
- if phase_num > current_phase and expected_agent == subagent_type:
158
- new_phase = phase_num
159
- break
160
-
161
- if new_phase is not None:
162
- task_data["current_phase"] = new_phase
163
-
164
- with open(task_json_path, "w", encoding="utf-8") as f:
165
- json.dump(task_data, f, indent=2, ensure_ascii=False)
166
- except Exception:
167
- # Don't fail the hook if phase update fails
168
- pass
169
-
170
-
171
107
  def read_file_content(base_path: str, file_path: str) -> str | None:
172
108
  """Read file content, return None if file doesn't exist"""
173
109
  full_path = os.path.join(base_path, file_path)
@@ -271,24 +207,17 @@ def read_jsonl_entries(base_path: str, jsonl_path: str) -> list[tuple[str, str]]
271
207
  return results
272
208
 
273
209
 
210
+
211
+
274
212
  def get_agent_context(repo_root: str, task_dir: str, agent_type: str) -> str:
275
213
  """
276
- Get complete context for specified agent
277
-
278
- Prioritize agent-specific jsonl, fallback to spec.jsonl if not exists
214
+ Get context from {agent_type}.jsonl for the specified agent.
215
+ Only reads implement.jsonl or check.jsonl (the two JSONL files the task system creates).
279
216
  """
280
217
  context_parts = []
281
218
 
282
- # 1. Try agent-specific jsonl
283
219
  agent_jsonl = f"{task_dir}/{agent_type}.jsonl"
284
- agent_entries = read_jsonl_entries(repo_root, agent_jsonl)
285
-
286
- # 2. If agent-specific jsonl doesn't exist or empty, fallback to spec.jsonl
287
- if not agent_entries:
288
- agent_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl")
289
-
290
- # 3. Add all files from jsonl
291
- for file_path, content in agent_entries:
220
+ for file_path, content in read_jsonl_entries(repo_root, agent_jsonl):
292
221
  context_parts.append(f"=== {file_path} ===\n{content}")
293
222
 
294
223
  return "\n\n".join(context_parts)
@@ -305,7 +234,7 @@ def get_implement_context(repo_root: str, task_dir: str) -> str:
305
234
  """
306
235
  context_parts = []
307
236
 
308
- # 1. Read implement.jsonl (or fallback to spec.jsonl)
237
+ # 1. Read implement.jsonl
309
238
  base_context = get_agent_context(repo_root, task_dir, "implement")
310
239
  if base_context:
311
240
  context_parts.append(base_context)
@@ -327,133 +256,27 @@ def get_implement_context(repo_root: str, task_dir: str) -> str:
327
256
 
328
257
  def get_check_context(repo_root: str, task_dir: str) -> str:
329
258
  """
330
- Complete context for Check Agent
331
-
332
- Read order:
333
- 1. All files in check.jsonl (check specs + dev specs)
334
- 2. prd.md (for understanding task intent)
259
+ Context for Check Agent: check.jsonl + prd.md
335
260
  """
336
261
  context_parts = []
337
262
 
338
- # 1. Read check.jsonl (or fallback to spec.jsonl + hardcoded check files)
339
- check_entries = read_jsonl_entries(repo_root, f"{task_dir}/check.jsonl")
263
+ for file_path, content in read_jsonl_entries(repo_root, f"{task_dir}/check.jsonl"):
264
+ context_parts.append(f"=== {file_path} ===\n{content}")
340
265
 
341
- if check_entries:
342
- for file_path, content in check_entries:
343
- context_parts.append(f"=== {file_path} ===\n{content}")
344
- else:
345
- # Fallback: use hardcoded check files + spec.jsonl
346
- check_files = [
347
- (".iflow/commands/trellis/finish-work.md", "Finish work checklist"),
348
- (".iflow/commands/trellis/check-cross-layer.md", "Cross-layer check spec"),
349
- (".iflow/commands/trellis/check.md", "Code quality check spec"),
350
- ]
351
- for file_path, description in check_files:
352
- content = read_file_content(repo_root, file_path)
353
- if content:
354
- context_parts.append(f"=== {file_path} ({description}) ===\n{content}")
355
-
356
- # Add spec.jsonl
357
- spec_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl")
358
- for file_path, content in spec_entries:
359
- context_parts.append(f"=== {file_path} (Dev spec) ===\n{content}")
360
-
361
- # 2. Requirements document (for understanding task intent)
362
266
  prd_content = read_file_content(repo_root, f"{task_dir}/prd.md")
363
267
  if prd_content:
364
- context_parts.append(
365
- f"=== {task_dir}/prd.md (Requirements - for understanding intent) ===\n{prd_content}"
366
- )
268
+ context_parts.append(f"=== {task_dir}/prd.md (Requirements) ===\n{prd_content}")
367
269
 
368
270
  return "\n\n".join(context_parts)
369
271
 
370
272
 
371
273
  def get_finish_context(repo_root: str, task_dir: str) -> str:
372
274
  """
373
- Complete context for Finish phase (final check before PR)
374
-
375
- Read order:
376
- 1. All files in finish.jsonl (if exists)
377
- 2. Fallback to finish-work.md only (lightweight final check)
378
- 3. update-spec.md (for active spec sync)
379
- 4. prd.md (for verifying requirements are met)
380
- """
381
- context_parts = []
382
-
383
- # 1. Try finish.jsonl first
384
- finish_entries = read_jsonl_entries(repo_root, f"{task_dir}/finish.jsonl")
385
-
386
- if finish_entries:
387
- for file_path, content in finish_entries:
388
- context_parts.append(f"=== {file_path} ===\n{content}")
389
- else:
390
- # Fallback: only finish-work.md (lightweight)
391
- finish_work = read_file_content(
392
- repo_root, ".iflow/commands/trellis/finish-work.md"
393
- )
394
- if finish_work:
395
- context_parts.append(
396
- f"=== .iflow/commands/trellis/finish-work.md (Finish checklist) ===\n{finish_work}"
397
- )
398
-
399
- # 2. Spec update process (for active spec sync)
400
- update_spec = read_file_content(
401
- repo_root, ".iflow/commands/trellis/update-spec.md"
402
- )
403
- if update_spec:
404
- context_parts.append(
405
- f"=== .iflow/commands/trellis/update-spec.md (Spec update process) ===\n{update_spec}"
406
- )
407
-
408
- # 3. Requirements document (for verifying requirements are met)
409
- prd_content = read_file_content(repo_root, f"{task_dir}/prd.md")
410
- if prd_content:
411
- context_parts.append(
412
- f"=== {task_dir}/prd.md (Requirements - verify all met) ===\n{prd_content}"
413
- )
414
-
415
- return "\n\n".join(context_parts)
416
-
417
-
418
- def get_debug_context(repo_root: str, task_dir: str) -> str:
419
- """
420
- Complete context for Debug Agent
421
-
422
- Read order:
423
- 1. All files in debug.jsonl (specs needed for fixing)
424
- 2. codex-review-output.txt (Codex Review results)
275
+ Context for Finish phase: reuses check.jsonl + prd.md
276
+ (Finish is a final check, same context source.)
425
277
  """
426
- context_parts = []
427
-
428
- # 1. Read debug.jsonl (or fallback to spec.jsonl + hardcoded check files)
429
- debug_entries = read_jsonl_entries(repo_root, f"{task_dir}/debug.jsonl")
430
-
431
- if debug_entries:
432
- for file_path, content in debug_entries:
433
- context_parts.append(f"=== {file_path} ===\n{content}")
434
- else:
435
- # Fallback: use spec.jsonl + hardcoded check files
436
- spec_entries = read_jsonl_entries(repo_root, f"{task_dir}/spec.jsonl")
437
- for file_path, content in spec_entries:
438
- context_parts.append(f"=== {file_path} (Dev spec) ===\n{content}")
439
-
440
- check_files = [
441
- (".iflow/commands/trellis/check.md", "Code quality check spec"),
442
- (".iflow/commands/trellis/check-cross-layer.md", "Cross-layer check spec"),
443
- ]
444
- for file_path, description in check_files:
445
- content = read_file_content(repo_root, file_path)
446
- if content:
447
- context_parts.append(f"=== {file_path} ({description}) ===\n{content}")
448
-
449
- # 2. Codex review output (if exists)
450
- codex_output = read_file_content(repo_root, f"{task_dir}/codex-review-output.txt")
451
- if codex_output:
452
- context_parts.append(
453
- f"=== {task_dir}/codex-review-output.txt (Codex Review Results) ===\n{codex_output}"
454
- )
278
+ return get_check_context(repo_root, task_dir)
455
279
 
456
- return "\n\n".join(context_parts)
457
280
 
458
281
 
459
282
  def build_implement_prompt(original_prompt: str, context: str) -> str:
@@ -564,47 +387,10 @@ Finish checklist and requirements:
564
387
  - Verify all acceptance criteria in prd.md are met"""
565
388
 
566
389
 
567
- def build_debug_prompt(original_prompt: str, context: str) -> str:
568
- """Build complete prompt for Debug"""
569
- return f"""# Debug Agent Task
570
-
571
- You are the Debug Agent in the Multi-Agent Pipeline (issue fixer).
572
-
573
- ## Your Context
574
-
575
- Dev specs and Codex Review results:
576
-
577
- {context}
578
-
579
- ---
580
-
581
- ## Your Task
582
-
583
- {original_prompt}
584
-
585
- ---
586
-
587
- ## Workflow
588
-
589
- 1. **Understand issues** - Analyze issues pointed out in Codex Review
590
- 2. **Locate code** - Find positions that need fixing
591
- 3. **Fix against specs** - Fix issues following dev specs
592
- 4. **Verify fixes** - Run typecheck to ensure no new issues
593
-
594
- ## Important Constraints
595
-
596
- - Do NOT execute git commit, only code modifications
597
- - Run typecheck after each fix to verify
598
- - Report which issues were fixed and which files were modified"""
599
-
600
390
 
601
391
  def get_research_context(repo_root: str, task_dir: str | None) -> str:
602
392
  """
603
- Context for Research Agent
604
-
605
- Research doesn't need much preset context, only needs:
606
- 1. Project structure overview (where spec directories are)
607
- 2. Optional research.jsonl (if there are specific search needs)
393
+ Context for Research Agent — project structure overview for spec directories.
608
394
  """
609
395
  context_parts = []
610
396
 
@@ -641,16 +427,6 @@ To get structured package info, run: `python3 ./{DIR_WORKFLOW}/scripts/get_conte
641
427
 
642
428
  context_parts.append(project_structure)
643
429
 
644
- # 2. If task directory exists, try reading research.jsonl (optional)
645
- if task_dir:
646
- research_entries = read_jsonl_entries(repo_root, f"{task_dir}/research.jsonl")
647
- if research_entries:
648
- context_parts.append(
649
- "\n## Additional Search Context (from research.jsonl)\n"
650
- )
651
- for file_path, content in research_entries:
652
- context_parts.append(f"=== {file_path} ===\n{content}")
653
-
654
430
  return "\n\n".join(context_parts)
655
431
 
656
432
 
@@ -714,20 +490,53 @@ Provide structured search results including:
714
490
  - External references (if any)"""
715
491
 
716
492
 
493
+ def _parse_hook_input(input_data: dict) -> tuple[str, str, dict]:
494
+ """Parse hook input across different platform formats.
495
+
496
+ Returns (subagent_type, original_prompt, tool_input).
497
+ Handles:
498
+ - Claude Code / Qoder / CodeBuddy / Droid: tool_name=Task|Agent, tool_input.subagent_type
499
+ - Cursor: tool_name=Task, tool_input.subagent_type
500
+ - Copilot CLI: toolName=task (camelCase key, lowercase value)
501
+ - Gemini CLI: tool_name IS the agent name (BeforeTool matcher already filtered)
502
+ - Kiro: agentSpawn hook, agent_name field at top level
503
+ """
504
+ tool_input = input_data.get("tool_input", {})
505
+
506
+ # Standard format: Task/Agent tool with subagent_type
507
+ tool_name = input_data.get("tool_name", "") or input_data.get("toolName", "")
508
+ if tool_name.lower() in ("task", "agent"):
509
+ return (
510
+ tool_input.get("subagent_type", ""),
511
+ tool_input.get("prompt", ""),
512
+ tool_input,
513
+ )
514
+
515
+ # Kiro: agentSpawn hook passes agent_name at top level
516
+ agent_name = input_data.get("agent_name", "")
517
+ if agent_name:
518
+ return agent_name, tool_input.get("prompt", input_data.get("prompt", "")), tool_input
519
+
520
+ # Gemini CLI: BeforeTool where tool_name IS the agent name
521
+ # (matcher already ensured it's one of our agents)
522
+ if tool_name in AGENTS_ALL:
523
+ return tool_name, tool_input.get("prompt", ""), tool_input
524
+
525
+ # Copilot CLI: toolName field (camelCase), value might be the agent name
526
+ tool_name_camel = input_data.get("toolName", "")
527
+ if tool_name_camel in AGENTS_ALL:
528
+ return tool_name_camel, input_data.get("toolArgs", ""), tool_input
529
+
530
+ return "", "", tool_input
531
+
532
+
717
533
  def main():
718
534
  try:
719
535
  input_data = json.load(sys.stdin)
720
536
  except json.JSONDecodeError:
721
537
  sys.exit(0)
722
538
 
723
- tool_name = input_data.get("tool_name", "")
724
-
725
- if tool_name not in ("Task", "Agent"):
726
- sys.exit(0)
727
-
728
- tool_input = input_data.get("tool_input", {})
729
- subagent_type = tool_input.get("subagent_type", "")
730
- original_prompt = tool_input.get("prompt", "")
539
+ subagent_type, original_prompt, tool_input = _parse_hook_input(input_data)
731
540
  cwd = input_data.get("cwd", os.getcwd())
732
541
 
733
542
  # Only handle subagent types we care about
@@ -742,7 +551,7 @@ def main():
742
551
  # Get current task directory (research doesn't require it)
743
552
  task_dir = get_current_task(repo_root)
744
553
 
745
- # implement/check/debug need task directory
554
+ # implement/check need task directory
746
555
  if subagent_type in AGENTS_REQUIRE_TASK:
747
556
  if not task_dir:
748
557
  sys.exit(0)
@@ -751,9 +560,6 @@ def main():
751
560
  if not os.path.exists(task_dir_full):
752
561
  sys.exit(0)
753
562
 
754
- # Update current_phase in task.json (system-level enforcement)
755
- update_current_phase(repo_root, task_dir, subagent_type)
756
-
757
563
  # Check for [finish] marker in prompt (check agent with finish context)
758
564
  is_finish_phase = "[finish]" in original_prompt.lower()
759
565
 
@@ -772,10 +578,6 @@ def main():
772
578
  # Regular check phase: use check context (full specs for self-fix loop)
773
579
  context = get_check_context(repo_root, task_dir)
774
580
  new_prompt = build_check_prompt(original_prompt, context)
775
- elif subagent_type == AGENT_DEBUG:
776
- assert task_dir is not None # validated above
777
- context = get_debug_context(repo_root, task_dir)
778
- new_prompt = build_debug_prompt(original_prompt, context)
779
581
  elif subagent_type == AGENT_RESEARCH:
780
582
  # Research can work without task directory
781
583
  context = get_research_context(repo_root, task_dir)
@@ -786,13 +588,22 @@ def main():
786
588
  if not context:
787
589
  sys.exit(0)
788
590
 
789
- # Return updated input with correct iFlow PreToolUse format
591
+ # Return updated input use a multi-format output that covers all platforms.
592
+ # Most platforms ignore unrecognized fields, so we include multiple formats.
593
+ # The platform picks whichever fields it understands.
594
+ updated = {**tool_input, "prompt": new_prompt}
790
595
  output = {
596
+ # Claude Code / Qoder / CodeBuddy / Droid format
791
597
  "hookSpecificOutput": {
792
598
  "hookEventName": "PreToolUse",
793
599
  "permissionDecision": "allow",
794
- "updatedInput": {**tool_input, "prompt": new_prompt},
795
- }
600
+ "updatedInput": updated,
601
+ },
602
+ # Cursor format
603
+ "permission": "allow",
604
+ "updated_input": updated,
605
+ # Gemini format
606
+ "updatedInput": updated,
796
607
  }
797
608
 
798
609
  print(json.dumps(output, ensure_ascii=False))