@mindfoldhq/trellis 0.4.0 → 0.5.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +0 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/init.d.ts +10 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +382 -120
- 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 +178 -61
- 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 +146 -100
- 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 +7 -25
- package/dist/configurators/opencode.d.ts.map +1 -1
- package/dist/configurators/opencode.js +57 -56
- package/dist/configurators/opencode.js.map +1 -1
- package/dist/configurators/qoder.d.ts +6 -3
- package/dist/configurators/qoder.d.ts.map +1 -1
- package/dist/configurators/qoder.js +27 -46
- package/dist/configurators/qoder.js.map +1 -1
- package/dist/configurators/shared.d.ts +68 -3
- package/dist/configurators/shared.d.ts.map +1 -1
- package/dist/configurators/shared.js +274 -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 +1646 -0
- package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
- package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
- package/dist/templates/claude/agents/{check.md → trellis-check.md} +3 -31
- package/dist/templates/claude/agents/{implement.md → trellis-implement.md} +1 -2
- package/dist/templates/claude/agents/trellis-research.md +137 -0
- 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 +6 -4
- package/dist/templates/{iflow/agents/check.md → codebuddy/agents/trellis-check.md} +3 -31
- package/dist/templates/{iflow/agents/implement.md → codebuddy/agents/trellis-implement.md} +1 -2
- package/dist/templates/codebuddy/agents/trellis-research.md +137 -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/trellis-check.toml +38 -0
- package/dist/templates/codex/agents/{implement.toml → trellis-implement.toml} +1 -1
- package/dist/templates/codex/agents/trellis-research.toml +60 -0
- 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/codex/skills/start/SKILL.md +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/{droid/commands/trellis → common/skills}/brainstorm.md +51 -12
- package/dist/templates/{iflow/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/copilot/prompts/start.prompt.md +13 -16
- package/dist/templates/cursor/agents/trellis-check.md +94 -0
- package/dist/templates/cursor/agents/trellis-implement.md +94 -0
- package/dist/templates/cursor/agents/trellis-research.md +137 -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/trellis-check.md +94 -0
- package/dist/templates/droid/droids/trellis-implement.md +94 -0
- package/dist/templates/droid/droids/trellis-research.md +137 -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/trellis-check.md +94 -0
- package/dist/templates/gemini/agents/trellis-implement.md +94 -0
- package/dist/templates/gemini/agents/trellis-research.md +137 -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/trellis-check.json +13 -0
- package/dist/templates/kiro/agents/trellis-implement.json +13 -0
- package/dist/templates/kiro/agents/trellis-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 → trellis-check.md} +3 -30
- package/dist/templates/opencode/agents/{implement.md → trellis-implement.md} +1 -1
- package/dist/templates/opencode/agents/{research.md → trellis-research.md} +1 -2
- package/dist/templates/opencode/plugins/inject-subagent-context.js +18 -190
- package/dist/templates/opencode/plugins/inject-workflow-state.js +172 -0
- package/dist/templates/opencode/plugins/session-start.js +76 -39
- package/dist/templates/qoder/agents/trellis-check.md +94 -0
- package/dist/templates/qoder/agents/trellis-implement.md +94 -0
- package/dist/templates/qoder/agents/trellis-research.md +137 -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 +77 -266
- package/dist/templates/shared-hooks/inject-workflow-state.py +244 -0
- package/dist/templates/{claude/hooks → shared-hooks}/session-start.py +172 -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/config.yaml +6 -0
- package/dist/templates/trellis/index.d.ts +1 -15
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +2 -29
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/cli_adapter.py +31 -8
- 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 +23 -28
- package/dist/templates/trellis/scripts/common/task_store.py +0 -12
- package/dist/templates/trellis/scripts/common/types.py +0 -2
- package/dist/templates/trellis/scripts/common/workflow_phase.py +176 -0
- package/dist/templates/trellis/scripts/task.py +13 -35
- package/dist/templates/trellis/workflow.md +283 -298
- package/dist/types/ai-tools.d.ts +30 -3
- package/dist/types/ai-tools.d.ts.map +1 -1
- package/dist/types/ai-tools.js +119 -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/dist/utils/project-detector.d.ts +2 -0
- package/dist/utils/project-detector.d.ts.map +1 -1
- package/dist/utils/project-detector.js +120 -11
- package/dist/utils/project-detector.js.map +1 -1
- package/dist/utils/task-json.d.ts +46 -0
- package/dist/utils/task-json.d.ts.map +1 -0
- package/dist/utils/task-json.js +49 -0
- package/dist/utils/task-json.js.map +1 -0
- 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/agents/research.md +0 -120
- 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/brainstorm.md +0 -487
- 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/agents/check.toml +0 -23
- package/dist/templates/codex/agents/research.toml +0 -26
- 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/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/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/markdown/spec/backend/directory-structure.md +0 -292
- package/dist/templates/markdown/spec/backend/index.md +0 -40
- package/dist/templates/markdown/spec/backend/script-conventions.md +0 -742
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +0 -118
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +0 -394
- 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/break-loop.md +0 -125
- 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/create_bootstrap.py +0 -298
- 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,403 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
"""
|
|
4
|
-
Session Start Hook - Inject structured context
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
# IMPORTANT: Suppress all warnings FIRST
|
|
8
|
-
import warnings
|
|
9
|
-
warnings.filterwarnings("ignore")
|
|
10
|
-
|
|
11
|
-
import json
|
|
12
|
-
import os
|
|
13
|
-
import subprocess
|
|
14
|
-
import sys
|
|
15
|
-
from io import StringIO
|
|
16
|
-
from pathlib import Path
|
|
17
|
-
|
|
18
|
-
# IMPORTANT: Force stdout to use UTF-8 on Windows
|
|
19
|
-
# This fixes UnicodeEncodeError when outputting non-ASCII characters
|
|
20
|
-
if sys.platform == "win32":
|
|
21
|
-
import io as _io
|
|
22
|
-
if hasattr(sys.stdout, "reconfigure"):
|
|
23
|
-
sys.stdout.reconfigure(encoding="utf-8", errors="replace") # type: ignore[union-attr]
|
|
24
|
-
elif hasattr(sys.stdout, "detach"):
|
|
25
|
-
sys.stdout = _io.TextIOWrapper(sys.stdout.detach(), encoding="utf-8", errors="replace") # type: ignore[union-attr]
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def should_skip_injection() -> bool:
|
|
29
|
-
return (
|
|
30
|
-
os.environ.get("CLAUDE_NON_INTERACTIVE") == "1"
|
|
31
|
-
or os.environ.get("OPENCODE_NON_INTERACTIVE") == "1"
|
|
32
|
-
or os.environ.get("IFLOW_NON_INTERACTIVE") == "1"
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def read_file(path: Path, fallback: str = "") -> str:
|
|
37
|
-
try:
|
|
38
|
-
return path.read_text(encoding="utf-8")
|
|
39
|
-
except (FileNotFoundError, PermissionError):
|
|
40
|
-
return fallback
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
def run_script(script_path: Path) -> str:
|
|
44
|
-
try:
|
|
45
|
-
if script_path.suffix == ".py":
|
|
46
|
-
# Add PYTHONIOENCODING to force UTF-8 in subprocess
|
|
47
|
-
env = os.environ.copy()
|
|
48
|
-
env["PYTHONIOENCODING"] = "utf-8"
|
|
49
|
-
cmd = [sys.executable, "-W", "ignore", str(script_path)]
|
|
50
|
-
else:
|
|
51
|
-
env = os.environ
|
|
52
|
-
cmd = [str(script_path)]
|
|
53
|
-
|
|
54
|
-
result = subprocess.run(
|
|
55
|
-
cmd,
|
|
56
|
-
capture_output=True,
|
|
57
|
-
text=True,
|
|
58
|
-
encoding="utf-8",
|
|
59
|
-
errors="replace",
|
|
60
|
-
timeout=5,
|
|
61
|
-
cwd=script_path.parent.parent.parent,
|
|
62
|
-
env=env,
|
|
63
|
-
)
|
|
64
|
-
return result.stdout if result.returncode == 0 else "No context available"
|
|
65
|
-
except (subprocess.TimeoutExpired, FileNotFoundError, PermissionError):
|
|
66
|
-
return "No context available"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def _normalize_task_ref(task_ref: str) -> str:
|
|
70
|
-
normalized = task_ref.strip()
|
|
71
|
-
if not normalized:
|
|
72
|
-
return ""
|
|
73
|
-
|
|
74
|
-
path_obj = Path(normalized)
|
|
75
|
-
if path_obj.is_absolute():
|
|
76
|
-
return str(path_obj)
|
|
77
|
-
|
|
78
|
-
normalized = normalized.replace("\\", "/")
|
|
79
|
-
while normalized.startswith("./"):
|
|
80
|
-
normalized = normalized[2:]
|
|
81
|
-
|
|
82
|
-
if normalized.startswith("tasks/"):
|
|
83
|
-
return f".trellis/{normalized}"
|
|
84
|
-
|
|
85
|
-
return normalized
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
def _resolve_task_dir(trellis_dir: Path, task_ref: str) -> Path:
|
|
89
|
-
normalized = _normalize_task_ref(task_ref)
|
|
90
|
-
path_obj = Path(normalized)
|
|
91
|
-
if path_obj.is_absolute():
|
|
92
|
-
return path_obj
|
|
93
|
-
if normalized.startswith(".trellis/"):
|
|
94
|
-
return trellis_dir.parent / path_obj
|
|
95
|
-
return trellis_dir / "tasks" / path_obj
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
def _get_task_status(trellis_dir: Path) -> str:
|
|
99
|
-
"""Check current task status and return structured status string."""
|
|
100
|
-
current_task_file = trellis_dir / ".current-task"
|
|
101
|
-
if not current_task_file.is_file():
|
|
102
|
-
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
103
|
-
|
|
104
|
-
task_ref = _normalize_task_ref(current_task_file.read_text(encoding="utf-8").strip())
|
|
105
|
-
if not task_ref:
|
|
106
|
-
return "Status: NO ACTIVE TASK\nNext: Describe what you want to work on"
|
|
107
|
-
|
|
108
|
-
# Resolve task directory
|
|
109
|
-
task_dir = _resolve_task_dir(trellis_dir, task_ref)
|
|
110
|
-
if not task_dir.is_dir():
|
|
111
|
-
return f"Status: STALE POINTER\nTask: {task_ref}\nNext: Task directory not found. Run: python3 ./.trellis/scripts/task.py finish"
|
|
112
|
-
|
|
113
|
-
# Read task.json
|
|
114
|
-
task_json_path = task_dir / "task.json"
|
|
115
|
-
task_data = {}
|
|
116
|
-
if task_json_path.is_file():
|
|
117
|
-
try:
|
|
118
|
-
task_data = json.loads(task_json_path.read_text(encoding="utf-8"))
|
|
119
|
-
except (json.JSONDecodeError, PermissionError):
|
|
120
|
-
pass
|
|
121
|
-
|
|
122
|
-
task_title = task_data.get("title", task_ref)
|
|
123
|
-
task_status = task_data.get("status", "unknown")
|
|
124
|
-
|
|
125
|
-
if task_status == "completed":
|
|
126
|
-
return f"Status: COMPLETED\nTask: {task_title}\nNext: Archive with `python3 ./.trellis/scripts/task.py archive {task_dir.name}` or start a new task"
|
|
127
|
-
|
|
128
|
-
# Check if context is configured (jsonl files exist and non-empty)
|
|
129
|
-
has_context = False
|
|
130
|
-
for jsonl_name in ("implement.jsonl", "check.jsonl", "spec.jsonl"):
|
|
131
|
-
jsonl_path = task_dir / jsonl_name
|
|
132
|
-
if jsonl_path.is_file() and jsonl_path.stat().st_size > 0:
|
|
133
|
-
has_context = True
|
|
134
|
-
break
|
|
135
|
-
|
|
136
|
-
has_prd = (task_dir / "prd.md").is_file()
|
|
137
|
-
|
|
138
|
-
if not has_prd:
|
|
139
|
-
return f"Status: NOT READY\nTask: {task_title}\nMissing: prd.md not created\nNext: Write PRD, then research → init-context → start"
|
|
140
|
-
|
|
141
|
-
if not has_context:
|
|
142
|
-
return f"Status: NOT READY\nTask: {task_title}\nMissing: Context not configured (no jsonl files)\nNext: Complete Phase 2 (research → init-context → start) before implementing"
|
|
143
|
-
|
|
144
|
-
return f"Status: READY\nTask: {task_title}\nNext: Continue with implement or check"
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
def _load_trellis_config(trellis_dir: Path) -> tuple:
|
|
148
|
-
"""Load Trellis config for session-start decisions.
|
|
149
|
-
|
|
150
|
-
Returns:
|
|
151
|
-
(is_mono, packages_dict, spec_scope, task_pkg, default_pkg)
|
|
152
|
-
"""
|
|
153
|
-
scripts_dir = trellis_dir / "scripts"
|
|
154
|
-
if str(scripts_dir) not in sys.path:
|
|
155
|
-
sys.path.insert(0, str(scripts_dir))
|
|
156
|
-
|
|
157
|
-
try:
|
|
158
|
-
from common.config import get_default_package, get_packages, get_spec_scope, is_monorepo # type: ignore[import-not-found]
|
|
159
|
-
from common.paths import get_current_task # type: ignore[import-not-found]
|
|
160
|
-
|
|
161
|
-
repo_root = trellis_dir.parent
|
|
162
|
-
is_mono = is_monorepo(repo_root)
|
|
163
|
-
packages = get_packages(repo_root) or {}
|
|
164
|
-
scope = get_spec_scope(repo_root)
|
|
165
|
-
|
|
166
|
-
# Get active task's package
|
|
167
|
-
task_pkg = None
|
|
168
|
-
current = get_current_task(repo_root)
|
|
169
|
-
if current:
|
|
170
|
-
task_json = repo_root / current / "task.json"
|
|
171
|
-
if task_json.is_file():
|
|
172
|
-
try:
|
|
173
|
-
data = json.loads(task_json.read_text(encoding="utf-8"))
|
|
174
|
-
if isinstance(data, dict):
|
|
175
|
-
tp = data.get("package")
|
|
176
|
-
if isinstance(tp, str) and tp:
|
|
177
|
-
task_pkg = tp
|
|
178
|
-
except (json.JSONDecodeError, OSError):
|
|
179
|
-
pass
|
|
180
|
-
|
|
181
|
-
default_pkg = get_default_package(repo_root)
|
|
182
|
-
return is_mono, packages, scope, task_pkg, default_pkg
|
|
183
|
-
except Exception:
|
|
184
|
-
return False, {}, None, None, None
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
def _check_legacy_spec(trellis_dir: Path, is_mono: bool, packages: dict) -> str | None:
|
|
188
|
-
"""Check for legacy spec directory structure in monorepo."""
|
|
189
|
-
if not is_mono or not packages:
|
|
190
|
-
return None
|
|
191
|
-
|
|
192
|
-
spec_dir = trellis_dir / "spec"
|
|
193
|
-
if not spec_dir.is_dir():
|
|
194
|
-
return None
|
|
195
|
-
|
|
196
|
-
has_legacy = False
|
|
197
|
-
for legacy_name in ("backend", "frontend"):
|
|
198
|
-
legacy_dir = spec_dir / legacy_name
|
|
199
|
-
if legacy_dir.is_dir() and (legacy_dir / "index.md").is_file():
|
|
200
|
-
has_legacy = True
|
|
201
|
-
break
|
|
202
|
-
|
|
203
|
-
if not has_legacy:
|
|
204
|
-
return None
|
|
205
|
-
|
|
206
|
-
missing = [
|
|
207
|
-
name for name in sorted(packages.keys())
|
|
208
|
-
if not (spec_dir / name).is_dir()
|
|
209
|
-
]
|
|
210
|
-
|
|
211
|
-
if not missing:
|
|
212
|
-
return None
|
|
213
|
-
|
|
214
|
-
if len(missing) == len(packages):
|
|
215
|
-
return (
|
|
216
|
-
f"[!] Legacy spec structure detected: found `spec/backend/` or `spec/frontend/` "
|
|
217
|
-
f"but no package-scoped `spec/<package>/` directories.\n"
|
|
218
|
-
f"Monorepo packages: {', '.join(sorted(packages.keys()))}\n"
|
|
219
|
-
f"Please reorganize: `spec/backend/` -> `spec/<package>/backend/`"
|
|
220
|
-
)
|
|
221
|
-
return (
|
|
222
|
-
f"[!] Partial spec migration detected: packages {', '.join(missing)} "
|
|
223
|
-
f"still missing `spec/<pkg>/` directory.\n"
|
|
224
|
-
f"Please complete migration for all packages."
|
|
225
|
-
)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
def _resolve_spec_scope(
|
|
229
|
-
is_mono: bool,
|
|
230
|
-
packages: dict,
|
|
231
|
-
scope,
|
|
232
|
-
task_pkg: str | None,
|
|
233
|
-
default_pkg: str | None,
|
|
234
|
-
) -> set | None:
|
|
235
|
-
"""Resolve which packages should have their specs injected."""
|
|
236
|
-
if not is_mono or not packages:
|
|
237
|
-
return None
|
|
238
|
-
|
|
239
|
-
if scope is None:
|
|
240
|
-
return None
|
|
241
|
-
|
|
242
|
-
if isinstance(scope, str) and scope == "active_task":
|
|
243
|
-
if task_pkg and task_pkg in packages:
|
|
244
|
-
return {task_pkg}
|
|
245
|
-
if default_pkg and default_pkg in packages:
|
|
246
|
-
return {default_pkg}
|
|
247
|
-
return None
|
|
248
|
-
|
|
249
|
-
if isinstance(scope, list):
|
|
250
|
-
valid = set()
|
|
251
|
-
for entry in scope:
|
|
252
|
-
if entry in packages:
|
|
253
|
-
valid.add(entry)
|
|
254
|
-
else:
|
|
255
|
-
print(
|
|
256
|
-
f"Warning: spec_scope contains unknown package: {entry}, ignoring",
|
|
257
|
-
file=sys.stderr,
|
|
258
|
-
)
|
|
259
|
-
|
|
260
|
-
if valid:
|
|
261
|
-
if task_pkg and task_pkg not in valid:
|
|
262
|
-
print(
|
|
263
|
-
f"Warning: active task package '{task_pkg}' is out of configured spec_scope",
|
|
264
|
-
file=sys.stderr,
|
|
265
|
-
)
|
|
266
|
-
return valid
|
|
267
|
-
|
|
268
|
-
print(
|
|
269
|
-
"Warning: all spec_scope entries invalid, falling back to task/default/full",
|
|
270
|
-
file=sys.stderr,
|
|
271
|
-
)
|
|
272
|
-
if task_pkg and task_pkg in packages:
|
|
273
|
-
return {task_pkg}
|
|
274
|
-
if default_pkg and default_pkg in packages:
|
|
275
|
-
return {default_pkg}
|
|
276
|
-
return None
|
|
277
|
-
|
|
278
|
-
return None
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
def _build_workflow_toc(workflow_path: Path) -> str:
|
|
282
|
-
"""Build a compact section index for workflow.md (lazy-load the full file on demand).
|
|
283
|
-
|
|
284
|
-
Replaces full-file injection to keep additionalContext payload small.
|
|
285
|
-
The full file is accessible via: Read tool on .trellis/workflow.md
|
|
286
|
-
"""
|
|
287
|
-
content = read_file(workflow_path)
|
|
288
|
-
if not content:
|
|
289
|
-
return "No workflow.md found"
|
|
290
|
-
|
|
291
|
-
toc_lines = [
|
|
292
|
-
"# Development Workflow — Section Index",
|
|
293
|
-
"Full guide: .trellis/workflow.md (read on demand)",
|
|
294
|
-
"",
|
|
295
|
-
]
|
|
296
|
-
for line in content.splitlines():
|
|
297
|
-
if line.startswith("## "):
|
|
298
|
-
toc_lines.append(line)
|
|
299
|
-
|
|
300
|
-
toc_lines += [
|
|
301
|
-
"",
|
|
302
|
-
"To read a section: use the Read tool on .trellis/workflow.md",
|
|
303
|
-
]
|
|
304
|
-
return "\n".join(toc_lines)
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
def main():
|
|
308
|
-
if should_skip_injection():
|
|
309
|
-
sys.exit(0)
|
|
310
|
-
|
|
311
|
-
# iFlow don't have an env for project, use `.` instead
|
|
312
|
-
project_dir = Path(".").resolve()
|
|
313
|
-
trellis_dir = project_dir / ".trellis"
|
|
314
|
-
|
|
315
|
-
# Load config for scope filtering and legacy detection
|
|
316
|
-
is_mono, packages, scope_config, task_pkg, default_pkg = _load_trellis_config(trellis_dir)
|
|
317
|
-
allowed_pkgs = _resolve_spec_scope(is_mono, packages, scope_config, task_pkg, default_pkg)
|
|
318
|
-
|
|
319
|
-
output = StringIO()
|
|
320
|
-
|
|
321
|
-
output.write("""<session-context>
|
|
322
|
-
You are starting a new session in a Trellis-managed project.
|
|
323
|
-
Read and follow all instructions below carefully.
|
|
324
|
-
</session-context>
|
|
325
|
-
|
|
326
|
-
""")
|
|
327
|
-
|
|
328
|
-
# Legacy migration warning
|
|
329
|
-
legacy_warning = _check_legacy_spec(trellis_dir, is_mono, packages)
|
|
330
|
-
if legacy_warning:
|
|
331
|
-
output.write(f"<migration-warning>\n{legacy_warning}\n</migration-warning>\n\n")
|
|
332
|
-
|
|
333
|
-
output.write("<current-state>\n")
|
|
334
|
-
context_script = trellis_dir / "scripts" / "get_context.py"
|
|
335
|
-
output.write(run_script(context_script))
|
|
336
|
-
output.write("\n</current-state>\n\n")
|
|
337
|
-
|
|
338
|
-
output.write("<workflow>\n")
|
|
339
|
-
output.write(_build_workflow_toc(trellis_dir / "workflow.md"))
|
|
340
|
-
output.write("\n</workflow>\n\n")
|
|
341
|
-
|
|
342
|
-
output.write("<guidelines>\n")
|
|
343
|
-
output.write("**Note**: The guidelines below are index files — they list available guideline documents and their locations.\n")
|
|
344
|
-
output.write("During actual development, you MUST read the specific guideline files listed in each index's Pre-Development Checklist.\n\n")
|
|
345
|
-
|
|
346
|
-
spec_dir = trellis_dir / "spec"
|
|
347
|
-
if spec_dir.is_dir():
|
|
348
|
-
for sub in sorted(spec_dir.iterdir()):
|
|
349
|
-
if not sub.is_dir() or sub.name.startswith("."):
|
|
350
|
-
continue
|
|
351
|
-
|
|
352
|
-
# Always include guides/ regardless of scope
|
|
353
|
-
if sub.name == "guides":
|
|
354
|
-
index_file = sub / "index.md"
|
|
355
|
-
if index_file.is_file():
|
|
356
|
-
output.write(f"## {sub.name}\n")
|
|
357
|
-
output.write(read_file(index_file))
|
|
358
|
-
output.write("\n\n")
|
|
359
|
-
continue
|
|
360
|
-
|
|
361
|
-
index_file = sub / "index.md"
|
|
362
|
-
if index_file.is_file():
|
|
363
|
-
output.write(f"## {sub.name}\n")
|
|
364
|
-
output.write(read_file(index_file))
|
|
365
|
-
output.write("\n\n")
|
|
366
|
-
else:
|
|
367
|
-
# Apply scope filter for monorepo packages
|
|
368
|
-
if allowed_pkgs is not None and sub.name not in allowed_pkgs:
|
|
369
|
-
continue
|
|
370
|
-
for nested in sorted(sub.iterdir()):
|
|
371
|
-
if not nested.is_dir():
|
|
372
|
-
continue
|
|
373
|
-
nested_index = nested / "index.md"
|
|
374
|
-
if nested_index.is_file():
|
|
375
|
-
output.write(f"## {sub.name}/{nested.name}\n")
|
|
376
|
-
output.write(read_file(nested_index))
|
|
377
|
-
output.write("\n\n")
|
|
378
|
-
|
|
379
|
-
output.write("</guidelines>\n\n")
|
|
380
|
-
|
|
381
|
-
# R2: Check task status and inject structured tag
|
|
382
|
-
task_status = _get_task_status(trellis_dir)
|
|
383
|
-
output.write(f"<task-status>\n{task_status}\n</task-status>\n\n")
|
|
384
|
-
|
|
385
|
-
output.write("""<ready>
|
|
386
|
-
Context loaded. Workflow index, project state, and guidelines are already injected above — do NOT re-read them.
|
|
387
|
-
Wait for the user's first message, then handle it following the workflow guide.
|
|
388
|
-
If there is an active task, ask whether to continue it.
|
|
389
|
-
</ready>""")
|
|
390
|
-
|
|
391
|
-
result = {
|
|
392
|
-
"hookSpecificOutput": {
|
|
393
|
-
"hookEventName": "SessionStart",
|
|
394
|
-
"additionalContext": output.getvalue(),
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
# Output JSON - stdout is already configured for UTF-8
|
|
399
|
-
print(json.dumps(result, ensure_ascii=False), flush=True)
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
if __name__ == "__main__":
|
|
403
|
-
main()
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iFlow CLI templates
|
|
3
|
-
*
|
|
4
|
-
* These are GENERIC templates for user projects.
|
|
5
|
-
* Do NOT use Trellis project's own .iflow/ directory (which may be customized).
|
|
6
|
-
*
|
|
7
|
-
* Directory structure:
|
|
8
|
-
* iflow/
|
|
9
|
-
* ├── commands/ # Slash commands
|
|
10
|
-
* ├── agents/ # Multi-agent pipeline agents
|
|
11
|
-
* ├── hooks/ # Context injection hooks
|
|
12
|
-
* └── settings.json # Settings configuration
|
|
13
|
-
*/
|
|
14
|
-
export declare const settingsTemplate: string;
|
|
15
|
-
/**
|
|
16
|
-
* Command template with name and content
|
|
17
|
-
*/
|
|
18
|
-
export interface CommandTemplate {
|
|
19
|
-
name: string;
|
|
20
|
-
content: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Agent template with name and content
|
|
24
|
-
*/
|
|
25
|
-
export interface AgentTemplate {
|
|
26
|
-
name: string;
|
|
27
|
-
content: string;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Hook template with target path and content
|
|
31
|
-
*/
|
|
32
|
-
export interface HookTemplate {
|
|
33
|
-
targetPath: string;
|
|
34
|
-
content: string;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Get all command templates
|
|
38
|
-
* Commands are stored in commands/trellis/ subdirectory
|
|
39
|
-
* This creates commands like /trellis:start, /trellis:finish-work, etc.
|
|
40
|
-
*/
|
|
41
|
-
export declare function getAllCommands(): CommandTemplate[];
|
|
42
|
-
/**
|
|
43
|
-
* Get all agent templates
|
|
44
|
-
*/
|
|
45
|
-
export declare function getAllAgents(): AgentTemplate[];
|
|
46
|
-
/**
|
|
47
|
-
* Get all hook templates
|
|
48
|
-
*/
|
|
49
|
-
export declare function getAllHooks(): HookTemplate[];
|
|
50
|
-
/**
|
|
51
|
-
* Get settings template
|
|
52
|
-
*/
|
|
53
|
-
export declare function getSettingsTemplate(): HookTemplate;
|
|
54
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/iflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsBH,eAAO,MAAM,gBAAgB,QAAgC,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,eAAe,EAAE,CAalD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,aAAa,EAAE,CAa9C;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,YAAY,EAAE,CAU5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CAKlD"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iFlow CLI templates
|
|
3
|
-
*
|
|
4
|
-
* These are GENERIC templates for user projects.
|
|
5
|
-
* Do NOT use Trellis project's own .iflow/ directory (which may be customized).
|
|
6
|
-
*
|
|
7
|
-
* Directory structure:
|
|
8
|
-
* iflow/
|
|
9
|
-
* ├── commands/ # Slash commands
|
|
10
|
-
* ├── agents/ # Multi-agent pipeline agents
|
|
11
|
-
* ├── hooks/ # Context injection hooks
|
|
12
|
-
* └── settings.json # Settings configuration
|
|
13
|
-
*/
|
|
14
|
-
import { readdirSync, readFileSync } from "node:fs";
|
|
15
|
-
import { dirname, join } from "node:path";
|
|
16
|
-
import { fileURLToPath } from "node:url";
|
|
17
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
-
const __dirname = dirname(__filename);
|
|
19
|
-
function readTemplate(relativePath) {
|
|
20
|
-
return readFileSync(join(__dirname, relativePath), "utf-8");
|
|
21
|
-
}
|
|
22
|
-
function listFiles(dir) {
|
|
23
|
-
try {
|
|
24
|
-
return readdirSync(join(__dirname, dir));
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// Settings
|
|
31
|
-
export const settingsTemplate = readTemplate("settings.json");
|
|
32
|
-
/**
|
|
33
|
-
* Get all command templates
|
|
34
|
-
* Commands are stored in commands/trellis/ subdirectory
|
|
35
|
-
* This creates commands like /trellis:start, /trellis:finish-work, etc.
|
|
36
|
-
*/
|
|
37
|
-
export function getAllCommands() {
|
|
38
|
-
const commands = [];
|
|
39
|
-
const files = listFiles("commands/trellis");
|
|
40
|
-
for (const file of files) {
|
|
41
|
-
if (file.endsWith(".md")) {
|
|
42
|
-
const name = file.replace(".md", "");
|
|
43
|
-
const content = readTemplate(`commands/trellis/${file}`);
|
|
44
|
-
commands.push({ name, content });
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return commands;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Get all agent templates
|
|
51
|
-
*/
|
|
52
|
-
export function getAllAgents() {
|
|
53
|
-
const agents = [];
|
|
54
|
-
const files = listFiles("agents");
|
|
55
|
-
for (const file of files) {
|
|
56
|
-
if (file.endsWith(".md")) {
|
|
57
|
-
const name = file.replace(".md", "");
|
|
58
|
-
const content = readTemplate(`agents/${file}`);
|
|
59
|
-
agents.push({ name, content });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return agents;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get all hook templates
|
|
66
|
-
*/
|
|
67
|
-
export function getAllHooks() {
|
|
68
|
-
const hooks = [];
|
|
69
|
-
const files = listFiles("hooks");
|
|
70
|
-
for (const file of files) {
|
|
71
|
-
const content = readTemplate(`hooks/${file}`);
|
|
72
|
-
hooks.push({ targetPath: `hooks/${file}`, content });
|
|
73
|
-
}
|
|
74
|
-
return hooks;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Get settings template
|
|
78
|
-
*/
|
|
79
|
-
export function getSettingsTemplate() {
|
|
80
|
-
return {
|
|
81
|
-
targetPath: "settings.json",
|
|
82
|
-
content: settingsTemplate,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/iflow/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,WAAW;AACX,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AA0B9D;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,YAAY,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,SAAS,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,UAAU,EAAE,eAAe;QAC3B,OAAO,EAAE,gBAAgB;KAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hooks": {
|
|
3
|
-
"SessionStart": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": "startup",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "command",
|
|
9
|
-
"command": "{{PYTHON_CMD}} .iflow/hooks/session-start.py",
|
|
10
|
-
"timeout": 10
|
|
11
|
-
}
|
|
12
|
-
]
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"matcher": "clear",
|
|
16
|
-
"hooks": [
|
|
17
|
-
{
|
|
18
|
-
"type": "command",
|
|
19
|
-
"command": "{{PYTHON_CMD}} .iflow/hooks/session-start.py",
|
|
20
|
-
"timeout": 10
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"matcher": "compress",
|
|
26
|
-
"hooks": [
|
|
27
|
-
{
|
|
28
|
-
"type": "command",
|
|
29
|
-
"command": "{{PYTHON_CMD}} .iflow/hooks/session-start.py",
|
|
30
|
-
"timeout": 10
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
],
|
|
35
|
-
"PreToolUse": [
|
|
36
|
-
{
|
|
37
|
-
"matcher": "task",
|
|
38
|
-
"hooks": [
|
|
39
|
-
{
|
|
40
|
-
"type": "command",
|
|
41
|
-
"command": "{{PYTHON_CMD}} .iflow/hooks/inject-subagent-context.py",
|
|
42
|
-
"timeout": 30
|
|
43
|
-
}
|
|
44
|
-
]
|
|
45
|
-
}
|
|
46
|
-
],
|
|
47
|
-
"SubagentStop": [
|
|
48
|
-
{
|
|
49
|
-
"hooks": [
|
|
50
|
-
{
|
|
51
|
-
"type": "command",
|
|
52
|
-
"command": "{{PYTHON_CMD}} .iflow/hooks/ralph-loop.py",
|
|
53
|
-
"timeout": 10
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
"enabledPlugins": {}
|
|
60
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kilo CLI templates
|
|
3
|
-
*
|
|
4
|
-
* These are GENERIC templates for user projects.
|
|
5
|
-
* Do NOT use Trellis project's own .kilocode/ directory (which may be customized).
|
|
6
|
-
*
|
|
7
|
-
* Directory structure:
|
|
8
|
-
* kilo/
|
|
9
|
-
* └── workflows/ # Workflow files
|
|
10
|
-
*/
|
|
11
|
-
export interface WorkflowTemplate {
|
|
12
|
-
name: string;
|
|
13
|
-
content: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function getAllWorkflows(): WorkflowTemplate[];
|
|
16
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/kilo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAapD"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Kilo CLI templates
|
|
3
|
-
*
|
|
4
|
-
* These are GENERIC templates for user projects.
|
|
5
|
-
* Do NOT use Trellis project's own .kilocode/ directory (which may be customized).
|
|
6
|
-
*
|
|
7
|
-
* Directory structure:
|
|
8
|
-
* kilo/
|
|
9
|
-
* └── workflows/ # Workflow files
|
|
10
|
-
*/
|
|
11
|
-
import { readdirSync, readFileSync } from "node:fs";
|
|
12
|
-
import { dirname, join } from "node:path";
|
|
13
|
-
import { fileURLToPath } from "node:url";
|
|
14
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
15
|
-
const __dirname = dirname(__filename);
|
|
16
|
-
function readTemplate(relativePath) {
|
|
17
|
-
return readFileSync(join(__dirname, relativePath), "utf-8");
|
|
18
|
-
}
|
|
19
|
-
function listFiles(dir) {
|
|
20
|
-
try {
|
|
21
|
-
return readdirSync(join(__dirname, dir));
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
export function getAllWorkflows() {
|
|
28
|
-
const workflows = [];
|
|
29
|
-
const files = listFiles("workflows");
|
|
30
|
-
for (const file of files) {
|
|
31
|
-
if (file.endsWith(".md")) {
|
|
32
|
-
const name = file.replace(".md", "");
|
|
33
|
-
const content = readTemplate(`workflows/${file}`);
|
|
34
|
-
workflows.push({ name, content });
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return workflows;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/kilo/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAOD,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;YAClD,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|