@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) 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 +0 -1
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +2 -4
  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 +83 -22
  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 +142 -98
  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 +3 -28
  56. package/dist/configurators/opencode.d.ts.map +1 -1
  57. package/dist/configurators/opencode.js +23 -48
  58. package/dist/configurators/opencode.js.map +1 -1
  59. package/dist/configurators/qoder.d.ts +6 -4
  60. package/dist/configurators/qoder.d.ts.map +1 -1
  61. package/dist/configurators/qoder.js +20 -47
  62. package/dist/configurators/qoder.js.map +1 -1
  63. package/dist/configurators/shared.d.ts +66 -3
  64. package/dist/configurators/shared.d.ts.map +1 -1
  65. package/dist/configurators/shared.js +251 -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 +1644 -0
  77. package/dist/templates/claude/agents/check.md +2 -29
  78. package/dist/templates/claude/agents/research.md +70 -52
  79. package/dist/templates/claude/index.d.ts +5 -37
  80. package/dist/templates/claude/index.d.ts.map +1 -1
  81. package/dist/templates/claude/index.js +3 -42
  82. package/dist/templates/claude/index.js.map +1 -1
  83. package/dist/templates/claude/settings.json +3 -4
  84. package/dist/templates/{iflow → codebuddy}/agents/check.md +3 -30
  85. package/dist/templates/{iflow → codebuddy}/agents/implement.md +1 -1
  86. package/dist/templates/codebuddy/agents/research.md +138 -0
  87. package/dist/templates/codebuddy/index.d.ts +6 -16
  88. package/dist/templates/codebuddy/index.d.ts.map +1 -1
  89. package/dist/templates/codebuddy/index.js +6 -36
  90. package/dist/templates/codebuddy/index.js.map +1 -1
  91. package/dist/templates/codebuddy/settings.json +59 -0
  92. package/dist/templates/codex/agents/research.toml +50 -16
  93. package/dist/templates/codex/config.toml +10 -0
  94. package/dist/templates/codex/hooks/session-start.py +65 -29
  95. package/dist/templates/codex/hooks.json +11 -0
  96. package/dist/templates/codex/index.d.ts +0 -1
  97. package/dist/templates/codex/index.d.ts.map +1 -1
  98. package/dist/templates/codex/index.js +1 -8
  99. package/dist/templates/codex/index.js.map +1 -1
  100. package/dist/templates/common/commands/continue.md +51 -0
  101. package/dist/templates/common/commands/finish-work.md +32 -0
  102. package/dist/templates/common/commands/start.md +56 -0
  103. package/dist/templates/common/index.d.ts +28 -0
  104. package/dist/templates/common/index.d.ts.map +1 -0
  105. package/dist/templates/common/index.js +55 -0
  106. package/dist/templates/common/index.js.map +1 -0
  107. package/dist/templates/{codebuddy/commands/trellis → common/skills}/brainstorm.md +4 -4
  108. package/dist/templates/{opencode/commands/trellis → common/skills}/break-loop.md +4 -4
  109. package/dist/templates/common/skills/check.md +87 -0
  110. package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
  111. package/dist/templates/copilot/hooks/session-start.py +65 -29
  112. package/dist/templates/copilot/hooks.json +8 -0
  113. package/dist/templates/cursor/agents/check.md +95 -0
  114. package/dist/templates/cursor/agents/implement.md +95 -0
  115. package/dist/templates/cursor/agents/research.md +138 -0
  116. package/dist/templates/cursor/hooks.json +24 -0
  117. package/dist/templates/cursor/index.d.ts +6 -17
  118. package/dist/templates/cursor/index.d.ts.map +1 -1
  119. package/dist/templates/cursor/index.js +6 -37
  120. package/dist/templates/cursor/index.js.map +1 -1
  121. package/dist/templates/droid/droids/check.md +95 -0
  122. package/dist/templates/droid/droids/implement.md +95 -0
  123. package/dist/templates/droid/droids/research.md +138 -0
  124. package/dist/templates/droid/index.d.ts +7 -19
  125. package/dist/templates/droid/index.d.ts.map +1 -1
  126. package/dist/templates/droid/index.js +7 -39
  127. package/dist/templates/droid/index.js.map +1 -1
  128. package/dist/templates/droid/settings.json +59 -0
  129. package/dist/templates/extract.d.ts +7 -193
  130. package/dist/templates/extract.d.ts.map +1 -1
  131. package/dist/templates/extract.js +7 -310
  132. package/dist/templates/extract.js.map +1 -1
  133. package/dist/templates/gemini/agents/check.md +95 -0
  134. package/dist/templates/gemini/agents/implement.md +95 -0
  135. package/dist/templates/gemini/agents/research.md +138 -0
  136. package/dist/templates/gemini/index.d.ts +6 -14
  137. package/dist/templates/gemini/index.d.ts.map +1 -1
  138. package/dist/templates/gemini/index.js +6 -37
  139. package/dist/templates/gemini/index.js.map +1 -1
  140. package/dist/templates/gemini/settings.json +28 -0
  141. package/dist/templates/kiro/agents/check.json +13 -0
  142. package/dist/templates/kiro/agents/implement.json +13 -0
  143. package/dist/templates/kiro/agents/research.json +21 -0
  144. package/dist/templates/kiro/index.d.ts +11 -11
  145. package/dist/templates/kiro/index.d.ts.map +1 -1
  146. package/dist/templates/kiro/index.js +11 -33
  147. package/dist/templates/kiro/index.js.map +1 -1
  148. package/dist/templates/opencode/agents/check.md +3 -30
  149. package/dist/templates/opencode/agents/implement.md +1 -1
  150. package/dist/templates/opencode/agents/research.md +1 -2
  151. package/dist/templates/opencode/plugins/inject-subagent-context.js +9 -183
  152. package/dist/templates/opencode/plugins/inject-workflow-state.js +160 -0
  153. package/dist/templates/opencode/plugins/session-start.js +71 -32
  154. package/dist/templates/qoder/agents/check.md +95 -0
  155. package/dist/templates/qoder/agents/implement.md +95 -0
  156. package/dist/templates/qoder/agents/research.md +138 -0
  157. package/dist/templates/qoder/index.d.ts +7 -10
  158. package/dist/templates/qoder/index.d.ts.map +1 -1
  159. package/dist/templates/qoder/index.js +7 -32
  160. package/dist/templates/qoder/index.js.map +1 -1
  161. package/dist/templates/qoder/settings.json +47 -0
  162. package/dist/templates/shared-hooks/index.d.ts +19 -0
  163. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  164. package/dist/templates/shared-hooks/index.js +30 -0
  165. package/dist/templates/shared-hooks/index.js.map +1 -0
  166. package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +74 -263
  167. package/dist/templates/shared-hooks/inject-workflow-state.py +231 -0
  168. package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +162 -55
  169. package/dist/templates/template-utils.d.ts +26 -0
  170. package/dist/templates/template-utils.d.ts.map +1 -0
  171. package/dist/templates/template-utils.js +60 -0
  172. package/dist/templates/template-utils.js.map +1 -0
  173. package/dist/templates/trellis/index.d.ts +1 -14
  174. package/dist/templates/trellis/index.d.ts.map +1 -1
  175. package/dist/templates/trellis/index.js +2 -27
  176. package/dist/templates/trellis/index.js.map +1 -1
  177. package/dist/templates/trellis/scripts/common/cli_adapter.py +2 -2
  178. package/dist/templates/trellis/scripts/common/config.py +126 -1
  179. package/dist/templates/trellis/scripts/common/git_context.py +25 -2
  180. package/dist/templates/trellis/scripts/common/task_context.py +3 -23
  181. package/dist/templates/trellis/scripts/common/task_store.py +0 -12
  182. package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
  183. package/dist/templates/trellis/scripts/task.py +6 -35
  184. package/dist/templates/trellis/workflow.md +274 -297
  185. package/dist/types/ai-tools.d.ts +21 -3
  186. package/dist/types/ai-tools.d.ts.map +1 -1
  187. package/dist/types/ai-tools.js +106 -15
  188. package/dist/types/ai-tools.js.map +1 -1
  189. package/dist/types/migration.d.ts +8 -1
  190. package/dist/types/migration.d.ts.map +1 -1
  191. package/package.json +3 -2
  192. package/dist/configurators/iflow.d.ts +0 -33
  193. package/dist/configurators/iflow.d.ts.map +0 -1
  194. package/dist/configurators/iflow.js +0 -99
  195. package/dist/configurators/iflow.js.map +0 -1
  196. package/dist/templates/antigravity/index.d.ts +0 -12
  197. package/dist/templates/antigravity/index.d.ts.map +0 -1
  198. package/dist/templates/antigravity/index.js +0 -29
  199. package/dist/templates/antigravity/index.js.map +0 -1
  200. package/dist/templates/claude/agents/debug.md +0 -106
  201. package/dist/templates/claude/agents/dispatch.md +0 -213
  202. package/dist/templates/claude/agents/plan.md +0 -396
  203. package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
  204. package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
  205. package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
  206. package/dist/templates/claude/commands/trellis/check.md +0 -25
  207. package/dist/templates/claude/commands/trellis/create-command.md +0 -154
  208. package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
  209. package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
  210. package/dist/templates/claude/commands/trellis/onboard.md +0 -358
  211. package/dist/templates/claude/commands/trellis/parallel.md +0 -192
  212. package/dist/templates/claude/commands/trellis/record-session.md +0 -62
  213. package/dist/templates/claude/commands/trellis/start.md +0 -393
  214. package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
  215. package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
  216. package/dist/templates/claude/hooks/ralph-loop.py +0 -396
  217. package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
  218. package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
  219. package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
  220. package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
  221. package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
  222. package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
  223. package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
  224. package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
  225. package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
  226. package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
  227. package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
  228. package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
  229. package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
  230. package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
  231. package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
  232. package/dist/templates/cursor/commands/trellis-check.md +0 -25
  233. package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
  234. package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
  235. package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
  236. package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
  237. package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
  238. package/dist/templates/cursor/commands/trellis-start.md +0 -373
  239. package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
  240. package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
  241. package/dist/templates/droid/commands/trellis/brainstorm.md +0 -491
  242. package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
  243. package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
  244. package/dist/templates/droid/commands/trellis/check.md +0 -29
  245. package/dist/templates/droid/commands/trellis/create-command.md +0 -158
  246. package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
  247. package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
  248. package/dist/templates/droid/commands/trellis/onboard.md +0 -362
  249. package/dist/templates/droid/commands/trellis/record-session.md +0 -66
  250. package/dist/templates/droid/commands/trellis/start.md +0 -377
  251. package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
  252. package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
  253. package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
  254. package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
  255. package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
  256. package/dist/templates/gemini/commands/trellis/check.toml +0 -29
  257. package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
  258. package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
  259. package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
  260. package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
  261. package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
  262. package/dist/templates/gemini/commands/trellis/start.toml +0 -354
  263. package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
  264. package/dist/templates/iflow/agents/debug.md +0 -106
  265. package/dist/templates/iflow/agents/dispatch.md +0 -213
  266. package/dist/templates/iflow/agents/plan.md +0 -396
  267. package/dist/templates/iflow/agents/research.md +0 -120
  268. package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
  269. package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
  270. package/dist/templates/iflow/commands/trellis/break-loop.md +0 -125
  271. package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
  272. package/dist/templates/iflow/commands/trellis/check.md +0 -25
  273. package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
  274. package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
  275. package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
  276. package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
  277. package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
  278. package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
  279. package/dist/templates/iflow/commands/trellis/start.md +0 -393
  280. package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
  281. package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
  282. package/dist/templates/iflow/hooks/session-start.py +0 -403
  283. package/dist/templates/iflow/index.d.ts +0 -54
  284. package/dist/templates/iflow/index.d.ts.map +0 -1
  285. package/dist/templates/iflow/index.js +0 -85
  286. package/dist/templates/iflow/index.js.map +0 -1
  287. package/dist/templates/iflow/settings.json +0 -60
  288. package/dist/templates/kilo/index.d.ts +0 -16
  289. package/dist/templates/kilo/index.d.ts.map +0 -1
  290. package/dist/templates/kilo/index.js +0 -39
  291. package/dist/templates/kilo/index.js.map +0 -1
  292. package/dist/templates/kilo/workflows/before-dev.md +0 -29
  293. package/dist/templates/kilo/workflows/brainstorm.md +0 -487
  294. package/dist/templates/kilo/workflows/break-loop.md +0 -125
  295. package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
  296. package/dist/templates/kilo/workflows/check.md +0 -25
  297. package/dist/templates/kilo/workflows/create-command.md +0 -152
  298. package/dist/templates/kilo/workflows/finish-work.md +0 -129
  299. package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
  300. package/dist/templates/kilo/workflows/onboard.md +0 -358
  301. package/dist/templates/kilo/workflows/parallel.md +0 -193
  302. package/dist/templates/kilo/workflows/record-session.md +0 -62
  303. package/dist/templates/kilo/workflows/start.md +0 -387
  304. package/dist/templates/kilo/workflows/update-spec.md +0 -285
  305. package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
  306. package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
  307. package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
  308. package/dist/templates/kiro/skills/check/SKILL.md +0 -30
  309. package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
  310. package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
  311. package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
  312. package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
  313. package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
  314. package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
  315. package/dist/templates/kiro/skills/start/SKILL.md +0 -351
  316. package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
  317. package/dist/templates/opencode/agents/debug.md +0 -129
  318. package/dist/templates/opencode/agents/dispatch.md +0 -223
  319. package/dist/templates/opencode/agents/trellis-plan.md +0 -427
  320. package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
  321. package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
  322. package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
  323. package/dist/templates/opencode/commands/trellis/check.md +0 -25
  324. package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
  325. package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
  326. package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
  327. package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
  328. package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
  329. package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
  330. package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
  331. package/dist/templates/opencode/commands/trellis/start.md +0 -351
  332. package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
  333. package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
  334. package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
  335. package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
  336. package/dist/templates/qoder/skills/check/SKILL.md +0 -30
  337. package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
  338. package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
  339. package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
  340. package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
  341. package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
  342. package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
  343. package/dist/templates/qoder/skills/start/SKILL.md +0 -388
  344. package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
  345. package/dist/templates/trellis/scripts/common/phase.py +0 -254
  346. package/dist/templates/trellis/scripts/common/registry.py +0 -335
  347. package/dist/templates/trellis/scripts/common/worktree.py +0 -305
  348. package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
  349. package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
  350. package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
  351. package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
  352. package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
  353. package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
  354. package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
  355. package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
  356. package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
  357. package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
  358. package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
  359. package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
  360. package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
  361. package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
  362. package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
  363. package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
  364. package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
  365. package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
  366. package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
  367. package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
  368. package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
  369. package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
  370. package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
  371. package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
  372. package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
  373. package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
  374. package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
  375. package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
  376. package/dist/templates/trellis/worktree.yaml +0 -47
  377. package/dist/templates/windsurf/index.d.ts +0 -21
  378. package/dist/templates/windsurf/index.d.ts.map +0 -1
  379. package/dist/templates/windsurf/index.js +0 -44
  380. package/dist/templates/windsurf/index.js.map +0 -1
  381. package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
  382. package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
  383. package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
  384. package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
  385. package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
  386. package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
  387. package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
  388. package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
  389. package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
  390. package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
  391. package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
  392. package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
  393. /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
  394. /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
