@jahanxu/trellis 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +235 -0
- package/README.md +212 -0
- package/bin/trellis.js +3 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +97 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/init.d.ts +21 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +527 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.d.ts +27 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +1289 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/configurators/antigravity.d.ts +8 -0
- package/dist/configurators/antigravity.d.ts.map +1 -0
- package/dist/configurators/antigravity.js +18 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/claude.d.ts +32 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +98 -0
- package/dist/configurators/claude.js.map +1 -0
- package/dist/configurators/codex.d.ts +8 -0
- package/dist/configurators/codex.d.ts.map +1 -0
- package/dist/configurators/codex.js +20 -0
- package/dist/configurators/codex.js.map +1 -0
- package/dist/configurators/cursor.d.ts +5 -0
- package/dist/configurators/cursor.d.ts.map +1 -0
- package/dist/configurators/cursor.js +52 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/gemini.d.ts +8 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +52 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/iflow.d.ts +33 -0
- package/dist/configurators/iflow.d.ts.map +1 -0
- package/dist/configurators/iflow.js +99 -0
- package/dist/configurators/iflow.js.map +1 -0
- package/dist/configurators/index.d.ts +55 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +220 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/kilo.d.ts +8 -0
- package/dist/configurators/kilo.d.ts.map +1 -0
- package/dist/configurators/kilo.js +51 -0
- package/dist/configurators/kilo.js.map +1 -0
- package/dist/configurators/kiro.d.ts +8 -0
- package/dist/configurators/kiro.d.ts.map +1 -0
- package/dist/configurators/kiro.js +20 -0
- package/dist/configurators/kiro.js.map +1 -0
- package/dist/configurators/opencode.d.ts +32 -0
- package/dist/configurators/opencode.d.ts.map +1 -0
- package/dist/configurators/opencode.js +92 -0
- package/dist/configurators/opencode.js.map +1 -0
- package/dist/configurators/shared.d.ts +12 -0
- package/dist/configurators/shared.d.ts.map +1 -0
- package/dist/configurators/shared.js +21 -0
- package/dist/configurators/shared.js.map +1 -0
- package/dist/configurators/workflow.d.ts +28 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +134 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/constants/paths.d.ts +68 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +77 -0
- package/dist/constants/paths.js.map +1 -0
- package/dist/constants/version.d.ts +9 -0
- package/dist/constants/version.d.ts.map +1 -0
- package/dist/constants/version.js +15 -0
- package/dist/constants/version.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/index.d.ts +54 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +160 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/manifests/0.1.9.json +30 -0
- package/dist/migrations/manifests/0.2.0.json +49 -0
- package/dist/migrations/manifests/0.2.12.json +9 -0
- package/dist/migrations/manifests/0.2.13.json +9 -0
- package/dist/migrations/manifests/0.2.14.json +175 -0
- package/dist/migrations/manifests/0.2.15.json +33 -0
- package/dist/migrations/manifests/0.3.0-beta.0.json +278 -0
- package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
- package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
- package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
- package/dist/migrations/manifests/0.3.0.json +11 -0
- package/dist/templates/antigravity/index.d.ts +12 -0
- package/dist/templates/antigravity/index.d.ts.map +1 -0
- package/dist/templates/antigravity/index.js +29 -0
- package/dist/templates/antigravity/index.js.map +1 -0
- package/dist/templates/claude/agents/check.md +122 -0
- package/dist/templates/claude/agents/debug.md +106 -0
- package/dist/templates/claude/agents/dispatch.md +214 -0
- package/dist/templates/claude/agents/implement.md +96 -0
- package/dist/templates/claude/agents/plan.md +396 -0
- package/dist/templates/claude/agents/research.md +120 -0
- package/dist/templates/claude/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/claude/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/claude/commands/trellis/before-role-work.md +364 -0
- package/dist/templates/claude/commands/trellis/brainstorm.md +474 -0
- package/dist/templates/claude/commands/trellis/break-loop.md +125 -0
- package/dist/templates/claude/commands/trellis/check-backend.md +13 -0
- package/dist/templates/claude/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/claude/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/claude/commands/trellis/create-command.md +154 -0
- package/dist/templates/claude/commands/trellis/finish-work.md +153 -0
- package/dist/templates/claude/commands/trellis/handoff.md +445 -0
- package/dist/templates/claude/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/claude/commands/trellis/onboard.md +358 -0
- package/dist/templates/claude/commands/trellis/parallel.md +193 -0
- package/dist/templates/claude/commands/trellis/pick-task.md +515 -0
- package/dist/templates/claude/commands/trellis/record-session.md +62 -0
- package/dist/templates/claude/commands/trellis/start.md +373 -0
- package/dist/templates/claude/commands/trellis/update-spec.md +354 -0
- package/dist/templates/claude/hooks/inject-subagent-context.py +873 -0
- package/dist/templates/claude/hooks/ralph-loop.py +388 -0
- package/dist/templates/claude/hooks/session-start.py +200 -0
- package/dist/templates/claude/index.d.ts +54 -0
- package/dist/templates/claude/index.d.ts.map +1 -0
- package/dist/templates/claude/index.js +85 -0
- package/dist/templates/claude/index.js.map +1 -0
- package/dist/templates/claude/settings.json +41 -0
- package/dist/templates/codex/index.d.ts +18 -0
- package/dist/templates/codex/index.d.ts.map +1 -0
- package/dist/templates/codex/index.js +40 -0
- package/dist/templates/codex/index.js.map +1 -0
- package/dist/templates/codex/skills/before-backend-dev/SKILL.md +18 -0
- package/dist/templates/codex/skills/before-frontend-dev/SKILL.md +18 -0
- package/dist/templates/codex/skills/brainstorm/SKILL.md +479 -0
- package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
- package/dist/templates/codex/skills/check-backend/SKILL.md +18 -0
- package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
- package/dist/templates/codex/skills/check-frontend/SKILL.md +18 -0
- package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
- package/dist/templates/codex/skills/finish-work/SKILL.md +148 -0
- package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
- package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
- package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
- package/dist/templates/codex/skills/start/SKILL.md +330 -0
- package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
- package/dist/templates/cursor/commands/trellis-before-backend-dev.md +13 -0
- package/dist/templates/cursor/commands/trellis-before-frontend-dev.md +13 -0
- package/dist/templates/cursor/commands/trellis-brainstorm.md +474 -0
- package/dist/templates/cursor/commands/trellis-break-loop.md +107 -0
- package/dist/templates/cursor/commands/trellis-check-backend.md +13 -0
- package/dist/templates/cursor/commands/trellis-check-cross-layer.md +153 -0
- package/dist/templates/cursor/commands/trellis-check-frontend.md +13 -0
- package/dist/templates/cursor/commands/trellis-create-command.md +154 -0
- package/dist/templates/cursor/commands/trellis-finish-work.md +143 -0
- package/dist/templates/cursor/commands/trellis-integrate-skill.md +219 -0
- package/dist/templates/cursor/commands/trellis-onboard.md +358 -0
- package/dist/templates/cursor/commands/trellis-record-session.md +62 -0
- package/dist/templates/cursor/commands/trellis-start.md +366 -0
- package/dist/templates/cursor/commands/trellis-update-spec.md +354 -0
- package/dist/templates/cursor/index.d.ts +24 -0
- package/dist/templates/cursor/index.d.ts.map +1 -0
- package/dist/templates/cursor/index.js +44 -0
- package/dist/templates/cursor/index.js.map +1 -0
- package/dist/templates/extract.d.ts +166 -0
- package/dist/templates/extract.d.ts.map +1 -0
- package/dist/templates/extract.js +296 -0
- package/dist/templates/extract.js.map +1 -0
- package/dist/templates/gemini/commands/trellis/before-backend-dev.toml +17 -0
- package/dist/templates/gemini/commands/trellis/before-frontend-dev.toml +17 -0
- package/dist/templates/gemini/commands/trellis/brainstorm.toml +420 -0
- package/dist/templates/gemini/commands/trellis/break-loop.toml +129 -0
- package/dist/templates/gemini/commands/trellis/check-backend.toml +17 -0
- package/dist/templates/gemini/commands/trellis/check-cross-layer.toml +147 -0
- package/dist/templates/gemini/commands/trellis/check-frontend.toml +17 -0
- package/dist/templates/gemini/commands/trellis/create-command.toml +119 -0
- package/dist/templates/gemini/commands/trellis/finish-work.toml +133 -0
- package/dist/templates/gemini/commands/trellis/integrate-skill.toml +104 -0
- package/dist/templates/gemini/commands/trellis/onboard.toml +111 -0
- package/dist/templates/gemini/commands/trellis/record-session.toml +66 -0
- package/dist/templates/gemini/commands/trellis/start.toml +292 -0
- package/dist/templates/gemini/commands/trellis/update-spec.toml +132 -0
- package/dist/templates/gemini/index.d.ts +21 -0
- package/dist/templates/gemini/index.d.ts.map +1 -0
- package/dist/templates/gemini/index.js +44 -0
- package/dist/templates/gemini/index.js.map +1 -0
- package/dist/templates/iflow/agents/check.md +122 -0
- package/dist/templates/iflow/agents/debug.md +106 -0
- package/dist/templates/iflow/agents/dispatch.md +214 -0
- package/dist/templates/iflow/agents/implement.md +96 -0
- package/dist/templates/iflow/agents/plan.md +396 -0
- package/dist/templates/iflow/agents/research.md +120 -0
- package/dist/templates/iflow/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/iflow/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/iflow/commands/trellis/brainstorm.md +474 -0
- package/dist/templates/iflow/commands/trellis/break-loop.md +125 -0
- package/dist/templates/iflow/commands/trellis/check-backend.md +13 -0
- package/dist/templates/iflow/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/iflow/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/iflow/commands/trellis/create-command.md +152 -0
- package/dist/templates/iflow/commands/trellis/finish-work.md +153 -0
- package/dist/templates/iflow/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/iflow/commands/trellis/onboard.md +358 -0
- package/dist/templates/iflow/commands/trellis/parallel.md +193 -0
- package/dist/templates/iflow/commands/trellis/record-session.md +62 -0
- package/dist/templates/iflow/commands/trellis/start.md +373 -0
- package/dist/templates/iflow/commands/trellis/update-spec.md +354 -0
- package/dist/templates/iflow/hooks/inject-subagent-context.py +788 -0
- package/dist/templates/iflow/hooks/ralph-loop.py +388 -0
- package/dist/templates/iflow/hooks/session-start.py +143 -0
- package/dist/templates/iflow/index.d.ts +54 -0
- package/dist/templates/iflow/index.d.ts.map +1 -0
- package/dist/templates/iflow/index.js +85 -0
- package/dist/templates/iflow/index.js.map +1 -0
- package/dist/templates/iflow/settings.json +40 -0
- package/dist/templates/kilo/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/kilo/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/kilo/commands/trellis/brainstorm.md +474 -0
- package/dist/templates/kilo/commands/trellis/break-loop.md +125 -0
- package/dist/templates/kilo/commands/trellis/check-backend.md +13 -0
- package/dist/templates/kilo/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/kilo/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/kilo/commands/trellis/create-command.md +152 -0
- package/dist/templates/kilo/commands/trellis/finish-work.md +129 -0
- package/dist/templates/kilo/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/kilo/commands/trellis/onboard.md +358 -0
- package/dist/templates/kilo/commands/trellis/parallel.md +194 -0
- package/dist/templates/kilo/commands/trellis/record-session.md +62 -0
- package/dist/templates/kilo/commands/trellis/start.md +321 -0
- package/dist/templates/kilo/commands/trellis/update-spec.md +285 -0
- package/dist/templates/kilo/index.d.ts +16 -0
- package/dist/templates/kilo/index.d.ts.map +1 -0
- package/dist/templates/kilo/index.js +39 -0
- package/dist/templates/kilo/index.js.map +1 -0
- package/dist/templates/kiro/index.d.ts +18 -0
- package/dist/templates/kiro/index.d.ts.map +1 -0
- package/dist/templates/kiro/index.js +40 -0
- package/dist/templates/kiro/index.js.map +1 -0
- package/dist/templates/kiro/skills/before-backend-dev/SKILL.md +18 -0
- package/dist/templates/kiro/skills/before-frontend-dev/SKILL.md +18 -0
- package/dist/templates/kiro/skills/brainstorm/SKILL.md +479 -0
- package/dist/templates/kiro/skills/break-loop/SKILL.md +130 -0
- package/dist/templates/kiro/skills/check-backend/SKILL.md +18 -0
- package/dist/templates/kiro/skills/check-cross-layer/SKILL.md +158 -0
- package/dist/templates/kiro/skills/check-frontend/SKILL.md +18 -0
- package/dist/templates/kiro/skills/create-command/SKILL.md +101 -0
- package/dist/templates/kiro/skills/finish-work/SKILL.md +148 -0
- package/dist/templates/kiro/skills/integrate-skill/SKILL.md +221 -0
- package/dist/templates/kiro/skills/onboard/SKILL.md +363 -0
- package/dist/templates/kiro/skills/record-session/SKILL.md +67 -0
- package/dist/templates/kiro/skills/start/SKILL.md +330 -0
- package/dist/templates/kiro/skills/update-spec/SKILL.md +335 -0
- package/dist/templates/markdown/agents.md +18 -0
- package/dist/templates/markdown/gitignore.txt +12 -0
- package/dist/templates/markdown/index.d.ts +27 -0
- package/dist/templates/markdown/index.d.ts.map +1 -0
- package/dist/templates/markdown/index.js +52 -0
- package/dist/templates/markdown/index.js.map +1 -0
- package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/index.md +40 -0
- package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
- package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/backend/script-conventions.md +467 -0
- package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
- package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
- package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
- package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
- package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md +118 -0
- package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +92 -0
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +94 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md +394 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +319 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +79 -0
- package/dist/templates/markdown/workspace-index.md +123 -0
- package/dist/templates/markdown/worktree.yaml.txt +58 -0
- package/dist/templates/opencode/agents/check.md +146 -0
- package/dist/templates/opencode/agents/debug.md +129 -0
- package/dist/templates/opencode/agents/dispatch.md +223 -0
- package/dist/templates/opencode/agents/implement.md +120 -0
- package/dist/templates/opencode/agents/research.md +147 -0
- package/dist/templates/opencode/agents/trellis-plan.md +427 -0
- package/dist/templates/opencode/commands/trellis/before-backend-dev.md +13 -0
- package/dist/templates/opencode/commands/trellis/before-frontend-dev.md +13 -0
- package/dist/templates/opencode/commands/trellis/brainstorm.md +474 -0
- package/dist/templates/opencode/commands/trellis/break-loop.md +125 -0
- package/dist/templates/opencode/commands/trellis/check-backend.md +13 -0
- package/dist/templates/opencode/commands/trellis/check-cross-layer.md +153 -0
- package/dist/templates/opencode/commands/trellis/check-frontend.md +13 -0
- package/dist/templates/opencode/commands/trellis/create-command.md +154 -0
- package/dist/templates/opencode/commands/trellis/finish-work.md +144 -0
- package/dist/templates/opencode/commands/trellis/integrate-skill.md +219 -0
- package/dist/templates/opencode/commands/trellis/migrate-specs.md +0 -0
- package/dist/templates/opencode/commands/trellis/onboard.md +358 -0
- package/dist/templates/opencode/commands/trellis/parallel.md +194 -0
- package/dist/templates/opencode/commands/trellis/record-session.md +62 -0
- package/dist/templates/opencode/commands/trellis/start.md +338 -0
- package/dist/templates/opencode/commands/trellis/update-spec.md +354 -0
- package/dist/templates/opencode/lib/trellis-context.js +436 -0
- package/dist/templates/opencode/package.json +5 -0
- package/dist/templates/opencode/plugin/inject-subagent-context.js +538 -0
- package/dist/templates/opencode/plugin/session-start.js +192 -0
- package/dist/templates/trellis/VERSION +1 -0
- package/dist/templates/trellis/deliverables/README.md +51 -0
- package/dist/templates/trellis/gitignore.txt +29 -0
- package/dist/templates/trellis/index.d.ts +49 -0
- package/dist/templates/trellis/index.d.ts.map +1 -0
- package/dist/templates/trellis/index.js +92 -0
- package/dist/templates/trellis/index.js.map +1 -0
- package/dist/templates/trellis/paths.README.md +277 -0
- package/dist/templates/trellis/paths.yaml +41 -0
- package/dist/templates/trellis/pool/implementations.json +5 -0
- package/dist/templates/trellis/pool/prototypes.json +5 -0
- package/dist/templates/trellis/pool/requirements.json +5 -0
- package/dist/templates/trellis/scripts/__init__.py +5 -0
- package/dist/templates/trellis/scripts/add_session.py +391 -0
- package/dist/templates/trellis/scripts/common/__init__.py +80 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +522 -0
- package/dist/templates/trellis/scripts/common/developer.py +189 -0
- package/dist/templates/trellis/scripts/common/git_context.py +383 -0
- package/dist/templates/trellis/scripts/common/paths.py +346 -0
- package/dist/templates/trellis/scripts/common/phase.py +253 -0
- package/dist/templates/trellis/scripts/common/project_paths.py +189 -0
- package/dist/templates/trellis/scripts/common/registry.py +365 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +255 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +177 -0
- package/dist/templates/trellis/scripts/common/worktree.py +218 -0
- package/dist/templates/trellis/scripts/create_bootstrap.py +290 -0
- package/dist/templates/trellis/scripts/get_context.py +16 -0
- package/dist/templates/trellis/scripts/get_developer.py +26 -0
- package/dist/templates/trellis/scripts/handoff_generator.py +380 -0
- package/dist/templates/trellis/scripts/init_developer.py +51 -0
- package/dist/templates/trellis/scripts/multi_agent/__init__.py +5 -0
- package/dist/templates/trellis/scripts/multi_agent/cleanup.py +403 -0
- package/dist/templates/trellis/scripts/multi_agent/create_pr.py +329 -0
- package/dist/templates/trellis/scripts/multi_agent/plan.py +233 -0
- package/dist/templates/trellis/scripts/multi_agent/start.py +461 -0
- package/dist/templates/trellis/scripts/multi_agent/status.py +817 -0
- package/dist/templates/trellis/scripts/pool.py +373 -0
- package/dist/templates/trellis/scripts/task.py +1162 -0
- package/dist/templates/trellis/scripts-shell-archive/add-session.sh +384 -0
- package/dist/templates/trellis/scripts-shell-archive/common/developer.sh +129 -0
- package/dist/templates/trellis/scripts-shell-archive/common/git-context.sh +263 -0
- package/dist/templates/trellis/scripts-shell-archive/common/paths.sh +208 -0
- package/dist/templates/trellis/scripts-shell-archive/common/phase.sh +150 -0
- package/dist/templates/trellis/scripts-shell-archive/common/registry.sh +247 -0
- package/dist/templates/trellis/scripts-shell-archive/common/task-queue.sh +142 -0
- package/dist/templates/trellis/scripts-shell-archive/common/task-utils.sh +151 -0
- package/dist/templates/trellis/scripts-shell-archive/common/worktree.sh +128 -0
- package/dist/templates/trellis/scripts-shell-archive/create-bootstrap.sh +299 -0
- package/dist/templates/trellis/scripts-shell-archive/get-context.sh +7 -0
- package/dist/templates/trellis/scripts-shell-archive/get-developer.sh +15 -0
- package/dist/templates/trellis/scripts-shell-archive/init-developer.sh +34 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/cleanup.sh +396 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/create-pr.sh +241 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/plan.sh +207 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/start.sh +317 -0
- package/dist/templates/trellis/scripts-shell-archive/multi-agent/status.sh +828 -0
- package/dist/templates/trellis/scripts-shell-archive/task.sh +1204 -0
- package/dist/templates/trellis/spec/roles/designer/index.md +243 -0
- package/dist/templates/trellis/spec/roles/designer/mock-data-standards.md +481 -0
- package/dist/templates/trellis/spec/roles/designer/prototype-guidelines.md +429 -0
- package/dist/templates/trellis/spec/roles/frontend-impl/api-integration.md +565 -0
- package/dist/templates/trellis/spec/roles/frontend-impl/index.md +321 -0
- package/dist/templates/trellis/spec/roles/frontend-impl/state-management.md +599 -0
- package/dist/templates/trellis/spec/roles/pm/index.md +112 -0
- package/dist/templates/trellis/spec/roles/pm/prd-template.md +124 -0
- package/dist/templates/trellis/tasks/.gitkeep +0 -0
- package/dist/templates/trellis/workflow.md +416 -0
- package/dist/templates/trellis/worktree.yaml +47 -0
- package/dist/types/ai-tools.d.ts +56 -0
- package/dist/types/ai-tools.d.ts.map +1 -0
- package/dist/types/ai-tools.js +103 -0
- package/dist/types/ai-tools.js.map +1 -0
- package/dist/types/migration.d.ts +86 -0
- package/dist/types/migration.d.ts.map +1 -0
- package/dist/types/migration.js +8 -0
- package/dist/types/migration.js.map +1 -0
- package/dist/utils/compare-versions.d.ts +12 -0
- package/dist/utils/compare-versions.d.ts.map +1 -0
- package/dist/utils/compare-versions.js +76 -0
- package/dist/utils/compare-versions.js.map +1 -0
- package/dist/utils/file-writer.d.ts +23 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +140 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/project-detector.d.ts +16 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +186 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/template-fetcher.d.ts +51 -0
- package/dist/utils/template-fetcher.d.ts.map +1 -0
- package/dist/utils/template-fetcher.js +174 -0
- package/dist/utils/template-fetcher.js.map +1 -0
- package/dist/utils/template-hash.d.ts +78 -0
- package/dist/utils/template-hash.d.ts.map +1 -0
- package/dist/utils/template-hash.js +233 -0
- package/dist/utils/template-hash.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { DIR_NAMES, PATHS } from "../constants/paths.js";
|
|
3
|
+
import { copyTrellisDir } from "../templates/extract.js";
|
|
4
|
+
// Import trellis templates (generic, not project-specific)
|
|
5
|
+
import { workflowMdTemplate, worktreeYamlTemplate, gitignoreTemplate, } from "../templates/trellis/index.js";
|
|
6
|
+
// Import markdown templates
|
|
7
|
+
import { agentProgressIndexContent,
|
|
8
|
+
// Backend structure (multi-doc)
|
|
9
|
+
backendIndexContent, backendDirectoryStructureContent, backendDatabaseGuidelinesContent, backendLoggingGuidelinesContent, backendQualityGuidelinesContent, backendErrorHandlingContent,
|
|
10
|
+
// Frontend structure (multi-doc)
|
|
11
|
+
frontendIndexContent, frontendDirectoryStructureContent, frontendTypeSafetyContent, frontendHookGuidelinesContent, frontendComponentGuidelinesContent, frontendQualityGuidelinesContent, frontendStateManagementContent,
|
|
12
|
+
// Guides structure
|
|
13
|
+
guidesIndexContent, guidesCrossLayerThinkingGuideContent, guidesCodeReuseThinkingGuideContent, } from "../templates/markdown/index.js";
|
|
14
|
+
import { writeFile, ensureDir } from "../utils/file-writer.js";
|
|
15
|
+
/**
|
|
16
|
+
* Create workflow structure based on project type
|
|
17
|
+
*
|
|
18
|
+
* This function creates the .trellis/ directory structure by:
|
|
19
|
+
* 1. Copying scripts/ directory directly (dogfooding)
|
|
20
|
+
* 2. Copying workflow.md and .gitignore (dogfooding)
|
|
21
|
+
* 3. Creating workspace/ with index.md
|
|
22
|
+
* 4. Creating tasks/ directory
|
|
23
|
+
* 5. Creating spec/ with templates (not dogfooded - generic templates)
|
|
24
|
+
* 6. Copying worktree.yaml if multi-agent is enabled
|
|
25
|
+
*
|
|
26
|
+
* @param cwd - Current working directory
|
|
27
|
+
* @param options - Workflow options including project type
|
|
28
|
+
*/
|
|
29
|
+
export async function createWorkflowStructure(cwd, options) {
|
|
30
|
+
const projectType = options?.projectType ?? "fullstack";
|
|
31
|
+
const multiAgent = options?.multiAgent ?? false;
|
|
32
|
+
const skipSpecTemplates = options?.skipSpecTemplates ?? false;
|
|
33
|
+
// Create base .trellis directory
|
|
34
|
+
ensureDir(path.join(cwd, DIR_NAMES.WORKFLOW));
|
|
35
|
+
// Copy scripts/ directory from templates
|
|
36
|
+
await copyTrellisDir("scripts", path.join(cwd, PATHS.SCRIPTS), {
|
|
37
|
+
executable: true,
|
|
38
|
+
});
|
|
39
|
+
// Copy workflow.md from templates
|
|
40
|
+
await writeFile(path.join(cwd, PATHS.WORKFLOW_GUIDE_FILE), workflowMdTemplate);
|
|
41
|
+
// Copy .gitignore from templates
|
|
42
|
+
await writeFile(path.join(cwd, DIR_NAMES.WORKFLOW, ".gitignore"), gitignoreTemplate);
|
|
43
|
+
// Create workspace/ with index.md
|
|
44
|
+
ensureDir(path.join(cwd, PATHS.WORKSPACE));
|
|
45
|
+
await writeFile(path.join(cwd, PATHS.WORKSPACE, "index.md"), agentProgressIndexContent);
|
|
46
|
+
// Create tasks/ directory
|
|
47
|
+
ensureDir(path.join(cwd, PATHS.TASKS));
|
|
48
|
+
// Copy worktree.yaml if multi-agent enabled
|
|
49
|
+
if (multiAgent) {
|
|
50
|
+
await writeFile(path.join(cwd, DIR_NAMES.WORKFLOW, "worktree.yaml"), worktreeYamlTemplate);
|
|
51
|
+
}
|
|
52
|
+
// Create spec templates based on project type
|
|
53
|
+
// These are NOT dogfooded - they are generic templates for new projects
|
|
54
|
+
// Skip if using remote template (already downloaded)
|
|
55
|
+
if (!skipSpecTemplates) {
|
|
56
|
+
await createSpecTemplates(cwd, projectType);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function createSpecTemplates(cwd, projectType) {
|
|
60
|
+
// Ensure spec directory exists
|
|
61
|
+
ensureDir(path.join(cwd, PATHS.SPEC));
|
|
62
|
+
// Guides - always created
|
|
63
|
+
ensureDir(path.join(cwd, `${PATHS.SPEC}/guides`));
|
|
64
|
+
const guidesDocs = [
|
|
65
|
+
{ name: "index.md", content: guidesIndexContent },
|
|
66
|
+
{
|
|
67
|
+
name: "cross-layer-thinking-guide.md",
|
|
68
|
+
content: guidesCrossLayerThinkingGuideContent,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "code-reuse-thinking-guide.md",
|
|
72
|
+
content: guidesCodeReuseThinkingGuideContent,
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
for (const doc of guidesDocs) {
|
|
76
|
+
await writeFile(path.join(cwd, `${PATHS.SPEC}/guides`, doc.name), doc.content);
|
|
77
|
+
}
|
|
78
|
+
// Backend spec - created for backend, fullstack, and unknown project types
|
|
79
|
+
if (projectType !== "frontend") {
|
|
80
|
+
ensureDir(path.join(cwd, `${PATHS.SPEC}/backend`));
|
|
81
|
+
const backendDocs = [
|
|
82
|
+
{ name: "index.md", content: backendIndexContent },
|
|
83
|
+
{
|
|
84
|
+
name: "directory-structure.md",
|
|
85
|
+
content: backendDirectoryStructureContent,
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "database-guidelines.md",
|
|
89
|
+
content: backendDatabaseGuidelinesContent,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: "logging-guidelines.md",
|
|
93
|
+
content: backendLoggingGuidelinesContent,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "quality-guidelines.md",
|
|
97
|
+
content: backendQualityGuidelinesContent,
|
|
98
|
+
},
|
|
99
|
+
{ name: "error-handling.md", content: backendErrorHandlingContent },
|
|
100
|
+
];
|
|
101
|
+
for (const doc of backendDocs) {
|
|
102
|
+
await writeFile(path.join(cwd, `${PATHS.SPEC}/backend`, doc.name), doc.content);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Frontend spec - created for frontend, fullstack, and unknown project types
|
|
106
|
+
if (projectType !== "backend") {
|
|
107
|
+
ensureDir(path.join(cwd, `${PATHS.SPEC}/frontend`));
|
|
108
|
+
const frontendDocs = [
|
|
109
|
+
{ name: "index.md", content: frontendIndexContent },
|
|
110
|
+
{
|
|
111
|
+
name: "directory-structure.md",
|
|
112
|
+
content: frontendDirectoryStructureContent,
|
|
113
|
+
},
|
|
114
|
+
{ name: "type-safety.md", content: frontendTypeSafetyContent },
|
|
115
|
+
{ name: "hook-guidelines.md", content: frontendHookGuidelinesContent },
|
|
116
|
+
{
|
|
117
|
+
name: "component-guidelines.md",
|
|
118
|
+
content: frontendComponentGuidelinesContent,
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
name: "quality-guidelines.md",
|
|
122
|
+
content: frontendQualityGuidelinesContent,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
name: "state-management.md",
|
|
126
|
+
content: frontendStateManagementContent,
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
for (const doc of frontendDocs) {
|
|
130
|
+
await writeFile(path.join(cwd, `${PATHS.SPEC}/frontend`, doc.name), doc.content);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path constants for Trellis workflow structure
|
|
3
|
+
*
|
|
4
|
+
* Change these values to rename directories across the entire project.
|
|
5
|
+
* All paths should be relative to the project root.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DIR_NAMES: {
|
|
8
|
+
/** Root workflow directory */
|
|
9
|
+
readonly WORKFLOW: ".trellis";
|
|
10
|
+
/** Workspace directory (under .trellis/) - developer work areas */
|
|
11
|
+
readonly WORKSPACE: "workspace";
|
|
12
|
+
/** Tasks directory (under .trellis/) - unified task storage */
|
|
13
|
+
readonly TASKS: "tasks";
|
|
14
|
+
/** Archive directory (under tasks/) */
|
|
15
|
+
readonly ARCHIVE: "archive";
|
|
16
|
+
/** Spec/guidelines directory (under .trellis/) */
|
|
17
|
+
readonly SPEC: "spec";
|
|
18
|
+
/** Scripts directory (under .trellis/) */
|
|
19
|
+
readonly SCRIPTS: "scripts";
|
|
20
|
+
};
|
|
21
|
+
export declare const FILE_NAMES: {
|
|
22
|
+
/** Developer identity file */
|
|
23
|
+
readonly DEVELOPER: ".developer";
|
|
24
|
+
/** Current task pointer */
|
|
25
|
+
readonly CURRENT_TASK: ".current-task";
|
|
26
|
+
/** Task metadata */
|
|
27
|
+
readonly TASK_JSON: "task.json";
|
|
28
|
+
/** Requirements document */
|
|
29
|
+
readonly PRD: "prd.md";
|
|
30
|
+
/** Workflow guide */
|
|
31
|
+
readonly WORKFLOW_GUIDE: "workflow.md";
|
|
32
|
+
/** Journal file prefix */
|
|
33
|
+
readonly JOURNAL_PREFIX: "journal-";
|
|
34
|
+
};
|
|
35
|
+
export declare const PATHS: {
|
|
36
|
+
/** .trellis/ */
|
|
37
|
+
readonly WORKFLOW: ".trellis";
|
|
38
|
+
/** .trellis/workspace/ */
|
|
39
|
+
readonly WORKSPACE: ".trellis/workspace";
|
|
40
|
+
/** .trellis/tasks/ */
|
|
41
|
+
readonly TASKS: ".trellis/tasks";
|
|
42
|
+
/** .trellis/spec/ */
|
|
43
|
+
readonly SPEC: ".trellis/spec";
|
|
44
|
+
/** .trellis/scripts/ */
|
|
45
|
+
readonly SCRIPTS: ".trellis/scripts";
|
|
46
|
+
/** .trellis/.developer */
|
|
47
|
+
readonly DEVELOPER_FILE: ".trellis/.developer";
|
|
48
|
+
/** .trellis/.current-task */
|
|
49
|
+
readonly CURRENT_TASK_FILE: ".trellis/.current-task";
|
|
50
|
+
/** .trellis/workflow.md */
|
|
51
|
+
readonly WORKFLOW_GUIDE_FILE: ".trellis/workflow.md";
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Get developer's workspace directory path
|
|
55
|
+
* @example getWorkspaceDir("john") => ".trellis/workspace/john"
|
|
56
|
+
*/
|
|
57
|
+
export declare function getWorkspaceDir(developer: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Get task directory path
|
|
60
|
+
* @example getTaskDir("01-21-my-task") => ".trellis/tasks/01-21-my-task"
|
|
61
|
+
*/
|
|
62
|
+
export declare function getTaskDir(taskName: string): string;
|
|
63
|
+
/**
|
|
64
|
+
* Get archive directory path
|
|
65
|
+
* @example getArchiveDir() => ".trellis/tasks/archive"
|
|
66
|
+
*/
|
|
67
|
+
export declare function getArchiveDir(): string;
|
|
68
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,SAAS;IACpB,8BAA8B;;IAE9B,mEAAmE;;IAEnE,+DAA+D;;IAE/D,uCAAuC;;IAEvC,kDAAkD;;IAElD,0CAA0C;;CAElC,CAAC;AAGX,eAAO,MAAM,UAAU;IACrB,8BAA8B;;IAE9B,2BAA2B;;IAE3B,oBAAoB;;IAEpB,4BAA4B;;IAE5B,qBAAqB;;IAErB,0BAA0B;;CAElB,CAAC;AAGX,eAAO,MAAM,KAAK;IAChB,gBAAgB;;IAEhB,0BAA0B;;IAE1B,sBAAsB;;IAEtB,qBAAqB;;IAErB,wBAAwB;;IAExB,0BAA0B;;IAE1B,6BAA6B;;IAE7B,2BAA2B;;CAEnB,CAAC;AAEX;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path constants for Trellis workflow structure
|
|
3
|
+
*
|
|
4
|
+
* Change these values to rename directories across the entire project.
|
|
5
|
+
* All paths should be relative to the project root.
|
|
6
|
+
*/
|
|
7
|
+
// Directory names (can be renamed)
|
|
8
|
+
export const DIR_NAMES = {
|
|
9
|
+
/** Root workflow directory */
|
|
10
|
+
WORKFLOW: ".trellis",
|
|
11
|
+
/** Workspace directory (under .trellis/) - developer work areas */
|
|
12
|
+
WORKSPACE: "workspace",
|
|
13
|
+
/** Tasks directory (under .trellis/) - unified task storage */
|
|
14
|
+
TASKS: "tasks",
|
|
15
|
+
/** Archive directory (under tasks/) */
|
|
16
|
+
ARCHIVE: "archive",
|
|
17
|
+
/** Spec/guidelines directory (under .trellis/) */
|
|
18
|
+
SPEC: "spec",
|
|
19
|
+
/** Scripts directory (under .trellis/) */
|
|
20
|
+
SCRIPTS: "scripts",
|
|
21
|
+
};
|
|
22
|
+
// File names
|
|
23
|
+
export const FILE_NAMES = {
|
|
24
|
+
/** Developer identity file */
|
|
25
|
+
DEVELOPER: ".developer",
|
|
26
|
+
/** Current task pointer */
|
|
27
|
+
CURRENT_TASK: ".current-task",
|
|
28
|
+
/** Task metadata */
|
|
29
|
+
TASK_JSON: "task.json",
|
|
30
|
+
/** Requirements document */
|
|
31
|
+
PRD: "prd.md",
|
|
32
|
+
/** Workflow guide */
|
|
33
|
+
WORKFLOW_GUIDE: "workflow.md",
|
|
34
|
+
/** Journal file prefix */
|
|
35
|
+
JOURNAL_PREFIX: "journal-",
|
|
36
|
+
};
|
|
37
|
+
// Constructed paths (relative to project root)
|
|
38
|
+
export const PATHS = {
|
|
39
|
+
/** .trellis/ */
|
|
40
|
+
WORKFLOW: DIR_NAMES.WORKFLOW,
|
|
41
|
+
/** .trellis/workspace/ */
|
|
42
|
+
WORKSPACE: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.WORKSPACE}`,
|
|
43
|
+
/** .trellis/tasks/ */
|
|
44
|
+
TASKS: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.TASKS}`,
|
|
45
|
+
/** .trellis/spec/ */
|
|
46
|
+
SPEC: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.SPEC}`,
|
|
47
|
+
/** .trellis/scripts/ */
|
|
48
|
+
SCRIPTS: `${DIR_NAMES.WORKFLOW}/${DIR_NAMES.SCRIPTS}`,
|
|
49
|
+
/** .trellis/.developer */
|
|
50
|
+
DEVELOPER_FILE: `${DIR_NAMES.WORKFLOW}/${FILE_NAMES.DEVELOPER}`,
|
|
51
|
+
/** .trellis/.current-task */
|
|
52
|
+
CURRENT_TASK_FILE: `${DIR_NAMES.WORKFLOW}/${FILE_NAMES.CURRENT_TASK}`,
|
|
53
|
+
/** .trellis/workflow.md */
|
|
54
|
+
WORKFLOW_GUIDE_FILE: `${DIR_NAMES.WORKFLOW}/${FILE_NAMES.WORKFLOW_GUIDE}`,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Get developer's workspace directory path
|
|
58
|
+
* @example getWorkspaceDir("john") => ".trellis/workspace/john"
|
|
59
|
+
*/
|
|
60
|
+
export function getWorkspaceDir(developer) {
|
|
61
|
+
return `${PATHS.WORKSPACE}/${developer}`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get task directory path
|
|
65
|
+
* @example getTaskDir("01-21-my-task") => ".trellis/tasks/01-21-my-task"
|
|
66
|
+
*/
|
|
67
|
+
export function getTaskDir(taskName) {
|
|
68
|
+
return `${PATHS.TASKS}/${taskName}`;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get archive directory path
|
|
72
|
+
* @example getArchiveDir() => ".trellis/tasks/archive"
|
|
73
|
+
*/
|
|
74
|
+
export function getArchiveDir() {
|
|
75
|
+
return `${PATHS.TASKS}/${DIR_NAMES.ARCHIVE}`;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,8BAA8B;IAC9B,QAAQ,EAAE,UAAU;IACpB,mEAAmE;IACnE,SAAS,EAAE,WAAW;IACtB,+DAA+D;IAC/D,KAAK,EAAE,OAAO;IACd,uCAAuC;IACvC,OAAO,EAAE,SAAS;IAClB,kDAAkD;IAClD,IAAI,EAAE,MAAM;IACZ,0CAA0C;IAC1C,OAAO,EAAE,SAAS;CACV,CAAC;AAEX,aAAa;AACb,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,8BAA8B;IAC9B,SAAS,EAAE,YAAY;IACvB,2BAA2B;IAC3B,YAAY,EAAE,eAAe;IAC7B,oBAAoB;IACpB,SAAS,EAAE,WAAW;IACtB,4BAA4B;IAC5B,GAAG,EAAE,QAAQ;IACb,qBAAqB;IACrB,cAAc,EAAE,aAAa;IAC7B,0BAA0B;IAC1B,cAAc,EAAE,UAAU;CAClB,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,QAAQ,EAAE,SAAS,CAAC,QAAQ;IAC5B,0BAA0B;IAC1B,SAAS,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,EAAE;IACzD,sBAAsB;IACtB,KAAK,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE;IACjD,qBAAqB;IACrB,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE;IAC/C,wBAAwB;IACxB,OAAO,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,OAAO,EAAE;IACrD,0BAA0B;IAC1B,cAAc,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE;IAC/D,6BAA6B;IAC7B,iBAAiB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,YAAY,EAAE;IACrE,2BAA2B;IAC3B,mBAAmB,EAAE,GAAG,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,cAAc,EAAE;CACjE,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB;IAC/C,OAAO,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package version and name constants.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from cli/index.ts to avoid import-time side effects
|
|
5
|
+
* (program.parse(), checkForUpdates, etc.) when only VERSION is needed.
|
|
6
|
+
*/
|
|
7
|
+
export declare const VERSION: string;
|
|
8
|
+
export declare const PACKAGE_NAME: string;
|
|
9
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/constants/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,eAAO,MAAM,OAAO,EAAE,MAA4B,CAAC;AACnD,eAAO,MAAM,YAAY,EAAE,MAAyB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package version and name constants.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from cli/index.ts to avoid import-time side effects
|
|
5
|
+
* (program.parse(), checkForUpdates, etc.) when only VERSION is needed.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
const packageJsonPath = path.resolve(__dirname, "../../package.json");
|
|
12
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
|
|
13
|
+
export const VERSION = packageJson.version;
|
|
14
|
+
export const PACKAGE_NAME = packageJson.name;
|
|
15
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/constants/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAOzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AACtE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CACzC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,CAAC,OAAO,CAAC;AACnD,MAAM,CAAC,MAAM,YAAY,GAAW,WAAW,CAAC,IAAI,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trellis - AI-assisted development workflow framework
|
|
3
|
+
*
|
|
4
|
+
* Based on Anthropic's "Effective Harnesses for Long-Running Agents"
|
|
5
|
+
* https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
|
|
6
|
+
*/
|
|
7
|
+
export { VERSION } from "./constants/version.js";
|
|
8
|
+
export { init } from "./commands/init.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trellis - AI-assisted development workflow framework
|
|
3
|
+
*
|
|
4
|
+
* Based on Anthropic's "Effective Harnesses for Long-Running Agents"
|
|
5
|
+
* https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
|
|
6
|
+
*/
|
|
7
|
+
export { VERSION } from "./constants/version.js";
|
|
8
|
+
export { init } from "./commands/init.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration manifests for Trellis versions
|
|
3
|
+
*
|
|
4
|
+
* Each version's migrations are stored in separate JSON files under manifests/
|
|
5
|
+
* Format: manifests/{version}.json (e.g., manifests/0.1.9.json)
|
|
6
|
+
*/
|
|
7
|
+
import type { MigrationItem } from "../types/migration.js";
|
|
8
|
+
/**
|
|
9
|
+
* Get all migrations needed to upgrade from one version to another
|
|
10
|
+
*
|
|
11
|
+
* @param fromVersion - Current installed version
|
|
12
|
+
* @param toVersion - Target version to upgrade to
|
|
13
|
+
* @returns Array of migration items to apply, in version order
|
|
14
|
+
*/
|
|
15
|
+
export declare function getMigrationsForVersion(fromVersion: string, toVersion: string): MigrationItem[];
|
|
16
|
+
/**
|
|
17
|
+
* Check if there are any pending migrations between versions
|
|
18
|
+
*/
|
|
19
|
+
export declare function hasPendingMigrations(fromVersion: string, toVersion: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Get human-readable summary of pending migrations
|
|
22
|
+
*/
|
|
23
|
+
export declare function getMigrationSummary(fromVersion: string, toVersion: string): {
|
|
24
|
+
renames: number;
|
|
25
|
+
deletes: number;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Get all registered migration versions
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAllMigrationVersions(): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Get ALL migrations from all manifests (regardless of version)
|
|
33
|
+
* Used for detecting orphaned migrations that should have been applied
|
|
34
|
+
*/
|
|
35
|
+
export declare function getAllMigrations(): MigrationItem[];
|
|
36
|
+
/**
|
|
37
|
+
* Clear the manifest cache (useful for testing)
|
|
38
|
+
*/
|
|
39
|
+
export declare function clearManifestCache(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get aggregated metadata for migrations between versions
|
|
42
|
+
* Returns combined changelog, breaking status, migrate recommendation, and migration guides
|
|
43
|
+
*/
|
|
44
|
+
export declare function getMigrationMetadata(fromVersion: string, toVersion: string): {
|
|
45
|
+
changelog: string[];
|
|
46
|
+
breaking: boolean;
|
|
47
|
+
recommendMigrate: boolean;
|
|
48
|
+
migrationGuides: {
|
|
49
|
+
version: string;
|
|
50
|
+
guide: string;
|
|
51
|
+
aiInstructions?: string;
|
|
52
|
+
}[];
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAqB,MAAM,uBAAuB,CAAC;AAkD9E;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,aAAa,EAAE,CAuBjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAET;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAMtC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAGlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,EAAE,CAOlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IACD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF,CAyCA"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration manifests for Trellis versions
|
|
3
|
+
*
|
|
4
|
+
* Each version's migrations are stored in separate JSON files under manifests/
|
|
5
|
+
* Format: manifests/{version}.json (e.g., manifests/0.1.9.json)
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { compareVersions } from "../utils/compare-versions.js";
|
|
11
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const MANIFESTS_DIR = path.join(__dirname, "manifests");
|
|
13
|
+
/**
|
|
14
|
+
* Cache for loaded manifests
|
|
15
|
+
*/
|
|
16
|
+
let manifestCache = null;
|
|
17
|
+
/**
|
|
18
|
+
* Load all migration manifests from JSON files
|
|
19
|
+
*/
|
|
20
|
+
function loadManifests() {
|
|
21
|
+
if (manifestCache) {
|
|
22
|
+
return manifestCache;
|
|
23
|
+
}
|
|
24
|
+
const manifests = {};
|
|
25
|
+
// Check if manifests directory exists
|
|
26
|
+
if (!fs.existsSync(MANIFESTS_DIR)) {
|
|
27
|
+
manifestCache = manifests;
|
|
28
|
+
return manifests;
|
|
29
|
+
}
|
|
30
|
+
// Load all JSON files from manifests directory
|
|
31
|
+
const files = fs.readdirSync(MANIFESTS_DIR).filter((f) => f.endsWith(".json"));
|
|
32
|
+
for (const file of files) {
|
|
33
|
+
try {
|
|
34
|
+
const filePath = path.join(MANIFESTS_DIR, file);
|
|
35
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
36
|
+
const manifest = JSON.parse(content);
|
|
37
|
+
// Use version from manifest as key
|
|
38
|
+
if (manifest.version) {
|
|
39
|
+
manifests[manifest.version] = manifest;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Skip invalid manifest files
|
|
44
|
+
console.warn(`Warning: Failed to load migration manifest ${file}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
manifestCache = manifests;
|
|
48
|
+
return manifests;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get all migrations needed to upgrade from one version to another
|
|
52
|
+
*
|
|
53
|
+
* @param fromVersion - Current installed version
|
|
54
|
+
* @param toVersion - Target version to upgrade to
|
|
55
|
+
* @returns Array of migration items to apply, in version order
|
|
56
|
+
*/
|
|
57
|
+
export function getMigrationsForVersion(fromVersion, toVersion) {
|
|
58
|
+
const manifests = loadManifests();
|
|
59
|
+
// Get all versions that have migrations
|
|
60
|
+
const versions = Object.keys(manifests).sort(compareVersions);
|
|
61
|
+
// Filter to versions > fromVersion and <= toVersion
|
|
62
|
+
const applicableVersions = versions.filter((v) => {
|
|
63
|
+
const afterFrom = compareVersions(v, fromVersion) > 0;
|
|
64
|
+
const atOrBeforeTo = compareVersions(v, toVersion) <= 0;
|
|
65
|
+
return afterFrom && atOrBeforeTo;
|
|
66
|
+
});
|
|
67
|
+
// Collect all migrations from applicable versions
|
|
68
|
+
const allMigrations = [];
|
|
69
|
+
for (const version of applicableVersions) {
|
|
70
|
+
const manifest = manifests[version];
|
|
71
|
+
if (manifest) {
|
|
72
|
+
allMigrations.push(...manifest.migrations);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return allMigrations;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if there are any pending migrations between versions
|
|
79
|
+
*/
|
|
80
|
+
export function hasPendingMigrations(fromVersion, toVersion) {
|
|
81
|
+
return getMigrationsForVersion(fromVersion, toVersion).length > 0;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get human-readable summary of pending migrations
|
|
85
|
+
*/
|
|
86
|
+
export function getMigrationSummary(fromVersion, toVersion) {
|
|
87
|
+
const migrations = getMigrationsForVersion(fromVersion, toVersion);
|
|
88
|
+
return {
|
|
89
|
+
renames: migrations.filter((m) => m.type === "rename").length,
|
|
90
|
+
deletes: migrations.filter((m) => m.type === "delete").length,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get all registered migration versions
|
|
95
|
+
*/
|
|
96
|
+
export function getAllMigrationVersions() {
|
|
97
|
+
const manifests = loadManifests();
|
|
98
|
+
return Object.keys(manifests).sort(compareVersions);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get ALL migrations from all manifests (regardless of version)
|
|
102
|
+
* Used for detecting orphaned migrations that should have been applied
|
|
103
|
+
*/
|
|
104
|
+
export function getAllMigrations() {
|
|
105
|
+
const manifests = loadManifests();
|
|
106
|
+
const allMigrations = [];
|
|
107
|
+
for (const manifest of Object.values(manifests)) {
|
|
108
|
+
allMigrations.push(...manifest.migrations);
|
|
109
|
+
}
|
|
110
|
+
return allMigrations;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Clear the manifest cache (useful for testing)
|
|
114
|
+
*/
|
|
115
|
+
export function clearManifestCache() {
|
|
116
|
+
manifestCache = null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get aggregated metadata for migrations between versions
|
|
120
|
+
* Returns combined changelog, breaking status, migrate recommendation, and migration guides
|
|
121
|
+
*/
|
|
122
|
+
export function getMigrationMetadata(fromVersion, toVersion) {
|
|
123
|
+
const manifests = loadManifests();
|
|
124
|
+
const versions = Object.keys(manifests).sort(compareVersions);
|
|
125
|
+
// Filter to versions > fromVersion and <= toVersion
|
|
126
|
+
const applicableVersions = versions.filter((v) => {
|
|
127
|
+
const afterFrom = compareVersions(v, fromVersion) > 0;
|
|
128
|
+
const atOrBeforeTo = compareVersions(v, toVersion) <= 0;
|
|
129
|
+
return afterFrom && atOrBeforeTo;
|
|
130
|
+
});
|
|
131
|
+
const result = {
|
|
132
|
+
changelog: [],
|
|
133
|
+
breaking: false,
|
|
134
|
+
recommendMigrate: false,
|
|
135
|
+
migrationGuides: [],
|
|
136
|
+
};
|
|
137
|
+
for (const version of applicableVersions) {
|
|
138
|
+
const manifest = manifests[version];
|
|
139
|
+
if (manifest) {
|
|
140
|
+
if (manifest.changelog) {
|
|
141
|
+
result.changelog.push(`v${version}: ${manifest.changelog}`);
|
|
142
|
+
}
|
|
143
|
+
if (manifest.breaking) {
|
|
144
|
+
result.breaking = true;
|
|
145
|
+
}
|
|
146
|
+
if (manifest.recommendMigrate) {
|
|
147
|
+
result.recommendMigrate = true;
|
|
148
|
+
}
|
|
149
|
+
if (manifest.migrationGuide) {
|
|
150
|
+
result.migrationGuides.push({
|
|
151
|
+
version,
|
|
152
|
+
guide: manifest.migrationGuide,
|
|
153
|
+
aiInstructions: manifest.aiInstructions,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.9",
|
|
3
|
+
"description": "Rename deprecated command files",
|
|
4
|
+
"migrations": [
|
|
5
|
+
{
|
|
6
|
+
"type": "rename",
|
|
7
|
+
"from": ".claude/commands/onboard-developer.md",
|
|
8
|
+
"to": ".claude/commands/onboard.md",
|
|
9
|
+
"description": "Shortened onboard-developer to onboard"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"type": "rename",
|
|
13
|
+
"from": ".cursor/commands/onboard-developer.md",
|
|
14
|
+
"to": ".cursor/commands/onboard.md",
|
|
15
|
+
"description": "Shortened onboard-developer to onboard"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"type": "rename",
|
|
19
|
+
"from": ".claude/commands/record-agent-flow.md",
|
|
20
|
+
"to": ".claude/commands/record-session.md",
|
|
21
|
+
"description": "Renamed record-agent-flow to record-session"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "rename",
|
|
25
|
+
"from": ".cursor/commands/record-agent-flow.md",
|
|
26
|
+
"to": ".cursor/commands/record-session.md",
|
|
27
|
+
"description": "Renamed record-agent-flow to record-session"
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|