@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,828 +0,0 @@
1
- #!/bin/bash
2
- # =============================================================================
3
- # Multi-Agent Pipeline: Status Monitor
4
- # =============================================================================
5
- # Usage:
6
- # ./status.sh Show summary of all tasks (default)
7
- # ./status.sh -a <assignee> Filter tasks by assignee
8
- # ./status.sh --list List all worktrees and agents
9
- # ./status.sh --detail <task> Detailed task status
10
- # ./status.sh --watch <task> Watch agent log in real-time
11
- # ./status.sh --log <task> Show recent log entries
12
- # ./status.sh --registry Show agent registry
13
- # =============================================================================
14
-
15
- set -e
16
-
17
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
18
- source "$SCRIPT_DIR/../common/paths.sh"
19
- source "$SCRIPT_DIR/../common/worktree.sh"
20
- source "$SCRIPT_DIR/../common/developer.sh"
21
- source "$SCRIPT_DIR/../common/phase.sh"
22
- source "$SCRIPT_DIR/../common/task-queue.sh"
23
-
24
- # Colors
25
- RED='\033[0;31m'
26
- GREEN='\033[0;32m'
27
- YELLOW='\033[1;33m'
28
- BLUE='\033[0;34m'
29
- CYAN='\033[0;36m'
30
- DIM='\033[2m'
31
- NC='\033[0m'
32
-
33
- PROJECT_ROOT=$(get_repo_root)
34
-
35
- # =============================================================================
36
- # Parse Arguments
37
- # =============================================================================
38
- ACTION="summary"
39
- TARGET=""
40
- FILTER_ASSIGNEE=""
41
-
42
- while [[ $# -gt 0 ]]; do
43
- case $1 in
44
- -a|--assignee)
45
- FILTER_ASSIGNEE="$2"
46
- shift 2
47
- ;;
48
- --list)
49
- ACTION="list"
50
- shift
51
- ;;
52
- --detail)
53
- ACTION="detail"
54
- TARGET="$2"
55
- shift 2
56
- ;;
57
- --watch)
58
- ACTION="watch"
59
- TARGET="$2"
60
- shift 2
61
- ;;
62
- --log)
63
- ACTION="log"
64
- TARGET="$2"
65
- shift 2
66
- ;;
67
- --progress)
68
- ACTION="progress"
69
- TARGET="$2"
70
- shift 2
71
- ;;
72
- --registry)
73
- ACTION="registry"
74
- shift
75
- ;;
76
- -h|--help)
77
- ACTION="help"
78
- shift
79
- ;;
80
- *)
81
- TARGET="$1"
82
- shift
83
- ;;
84
- esac
85
- done
86
-
87
- # =============================================================================
88
- # Helper Functions
89
- # =============================================================================
90
-
91
- # Check if PID is running
92
- is_running() {
93
- local pid="$1"
94
- [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null
95
- }
96
-
97
- # Get status color
98
- status_color() {
99
- local status="$1"
100
- case "$status" in
101
- completed) echo "${GREEN}" ;;
102
- in_progress) echo "${BLUE}" ;;
103
- planning) echo "${YELLOW}" ;;
104
- *) echo "${DIM}" ;;
105
- esac
106
- }
107
-
108
- # Find agent by task name or ID
109
- find_agent() {
110
- local search="$1"
111
- AGENTS_DIR=$(get_agents_dir)
112
- REGISTRY_FILE="${AGENTS_DIR}/registry.json"
113
-
114
- if [ ! -f "$REGISTRY_FILE" ]; then
115
- return 1
116
- fi
117
-
118
- # Try exact ID match first (use -c for compact single-line JSON output)
119
- local agent=$(jq -c --arg id "$search" '.agents[] | select(.id == $id)' "$REGISTRY_FILE" 2>/dev/null)
120
-
121
- # Try partial match on task_dir (use -c for compact single-line JSON output)
122
- if [ -z "$agent" ] || [ "$agent" = "null" ]; then
123
- agent=$(jq -c --arg search "$search" '[.agents[] | select(.task_dir | contains($search))] | first' "$REGISTRY_FILE" 2>/dev/null)
124
- fi
125
-
126
- echo "$agent"
127
- }
128
-
129
- # Get the last tool call from agent log
130
- get_last_tool() {
131
- local log_file="$1"
132
- if [ ! -f "$log_file" ]; then
133
- echo ""
134
- return
135
- fi
136
- # Use tail -r on macOS, tac on Linux
137
- if command -v tac &>/dev/null; then
138
- tac "$log_file" 2>/dev/null | head -100 | jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="tool_use") | .name' 2>/dev/null | head -1
139
- else
140
- tail -r "$log_file" 2>/dev/null | head -100 | jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="tool_use") | .name' 2>/dev/null | head -1
141
- fi
142
- }
143
-
144
- # Get the last assistant text from agent log
145
- get_last_message() {
146
- local log_file="$1"
147
- local max_len="${2:-100}"
148
- if [ ! -f "$log_file" ]; then
149
- echo ""
150
- return
151
- fi
152
- local text
153
- # Use tail -r on macOS, tac on Linux
154
- if command -v tac &>/dev/null; then
155
- text=$(tac "$log_file" 2>/dev/null | head -100 | jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="text") | .text' 2>/dev/null | head -1)
156
- else
157
- text=$(tail -r "$log_file" 2>/dev/null | head -100 | jq -r 'select(.type=="assistant") | .message.content[]? | select(.type=="text") | .text' 2>/dev/null | head -1)
158
- fi
159
- if [ -n "$text" ] && [ "$text" != "null" ]; then
160
- echo "${text:0:$max_len}"
161
- fi
162
- }
163
-
164
- # Get recent task notifications from agent log
165
- # Looks for async_launched tasks and infers completion from current_phase
166
- get_recent_tasks() {
167
- local log_file="$1"
168
- local count="${2:-5}"
169
- local current_phase="${3:-0}"
170
- if [ ! -f "$log_file" ]; then
171
- return
172
- fi
173
- # Get async_launched tasks with phase number extracted from description
174
- tail -500 "$log_file" 2>/dev/null | jq -r --argjson current_phase "$current_phase" '
175
- select(.type=="user" and .tool_use_result.status == "async_launched" and .tool_use_result.description != null) |
176
- .tool_use_result.description as $desc |
177
- # Extract phase number from "Phase N:" pattern
178
- ($desc | capture("Phase (?<num>[0-9]+)") | .num | tonumber) as $phase_num |
179
- # If current_phase > this phase, it is completed
180
- (if $phase_num < $current_phase then "completed" else "async_launched" end) as $status |
181
- "\($status)|\($desc)"
182
- ' 2>/dev/null | tail -"$count"
183
- }
184
-
185
- # =============================================================================
186
- # Commands
187
- # =============================================================================
188
-
189
- cmd_help() {
190
- cat << EOF
191
- Multi-Agent Pipeline: Status Monitor
192
-
193
- Usage:
194
- $0 Show summary of all tasks
195
- $0 -a <assignee> Filter tasks by assignee
196
- $0 --list List all worktrees and agents
197
- $0 --detail <task> Detailed task status
198
- $0 --progress <task> Quick progress view with recent activity
199
- $0 --watch <task> Watch agent log in real-time
200
- $0 --log <task> Show recent log entries
201
- $0 --registry Show agent registry
202
-
203
- Examples:
204
- $0 -a john
205
- $0 --detail my-task
206
- $0 --progress my-task
207
- $0 --watch 01-16-worktree-support
208
- $0 --log worktree-support
209
- EOF
210
- }
211
-
212
- cmd_list() {
213
- echo -e "${BLUE}=== Git Worktrees ===${NC}"
214
- echo ""
215
- cd "$PROJECT_ROOT"
216
- git worktree list
217
- echo ""
218
-
219
- echo -e "${BLUE}=== Registered Agents ===${NC}"
220
- echo ""
221
-
222
- AGENTS_DIR=$(get_agents_dir)
223
- REGISTRY_FILE="${AGENTS_DIR}/registry.json"
224
-
225
- if [ ! -f "$REGISTRY_FILE" ]; then
226
- echo " (no registry found)"
227
- return
228
- fi
229
-
230
- local agents=$(jq -r '.agents[]' "$REGISTRY_FILE" 2>/dev/null)
231
- if [ -z "$agents" ]; then
232
- echo " (no agents registered)"
233
- return
234
- fi
235
-
236
- jq -r '.agents[] | "\(.id)|\(.pid)|\(.worktree_path)|\(.started_at)"' "$REGISTRY_FILE" 2>/dev/null | while IFS='|' read -r id pid wt started; do
237
- local status_icon
238
- if is_running "$pid"; then
239
- status_icon="${GREEN}●${NC}"
240
- else
241
- status_icon="${RED}○${NC}"
242
- fi
243
- echo -e " $status_icon $id (PID: $pid)"
244
- echo -e " ${DIM}Worktree: $wt${NC}"
245
- echo -e " ${DIM}Started: $started${NC}"
246
- echo ""
247
- done
248
- }
249
-
250
- # Calculate elapsed time from ISO timestamp
251
- calc_elapsed() {
252
- local started="$1"
253
- if [ -z "$started" ] || [ "$started" = "null" ]; then
254
- echo "N/A"
255
- return
256
- fi
257
-
258
- # Parse started time (handle both formats: with and without timezone)
259
- local start_epoch
260
- if command -v gdate &>/dev/null; then
261
- start_epoch=$(gdate -d "$started" +%s 2>/dev/null)
262
- else
263
- # Try to parse ISO format
264
- start_epoch=$(date -j -f "%Y-%m-%dT%H:%M:%S" "${started%%+*}" +%s 2>/dev/null || date -d "$started" +%s 2>/dev/null)
265
- fi
266
-
267
- if [ -z "$start_epoch" ]; then
268
- echo "N/A"
269
- return
270
- fi
271
-
272
- local now_epoch=$(date +%s)
273
- local elapsed=$((now_epoch - start_epoch))
274
-
275
- if [ $elapsed -lt 60 ]; then
276
- echo "${elapsed}s"
277
- elif [ $elapsed -lt 3600 ]; then
278
- echo "$((elapsed / 60))m $((elapsed % 60))s"
279
- else
280
- echo "$((elapsed / 3600))h $((elapsed % 3600 / 60))m"
281
- fi
282
- }
283
-
284
- # Note: get_phase_info is now in common/phase.sh
285
-
286
- # Count modified files in worktree
287
- count_modified_files() {
288
- local worktree="$1"
289
- if [ -d "$worktree" ]; then
290
- cd "$worktree" && git status --short 2>/dev/null | wc -l | tr -d ' '
291
- else
292
- echo "0"
293
- fi
294
- }
295
-
296
- cmd_summary() {
297
- ensure_developer
298
-
299
- local tasks_dir=$(get_tasks_dir)
300
- if [ ! -d "$tasks_dir" ]; then
301
- echo "No tasks directory found"
302
- exit 0
303
- fi
304
-
305
- AGENTS_DIR=$(get_agents_dir)
306
- REGISTRY_FILE="${AGENTS_DIR}/registry.json"
307
-
308
- # Count running agents
309
- local running_count=0
310
- local total_agents=0
311
- if [ -f "$REGISTRY_FILE" ]; then
312
- total_agents=$(jq -r '.agents | length' "$REGISTRY_FILE" 2>/dev/null || echo "0")
313
- while read -r pid; do
314
- is_running "$pid" && ((running_count++))
315
- done < <(jq -r '.agents[].pid' "$REGISTRY_FILE" 2>/dev/null)
316
- fi
317
-
318
- # Task queue stats
319
- local task_stats=$(get_task_stats "$PROJECT_ROOT")
320
-
321
- echo -e "${BLUE}=== Multi-Agent Status ===${NC}"
322
- echo -e " Agents: ${GREEN}${running_count}${NC} running / ${total_agents} registered"
323
- echo -e " Tasks: ${task_stats}"
324
- echo ""
325
-
326
- # Use temp files for grouping (compatible with old bash)
327
- local tmp_dir=$(mktemp -d)
328
- local running_file="$tmp_dir/running"
329
- local stopped_file="$tmp_dir/stopped"
330
- local tasks_file="$tmp_dir/tasks"
331
- touch "$running_file" "$stopped_file" "$tasks_file"
332
-
333
- local has_running_agent=false
334
-
335
- for d in "$tasks_dir"/*/; do
336
- [ ! -d "$d" ] && continue
337
- [[ "$(basename "$d")" == "archive" ]] && continue
338
-
339
- local name=$(basename "$d")
340
- local task_json="$d/task.json"
341
- local status="unknown"
342
- local assignee="unassigned"
343
- local priority="P2"
344
-
345
- if [ -f "$task_json" ]; then
346
- status=$(jq -r '.status // "unknown"' "$task_json")
347
- assignee=$(jq -r '.assignee // "unassigned"' "$task_json")
348
- priority=$(jq -r '.priority // "P2"' "$task_json")
349
- fi
350
-
351
- # Filter by assignee if specified
352
- if [ -n "$FILTER_ASSIGNEE" ] && [ "$assignee" != "$FILTER_ASSIGNEE" ]; then
353
- continue
354
- fi
355
-
356
- # Check agent status
357
- local agent_info=""
358
- local pid=""
359
- local worktree=""
360
- local started=""
361
- local is_agent_running=false
362
-
363
- if [ -f "$REGISTRY_FILE" ]; then
364
- agent_info=$(jq -c --arg name "$name" '[.agents[] | select(.task_dir | contains($name))] | first' "$REGISTRY_FILE" 2>/dev/null)
365
- if [ -n "$agent_info" ] && [ "$agent_info" != "null" ]; then
366
- pid=$(echo "$agent_info" | jq -r '.pid')
367
- worktree=$(echo "$agent_info" | jq -r '.worktree_path')
368
- started=$(echo "$agent_info" | jq -r '.started_at')
369
- if is_running "$pid"; then
370
- is_agent_running=true
371
- has_running_agent=true
372
- fi
373
- fi
374
- fi
375
-
376
- local color=$(status_color "$status")
377
-
378
- # Color priority
379
- local priority_color="${NC}"
380
- case "$priority" in
381
- P0) priority_color="${RED}" ;;
382
- P1) priority_color="${YELLOW}" ;;
383
- P2) priority_color="${BLUE}" ;;
384
- esac
385
-
386
- if [ "$is_agent_running" = true ]; then
387
- # Running agent
388
- local task_dir_rel=$(echo "$agent_info" | jq -r '.task_dir')
389
- local worktree_task_json="$worktree/$task_dir_rel/task.json"
390
- local phase_source="$task_json"
391
- [ -f "$worktree_task_json" ] && phase_source="$worktree_task_json"
392
-
393
- local phase_info=$(get_phase_info "$phase_source")
394
- local elapsed=$(calc_elapsed "$started")
395
- local modified=$(count_modified_files "$worktree")
396
- local branch=$(jq -r '.branch // "N/A"' "$phase_source" 2>/dev/null)
397
- local log_file="$worktree/.agent-log"
398
- local last_tool=$(get_last_tool "$log_file")
399
-
400
- {
401
- echo -e "${GREEN}▶${NC} ${CYAN}${name}${NC} ${GREEN}[running]${NC} ${priority_color}[${priority}]${NC} @${assignee}"
402
- echo -e " Phase: ${phase_info}"
403
- echo -e " Elapsed: ${elapsed}"
404
- echo -e " Branch: ${DIM}${branch}${NC}"
405
- echo -e " Modified: ${modified} file(s)"
406
- [ -n "$last_tool" ] && echo -e " Activity: ${YELLOW}${last_tool}${NC}"
407
- echo -e " PID: ${DIM}${pid}${NC}"
408
- echo ""
409
- } >> "$running_file"
410
-
411
- elif [ -n "$agent_info" ] && [ "$agent_info" != "null" ]; then
412
- # Stopped agent - check if completed or interrupted
413
- local task_dir_rel=$(echo "$agent_info" | jq -r '.task_dir')
414
- local worktree_task_json="$worktree/$task_dir_rel/task.json"
415
- local worktree_status="unknown"
416
- if [ -f "$worktree_task_json" ]; then
417
- worktree_status=$(jq -r '.status // "unknown"' "$worktree_task_json")
418
- fi
419
-
420
- if [ "$worktree_status" = "completed" ]; then
421
- # Agent completed successfully
422
- {
423
- echo -e "${GREEN}✓${NC} ${name} ${GREEN}[completed]${NC}"
424
- echo ""
425
- } >> "$stopped_file"
426
- else
427
- # Agent was interrupted/blocked
428
- {
429
- local session_id_file="${worktree}/.session-id"
430
- local log_file="$worktree/.agent-log"
431
- local last_msg=$(get_last_message "$log_file" 150)
432
-
433
- if [ -f "$session_id_file" ]; then
434
- local session_id=$(cat "$session_id_file")
435
- echo -e "${RED}○${NC} ${name} ${RED}[stopped]${NC}"
436
- if [ -n "$last_msg" ]; then
437
- echo -e "${DIM}\"${last_msg}\"${NC}"
438
- fi
439
- echo -e "${YELLOW}cd ${worktree} && claude --resume ${session_id}${NC}"
440
- else
441
- echo -e "${RED}○${NC} ${name} ${RED}[stopped]${NC} ${DIM}(no session-id)${NC}"
442
- fi
443
- echo ""
444
- } >> "$stopped_file"
445
- fi
446
-
447
- else
448
- # Normal task - store with assignee + priority_order + status_order + date for sorting
449
- # Priority order: P0=0, P1=1, P2=2, P3=3 (lower = higher priority)
450
- local priority_order="2"
451
- case "$priority" in
452
- P0) priority_order="0" ;;
453
- P1) priority_order="1" ;;
454
- P2) priority_order="2" ;;
455
- P3) priority_order="3" ;;
456
- esac
457
- # Status order: in_progress=0, planning=1, completed=2 (lower = show first)
458
- local status_order="1"
459
- case "$status" in
460
- in_progress) status_order="0" ;;
461
- planning) status_order="1" ;;
462
- completed) status_order="2" ;;
463
- esac
464
- # Extract date from name (MM-DD) for sorting, use reverse for desc
465
- # Name format: MM-DD-xxx, extract MM-DD part and invert for desc sort
466
- local date_part=$(echo "$name" | grep -oE '^[0-9]{2}-[0-9]{2}' || echo "00-00")
467
- echo -e "${assignee}\t${priority_order}\t${status_order}\t${date_part}\t${color}●${NC} ${name} (${status}) ${priority_color}[${priority}]${NC}" >> "$tasks_file"
468
- fi
469
- done
470
-
471
- # Output running agents first
472
- if [ -s "$running_file" ]; then
473
- echo -e "${CYAN}Running Agents:${NC}"
474
- cat "$running_file"
475
- fi
476
-
477
- # Output stopped agents
478
- if [ -s "$stopped_file" ]; then
479
- echo -e "${RED}Stopped Agents:${NC}"
480
- cat "$stopped_file"
481
- fi
482
-
483
- # Separator between agents and tasks
484
- if [ -s "$running_file" ] || [ -s "$stopped_file" ]; then
485
- if [ -s "$tasks_file" ]; then
486
- echo -e "${DIM}───────────────────────────────────────${NC}"
487
- echo ""
488
- fi
489
- fi
490
-
491
- # Output tasks grouped by assignee, sorted by priority > status > date(desc)
492
- if [ -s "$tasks_file" ]; then
493
- local current_assignee=""
494
- # Sort: assignee(asc), priority(asc), status(asc), date(desc/reverse)
495
- sort -t$'\t' -k1,1 -k2,2n -k3,3n -k4,4r "$tasks_file" | while IFS=$'\t' read -r assignee priority_order status_order date_part task_line; do
496
- if [ "$assignee" != "$current_assignee" ]; then
497
- [ -n "$current_assignee" ] && echo ""
498
- echo -e "${CYAN}@${assignee}:${NC}"
499
- current_assignee="$assignee"
500
- fi
501
- echo -e " $task_line"
502
- done
503
- fi
504
-
505
- # Cleanup
506
- rm -rf "$tmp_dir"
507
-
508
- if [ "$has_running_agent" = true ]; then
509
- echo ""
510
- echo -e "${DIM}─────────────────────────────────────${NC}"
511
- echo -e "${DIM}Use --progress <name> for quick activity view${NC}"
512
- echo -e "${DIM}Use --detail <name> for more info${NC}"
513
- fi
514
- echo ""
515
- }
516
-
517
- cmd_progress() {
518
- if [ -z "$TARGET" ]; then
519
- echo "Usage: $0 --progress <task>"
520
- exit 1
521
- fi
522
-
523
- local agent=$(find_agent "$TARGET")
524
- if [ -z "$agent" ] || [ "$agent" = "null" ]; then
525
- echo "Agent not found: $TARGET"
526
- exit 1
527
- fi
528
-
529
- local id=$(echo "$agent" | jq -r '.id')
530
- local pid=$(echo "$agent" | jq -r '.pid')
531
- local worktree=$(echo "$agent" | jq -r '.worktree_path')
532
- local task_dir=$(echo "$agent" | jq -r '.task_dir')
533
- local started=$(echo "$agent" | jq -r '.started_at')
534
- local log_file="$worktree/.agent-log"
535
-
536
- if [ ! -f "$log_file" ]; then
537
- echo "Log file not found: $log_file"
538
- exit 1
539
- fi
540
-
541
- # Get phase info from worktree's task.json
542
- local worktree_task_json="$worktree/$task_dir/task.json"
543
- local phase_info="N/A"
544
- local current_phase=0
545
- if [ -f "$worktree_task_json" ]; then
546
- phase_info=$(get_phase_info "$worktree_task_json")
547
- current_phase=$(jq -r '.current_phase // 0' "$worktree_task_json")
548
- fi
549
-
550
- local elapsed=$(calc_elapsed "$started")
551
- local modified=$(count_modified_files "$worktree")
552
-
553
- # Check if running
554
- local status_str
555
- if is_running "$pid"; then
556
- status_str="${GREEN}running${NC}"
557
- else
558
- status_str="${RED}stopped${NC}"
559
- fi
560
-
561
- echo ""
562
- echo -e "${BLUE}=== Progress: ${id} ===${NC}"
563
- echo ""
564
-
565
- # Basic info (like summary)
566
- echo -e "${CYAN}Status:${NC}"
567
- echo -e " State: ${status_str}"
568
- echo -e " Phase: ${phase_info}"
569
- echo -e " Elapsed: ${elapsed}"
570
- echo -e " Modified: ${modified} file(s)"
571
- echo ""
572
-
573
- # Recent task notifications
574
- echo -e "${CYAN}Recent Tasks:${NC}"
575
- local has_tasks=false
576
- while IFS='|' read -r status summary; do
577
- [ -z "$status" ] && continue
578
- has_tasks=true
579
- local icon
580
- case "$status" in
581
- completed) icon="${GREEN}✓${NC}" ;;
582
- failed) icon="${RED}✗${NC}" ;;
583
- async_launched) icon="${BLUE}▶${NC}" ;;
584
- *) icon="${YELLOW}○${NC}" ;;
585
- esac
586
- echo -e " ${icon} ${summary}"
587
- done < <(get_recent_tasks "$log_file" 5 "$current_phase")
588
-
589
- if [ "$has_tasks" = false ]; then
590
- echo -e " ${DIM}(no task notifications yet)${NC}"
591
- fi
592
- echo ""
593
-
594
- # Current activity
595
- echo -e "${CYAN}Current Activity:${NC}"
596
- local last_tool=$(get_last_tool "$log_file")
597
- if [ -n "$last_tool" ]; then
598
- echo -e " Tool: ${YELLOW}${last_tool}${NC}"
599
- else
600
- echo -e " ${DIM}(no recent tool calls)${NC}"
601
- fi
602
- echo ""
603
-
604
- # Last message
605
- echo -e "${CYAN}Last Message:${NC}"
606
- local last_msg=$(get_last_message "$log_file" 200)
607
- if [ -n "$last_msg" ]; then
608
- echo -e " \"${last_msg}...\""
609
- else
610
- echo -e " ${DIM}(no recent messages)${NC}"
611
- fi
612
- echo ""
613
- }
614
-
615
- cmd_detail() {
616
- if [ -z "$TARGET" ]; then
617
- echo "Usage: $0 --detail <task>"
618
- exit 1
619
- fi
620
-
621
- local agent=$(find_agent "$TARGET")
622
- if [ -z "$agent" ] || [ "$agent" = "null" ]; then
623
- echo "Agent not found: $TARGET"
624
- exit 1
625
- fi
626
-
627
- local id=$(echo "$agent" | jq -r '.id')
628
- local pid=$(echo "$agent" | jq -r '.pid')
629
- local worktree=$(echo "$agent" | jq -r '.worktree_path')
630
- local task_dir=$(echo "$agent" | jq -r '.task_dir')
631
- local started=$(echo "$agent" | jq -r '.started_at')
632
-
633
- # Check for session-id
634
- local session_id=""
635
- local session_id_file="${worktree}/.session-id"
636
- if [ -f "$session_id_file" ]; then
637
- session_id=$(cat "$session_id_file")
638
- fi
639
-
640
- echo -e "${BLUE}=== Agent Detail: $id ===${NC}"
641
- echo ""
642
- echo " ID: $id"
643
- echo " PID: $pid"
644
- echo " Session: ${session_id:-N/A}"
645
- echo " Worktree: $worktree"
646
- echo " Task Dir: $task_dir"
647
- echo " Started: $started"
648
- echo ""
649
-
650
- # Status
651
- if is_running "$pid"; then
652
- echo -e " Status: ${GREEN}Running${NC}"
653
- else
654
- echo -e " Status: ${RED}Stopped${NC}"
655
- if [ -n "$session_id" ]; then
656
- echo ""
657
- echo -e " ${YELLOW}Resume:${NC} cd ${worktree} && claude --resume ${session_id}"
658
- fi
659
- fi
660
-
661
- # Task info
662
- local task_json="$PROJECT_ROOT/$task_dir/task.json"
663
- if [ -f "$task_json" ]; then
664
- echo ""
665
- echo -e "${BLUE}=== Task Info ===${NC}"
666
- echo ""
667
- local status=$(jq -r '.status // "unknown"' "$task_json")
668
- local branch=$(jq -r '.branch // "N/A"' "$task_json")
669
- local base=$(jq -r '.base_branch // "N/A"' "$task_json")
670
- echo " Status: $status"
671
- echo " Branch: $branch"
672
- echo " Base Branch: $base"
673
- fi
674
-
675
- # Git changes
676
- if [ -d "$worktree" ]; then
677
- echo ""
678
- echo -e "${BLUE}=== Git Changes ===${NC}"
679
- echo ""
680
- cd "$worktree"
681
- local changes=$(git status --short 2>/dev/null | head -10)
682
- if [ -n "$changes" ]; then
683
- echo "$changes" | sed 's/^/ /'
684
- local total=$(git status --short 2>/dev/null | wc -l | tr -d ' ')
685
- if [ "$total" -gt 10 ]; then
686
- echo " ... and $((total - 10)) more"
687
- fi
688
- else
689
- echo " (no changes)"
690
- fi
691
- fi
692
-
693
- echo ""
694
- }
695
-
696
- cmd_watch() {
697
- if [ -z "$TARGET" ]; then
698
- echo "Usage: $0 --watch <task>"
699
- exit 1
700
- fi
701
-
702
- local agent=$(find_agent "$TARGET")
703
- if [ -z "$agent" ] || [ "$agent" = "null" ]; then
704
- echo "Agent not found: $TARGET"
705
- exit 1
706
- fi
707
-
708
- local worktree=$(echo "$agent" | jq -r '.worktree_path')
709
- local log_file="$worktree/.agent-log"
710
-
711
- if [ ! -f "$log_file" ]; then
712
- echo "Log file not found: $log_file"
713
- exit 1
714
- fi
715
-
716
- echo -e "${BLUE}Watching:${NC} $log_file"
717
- echo -e "${DIM}Press Ctrl+C to stop${NC}"
718
- echo ""
719
-
720
- tail -f "$log_file"
721
- }
722
-
723
- cmd_log() {
724
- if [ -z "$TARGET" ]; then
725
- echo "Usage: $0 --log <task>"
726
- exit 1
727
- fi
728
-
729
- local agent=$(find_agent "$TARGET")
730
- if [ -z "$agent" ] || [ "$agent" = "null" ]; then
731
- echo "Agent not found: $TARGET"
732
- exit 1
733
- fi
734
-
735
- local worktree=$(echo "$agent" | jq -r '.worktree_path')
736
- local log_file="$worktree/.agent-log"
737
-
738
- if [ ! -f "$log_file" ]; then
739
- echo "Log file not found: $log_file"
740
- exit 1
741
- fi
742
-
743
- echo -e "${BLUE}=== Recent Log: $TARGET ===${NC}"
744
- echo ""
745
-
746
- # Parse and format JSON log entries
747
- tail -50 "$log_file" | while IFS= read -r line; do
748
- local type=$(echo "$line" | jq -r '.type // empty' 2>/dev/null)
749
- [ -z "$type" ] && continue
750
-
751
- case "$type" in
752
- system)
753
- local subtype=$(echo "$line" | jq -r '.subtype // ""' 2>/dev/null)
754
- echo -e "${CYAN}[SYSTEM]${NC} $subtype"
755
- ;;
756
- user)
757
- local content=$(echo "$line" | jq -r '.message.content // empty' 2>/dev/null)
758
- if [ -n "$content" ] && [ "$content" != "null" ]; then
759
- echo -e "${GREEN}[USER]${NC} ${content:0:200}"
760
- fi
761
- ;;
762
- assistant)
763
- # Extract text or tool use
764
- local text=$(echo "$line" | jq -r '.message.content[0].text // empty' 2>/dev/null)
765
- local tool=$(echo "$line" | jq -r '.message.content[0].name // empty' 2>/dev/null)
766
-
767
- if [ -n "$text" ] && [ "$text" != "null" ]; then
768
- # Truncate long text
769
- local display="${text:0:300}"
770
- [ ${#text} -gt 300 ] && display="$display..."
771
- echo -e "${BLUE}[ASSISTANT]${NC} $display"
772
- elif [ -n "$tool" ] && [ "$tool" != "null" ]; then
773
- echo -e "${YELLOW}[TOOL]${NC} $tool"
774
- fi
775
- ;;
776
- result)
777
- local tool_name=$(echo "$line" | jq -r '.tool // "unknown"' 2>/dev/null)
778
- echo -e "${DIM}[RESULT]${NC} $tool_name completed"
779
- ;;
780
- esac
781
- done
782
- }
783
-
784
- cmd_registry() {
785
- AGENTS_DIR=$(get_agents_dir)
786
- REGISTRY_FILE="${AGENTS_DIR}/registry.json"
787
-
788
- echo -e "${BLUE}=== Agent Registry ===${NC}"
789
- echo ""
790
- echo "File: $REGISTRY_FILE"
791
- echo ""
792
-
793
- if [ -f "$REGISTRY_FILE" ]; then
794
- jq '.' "$REGISTRY_FILE"
795
- else
796
- echo "(registry not found)"
797
- fi
798
- }
799
-
800
- # =============================================================================
801
- # Main
802
- # =============================================================================
803
- case "$ACTION" in
804
- help)
805
- cmd_help
806
- ;;
807
- list)
808
- cmd_list
809
- ;;
810
- summary)
811
- cmd_summary
812
- ;;
813
- progress)
814
- cmd_progress
815
- ;;
816
- detail)
817
- cmd_detail
818
- ;;
819
- watch)
820
- cmd_watch
821
- ;;
822
- log)
823
- cmd_log
824
- ;;
825
- registry)
826
- cmd_registry
827
- ;;
828
- esac