@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.2
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.
- package/dist/cli/index.js +0 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +0 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +100 -24
- package/dist/commands/update.js.map +1 -1
- package/dist/configurators/antigravity.d.ts +3 -4
- package/dist/configurators/antigravity.d.ts.map +1 -1
- package/dist/configurators/antigravity.js +17 -10
- package/dist/configurators/antigravity.js.map +1 -1
- package/dist/configurators/claude.d.ts +5 -28
- package/dist/configurators/claude.d.ts.map +1 -1
- package/dist/configurators/claude.js +30 -51
- package/dist/configurators/claude.js.map +1 -1
- package/dist/configurators/codebuddy.d.ts +6 -7
- package/dist/configurators/codebuddy.d.ts.map +1 -1
- package/dist/configurators/codebuddy.js +23 -51
- package/dist/configurators/codebuddy.js.map +1 -1
- package/dist/configurators/codex.d.ts +3 -6
- package/dist/configurators/codex.d.ts.map +1 -1
- package/dist/configurators/codex.js +29 -12
- package/dist/configurators/codex.js.map +1 -1
- package/dist/configurators/copilot.d.ts +6 -5
- package/dist/configurators/copilot.d.ts.map +1 -1
- package/dist/configurators/copilot.js +42 -13
- package/dist/configurators/copilot.js.map +1 -1
- package/dist/configurators/cursor.d.ts +6 -1
- package/dist/configurators/cursor.d.ts.map +1 -1
- package/dist/configurators/cursor.js +22 -45
- package/dist/configurators/cursor.js.map +1 -1
- package/dist/configurators/droid.d.ts +6 -1
- package/dist/configurators/droid.d.ts.map +1 -1
- package/dist/configurators/droid.js +23 -41
- package/dist/configurators/droid.js.map +1 -1
- package/dist/configurators/gemini.d.ts +8 -4
- package/dist/configurators/gemini.d.ts.map +1 -1
- package/dist/configurators/gemini.js +28 -47
- package/dist/configurators/gemini.js.map +1 -1
- package/dist/configurators/index.d.ts +1 -1
- package/dist/configurators/index.d.ts.map +1 -1
- package/dist/configurators/index.js +142 -98
- package/dist/configurators/index.js.map +1 -1
- package/dist/configurators/kilo.d.ts +3 -4
- package/dist/configurators/kilo.d.ts.map +1 -1
- package/dist/configurators/kilo.js +19 -46
- package/dist/configurators/kilo.js.map +1 -1
- package/dist/configurators/kiro.d.ts +4 -4
- package/dist/configurators/kiro.d.ts.map +1 -1
- package/dist/configurators/kiro.js +18 -14
- package/dist/configurators/kiro.js.map +1 -1
- package/dist/configurators/opencode.d.ts +3 -28
- package/dist/configurators/opencode.d.ts.map +1 -1
- package/dist/configurators/opencode.js +23 -48
- package/dist/configurators/opencode.js.map +1 -1
- package/dist/configurators/qoder.d.ts +6 -4
- package/dist/configurators/qoder.d.ts.map +1 -1
- package/dist/configurators/qoder.js +20 -47
- package/dist/configurators/qoder.js.map +1 -1
- package/dist/configurators/shared.d.ts +66 -3
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +251 -3
- package/dist/configurators/shared.js.map +1 -1
- package/dist/configurators/windsurf.d.ts +3 -4
- package/dist/configurators/windsurf.d.ts.map +1 -1
- package/dist/configurators/windsurf.js +17 -10
- package/dist/configurators/windsurf.js.map +1 -1
- package/dist/configurators/workflow.d.ts +0 -3
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +1 -7
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/migrations/manifests/0.4.0.json +1 -1
- package/dist/migrations/manifests/0.5.0-beta.0.json +1644 -0
- package/dist/templates/claude/agents/check.md +2 -29
- package/dist/templates/claude/agents/research.md +70 -52
- package/dist/templates/claude/index.d.ts +5 -37
- package/dist/templates/claude/index.d.ts.map +1 -1
- package/dist/templates/claude/index.js +3 -42
- package/dist/templates/claude/index.js.map +1 -1
- package/dist/templates/claude/settings.json +3 -4
- package/dist/templates/{iflow → codebuddy}/agents/check.md +3 -30
- package/dist/templates/{iflow → codebuddy}/agents/implement.md +1 -1
- package/dist/templates/codebuddy/agents/research.md +138 -0
- package/dist/templates/codebuddy/index.d.ts +6 -16
- package/dist/templates/codebuddy/index.d.ts.map +1 -1
- package/dist/templates/codebuddy/index.js +6 -36
- package/dist/templates/codebuddy/index.js.map +1 -1
- package/dist/templates/codebuddy/settings.json +59 -0
- package/dist/templates/codex/agents/research.toml +50 -16
- package/dist/templates/codex/config.toml +10 -0
- package/dist/templates/codex/hooks/session-start.py +65 -29
- package/dist/templates/codex/hooks.json +11 -0
- package/dist/templates/codex/index.d.ts +0 -1
- package/dist/templates/codex/index.d.ts.map +1 -1
- package/dist/templates/codex/index.js +1 -8
- package/dist/templates/codex/index.js.map +1 -1
- package/dist/templates/common/commands/continue.md +51 -0
- package/dist/templates/common/commands/finish-work.md +32 -0
- package/dist/templates/common/commands/start.md +56 -0
- package/dist/templates/common/index.d.ts +28 -0
- package/dist/templates/common/index.d.ts.map +1 -0
- package/dist/templates/common/index.js +55 -0
- package/dist/templates/common/index.js.map +1 -0
- package/dist/templates/{codebuddy/commands/trellis → common/skills}/brainstorm.md +4 -4
- package/dist/templates/{opencode/commands/trellis → common/skills}/break-loop.md +4 -4
- package/dist/templates/common/skills/check.md +87 -0
- package/dist/templates/{codebuddy/commands/trellis → common/skills}/update-spec.md +18 -21
- package/dist/templates/copilot/hooks/session-start.py +65 -29
- package/dist/templates/copilot/hooks.json +8 -0
- package/dist/templates/cursor/agents/check.md +95 -0
- package/dist/templates/cursor/agents/implement.md +95 -0
- package/dist/templates/cursor/agents/research.md +138 -0
- package/dist/templates/cursor/hooks.json +24 -0
- package/dist/templates/cursor/index.d.ts +6 -17
- package/dist/templates/cursor/index.d.ts.map +1 -1
- package/dist/templates/cursor/index.js +6 -37
- package/dist/templates/cursor/index.js.map +1 -1
- package/dist/templates/droid/droids/check.md +95 -0
- package/dist/templates/droid/droids/implement.md +95 -0
- package/dist/templates/droid/droids/research.md +138 -0
- package/dist/templates/droid/index.d.ts +7 -19
- package/dist/templates/droid/index.d.ts.map +1 -1
- package/dist/templates/droid/index.js +7 -39
- package/dist/templates/droid/index.js.map +1 -1
- package/dist/templates/droid/settings.json +59 -0
- package/dist/templates/extract.d.ts +7 -193
- package/dist/templates/extract.d.ts.map +1 -1
- package/dist/templates/extract.js +7 -310
- package/dist/templates/extract.js.map +1 -1
- package/dist/templates/gemini/agents/check.md +95 -0
- package/dist/templates/gemini/agents/implement.md +95 -0
- package/dist/templates/gemini/agents/research.md +138 -0
- package/dist/templates/gemini/index.d.ts +6 -14
- package/dist/templates/gemini/index.d.ts.map +1 -1
- package/dist/templates/gemini/index.js +6 -37
- package/dist/templates/gemini/index.js.map +1 -1
- package/dist/templates/gemini/settings.json +28 -0
- package/dist/templates/kiro/agents/check.json +13 -0
- package/dist/templates/kiro/agents/implement.json +13 -0
- package/dist/templates/kiro/agents/research.json +21 -0
- package/dist/templates/kiro/index.d.ts +11 -11
- package/dist/templates/kiro/index.d.ts.map +1 -1
- package/dist/templates/kiro/index.js +11 -33
- package/dist/templates/kiro/index.js.map +1 -1
- package/dist/templates/opencode/agents/check.md +3 -30
- package/dist/templates/opencode/agents/implement.md +1 -1
- package/dist/templates/opencode/agents/research.md +1 -2
- package/dist/templates/opencode/plugins/inject-subagent-context.js +9 -183
- package/dist/templates/opencode/plugins/inject-workflow-state.js +160 -0
- package/dist/templates/opencode/plugins/session-start.js +71 -32
- package/dist/templates/qoder/agents/check.md +95 -0
- package/dist/templates/qoder/agents/implement.md +95 -0
- package/dist/templates/qoder/agents/research.md +138 -0
- package/dist/templates/qoder/index.d.ts +7 -10
- package/dist/templates/qoder/index.d.ts.map +1 -1
- package/dist/templates/qoder/index.js +7 -32
- package/dist/templates/qoder/index.js.map +1 -1
- package/dist/templates/qoder/settings.json +47 -0
- package/dist/templates/shared-hooks/index.d.ts +19 -0
- package/dist/templates/shared-hooks/index.d.ts.map +1 -0
- package/dist/templates/shared-hooks/index.js +30 -0
- package/dist/templates/shared-hooks/index.js.map +1 -0
- package/dist/templates/{iflow/hooks → shared-hooks}/inject-subagent-context.py +74 -263
- package/dist/templates/shared-hooks/inject-workflow-state.py +231 -0
- package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +162 -55
- package/dist/templates/template-utils.d.ts +26 -0
- package/dist/templates/template-utils.d.ts.map +1 -0
- package/dist/templates/template-utils.js +60 -0
- package/dist/templates/template-utils.js.map +1 -0
- package/dist/templates/trellis/index.d.ts +1 -14
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +2 -27
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/cli_adapter.py +2 -2
- package/dist/templates/trellis/scripts/common/config.py +126 -1
- package/dist/templates/trellis/scripts/common/git_context.py +25 -2
- package/dist/templates/trellis/scripts/common/task_context.py +3 -23
- package/dist/templates/trellis/scripts/common/task_store.py +0 -12
- package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
- package/dist/templates/trellis/scripts/task.py +6 -35
- package/dist/templates/trellis/workflow.md +274 -297
- package/dist/types/ai-tools.d.ts +21 -3
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +106 -15
- package/dist/types/ai-tools.js.map +1 -1
- package/dist/types/migration.d.ts +8 -1
- package/dist/types/migration.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/configurators/iflow.d.ts +0 -33
- package/dist/configurators/iflow.d.ts.map +0 -1
- package/dist/configurators/iflow.js +0 -99
- package/dist/configurators/iflow.js.map +0 -1
- package/dist/templates/antigravity/index.d.ts +0 -12
- package/dist/templates/antigravity/index.d.ts.map +0 -1
- package/dist/templates/antigravity/index.js +0 -29
- package/dist/templates/antigravity/index.js.map +0 -1
- package/dist/templates/claude/agents/debug.md +0 -106
- package/dist/templates/claude/agents/dispatch.md +0 -213
- package/dist/templates/claude/agents/plan.md +0 -396
- package/dist/templates/claude/commands/trellis/brainstorm.md +0 -487
- package/dist/templates/claude/commands/trellis/break-loop.md +0 -125
- package/dist/templates/claude/commands/trellis/check-cross-layer.md +0 -153
- package/dist/templates/claude/commands/trellis/check.md +0 -25
- package/dist/templates/claude/commands/trellis/create-command.md +0 -154
- package/dist/templates/claude/commands/trellis/finish-work.md +0 -153
- package/dist/templates/claude/commands/trellis/integrate-skill.md +0 -219
- package/dist/templates/claude/commands/trellis/onboard.md +0 -358
- package/dist/templates/claude/commands/trellis/parallel.md +0 -192
- package/dist/templates/claude/commands/trellis/record-session.md +0 -62
- package/dist/templates/claude/commands/trellis/start.md +0 -393
- package/dist/templates/claude/commands/trellis/update-spec.md +0 -354
- package/dist/templates/claude/hooks/inject-subagent-context.py +0 -803
- package/dist/templates/claude/hooks/ralph-loop.py +0 -396
- package/dist/templates/codebuddy/commands/trellis/before-dev.md +0 -29
- package/dist/templates/codebuddy/commands/trellis/break-loop.md +0 -107
- package/dist/templates/codebuddy/commands/trellis/check-cross-layer.md +0 -153
- package/dist/templates/codebuddy/commands/trellis/check.md +0 -25
- package/dist/templates/codebuddy/commands/trellis/create-command.md +0 -154
- package/dist/templates/codebuddy/commands/trellis/finish-work.md +0 -143
- package/dist/templates/codebuddy/commands/trellis/integrate-skill.md +0 -219
- package/dist/templates/codebuddy/commands/trellis/onboard.md +0 -358
- package/dist/templates/codebuddy/commands/trellis/record-session.md +0 -61
- package/dist/templates/codebuddy/commands/trellis/start.md +0 -373
- package/dist/templates/codex/codex-skills/parallel/SKILL.md +0 -194
- package/dist/templates/cursor/commands/trellis-before-dev.md +0 -29
- package/dist/templates/cursor/commands/trellis-brainstorm.md +0 -487
- package/dist/templates/cursor/commands/trellis-break-loop.md +0 -107
- package/dist/templates/cursor/commands/trellis-check-cross-layer.md +0 -153
- package/dist/templates/cursor/commands/trellis-check.md +0 -25
- package/dist/templates/cursor/commands/trellis-create-command.md +0 -154
- package/dist/templates/cursor/commands/trellis-finish-work.md +0 -143
- package/dist/templates/cursor/commands/trellis-integrate-skill.md +0 -219
- package/dist/templates/cursor/commands/trellis-onboard.md +0 -358
- package/dist/templates/cursor/commands/trellis-record-session.md +0 -62
- package/dist/templates/cursor/commands/trellis-start.md +0 -373
- package/dist/templates/cursor/commands/trellis-update-spec.md +0 -354
- package/dist/templates/droid/commands/trellis/before-dev.md +0 -33
- package/dist/templates/droid/commands/trellis/brainstorm.md +0 -491
- package/dist/templates/droid/commands/trellis/break-loop.md +0 -111
- package/dist/templates/droid/commands/trellis/check-cross-layer.md +0 -157
- package/dist/templates/droid/commands/trellis/check.md +0 -29
- package/dist/templates/droid/commands/trellis/create-command.md +0 -158
- package/dist/templates/droid/commands/trellis/finish-work.md +0 -147
- package/dist/templates/droid/commands/trellis/integrate-skill.md +0 -223
- package/dist/templates/droid/commands/trellis/onboard.md +0 -362
- package/dist/templates/droid/commands/trellis/record-session.md +0 -66
- package/dist/templates/droid/commands/trellis/start.md +0 -377
- package/dist/templates/droid/commands/trellis/update-spec.md +0 -358
- package/dist/templates/gemini/commands/trellis/before-dev.toml +0 -33
- package/dist/templates/gemini/commands/trellis/brainstorm.toml +0 -435
- package/dist/templates/gemini/commands/trellis/break-loop.toml +0 -129
- package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +0 -147
- package/dist/templates/gemini/commands/trellis/check.toml +0 -29
- package/dist/templates/gemini/commands/trellis/create-command.toml +0 -119
- package/dist/templates/gemini/commands/trellis/finish-work.toml +0 -133
- package/dist/templates/gemini/commands/trellis/integrate-skill.toml +0 -104
- package/dist/templates/gemini/commands/trellis/onboard.toml +0 -111
- package/dist/templates/gemini/commands/trellis/record-session.toml +0 -66
- package/dist/templates/gemini/commands/trellis/start.toml +0 -354
- package/dist/templates/gemini/commands/trellis/update-spec.toml +0 -132
- package/dist/templates/iflow/agents/debug.md +0 -106
- package/dist/templates/iflow/agents/dispatch.md +0 -213
- package/dist/templates/iflow/agents/plan.md +0 -396
- package/dist/templates/iflow/agents/research.md +0 -120
- package/dist/templates/iflow/commands/trellis/before-dev.md +0 -29
- package/dist/templates/iflow/commands/trellis/brainstorm.md +0 -487
- package/dist/templates/iflow/commands/trellis/break-loop.md +0 -125
- package/dist/templates/iflow/commands/trellis/check-cross-layer.md +0 -153
- package/dist/templates/iflow/commands/trellis/check.md +0 -25
- package/dist/templates/iflow/commands/trellis/create-command.md +0 -152
- package/dist/templates/iflow/commands/trellis/finish-work.md +0 -153
- package/dist/templates/iflow/commands/trellis/integrate-skill.md +0 -219
- package/dist/templates/iflow/commands/trellis/onboard.md +0 -358
- package/dist/templates/iflow/commands/trellis/parallel.md +0 -192
- package/dist/templates/iflow/commands/trellis/record-session.md +0 -62
- package/dist/templates/iflow/commands/trellis/start.md +0 -393
- package/dist/templates/iflow/commands/trellis/update-spec.md +0 -354
- package/dist/templates/iflow/hooks/ralph-loop.py +0 -395
- package/dist/templates/iflow/hooks/session-start.py +0 -403
- package/dist/templates/iflow/index.d.ts +0 -54
- package/dist/templates/iflow/index.d.ts.map +0 -1
- package/dist/templates/iflow/index.js +0 -85
- package/dist/templates/iflow/index.js.map +0 -1
- package/dist/templates/iflow/settings.json +0 -60
- package/dist/templates/kilo/index.d.ts +0 -16
- package/dist/templates/kilo/index.d.ts.map +0 -1
- package/dist/templates/kilo/index.js +0 -39
- package/dist/templates/kilo/index.js.map +0 -1
- package/dist/templates/kilo/workflows/before-dev.md +0 -29
- package/dist/templates/kilo/workflows/brainstorm.md +0 -487
- package/dist/templates/kilo/workflows/break-loop.md +0 -125
- package/dist/templates/kilo/workflows/check-cross-layer.md +0 -153
- package/dist/templates/kilo/workflows/check.md +0 -25
- package/dist/templates/kilo/workflows/create-command.md +0 -152
- package/dist/templates/kilo/workflows/finish-work.md +0 -129
- package/dist/templates/kilo/workflows/integrate-skill.md +0 -219
- package/dist/templates/kilo/workflows/onboard.md +0 -358
- package/dist/templates/kilo/workflows/parallel.md +0 -193
- package/dist/templates/kilo/workflows/record-session.md +0 -62
- package/dist/templates/kilo/workflows/start.md +0 -387
- package/dist/templates/kilo/workflows/update-spec.md +0 -285
- package/dist/templates/kiro/skills/before-dev/SKILL.md +0 -34
- package/dist/templates/kiro/skills/brainstorm/SKILL.md +0 -492
- package/dist/templates/kiro/skills/break-loop/SKILL.md +0 -130
- package/dist/templates/kiro/skills/check/SKILL.md +0 -30
- package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +0 -158
- package/dist/templates/kiro/skills/create-command/SKILL.md +0 -101
- package/dist/templates/kiro/skills/finish-work/SKILL.md +0 -148
- package/dist/templates/kiro/skills/integrate-skill/SKILL.md +0 -221
- package/dist/templates/kiro/skills/onboard/SKILL.md +0 -363
- package/dist/templates/kiro/skills/record-session/SKILL.md +0 -67
- package/dist/templates/kiro/skills/start/SKILL.md +0 -351
- package/dist/templates/kiro/skills/update-spec/SKILL.md +0 -335
- package/dist/templates/opencode/agents/debug.md +0 -129
- package/dist/templates/opencode/agents/dispatch.md +0 -223
- package/dist/templates/opencode/agents/trellis-plan.md +0 -427
- package/dist/templates/opencode/commands/trellis/before-dev.md +0 -29
- package/dist/templates/opencode/commands/trellis/brainstorm.md +0 -487
- package/dist/templates/opencode/commands/trellis/check-cross-layer.md +0 -153
- package/dist/templates/opencode/commands/trellis/check.md +0 -25
- package/dist/templates/opencode/commands/trellis/create-command.md +0 -154
- package/dist/templates/opencode/commands/trellis/finish-work.md +0 -144
- package/dist/templates/opencode/commands/trellis/integrate-skill.md +0 -219
- package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
- package/dist/templates/opencode/commands/trellis/onboard.md +0 -358
- package/dist/templates/opencode/commands/trellis/parallel.md +0 -193
- package/dist/templates/opencode/commands/trellis/record-session.md +0 -62
- package/dist/templates/opencode/commands/trellis/start.md +0 -351
- package/dist/templates/opencode/commands/trellis/update-spec.md +0 -354
- package/dist/templates/qoder/skills/before-dev/SKILL.md +0 -34
- package/dist/templates/qoder/skills/brainstorm/SKILL.md +0 -492
- package/dist/templates/qoder/skills/break-loop/SKILL.md +0 -130
- package/dist/templates/qoder/skills/check/SKILL.md +0 -30
- package/dist/templates/qoder/skills/check-cross-layer/SKILL.md +0 -158
- package/dist/templates/qoder/skills/create-command/SKILL.md +0 -101
- package/dist/templates/qoder/skills/finish-work/SKILL.md +0 -134
- package/dist/templates/qoder/skills/integrate-skill/SKILL.md +0 -221
- package/dist/templates/qoder/skills/onboard/SKILL.md +0 -363
- package/dist/templates/qoder/skills/record-session/SKILL.md +0 -67
- package/dist/templates/qoder/skills/start/SKILL.md +0 -388
- package/dist/templates/qoder/skills/update-spec/SKILL.md +0 -290
- package/dist/templates/trellis/scripts/common/phase.py +0 -254
- package/dist/templates/trellis/scripts/common/registry.py +0 -335
- package/dist/templates/trellis/scripts/common/worktree.py +0 -305
- package/dist/templates/trellis/scripts/multi_agent/__init__.py +0 -5
- package/dist/templates/trellis/scripts/multi_agent/_bootstrap.py +0 -17
- package/dist/templates/trellis/scripts/multi_agent/cleanup.py +0 -398
- package/dist/templates/trellis/scripts/multi_agent/create_pr.py +0 -620
- package/dist/templates/trellis/scripts/multi_agent/plan.py +0 -213
- package/dist/templates/trellis/scripts/multi_agent/start.py +0 -539
- package/dist/templates/trellis/scripts/multi_agent/status.py +0 -76
- package/dist/templates/trellis/scripts/multi_agent/status_display.py +0 -542
- package/dist/templates/trellis/scripts/multi_agent/status_monitor.py +0 -225
- package/dist/templates/trellis/scripts-shell-archive/add-session.sh +0 -384
- package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +0 -129
- package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +0 -263
- package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +0 -208
- package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +0 -150
- package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +0 -247
- package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +0 -142
- package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +0 -151
- package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +0 -128
- package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +0 -299
- package/dist/templates/trellis/scripts-shell-archive/get-context.sh +0 -7
- package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +0 -15
- package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +0 -34
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +0 -396
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +0 -241
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +0 -207
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +0 -317
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +0 -828
- package/dist/templates/trellis/scripts-shell-archive/task.sh +0 -1204
- package/dist/templates/trellis/worktree.yaml +0 -47
- package/dist/templates/windsurf/index.d.ts +0 -21
- package/dist/templates/windsurf/index.d.ts.map +0 -1
- package/dist/templates/windsurf/index.js +0 -44
- package/dist/templates/windsurf/index.js.map +0 -1
- package/dist/templates/windsurf/workflows/trellis-before-dev.md +0 -31
- package/dist/templates/windsurf/workflows/trellis-brainstorm.md +0 -491
- package/dist/templates/windsurf/workflows/trellis-break-loop.md +0 -111
- package/dist/templates/windsurf/workflows/trellis-check-cross-layer.md +0 -157
- package/dist/templates/windsurf/workflows/trellis-check.md +0 -27
- package/dist/templates/windsurf/workflows/trellis-create-command.md +0 -154
- package/dist/templates/windsurf/workflows/trellis-finish-work.md +0 -147
- package/dist/templates/windsurf/workflows/trellis-integrate-skill.md +0 -220
- package/dist/templates/windsurf/workflows/trellis-onboard.md +0 -362
- package/dist/templates/windsurf/workflows/trellis-record-session.md +0 -66
- package/dist/templates/windsurf/workflows/trellis-start.md +0 -373
- package/dist/templates/windsurf/workflows/trellis-update-spec.md +0 -358
- /package/dist/templates/{claude/commands/trellis → common/skills}/before-dev.md +0 -0
- /package/dist/templates/{claude/hooks → shared-hooks}/statusline.py +0 -0
|
@@ -9,12 +9,10 @@
|
|
|
9
9
|
* ├── scripts/
|
|
10
10
|
* │ ├── __init__.py
|
|
11
11
|
* │ ├── common/ # Shared utilities (Python)
|
|
12
|
-
* │ ├── multi_agent/ # Multi-agent pipeline scripts (Python)
|
|
13
12
|
* │ └── *.py # Main scripts (Python)
|
|
14
13
|
* ├── scripts-shell-archive/ # Archived shell scripts (for reference)
|
|
15
14
|
* ├── workflow.md # Workflow guide
|
|
16
15
|
* ├── config.yaml # Trellis configuration
|
|
17
|
-
* ├── worktree.yaml # Worktree configuration
|
|
18
16
|
* └── gitignore.txt # .gitignore content
|
|
19
17
|
*/
|
|
20
18
|
export declare const scriptsInit: string;
|
|
@@ -22,11 +20,8 @@ export declare const commonInit: string;
|
|
|
22
20
|
export declare const commonPaths: string;
|
|
23
21
|
export declare const commonDeveloper: string;
|
|
24
22
|
export declare const commonGitContext: string;
|
|
25
|
-
export declare const commonWorktree: string;
|
|
26
23
|
export declare const commonTaskQueue: string;
|
|
27
24
|
export declare const commonTaskUtils: string;
|
|
28
|
-
export declare const commonPhase: string;
|
|
29
|
-
export declare const commonRegistry: string;
|
|
30
25
|
export declare const commonCliAdapter: string;
|
|
31
26
|
export declare const commonConfig: string;
|
|
32
27
|
export declare const commonIo: string;
|
|
@@ -38,14 +33,7 @@ export declare const commonTaskContext: string;
|
|
|
38
33
|
export declare const commonTaskStore: string;
|
|
39
34
|
export declare const commonSessionContext: string;
|
|
40
35
|
export declare const commonPackagesContext: string;
|
|
41
|
-
export declare const
|
|
42
|
-
export declare const multiAgentStart: string;
|
|
43
|
-
export declare const multiAgentCleanup: string;
|
|
44
|
-
export declare const multiAgentStatus: string;
|
|
45
|
-
export declare const multiAgentCreatePr: string;
|
|
46
|
-
export declare const multiAgentPlan: string;
|
|
47
|
-
export declare const multiAgentStatusDisplay: string;
|
|
48
|
-
export declare const multiAgentStatusMonitor: string;
|
|
36
|
+
export declare const commonWorkflowPhase: string;
|
|
49
37
|
export declare const getDeveloperScript: string;
|
|
50
38
|
export declare const initDeveloperScript: string;
|
|
51
39
|
export declare const taskScript: string;
|
|
@@ -54,7 +42,6 @@ export declare const addSessionScript: string;
|
|
|
54
42
|
export declare const createBootstrapScript: string;
|
|
55
43
|
export declare const workflowMdTemplate: string;
|
|
56
44
|
export declare const configYamlTemplate: string;
|
|
57
|
-
export declare const worktreeYamlTemplate: string;
|
|
58
45
|
export declare const gitignoreTemplate: string;
|
|
59
46
|
/**
|
|
60
47
|
* Get all script templates as a map of relative path to content
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAcH,eAAO,MAAM,WAAW,QAAsC,CAAC;AAG/D,eAAO,MAAM,UAAU,QAA6C,CAAC;AACrE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAC3E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,gBAAgB,QAAgD,CAAC;AAC9E,eAAO,MAAM,YAAY,QAA2C,CAAC;AACrE,eAAO,MAAM,QAAQ,QAAuC,CAAC;AAC7D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,SAAS,QAAwC,CAAC;AAC/D,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,WAAW,QAA0C,CAAC;AACnE,eAAO,MAAM,iBAAiB,QAAiD,CAAC;AAChF,eAAO,MAAM,eAAe,QAA+C,CAAC;AAC5E,eAAO,MAAM,oBAAoB,QAEhC,CAAC;AACF,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AACF,eAAO,MAAM,mBAAmB,QAE/B,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA2C,CAAC;AAC3E,eAAO,MAAM,mBAAmB,QAA4C,CAAC;AAC7E,eAAO,MAAM,UAAU,QAAkC,CAAC;AAC1D,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAyC,CAAC;AACvE,eAAO,MAAM,qBAAqB,QAEjC,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,kBAAkB,QAA8B,CAAC;AAC9D,eAAO,MAAM,iBAAiB,QAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCnD"}
|
|
@@ -9,12 +9,10 @@
|
|
|
9
9
|
* ├── scripts/
|
|
10
10
|
* │ ├── __init__.py
|
|
11
11
|
* │ ├── common/ # Shared utilities (Python)
|
|
12
|
-
* │ ├── multi_agent/ # Multi-agent pipeline scripts (Python)
|
|
13
12
|
* │ └── *.py # Main scripts (Python)
|
|
14
13
|
* ├── scripts-shell-archive/ # Archived shell scripts (for reference)
|
|
15
14
|
* ├── workflow.md # Workflow guide
|
|
16
15
|
* ├── config.yaml # Trellis configuration
|
|
17
|
-
* ├── worktree.yaml # Worktree configuration
|
|
18
16
|
* └── gitignore.txt # .gitignore content
|
|
19
17
|
*/
|
|
20
18
|
import { readFileSync } from "node:fs";
|
|
@@ -32,11 +30,8 @@ export const commonInit = readTemplate("scripts/common/__init__.py");
|
|
|
32
30
|
export const commonPaths = readTemplate("scripts/common/paths.py");
|
|
33
31
|
export const commonDeveloper = readTemplate("scripts/common/developer.py");
|
|
34
32
|
export const commonGitContext = readTemplate("scripts/common/git_context.py");
|
|
35
|
-
export const commonWorktree = readTemplate("scripts/common/worktree.py");
|
|
36
33
|
export const commonTaskQueue = readTemplate("scripts/common/task_queue.py");
|
|
37
34
|
export const commonTaskUtils = readTemplate("scripts/common/task_utils.py");
|
|
38
|
-
export const commonPhase = readTemplate("scripts/common/phase.py");
|
|
39
|
-
export const commonRegistry = readTemplate("scripts/common/registry.py");
|
|
40
35
|
export const commonCliAdapter = readTemplate("scripts/common/cli_adapter.py");
|
|
41
36
|
export const commonConfig = readTemplate("scripts/common/config.py");
|
|
42
37
|
export const commonIo = readTemplate("scripts/common/io.py");
|
|
@@ -48,15 +43,7 @@ export const commonTaskContext = readTemplate("scripts/common/task_context.py");
|
|
|
48
43
|
export const commonTaskStore = readTemplate("scripts/common/task_store.py");
|
|
49
44
|
export const commonSessionContext = readTemplate("scripts/common/session_context.py");
|
|
50
45
|
export const commonPackagesContext = readTemplate("scripts/common/packages_context.py");
|
|
51
|
-
|
|
52
|
-
export const multiAgentInit = readTemplate("scripts/multi_agent/__init__.py");
|
|
53
|
-
export const multiAgentStart = readTemplate("scripts/multi_agent/start.py");
|
|
54
|
-
export const multiAgentCleanup = readTemplate("scripts/multi_agent/cleanup.py");
|
|
55
|
-
export const multiAgentStatus = readTemplate("scripts/multi_agent/status.py");
|
|
56
|
-
export const multiAgentCreatePr = readTemplate("scripts/multi_agent/create_pr.py");
|
|
57
|
-
export const multiAgentPlan = readTemplate("scripts/multi_agent/plan.py");
|
|
58
|
-
export const multiAgentStatusDisplay = readTemplate("scripts/multi_agent/status_display.py");
|
|
59
|
-
export const multiAgentStatusMonitor = readTemplate("scripts/multi_agent/status_monitor.py");
|
|
46
|
+
export const commonWorkflowPhase = readTemplate("scripts/common/workflow_phase.py");
|
|
60
47
|
// Python scripts - main
|
|
61
48
|
export const getDeveloperScript = readTemplate("scripts/get_developer.py");
|
|
62
49
|
export const initDeveloperScript = readTemplate("scripts/init_developer.py");
|
|
@@ -67,7 +54,6 @@ export const createBootstrapScript = readTemplate("scripts/create_bootstrap.py")
|
|
|
67
54
|
// Configuration files
|
|
68
55
|
export const workflowMdTemplate = readTemplate("workflow.md");
|
|
69
56
|
export const configYamlTemplate = readTemplate("config.yaml");
|
|
70
|
-
export const worktreeYamlTemplate = readTemplate("worktree.yaml");
|
|
71
57
|
export const gitignoreTemplate = readTemplate("gitignore.txt");
|
|
72
58
|
/**
|
|
73
59
|
* Get all script templates as a map of relative path to content
|
|
@@ -81,11 +67,8 @@ export function getAllScripts() {
|
|
|
81
67
|
scripts.set("common/paths.py", commonPaths);
|
|
82
68
|
scripts.set("common/developer.py", commonDeveloper);
|
|
83
69
|
scripts.set("common/git_context.py", commonGitContext);
|
|
84
|
-
scripts.set("common/worktree.py", commonWorktree);
|
|
85
70
|
scripts.set("common/task_queue.py", commonTaskQueue);
|
|
86
71
|
scripts.set("common/task_utils.py", commonTaskUtils);
|
|
87
|
-
scripts.set("common/phase.py", commonPhase);
|
|
88
|
-
scripts.set("common/registry.py", commonRegistry);
|
|
89
72
|
scripts.set("common/cli_adapter.py", commonCliAdapter);
|
|
90
73
|
scripts.set("common/config.py", commonConfig);
|
|
91
74
|
scripts.set("common/io.py", commonIo);
|
|
@@ -97,15 +80,7 @@ export function getAllScripts() {
|
|
|
97
80
|
scripts.set("common/task_store.py", commonTaskStore);
|
|
98
81
|
scripts.set("common/session_context.py", commonSessionContext);
|
|
99
82
|
scripts.set("common/packages_context.py", commonPackagesContext);
|
|
100
|
-
|
|
101
|
-
scripts.set("multi_agent/__init__.py", multiAgentInit);
|
|
102
|
-
scripts.set("multi_agent/start.py", multiAgentStart);
|
|
103
|
-
scripts.set("multi_agent/cleanup.py", multiAgentCleanup);
|
|
104
|
-
scripts.set("multi_agent/status.py", multiAgentStatus);
|
|
105
|
-
scripts.set("multi_agent/create_pr.py", multiAgentCreatePr);
|
|
106
|
-
scripts.set("multi_agent/plan.py", multiAgentPlan);
|
|
107
|
-
scripts.set("multi_agent/status_display.py", multiAgentStatusDisplay);
|
|
108
|
-
scripts.set("multi_agent/status_monitor.py", multiAgentStatusMonitor);
|
|
83
|
+
scripts.set("common/workflow_phase.py", commonWorkflowPhase);
|
|
109
84
|
// Main
|
|
110
85
|
scripts.set("get_developer.py", getDeveloperScript);
|
|
111
86
|
scripts.set("init_developer.py", initDeveloperScript);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/trellis/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -363,7 +363,7 @@ class CLIAdapter:
|
|
|
363
363
|
)
|
|
364
364
|
elif self.platform == "droid":
|
|
365
365
|
raise ValueError(
|
|
366
|
-
"Factory Droid CLI agent run is not yet
|
|
366
|
+
"Factory Droid CLI agent run is not yet supported."
|
|
367
367
|
)
|
|
368
368
|
|
|
369
369
|
else: # claude
|
|
@@ -427,7 +427,7 @@ class CLIAdapter:
|
|
|
427
427
|
)
|
|
428
428
|
elif self.platform == "droid":
|
|
429
429
|
raise ValueError(
|
|
430
|
-
"Factory Droid CLI resume is not yet
|
|
430
|
+
"Factory Droid CLI resume is not yet supported."
|
|
431
431
|
)
|
|
432
432
|
else:
|
|
433
433
|
return ["claude", "--resume", session_id]
|
|
@@ -11,7 +11,132 @@ import sys
|
|
|
11
11
|
from pathlib import Path
|
|
12
12
|
|
|
13
13
|
from .paths import DIR_WORKFLOW, get_repo_root
|
|
14
|
-
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# =============================================================================
|
|
17
|
+
# YAML Simple Parser (no dependencies)
|
|
18
|
+
# =============================================================================
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _unquote(s: str) -> str:
|
|
22
|
+
"""Remove exactly one layer of matching surrounding quotes.
|
|
23
|
+
|
|
24
|
+
Unlike str.strip('"'), this only removes the outermost pair,
|
|
25
|
+
preserving any nested quotes inside the value.
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
_unquote('"hello"') -> 'hello'
|
|
29
|
+
_unquote("'hello'") -> 'hello'
|
|
30
|
+
_unquote('"echo \\'hi\\'"') -> "echo 'hi'"
|
|
31
|
+
_unquote('hello') -> 'hello'
|
|
32
|
+
_unquote('"hello\\'') -> '"hello\\'' (mismatched, unchanged)
|
|
33
|
+
"""
|
|
34
|
+
if len(s) >= 2 and s[0] == s[-1] and s[0] in ('"', "'"):
|
|
35
|
+
return s[1:-1]
|
|
36
|
+
return s
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def parse_simple_yaml(content: str) -> dict:
|
|
40
|
+
"""Parse simple YAML with nested dict support (no dependencies).
|
|
41
|
+
|
|
42
|
+
Supports:
|
|
43
|
+
- key: value (string)
|
|
44
|
+
- key: (followed by list items)
|
|
45
|
+
- item1
|
|
46
|
+
- item2
|
|
47
|
+
- key: (followed by nested dict)
|
|
48
|
+
nested_key: value
|
|
49
|
+
nested_key2:
|
|
50
|
+
- item
|
|
51
|
+
|
|
52
|
+
Uses indentation to detect nesting (2+ spaces deeper = child).
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
content: YAML content string.
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
Parsed dict (values can be str, list[str], or dict).
|
|
59
|
+
"""
|
|
60
|
+
lines = content.splitlines()
|
|
61
|
+
result: dict = {}
|
|
62
|
+
_parse_yaml_block(lines, 0, 0, result)
|
|
63
|
+
return result
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def _parse_yaml_block(
|
|
67
|
+
lines: list[str], start: int, min_indent: int, target: dict
|
|
68
|
+
) -> int:
|
|
69
|
+
"""Parse a YAML block into target dict, returning next line index."""
|
|
70
|
+
i = start
|
|
71
|
+
current_list: list | None = None
|
|
72
|
+
|
|
73
|
+
while i < len(lines):
|
|
74
|
+
line = lines[i]
|
|
75
|
+
stripped = line.strip()
|
|
76
|
+
|
|
77
|
+
# Skip empty lines and comments
|
|
78
|
+
if not stripped or stripped.startswith("#"):
|
|
79
|
+
i += 1
|
|
80
|
+
continue
|
|
81
|
+
|
|
82
|
+
# Calculate indentation
|
|
83
|
+
indent = len(line) - len(line.lstrip())
|
|
84
|
+
|
|
85
|
+
# If dedented past our block, we're done
|
|
86
|
+
if indent < min_indent:
|
|
87
|
+
break
|
|
88
|
+
|
|
89
|
+
if stripped.startswith("- "):
|
|
90
|
+
if current_list is not None:
|
|
91
|
+
current_list.append(_unquote(stripped[2:].strip()))
|
|
92
|
+
i += 1
|
|
93
|
+
elif ":" in stripped:
|
|
94
|
+
key, _, value = stripped.partition(":")
|
|
95
|
+
key = key.strip()
|
|
96
|
+
value = _unquote(value.strip())
|
|
97
|
+
current_list = None
|
|
98
|
+
|
|
99
|
+
if value:
|
|
100
|
+
# key: value
|
|
101
|
+
target[key] = value
|
|
102
|
+
i += 1
|
|
103
|
+
else:
|
|
104
|
+
# key: (no value) — peek ahead to determine list vs nested dict
|
|
105
|
+
next_i, next_line = _next_content_line(lines, i + 1)
|
|
106
|
+
if next_i >= len(lines):
|
|
107
|
+
target[key] = {}
|
|
108
|
+
i = next_i
|
|
109
|
+
elif next_line.strip().startswith("- "):
|
|
110
|
+
# It's a list
|
|
111
|
+
current_list = []
|
|
112
|
+
target[key] = current_list
|
|
113
|
+
i += 1
|
|
114
|
+
else:
|
|
115
|
+
next_indent = len(next_line) - len(next_line.lstrip())
|
|
116
|
+
if next_indent > indent:
|
|
117
|
+
# It's a nested dict
|
|
118
|
+
nested: dict = {}
|
|
119
|
+
target[key] = nested
|
|
120
|
+
i = _parse_yaml_block(lines, i + 1, next_indent, nested)
|
|
121
|
+
else:
|
|
122
|
+
# Empty value, same or less indent follows
|
|
123
|
+
target[key] = {}
|
|
124
|
+
i += 1
|
|
125
|
+
else:
|
|
126
|
+
i += 1
|
|
127
|
+
|
|
128
|
+
return i
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def _next_content_line(lines: list[str], start: int) -> tuple[int, str]:
|
|
132
|
+
"""Find the next non-empty, non-comment line."""
|
|
133
|
+
i = start
|
|
134
|
+
while i < len(lines):
|
|
135
|
+
stripped = lines[i].strip()
|
|
136
|
+
if stripped and not stripped.startswith("#"):
|
|
137
|
+
return i, lines[i]
|
|
138
|
+
i += 1
|
|
139
|
+
return i, ""
|
|
15
140
|
|
|
16
141
|
|
|
17
142
|
# Defaults
|
|
@@ -27,6 +27,11 @@ from .packages_context import (
|
|
|
27
27
|
get_context_packages_text,
|
|
28
28
|
get_context_packages_json,
|
|
29
29
|
)
|
|
30
|
+
from .workflow_phase import (
|
|
31
|
+
filter_platform,
|
|
32
|
+
get_phase_index,
|
|
33
|
+
get_step,
|
|
34
|
+
)
|
|
30
35
|
|
|
31
36
|
# Backward-compatible alias — external modules import this name
|
|
32
37
|
_run_git_command = run_git
|
|
@@ -50,9 +55,17 @@ def main() -> None:
|
|
|
50
55
|
parser.add_argument(
|
|
51
56
|
"--mode",
|
|
52
57
|
"-m",
|
|
53
|
-
choices=["default", "record", "packages"],
|
|
58
|
+
choices=["default", "record", "packages", "phase"],
|
|
54
59
|
default="default",
|
|
55
|
-
help="Output mode: default (full context), record (for record-session), packages (package info only)",
|
|
60
|
+
help="Output mode: default (full context), record (for record-session), packages (package info only), phase (workflow step extraction)",
|
|
61
|
+
)
|
|
62
|
+
parser.add_argument(
|
|
63
|
+
"--step",
|
|
64
|
+
help="Step id for --mode phase, e.g. 1.1, 2.2. Omit to get the Phase Index.",
|
|
65
|
+
)
|
|
66
|
+
parser.add_argument(
|
|
67
|
+
"--platform",
|
|
68
|
+
help="Platform name for --mode phase, e.g. cursor, claude-code. Filters platform-tagged blocks.",
|
|
56
69
|
)
|
|
57
70
|
|
|
58
71
|
args = parser.parse_args()
|
|
@@ -67,6 +80,16 @@ def main() -> None:
|
|
|
67
80
|
print(json.dumps(get_context_packages_json(), indent=2, ensure_ascii=False))
|
|
68
81
|
else:
|
|
69
82
|
print(get_context_packages_text())
|
|
83
|
+
elif args.mode == "phase":
|
|
84
|
+
content = get_step(args.step) if args.step else get_phase_index()
|
|
85
|
+
if not content.strip():
|
|
86
|
+
if args.step:
|
|
87
|
+
parser.exit(2, f"Step not found: {args.step}\n")
|
|
88
|
+
else:
|
|
89
|
+
parser.exit(2, "Phase Index section not found in workflow.md\n")
|
|
90
|
+
if args.platform:
|
|
91
|
+
content = filter_platform(content, args.platform)
|
|
92
|
+
print(content, end="")
|
|
70
93
|
else:
|
|
71
94
|
if args.json:
|
|
72
95
|
output_json()
|
|
@@ -65,24 +65,11 @@ def get_check_context(repo_root: Path) -> list[dict]:
|
|
|
65
65
|
"""Get check context entries."""
|
|
66
66
|
adapter = get_cli_adapter_auto(repo_root)
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
return [
|
|
69
69
|
{"file": adapter.get_trellis_command_path("finish-work"), "reason": "Finish work checklist"},
|
|
70
70
|
{"file": adapter.get_trellis_command_path("check"), "reason": "Code quality check spec"},
|
|
71
71
|
]
|
|
72
72
|
|
|
73
|
-
return entries
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
def get_debug_context(repo_root: Path) -> list[dict]:
|
|
77
|
-
"""Get debug context entries."""
|
|
78
|
-
adapter = get_cli_adapter_auto(repo_root)
|
|
79
|
-
|
|
80
|
-
entries: list[dict] = [
|
|
81
|
-
{"file": adapter.get_trellis_command_path("check"), "reason": "Code quality check spec"},
|
|
82
|
-
]
|
|
83
|
-
|
|
84
|
-
return entries
|
|
85
|
-
|
|
86
73
|
|
|
87
74
|
def _write_jsonl(path: Path, entries: list[dict]) -> None:
|
|
88
75
|
"""Write entries to JSONL file."""
|
|
@@ -175,13 +162,6 @@ def cmd_init_context(args: argparse.Namespace) -> int:
|
|
|
175
162
|
_write_jsonl(check_file, check_entries)
|
|
176
163
|
print(f" {colored('✓', Colors.GREEN)} {len(check_entries)} entries")
|
|
177
164
|
|
|
178
|
-
# debug.jsonl
|
|
179
|
-
print(colored("Creating debug.jsonl...", Colors.CYAN))
|
|
180
|
-
debug_entries = get_debug_context(repo_root)
|
|
181
|
-
debug_file = target_dir / "debug.jsonl"
|
|
182
|
-
_write_jsonl(debug_file, debug_entries)
|
|
183
|
-
print(f" {colored('✓', Colors.GREEN)} {len(debug_entries)} entries")
|
|
184
|
-
|
|
185
165
|
# Update task.json dev_type and package
|
|
186
166
|
task_json_path = target_dir / FILE_TASK_JSON
|
|
187
167
|
if task_json_path.is_file():
|
|
@@ -299,7 +279,7 @@ def cmd_validate(args: argparse.Namespace) -> int:
|
|
|
299
279
|
print()
|
|
300
280
|
|
|
301
281
|
total_errors = 0
|
|
302
|
-
for jsonl_name in ["implement.jsonl", "check.jsonl"
|
|
282
|
+
for jsonl_name in ["implement.jsonl", "check.jsonl"]:
|
|
303
283
|
jsonl_file = target_dir / jsonl_name
|
|
304
284
|
errors = _validate_jsonl(jsonl_file, repo_root)
|
|
305
285
|
total_errors += errors
|
|
@@ -377,7 +357,7 @@ def cmd_list_context(args: argparse.Namespace) -> int:
|
|
|
377
357
|
print(colored("=== Context Files ===", Colors.BLUE))
|
|
378
358
|
print()
|
|
379
359
|
|
|
380
|
-
for jsonl_name in ["implement.jsonl", "check.jsonl"
|
|
360
|
+
for jsonl_name in ["implement.jsonl", "check.jsonl"]:
|
|
381
361
|
jsonl_file = target_dir / jsonl_name
|
|
382
362
|
if not jsonl_file.is_file():
|
|
383
363
|
continue
|
|
@@ -161,15 +161,6 @@ def cmd_create(args: argparse.Namespace) -> int:
|
|
|
161
161
|
"branch": None,
|
|
162
162
|
"base_branch": current_branch,
|
|
163
163
|
"worktree_path": None,
|
|
164
|
-
"current_phase": 0,
|
|
165
|
-
"next_action": [
|
|
166
|
-
{"phase": 1, "action": "brainstorm"},
|
|
167
|
-
{"phase": 2, "action": "research"},
|
|
168
|
-
{"phase": 3, "action": "implement"},
|
|
169
|
-
{"phase": 4, "action": "check"},
|
|
170
|
-
{"phase": 5, "action": "update-spec"},
|
|
171
|
-
{"phase": 6, "action": "record-session"},
|
|
172
|
-
],
|
|
173
164
|
"commit": None,
|
|
174
165
|
"pr_url": None,
|
|
175
166
|
"subtasks": [],
|
|
@@ -464,9 +455,6 @@ def cmd_set_branch(args: argparse.Namespace) -> int:
|
|
|
464
455
|
write_json(task_json, data)
|
|
465
456
|
|
|
466
457
|
print(colored(f"✓ Branch set to: {branch}", Colors.GREEN))
|
|
467
|
-
print()
|
|
468
|
-
print(colored("Now you can start the multi-agent pipeline:", Colors.BLUE))
|
|
469
|
-
print(f" python3 ./.trellis/scripts/multi_agent/start.py {args.dir}")
|
|
470
458
|
return 0
|
|
471
459
|
|
|
472
460
|
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
Workflow Phase Extraction.
|
|
5
|
+
|
|
6
|
+
Extracts step-level content from .trellis/workflow.md and optionally filters
|
|
7
|
+
platform-specific blocks.
|
|
8
|
+
|
|
9
|
+
Platform marker syntax in workflow.md:
|
|
10
|
+
|
|
11
|
+
[Claude Code, Cursor, ...]
|
|
12
|
+
agent-capable content
|
|
13
|
+
[/Claude Code, Cursor, ...]
|
|
14
|
+
|
|
15
|
+
Provides:
|
|
16
|
+
get_phase_index - Extract the Phase Index section (no --step)
|
|
17
|
+
get_step - Extract a single step (#### X.X) section
|
|
18
|
+
filter_platform - Strip platform blocks that don't include the given name
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
import re
|
|
24
|
+
|
|
25
|
+
from .paths import DIR_WORKFLOW, get_repo_root
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _workflow_md_path():
|
|
29
|
+
return get_repo_root() / DIR_WORKFLOW / "workflow.md"
|
|
30
|
+
|
|
31
|
+
# Match a line that *is* a platform marker: "[A, B, C]" or "[/A, B, C]"
|
|
32
|
+
_MARKER_RE = re.compile(r"^\[(/?)([A-Za-z][^\[\]]*)\]\s*$")
|
|
33
|
+
|
|
34
|
+
# Step heading: "#### 1.0 Title" or "#### 1.0 ..."
|
|
35
|
+
_STEP_HEADING_RE = re.compile(r"^####\s+(\d+\.\d+)\b.*$")
|
|
36
|
+
|
|
37
|
+
# Phase Index starts here; Phase 1/2/3 step bodies follow; ends at Breadcrumbs.
|
|
38
|
+
_PHASE_INDEX_HEADING = "## Phase Index"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _read_workflow() -> str:
|
|
42
|
+
path = _workflow_md_path()
|
|
43
|
+
if not path.exists():
|
|
44
|
+
raise FileNotFoundError(f"workflow.md not found: {path}")
|
|
45
|
+
return path.read_text(encoding="utf-8")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def _parse_marker(line: str) -> tuple[bool, list[str]] | None:
|
|
49
|
+
"""Parse a platform marker line.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
(is_closing, [platform_names]) if line is a marker, else None.
|
|
53
|
+
"""
|
|
54
|
+
m = _MARKER_RE.match(line)
|
|
55
|
+
if not m:
|
|
56
|
+
return None
|
|
57
|
+
is_closing = m.group(1) == "/"
|
|
58
|
+
names = [p.strip() for p in m.group(2).split(",") if p.strip()]
|
|
59
|
+
return is_closing, names
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def get_phase_index() -> str:
|
|
63
|
+
"""Return Phase Index + Phase 1/2/3 step bodies from workflow.md.
|
|
64
|
+
|
|
65
|
+
Matches what the SessionStart hook injects into the `<workflow>` block:
|
|
66
|
+
starts at `## Phase Index`, continues through `## Phase 1: Plan`,
|
|
67
|
+
`## Phase 2: Execute`, `## Phase 3: Finish`, stops at
|
|
68
|
+
`## Workflow State Breadcrumbs` (consumed by UserPromptSubmit hook).
|
|
69
|
+
"""
|
|
70
|
+
text = _read_workflow()
|
|
71
|
+
lines = text.splitlines()
|
|
72
|
+
|
|
73
|
+
start: int | None = None
|
|
74
|
+
end: int | None = None
|
|
75
|
+
for i, line in enumerate(lines):
|
|
76
|
+
stripped = line.strip()
|
|
77
|
+
if start is None and stripped == _PHASE_INDEX_HEADING:
|
|
78
|
+
start = i
|
|
79
|
+
continue
|
|
80
|
+
if start is not None and stripped == "## Workflow State Breadcrumbs":
|
|
81
|
+
end = i
|
|
82
|
+
break
|
|
83
|
+
|
|
84
|
+
if start is None:
|
|
85
|
+
return ""
|
|
86
|
+
if end is None:
|
|
87
|
+
end = len(lines)
|
|
88
|
+
return "\n".join(lines[start:end]).rstrip() + "\n"
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def get_step(step_id: str) -> str:
|
|
92
|
+
"""Return the `#### X.X` section matching step_id (header + body).
|
|
93
|
+
|
|
94
|
+
Body ends at the next `####` or `---` or `##` heading (whichever comes first).
|
|
95
|
+
"""
|
|
96
|
+
text = _read_workflow()
|
|
97
|
+
lines = text.splitlines()
|
|
98
|
+
|
|
99
|
+
start: int | None = None
|
|
100
|
+
for i, line in enumerate(lines):
|
|
101
|
+
m = _STEP_HEADING_RE.match(line)
|
|
102
|
+
if m and m.group(1) == step_id:
|
|
103
|
+
start = i
|
|
104
|
+
break
|
|
105
|
+
if start is None:
|
|
106
|
+
return ""
|
|
107
|
+
|
|
108
|
+
end: int = len(lines)
|
|
109
|
+
for j in range(start + 1, len(lines)):
|
|
110
|
+
line = lines[j]
|
|
111
|
+
if line.startswith("#### "):
|
|
112
|
+
end = j
|
|
113
|
+
break
|
|
114
|
+
if line.startswith("## "):
|
|
115
|
+
end = j
|
|
116
|
+
break
|
|
117
|
+
# Horizontal rule at column 0
|
|
118
|
+
if line.strip() == "---":
|
|
119
|
+
end = j
|
|
120
|
+
break
|
|
121
|
+
|
|
122
|
+
return "\n".join(lines[start:end]).rstrip() + "\n"
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _platform_matches(platform: str, block_names: list[str]) -> bool:
|
|
126
|
+
"""Case-insensitive fuzzy match: accept 'cursor', 'Cursor', 'claude-code', 'Claude Code'."""
|
|
127
|
+
needle = platform.lower().replace("-", "").replace("_", "").replace(" ", "")
|
|
128
|
+
for name in block_names:
|
|
129
|
+
hay = name.lower().replace("-", "").replace("_", "").replace(" ", "")
|
|
130
|
+
if needle == hay:
|
|
131
|
+
return True
|
|
132
|
+
return False
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def filter_platform(content: str, platform: str) -> str:
|
|
136
|
+
"""Keep lines outside any `[...]` block + lines inside blocks that include platform.
|
|
137
|
+
|
|
138
|
+
Marker lines themselves are dropped from the output.
|
|
139
|
+
"""
|
|
140
|
+
lines = content.splitlines()
|
|
141
|
+
out: list[str] = []
|
|
142
|
+
|
|
143
|
+
in_block = False
|
|
144
|
+
keep_block = False
|
|
145
|
+
|
|
146
|
+
for line in lines:
|
|
147
|
+
marker = _parse_marker(line)
|
|
148
|
+
if marker is not None:
|
|
149
|
+
is_closing, names = marker
|
|
150
|
+
if not is_closing:
|
|
151
|
+
in_block = True
|
|
152
|
+
keep_block = _platform_matches(platform, names)
|
|
153
|
+
else:
|
|
154
|
+
in_block = False
|
|
155
|
+
keep_block = False
|
|
156
|
+
continue # drop the marker line itself
|
|
157
|
+
|
|
158
|
+
if in_block:
|
|
159
|
+
if keep_block:
|
|
160
|
+
out.append(line)
|
|
161
|
+
continue
|
|
162
|
+
out.append(line)
|
|
163
|
+
|
|
164
|
+
# Collapse runs of 3+ blank lines that may arise from dropped markers
|
|
165
|
+
collapsed: list[str] = []
|
|
166
|
+
blank_run = 0
|
|
167
|
+
for line in out:
|
|
168
|
+
if line.strip() == "":
|
|
169
|
+
blank_run += 1
|
|
170
|
+
if blank_run <= 2:
|
|
171
|
+
collapsed.append(line)
|
|
172
|
+
else:
|
|
173
|
+
blank_run = 0
|
|
174
|
+
collapsed.append(line)
|
|
175
|
+
|
|
176
|
+
return "\n".join(collapsed).rstrip() + "\n"
|