@@ -1,620 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Multi-Agent Pipeline: Create PR.
4
-
5
- Usage:
6
- python3 create_pr.py [task-dir] [--dry-run]
7
-
8
- This script:
9
- 1. Handles submodule changes (commit, push, PR) if any submodules are configured
10
- 2. Stages and commits all main-repo changes (excluding workspace/)
11
- 3. Pushes to origin
12
- 4. Creates a Draft PR using `gh pr create`
13
- 5. Updates task.json with status="completed", pr_url, submodule_prs, and current_phase
14
-
15
- Note: This is the only action that performs git commit, as it's the final
16
- step after all implementation and checks are complete.
17
- """
18
-
19
- from __future__ import annotations
20
-
21
- import argparse
22
- import subprocess
23
- import sys
24
- from pathlib import Path
25
-
26
- import _bootstrap # noqa: F401 — adds parent scripts/ dir to sys.path
27
-
28
- from common.config import get_submodule_packages
29
- from common.git import run_git
30
- from common.io import read_json, write_json
31
- from common.log import Colors
32
- from common.paths import (
33
- DIR_WORKFLOW,
34
- FILE_TASK_JSON,
35
- get_current_task,
36
- get_repo_root,
37
- )
38
- from common.phase import get_phase_for_action
39
-
40
- # Colors, read_json, write_json
41
- # are now imported from common.log and common.io above.
42
-
43
-
44
- # =============================================================================
45
- # Submodule PR Helpers
46
- # =============================================================================
47
-
48
- # Warning message prepended to main PR body when submodule PRs exist
49
- _SUBMODULE_SQUASH_WARNING_MARKER = (
50
- "Merge submodule PR(s) first. If squash-merged, update submodule ref after merge."
51
- )
52
-
53
-
54
- def _get_submodule_default_branch(submodule_abs: Path) -> str:
55
- """Get the default branch of a submodule repository.
56
-
57
- Uses `git symbolic-ref refs/remotes/origin/HEAD` for portability
58
- (no grep, no English-dependent output).
59
-
60
- Returns:
61
- Default branch name (e.g. "main"), falls back to "main" on failure.
62
- """
63
- ret, out, _ = run_git(
64
- ["symbolic-ref", "refs/remotes/origin/HEAD"], cwd=submodule_abs
65
- )
66
- if ret == 0 and out.strip():
67
- # Output: "refs/remotes/origin/main" -> "main"
68
- ref = out.strip()
69
- prefix = "refs/remotes/origin/"
70
- if ref.startswith(prefix):
71
- return ref[len(prefix):]
72
- return "main"
73
-
74
-
75
- def _process_submodule_changes(
76
- repo_root: Path,
77
- current_branch: str,
78
- commit_prefix: str,
79
- scope: str,
80
- task_name: str,
81
- task_data: dict,
82
- task_json: Path,
83
- dry_run: bool,
84
- ) -> tuple[dict[str, str], list[str], bool]:
85
- """Process submodule changes: commit, push, create PRs.
86
-
87
- Returns:
88
- Tuple of (submodule_prs dict, changed_submodule_paths list, success bool).
89
- On failure, submodule_prs contains URLs persisted so far.
90
- """
91
- submodule_packages = get_submodule_packages(repo_root)
92
- if not submodule_packages:
93
- return {}, [], True
94
-
95
- # Load existing submodule_prs for incremental merge
96
- raw_prs = task_data.get("submodule_prs")
97
- submodule_prs: dict[str, str] = dict(raw_prs) if isinstance(raw_prs, dict) else {}
98
-
99
- # Detect which submodules have changes
100
- changed: list[tuple[str, str]] = [] # (name, path)
101
- for pkg_name, pkg_path in submodule_packages.items():
102
- sub_abs = repo_root / pkg_path
103
- if not sub_abs.is_dir():
104
- continue
105
-
106
- ret, status_out, _ = run_git(
107
- ["status", "--porcelain"], cwd=sub_abs
108
- )
109
- if ret != 0:
110
- continue
111
- if status_out.strip():
112
- changed.append((pkg_name, pkg_path))
113
-
114
- if not changed:
115
- return submodule_prs, [], True
116
-
117
- # Determine submodule branch name: <repo-dir-name>/<main-branch>
118
- repo_dir_name = repo_root.name
119
- sub_branch = f"{repo_dir_name}/{current_branch}"
120
-
121
- print(f"\n{Colors.BLUE}=== Submodule Changes Detected ==={Colors.NC}")
122
- for pkg_name, pkg_path in changed:
123
- print(f" - {pkg_name} ({pkg_path})")
124
- print()
125
-
126
- changed_paths: list[str] = []
127
-
128
- for pkg_name, pkg_path in changed:
129
- sub_abs = repo_root / pkg_path
130
- sub_base = _get_submodule_default_branch(sub_abs)
131
- sub_commit_msg = f"{commit_prefix}({scope}): {task_name}"
132
-
133
- print(f"{Colors.YELLOW}Processing submodule: {pkg_name} ({pkg_path}){Colors.NC}")
134
- print(f" Submodule base branch: {sub_base}")
135
- print(f" Submodule branch: {sub_branch}")
136
-
137
- if dry_run:
138
- print(f" [DRY-RUN] Would checkout branch: {sub_branch}")
139
- print(f" [DRY-RUN] Would commit: {sub_commit_msg}")
140
- print(f" [DRY-RUN] Would push to: origin/{sub_branch}")
141
- print(f" [DRY-RUN] Would create PR: {sub_branch} -> {sub_base}")
142
- submodule_prs[pkg_name] = "https://github.com/example/repo/pull/DRY-RUN"
143
- changed_paths.append(pkg_path)
144
- continue
145
-
146
- # --- Checkout or create branch in submodule ---
147
- ret, _, _ = run_git(
148
- ["show-ref", "--verify", "--quiet", f"refs/heads/{sub_branch}"],
149
- cwd=sub_abs,
150
- )
151
- if ret == 0:
152
- # Branch exists, checkout
153
- ret, _, err = run_git(
154
- ["checkout", sub_branch], cwd=sub_abs
155
- )
156
- if ret != 0:
157
- print(f"{Colors.RED}Failed to checkout branch in {pkg_name}: {err}{Colors.NC}")
158
- return submodule_prs, changed_paths, False
159
-
160
- # Check for divergence (reuse risk)
161
- ret_anc, _, _ = run_git(
162
- ["merge-base", "--is-ancestor", sub_base, sub_branch],
163
- cwd=sub_abs,
164
- )
165
- if ret_anc != 0:
166
- print(
167
- f" {Colors.YELLOW}[WARN] submodule branch has diverged history, "
168
- f"consider recreating{Colors.NC}"
169
- )
170
- else:
171
- # Create new branch
172
- ret, _, err = run_git(
173
- ["checkout", "-b", sub_branch], cwd=sub_abs
174
- )
175
- if ret != 0:
176
- print(f"{Colors.RED}Failed to create branch in {pkg_name}: {err}{Colors.NC}")
177
- return submodule_prs, changed_paths, False
178
-
179
- # --- Stage and commit ---
180
- run_git(["add", "-A"], cwd=sub_abs)
181
-
182
- ret, _, _ = run_git(["diff", "--cached", "--quiet"], cwd=sub_abs)
183
- if ret != 0:
184
- # Has staged changes
185
- ret, _, err = run_git(
186
- ["commit", "-m", sub_commit_msg], cwd=sub_abs
187
- )
188
- if ret != 0:
189
- print(f"{Colors.RED}Failed to commit in {pkg_name}: {err}{Colors.NC}")
190
- return submodule_prs, changed_paths, False
191
- print(f" {Colors.GREEN}Committed in {pkg_name}{Colors.NC}")
192
- else:
193
- print(f" No staged changes in {pkg_name}, skipping commit")
194
-
195
- # --- Push ---
196
- ret, _, err = run_git(
197
- ["push", "-u", "origin", sub_branch], cwd=sub_abs
198
- )
199
- if ret != 0:
200
- print(f"{Colors.RED}Failed to push {pkg_name}: {err}{Colors.NC}")
201
- return submodule_prs, changed_paths, False
202
- print(f" {Colors.GREEN}Pushed {pkg_name} to origin/{sub_branch}{Colors.NC}")
203
-
204
- # --- Create or reuse PR ---
205
- result = subprocess.run(
206
- [
207
- "gh", "pr", "list",
208
- "--head", sub_branch,
209
- "--base", sub_base,
210
- "--json", "url",
211
- "--jq", ".[0].url",
212
- ],
213
- capture_output=True,
214
- text=True,
215
- encoding="utf-8",
216
- errors="replace",
217
- cwd=str(sub_abs),
218
- )
219
- existing_sub_pr = result.stdout.strip()
220
-
221
- if existing_sub_pr:
222
- print(f" {Colors.YELLOW}PR already exists: {existing_sub_pr}{Colors.NC}")
223
- sub_pr_url = existing_sub_pr
224
- else:
225
- result = subprocess.run(
226
- [
227
- "gh", "pr", "create",
228
- "--draft",
229
- "--base", sub_base,
230
- "--title", f"{commit_prefix}({scope}): {task_name} [{pkg_name}]",
231
- "--body", f"Submodule changes for {task_name}",
232
- ],
233
- capture_output=True,
234
- text=True,
235
- encoding="utf-8",
236
- errors="replace",
237
- cwd=str(sub_abs),
238
- )
239
- if result.returncode != 0:
240
- print(
241
- f"{Colors.RED}Failed to create PR for {pkg_name}: "
242
- f"{result.stderr}{Colors.NC}"
243
- )
244
- return submodule_prs, changed_paths, False
245
-
246
- sub_pr_url = result.stdout.strip()
247
- print(f" {Colors.GREEN}PR created for {pkg_name}: {sub_pr_url}{Colors.NC}")
248
-
249
- # Persist immediately (incremental, supports re-entry)
250
- submodule_prs[pkg_name] = sub_pr_url
251
- task_data["submodule_prs"] = submodule_prs
252
- write_json(task_json, task_data)
253
-
254
- changed_paths.append(pkg_path)
255
-
256
- return submodule_prs, changed_paths, True
257
-
258
-
259
- def _build_submodule_warning(submodule_prs: dict[str, str]) -> str:
260
- """Build the squash-merge warning block for the main PR body."""
261
- pr_lines = "\n".join(f"> - {name}: {url}" for name, url in submodule_prs.items())
262
- return (
263
- f"> {_SUBMODULE_SQUASH_WARNING_MARKER}\n"
264
- f">\n"
265
- f"> Submodule PRs:\n"
266
- f"{pr_lines}\n"
267
- f"\n---\n\n"
268
- )
269
-
270
-
271
- def _ensure_submodule_warning_on_existing_pr(
272
- submodule_prs: dict[str, str],
273
- dry_run: bool,
274
- ) -> None:
275
- """Read-modify-write: add squash warning to existing PR if missing."""
276
- if dry_run:
277
- print("[DRY-RUN] Would check/add submodule warning to existing PR")
278
- return
279
-
280
- # Read current PR body
281
- result = subprocess.run(
282
- [
283
- "gh", "pr", "view",
284
- "--json", "body",
285
- "--jq", ".body",
286
- ],
287
- capture_output=True,
288
- text=True,
289
- encoding="utf-8",
290
- errors="replace",
291
- )
292
- if result.returncode != 0:
293
- return
294
-
295
- current_body = result.stdout.strip()
296
- if _SUBMODULE_SQUASH_WARNING_MARKER in current_body:
297
- return # Warning already present
298
-
299
- # Prepend warning to existing body
300
- warning = _build_submodule_warning(submodule_prs)
301
- new_body = warning + current_body
302
-
303
- subprocess.run(
304
- ["gh", "pr", "edit", "--body", new_body],
305
- capture_output=True,
306
- text=True,
307
- encoding="utf-8",
308
- errors="replace",
309
- )
310
- print(f" {Colors.GREEN}Added submodule merge warning to existing PR{Colors.NC}")
311
-
312
-
313
- # =============================================================================
314
- # Main
315
- # =============================================================================
316
-
317
-
318
- def main() -> int:
319
- """Main entry point."""
320
- parser = argparse.ArgumentParser(description="Multi-Agent Pipeline: Create PR")
321
- parser.add_argument("dir", nargs="?", help="Task directory")
322
- parser.add_argument(
323
- "--dry-run", action="store_true", help="Show what would be done"
324
- )
325
-
326
- args = parser.parse_args()
327
- repo_root = get_repo_root()
328
-
329
- # =============================================================================
330
- # Get Task Directory
331
- # =============================================================================
332
- target_dir = args.dir
333
- if not target_dir:
334
- # Try to get from .current-task
335
- current_task = get_current_task(repo_root)
336
- if current_task:
337
- target_dir = current_task
338
-
339
- if not target_dir:
340
- print(
341
- f"{Colors.RED}Error: No task directory specified and no current task set{Colors.NC}"
342
- )
343
- print("Usage: python3 create_pr.py [task-dir] [--dry-run]")
344
- return 1
345
-
346
- # Support relative paths
347
- if not target_dir.startswith("/"):
348
- target_dir_path = repo_root / target_dir
349
- else:
350
- target_dir_path = Path(target_dir)
351
-
352
- task_json = target_dir_path / FILE_TASK_JSON
353
- if not task_json.is_file():
354
- print(f"{Colors.RED}Error: task.json not found at {target_dir_path}{Colors.NC}")
355
- return 1
356
-
357
- # =============================================================================
358
- # Main
359
- # =============================================================================
360
- print(f"{Colors.BLUE}=== Create PR ==={Colors.NC}")
361
- if args.dry_run:
362
- print(
363
- f"{Colors.YELLOW}[DRY-RUN MODE] No actual changes will be made{Colors.NC}"
364
- )
365
- print()
366
-
367
- # Read task config
368
- task_data = read_json(task_json)
369
- if not task_data:
370
- print(f"{Colors.RED}Error: Failed to read task.json{Colors.NC}")
371
- return 1
372
-
373
- task_name = task_data.get("name", "")
374
- base_branch = task_data.get("base_branch", "main")
375
- scope = task_data.get("scope", "core")
376
- dev_type = task_data.get("dev_type", "feature")
377
-
378
- # Map dev_type to commit prefix
379
- prefix_map = {
380
- "feature": "feat",
381
- "frontend": "feat",
382
- "backend": "feat",
383
- "fullstack": "feat",
384
- "bugfix": "fix",
385
- "fix": "fix",
386
- "refactor": "refactor",
387
- "docs": "docs",
388
- "test": "test",
389
- }
390
- commit_prefix = prefix_map.get(dev_type, "feat")
391
-
392
- print(f"Task: {task_name}")
393
- print(f"Base branch: {base_branch}")
394
- print(f"Scope: {scope}")
395
- print(f"Commit prefix: {commit_prefix}")
396
- print()
397
-
398
- # Get current branch
399
- _, branch_out, _ = run_git(["branch", "--show-current"])
400
- current_branch = branch_out.strip()
401
- print(f"Current branch: {current_branch}")
402
-
403
- # =============================================================================
404
- # Submodule PR Flow (runs BEFORE main repo staging)
405
- # =============================================================================
406
- submodule_prs, changed_submodule_paths, sub_success = _process_submodule_changes(
407
- repo_root=repo_root,
408
- current_branch=current_branch,
409
- commit_prefix=commit_prefix,
410
- scope=scope,
411
- task_name=task_name,
412
- task_data=task_data,
413
- task_json=task_json,
414
- dry_run=args.dry_run,
415
- )
416
-
417
- if not sub_success:
418
- print(
419
- f"\n{Colors.RED}Submodule PR flow failed. "
420
- f"Skipping main repo commit/PR.{Colors.NC}"
421
- )
422
- print("Already-created submodule PRs have been saved to task.json.")
423
- return 1
424
-
425
- # =============================================================================
426
- # Main Repo: Stage, Commit, Push, PR
427
- # =============================================================================
428
-
429
- # Check for changes
430
- print(f"{Colors.YELLOW}Checking for changes...{Colors.NC}")
431
-
432
- # Stage changes
433
- run_git(["add", "-A"])
434
-
435
- # Exclude workspace and temp files
436
- run_git(["reset", f"{DIR_WORKFLOW}/workspace/"])
437
- run_git(["reset", ".agent-log", ".session-id"])
438
-
439
- # If submodules changed, ensure their ref updates are staged
440
- for sub_path in changed_submodule_paths:
441
- run_git(["add", sub_path])
442
-
443
- # Check if there are staged changes
444
- ret, _, _ = run_git(["diff", "--cached", "--quiet"])
445
- has_staged_changes = ret != 0
446
-
447
- if not has_staged_changes:
448
- print(f"{Colors.YELLOW}No staged changes to commit{Colors.NC}")
449
-
450
- # Check for unpushed commits
451
- ret, log_out, _ = run_git(
452
- ["log", f"origin/{current_branch}..HEAD", "--oneline"]
453
- )
454
- unpushed = len([line for line in log_out.splitlines() if line.strip()])
455
-
456
- if unpushed == 0:
457
- if args.dry_run:
458
- run_git(["reset", "HEAD"])
459
- print(f"{Colors.RED}No changes to create PR{Colors.NC}")
460
- return 1
461
-
462
- print(f"Found {unpushed} unpushed commit(s)")
463
- else:
464
- # Commit changes
465
- print(f"{Colors.YELLOW}Committing changes...{Colors.NC}")
466
- commit_msg = f"{commit_prefix}({scope}): {task_name}"
467
-
468
- if args.dry_run:
469
- print(f"[DRY-RUN] Would commit with message: {commit_msg}")
470
- print("[DRY-RUN] Staged files:")
471
- _, staged_out, _ = run_git(["diff", "--cached", "--name-only"])
472
- for line in staged_out.splitlines():
473
- print(f" - {line}")
474
- else:
475
- run_git(["commit", "-m", commit_msg])
476
- print(f"{Colors.GREEN}Committed: {commit_msg}{Colors.NC}")
477
-
478
- # Push to remote
479
- print(f"{Colors.YELLOW}Pushing to remote...{Colors.NC}")
480
- if args.dry_run:
481
- print(f"[DRY-RUN] Would push to: origin/{current_branch}")
482
- else:
483
- ret, _, err = run_git(["push", "-u", "origin", current_branch])
484
- if ret != 0:
485
- print(f"{Colors.RED}Failed to push: {err}{Colors.NC}")
486
- return 1
487
- print(f"{Colors.GREEN}Pushed to origin/{current_branch}{Colors.NC}")
488
-
489
- # Create PR
490
- print(f"{Colors.YELLOW}Creating PR...{Colors.NC}")
491
- pr_title = f"{commit_prefix}({scope}): {task_name}"
492
- pr_url = ""
493
-
494
- # Build PR body with optional submodule warning
495
- has_submodule_prs = bool(submodule_prs)
496
-
497
- if args.dry_run:
498
- print("[DRY-RUN] Would create PR:")
499
- print(f" Title: {pr_title}")
500
- print(f" Base: {base_branch}")
501
- print(f" Head: {current_branch}")
502
- prd_file = target_dir_path / "prd.md"
503
- if prd_file.is_file():
504
- print(" Body: (from prd.md)")
505
- if has_submodule_prs:
506
- print(" Body includes submodule merge warning")
507
- pr_url = "https://github.com/example/repo/pull/DRY-RUN"
508
- else:
509
- # Check if PR already exists
510
- result = subprocess.run(
511
- [
512
- "gh",
513
- "pr",
514
- "list",
515
- "--head",
516
- current_branch,
517
- "--base",
518
- base_branch,
519
- "--json",
520
- "url",
521
- "--jq",
522
- ".[0].url",
523
- ],
524
- capture_output=True,
525
- text=True,
526
- encoding="utf-8",
527
- errors="replace",
528
- )
529
- existing_pr = result.stdout.strip()
530
-
531
- if existing_pr:
532
- print(f"{Colors.YELLOW}PR already exists: {existing_pr}{Colors.NC}")
533
- pr_url = existing_pr
534
-
535
- # Read-modify-write: add submodule warning if missing
536
- if has_submodule_prs:
537
- _ensure_submodule_warning_on_existing_pr(
538
- submodule_prs, args.dry_run
539
- )
540
- else:
541
- # Read PRD as PR body
542
- pr_body = ""
543
- prd_file = target_dir_path / "prd.md"
544
- if prd_file.is_file():
545
- pr_body = prd_file.read_text(encoding="utf-8")
546
-
547
- # Prepend submodule warning if applicable
548
- if has_submodule_prs:
549
- pr_body = _build_submodule_warning(submodule_prs) + pr_body
550
-
551
- # Create PR
552
- result = subprocess.run(
553
- [
554
- "gh",
555
- "pr",
556
- "create",
557
- "--draft",
558
- "--base",
559
- base_branch,
560
- "--title",
561
- pr_title,
562
- "--body",
563
- pr_body,
564
- ],
565
- capture_output=True,
566
- text=True,
567
- encoding="utf-8",
568
- errors="replace",
569
- )
570
-
571
- if result.returncode != 0:
572
- print(f"{Colors.RED}Failed to create PR: {result.stderr}{Colors.NC}")
573
- return 1
574
-
575
- pr_url = result.stdout.strip()
576
- print(f"{Colors.GREEN}PR created: {pr_url}{Colors.NC}")
577
-
578
- # Update task.json
579
- print(f"{Colors.YELLOW}Updating task status...{Colors.NC}")
580
- if args.dry_run:
581
- print("[DRY-RUN] Would update task.json:")
582
- print(" status: completed")
583
- print(f" pr_url: {pr_url}")
584
- if has_submodule_prs:
585
- print(f" submodule_prs: {submodule_prs}")
586
- print(" current_phase: (set to create-pr phase)")
587
- else:
588
- # Get the phase number for create-pr action
589
- create_pr_phase = get_phase_for_action(task_json, "create-pr")
590
- if not create_pr_phase:
591
- create_pr_phase = 4 # Default fallback
592
-
593
- task_data["status"] = "completed"
594
- task_data["pr_url"] = pr_url
595
- task_data["current_phase"] = create_pr_phase
596
- if has_submodule_prs:
597
- task_data["submodule_prs"] = submodule_prs
598
-
599
- write_json(task_json, task_data)
600
- print(
601
- f"{Colors.GREEN}Task status updated to 'completed', phase {create_pr_phase}{Colors.NC}"
602
- )
603
-
604
- # In dry-run, reset the staging area
605
- if args.dry_run:
606
- run_git(["reset", "HEAD"])
607
-
608
- print()
609
- print(f"{Colors.GREEN}=== PR Created Successfully ==={Colors.NC}")
610
- print(f"PR URL: {pr_url}")
611
- if has_submodule_prs:
612
- print("Submodule PRs:")
613
- for name, url in submodule_prs.items():
614
- print(f" - {name}: {url}")
615
-
616
- return 0
617
-
618
-
619
- if __name__ == "__main__":
620
- sys.exit(main())