@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,542 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Multi-Agent Pipeline: Status display and formatting.
4
-
5
- Provides:
6
- cmd_help - Show help text
7
- cmd_list - List worktrees and agents
8
- cmd_summary - Summary of all tasks with agent status
9
- cmd_detail - Detailed single-agent status
10
- cmd_registry - Dump agent registry
11
-
12
- Also exports shared utilities used by status_monitor:
13
- is_running, find_agent, get_registry_file, calc_elapsed, count_modified_files
14
- """
15
-
16
- from __future__ import annotations
17
-
18
- import json
19
- import os
20
- import subprocess
21
- from datetime import datetime
22
- from pathlib import Path
23
-
24
- from common.cli_adapter import get_cli_adapter
25
- from common.io import read_json
26
- from common.log import Colors
27
- from common.developer import ensure_developer
28
- from common.paths import (
29
- get_repo_root,
30
- get_tasks_dir,
31
- )
32
- from common.phase import get_phase_info
33
- from common.task_queue import format_task_stats, get_task_stats
34
- from common.tasks import iter_active_tasks
35
- from common.worktree import get_agents_dir
36
-
37
-
38
- # =============================================================================
39
- # Shared Utilities
40
- # =============================================================================
41
-
42
- def is_running(pid: int | str | None) -> bool:
43
- """Check if PID is running."""
44
- if not pid:
45
- return False
46
- try:
47
- pid_int = int(pid)
48
- os.kill(pid_int, 0)
49
- return True
50
- except (ProcessLookupError, ValueError, PermissionError, TypeError):
51
- return False
52
-
53
-
54
- def status_color(status: str) -> str:
55
- """Get status color."""
56
- colors = {
57
- "completed": Colors.GREEN,
58
- "in_progress": Colors.BLUE,
59
- "planning": Colors.YELLOW,
60
- }
61
- return colors.get(status, Colors.DIM)
62
-
63
-
64
- def get_registry_file(repo_root: Path) -> Path | None:
65
- """Get registry file path."""
66
- agents_dir = get_agents_dir(repo_root)
67
- if agents_dir:
68
- return agents_dir / "registry.json"
69
- return None
70
-
71
-
72
- def find_agent(search: str, repo_root: Path) -> dict | None:
73
- """Find agent by task name or ID."""
74
- registry_file = get_registry_file(repo_root)
75
- if not registry_file or not registry_file.is_file():
76
- return None
77
-
78
- data = read_json(registry_file)
79
- if not data:
80
- return None
81
-
82
- for agent in data.get("agents", []):
83
- # Exact ID match
84
- if agent.get("id") == search:
85
- return agent
86
- # Partial match on task_dir
87
- task_dir = agent.get("task_dir", "")
88
- if search in task_dir:
89
- return agent
90
-
91
- return None
92
-
93
-
94
- def calc_elapsed(started: str | None) -> str:
95
- """Calculate elapsed time from ISO timestamp."""
96
- if not started:
97
- return "N/A"
98
-
99
- try:
100
- # Parse ISO format
101
- if "+" in started:
102
- started = started.split("+")[0]
103
- if "T" in started:
104
- start_dt = datetime.fromisoformat(started)
105
- else:
106
- return "N/A"
107
-
108
- now = datetime.now()
109
- elapsed = (now - start_dt).total_seconds()
110
-
111
- if elapsed < 60:
112
- return f"{int(elapsed)}s"
113
- elif elapsed < 3600:
114
- mins = int(elapsed // 60)
115
- secs = int(elapsed % 60)
116
- return f"{mins}m {secs}s"
117
- else:
118
- hours = int(elapsed // 3600)
119
- mins = int((elapsed % 3600) // 60)
120
- return f"{hours}h {mins}m"
121
- except (ValueError, TypeError):
122
- return "N/A"
123
-
124
-
125
- def count_modified_files(worktree: str) -> int:
126
- """Count modified files in worktree."""
127
- if not Path(worktree).is_dir():
128
- return 0
129
-
130
- try:
131
- result = subprocess.run(
132
- ["git", "status", "--short"],
133
- cwd=worktree,
134
- capture_output=True,
135
- text=True,
136
- encoding="utf-8",
137
- errors="replace",
138
- )
139
- return len([line for line in result.stdout.splitlines() if line.strip()])
140
- except Exception:
141
- return 0
142
-
143
-
144
- # =============================================================================
145
- # Commands
146
- # =============================================================================
147
-
148
- def cmd_help() -> int:
149
- """Show help."""
150
- print("""Multi-Agent Pipeline: Status Monitor
151
-
152
- Usage:
153
- python3 status.py Show summary of all tasks
154
- python3 status.py -a <assignee> Filter tasks by assignee
155
- python3 status.py --list List all worktrees and agents
156
- python3 status.py --detail <task> Detailed task status
157
- python3 status.py --progress <task> Quick progress view with recent activity
158
- python3 status.py --watch <task> Watch agent log in real-time
159
- python3 status.py --log <task> Show recent log entries
160
- python3 status.py --registry Show agent registry
161
-
162
- Examples:
163
- python3 status.py -a taosu
164
- python3 status.py --detail my-task
165
- python3 status.py --progress my-task
166
- python3 status.py --watch 01-16-worktree-support
167
- python3 status.py --log worktree-support
168
- """)
169
- return 0
170
-
171
-
172
- def cmd_list(repo_root: Path) -> int:
173
- """List worktrees and agents."""
174
- print(f"{Colors.BLUE}=== Git Worktrees ==={Colors.NC}")
175
- print()
176
-
177
- subprocess.run(["git", "worktree", "list"], cwd=repo_root)
178
- print()
179
-
180
- print(f"{Colors.BLUE}=== Registered Agents ==={Colors.NC}")
181
- print()
182
-
183
- registry_file = get_registry_file(repo_root)
184
- if not registry_file or not registry_file.is_file():
185
- print(" (no registry found)")
186
- return 0
187
-
188
- data = read_json(registry_file)
189
- if not data or not data.get("agents"):
190
- print(" (no agents registered)")
191
- return 0
192
-
193
- for agent in data["agents"]:
194
- agent_id = agent.get("id", "?")
195
- pid = agent.get("pid")
196
- wt = agent.get("worktree_path", "?")
197
- started = agent.get("started_at", "?")
198
-
199
- if is_running(pid):
200
- status_icon = f"{Colors.GREEN}●{Colors.NC}"
201
- else:
202
- status_icon = f"{Colors.RED}○{Colors.NC}"
203
-
204
- print(f" {status_icon} {agent_id} (PID: {pid})")
205
- print(f" {Colors.DIM}Worktree: {wt}{Colors.NC}")
206
- print(f" {Colors.DIM}Started: {started}{Colors.NC}")
207
- print()
208
-
209
- return 0
210
-
211
-
212
- def cmd_summary(repo_root: Path, filter_assignee: str | None = None) -> int:
213
- """Show summary of all tasks."""
214
- # Import lazily to avoid circular import at module level
215
- from .status_monitor import get_last_tool, get_last_message
216
-
217
- ensure_developer(repo_root)
218
-
219
- tasks_dir = get_tasks_dir(repo_root)
220
- if not tasks_dir.is_dir():
221
- print("No tasks directory found")
222
- return 0
223
-
224
- registry_file = get_registry_file(repo_root)
225
-
226
- # Count running agents
227
- running_count = 0
228
- total_agents = 0
229
-
230
- if registry_file and registry_file.is_file():
231
- data = read_json(registry_file)
232
- if data:
233
- agents = data.get("agents", [])
234
- total_agents = len(agents)
235
- for agent in agents:
236
- if is_running(agent.get("pid")):
237
- running_count += 1
238
-
239
- # Task queue stats
240
- task_stats = get_task_stats(repo_root)
241
-
242
- print(f"{Colors.BLUE}=== Multi-Agent Status ==={Colors.NC}")
243
- print(
244
- f" Agents: {Colors.GREEN}{running_count}{Colors.NC} running / {total_agents} registered"
245
- )
246
- print(f" Tasks: {format_task_stats(task_stats)}")
247
- print()
248
-
249
- # Process tasks
250
- running_tasks = []
251
- stopped_tasks = []
252
- regular_tasks = []
253
-
254
- registry_data = (
255
- read_json(registry_file)
256
- if registry_file and registry_file.is_file()
257
- else None
258
- )
259
-
260
- for t in iter_active_tasks(tasks_dir):
261
- name = t.dir_name
262
- status = t.status
263
- assignee = t.assignee or "unassigned"
264
- priority = t.priority
265
-
266
- # Filter by assignee
267
- if filter_assignee and assignee != filter_assignee:
268
- continue
269
-
270
- # Check agent status
271
- agent_info = None
272
- if registry_data:
273
- for agent in registry_data.get("agents", []):
274
- if name in agent.get("task_dir", ""):
275
- agent_info = agent
276
- break
277
-
278
- if agent_info:
279
- pid = agent_info.get("pid")
280
- worktree = agent_info.get("worktree_path", "")
281
- started = agent_info.get("started_at")
282
- agent_platform = agent_info.get("platform", "claude")
283
-
284
- if is_running(pid):
285
- # Running agent
286
- task_dir_rel = agent_info.get("task_dir", "")
287
- worktree_task_json = Path(worktree) / task_dir_rel / "task.json"
288
- phase_source = t.directory / "task.json"
289
- if worktree_task_json.is_file():
290
- phase_source = worktree_task_json
291
-
292
- phase_info_str = get_phase_info(phase_source)
293
- elapsed = calc_elapsed(started)
294
- modified = count_modified_files(worktree)
295
-
296
- worktree_data = read_json(phase_source)
297
- branch = worktree_data.get("branch", "N/A") if worktree_data else "N/A"
298
-
299
- log_file = Path(worktree) / ".agent-log"
300
- last_tool = get_last_tool(log_file, platform=agent_platform)
301
-
302
- running_tasks.append(
303
- {
304
- "name": name,
305
- "priority": priority,
306
- "assignee": assignee,
307
- "phase_info": phase_info_str,
308
- "elapsed": elapsed,
309
- "branch": branch,
310
- "modified": modified,
311
- "last_tool": last_tool,
312
- "pid": pid,
313
- }
314
- )
315
- else:
316
- # Stopped agent
317
- task_dir_rel = agent_info.get("task_dir", "")
318
- worktree_task_json = Path(worktree) / task_dir_rel / "task.json"
319
- worktree_status = "unknown"
320
-
321
- if worktree_task_json.is_file():
322
- wt_data = read_json(worktree_task_json)
323
- if wt_data:
324
- worktree_status = wt_data.get("status", "unknown")
325
-
326
- session_id_file = Path(worktree) / ".session-id"
327
- log_file = Path(worktree) / ".agent-log"
328
-
329
- stopped_tasks.append(
330
- {
331
- "name": name,
332
- "worktree": worktree,
333
- "status": worktree_status,
334
- "session_id_file": session_id_file,
335
- "log_file": log_file,
336
- "platform": agent_info.get("platform", "claude"),
337
- }
338
- )
339
- else:
340
- # Regular task
341
- regular_tasks.append(
342
- {
343
- "name": name,
344
- "status": status,
345
- "priority": priority,
346
- "assignee": assignee,
347
- }
348
- )
349
-
350
- # Output running agents
351
- if running_tasks:
352
- print(f"{Colors.CYAN}Running Agents:{Colors.NC}")
353
- for t in running_tasks:
354
- priority_color = (
355
- Colors.RED
356
- if t["priority"] == "P0"
357
- else (Colors.YELLOW if t["priority"] == "P1" else Colors.BLUE)
358
- )
359
- print(
360
- f"{Colors.GREEN}▶{Colors.NC} {Colors.CYAN}{t['name']}{Colors.NC} {Colors.GREEN}[running]{Colors.NC} {priority_color}[{t['priority']}]{Colors.NC} @{t['assignee']}"
361
- )
362
- print(f" Phase: {t['phase_info']}")
363
- print(f" Elapsed: {t['elapsed']}")
364
- print(f" Branch: {Colors.DIM}{t['branch']}{Colors.NC}")
365
- print(f" Modified: {t['modified']} file(s)")
366
- if t["last_tool"]:
367
- print(f" Activity: {Colors.YELLOW}{t['last_tool']}{Colors.NC}")
368
- print(f" PID: {Colors.DIM}{t['pid']}{Colors.NC}")
369
- print()
370
-
371
- # Output stopped agents
372
- if stopped_tasks:
373
- print(f"{Colors.RED}Stopped Agents:{Colors.NC}")
374
- for t in stopped_tasks:
375
- if t["status"] == "completed":
376
- print(
377
- f"{Colors.GREEN}✓{Colors.NC} {t['name']} {Colors.GREEN}[completed]{Colors.NC}"
378
- )
379
- else:
380
- if t["session_id_file"].is_file():
381
- session_id = (
382
- t["session_id_file"].read_text(encoding="utf-8").strip()
383
- )
384
- last_msg = get_last_message(t["log_file"], 150, platform=t.get("platform", "claude"))
385
- print(
386
- f"{Colors.RED}○{Colors.NC} {t['name']} {Colors.RED}[stopped]{Colors.NC}"
387
- )
388
- if last_msg:
389
- print(f'{Colors.DIM}"{last_msg}"{Colors.NC}')
390
- # Use CLI adapter for platform-specific resume command
391
- adapter = get_cli_adapter(t.get("platform", "claude"))
392
- resume_cmd = adapter.get_resume_command_str(session_id, cwd=t["worktree"])
393
- print(f"{Colors.YELLOW}{resume_cmd}{Colors.NC}")
394
- else:
395
- print(
396
- f"{Colors.RED}○{Colors.NC} {t['name']} {Colors.RED}[stopped]{Colors.NC} {Colors.DIM}(no session-id){Colors.NC}"
397
- )
398
- print()
399
-
400
- # Separator
401
- if (running_tasks or stopped_tasks) and regular_tasks:
402
- print(f"{Colors.DIM}───────────────────────────────────────{Colors.NC}")
403
- print()
404
-
405
- # Output regular tasks grouped by assignee
406
- if regular_tasks:
407
- # Sort by assignee, priority, status
408
- regular_tasks.sort(
409
- key=lambda x: (
410
- x["assignee"],
411
- {"P0": 0, "P1": 1, "P2": 2, "P3": 3}.get(x["priority"], 2),
412
- {"in_progress": 0, "planning": 1, "completed": 2}.get(x["status"], 1),
413
- )
414
- )
415
-
416
- current_assignee = None
417
- for t in regular_tasks:
418
- if t["assignee"] != current_assignee:
419
- if current_assignee is not None:
420
- print()
421
- print(f"{Colors.CYAN}@{t['assignee']}:{Colors.NC}")
422
- current_assignee = t["assignee"]
423
-
424
- color = status_color(t["status"])
425
- priority_color = (
426
- Colors.RED
427
- if t["priority"] == "P0"
428
- else (Colors.YELLOW if t["priority"] == "P1" else Colors.BLUE)
429
- )
430
- print(
431
- f" {color}●{Colors.NC} {t['name']} ({t['status']}) {priority_color}[{t['priority']}]{Colors.NC}"
432
- )
433
-
434
- if running_tasks:
435
- print()
436
- print(f"{Colors.DIM}─────────────────────────────────────{Colors.NC}")
437
- print(f"{Colors.DIM}Use --progress <name> for quick activity view{Colors.NC}")
438
- print(f"{Colors.DIM}Use --detail <name> for more info{Colors.NC}")
439
-
440
- print()
441
- return 0
442
-
443
-
444
- def cmd_detail(target: str, repo_root: Path) -> int:
445
- """Show detailed task status."""
446
- agent = find_agent(target, repo_root)
447
- if not agent:
448
- print(f"Agent not found: {target}")
449
- return 1
450
-
451
- agent_id = agent.get("id", "?")
452
- pid = agent.get("pid")
453
- worktree = agent.get("worktree_path", "?")
454
- task_dir = agent.get("task_dir", "?")
455
- started = agent.get("started_at", "?")
456
- platform = agent.get("platform", "claude")
457
-
458
- # Check for session-id
459
- session_id = ""
460
- session_id_file = Path(worktree) / ".session-id"
461
- if session_id_file.is_file():
462
- session_id = session_id_file.read_text(encoding="utf-8").strip()
463
-
464
- print(f"{Colors.BLUE}=== Agent Detail: {agent_id} ==={Colors.NC}")
465
- print()
466
- print(f" ID: {agent_id}")
467
- print(f" PID: {pid}")
468
- print(f" Session: {session_id or 'N/A'}")
469
- print(f" Worktree: {worktree}")
470
- print(f" Task Dir: {task_dir}")
471
- print(f" Started: {started}")
472
- print()
473
-
474
- # Status
475
- if is_running(pid):
476
- print(f" Status: {Colors.GREEN}Running{Colors.NC}")
477
- else:
478
- print(f" Status: {Colors.RED}Stopped{Colors.NC}")
479
- if session_id:
480
- print()
481
- # Use CLI adapter for platform-specific resume command
482
- adapter = get_cli_adapter(platform)
483
- resume_cmd = adapter.get_resume_command_str(session_id, cwd=worktree)
484
- print(f" {Colors.YELLOW}Resume:{Colors.NC} {resume_cmd}")
485
-
486
- # Task info
487
- task_json = repo_root / task_dir / "task.json"
488
- if task_json.is_file():
489
- print()
490
- print(f"{Colors.BLUE}=== Task Info ==={Colors.NC}")
491
- print()
492
- data = read_json(task_json)
493
- if data:
494
- print(f" Status: {data.get('status', 'unknown')}")
495
- print(f" Branch: {data.get('branch', 'N/A')}")
496
- print(f" Base Branch: {data.get('base_branch', 'N/A')}")
497
-
498
- # Git changes
499
- if Path(worktree).is_dir():
500
- print()
501
- print(f"{Colors.BLUE}=== Git Changes ==={Colors.NC}")
502
- print()
503
-
504
- result = subprocess.run(
505
- ["git", "status", "--short"],
506
- cwd=worktree,
507
- capture_output=True,
508
- text=True,
509
- encoding="utf-8",
510
- errors="replace",
511
- )
512
- changes = result.stdout.strip()
513
- if changes:
514
- for line in changes.splitlines()[:10]:
515
- print(f" {line}")
516
- total = len(changes.splitlines())
517
- if total > 10:
518
- print(f" ... and {total - 10} more")
519
- else:
520
- print(" (no changes)")
521
-
522
- print()
523
- return 0
524
-
525
-
526
- def cmd_registry(repo_root: Path) -> int:
527
- """Show agent registry."""
528
- registry_file = get_registry_file(repo_root)
529
-
530
- print(f"{Colors.BLUE}=== Agent Registry ==={Colors.NC}")
531
- print()
532
- print(f"File: {registry_file}")
533
- print()
534
-
535
- if registry_file and registry_file.is_file():
536
- data = read_json(registry_file)
537
- if data:
538
- print(json.dumps(data, indent=2))
539
- else:
540
- print("(registry not found)")
541
-
542
- return 0