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