@blulotus/trellis 0.7.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/LICENSE +235 -0
- package/README.md +149 -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 +276 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/channel/adapters/claude.d.ts +29 -0
- package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
- package/dist/commands/channel/adapters/claude.js +203 -0
- package/dist/commands/channel/adapters/claude.js.map +1 -0
- package/dist/commands/channel/adapters/codex.d.ts +93 -0
- package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
- package/dist/commands/channel/adapters/codex.js +573 -0
- package/dist/commands/channel/adapters/codex.js.map +1 -0
- package/dist/commands/channel/adapters/index.d.ts +86 -0
- package/dist/commands/channel/adapters/index.d.ts.map +1 -0
- package/dist/commands/channel/adapters/index.js +115 -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 +158 -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 +311 -0
- package/dist/commands/channel/context-loader.js.map +1 -0
- package/dist/commands/channel/context-trust.d.ts +31 -0
- package/dist/commands/channel/context-trust.d.ts.map +1 -0
- package/dist/commands/channel/context-trust.js +139 -0
- package/dist/commands/channel/context-trust.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/guard.d.ts +150 -0
- package/dist/commands/channel/guard.d.ts.map +1 -0
- package/dist/commands/channel/guard.js +479 -0
- package/dist/commands/channel/guard.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 +535 -0
- package/dist/commands/channel/index.js.map +1 -0
- package/dist/commands/channel/interrupt.d.ts +10 -0
- package/dist/commands/channel/interrupt.d.ts.map +1 -0
- package/dist/commands/channel/interrupt.js +22 -0
- package/dist/commands/channel/interrupt.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 +15 -0
- package/dist/commands/channel/messages.d.ts.map +1 -0
- package/dist/commands/channel/messages.js +245 -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 +30 -0
- package/dist/commands/channel/run.d.ts.map +1 -0
- package/dist/commands/channel/run.js +130 -0
- package/dist/commands/channel/run.js.map +1 -0
- package/dist/commands/channel/send.d.ts +11 -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 +43 -0
- package/dist/commands/channel/spawn.d.ts.map +1 -0
- package/dist/commands/channel/spawn.js +247 -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 +77 -0
- package/dist/commands/channel/store/paths.d.ts.map +1 -0
- package/dist/commands/channel/store/paths.js +272 -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 +146 -0
- package/dist/commands/channel/store/watch.js.map +1 -0
- package/dist/commands/channel/supervisor/idle.d.ts +45 -0
- package/dist/commands/channel/supervisor/idle.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/idle.js +70 -0
- package/dist/commands/channel/supervisor/idle.js.map +1 -0
- package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
- package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/inbox.js +160 -0
- package/dist/commands/channel/supervisor/inbox.js.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts +68 -0
- package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/shutdown.js +146 -0
- package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
- package/dist/commands/channel/supervisor/stdout.d.ts +53 -0
- package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/stdout.js +168 -0
- package/dist/commands/channel/supervisor/stdout.js.map +1 -0
- package/dist/commands/channel/supervisor/turns.d.ts +31 -0
- package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/turns.js +45 -0
- package/dist/commands/channel/supervisor/turns.js.map +1 -0
- package/dist/commands/channel/supervisor/warning.d.ts +48 -0
- package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
- package/dist/commands/channel/supervisor/warning.js +77 -0
- package/dist/commands/channel/supervisor/warning.js.map +1 -0
- package/dist/commands/channel/supervisor.d.ts +75 -0
- package/dist/commands/channel/supervisor.d.ts.map +1 -0
- package/dist/commands/channel/supervisor.js +397 -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 +17 -0
- package/dist/commands/channel/wait.d.ts.map +1 -0
- package/dist/commands/channel/wait.js +75 -0
- package/dist/commands/channel/wait.js.map +1 -0
- package/dist/commands/init.d.ts +71 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1603 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mem.d.ts +30 -0
- package/dist/commands/mem.d.ts.map +1 -0
- package/dist/commands/mem.js +447 -0
- package/dist/commands/mem.js.map +1 -0
- package/dist/commands/uninstall.d.ts +36 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +410 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +111 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +2152 -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/commands/workflow.d.ts +52 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +454 -0
- package/dist/commands/workflow.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 +11 -0
- package/dist/configurators/antigravity.js.map +1 -0
- package/dist/configurators/claude.d.ts +23 -0
- package/dist/configurators/claude.d.ts.map +1 -0
- package/dist/configurators/claude.js +123 -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 +24 -0
- package/dist/configurators/codebuddy.js.map +1 -0
- package/dist/configurators/codex.d.ts +57 -0
- package/dist/configurators/codex.d.ts.map +1 -0
- package/dist/configurators/codex.js +170 -0
- package/dist/configurators/codex.js.map +1 -0
- package/dist/configurators/copilot.d.ts +14 -0
- package/dist/configurators/copilot.d.ts.map +1 -0
- package/dist/configurators/copilot.js +46 -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 +23 -0
- package/dist/configurators/cursor.js.map +1 -0
- package/dist/configurators/devin.d.ts +8 -0
- package/dist/configurators/devin.d.ts.map +1 -0
- package/dist/configurators/devin.js +12 -0
- package/dist/configurators/devin.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 +24 -0
- package/dist/configurators/droid.js.map +1 -0
- package/dist/configurators/dsh.d.ts +26 -0
- package/dist/configurators/dsh.d.ts.map +1 -0
- package/dist/configurators/dsh.js +76 -0
- package/dist/configurators/dsh.js.map +1 -0
- package/dist/configurators/gemini.d.ts +18 -0
- package/dist/configurators/gemini.d.ts.map +1 -0
- package/dist/configurators/gemini.js +39 -0
- package/dist/configurators/gemini.js.map +1 -0
- package/dist/configurators/grok.d.ts +17 -0
- package/dist/configurators/grok.d.ts.map +1 -0
- package/dist/configurators/grok.js +38 -0
- package/dist/configurators/grok.js.map +1 -0
- package/dist/configurators/index.d.ts +68 -0
- package/dist/configurators/index.d.ts.map +1 -0
- package/dist/configurators/index.js +191 -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 +11 -0
- package/dist/configurators/kilo.js.map +1 -0
- package/dist/configurators/kimi.d.ts +26 -0
- package/dist/configurators/kimi.d.ts.map +1 -0
- package/dist/configurators/kimi.js +74 -0
- package/dist/configurators/kimi.js.map +1 -0
- package/dist/configurators/kiro.d.ts +11 -0
- package/dist/configurators/kiro.d.ts.map +1 -0
- package/dist/configurators/kiro.js +30 -0
- package/dist/configurators/kiro.js.map +1 -0
- package/dist/configurators/omp.d.ts +6 -0
- package/dist/configurators/omp.d.ts.map +1 -0
- package/dist/configurators/omp.js +28 -0
- package/dist/configurators/omp.js.map +1 -0
- package/dist/configurators/opencode.d.ts +5 -0
- package/dist/configurators/opencode.d.ts.map +1 -0
- package/dist/configurators/opencode.js +84 -0
- package/dist/configurators/opencode.js.map +1 -0
- package/dist/configurators/pi.d.ts +5 -0
- package/dist/configurators/pi.d.ts.map +1 -0
- package/dist/configurators/pi.js +39 -0
- package/dist/configurators/pi.js.map +1 -0
- package/dist/configurators/qoder.d.ts +12 -0
- package/dist/configurators/qoder.d.ts.map +1 -0
- package/dist/configurators/qoder.js +30 -0
- package/dist/configurators/qoder.js.map +1 -0
- package/dist/configurators/reasonix.d.ts +17 -0
- package/dist/configurators/reasonix.d.ts.map +1 -0
- package/dist/configurators/reasonix.js +37 -0
- package/dist/configurators/reasonix.js.map +1 -0
- package/dist/configurators/shared.d.ts +187 -0
- package/dist/configurators/shared.d.ts.map +1 -0
- package/dist/configurators/shared.js +590 -0
- package/dist/configurators/shared.js.map +1 -0
- package/dist/configurators/snow.d.ts +25 -0
- package/dist/configurators/snow.d.ts.map +1 -0
- package/dist/configurators/snow.js +69 -0
- package/dist/configurators/snow.js.map +1 -0
- package/dist/configurators/trae.d.ts +16 -0
- package/dist/configurators/trae.d.ts.map +1 -0
- package/dist/configurators/trae.js +34 -0
- package/dist/configurators/trae.js.map +1 -0
- package/dist/configurators/workflow.d.ts +51 -0
- package/dist/configurators/workflow.d.ts.map +1 -0
- package/dist/configurators/workflow.js +210 -0
- package/dist/configurators/workflow.js.map +1 -0
- package/dist/configurators/zcode.d.ts +23 -0
- package/dist/configurators/zcode.d.ts.map +1 -0
- package/dist/configurators/zcode.js +63 -0
- package/dist/configurators/zcode.js.map +1 -0
- package/dist/constants/paths.d.ts +74 -0
- package/dist/constants/paths.d.ts.map +1 -0
- package/dist/constants/paths.js +83 -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.16.json +9 -0
- package/dist/migrations/manifests/0.5.17.json +9 -0
- package/dist/migrations/manifests/0.5.18.json +9 -0
- package/dist/migrations/manifests/0.5.19.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.15.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.18.json +16 -0
- package/dist/migrations/manifests/0.6.0-beta.19.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.20.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.21.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.22.json +9 -0
- package/dist/migrations/manifests/0.6.0-beta.23.json +88 -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/migrations/manifests/0.6.0-rc.0.json +9 -0
- package/dist/migrations/manifests/0.6.0.json +1 -0
- package/dist/migrations/manifests/0.6.1.json +9 -0
- package/dist/migrations/manifests/0.6.10.json +9 -0
- package/dist/migrations/manifests/0.6.11.json +9 -0
- package/dist/migrations/manifests/0.6.12.json +9 -0
- package/dist/migrations/manifests/0.6.13.json +9 -0
- package/dist/migrations/manifests/0.6.14.json +9 -0
- package/dist/migrations/manifests/0.6.2.json +9 -0
- package/dist/migrations/manifests/0.6.3.json +24 -0
- package/dist/migrations/manifests/0.6.4.json +9 -0
- package/dist/migrations/manifests/0.6.5.json +9 -0
- package/dist/migrations/manifests/0.6.6.json +17 -0
- package/dist/migrations/manifests/0.6.7.json +9 -0
- package/dist/migrations/manifests/0.6.8.json +17 -0
- package/dist/migrations/manifests/0.6.9.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.0.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.1.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.2.json +9 -0
- package/dist/migrations/manifests/0.7.0-beta.3.json +9 -0
- package/dist/templates/claude/agents/trellis-check.md +115 -0
- package/dist/templates/claude/agents/trellis-implement.md +115 -0
- package/dist/templates/claude/agents/trellis-research.md +137 -0
- package/dist/templates/claude/hooks/statusline.py +332 -0
- package/dist/templates/claude/index.d.ts +31 -0
- package/dist/templates/claude/index.d.ts.map +1 -0
- package/dist/templates/claude/index.js +57 -0
- package/dist/templates/claude/index.js.map +1 -0
- package/dist/templates/claude/settings.json +95 -0
- package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
- package/dist/templates/codebuddy/agents/trellis-implement.md +115 -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 +69 -0
- package/dist/templates/codex/agents/trellis-check.toml +56 -0
- package/dist/templates/codex/agents/trellis-implement.toml +37 -0
- package/dist/templates/codex/agents/trellis-research.toml +78 -0
- package/dist/templates/codex/config.toml +39 -0
- package/dist/templates/codex/hooks/session-start.py +568 -0
- package/dist/templates/codex/hooks.json +52 -0
- package/dist/templates/codex/index.d.ts +35 -0
- package/dist/templates/codex/index.d.ts.map +1 -0
- package/dist/templates/codex/index.js +67 -0
- package/dist/templates/codex/index.js.map +1 -0
- package/dist/templates/common/bundled-skills/trellis-channel/SKILL.md +67 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/command-reference.md +480 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/forum.md +233 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/progress-debugging.md +226 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/workers.md +276 -0
- package/dist/templates/common/bundled-skills/trellis-channel/references/workflows.md +128 -0
- package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +85 -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 +56 -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 +123 -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/bundled-skills.md +159 -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/multi-agent-channel.md +69 -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 +130 -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 +84 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +73 -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 +113 -0
- package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +87 -0
- package/dist/templates/common/bundled-skills/trellis-session-insight/SKILL.md +81 -0
- package/dist/templates/common/bundled-skills/trellis-session-insight/references/cli-quick-reference.md +65 -0
- package/dist/templates/common/bundled-skills/trellis-session-insight/references/triggering-patterns.md +93 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/SKILL.md +41 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/mcp-setup.md +90 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/repository-analysis.md +59 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-task-planning.md +61 -0
- package/dist/templates/common/bundled-skills/trellis-spec-bootstrap/references/spec-writing.md +70 -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 +46 -0
- package/dist/templates/common/skills/brainstorm.md +212 -0
- package/dist/templates/common/skills/break-loop.md +184 -0
- package/dist/templates/common/skills/check.md +106 -0
- package/dist/templates/common/skills/tdd.md +142 -0
- package/dist/templates/common/skills/update-spec.md +351 -0
- package/dist/templates/copilot/copilot-instructions.md +11 -0
- package/dist/templates/copilot/hooks/session-start.py +564 -0
- package/dist/templates/copilot/hooks.json +19 -0
- package/dist/templates/copilot/index.d.ts +28 -0
- package/dist/templates/copilot/index.d.ts.map +1 -0
- package/dist/templates/copilot/index.js +61 -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 +173 -0
- package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
- package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +170 -0
- package/dist/templates/copilot/prompts/check.prompt.md +110 -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 +114 -0
- package/dist/templates/cursor/agents/trellis-implement.md +114 -0
- package/dist/templates/cursor/agents/trellis-research.md +136 -0
- package/dist/templates/cursor/hooks.json +24 -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 +107 -0
- package/dist/templates/droid/droids/trellis-implement.md +107 -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 +69 -0
- package/dist/templates/dsh/DSH.md +80 -0
- package/dist/templates/dsh/agents/trellis-check.md +99 -0
- package/dist/templates/dsh/agents/trellis-implement.md +106 -0
- package/dist/templates/dsh/agents/trellis-research.md +134 -0
- package/dist/templates/dsh/index.d.ts +22 -0
- package/dist/templates/dsh/index.d.ts.map +1 -0
- package/dist/templates/dsh/index.js +27 -0
- package/dist/templates/dsh/index.js.map +1 -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 +107 -0
- package/dist/templates/gemini/agents/trellis-implement.md +107 -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 +40 -0
- package/dist/templates/grok/agents/trellis-check.md +106 -0
- package/dist/templates/grok/agents/trellis-implement.md +121 -0
- package/dist/templates/grok/agents/trellis-research.md +146 -0
- package/dist/templates/grok/index.d.ts +16 -0
- package/dist/templates/grok/index.d.ts.map +1 -0
- package/dist/templates/grok/index.js +19 -0
- package/dist/templates/grok/index.js.map +1 -0
- package/dist/templates/kimi/agents/trellis-check.md +104 -0
- package/dist/templates/kimi/agents/trellis-implement.md +120 -0
- package/dist/templates/kimi/agents/trellis-research.md +144 -0
- package/dist/templates/kimi/index.d.ts +20 -0
- package/dist/templates/kimi/index.d.ts.map +1 -0
- package/dist/templates/kimi/index.js +23 -0
- package/dist/templates/kimi/index.js.map +1 -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/agents/trellis.json +34 -0
- package/dist/templates/kiro/hooks/trellis-workflow-state.kiro.hook +14 -0
- package/dist/templates/kiro/index.d.ts +32 -0
- package/dist/templates/kiro/index.d.ts.map +1 -0
- package/dist/templates/kiro/index.js +28 -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 +327 -0
- package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +633 -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/omp/agents/trellis-check.md +41 -0
- package/dist/templates/omp/agents/trellis-implement.md +55 -0
- package/dist/templates/omp/agents/trellis-research.md +30 -0
- package/dist/templates/omp/extensions/trellis/index.ts.txt +592 -0
- package/dist/templates/omp/index.d.ts +4 -0
- package/dist/templates/omp/index.d.ts.map +1 -0
- package/dist/templates/omp/index.js +9 -0
- package/dist/templates/omp/index.js.map +1 -0
- package/dist/templates/opencode/agents/trellis-check.md +122 -0
- package/dist/templates/opencode/agents/trellis-implement.md +123 -0
- package/dist/templates/opencode/agents/trellis-research.md +145 -0
- package/dist/templates/opencode/lib/context-visibility.js +86 -0
- package/dist/templates/opencode/lib/session-utils.js +526 -0
- package/dist/templates/opencode/lib/trellis-context.js +627 -0
- package/dist/templates/opencode/package.json +5 -0
- package/dist/templates/opencode/plugins/inject-spec-context.js +121 -0
- package/dist/templates/opencode/plugins/inject-subagent-context.js +569 -0
- package/dist/templates/opencode/plugins/inject-workflow-state.js +340 -0
- package/dist/templates/opencode/plugins/session-start.js +74 -0
- package/dist/templates/pi/agents/trellis-check.md +37 -0
- package/dist/templates/pi/agents/trellis-implement.md +52 -0
- package/dist/templates/pi/agents/trellis-research.md +25 -0
- package/dist/templates/pi/extensions/trellis/index.ts.txt +2033 -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 +9 -0
- package/dist/templates/qoder/agents/trellis-check.md +108 -0
- package/dist/templates/qoder/agents/trellis-implement.md +108 -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 +59 -0
- package/dist/templates/reasonix/agents/trellis-check.md +36 -0
- package/dist/templates/reasonix/agents/trellis-implement.md +51 -0
- package/dist/templates/reasonix/index.d.ts +13 -0
- package/dist/templates/reasonix/index.d.ts.map +1 -0
- package/dist/templates/reasonix/index.js +16 -0
- package/dist/templates/reasonix/index.js.map +1 -0
- package/dist/templates/shared-hooks/index.d.ts +83 -0
- package/dist/templates/shared-hooks/index.d.ts.map +1 -0
- package/dist/templates/shared-hooks/index.js +152 -0
- package/dist/templates/shared-hooks/index.js.map +1 -0
- package/dist/templates/shared-hooks/inject-shell-session-context.py +292 -0
- package/dist/templates/shared-hooks/inject-spec-context.py +844 -0
- package/dist/templates/shared-hooks/inject-subagent-context.py +1175 -0
- package/dist/templates/shared-hooks/inject-workflow-state.py +501 -0
- package/dist/templates/shared-hooks/session-start.py +969 -0
- package/dist/templates/snow/SNOW.md +86 -0
- package/dist/templates/snow/agents/trellis-check.md +136 -0
- package/dist/templates/snow/agents/trellis-implement.md +158 -0
- package/dist/templates/snow/agents/trellis-research.md +114 -0
- package/dist/templates/snow/hooks/beforeSubAgentStart.json +15 -0
- package/dist/templates/snow/hooks/onSessionStart.json +15 -0
- package/dist/templates/snow/hooks/onUserMessage.json +15 -0
- package/dist/templates/snow/hooks/write-trellis-context.py +644 -0
- package/dist/templates/snow/index.d.ts +26 -0
- package/dist/templates/snow/index.d.ts.map +1 -0
- package/dist/templates/snow/index.js +36 -0
- package/dist/templates/snow/index.js.map +1 -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 +64 -0
- package/dist/templates/template-utils.js.map +1 -0
- package/dist/templates/trae/agents/trellis-check.md +108 -0
- package/dist/templates/trae/agents/trellis-implement.md +108 -0
- package/dist/templates/trae/agents/trellis-research.md +137 -0
- package/dist/templates/trae/hooks.json +39 -0
- package/dist/templates/trae/index.d.ts +15 -0
- package/dist/templates/trae/index.d.ts.map +1 -0
- package/dist/templates/trae/index.js +15 -0
- package/dist/templates/trae/index.js.map +1 -0
- package/dist/templates/trellis/agents/check.md +70 -0
- package/dist/templates/trellis/agents/implement.md +81 -0
- package/dist/templates/trellis/config.yaml +205 -0
- package/dist/templates/trellis/gitattributes.txt +9 -0
- package/dist/templates/trellis/gitignore.txt +32 -0
- package/dist/templates/trellis/index.d.ts +70 -0
- package/dist/templates/trellis/index.d.ts.map +1 -0
- package/dist/templates/trellis/index.js +127 -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 +681 -0
- package/dist/templates/trellis/scripts/common/__init__.py +92 -0
- package/dist/templates/trellis/scripts/common/active_task.py +787 -0
- package/dist/templates/trellis/scripts/common/cli_adapter.py +982 -0
- package/dist/templates/trellis/scripts/common/config.py +587 -0
- package/dist/templates/trellis/scripts/common/developer.py +190 -0
- package/dist/templates/trellis/scripts/common/git.py +74 -0
- package/dist/templates/trellis/scripts/common/git_context.py +138 -0
- package/dist/templates/trellis/scripts/common/io.py +61 -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 +508 -0
- package/dist/templates/trellis/scripts/common/safe_commit.py +315 -0
- package/dist/templates/trellis/scripts/common/session_context.py +892 -0
- package/dist/templates/trellis/scripts/common/spec_inject.py +439 -0
- package/dist/templates/trellis/scripts/common/spec_match.py +395 -0
- package/dist/templates/trellis/scripts/common/task_context.py +372 -0
- package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
- package/dist/templates/trellis/scripts/common/task_store.py +1016 -0
- package/dist/templates/trellis/scripts/common/task_utils.py +309 -0
- package/dist/templates/trellis/scripts/common/tasks.py +112 -0
- package/dist/templates/trellis/scripts/common/trellis_config.py +132 -0
- package/dist/templates/trellis/scripts/common/types.py +110 -0
- package/dist/templates/trellis/scripts/common/workflow_phase.py +243 -0
- package/dist/templates/trellis/scripts/common/workflow_selection.py +177 -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 +694 -0
- package/dist/templates/trellis/tasks/.gitkeep +0 -0
- package/dist/templates/trellis/workflow.md +777 -0
- package/dist/templates/zcode/agents/trellis-check.md +110 -0
- package/dist/templates/zcode/agents/trellis-implement.md +116 -0
- package/dist/templates/zcode/agents/trellis-research.md +133 -0
- package/dist/templates/zcode/config.json +52 -0
- package/dist/templates/zcode/index.d.ts +25 -0
- package/dist/templates/zcode/index.d.ts.map +1 -0
- package/dist/templates/zcode/index.js +29 -0
- package/dist/templates/zcode/index.js.map +1 -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 +509 -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/agent-refs.d.ts +31 -0
- package/dist/utils/agent-refs.d.ts.map +1 -0
- package/dist/utils/agent-refs.js +63 -0
- package/dist/utils/agent-refs.js.map +1 -0
- package/dist/utils/atomic-write.d.ts +12 -0
- package/dist/utils/atomic-write.d.ts.map +1 -0
- package/dist/utils/atomic-write.js +30 -0
- package/dist/utils/atomic-write.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 +204 -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/registry-config.d.ts +7 -0
- package/dist/utils/registry-config.d.ts.map +1 -0
- package/dist/utils/registry-config.js +172 -0
- package/dist/utils/registry-config.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 +161 -0
- package/dist/utils/template-fetcher.d.ts.map +1 -0
- package/dist/utils/template-fetcher.js +994 -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 +335 -0
- package/dist/utils/template-hash.js.map +1 -0
- package/dist/utils/uninstall-scrubbers.d.ts +67 -0
- package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
- package/dist/utils/uninstall-scrubbers.js +361 -0
- package/dist/utils/uninstall-scrubbers.js.map +1 -0
- package/dist/utils/workflow-resolver.d.ts +86 -0
- package/dist/utils/workflow-resolver.d.ts.map +1 -0
- package/dist/utils/workflow-resolver.js +265 -0
- package/dist/utils/workflow-resolver.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared hook templates — platform-independent Python hook scripts.
|
|
3
|
+
*
|
|
4
|
+
* These scripts read only from .trellis/ paths (JSONL, prd.md, spec/) and
|
|
5
|
+
* have no platform-specific placeholders. They can be written as-is to any
|
|
6
|
+
* platform's hooks directory.
|
|
7
|
+
*/
|
|
8
|
+
export interface HookScript {
|
|
9
|
+
/** Filename (e.g., "session-start.py") */
|
|
10
|
+
name: string;
|
|
11
|
+
/** Script content — no placeholders, ready to write directly */
|
|
12
|
+
content: string;
|
|
13
|
+
}
|
|
14
|
+
export type SharedHookName = "session-start.py" | "inject-shell-session-context.py" | "inject-workflow-state.py" | "inject-subagent-context.py" | "inject-spec-context.py";
|
|
15
|
+
export type SharedHookPlatform = "claude" | "cursor" | "codex" | "opencode" | "gemini" | "qoder" | "copilot" | "codebuddy" | "droid" | "kiro" | "trae" | "zcode";
|
|
16
|
+
/**
|
|
17
|
+
* Which shared hooks each platform actually invokes. Single source of truth
|
|
18
|
+
* for shared-hook distribution — `collectSharedHooks` reads this table, and
|
|
19
|
+
* both `trellis init` and `trellis update` consume the map it returns.
|
|
20
|
+
*
|
|
21
|
+
* Routing rules encoded here:
|
|
22
|
+
* - `session-start.py` — shipped by every platform with a SessionStart
|
|
23
|
+
* hook event *except* codex + copilot, which bundle a platform-specific
|
|
24
|
+
* session-start.py under their own template dirs.
|
|
25
|
+
* - `inject-workflow-state.py` — every platform with a UserPromptSubmit
|
|
26
|
+
* (or equivalent) event. Kiro + codex self-included; platforms without
|
|
27
|
+
* per-turn main-session hooks are excluded.
|
|
28
|
+
* - `inject-subagent-context.py` — platforms with native sub-agent context
|
|
29
|
+
* delivery. Most use a PreToolUse prompt mutation; Codex uses its
|
|
30
|
+
* SubagentStart `additionalContext` event. Class-2 (pull-based) platforms
|
|
31
|
+
* such as copilot, gemini, qoder, and trae still load context from a
|
|
32
|
+
* self-loading agent profile.
|
|
33
|
+
* - `inject-shell-session-context.py` — platforms with a hook that fires
|
|
34
|
+
* *before* a shell command and receives both the session id and the pending
|
|
35
|
+
* command. That hook is the only channel by which session identity reaches
|
|
36
|
+
* `task.py`, which runs in the shell child: no platform researched exports a
|
|
37
|
+
* session id into that child (2026-08-05 audit of 21 platforms). Declaring a
|
|
38
|
+
* platform here also requires an entry in its own hook config template —
|
|
39
|
+
* `shared-hooks.test.ts` fails the build when the two disagree, because a
|
|
40
|
+
* script on disk that nothing invokes is indistinguishable from success.
|
|
41
|
+
* Kiro is deliberately absent: its two hook surfaces (CLI agent JSON
|
|
42
|
+
* `hooks.{agentSpawn,userPromptSubmit}` and IDE `.kiro.hook` `when.type`)
|
|
43
|
+
* publish no pre-tool trigger, and an unknown key in the agent JSON risks
|
|
44
|
+
* the whole agent failing to load. Settle it by running Kiro and checking
|
|
45
|
+
* its hook trigger list before adding it.
|
|
46
|
+
* - Kiro supports per-turn + spawn hooks on both surfaces (per the official
|
|
47
|
+
* docs https://kiro.dev/docs/cli/hooks/): the CLI custom agent declares
|
|
48
|
+
* `hooks.userPromptSubmit` + `hooks.agentSpawn`, and the IDE declares a
|
|
49
|
+
* `.kiro.hook` with `when.type=promptSubmit`. So Kiro ships
|
|
50
|
+
* `session-start.py` (agentSpawn overview), `inject-workflow-state.py`
|
|
51
|
+
* (per-turn breadcrumb), and `inject-subagent-context.py` (sub-agent
|
|
52
|
+
* spawn). The scripts emit a plain-text Kiro branch — Kiro adds a hook's
|
|
53
|
+
* stdout directly to the conversation context (no JSON envelope).
|
|
54
|
+
* - `inject-spec-context.py` — path-scoped spec injection. Claude Code uses
|
|
55
|
+
* PostToolUse Read/Edit/Write/MultiEdit; Codex and OpenCode use PreToolUse.
|
|
56
|
+
* Codex passes the native apply_patch payload directly. OpenCode's plugin
|
|
57
|
+
* adapts write/edit/apply_patch calls and blocks a FULL emission once so the
|
|
58
|
+
* model sees the specs before retrying. Class-2 platforms use
|
|
59
|
+
* `get_context.py --mode spec` pull mode instead.
|
|
60
|
+
* - Claude Code `statusLine` is intentionally not installed by default.
|
|
61
|
+
* Users can add their own statusLine command in `.claude/settings.json`,
|
|
62
|
+
* or opt in to the Trellis one via `trellis init --with-statusline`
|
|
63
|
+
* (installed from `templates/claude/hooks/`, not from this table — no
|
|
64
|
+
* other platform has a statusLine event).
|
|
65
|
+
* - ZCode (3.x) ships a workspace hook config at `.zcode/config.json` covering
|
|
66
|
+
* SessionStart + UserPromptSubmit in the main session, plus PreToolUse for
|
|
67
|
+
* `Agent|Task`. Live probing confirmed `hookSpecificOutput.updatedInput`
|
|
68
|
+
* reaches the sub-agent prompt, so ZCode is class-1 and ships
|
|
69
|
+
* `inject-subagent-context.py`.
|
|
70
|
+
*/
|
|
71
|
+
export declare const SHARED_HOOKS_BY_PLATFORM: Record<SharedHookPlatform, readonly SharedHookName[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Get all shared hook scripts. Content is platform-independent and can be
|
|
74
|
+
* written directly without placeholder resolution.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getSharedHookScripts(): HookScript[];
|
|
77
|
+
/**
|
|
78
|
+
* Get the shared hook scripts that a given platform actually registers.
|
|
79
|
+
* Drives `collectSharedHooks` so distribution never drifts from the
|
|
80
|
+
* per-platform capability declared above.
|
|
81
|
+
*/
|
|
82
|
+
export declare function getSharedHookScriptsForPlatform(platform: SharedHookPlatform): HookScript[];
|
|
83
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH,MAAM,WAAW,UAAU;IACzB,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,iCAAiC,GACjC,0BAA0B,GAC1B,4BAA4B,GAC5B,wBAAwB,CAAC;AAE7B,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,WAAW,GACX,OAAO,GACP,MAAM,GACN,MAAM,GACN,OAAO,CAAC;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAC3C,kBAAkB,EAClB,SAAS,cAAc,EAAE,CA0D1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,EAAE,CAWnD;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,kBAAkB,GAC3B,UAAU,EAAE,CAGd"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared hook templates — platform-independent Python hook scripts.
|
|
3
|
+
*
|
|
4
|
+
* These scripts read only from .trellis/ paths (JSONL, prd.md, spec/) and
|
|
5
|
+
* have no platform-specific placeholders. They can be written as-is to any
|
|
6
|
+
* platform's hooks directory.
|
|
7
|
+
*/
|
|
8
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
9
|
+
import { dirname, join } from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
11
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
const __dirname = dirname(__filename);
|
|
13
|
+
function readTemplate(relativePath) {
|
|
14
|
+
return readFileSync(join(__dirname, relativePath), "utf-8");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Which shared hooks each platform actually invokes. Single source of truth
|
|
18
|
+
* for shared-hook distribution — `collectSharedHooks` reads this table, and
|
|
19
|
+
* both `trellis init` and `trellis update` consume the map it returns.
|
|
20
|
+
*
|
|
21
|
+
* Routing rules encoded here:
|
|
22
|
+
* - `session-start.py` — shipped by every platform with a SessionStart
|
|
23
|
+
* hook event *except* codex + copilot, which bundle a platform-specific
|
|
24
|
+
* session-start.py under their own template dirs.
|
|
25
|
+
* - `inject-workflow-state.py` — every platform with a UserPromptSubmit
|
|
26
|
+
* (or equivalent) event. Kiro + codex self-included; platforms without
|
|
27
|
+
* per-turn main-session hooks are excluded.
|
|
28
|
+
* - `inject-subagent-context.py` — platforms with native sub-agent context
|
|
29
|
+
* delivery. Most use a PreToolUse prompt mutation; Codex uses its
|
|
30
|
+
* SubagentStart `additionalContext` event. Class-2 (pull-based) platforms
|
|
31
|
+
* such as copilot, gemini, qoder, and trae still load context from a
|
|
32
|
+
* self-loading agent profile.
|
|
33
|
+
* - `inject-shell-session-context.py` — platforms with a hook that fires
|
|
34
|
+
* *before* a shell command and receives both the session id and the pending
|
|
35
|
+
* command. That hook is the only channel by which session identity reaches
|
|
36
|
+
* `task.py`, which runs in the shell child: no platform researched exports a
|
|
37
|
+
* session id into that child (2026-08-05 audit of 21 platforms). Declaring a
|
|
38
|
+
* platform here also requires an entry in its own hook config template —
|
|
39
|
+
* `shared-hooks.test.ts` fails the build when the two disagree, because a
|
|
40
|
+
* script on disk that nothing invokes is indistinguishable from success.
|
|
41
|
+
* Kiro is deliberately absent: its two hook surfaces (CLI agent JSON
|
|
42
|
+
* `hooks.{agentSpawn,userPromptSubmit}` and IDE `.kiro.hook` `when.type`)
|
|
43
|
+
* publish no pre-tool trigger, and an unknown key in the agent JSON risks
|
|
44
|
+
* the whole agent failing to load. Settle it by running Kiro and checking
|
|
45
|
+
* its hook trigger list before adding it.
|
|
46
|
+
* - Kiro supports per-turn + spawn hooks on both surfaces (per the official
|
|
47
|
+
* docs https://kiro.dev/docs/cli/hooks/): the CLI custom agent declares
|
|
48
|
+
* `hooks.userPromptSubmit` + `hooks.agentSpawn`, and the IDE declares a
|
|
49
|
+
* `.kiro.hook` with `when.type=promptSubmit`. So Kiro ships
|
|
50
|
+
* `session-start.py` (agentSpawn overview), `inject-workflow-state.py`
|
|
51
|
+
* (per-turn breadcrumb), and `inject-subagent-context.py` (sub-agent
|
|
52
|
+
* spawn). The scripts emit a plain-text Kiro branch — Kiro adds a hook's
|
|
53
|
+
* stdout directly to the conversation context (no JSON envelope).
|
|
54
|
+
* - `inject-spec-context.py` — path-scoped spec injection. Claude Code uses
|
|
55
|
+
* PostToolUse Read/Edit/Write/MultiEdit; Codex and OpenCode use PreToolUse.
|
|
56
|
+
* Codex passes the native apply_patch payload directly. OpenCode's plugin
|
|
57
|
+
* adapts write/edit/apply_patch calls and blocks a FULL emission once so the
|
|
58
|
+
* model sees the specs before retrying. Class-2 platforms use
|
|
59
|
+
* `get_context.py --mode spec` pull mode instead.
|
|
60
|
+
* - Claude Code `statusLine` is intentionally not installed by default.
|
|
61
|
+
* Users can add their own statusLine command in `.claude/settings.json`,
|
|
62
|
+
* or opt in to the Trellis one via `trellis init --with-statusline`
|
|
63
|
+
* (installed from `templates/claude/hooks/`, not from this table — no
|
|
64
|
+
* other platform has a statusLine event).
|
|
65
|
+
* - ZCode (3.x) ships a workspace hook config at `.zcode/config.json` covering
|
|
66
|
+
* SessionStart + UserPromptSubmit in the main session, plus PreToolUse for
|
|
67
|
+
* `Agent|Task`. Live probing confirmed `hookSpecificOutput.updatedInput`
|
|
68
|
+
* reaches the sub-agent prompt, so ZCode is class-1 and ships
|
|
69
|
+
* `inject-subagent-context.py`.
|
|
70
|
+
*/
|
|
71
|
+
export const SHARED_HOOKS_BY_PLATFORM = {
|
|
72
|
+
claude: [
|
|
73
|
+
"session-start.py",
|
|
74
|
+
"inject-workflow-state.py",
|
|
75
|
+
"inject-subagent-context.py",
|
|
76
|
+
"inject-spec-context.py",
|
|
77
|
+
],
|
|
78
|
+
cursor: [
|
|
79
|
+
"session-start.py",
|
|
80
|
+
"inject-shell-session-context.py",
|
|
81
|
+
"inject-subagent-context.py",
|
|
82
|
+
],
|
|
83
|
+
codex: [
|
|
84
|
+
"inject-workflow-state.py",
|
|
85
|
+
"inject-subagent-context.py",
|
|
86
|
+
"inject-spec-context.py",
|
|
87
|
+
],
|
|
88
|
+
opencode: ["inject-spec-context.py"],
|
|
89
|
+
gemini: [
|
|
90
|
+
"session-start.py",
|
|
91
|
+
"inject-shell-session-context.py",
|
|
92
|
+
"inject-workflow-state.py",
|
|
93
|
+
],
|
|
94
|
+
qoder: [
|
|
95
|
+
"session-start.py",
|
|
96
|
+
"inject-shell-session-context.py",
|
|
97
|
+
"inject-workflow-state.py",
|
|
98
|
+
],
|
|
99
|
+
copilot: ["inject-workflow-state.py"],
|
|
100
|
+
codebuddy: [
|
|
101
|
+
"session-start.py",
|
|
102
|
+
"inject-shell-session-context.py",
|
|
103
|
+
"inject-workflow-state.py",
|
|
104
|
+
"inject-subagent-context.py",
|
|
105
|
+
],
|
|
106
|
+
droid: [
|
|
107
|
+
"session-start.py",
|
|
108
|
+
"inject-shell-session-context.py",
|
|
109
|
+
"inject-workflow-state.py",
|
|
110
|
+
"inject-subagent-context.py",
|
|
111
|
+
],
|
|
112
|
+
kiro: [
|
|
113
|
+
"session-start.py",
|
|
114
|
+
"inject-workflow-state.py",
|
|
115
|
+
"inject-subagent-context.py",
|
|
116
|
+
],
|
|
117
|
+
trae: [
|
|
118
|
+
"session-start.py",
|
|
119
|
+
"inject-shell-session-context.py",
|
|
120
|
+
"inject-workflow-state.py",
|
|
121
|
+
],
|
|
122
|
+
zcode: [
|
|
123
|
+
"session-start.py",
|
|
124
|
+
"inject-shell-session-context.py",
|
|
125
|
+
"inject-workflow-state.py",
|
|
126
|
+
"inject-subagent-context.py",
|
|
127
|
+
],
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Get all shared hook scripts. Content is platform-independent and can be
|
|
131
|
+
* written directly without placeholder resolution.
|
|
132
|
+
*/
|
|
133
|
+
export function getSharedHookScripts() {
|
|
134
|
+
const scripts = [];
|
|
135
|
+
const files = readdirSync(__dirname)
|
|
136
|
+
.filter((f) => f.endsWith(".py"))
|
|
137
|
+
.sort();
|
|
138
|
+
for (const file of files) {
|
|
139
|
+
scripts.push({ name: file, content: readTemplate(file) });
|
|
140
|
+
}
|
|
141
|
+
return scripts;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get the shared hook scripts that a given platform actually registers.
|
|
145
|
+
* Drives `collectSharedHooks` so distribution never drifts from the
|
|
146
|
+
* per-platform capability declared above.
|
|
147
|
+
*/
|
|
148
|
+
export function getSharedHookScriptsForPlatform(platform) {
|
|
149
|
+
const allowed = new Set(SHARED_HOOKS_BY_PLATFORM[platform]);
|
|
150
|
+
return getSharedHookScripts().filter((h) => allowed.has(h.name));
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/shared-hooks/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AA8BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,MAAM,EAAE;QACN,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;QAC5B,wBAAwB;KACzB;IACD,MAAM,EAAE;QACN,kBAAkB;QAClB,iCAAiC;QACjC,4BAA4B;KAC7B;IACD,KAAK,EAAE;QACL,0BAA0B;QAC1B,4BAA4B;QAC5B,wBAAwB;KACzB;IACD,QAAQ,EAAE,CAAC,wBAAwB,CAAC;IACpC,MAAM,EAAE;QACN,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,OAAO,EAAE,CAAC,0BAA0B,CAAC;IACrC,SAAS,EAAE;QACT,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,IAAI,EAAE;QACJ,kBAAkB;QAClB,0BAA0B;QAC1B,4BAA4B;KAC7B;IACD,IAAI,EAAE;QACJ,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;KAC3B;IACD,KAAK,EAAE;QACL,kBAAkB;QAClB,iCAAiC;QACjC,0BAA0B;QAC1B,4BAA4B;KAC7B;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC;SACjC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,EAAE,CAAC;IAEV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAC7C,QAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,OAAO,oBAAoB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Pre-shell hook: bridge the host's session identity into task.py.
|
|
3
|
+
|
|
4
|
+
No researched platform exports a session id into its shell tool's child
|
|
5
|
+
process, but every hook-capable one puts that id on hook stdin. So the hook
|
|
6
|
+
that fires just before a shell command writes a short-lived runtime ticket
|
|
7
|
+
whenever the pending command calls `task.py start/current/finish`, and the
|
|
8
|
+
task script consumes it when it has no native session environment.
|
|
9
|
+
|
|
10
|
+
Registered on whichever pre-shell event the host provides — Cursor's
|
|
11
|
+
`beforeShellExecution`, Claude-shaped `PreToolUse`, Gemini's `BeforeTool` —
|
|
12
|
+
which is why the only thing here that knows about payload variation is
|
|
13
|
+
`_pending_shell_command`.
|
|
14
|
+
"""
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import hashlib
|
|
18
|
+
import json
|
|
19
|
+
import os
|
|
20
|
+
import shlex
|
|
21
|
+
import sys
|
|
22
|
+
import time
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from typing import Any
|
|
25
|
+
|
|
26
|
+
# Hook hosts send UTF-8 JSON regardless of the process locale.
|
|
27
|
+
_stdin_reconfigure = getattr(sys.stdin, "reconfigure", None)
|
|
28
|
+
if callable(_stdin_reconfigure):
|
|
29
|
+
try:
|
|
30
|
+
_stdin_reconfigure(encoding="utf-8", errors="replace")
|
|
31
|
+
except (OSError, ValueError):
|
|
32
|
+
pass
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
DIR_WORKFLOW = ".trellis"
|
|
36
|
+
DIR_RUNTIME = ".runtime"
|
|
37
|
+
DIR_SHELL_TICKETS = "shell-tickets"
|
|
38
|
+
SESSION_SUBCOMMANDS = {"start", "current", "finish"}
|
|
39
|
+
TICKET_TTL_SECONDS = 30
|
|
40
|
+
CONTEXT_IDENTITY_KEYS = (
|
|
41
|
+
"session_id",
|
|
42
|
+
"sessionId",
|
|
43
|
+
"sessionID",
|
|
44
|
+
"conversation_id",
|
|
45
|
+
"conversationId",
|
|
46
|
+
"conversationID",
|
|
47
|
+
"transcript_path",
|
|
48
|
+
"transcriptPath",
|
|
49
|
+
"transcript",
|
|
50
|
+
)
|
|
51
|
+
# Tool-call payloads nest the command one level down; same casing spread as
|
|
52
|
+
# CONTEXT_IDENTITY_KEYS above.
|
|
53
|
+
TOOL_INPUT_KEYS = ("tool_input", "toolInput")
|
|
54
|
+
# Answering a shell-execution event with an explicit allow is what keeps
|
|
55
|
+
# Cursor from re-prompting for a command Trellis itself asked for. Tool-call
|
|
56
|
+
# hosts read a different response schema, so they get no answer at all rather
|
|
57
|
+
# than a key they would have to ignore.
|
|
58
|
+
SHELL_EVENT_RESPONSE = {"permission": "allow"}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _string_value(value: Any) -> str | None:
|
|
62
|
+
if isinstance(value, str):
|
|
63
|
+
stripped = value.strip()
|
|
64
|
+
return stripped or None
|
|
65
|
+
return None
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _resolve_trellis_root(hook_input: dict[str, Any]) -> Path | None:
|
|
69
|
+
"""Locate the project root, trying the payload cwd and then our own.
|
|
70
|
+
|
|
71
|
+
Hosts disagree about what `cwd` means. CodeBuddy IDE 4.10.4 sends `"/"` for
|
|
72
|
+
every PreToolUse event, so trusting the payload alone finds no `.trellis`
|
|
73
|
+
and the bridge silently does nothing — the hook is invoked, writes no
|
|
74
|
+
ticket, and `task.py start` degrades. Observed with a wildcard probe:
|
|
75
|
+
|
|
76
|
+
{"cwd": "/", "tool_name": "Bash", "tool_input": {"command": "ls …"}}
|
|
77
|
+
|
|
78
|
+
The hook's own cwd is reliable where the payload is not: hosts launch it
|
|
79
|
+
from the project root, which is why a relative `command` in settings.json
|
|
80
|
+
resolves at all. Try the payload first (it is right on hosts that set it,
|
|
81
|
+
and survives a host that runs hooks from elsewhere), then fall back.
|
|
82
|
+
"""
|
|
83
|
+
candidates: list[Path] = []
|
|
84
|
+
payload_cwd = _string_value(hook_input.get("cwd"))
|
|
85
|
+
if payload_cwd:
|
|
86
|
+
candidates.append(Path(payload_cwd))
|
|
87
|
+
try:
|
|
88
|
+
candidates.append(Path(os.getcwd()))
|
|
89
|
+
except OSError:
|
|
90
|
+
pass
|
|
91
|
+
|
|
92
|
+
for candidate in candidates:
|
|
93
|
+
root = _find_trellis_root(candidate)
|
|
94
|
+
if root is not None:
|
|
95
|
+
return root
|
|
96
|
+
return None
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _find_trellis_root(start: Path) -> Path | None:
|
|
100
|
+
current = start.resolve()
|
|
101
|
+
while True:
|
|
102
|
+
if (current / DIR_WORKFLOW).is_dir():
|
|
103
|
+
return current
|
|
104
|
+
if current == current.parent:
|
|
105
|
+
return None
|
|
106
|
+
current = current.parent
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def _runtime_ticket_dir(root: Path) -> Path:
|
|
110
|
+
return root / DIR_WORKFLOW / DIR_RUNTIME / DIR_SHELL_TICKETS
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _pending_shell_command(hook_input: dict[str, Any]) -> tuple[str, dict[str, Any] | None]:
|
|
114
|
+
"""Read the pending shell command out of either hook payload shape.
|
|
115
|
+
|
|
116
|
+
Returns the command plus the response envelope that shape expects:
|
|
117
|
+
|
|
118
|
+
- shell-execution event (Cursor `beforeShellExecution`) — the command sits
|
|
119
|
+
at the top level and the host wants a permission decision back;
|
|
120
|
+
- tool-call event (`PreToolUse`, `BeforeTool`) — the command sits under
|
|
121
|
+
`tool_input`, and the host reads a schema this hook has no opinion on.
|
|
122
|
+
|
|
123
|
+
An ordered fallback, not a platform switch: a third payload shape extends
|
|
124
|
+
the same function. Anything else yields ("", None) so main() no-ops.
|
|
125
|
+
"""
|
|
126
|
+
command = _string_value(hook_input.get("command"))
|
|
127
|
+
if command:
|
|
128
|
+
return command, SHELL_EVENT_RESPONSE
|
|
129
|
+
|
|
130
|
+
for key in TOOL_INPUT_KEYS:
|
|
131
|
+
tool_input = hook_input.get(key)
|
|
132
|
+
if not isinstance(tool_input, dict):
|
|
133
|
+
continue
|
|
134
|
+
command = _string_value(tool_input.get("command"))
|
|
135
|
+
if command:
|
|
136
|
+
return command, None
|
|
137
|
+
|
|
138
|
+
return "", None
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def _host_platform_name() -> str | None:
|
|
142
|
+
"""Name the host from the config directory this hook was installed into.
|
|
143
|
+
|
|
144
|
+
Every platform puts its hooks under its own dotted directory
|
|
145
|
+
(`.cursor/hooks/`, `.factory/hooks/`, …), so the deepest dotted path
|
|
146
|
+
segment identifies the host without a table of platform names here. It
|
|
147
|
+
matters because the context key must agree with the one the platform's
|
|
148
|
+
other hooks compute — a ticket keyed differently would write a session
|
|
149
|
+
file no later hook ever reads.
|
|
150
|
+
"""
|
|
151
|
+
for part in reversed(Path(sys.argv[0]).parts):
|
|
152
|
+
if part.startswith(".") and part not in (".", "..") and len(part) > 1:
|
|
153
|
+
return part[1:]
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def _load_active_task_resolver(root: Path):
|
|
158
|
+
scripts_dir = root / DIR_WORKFLOW / "scripts"
|
|
159
|
+
if str(scripts_dir) not in sys.path:
|
|
160
|
+
sys.path.insert(0, str(scripts_dir))
|
|
161
|
+
from common.active_task import resolve_context_key # type: ignore[import-not-found]
|
|
162
|
+
|
|
163
|
+
return resolve_context_key
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def _extract_task_subcommands(command: str) -> list[dict[str, str]]:
|
|
167
|
+
try:
|
|
168
|
+
tokens = shlex.split(command, posix=os.name != "nt")
|
|
169
|
+
except ValueError:
|
|
170
|
+
return []
|
|
171
|
+
|
|
172
|
+
subcommands: list[dict[str, str]] = []
|
|
173
|
+
for index, token in enumerate(tokens[:-1]):
|
|
174
|
+
if Path(token.strip("\"'")).name != "task.py":
|
|
175
|
+
continue
|
|
176
|
+
name = tokens[index + 1]
|
|
177
|
+
if name not in SESSION_SUBCOMMANDS:
|
|
178
|
+
continue
|
|
179
|
+
item = {"name": name}
|
|
180
|
+
if name == "start" and index + 2 < len(tokens):
|
|
181
|
+
item["task_ref"] = tokens[index + 2]
|
|
182
|
+
subcommands.append(item)
|
|
183
|
+
return subcommands
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def _cleanup_expired_tickets(ticket_dir: Path, now: float) -> None:
|
|
187
|
+
if not ticket_dir.is_dir():
|
|
188
|
+
return
|
|
189
|
+
for ticket_path in ticket_dir.glob("*.json"):
|
|
190
|
+
try:
|
|
191
|
+
data = json.loads(ticket_path.read_text(encoding="utf-8"))
|
|
192
|
+
except (json.JSONDecodeError, OSError):
|
|
193
|
+
continue
|
|
194
|
+
expires_at = data.get("expires_at_epoch")
|
|
195
|
+
if isinstance(expires_at, (int, float)) and expires_at < now:
|
|
196
|
+
try:
|
|
197
|
+
ticket_path.unlink()
|
|
198
|
+
except OSError:
|
|
199
|
+
pass
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def _has_context_identity(hook_input: dict[str, Any]) -> bool:
|
|
203
|
+
return any(_string_value(hook_input.get(key)) for key in CONTEXT_IDENTITY_KEYS)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def _write_ticket(
|
|
207
|
+
root: Path,
|
|
208
|
+
hook_input: dict[str, Any],
|
|
209
|
+
context_key: str,
|
|
210
|
+
command: str,
|
|
211
|
+
platform_name: str | None,
|
|
212
|
+
subcommands: list[dict[str, str]],
|
|
213
|
+
) -> None:
|
|
214
|
+
now = time.time()
|
|
215
|
+
ticket_dir = _runtime_ticket_dir(root)
|
|
216
|
+
ticket_dir.mkdir(parents=True, exist_ok=True)
|
|
217
|
+
_cleanup_expired_tickets(ticket_dir, now)
|
|
218
|
+
|
|
219
|
+
digest = hashlib.sha256(
|
|
220
|
+
f"{context_key}\0{command}\0{now}".encode("utf-8"),
|
|
221
|
+
).hexdigest()[:16]
|
|
222
|
+
ticket_path = ticket_dir / f"{int(now * 1000)}-{digest}.json"
|
|
223
|
+
|
|
224
|
+
payload = {
|
|
225
|
+
# Debugging metadata. The consumer accepts a ticket on freshness, repo
|
|
226
|
+
# and subcommand — never on this field.
|
|
227
|
+
"platform": platform_name,
|
|
228
|
+
"context_key": context_key,
|
|
229
|
+
"conversation_id": _string_value(hook_input.get("conversation_id")),
|
|
230
|
+
"session_id": _string_value(hook_input.get("session_id")),
|
|
231
|
+
"generation_id": _string_value(hook_input.get("generation_id")),
|
|
232
|
+
# The resolved project root, not the payload's cwd. The consumer
|
|
233
|
+
# rejects a ticket whose cwd is outside the repo, and CodeBuddy IDE
|
|
234
|
+
# 4.10.4 reports "/" for every PreToolUse event — a ticket carrying
|
|
235
|
+
# that is written correctly and then discarded on arrival. Recording
|
|
236
|
+
# the root we actually resolved keeps the containment check meaningful
|
|
237
|
+
# without trusting a field the host may not populate.
|
|
238
|
+
"cwd": str(root),
|
|
239
|
+
# Kept separately so a wrong host cwd stays visible when debugging.
|
|
240
|
+
"host_cwd": _string_value(hook_input.get("cwd")),
|
|
241
|
+
"command": command,
|
|
242
|
+
"subcommands": subcommands,
|
|
243
|
+
"created_at_epoch": now,
|
|
244
|
+
"expires_at_epoch": now + TICKET_TTL_SECONDS,
|
|
245
|
+
}
|
|
246
|
+
ticket_path.write_text(
|
|
247
|
+
json.dumps(payload, indent=2, ensure_ascii=False) + "\n",
|
|
248
|
+
encoding="utf-8",
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def main() -> int:
|
|
253
|
+
if os.environ.get("TRELLIS_HOOKS") == "0" or os.environ.get("TRELLIS_DISABLE_HOOKS") == "1":
|
|
254
|
+
return 0
|
|
255
|
+
|
|
256
|
+
try:
|
|
257
|
+
hook_input = json.loads(sys.stdin.read())
|
|
258
|
+
except (json.JSONDecodeError, ValueError):
|
|
259
|
+
hook_input = {}
|
|
260
|
+
if not isinstance(hook_input, dict):
|
|
261
|
+
hook_input = {}
|
|
262
|
+
|
|
263
|
+
command, response = _pending_shell_command(hook_input)
|
|
264
|
+
subcommands = _extract_task_subcommands(command)
|
|
265
|
+
if not subcommands:
|
|
266
|
+
return 0
|
|
267
|
+
|
|
268
|
+
root = _resolve_trellis_root(hook_input)
|
|
269
|
+
if root is None:
|
|
270
|
+
return 0
|
|
271
|
+
|
|
272
|
+
if not _has_context_identity(hook_input):
|
|
273
|
+
return 0
|
|
274
|
+
|
|
275
|
+
platform_name = _host_platform_name()
|
|
276
|
+
resolve_context_key = _load_active_task_resolver(root)
|
|
277
|
+
context_key = resolve_context_key(hook_input, platform=platform_name)
|
|
278
|
+
if not context_key:
|
|
279
|
+
return 0
|
|
280
|
+
|
|
281
|
+
try:
|
|
282
|
+
_write_ticket(root, hook_input, context_key, command, platform_name, subcommands)
|
|
283
|
+
except OSError:
|
|
284
|
+
return 0
|
|
285
|
+
|
|
286
|
+
if response is not None:
|
|
287
|
+
print(json.dumps(response, ensure_ascii=False))
|
|
288
|
+
return 0
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
if __name__ == "__main__":
|
|
292
|
+
sys.exit(main())
|