trellis-herbivore 0.1.0
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/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 +174 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/channel/adapters/claude.d.ts +38 -0
- package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
- package/dist/commands/channel/adapters/claude.js +209 -0
- package/dist/commands/channel/adapters/claude.js.map +1 -0
- package/dist/commands/channel/adapters/codex.d.ts +77 -0
- package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
- package/dist/commands/channel/adapters/codex.js +495 -0
- package/dist/commands/channel/adapters/codex.js.map +1 -0
- package/dist/commands/channel/adapters/index.d.ts +79 -0
- package/dist/commands/channel/adapters/index.d.ts.map +1 -0
- package/dist/commands/channel/adapters/index.js +109 -0
- package/dist/commands/channel/adapters/index.js.map +1 -0
- package/dist/commands/channel/adapters/types.d.ts +33 -0
- package/dist/commands/channel/adapters/types.d.ts.map +1 -0
- package/dist/commands/channel/adapters/types.js +2 -0
- package/dist/commands/channel/adapters/types.js.map +1 -0
- package/dist/commands/channel/agent-loader.d.ts +32 -0
- package/dist/commands/channel/agent-loader.d.ts.map +1 -0
- package/dist/commands/channel/agent-loader.js +154 -0
- package/dist/commands/channel/agent-loader.js.map +1 -0
- package/dist/commands/channel/context-loader.d.ts +26 -0
- package/dist/commands/channel/context-loader.d.ts.map +1 -0
- package/dist/commands/channel/context-loader.js +290 -0
- package/dist/commands/channel/context-loader.js.map +1 -0
- package/dist/commands/channel/context.d.ts +16 -0
- package/dist/commands/channel/context.d.ts.map +1 -0
- package/dist/commands/channel/context.js +83 -0
- package/dist/commands/channel/context.js.map +1 -0
- package/dist/commands/channel/create.d.ts +27 -0
- package/dist/commands/channel/create.d.ts.map +1 -0
- package/dist/commands/channel/create.js +39 -0
- package/dist/commands/channel/create.js.map +1 -0
- package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
- package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
- package/dist/commands/channel/dev-parse-trace.js +70 -0
- package/dist/commands/channel/dev-parse-trace.js.map +1 -0
- package/dist/commands/channel/index.d.ts +3 -0
- package/dist/commands/channel/index.d.ts.map +1 -0
- package/dist/commands/channel/index.js +496 -0
- package/dist/commands/channel/index.js.map +1 -0
- package/dist/commands/channel/kill.d.ts +7 -0
- package/dist/commands/channel/kill.d.ts.map +1 -0
- package/dist/commands/channel/kill.js +121 -0
- package/dist/commands/channel/kill.js.map +1 -0
- package/dist/commands/channel/list.d.ts +17 -0
- package/dist/commands/channel/list.d.ts.map +1 -0
- package/dist/commands/channel/list.js +233 -0
- package/dist/commands/channel/list.js.map +1 -0
- package/dist/commands/channel/messages.d.ts +16 -0
- package/dist/commands/channel/messages.d.ts.map +1 -0
- package/dist/commands/channel/messages.js +237 -0
- package/dist/commands/channel/messages.js.map +1 -0
- package/dist/commands/channel/rm.d.ts +27 -0
- package/dist/commands/channel/rm.d.ts.map +1 -0
- package/dist/commands/channel/rm.js +216 -0
- package/dist/commands/channel/rm.js.map +1 -0
- package/dist/commands/channel/run.d.ts +31 -0
- package/dist/commands/channel/run.d.ts.map +1 -0
- package/dist/commands/channel/run.js +137 -0
- package/dist/commands/channel/run.js.map +1 -0
- package/dist/commands/channel/send.d.ts +12 -0
- package/dist/commands/channel/send.d.ts.map +1 -0
- package/dist/commands/channel/send.js +24 -0
- package/dist/commands/channel/send.js.map +1 -0
- package/dist/commands/channel/spawn.d.ts +25 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -0
- package/dist/commands/channel/spawn.js +192 -0
- package/dist/commands/channel/spawn.js.map +1 -0
- package/dist/commands/channel/store/events.d.ts +39 -0
- package/dist/commands/channel/store/events.d.ts.map +1 -0
- package/dist/commands/channel/store/events.js +87 -0
- package/dist/commands/channel/store/events.js.map +1 -0
- package/dist/commands/channel/store/filter.d.ts +3 -0
- package/dist/commands/channel/store/filter.d.ts.map +1 -0
- package/dist/commands/channel/store/filter.js +2 -0
- package/dist/commands/channel/store/filter.js.map +1 -0
- package/dist/commands/channel/store/lock.d.ts +23 -0
- package/dist/commands/channel/store/lock.d.ts.map +1 -0
- package/dist/commands/channel/store/lock.js +99 -0
- package/dist/commands/channel/store/lock.js.map +1 -0
- package/dist/commands/channel/store/paths.d.ts +63 -0
- package/dist/commands/channel/store/paths.d.ts.map +1 -0
- package/dist/commands/channel/store/paths.js +246 -0
- package/dist/commands/channel/store/paths.js.map +1 -0
- package/dist/commands/channel/store/schema.d.ts +27 -0
- package/dist/commands/channel/store/schema.d.ts.map +1 -0
- package/dist/commands/channel/store/schema.js +34 -0
- package/dist/commands/channel/store/schema.js.map +1 -0
- package/dist/commands/channel/store/thread-state.d.ts +5 -0
- package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
- package/dist/commands/channel/store/thread-state.js +16 -0
- package/dist/commands/channel/store/thread-state.js.map +1 -0
- package/dist/commands/channel/store/watch.d.ts +19 -0
- package/dist/commands/channel/store/watch.d.ts.map +1 -0
- package/dist/commands/channel/store/watch.js +130 -0
- package/dist/commands/channel/store/watch.js.map +1 -0
- package/dist/commands/channel/supervisor/inbox.d.ts +25 -0
- package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/inbox.js +99 -0
- package/dist/commands/channel/supervisor/inbox.js.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts +66 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.js +143 -0
- package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
- package/dist/commands/channel/supervisor/stdout.d.ts +49 -0
- package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/stdout.js +107 -0
- package/dist/commands/channel/supervisor/stdout.js.map +1 -0
- package/dist/commands/channel/supervisor.d.ts +47 -0
- package/dist/commands/channel/supervisor.d.ts.map +1 -0
- package/dist/commands/channel/supervisor.js +283 -0
- package/dist/commands/channel/supervisor.js.map +1 -0
- package/dist/commands/channel/text-body.d.ts +13 -0
- package/dist/commands/channel/text-body.d.ts.map +1 -0
- package/dist/commands/channel/text-body.js +47 -0
- package/dist/commands/channel/text-body.js.map +1 -0
- package/dist/commands/channel/threads.d.ts +39 -0
- package/dist/commands/channel/threads.d.ts.map +1 -0
- package/dist/commands/channel/threads.js +106 -0
- package/dist/commands/channel/threads.js.map +1 -0
- package/dist/commands/channel/title.d.ts +12 -0
- package/dist/commands/channel/title.d.ts.map +1 -0
- package/dist/commands/channel/title.js +24 -0
- package/dist/commands/channel/title.js.map +1 -0
- package/dist/commands/channel/wait.d.ts +18 -0
- package/dist/commands/channel/wait.d.ts.map +1 -0
- package/dist/commands/channel/wait.js +76 -0
- package/dist/commands/channel/wait.js.map +1 -0
- package/dist/commands/init.d.ts +57 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1466 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mem.d.ts +234 -0
- package/dist/commands/mem.d.ts.map +1 -0
- package/dist/commands/mem.js +1869 -0
- package/dist/commands/mem.js.map +1 -0
- package/dist/commands/uninstall.d.ts +27 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +339 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +72 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +1926 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/upgrade.d.ts +28 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +84 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/configurators/antigravity.d.ts +7 -0
- package/dist/configurators/antigravity.d.ts.map +1 -0
- package/dist/configurators/antigravity.js +19 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/claude.d.ts +9 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +72 -0
- package/dist/configurators/claude.js.map +1 -0
- package/dist/configurators/codebuddy.d.ts +10 -0
- package/dist/configurators/codebuddy.d.ts.map +1 -0
- package/dist/configurators/codebuddy.js +30 -0
- package/dist/configurators/codebuddy.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 +87 -0
- package/dist/configurators/codex.js.map +1 -0
- package/dist/configurators/copilot.d.ts +10 -0
- package/dist/configurators/copilot.d.ts.map +1 -0
- package/dist/configurators/copilot.js +51 -0
- package/dist/configurators/copilot.js.map +1 -0
- package/dist/configurators/cursor.d.ts +10 -0
- package/dist/configurators/cursor.d.ts.map +1 -0
- package/dist/configurators/cursor.js +29 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/droid.d.ts +10 -0
- package/dist/configurators/droid.d.ts.map +1 -0
- package/dist/configurators/droid.js +30 -0
- package/dist/configurators/droid.js.map +1 -0
- package/dist/configurators/gemini.d.ts +16 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +38 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/index.d.ts +65 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +367 -0
- package/dist/configurators/index.js.map +1 -0
- package/dist/configurators/kilo.d.ts +7 -0
- package/dist/configurators/kilo.d.ts.map +1 -0
- package/dist/configurators/kilo.js +19 -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 +24 -0
- package/dist/configurators/kiro.js.map +1 -0
- package/dist/configurators/opencode.d.ts +14 -0
- package/dist/configurators/opencode.d.ts.map +1 -0
- package/dist/configurators/opencode.js +96 -0
- package/dist/configurators/opencode.js.map +1 -0
- package/dist/configurators/pi.d.ts +3 -0
- package/dist/configurators/pi.d.ts.map +1 -0
- package/dist/configurators/pi.js +45 -0
- package/dist/configurators/pi.js.map +1 -0
- package/dist/configurators/qoder.d.ts +11 -0
- package/dist/configurators/qoder.d.ts.map +1 -0
- package/dist/configurators/qoder.js +31 -0
- package/dist/configurators/qoder.js.map +1 -0
- package/dist/configurators/shared.d.ts +178 -0
- package/dist/configurators/shared.d.ts.map +1 -0
- package/dist/configurators/shared.js +538 -0
- package/dist/configurators/shared.js.map +1 -0
- package/dist/configurators/windsurf.d.ts +7 -0
- package/dist/configurators/windsurf.d.ts.map +1 -0
- package/dist/configurators/windsurf.js +19 -0
- package/dist/configurators/windsurf.js.map +1 -0
- package/dist/configurators/workflow.d.ts +29 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +163 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/constants/paths.d.ts +70 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +79 -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 +62 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +187 -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 +297 -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/migrations/manifests/0.3.1.json +9 -0
- package/dist/migrations/manifests/0.3.10.json +9 -0
- package/dist/migrations/manifests/0.3.2.json +9 -0
- package/dist/migrations/manifests/0.3.3.json +9 -0
- package/dist/migrations/manifests/0.3.4.json +21 -0
- package/dist/migrations/manifests/0.3.5.json +9 -0
- package/dist/migrations/manifests/0.3.6.json +9 -0
- package/dist/migrations/manifests/0.3.7.json +9 -0
- package/dist/migrations/manifests/0.3.8.json +9 -0
- package/dist/migrations/manifests/0.3.9.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
- package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
- package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
- package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.4.0.json +9 -0
- 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.10.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
- package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
- package/dist/migrations/manifests/0.5.0-beta.19.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/migrations/manifests/0.5.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
- package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
- package/dist/migrations/manifests/0.5.0.json +9 -0
- package/dist/migrations/manifests/0.5.1.json +9 -0
- package/dist/migrations/manifests/0.5.10.json +9 -0
- package/dist/migrations/manifests/0.5.11.json +16 -0
- package/dist/migrations/manifests/0.5.12.json +9 -0
- package/dist/migrations/manifests/0.5.13.json +9 -0
- package/dist/migrations/manifests/0.5.14.json +9 -0
- package/dist/migrations/manifests/0.5.15.json +9 -0
- package/dist/migrations/manifests/0.5.2.json +9 -0
- package/dist/migrations/manifests/0.5.3.json +9 -0
- package/dist/migrations/manifests/0.5.4.json +9 -0
- package/dist/migrations/manifests/0.5.5.json +9 -0
- package/dist/migrations/manifests/0.5.6.json +9 -0
- package/dist/migrations/manifests/0.5.7.json +16 -0
- package/dist/migrations/manifests/0.5.8.json +9 -0
- package/dist/migrations/manifests/0.5.9.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
- package/dist/templates/claude/agents/trellis-check.md +114 -0
- package/dist/templates/claude/agents/trellis-implement.md +113 -0
- package/dist/templates/claude/agents/trellis-research.md +137 -0
- package/dist/templates/claude/index.d.ts +22 -0
- package/dist/templates/claude/index.d.ts.map +1 -0
- package/dist/templates/claude/index.js +46 -0
- package/dist/templates/claude/index.js.map +1 -0
- package/dist/templates/claude/settings.json +73 -0
- package/dist/templates/codebuddy/agents/trellis-check.md +109 -0
- package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
- package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
- package/dist/templates/codebuddy/index.d.ts +15 -0
- package/dist/templates/codebuddy/index.d.ts.map +1 -0
- package/dist/templates/codebuddy/index.js +15 -0
- package/dist/templates/codebuddy/index.js.map +1 -0
- package/dist/templates/codebuddy/settings.json +59 -0
- package/dist/templates/codex/agents/trellis-check.toml +84 -0
- package/dist/templates/codex/agents/trellis-implement.toml +65 -0
- package/dist/templates/codex/agents/trellis-research.toml +73 -0
- package/dist/templates/codex/config.toml +35 -0
- package/dist/templates/codex/hooks/session-start.py +545 -0
- package/dist/templates/codex/hooks.json +15 -0
- package/dist/templates/codex/index.d.ts +39 -0
- package/dist/templates/codex/index.d.ts.map +1 -0
- package/dist/templates/codex/index.js +85 -0
- package/dist/templates/codex/index.js.map +1 -0
- package/dist/templates/codex/skills/before-dev/SKILL.md +40 -0
- package/dist/templates/codex/skills/brainstorm/SKILL.md +112 -0
- package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
- package/dist/templates/codex/skills/check/SKILL.md +98 -0
- package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
- package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
- package/dist/templates/codex/skills/finish-work/SKILL.md +90 -0
- package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -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 +64 -0
- package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +73 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +54 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +78 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +65 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +103 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +80 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +69 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +74 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +83 -0
- package/dist/templates/common/commands/continue.md +56 -0
- package/dist/templates/common/commands/finish-work.md +66 -0
- package/dist/templates/common/commands/start.md +59 -0
- package/dist/templates/common/index.d.ts +48 -0
- package/dist/templates/common/index.d.ts.map +1 -0
- package/dist/templates/common/index.js +104 -0
- package/dist/templates/common/index.js.map +1 -0
- package/dist/templates/common/skills/before-dev.md +35 -0
- package/dist/templates/common/skills/brainstorm.md +112 -0
- package/dist/templates/common/skills/break-loop.md +125 -0
- package/dist/templates/common/skills/check.md +93 -0
- package/dist/templates/common/skills/update-spec.md +351 -0
- package/dist/templates/copilot/hooks/session-start.py +547 -0
- package/dist/templates/copilot/hooks.json +19 -0
- package/dist/templates/copilot/index.d.ts +23 -0
- package/dist/templates/copilot/index.d.ts.map +1 -0
- package/dist/templates/copilot/index.js +54 -0
- package/dist/templates/copilot/index.js.map +1 -0
- package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
- package/dist/templates/copilot/prompts/brainstorm.prompt.md +111 -0
- package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
- package/dist/templates/copilot/prompts/check.prompt.md +97 -0
- package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
- package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
- package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
- package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
- package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
- package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
- package/dist/templates/copilot/prompts/start.prompt.md +63 -0
- package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
- package/dist/templates/cursor/agents/trellis-check.md +108 -0
- package/dist/templates/cursor/agents/trellis-implement.md +109 -0
- package/dist/templates/cursor/agents/trellis-research.md +136 -0
- package/dist/templates/cursor/hooks.json +30 -0
- package/dist/templates/cursor/index.d.ts +13 -0
- package/dist/templates/cursor/index.d.ts.map +1 -0
- package/dist/templates/cursor/index.js +13 -0
- package/dist/templates/cursor/index.js.map +1 -0
- package/dist/templates/droid/droids/trellis-check.md +101 -0
- package/dist/templates/droid/droids/trellis-implement.md +102 -0
- package/dist/templates/droid/droids/trellis-research.md +137 -0
- package/dist/templates/droid/index.d.ts +15 -0
- package/dist/templates/droid/index.d.ts.map +1 -0
- package/dist/templates/droid/index.js +15 -0
- package/dist/templates/droid/index.js.map +1 -0
- package/dist/templates/droid/settings.json +59 -0
- package/dist/templates/extract.d.ts +40 -0
- package/dist/templates/extract.d.ts.map +1 -0
- package/dist/templates/extract.js +106 -0
- package/dist/templates/extract.js.map +1 -0
- package/dist/templates/gemini/agents/trellis-check.md +101 -0
- package/dist/templates/gemini/agents/trellis-implement.md +102 -0
- package/dist/templates/gemini/agents/trellis-research.md +136 -0
- package/dist/templates/gemini/index.d.ts +13 -0
- package/dist/templates/gemini/index.d.ts.map +1 -0
- package/dist/templates/gemini/index.js +13 -0
- package/dist/templates/gemini/index.js.map +1 -0
- package/dist/templates/gemini/settings.json +28 -0
- package/dist/templates/kiro/agents/trellis-check.json +26 -0
- package/dist/templates/kiro/agents/trellis-implement.json +26 -0
- package/dist/templates/kiro/agents/trellis-research.json +30 -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 +18 -0
- package/dist/templates/kiro/index.js.map +1 -0
- package/dist/templates/markdown/agents.md +21 -0
- package/dist/templates/markdown/gitignore.txt +15 -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.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/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.txt +223 -0
- package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +259 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +595 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
- package/dist/templates/markdown/workspace-index.md +125 -0
- package/dist/templates/markdown/worktree.yaml.txt +58 -0
- package/dist/templates/opencode/agents/trellis-check.md +116 -0
- package/dist/templates/opencode/agents/trellis-implement.md +118 -0
- package/dist/templates/opencode/agents/trellis-research.md +145 -0
- package/dist/templates/opencode/lib/session-utils.js +521 -0
- package/dist/templates/opencode/lib/trellis-context.js +381 -0
- package/dist/templates/opencode/package.json +5 -0
- package/dist/templates/opencode/plugins/inject-subagent-context.js +513 -0
- package/dist/templates/opencode/plugins/inject-workflow-state.js +159 -0
- package/dist/templates/opencode/plugins/session-start.js +101 -0
- package/dist/templates/pi/agents/trellis-check.md +36 -0
- package/dist/templates/pi/agents/trellis-implement.md +41 -0
- package/dist/templates/pi/agents/trellis-research.md +25 -0
- package/dist/templates/pi/extensions/trellis/index.ts.txt +1174 -0
- package/dist/templates/pi/index.d.ts +5 -0
- package/dist/templates/pi/index.d.ts.map +1 -0
- package/dist/templates/pi/index.js +12 -0
- package/dist/templates/pi/index.js.map +1 -0
- package/dist/templates/pi/settings.json +21 -0
- package/dist/templates/qoder/agents/trellis-check.md +102 -0
- package/dist/templates/qoder/agents/trellis-implement.md +103 -0
- package/dist/templates/qoder/agents/trellis-research.md +137 -0
- package/dist/templates/qoder/index.d.ts +15 -0
- package/dist/templates/qoder/index.d.ts.map +1 -0
- package/dist/templates/qoder/index.js +15 -0
- package/dist/templates/qoder/index.js.map +1 -0
- package/dist/templates/qoder/settings.json +47 -0
- package/dist/templates/shared-hooks/index.d.ts +50 -0
- package/dist/templates/shared-hooks/index.d.ts.map +1 -0
- package/dist/templates/shared-hooks/index.js +89 -0
- package/dist/templates/shared-hooks/index.js.map +1 -0
- package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
- package/dist/templates/shared-hooks/inject-subagent-context.py +771 -0
- package/dist/templates/shared-hooks/inject-workflow-state.py +363 -0
- package/dist/templates/shared-hooks/session-start.py +827 -0
- 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 +90 -0
- package/dist/templates/trellis/gitignore.txt +32 -0
- package/dist/templates/trellis/index.d.ts +52 -0
- package/dist/templates/trellis/index.d.ts.map +1 -0
- package/dist/templates/trellis/index.js +97 -0
- package/dist/templates/trellis/index.js.map +1 -0
- package/dist/templates/trellis/scripts/__init__.py +5 -0
- package/dist/templates/trellis/scripts/add_session.py +547 -0
- package/dist/templates/trellis/scripts/common/__init__.py +92 -0
- package/dist/templates/trellis/scripts/common/active_task.py +626 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +811 -0
- package/dist/templates/trellis/scripts/common/config.py +445 -0
- package/dist/templates/trellis/scripts/common/developer.py +190 -0
- package/dist/templates/trellis/scripts/common/git.py +31 -0
- package/dist/templates/trellis/scripts/common/git_context.py +106 -0
- package/dist/templates/trellis/scripts/common/io.py +37 -0
- package/dist/templates/trellis/scripts/common/log.py +45 -0
- package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
- package/dist/templates/trellis/scripts/common/paths.py +447 -0
- package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
- package/dist/templates/trellis/scripts/common/session_context.py +821 -0
- package/dist/templates/trellis/scripts/common/task_context.py +223 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
- package/dist/templates/trellis/scripts/common/task_store.py +698 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
- package/dist/templates/trellis/scripts/common/tasks.py +112 -0
- package/dist/templates/trellis/scripts/common/trellis_config.py +131 -0
- package/dist/templates/trellis/scripts/common/types.py +110 -0
- package/dist/templates/trellis/scripts/common/workflow_phase.py +212 -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/hooks/linear_sync.py +243 -0
- package/dist/templates/trellis/scripts/init_developer.py +51 -0
- package/dist/templates/trellis/scripts/task.py +500 -0
- package/dist/templates/trellis/tasks/.gitkeep +0 -0
- package/dist/templates/trellis/workflow.md +690 -0
- package/dist/types/ai-tools.d.ts +95 -0
- package/dist/types/ai-tools.d.ts.map +1 -0
- package/dist/types/ai-tools.js +280 -0
- package/dist/types/ai-tools.js.map +1 -0
- package/dist/types/migration.d.ts +125 -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 +86 -0
- package/dist/utils/compare-versions.js.map +1 -0
- package/dist/utils/cwd-guard.d.ts +38 -0
- package/dist/utils/cwd-guard.d.ts.map +1 -0
- package/dist/utils/cwd-guard.js +62 -0
- package/dist/utils/cwd-guard.js.map +1 -0
- package/dist/utils/file-writer.d.ts +36 -0
- package/dist/utils/file-writer.d.ts.map +1 -0
- package/dist/utils/file-writer.js +203 -0
- package/dist/utils/file-writer.js.map +1 -0
- package/dist/utils/manifest-prune.d.ts +61 -0
- package/dist/utils/manifest-prune.d.ts.map +1 -0
- package/dist/utils/manifest-prune.js +136 -0
- package/dist/utils/manifest-prune.js.map +1 -0
- package/dist/utils/posix.d.ts +13 -0
- package/dist/utils/posix.d.ts.map +1 -0
- package/dist/utils/posix.js +15 -0
- package/dist/utils/posix.js.map +1 -0
- package/dist/utils/project-detector.d.ts +46 -0
- package/dist/utils/project-detector.d.ts.map +1 -0
- package/dist/utils/project-detector.js +666 -0
- package/dist/utils/project-detector.js.map +1 -0
- package/dist/utils/proxy.d.ts +25 -0
- package/dist/utils/proxy.d.ts.map +1 -0
- package/dist/utils/proxy.js +60 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/task-json.d.ts +13 -0
- package/dist/utils/task-json.d.ts.map +1 -0
- package/dist/utils/task-json.js +12 -0
- package/dist/utils/task-json.js.map +1 -0
- package/dist/utils/template-fetcher.d.ts +150 -0
- package/dist/utils/template-fetcher.d.ts.map +1 -0
- package/dist/utils/template-fetcher.js +907 -0
- package/dist/utils/template-fetcher.js.map +1 -0
- package/dist/utils/template-hash.d.ts +123 -0
- package/dist/utils/template-hash.d.ts.map +1 -0
- package/dist/utils/template-hash.js +334 -0
- package/dist/utils/template-hash.js.map +1 -0
- package/dist/utils/uninstall-scrubbers.d.ts +66 -0
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
- package/dist/utils/uninstall-scrubbers.js +342 -0
- package/dist/utils/uninstall-scrubbers.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for platform configurators.
|
|
3
|
+
*
|
|
4
|
+
* Extracted here to avoid circular dependencies (index.ts imports configurators,
|
|
5
|
+
* configurators cannot import from index.ts).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Module-level resolved Python command, set by the init flow after probing.
|
|
9
|
+
*
|
|
10
|
+
* Windows commonly has Python under one of: `python`, `python3`, `py -3` —
|
|
11
|
+
* which one works varies by installer (python.org / Microsoft Store / py
|
|
12
|
+
* launcher). `init.ts` detects which is available, then calls
|
|
13
|
+
* `setResolvedPythonCommand` so all subsequent template / configurator writes
|
|
14
|
+
* use the resolved value instead of the platform default.
|
|
15
|
+
*
|
|
16
|
+
* If unset (e.g. unit tests bypass init), `getPythonCommandForPlatform` falls
|
|
17
|
+
* back to the static platform default (`python` on Windows, `python3`
|
|
18
|
+
* elsewhere) — preserving legacy behavior.
|
|
19
|
+
*/
|
|
20
|
+
let resolvedPythonCommand = null;
|
|
21
|
+
export function setResolvedPythonCommand(cmd) {
|
|
22
|
+
const trimmed = cmd.trim();
|
|
23
|
+
resolvedPythonCommand = trimmed || null;
|
|
24
|
+
}
|
|
25
|
+
/** Test helper — clear the resolved cache between unit tests. */
|
|
26
|
+
export function resetResolvedPythonCommand() {
|
|
27
|
+
resolvedPythonCommand = null;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the Python command for the host platform.
|
|
31
|
+
*
|
|
32
|
+
* Returns the resolved command if `setResolvedPythonCommand` has been called;
|
|
33
|
+
* otherwise the static platform default — Windows: `python`, others:
|
|
34
|
+
* `python3`. Pass an explicit `platform` arg only for unit tests (it bypasses
|
|
35
|
+
* the resolved cache).
|
|
36
|
+
*/
|
|
37
|
+
export function getPythonCommandForPlatform(platform) {
|
|
38
|
+
if (platform === undefined && resolvedPythonCommand) {
|
|
39
|
+
return resolvedPythonCommand;
|
|
40
|
+
}
|
|
41
|
+
const target = platform ?? process.platform;
|
|
42
|
+
return target === "win32" ? "python" : "python3";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Replace literal `python3` with the resolved Python command, excluding
|
|
46
|
+
* shebang lines.
|
|
47
|
+
*
|
|
48
|
+
* Applied at init/update write time so that all file types (including .py,
|
|
49
|
+
* .md, .toml, .json) get the correct command for the host platform without
|
|
50
|
+
* template-level changes.
|
|
51
|
+
*
|
|
52
|
+
* No-op when the resolved command is `python3` (the template default).
|
|
53
|
+
* Idempotent: running it twice produces the same result.
|
|
54
|
+
*/
|
|
55
|
+
export function replacePythonCommandLiterals(content) {
|
|
56
|
+
const target = getPythonCommandForPlatform();
|
|
57
|
+
if (target === "python3")
|
|
58
|
+
return content;
|
|
59
|
+
return content
|
|
60
|
+
.split("\n")
|
|
61
|
+
.map((line) => line.startsWith("#!") ? line : line.replaceAll("python3", target))
|
|
62
|
+
.join("\n");
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve platform-specific placeholders in template content.
|
|
66
|
+
*
|
|
67
|
+
* When called without a context, only resolves {{PYTHON_CMD}} (legacy behavior
|
|
68
|
+
* for settings.json, hooks.json, etc.).
|
|
69
|
+
*
|
|
70
|
+
* When called with a TemplateContext, additionally resolves:
|
|
71
|
+
* - {{CMD_REF:name}} → platform-specific command reference
|
|
72
|
+
* - {{EXECUTOR_AI}} → AI executor description
|
|
73
|
+
* - {{USER_ACTION_LABEL}} → user action label
|
|
74
|
+
* - {{CLI_FLAG}} → platform cli flag (e.g. "claude", "codex")
|
|
75
|
+
* - {{#FLAG}}...{{/FLAG}} → conditional include (when FLAG is true)
|
|
76
|
+
* - {{^FLAG}}...{{/FLAG}} → negated conditional (when FLAG is false)
|
|
77
|
+
*
|
|
78
|
+
* Supported conditional flags: AGENT_CAPABLE, HAS_HOOKS
|
|
79
|
+
*/
|
|
80
|
+
// Pre-compiled regexes for placeholder resolution
|
|
81
|
+
const RE_PYTHON_CMD = /\{\{PYTHON_CMD\}\}/g;
|
|
82
|
+
const RE_CMD_REF = /\{\{CMD_REF:([\w][\w-]*)\}\}/g;
|
|
83
|
+
const RE_EXECUTOR_AI = /\{\{EXECUTOR_AI\}\}/g;
|
|
84
|
+
const RE_USER_ACTION_LABEL = /\{\{USER_ACTION_LABEL\}\}/g;
|
|
85
|
+
const RE_CLI_FLAG = /\{\{CLI_FLAG\}\}/g;
|
|
86
|
+
const RE_BLANK_LINES = /\n{3,}/g;
|
|
87
|
+
const CONDITIONAL_FLAGS = ["AGENT_CAPABLE", "HAS_HOOKS"];
|
|
88
|
+
const CONDITIONAL_REGEXES = Object.fromEntries(CONDITIONAL_FLAGS.map((flag) => [
|
|
89
|
+
flag,
|
|
90
|
+
{
|
|
91
|
+
pos: new RegExp(`\\{\\{#${flag}\\}\\}([\\s\\S]*?)\\{\\{/${flag}\\}\\}`, "g"),
|
|
92
|
+
neg: new RegExp(`\\{\\{\\^${flag}\\}\\}([\\s\\S]*?)\\{\\{/${flag}\\}\\}`, "g"),
|
|
93
|
+
},
|
|
94
|
+
]));
|
|
95
|
+
export function resolvePlaceholders(content, context) {
|
|
96
|
+
let result = replacePythonCommandLiterals(content.replace(RE_PYTHON_CMD, getPythonCommandForPlatform()));
|
|
97
|
+
if (!context)
|
|
98
|
+
return result;
|
|
99
|
+
// Simple substitutions
|
|
100
|
+
result = result.replace(RE_CMD_REF, (_match, name) => `${context.cmdRefPrefix}${name}`);
|
|
101
|
+
result = result.replace(RE_EXECUTOR_AI, context.executorAI);
|
|
102
|
+
result = result.replace(RE_USER_ACTION_LABEL, context.userActionLabel);
|
|
103
|
+
result = result.replace(RE_CLI_FLAG, context.cliFlag);
|
|
104
|
+
// Conditional blocks
|
|
105
|
+
const flagValues = {
|
|
106
|
+
AGENT_CAPABLE: context.agentCapable,
|
|
107
|
+
HAS_HOOKS: context.hasHooks,
|
|
108
|
+
};
|
|
109
|
+
for (const flag of CONDITIONAL_FLAGS) {
|
|
110
|
+
const value = flagValues[flag];
|
|
111
|
+
const { pos, neg } = CONDITIONAL_REGEXES[flag];
|
|
112
|
+
// Reset lastIndex for global regexes reused across calls
|
|
113
|
+
pos.lastIndex = 0;
|
|
114
|
+
neg.lastIndex = 0;
|
|
115
|
+
result = result.replace(pos, value ? "$1" : "");
|
|
116
|
+
result = result.replace(neg, value ? "" : "$1");
|
|
117
|
+
}
|
|
118
|
+
// Clean up blank lines left by removed conditional blocks
|
|
119
|
+
result = result.replace(RE_BLANK_LINES, "\n\n");
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolve placeholders for files written under `.agents/skills/` (the shared
|
|
124
|
+
* Agent Skills directory consumed by multiple platforms via the upstream
|
|
125
|
+
* `.agents/skills/` workspace alias — Codex, Gemini CLI 0.40+, etc.).
|
|
126
|
+
*
|
|
127
|
+
* Identical to {@link resolvePlaceholders} except that {@link CMD_REF} is
|
|
128
|
+
* rendered in a platform-neutral form (`` `name` (Trellis command) ``)
|
|
129
|
+
* instead of substituting a platform-specific prefix. This is the only
|
|
130
|
+
* placeholder that varies between platforms in the 5 shared workflow skills
|
|
131
|
+
* (`brainstorm`, `before-dev`, `check`, `break-loop`, `update-spec`), so
|
|
132
|
+
* neutralizing it makes the rendered SKILL.md files byte-identical regardless
|
|
133
|
+
* of which Trellis configurator wrote them — eliminating the
|
|
134
|
+
* "last-writer-wins" collision when both Codex and Gemini target
|
|
135
|
+
* `.agents/skills/`.
|
|
136
|
+
*
|
|
137
|
+
* `{{CLI_FLAG}}`, `{{EXECUTOR_AI}}`, `{{USER_ACTION_LABEL}}`, conditionals,
|
|
138
|
+
* and `{{PYTHON_CMD}}` are still resolved from the platform context. The 5
|
|
139
|
+
* shared skills do not use those placeholders, so they remain platform-
|
|
140
|
+
* neutral. Codex-only skill files (e.g. `trellis-continue/SKILL.md`,
|
|
141
|
+
* `trellis-finish-work/SKILL.md` written via `resolveAllAsSkillsNeutral`) DO
|
|
142
|
+
* use `{{CLI_FLAG}}` / `{{PYTHON_CMD}}` and resolve to Codex-correct values
|
|
143
|
+
* — no other platform writes those files, so byte-identity is not required.
|
|
144
|
+
*/
|
|
145
|
+
export function resolvePlaceholdersNeutral(content, context) {
|
|
146
|
+
let result = replacePythonCommandLiterals(content.replace(RE_PYTHON_CMD, getPythonCommandForPlatform()));
|
|
147
|
+
if (!context)
|
|
148
|
+
return result;
|
|
149
|
+
// Neutral form for the only collision-causing placeholder
|
|
150
|
+
result = result.replace(RE_CMD_REF, (_match, name) => `\`${name}\` (Trellis command)`);
|
|
151
|
+
result = result.replace(RE_EXECUTOR_AI, context.executorAI);
|
|
152
|
+
result = result.replace(RE_USER_ACTION_LABEL, context.userActionLabel);
|
|
153
|
+
result = result.replace(RE_CLI_FLAG, context.cliFlag);
|
|
154
|
+
// Conditional blocks (resolved per platform — none of the 5 shared skills
|
|
155
|
+
// use conditionals, but Codex-only command-as-skill files might in future).
|
|
156
|
+
const flagValues = {
|
|
157
|
+
AGENT_CAPABLE: context.agentCapable,
|
|
158
|
+
HAS_HOOKS: context.hasHooks,
|
|
159
|
+
};
|
|
160
|
+
for (const flag of CONDITIONAL_FLAGS) {
|
|
161
|
+
const value = flagValues[flag];
|
|
162
|
+
const { pos, neg } = CONDITIONAL_REGEXES[flag];
|
|
163
|
+
pos.lastIndex = 0;
|
|
164
|
+
neg.lastIndex = 0;
|
|
165
|
+
result = result.replace(pos, value ? "$1" : "");
|
|
166
|
+
result = result.replace(neg, value ? "" : "$1");
|
|
167
|
+
}
|
|
168
|
+
result = result.replace(RE_BLANK_LINES, "\n\n");
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
// ---------------------------------------------------------------------------
|
|
172
|
+
// Template wrapping utilities
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
/** Skill description registry — maps template name to auto-trigger description. */
|
|
175
|
+
const SKILL_DESCRIPTIONS = {
|
|
176
|
+
start: "Initializes an AI development session by reading workflow guides, developer identity, git status, active tasks, and project guidelines from .trellis/. Classifies incoming tasks and routes to brainstorm, direct edit, or task workflow. Use when beginning a new coding session, resuming work, starting a new task, or re-establishing project context.",
|
|
177
|
+
continue: "Resume work on the current task. Loads the workflow Phase Index, figures out which phase/step to pick up at, then pulls the step-level detail via get_context.py --mode phase. Use when coming back to an in-progress task and you need to know what to do next.",
|
|
178
|
+
"finish-work": "Wrap up the current session: verify quality gate passed, remind user to commit, archive completed tasks, and record session progress to the developer journal. Use when done coding and ready to end the session.",
|
|
179
|
+
"before-dev": "Discovers and injects project-specific coding guidelines from .trellis/spec/ before implementation begins. Reads spec indexes, pre-development checklists, and shared thinking guides for the target package. Use when starting a new coding task, before writing any code, switching to a different package, or needing to refresh project conventions and standards.",
|
|
180
|
+
brainstorm: "Guides collaborative requirements discovery before implementation. Creates task directory, seeds PRD, asks high-value questions one at a time, researches technical choices, and converges on MVP scope. Use when requirements are unclear, there are multiple valid approaches, or the user describes a new feature or complex task.",
|
|
181
|
+
check: "Comprehensive quality verification: spec compliance, lint, type-check, tests, cross-layer data flow, code reuse, and consistency checks. Use when code is written and needs quality verification, before committing changes, or to catch context drift during long sessions.",
|
|
182
|
+
"break-loop": "Deep bug analysis to break the fix-forget-repeat cycle. Analyzes root cause category, why fixes failed, prevention mechanisms, and captures knowledge into specs. Use after fixing a bug to prevent the same class of bugs.",
|
|
183
|
+
"update-spec": "Captures executable contracts and coding conventions into .trellis/spec/ documents. Use when learning something valuable from debugging, implementing, or discussion that should be preserved for future sessions.",
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Wrap resolved template content with YAML frontmatter for skill format.
|
|
187
|
+
* Used by platforms that use SKILL.md (Codex, Kiro, Qoder, etc.).
|
|
188
|
+
*/
|
|
189
|
+
export function wrapWithSkillFrontmatter(name, content) {
|
|
190
|
+
// Look up description by base name (without trellis- prefix)
|
|
191
|
+
const baseName = name.replace(/^trellis-/, "");
|
|
192
|
+
const description = SKILL_DESCRIPTIONS[baseName];
|
|
193
|
+
if (!description) {
|
|
194
|
+
throw new Error(`Missing skill description for "${baseName}". Add it to SKILL_DESCRIPTIONS in shared.ts.`);
|
|
195
|
+
}
|
|
196
|
+
return `---\nname: ${name}\ndescription: "${description}"\n---\n\n${content}`;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* One-line blurbs shown in a `/` command palette — kept separate from
|
|
200
|
+
* SKILL_DESCRIPTIONS, which is long prose aimed at the skill matcher.
|
|
201
|
+
*/
|
|
202
|
+
const COMMAND_DESCRIPTIONS = {
|
|
203
|
+
start: "Initialize a Trellis development session.",
|
|
204
|
+
continue: "Resume work on the current task at the correct phase.",
|
|
205
|
+
"finish-work": "Wrap up the current session: quality gate, commit reminder, archive, journal.",
|
|
206
|
+
};
|
|
207
|
+
/** Wrap resolved command content with YAML frontmatter (name + description). */
|
|
208
|
+
export function wrapWithCommandFrontmatter(name, content) {
|
|
209
|
+
const baseName = name.replace(/^trellis-/, "");
|
|
210
|
+
const description = COMMAND_DESCRIPTIONS[baseName];
|
|
211
|
+
if (!description) {
|
|
212
|
+
throw new Error(`Missing command description for "${baseName}". Add it to COMMAND_DESCRIPTIONS in shared.ts.`);
|
|
213
|
+
}
|
|
214
|
+
return `---\nname: ${name}\ndescription: ${description}\n---\n\n${content}`;
|
|
215
|
+
}
|
|
216
|
+
// ---------------------------------------------------------------------------
|
|
217
|
+
// Shared configurator helpers
|
|
218
|
+
// ---------------------------------------------------------------------------
|
|
219
|
+
import path from "node:path";
|
|
220
|
+
import { ensureDir, writeFile } from "../utils/file-writer.js";
|
|
221
|
+
import { getBundledSkillTemplates, getCommandTemplates, getSkillTemplates, } from "../templates/common/index.js";
|
|
222
|
+
/**
|
|
223
|
+
* Filter command templates based on platform capabilities.
|
|
224
|
+
*
|
|
225
|
+
* `start.md` is only emitted for agent-less platforms (kilo, antigravity,
|
|
226
|
+
* windsurf). On agent-capable platforms, the session-start hook / plugin
|
|
227
|
+
* already injects the workflow overview, so a user-facing `start` command
|
|
228
|
+
* would be redundant.
|
|
229
|
+
*/
|
|
230
|
+
function filterCommands(templates, ctx) {
|
|
231
|
+
if (ctx.agentCapable) {
|
|
232
|
+
return templates.filter((t) => t.name !== "start");
|
|
233
|
+
}
|
|
234
|
+
return templates;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Resolve ALL templates as skills with trellis- prefix.
|
|
238
|
+
* Used by skill-only platforms (Kiro, Qoder, Codex) where everything is a skill.
|
|
239
|
+
*
|
|
240
|
+
* `start` is filtered out on agent-capable platforms — the session-start hook
|
|
241
|
+
* injects the workflow overview instead.
|
|
242
|
+
*/
|
|
243
|
+
export function resolveAllAsSkills(ctx) {
|
|
244
|
+
const templates = [
|
|
245
|
+
...filterCommands(getCommandTemplates(), ctx),
|
|
246
|
+
...getSkillTemplates(),
|
|
247
|
+
];
|
|
248
|
+
return templates.map((tmpl) => ({
|
|
249
|
+
name: `trellis-${tmpl.name}`,
|
|
250
|
+
content: wrapWithSkillFrontmatter(`trellis-${tmpl.name}`, resolvePlaceholders(tmpl.content, ctx)),
|
|
251
|
+
}));
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Resolve command templates as plain commands (no wrapping).
|
|
255
|
+
* Used by "both" platforms for the user-ritual commands.
|
|
256
|
+
*
|
|
257
|
+
* `start` is filtered out on agent-capable platforms.
|
|
258
|
+
*/
|
|
259
|
+
export function resolveCommands(ctx) {
|
|
260
|
+
return filterCommands(getCommandTemplates(), ctx).map((tmpl) => ({
|
|
261
|
+
name: tmpl.name,
|
|
262
|
+
content: resolvePlaceholders(tmpl.content, ctx),
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Resolve only the 5 skill templates with trellis- prefix + SKILL.md frontmatter.
|
|
267
|
+
* Used by "both" platforms for the auto-triggered skills.
|
|
268
|
+
*/
|
|
269
|
+
export function resolveSkills(ctx) {
|
|
270
|
+
return getSkillTemplates().map((tmpl) => ({
|
|
271
|
+
name: `trellis-${tmpl.name}`,
|
|
272
|
+
content: wrapWithSkillFrontmatter(`trellis-${tmpl.name}`, resolvePlaceholders(tmpl.content, ctx)),
|
|
273
|
+
}));
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Same as {@link resolveSkills} but uses {@link resolvePlaceholdersNeutral}
|
|
277
|
+
* so the rendered SKILL.md files are byte-identical across any two platforms
|
|
278
|
+
* that target `.agents/skills/`. Use this for shared `.agents/skills/`
|
|
279
|
+
* writes (Gemini); platform-private skill roots should keep
|
|
280
|
+
* {@link resolveSkills}.
|
|
281
|
+
*/
|
|
282
|
+
export function resolveSkillsNeutral(ctx) {
|
|
283
|
+
return getSkillTemplates().map((tmpl) => ({
|
|
284
|
+
name: `trellis-${tmpl.name}`,
|
|
285
|
+
content: wrapWithSkillFrontmatter(`trellis-${tmpl.name}`, resolvePlaceholdersNeutral(tmpl.content, ctx)),
|
|
286
|
+
}));
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Same as {@link resolveAllAsSkills} but uses
|
|
290
|
+
* {@link resolvePlaceholdersNeutral} for the 5 shared skills. The 2 command
|
|
291
|
+
* templates (continue, finish-work) folded into the skill set still resolve
|
|
292
|
+
* `{{CLI_FLAG}}` / `{{PYTHON_CMD}}` per platform — only Codex writes those
|
|
293
|
+
* files into `.agents/skills/`, so byte-identity isn't required there.
|
|
294
|
+
*/
|
|
295
|
+
export function resolveAllAsSkillsNeutral(ctx) {
|
|
296
|
+
const templates = [
|
|
297
|
+
...filterCommands(getCommandTemplates(), ctx),
|
|
298
|
+
...getSkillTemplates(),
|
|
299
|
+
];
|
|
300
|
+
return templates.map((tmpl) => ({
|
|
301
|
+
name: `trellis-${tmpl.name}`,
|
|
302
|
+
content: wrapWithSkillFrontmatter(`trellis-${tmpl.name}`, resolvePlaceholdersNeutral(tmpl.content, ctx)),
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Codex needs a `trellis-start` skill in `.agents/skills/` so the
|
|
307
|
+
* `<trellis-bootstrap>` notice from `inject-workflow-state.py` resolves
|
|
308
|
+
* to an actual skill file (the bootstrap notice tells the AI to invoke
|
|
309
|
+
* `$trellis-start` once on the first `no_task` turn — added in 0.5.5
|
|
310
|
+
* after the Codex SessionStart hook was removed for de-recursion).
|
|
311
|
+
*
|
|
312
|
+
* Built from `common/commands/start.md` + skill frontmatter; renders
|
|
313
|
+
* neutrally so init and update produce byte-identical output. Returns
|
|
314
|
+
* `null` if the template is missing (defensive — should never happen).
|
|
315
|
+
*
|
|
316
|
+
* Used by both `configureCodex()` (init path, file write) and
|
|
317
|
+
* `collectPlatformTemplates.codex` (update path, manifest map). Both
|
|
318
|
+
* paths must agree, otherwise upgraded users miss the file (which broke
|
|
319
|
+
* 0.4.x → 0.5.5/0.5.6 upgrades — see #247-style symptom: AI reports
|
|
320
|
+
* "no .agents/skills/trellis-start/SKILL.md" because update only ran
|
|
321
|
+
* `collectTemplates` and never wrote the file).
|
|
322
|
+
*/
|
|
323
|
+
export function resolveCodexTrellisStartSkill(ctx) {
|
|
324
|
+
const startTemplate = getCommandTemplates().find((t) => t.name === "start");
|
|
325
|
+
if (!startTemplate)
|
|
326
|
+
return null;
|
|
327
|
+
return {
|
|
328
|
+
name: "trellis-start",
|
|
329
|
+
content: wrapWithSkillFrontmatter("trellis-start", resolvePlaceholdersNeutral(startTemplate.content, ctx)),
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Resolve multi-file built-in skills.
|
|
334
|
+
*
|
|
335
|
+
* Unlike workflow skills, bundled skills already contain their own SKILL.md
|
|
336
|
+
* frontmatter and may include references/assets. They are still rendered
|
|
337
|
+
* through placeholder resolution so init and update get byte-identical output.
|
|
338
|
+
*/
|
|
339
|
+
export function resolveBundledSkills(ctx) {
|
|
340
|
+
return getBundledSkillTemplates().flatMap((skill) => skill.files.map((file) => ({
|
|
341
|
+
relativePath: `${skill.name}/${file.relativePath}`,
|
|
342
|
+
content: resolvePlaceholders(file.content, ctx),
|
|
343
|
+
})));
|
|
344
|
+
}
|
|
345
|
+
// ---------------------------------------------------------------------------
|
|
346
|
+
// Shared configurator write helpers
|
|
347
|
+
// ---------------------------------------------------------------------------
|
|
348
|
+
/** Collect skill files under a target root for update hash tracking. */
|
|
349
|
+
export function collectSkillTemplates(skillsRoot, skills, bundledSkills = []) {
|
|
350
|
+
const files = new Map();
|
|
351
|
+
for (const skill of skills) {
|
|
352
|
+
files.set(`${skillsRoot}/${skill.name}/SKILL.md`, skill.content);
|
|
353
|
+
}
|
|
354
|
+
for (const skillFile of bundledSkills) {
|
|
355
|
+
files.set(`${skillsRoot}/${skillFile.relativePath}`, skillFile.content);
|
|
356
|
+
}
|
|
357
|
+
return files;
|
|
358
|
+
}
|
|
359
|
+
/** Write skill directories from resolved templates and bundled skill files. */
|
|
360
|
+
export async function writeSkills(skillsRoot, skills, bundledSkills = []) {
|
|
361
|
+
ensureDir(skillsRoot);
|
|
362
|
+
for (const skill of skills) {
|
|
363
|
+
const skillDir = path.join(skillsRoot, skill.name);
|
|
364
|
+
ensureDir(skillDir);
|
|
365
|
+
await writeFile(path.join(skillDir, "SKILL.md"), replacePythonCommandLiterals(skill.content));
|
|
366
|
+
}
|
|
367
|
+
for (const skillFile of bundledSkills) {
|
|
368
|
+
const targetPath = path.join(skillsRoot, skillFile.relativePath);
|
|
369
|
+
ensureDir(path.dirname(targetPath));
|
|
370
|
+
await writeFile(targetPath, replacePythonCommandLiterals(skillFile.content));
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/** Write agent/droid definition files */
|
|
374
|
+
export async function writeAgents(agentsDir, agents, ext = ".md") {
|
|
375
|
+
ensureDir(agentsDir);
|
|
376
|
+
for (const agent of agents) {
|
|
377
|
+
await writeFile(path.join(agentsDir, `${agent.name}${ext}`), replacePythonCommandLiterals(agent.content));
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/** Write the shared hook scripts that `platform` actually registers. */
|
|
381
|
+
export async function writeSharedHooks(hooksDir, platform) {
|
|
382
|
+
const { getSharedHookScriptsForPlatform } = await import("../templates/shared-hooks/index.js");
|
|
383
|
+
ensureDir(hooksDir);
|
|
384
|
+
for (const hook of getSharedHookScriptsForPlatform(platform)) {
|
|
385
|
+
await writeFile(path.join(hooksDir, hook.name), replacePythonCommandLiterals(hook.content));
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/** Build the standard "load Trellis context first" prelude block. */
|
|
389
|
+
export function buildPullBasedPrelude(agentType) {
|
|
390
|
+
// JSONL filenames stay as implement.jsonl / check.jsonl — they are internal
|
|
391
|
+
// context buckets keyed by role (not by platform-visible agent name).
|
|
392
|
+
const jsonl = agentType === "check" ? "check.jsonl" : "implement.jsonl";
|
|
393
|
+
return replacePythonCommandLiterals(`## Required: Load Trellis Context First
|
|
394
|
+
|
|
395
|
+
This platform does NOT auto-inject task context via hook. Before doing anything else, you MUST load context yourself.
|
|
396
|
+
|
|
397
|
+
### Step 1: Find the active task path
|
|
398
|
+
|
|
399
|
+
Try in order — stop at the first one that yields a task path:
|
|
400
|
+
|
|
401
|
+
1. **Look at the dispatch prompt** you received from the main agent. If its first line is \`Active task: <path>\` (e.g. \`Active task: .trellis/tasks/04-17-foo\`), use that path. The main agent is required to include this line on class-2 platforms.
|
|
402
|
+
2. **Run** \`python3 ./.trellis/scripts/task.py current --source\` and read the \`Current task:\` line.
|
|
403
|
+
3. **If both fail** (no \`Active task:\` line in the prompt and \`task.py current\` returns no task), ask the user which task to work on; do NOT guess.
|
|
404
|
+
|
|
405
|
+
### Step 2: Load task context from the resolved path
|
|
406
|
+
|
|
407
|
+
1. Read \`<task-path>/${jsonl}\` — JSONL list of spec/research files relevant to this agent.
|
|
408
|
+
2. For each entry in the JSONL, Read its \`file\` path — these are the specs and research notes you must follow.
|
|
409
|
+
**Skip rows without a \`"file"\` field** (e.g. \`{"_example": "..."}\` seed rows left over from \`task.py create\` before the curator ran).
|
|
410
|
+
3. Read the task's \`prd.md\` (requirements), then \`design.md\` if present (technical design), then \`implement.md\` if present (execution plan).
|
|
411
|
+
|
|
412
|
+
If \`${jsonl}\` has no curated entries (only a seed row, or the file is missing), fall back to: read the task artifacts, list available specs with \`python3 ./.trellis/scripts/get_context.py --mode packages\`, and pick the specs that match the task domain yourself. Do NOT block on the missing jsonl — lightweight tasks may be PRD-only, while complex tasks may also include \`design.md\` and \`implement.md\`.
|
|
413
|
+
|
|
414
|
+
If the resolved task path has no \`prd.md\`, ask the user what to work on; do NOT proceed without context.
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
`);
|
|
419
|
+
}
|
|
420
|
+
/** Insert prelude into a markdown agent definition (after YAML frontmatter). */
|
|
421
|
+
export function injectPullBasedPreludeMarkdown(content, agentType) {
|
|
422
|
+
const prelude = buildPullBasedPrelude(agentType);
|
|
423
|
+
const sections = splitMarkdownFrontmatter(content);
|
|
424
|
+
if (!sections) {
|
|
425
|
+
return prelude + content;
|
|
426
|
+
}
|
|
427
|
+
const head = `---\n${sections.frontmatter}\n---`;
|
|
428
|
+
const tailTrimmed = sections.body.replace(/^(\r?\n)+/, "");
|
|
429
|
+
return `${head}\n\n${prelude}${tailTrimmed}`;
|
|
430
|
+
}
|
|
431
|
+
/** Insert prelude into a TOML agent (codex `developer_instructions`). */
|
|
432
|
+
export function injectPullBasedPreludeToml(content, agentType) {
|
|
433
|
+
const prelude = buildPullBasedPrelude(agentType);
|
|
434
|
+
// Match: developer_instructions = """ followed by newline
|
|
435
|
+
const re = /(developer_instructions\s*=\s*""")(\r?\n)/;
|
|
436
|
+
if (!re.test(content)) {
|
|
437
|
+
return content;
|
|
438
|
+
}
|
|
439
|
+
return content.replace(re, `$1$2${prelude}`);
|
|
440
|
+
}
|
|
441
|
+
/** Best-effort detect agent type from filename ("trellis-implement.md" → "implement").
|
|
442
|
+
* Returns null for research and unknown names — they skip the prelude.
|
|
443
|
+
*/
|
|
444
|
+
export function detectSubAgentType(name) {
|
|
445
|
+
const base = name.replace(/\.(md|toml|prompt\.md)$/, "");
|
|
446
|
+
if (base === "trellis-implement" || base === "trellis-check") {
|
|
447
|
+
return base === "trellis-implement" ? "implement" : "check";
|
|
448
|
+
}
|
|
449
|
+
return null;
|
|
450
|
+
}
|
|
451
|
+
function splitMarkdownFrontmatter(content) {
|
|
452
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/);
|
|
453
|
+
if (!match) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
return {
|
|
457
|
+
frontmatter: match[1],
|
|
458
|
+
body: content.slice(match[0].length),
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
export function applyPullBasedPreludeMarkdown(agents) {
|
|
462
|
+
return agents.map((a) => {
|
|
463
|
+
const t = detectSubAgentType(a.name);
|
|
464
|
+
if (!t)
|
|
465
|
+
return { ...a };
|
|
466
|
+
return {
|
|
467
|
+
...a,
|
|
468
|
+
content: injectPullBasedPreludeMarkdown(a.content, t),
|
|
469
|
+
};
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
function mapLegacyToolToCopilot(tool) {
|
|
473
|
+
switch (tool) {
|
|
474
|
+
case "Read":
|
|
475
|
+
return ["read"];
|
|
476
|
+
case "Write":
|
|
477
|
+
case "Edit":
|
|
478
|
+
return ["edit"];
|
|
479
|
+
case "Glob":
|
|
480
|
+
case "Grep":
|
|
481
|
+
return ["search"];
|
|
482
|
+
case "Bash":
|
|
483
|
+
return ["execute"];
|
|
484
|
+
case "mcp__exa__web_search_exa":
|
|
485
|
+
case "mcp__exa__get_code_context_exa":
|
|
486
|
+
return ["web", "exa/*"];
|
|
487
|
+
case "mcp__chrome-devtools__*":
|
|
488
|
+
return ["chrome-devtools/*"];
|
|
489
|
+
case "Skill":
|
|
490
|
+
return [];
|
|
491
|
+
default:
|
|
492
|
+
return [];
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
function normalizeCopilotMarkdownAgentFrontmatter(content) {
|
|
496
|
+
const sections = splitMarkdownFrontmatter(content);
|
|
497
|
+
if (!sections) {
|
|
498
|
+
return content;
|
|
499
|
+
}
|
|
500
|
+
const frontmatter = sections.frontmatter.split(/\r?\n/);
|
|
501
|
+
const body = sections.body;
|
|
502
|
+
const normalized = [];
|
|
503
|
+
for (const line of frontmatter) {
|
|
504
|
+
if (!line.startsWith("tools:")) {
|
|
505
|
+
normalized.push(line);
|
|
506
|
+
continue;
|
|
507
|
+
}
|
|
508
|
+
const legacyTools = line
|
|
509
|
+
.slice("tools:".length)
|
|
510
|
+
.split(",")
|
|
511
|
+
.map((token) => token.trim())
|
|
512
|
+
.filter((token) => token.length > 0);
|
|
513
|
+
const tools = [...new Set(legacyTools.flatMap(mapLegacyToolToCopilot))];
|
|
514
|
+
normalized.push("tools:");
|
|
515
|
+
for (const tool of tools) {
|
|
516
|
+
normalized.push(` - ${tool}`);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
return `---\n${normalized.join("\n")}\n---\n${body}`;
|
|
520
|
+
}
|
|
521
|
+
export function normalizeCopilotMarkdownAgents(agents) {
|
|
522
|
+
return agents.map((agent) => ({
|
|
523
|
+
...agent,
|
|
524
|
+
content: normalizeCopilotMarkdownAgentFrontmatter(agent.content),
|
|
525
|
+
}));
|
|
526
|
+
}
|
|
527
|
+
export function applyPullBasedPreludeToml(agents) {
|
|
528
|
+
return agents.map((a) => {
|
|
529
|
+
const t = detectSubAgentType(a.name);
|
|
530
|
+
if (!t)
|
|
531
|
+
return { ...a };
|
|
532
|
+
return {
|
|
533
|
+
...a,
|
|
534
|
+
content: injectPullBasedPreludeToml(a.content, t),
|
|
535
|
+
};
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/configurators/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Windsurf:
|
|
3
|
+
* - workflows/ — start + finish-work as slash commands
|
|
4
|
+
* - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
|
|
5
|
+
*/
|
|
6
|
+
export declare function configureWindsurf(cwd: string): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=windsurf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.d.ts","sourceRoot":"","sources":["../../src/configurators/windsurf.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { AI_TOOLS } from "../types/ai-tools.js";
|
|
3
|
+
import { ensureDir, writeFile } from "../utils/file-writer.js";
|
|
4
|
+
import { resolveBundledSkills, resolveCommands, resolveSkills, writeSkills, } from "./shared.js";
|
|
5
|
+
/**
|
|
6
|
+
* Configure Windsurf:
|
|
7
|
+
* - workflows/ — start + finish-work as slash commands
|
|
8
|
+
* - skills/trellis-{name}/SKILL.md — other 5 as auto-triggered skills
|
|
9
|
+
*/
|
|
10
|
+
export async function configureWindsurf(cwd) {
|
|
11
|
+
const ctx = AI_TOOLS.windsurf.templateContext;
|
|
12
|
+
const workflowsDir = path.join(cwd, ".windsurf", "workflows");
|
|
13
|
+
ensureDir(workflowsDir);
|
|
14
|
+
for (const cmd of resolveCommands(ctx)) {
|
|
15
|
+
await writeFile(path.join(workflowsDir, `trellis-${cmd.name}.md`), cmd.content);
|
|
16
|
+
}
|
|
17
|
+
await writeSkills(path.join(cwd, ".windsurf", "skills"), resolveSkills(ctx), resolveBundledSkills(ctx));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=windsurf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windsurf.js","sourceRoot":"","sources":["../../src/configurators/windsurf.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;IAE9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAC9D,SAAS,CAAC,YAAY,CAAC,CAAC;IACxB,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,SAAS,CACb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,EACjD,GAAG,CAAC,OAAO,CACZ,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,CACf,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,EACrC,aAAa,CAAC,GAAG,CAAC,EAClB,oBAAoB,CAAC,GAAG,CAAC,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ProjectType, type DetectedPackage } from "../utils/project-detector.js";
|
|
2
|
+
/**
|
|
3
|
+
* Options for creating workflow structure
|
|
4
|
+
*/
|
|
5
|
+
export interface WorkflowOptions {
|
|
6
|
+
/** Detected or specified project type */
|
|
7
|
+
projectType: ProjectType;
|
|
8
|
+
/** Skip creating local spec templates (when using remote template) — single-repo mode */
|
|
9
|
+
skipSpecTemplates?: boolean;
|
|
10
|
+
/** Detected monorepo packages (enables monorepo spec creation) */
|
|
11
|
+
packages?: DetectedPackage[];
|
|
12
|
+
/** Package names that use remote templates (skip blank spec for these) */
|
|
13
|
+
remoteSpecPackages?: Set<string>;
|
|
14
|
+
}
|
|
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
|
+
*
|
|
25
|
+
* @param cwd - Current working directory
|
|
26
|
+
* @param options - Workflow options including project type
|
|
27
|
+
*/
|
|
28
|
+
export declare function createWorkflowStructure(cwd: string, options?: WorkflowOptions): Promise<void>;
|
|
29
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"AAsCA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAOtC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CAmDf"}
|